from net.sf.l2j.gameserver.model.quest import State $ Q$ h+ c- k G* y
from net.sf.l2j.gameserver.model.quest import QuestState " k& n# Z! r$ n& ^8 T6 l7 G
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
KELTIR_NPC_ID = 12082; R7 ~* m/ [8 |3 r! N* j* i
FANGS_ITEM_ID = 1859 3 _' L+ V) U) ]7 O. L, d' s3 T
DROP_RATE = 500000 $ P" ^! y2 L. ^. ^1 u F0 e
WORLD_MAP_ITEM_ID = 1665
Скопировать код
def getCount(st) : : t) y7 x5 z* U9 o( t
return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):8 R4 G- P- N% |! `5 o' X1 I
4 b5 d9 E3 i. P' j V% W; O w& Q
def completed(st) :8 i8 M/ H& i7 m0 M6 l! d! {
st.setState(COMPLETED) % Z g' |( p* L; c) r! t4 }
st.clearQuestDrops() 6 ?; [# `3 k4 B8 z0 S
st.takeItems(FANGS_ITEM_ID,-1) * h ~3 m9 k6 Z- I1 ~
st.giveItems(WORLD_MAP_ITEM_ID,1) 4 w9 o" [4 o" I1 u
st.exitQuest(False) & V0 j/ m r- T
return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)) 4 Q2 x6 [* N: r/ L1 y; |4 s( \5 ?1 q2 n) q& ~, }5 _: M. s
, O+ K- K- U9 x: m3 G, o( V
' X9 E! Q5 |3 ^. d+ y" F
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):* `# z. M! e1 B u! O
+ L' f! y0 F/ B2 ~, E t e
def check(st) : & P# o* s3 o4 u p3 L2 p( V! V4 }
if getCount(st) >= 4 : 6 F) {5 z. P2 ~6 ?7 s1 ~+ R. Q5 ^
completed(st) r: n* v4 \; v+ l. J2 B
return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал. / h5 l3 F7 v" W8 H4 p; _ h) T w, Q) W" x( P
class Quest (JQuest):, B F7 N) @4 g0 ?' K
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) _" }' p+ ?+ v+ S