Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
+ @/ D2 G! J) h' \+ v uСборка L2j
: ~8 o/ c, f5 o. V" O: z; [- eПример основан на сборке L2J. n1 z5 Z5 s! S2 K: H
G$ b- B- C( { R- {0 u; ]( |, s
Первое что нужно сделать, это добавить необходимые Java классы в квест.
B: ?5 D; {4 j, _( j$ M- 2 L0 x8 t4 k" w! k" q# x% l& i- k( K
- <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>
4 E" ^( N$ E! R( l7 H q3 X b5 y
( g: f& W# K' L3 y; K- </div>
Скопировать код- import sys
' K; ?+ M$ O8 H' ^6 ]1 R0 ]6 a4 C - from net.sf.l2j.gameserver.model.quest import State
+ Y: J7 _4 j/ M# t3 w - from net.sf.l2j.gameserver.model.quest import QuestState, c5 v# N9 Z% q2 O) f0 ^/ ]# g
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 120824 D& S' S0 t( M p3 v( b) ^
- FANGS_ITEM_ID = 1859
; N4 d$ M- K5 C - DROP_RATE = 500000
+ |) x- K7 Q6 J. e) V, F2 ` - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
0 m1 d) S/ E1 U5 a8 f5 G+ P0 j - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
! Y+ n0 k3 c7 s1 Y2 [, a) Z# A8 x: E
- def completed(st) :
4 {! {8 L- q$ b0 e - st.setState(COMPLETED)
" V: q- o* T( Z2 F - st.clearQuestDrops()
) \1 `) j( x: r - st.takeItems(FANGS_ITEM_ID,-1)
; n# Q" v8 X8 F7 W- ]# q' E% _ - st.giveItems(WORLD_MAP_ITEM_ID,1)
, L0 r) q$ ~ b" v( y - st.exitQuest(False)
* |, O5 M, ~' | - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)); @8 ~& I3 w0 B/ l; `, N8 ?# |
+ z: G5 R1 r0 M1 i! W
$ _' ?9 m# v3 s6 o" d+ [
6 ^) y% B: ?) o# j0 X2 C/ i. ]И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):7 _" j8 e: W3 F5 _+ I$ z M, R9 n# K
( b Z2 {, f9 ` w6 Y: [3 Z7 @- def check(st) :
& N1 ?2 E$ {2 [- j C - if getCount(st) >= 4 :
: |/ L" h. k* i4 |# H0 \ - completed(st)+ L/ Y. E7 p" W) q
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
' |' g9 g" M# S. j: P
1 F) T0 W3 T5 e4 c: G- class Quest (JQuest):
7 Z# y2 ]7 G7 Z+ G2 L) B% y - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)! B% _3 E4 e) D9 g( Y( z
- def onEvent (self,event,st):
% h2 N) |/ f- H2 y - id = st.getState()
$ I& y* h; H) n5 S% d - if id == CREATED : st.setState(STARTED)4 H* Q/ ^! }, T- m/ F E
- elif id == COMPLETED: pass/ f3 K0 U4 A: E
- elif id == STARTED : check(st)
5 Z; [* c! X. p7 w5 J% h& X - return
Скопировать код- QUEST.setInitialState(CREATED)
( b( \0 F4 e/ n' ]' M; I9 B - QUEST.addStartNpc(7056)
Скопировать код " F w' M% i1 }
3 U A( K2 |0 p
|