Top.Mail.Ru

[Квесты] Создаём собственные квесты (часть 1)

[Скопировать ссылку]
admin Опубликовано 2024-9-17 18:39:47 | Показать все сообщения |Режим чтения Распечатать Назад Вперед

Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!

Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться

x
Хроники        Interlude
7 r$ D1 E* k! VСборка        L2j5 Z' n/ f; H* c  L" q
Пример основан на сборке L2J.0 g4 F7 T3 Y7 P+ z/ [2 {* r' {3 F
; `% k( j/ a4 T
Первое что нужно сделать, это добавить необходимые Java классы в квест.
' ?0 m' W/ w3 u/ g9 k
  1. 5 P* X8 i/ b) Z1 M/ X: x% p
  2. <div><span style="color: rgb(20, 20, 20); font-family: Monaco, Menlo, Consolas, &quot;Roboto Mono&quot;, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace; font-size: 12px; white-space-collapse: preserve; background-color: rgb(245, 245, 245);">(net.sf.l2j.gameserver.model.quest).</span>: s% Q  c4 z' P6 w* \9 [
  3. * f2 P5 |" X) r  V% L4 x. t
  4. </div>
Скопировать код
  1. import sys
    / L9 N6 L! T0 C; A1 }  M
  2. from net.sf.l2j.gameserver.model.quest import State
    $ E, A" m! ~0 Q
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    . {3 B' V! ?3 K3 C; }
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082! b5 g* N1 F. |5 r. V; f& ?
  2. FANGS_ITEM_ID = 1859) x  I' G# j9 ~  F
  3. DROP_RATE = 500000
    3 u0 L5 I: S  d
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    ) c* W& ^9 V* z0 e) L6 `3 u) \
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):; h' x1 ?$ O; h2 w7 Q5 l; T$ \
2 B, p3 Q6 X3 x! r
  1. def completed(st) :7 Q. Z9 ^; |9 O3 o9 }' m& Y7 d
  2. st.setState(COMPLETED)
    ( X* f! Q; [1 `0 Y' l3 ~. Z) P8 Y
  3. st.clearQuestDrops()5 S( ?" r- g5 j* F& @. E
  4. st.takeItems(FANGS_ITEM_ID,-1)
    0 A% o  G9 \6 I3 v9 [& G+ I7 g1 c
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    * H5 p' L, K% a. q+ x! c
  6. st.exitQuest(False)
    * C4 U: b6 u# O# y
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)), E) i" J% e& Y2 B" |
$ T2 I( e2 f! C
8 Y9 j1 s& D, [7 |7 \) W! u+ O) C
0 R4 X( \$ h4 z* x" M3 L! X+ v
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
" Q( u. K; X& J  X+ v6 N+ t# p  W, q8 a: n- _% A4 l" e
  1. def check(st) :. a" [/ d* b' w) i1 g
  2. if getCount(st) >= 4 :/ q4 N% V" R$ Q% G9 O8 \
  3. completed(st)& O8 x6 _6 d% e
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.2 n" y" u- G) k
- y3 k. ~$ Q% H2 `! B
  1. class Quest (JQuest):
    : e7 I6 a* h! j2 d/ f8 t
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)1 y8 d$ _! |/ o$ l
  3. def onEvent (self,event,st):& X' h( z" ~4 }# T7 \; f
  4. id = st.getState()
    / y- h( i$ w* `
  5. if id == CREATED : st.setState(STARTED)
    & N9 d8 N/ B% w. i2 `1 W
  6. elif id == COMPLETED: pass
    5 E* b9 b3 x% A8 {! A
  7. elif id == STARTED : check(st)% m5 D$ P' @5 X  I- @
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)# r# |% ?8 m8 n4 b4 f, q' q' _
  2. QUEST.addStartNpc(7056)
Скопировать код

, w# C5 e  G  W& B# j, k) e) k8 R0 r0 [0 `# q% K
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

Правил начисления баллов

Опубликовать
Сектор творческих людей
Горячая линия

638638758

С понедельника по воскресенье с 9:00 до 23:00

Обратной связь

admin@artace.ru Онлайн

QR-код

Powered by Discuz! X3.5© 2001-2021 Comsenz Inc.