Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude1 v* D. ~9 B7 L2 k" l. O$ c" d
Сборка L2j( K+ w M6 J Z) ?0 }. {% {4 }
Пример основан на сборке L2J.
& @2 r5 O7 Q, y, T% t6 Y0 C' O! l: q7 D+ c6 y! z
Первое что нужно сделать, это добавить необходимые Java классы в квест.
6 S, ]0 h' u! e& z9 ]
3 F& ^" o0 T' }: ~4 L6 ^- <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># ?/ n- i& Z. ] y3 K# T
- % B# ~1 h6 D- h) k3 \
- </div>
Скопировать код- import sys
7 o* G A, U/ Y2 b& ]/ G - from net.sf.l2j.gameserver.model.quest import State7 v- E8 y! G* l- D
- from net.sf.l2j.gameserver.model.quest import QuestState
8 u# _, T/ Y, e9 W! Z( \0 Z - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
3 R7 b- E _- B$ ? - FANGS_ITEM_ID = 1859: L' [1 M; l+ [4 N4 `6 I# P5 p0 T ]
- DROP_RATE = 500000* }/ J% R9 h8 K5 z& q
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :- y+ t9 P$ Y" i7 G0 c( m' `9 y& h- r
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):) b1 g8 ^5 V+ I1 V1 I# v% H
8 ~/ e7 m' \! G a, Q5 x, K- def completed(st) :: U2 S" f* Z3 q9 |4 p2 C0 }
- st.setState(COMPLETED), g4 q+ {& N. o5 q R {: L! [2 O
- st.clearQuestDrops()
$ Q' p; M; {2 x; d/ r4 _ - st.takeItems(FANGS_ITEM_ID,-1)
# K+ v$ u8 ^" v$ J8 K9 {0 T - st.giveItems(WORLD_MAP_ITEM_ID,1)
, P5 L# ]* {9 |- z4 W - st.exitQuest(False)
C! B" J+ V; ?* D - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
+ }/ k+ D/ p! t7 Q1 U% p
6 w" E; k3 N% F% k/ O/ ]6 ?) |. J, ` J9 ^
& ^& B# j9 U/ ?
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):& E' V: Q; h1 x. { m }0 x
$ x' ], A H i* m1 U- def check(st) :
* `' p$ _. O3 T% w - if getCount(st) >= 4 :
0 R4 f; g; d( _4 O& i - completed(st)
( W1 F$ y7 X8 s, ~/ i - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.7 D, X3 Q( Z, D6 ^ y8 m; ]
' |1 E5 F( L% | i( t- class Quest (JQuest):) k4 D1 K- f7 G+ f
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
; M2 u; |' s- \ W) I% q - def onEvent (self,event,st):) S0 ]( ~3 f! [. Y# G% {
- id = st.getState()! `6 b) `- \; u9 A: f( L! _. X
- if id == CREATED : st.setState(STARTED)
: w' c# I( I8 a( y: w9 Z - elif id == COMPLETED: pass. |2 n9 {' Q* U) B5 G" d
- elif id == STARTED : check(st)- _# u* `. c9 j; E
- return
Скопировать код- QUEST.setInitialState(CREATED)$ z( D4 `0 d6 H
- QUEST.addStartNpc(7056)
Скопировать код
0 N; M& Y/ a4 r; C4 o5 a
" c0 e- v* P j |