Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude1 [& F" s2 I, J# d" ^
Сборка L2j
& X, O6 f( o( L; X1 c+ JПример основан на сборке L2J.+ h+ G0 P+ V2 r' @6 B
* S* w2 o% I/ d) \* I: F, n
Первое что нужно сделать, это добавить необходимые Java классы в квест.
* o4 F+ f5 R. h8 \
, h- q! ~. u' x( h N- <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>
9 Q6 i- G7 Q5 Y0 Q) V8 t
- w) p |- T. M- w; i$ X; h3 s- </div>
Скопировать код- import sys% |5 r+ ]0 i* \' ?5 }
- from net.sf.l2j.gameserver.model.quest import State6 x* q, b+ E# {" y8 x! ~
- from net.sf.l2j.gameserver.model.quest import QuestState( o+ b b& l* M; n$ @
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
( F: ?9 ]- A% ^4 a. h - FANGS_ITEM_ID = 1859
; R Z+ i" g2 y6 T! `# V - DROP_RATE = 5000003 Q3 Y$ _) O5 b, ?% C% |9 m; ~/ Y
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
: _# F/ I" {: A - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
; S; C2 y; F! {- M- |& r8 E5 f
4 |2 S- F% ]1 e) c/ O! W- def completed(st) :* H+ Y8 l, i9 m, W
- st.setState(COMPLETED)# v& v' P- q5 z
- st.clearQuestDrops(): Y) q' d; k4 j' C2 w
- st.takeItems(FANGS_ITEM_ID,-1)1 G- F, a J+ s6 P
- st.giveItems(WORLD_MAP_ITEM_ID,1)# u- L6 n. e$ ]$ X
- st.exitQuest(False): K' ^- R$ K; q3 E
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))9 P) T* n. ^. i2 n
; u" M) S! R. U2 ~7 b- a* L5 g: U' q" a
7 L* o+ _/ O$ A L" C$ F" T
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
" f$ z+ W4 }/ j( d, d5 L
' T) H, p. k" ]5 Z% |- def check(st) :
. X; h$ O, L; l t) [4 E8 r - if getCount(st) >= 4 :1 M+ l. N& ^1 K3 C( j- W1 z3 [; g
- completed(st)2 l2 c4 N% v# r- o5 y5 q5 @* I
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
' i) `) p4 T( k* B3 u! p
; Q5 b/ E, q! U8 X+ s- class Quest (JQuest):
) H$ k. {8 y+ P w - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)9 y; I+ j3 m6 m4 I& h
- def onEvent (self,event,st):$ y- L1 k% {, j! N8 }
- id = st.getState()6 G7 k4 S- c) S$ z; b% b+ G
- if id == CREATED : st.setState(STARTED)% g0 ]/ v8 n T
- elif id == COMPLETED: pass& a3 C# {( E7 d/ Y
- elif id == STARTED : check(st)
- W; A/ M3 c- g) b/ z - return
Скопировать код- QUEST.setInitialState(CREATED)3 P* Z9 G; K! ]$ n0 L7 {/ Q
- QUEST.addStartNpc(7056)
Скопировать код
6 l }! \/ G0 T$ D- g0 f7 p+ H2 i5 D+ v9 V- i1 o
|