Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
# r4 k0 m- A, ~" z8 |Сборка        L2j
! Q8 V3 Q! Z+ o, gПример основан на сборке L2J.$ [1 |. u  b/ F' f# |  u6 K

# e# a- |& g, a+ C0 @# j" eПервое что нужно сделать, это добавить необходимые Java классы в квест.
* o! {7 ^! t7 R! Y" m% `
  1. + `3 j% P( r$ Z7 x' g8 j+ K
  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>- |! e/ m3 U3 j5 s

  3. 1 [3 C4 K/ M3 {9 @9 Q
  4. </div>
Скопировать код
  1. import sys7 @1 E" @5 _/ [2 ^. {$ K* e% L
  2. from net.sf.l2j.gameserver.model.quest import State: f" f3 Q( ?0 |& G' T8 m2 j6 N( s8 w
  3. from net.sf.l2j.gameserver.model.quest import QuestState7 l; g; i. s# Q) C, g! k
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082' f" O2 r* @( B( c/ T( Y
  2. FANGS_ITEM_ID = 1859& a! h3 P+ G2 |9 x# p5 N
  3. DROP_RATE = 500000
    % J: z. l$ {. h2 h) G& U2 C; {' b- {
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    : X" o& x5 O. H+ X* P  o
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):# j% D3 I$ V9 A* ?
5 E/ s* H# J  t9 v) d- T
  1. def completed(st) :2 S/ O& i, I0 v( ~& p
  2. st.setState(COMPLETED)# E) e4 R" `5 A7 o
  3. st.clearQuestDrops()2 Z  G2 ~9 v" T7 I6 ]
  4. st.takeItems(FANGS_ITEM_ID,-1)
    & ^* S/ ~: i8 U' h. w% `
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)+ V, p- o- a9 X7 U6 U" k: v; h
  6. st.exitQuest(False)0 g* c; G: }5 A0 \# b
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
4 _1 ]7 A0 V' s6 _/ |5 Y
' T  O2 \+ {9 L) f+ O
/ f7 r) L- E, ?+ y6 M7 d4 @: I
8 o3 p8 h. C7 R( M% Q" j0 F! a
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
: r" U% V0 _, C+ _6 c: W, t( t) X* g0 g  o1 d. m4 H, H
  1. def check(st) :9 L% r7 k+ _& C  l1 I
  2. if getCount(st) >= 4 :! K+ k* e; D6 P& C2 a) o. |
  3. completed(st)) n2 V6 z! a2 v% s
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.6 U/ K; i, C/ a. e
3 p) y9 a. W+ P9 U% ^
  1. class Quest (JQuest):) z. b7 I& @5 D4 q5 c+ _8 ]
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)) o! }8 q6 E1 l& @& k7 ^
  3. def onEvent (self,event,st):
    1 i+ i, f+ ^! H7 a' H. u! L/ b' R
  4. id = st.getState(): L# k9 J( K' X* r* i7 V
  5. if id == CREATED : st.setState(STARTED)/ |# j3 W  b/ _& B% Q; b) h! Z
  6. elif id == COMPLETED: pass
    4 ~( Z7 @8 R0 r, C3 f
  7. elif id == STARTED : check(st)
    5 P0 V. `% `3 b# C7 f
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)8 q( f. W; [% h7 G2 m& s4 c# ]8 O
  2. QUEST.addStartNpc(7056)
Скопировать код
6 j) D! y4 Z2 K# ?' A& X+ u

' H+ S8 J4 U# i& y; `) U
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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