Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
$ x" t! |6 W* e" G5 Q5 ~Сборка        L2j  \% a: V3 Z, m9 q" Q- i2 [* @
Пример основан на сборке L2J.
# I5 r) B+ M  G0 N. Y! B& r3 K" Q" V, J
Первое что нужно сделать, это добавить необходимые Java классы в квест.1 p/ x& a4 m; ~  E
  1. 1 K. A7 ], R  v( Q9 @
  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>
    , N8 q  ~0 l( D$ |$ J3 u  E
  3. ) t/ y1 h/ T9 V4 z* Z, O
  4. </div>
Скопировать код
  1. import sys
    % B+ ~9 S, y# e4 C4 s+ W
  2. from net.sf.l2j.gameserver.model.quest import State! b- ?  n1 B. [* j* c6 U
  3. from net.sf.l2j.gameserver.model.quest import QuestState6 W4 [# N" ~, s
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120824 E3 `* u. H- Z( v$ O7 j
  2. FANGS_ITEM_ID = 1859
    4 Y1 t# r' i( u0 ~6 J( H7 @
  3. DROP_RATE = 500000
    7 y/ }( t* j, l3 u- W) t
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
      V9 _. O& `( q( M' g
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):7 q& @; n2 J; B
) T' W6 v: {7 v. `
  1. def completed(st) :
    6 J2 E; s  D8 H. [, \
  2. st.setState(COMPLETED)& {& R% X/ M+ k( V1 d
  3. st.clearQuestDrops()+ M4 j1 n% ^! f! G, T
  4. st.takeItems(FANGS_ITEM_ID,-1)2 J) C7 t  l+ ]5 T% @
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)  D, m7 X0 C5 g6 @1 o$ R8 I
  6. st.exitQuest(False)7 V3 ^0 C% r7 @/ E
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
4 h* e. B. `$ ^; U& v, h/ [' E5 @( E, z. E% g0 m

% J: k+ ^. f# D9 O
6 }5 T/ o5 m3 a
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
9 v  o  H0 Z, `- D0 w( t5 y1 d! t  n+ t/ i. @/ l
  1. def check(st) :
    % v# D# q. D4 u) ?2 V' L  S0 O
  2. if getCount(st) >= 4 :
    " H9 v: d+ r- y& W% B
  3. completed(st)
    1 c) f. m. U! r$ I
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
1 k9 X5 h; L- Q, F6 [9 g' ]8 N( a6 x  p/ r1 z& X
  1. class Quest (JQuest):
    - R* g) ^( ^, b/ J3 z
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    / f1 S0 u$ {: `. a. u# u; S
  3. def onEvent (self,event,st):1 ]/ }+ M* G" m) x7 a$ C, u
  4. id = st.getState()6 I! W7 I$ Z0 _" i: S0 @" b
  5. if id == CREATED : st.setState(STARTED)0 s; O: z4 D, L: q! X/ S! I7 `
  6. elif id == COMPLETED: pass: w. Q4 V+ O5 C* ^
  7. elif id == STARTED : check(st)
    1 Q: P0 [+ g1 H# W! u3 t4 n& ^
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED). s% r" T* H& d6 i1 p
  2. QUEST.addStartNpc(7056)
Скопировать код
7 d8 b; K* }* h6 _( I" S  \
" R, G: d8 v# I; l  {+ I1 ?1 w! v
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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