Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
' d( {$ X- a% nСборка        L2j
* }* Q% h2 ?. x0 yПример основан на сборке L2J.
5 a4 t9 w+ f3 t2 d) P5 T4 @, {. S
# Y: Z$ b8 P7 f$ e0 @$ xПервое что нужно сделать, это добавить необходимые Java классы в квест.
9 W  D- h! r/ b7 Q7 v. w- o

  1. # B6 R* `$ r1 y8 y
  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>6 d; T' _5 ~5 `& d% K% `

  3. / d1 @) D* K6 N3 m& k
  4. </div>
Скопировать код
  1. import sys4 O- u  H- C3 f2 D/ D
  2. from net.sf.l2j.gameserver.model.quest import State8 e6 T" f; ]" |# F
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    1 x5 O1 E' s; o2 b& W
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082) J! C, t# g& N
  2. FANGS_ITEM_ID = 1859
    . r. a0 l6 T2 C0 m) T( |6 z" w4 D
  3. DROP_RATE = 500000
    * V/ [+ x; W4 G$ l2 y  W2 ?
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    4 l+ s. [, h" U7 a
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):* G2 H8 B( ~. X+ v* f5 U6 t+ b& t% x& d  I

+ n8 B/ B* P: y4 W9 K& _  V3 |" C6 u
  1. def completed(st) :
    + u! |% \/ h+ N: a& e+ p! y& V# W6 }, O
  2. st.setState(COMPLETED)
    - k9 B0 F) m/ b/ I
  3. st.clearQuestDrops()6 I* [9 W2 }' r6 C$ n
  4. st.takeItems(FANGS_ITEM_ID,-1)
    ' D% ]" V& C" V) z
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)$ p! y9 T$ z& N" K8 `
  6. st.exitQuest(False)8 J0 u- U- Q# J$ x7 b$ u
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))+ N) n* V5 D1 o8 A
* Y6 v) |! C$ e

) d6 x9 k, a) T# i  y5 _5 o
) K7 t0 X: [! R3 Y) _/ X$ B1 N
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
0 H( X2 e0 t$ f4 c; B2 g4 m( b2 s7 f
  1. def check(st) :
    # t* z4 O* h) B5 ?" d* Y
  2. if getCount(st) >= 4 :
    ; t! j& S' B' r
  3. completed(st)' s& J' _9 e% D: M6 u7 [3 i
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.& S  V* G; D5 Q0 B9 r7 Z4 Z* w

5 w, P* v  u0 s- o4 ~: o  C
  1. class Quest (JQuest):. Q- ]! z2 Z+ }+ ?( |$ X8 V+ i8 ^
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    # _2 j% Z: _, G4 G: n
  3. def onEvent (self,event,st):
    4 f6 g4 S, v, h
  4. id = st.getState()
    9 v! k9 Y/ ?% F$ h7 D% M
  5. if id == CREATED : st.setState(STARTED)
    3 H5 t& A' S" ?6 x; i0 |, ]* M; W& E
  6. elif id == COMPLETED: pass
    ( e' p3 y& Z0 `$ }; j' E
  7. elif id == STARTED : check(st)8 r$ X. F5 B4 F: o
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)" m3 K& y( ^/ `0 Y7 o
  2. QUEST.addStartNpc(7056)
Скопировать код

! D  d  G3 }- L
. x" B2 C0 Q- `' u7 N1 X( |
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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