Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude9 ~3 r# |, }4 s" R6 L% k/ y$ Q B
Сборка L2j& i" M% }0 h! L* r V
Пример основан на сборке L2J.9 Q9 I6 `# ?' g' I" I, ]! E
5 E$ r \. U' yПервое что нужно сделать, это добавить необходимые Java классы в квест.
* ?" H1 f9 v; D# U5 s0 i/ ^. q9 M
% @7 I( W. h4 p3 h2 k+ [6 G4 ^- <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>
% y5 Z9 M/ i3 y4 J - 3 ?: O* h- b% O5 q1 e7 e
- </div>
Скопировать код- import sys& _9 G$ h% ~9 x8 Z
- from net.sf.l2j.gameserver.model.quest import State) M: X9 l- K# ]1 I h6 J) } G A& M
- from net.sf.l2j.gameserver.model.quest import QuestState
/ U- u3 o& k) X/ ~" \2 A - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082" v i6 b& s" y8 o$ R0 B1 j
- FANGS_ITEM_ID = 1859! A+ P4 F9 q. t$ i3 {3 ?4 a
- DROP_RATE = 500000+ g* V, T. u" C' N1 l
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
9 h/ P. |8 H# V - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):6 r4 q# @7 D- \/ H# o
& u A; j. Z' Y- P6 M( _- def completed(st) :; R. o/ R) s3 m9 q4 x
- st.setState(COMPLETED)- I) e. M, {* q) v& t1 x3 ]/ a% ]( ~
- st.clearQuestDrops()( ]$ O- n0 f/ O9 v( j1 b- o1 e
- st.takeItems(FANGS_ITEM_ID,-1)
" c5 K3 m- v8 V - st.giveItems(WORLD_MAP_ITEM_ID,1)% y7 H. m: O z6 r5 R
- st.exitQuest(False)
' g% Z' c f0 N$ u( {% W9 p - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))$ K/ F: z/ K, n- ~
% I( G" |" ]/ `+ ]
; b+ n* R- w" a+ i' P
/ O' T8 l% n6 [/ w# F- PИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
; }; f) B. T& V$ \) d/ _- W3 a0 v z$ Z. H u7 ^( v# |
- def check(st) :) _& O8 f/ k3 [% v6 f' s3 G: `
- if getCount(st) >= 4 :) N2 O# ~6 i l: ?2 C
- completed(st)" C: M# }, L# g+ _# K6 ?1 S
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.% E( J6 @; j+ I7 O1 b/ r& h5 O) m, k
: {7 X0 K6 J& R- z" t% k$ n2 n0 V
- class Quest (JQuest):& @ e, X/ b" d) s
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)) `! ~- o& Q* h
- def onEvent (self,event,st):* _# k' B8 z4 f& z( J( F
- id = st.getState()/ M5 U7 ^( e, {/ b7 ^6 G0 o# @. i, v
- if id == CREATED : st.setState(STARTED)
& H4 |/ T- b& }- I5 ` - elif id == COMPLETED: pass
8 [$ g5 |6 U& I" f - elif id == STARTED : check(st)9 Z5 V& H+ N& h6 C
- return
Скопировать код- QUEST.setInitialState(CREATED)& z3 r( H+ b, A7 _5 p: h( {
- QUEST.addStartNpc(7056)
Скопировать код
3 A( X$ C% m% k
. D8 l7 `6 f' C, t/ [ |