from net.sf.l2j.gameserver.model.quest import State 0 q; y8 i6 z `5 P2 g! j+ S" m
from net.sf.l2j.gameserver.model.quest import QuestState F" i6 a; C$ s) x& e% Z
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
KELTIR_NPC_ID = 12082: J1 X' Q7 A$ g
FANGS_ITEM_ID = 1859 . T0 B( @, h5 w
DROP_RATE = 500000* Y, P- ^2 C% A4 B; a# H F
WORLD_MAP_ITEM_ID = 1665
Скопировать код
def getCount(st) :+ l! ?1 ]7 I$ M$ }( @
return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):" C$ b7 T9 l( e4 _
% M! Z$ e; l& b% T% w* `: ~
def completed(st) : % Y2 e/ T9 B! `6 [* @: S- d
st.setState(COMPLETED) 0 E" b6 ~4 Q' t A9 V
st.clearQuestDrops()8 t& @1 X; m/ C% g
st.takeItems(FANGS_ITEM_ID,-1) ; Y* N$ f- p4 M* X
st.giveItems(WORLD_MAP_ITEM_ID,1) 2 r/ C' F& P8 V3 U
st.exitQuest(False) # s# n" d' T& Q' F Z
return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)) J. w- }" _/ A' m8 E3 Y* H) |5 V 8 {4 g& J+ r% F+ q3 ` d/ F" n; o) {6 z6 t. O7 R9 h P H
G) L6 M; b+ w. T8 n
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState): : ^+ _ `; Q- b$ V+ m( C, t' v( V8 G7 n
def check(st) : @5 U! k! I! {
if getCount(st) >= 4 : N- W2 d( t c5 x+ p( f" I; U
completed(st)4 @% V8 M& Q6 v; @8 o) ^+ w+ x; x
return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.) Y3 E# l7 r" A
% ~9 v3 `$ p4 q" [; k) E0 V
class Quest (JQuest): 3 Z1 v' _$ Z9 \) a' d" v
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)& T; w F7 x1 l/ c! ?' ]; _0 _- p
def onEvent (self,event,st):) ^: O7 @. n5 \( @
id = st.getState() 5 D3 \8 \4 ?* c/ u" B4 T$ e$ g
if id == CREATED : st.setState(STARTED) 9 h8 `- E3 }/ D/ a# f6 s" B7 O
elif id == COMPLETED: pass3 ?0 h6 s2 W+ K2 q8 A: C
elif id == STARTED : check(st) " S& T! @* h. R! J8 D- _3 |
return
Скопировать код
QUEST.setInitialState(CREATED)* M% U1 S' @" ~' H
QUEST.addStartNpc(7056)
Скопировать код
6 ]7 {7 x5 n. J2 R) g' Z G 0 [/ B" V( ~+ j) t
Добро пожаловать artace.ru - творческий сектор (https://www.artace.ru/)