from net.sf.l2j.gameserver.model.quest import State& S; N- J3 i8 L: F8 u9 U7 U0 u" `0 O" M
from net.sf.l2j.gameserver.model.quest import QuestState # X2 I( {2 r+ l5 {- F
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
KELTIR_NPC_ID = 12082/ _6 A! E) j4 ~- W$ m/ F1 P
FANGS_ITEM_ID = 1859 & x& ?9 z' m. A( R) M
DROP_RATE = 500000 & T+ C1 H: {; l; C1 [6 g& q
WORLD_MAP_ITEM_ID = 1665
Скопировать код
def getCount(st) :6 @8 a. c7 H! F6 G
return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):$ x% n4 M. y9 q, U
3 K: L% g+ w( E$ b1 C
def completed(st) :4 y. I4 p4 N/ `! k1 I1 _. z" L2 x: I
st.setState(COMPLETED)% q5 M- J- m: z' l/ N+ b
st.clearQuestDrops()2 E, t) W/ x/ q' w) p: w
st.takeItems(FANGS_ITEM_ID,-1)$ ]- @% \; f! t# H8 U
st.giveItems(WORLD_MAP_ITEM_ID,1) 8 Z$ I$ N" ^1 ^2 Y0 z
st.exitQuest(False) 2 a% }' L) L: s7 l
return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))2 A/ x0 I, b% o+ `. J; a" T- ~% ]
/ l5 f1 X' i. p" J" ]4 d$ r- ~1 k
# ]2 v# h; B0 d & W; D5 \) t/ X8 TИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):0 |! ?+ a" Z! ?& N& T1 }$ m0 X( b
7 Y* M# n4 W+ U. T3 t2 u, S
def check(st) : U6 A- z) q/ h! k
if getCount(st) >= 4 :( f f* G6 Q& v" p" z
completed(st)' s% I8 ^0 R6 i: s& a- C
return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.( R3 N2 y E5 h; k% q$ h9 b
/ Z3 Q/ Y4 Q* n1 Y# j
class Quest (JQuest):# O! z. }& @9 T4 I# R' W) p
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) 1 x" `, C- z |