Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude3 A0 {9 t# C' H2 Y' ?
Сборка L2j
' W& i$ v) z9 D* L# cПример основан на сборке L2J.7 W' J/ J' _+ y& L, H/ ~
0 i. J; l! z/ kПервое что нужно сделать, это добавить необходимые Java классы в квест.
' H" H; z; G. Y, Y; c2 t
0 q3 Q* ~+ w% o/ S- <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>- }! M8 N0 E9 O- `
- , G: L! C l) g/ ^. x
- </div>
Скопировать код- import sys
+ c ?, U9 i; k9 l* }2 Y+ H - from net.sf.l2j.gameserver.model.quest import State
, r6 ^- U/ v. U( T1 U( e' [) C3 G% ~1 E - from net.sf.l2j.gameserver.model.quest import QuestState; G6 ~9 V4 j: y* C: `" c/ O
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
$ i. @- j, i; {6 N$ |4 |: I - FANGS_ITEM_ID = 1859
2 t0 E; q- C) V+ K - DROP_RATE = 500000
4 b. s8 o% ^$ ~+ j D - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :0 t! D) x0 U4 D
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
4 C2 x" i5 @8 u2 W7 v4 C7 K
+ H5 s( V/ r; c5 E" E- def completed(st) :
' H$ J* w4 D/ d$ p% F- N$ C - st.setState(COMPLETED)
5 L" H% T7 J, Y9 g - st.clearQuestDrops()
4 L; K8 X% G# |. M& X( |" @- x' C/ { - st.takeItems(FANGS_ITEM_ID,-1)
m2 t7 l x8 X9 S# o/ [ - st.giveItems(WORLD_MAP_ITEM_ID,1)
4 M- Y+ A0 ?% K0 O - st.exitQuest(False)
2 H5 t' y- o' y7 b - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
3 m1 d9 q* p6 y, T
' D5 [& k& r) h% u1 D6 D
e2 O+ F+ a4 O: ?1 i! A5 c1 `) }' R7 M7 y7 T% h( M: S: A
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):, S) W% ]# ?0 |3 d2 B
+ R% E( j6 {; J/ v2 d/ q; c1 c- def check(st) :
. M) R0 H8 c1 p( V# c% W4 k - if getCount(st) >= 4 :
9 ^# \! a5 Z0 x* m - completed(st)
( e" Z7 k2 s( S - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
7 \ i! f3 U8 q1 @. d7 W3 r3 o; A8 q
- class Quest (JQuest):
. W. X3 _3 c% F+ a - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr), @0 a+ p7 U3 P, K! K
- def onEvent (self,event,st):
: r" N# g0 }' [+ c1 H8 U4 H' p& Y6 e - id = st.getState()
$ q) N( N6 a5 x, q - if id == CREATED : st.setState(STARTED)
- N% n" Q0 ^5 p - elif id == COMPLETED: pass& f4 H) }. G& z8 N# h8 A' L
- elif id == STARTED : check(st)
: J! X6 L# ^2 Z" T - return
Скопировать код- QUEST.setInitialState(CREATED)
' l8 Z3 N: n! @3 }' u- a+ ] - QUEST.addStartNpc(7056)
Скопировать код
" `" g$ h, w/ d) x7 S0 Q* o4 N3 y7 i3 q3 Q5 g. w+ V8 d
|