Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude# F- Z6 n) I4 X) j
Сборка        L2j( q# Y$ r) w2 ?' D( s
Пример основан на сборке L2J.
1 z# X# O/ h& ^; J* V( y/ F1 T" X1 t7 o3 @2 J5 h
Первое что нужно сделать, это добавить необходимые Java классы в квест.
2 R% D1 x& \/ n; {  F$ u

  1. * w( ^1 `$ W7 h6 E% P: `- n
  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>9 d7 D! j. G; Z, h4 _3 N
  3. ( ?8 S) e1 K7 b3 t, P6 w8 A4 n
  4. </div>
Скопировать код
  1. import sys% O* I0 A0 Q+ ]9 A. A$ J: ?) H& K
  2. from net.sf.l2j.gameserver.model.quest import State
    # F2 O5 C# S$ v9 S+ l" i$ |
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    / F# p- p. u3 c. H' S
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    1 n1 [3 d9 }8 `+ p) U! ^0 ^
  2. FANGS_ITEM_ID = 1859
    7 n# D3 Q3 a4 ^) P$ \  g; Y2 f1 ~
  3. DROP_RATE = 5000004 @' `, e" x7 n9 H
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    8 J% U$ G, c- b3 d
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
4 [1 g& F# G! P
  d( \) p3 N/ \) f
  1. def completed(st) :
    6 C+ H, o& u" ~5 I3 L
  2. st.setState(COMPLETED)5 G1 p' l+ H) [. N9 ]
  3. st.clearQuestDrops()+ L7 W  z) n! y% ~
  4. st.takeItems(FANGS_ITEM_ID,-1)
    5 z" G% S# r& _1 V2 V: Y1 a
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)  W+ h0 e, _1 \' k: k
  6. st.exitQuest(False)( ?. V7 t# |" T9 L- C" q# |. ?& b4 q# }
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
) K: C- N5 c: b5 a* d" G$ X, r
6 M% e6 k/ g9 h/ R0 E  y; i: g( M* r/ v' L. F
. S+ _8 o+ k, X& ]
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
$ Z  C9 A, F# a$ q$ ]7 o
7 V% g: I1 `) o5 q
  1. def check(st) :
    - Y, T2 P* e0 }' @
  2. if getCount(st) >= 4 :
    - o# o: ?, N9 P+ O0 ]0 _' C! F
  3. completed(st)
    & k( w2 D' u1 v& y. D
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.- a4 n- k& M1 h7 ?3 p1 u
, [# ^# B4 O( W7 y4 i
  1. class Quest (JQuest):
    - ]2 ]% N9 G" e1 g9 R' h
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    % G5 T) ^' i+ M7 V# N; c
  3. def onEvent (self,event,st):' Y) Y0 m( m) n1 Z, V
  4. id = st.getState()2 T: I/ U- f3 S: n9 ?( w
  5. if id == CREATED : st.setState(STARTED)
    $ N3 w0 n9 w& u1 r0 _; e1 W6 n
  6. elif id == COMPLETED: pass
    , v( q5 R: I9 }3 `
  7. elif id == STARTED : check(st)
    , D, e0 R0 f, J$ y
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED), l; T+ s, e' J  }3 I; r2 `% p6 z
  2. QUEST.addStartNpc(7056)
Скопировать код

& W6 [* X4 u; X  v) J- ~, ^2 l& L4 }- y
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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