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