Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
) t$ K) T3 r/ v% C( NСборка L2j
: o* [& Q5 G. z- l% KПример основан на сборке L2J.
- L! o% P" P3 r- `3 `& g- n; c! W7 I* d$ V- O
Первое что нужно сделать, это добавить необходимые Java классы в квест.
, [& i8 }) {3 M+ ], l1 w' y" K- & A& P+ o, F( z8 [
- <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>1 f* X! S0 ]4 W& c# K4 T, a" t
. Q- b d' y3 K- </div>
Скопировать код- import sys v) H/ s2 H) g. D: t" b9 n
- from net.sf.l2j.gameserver.model.quest import State. t, _* K. U4 P d- Q. v `: i+ E
- from net.sf.l2j.gameserver.model.quest import QuestState: I% O2 l, c$ m
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082( n. \ W$ _$ |$ K0 Z* z/ s w
- FANGS_ITEM_ID = 1859
/ D8 a: s+ [: l% B - DROP_RATE = 500000
, P* \+ l' P4 o1 ` - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
; h, _" J8 [* V% b8 N4 A - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):' u: l+ U6 G$ `8 X
7 U( |! S, {! |3 k: g- def completed(st) :6 R9 e& C: t1 j$ l) }" S8 ? X& `
- st.setState(COMPLETED)1 }/ W" X Z' E' \ ~8 T# Z7 y
- st.clearQuestDrops()7 d2 \ \, o+ J- y3 a
- st.takeItems(FANGS_ITEM_ID,-1)
) o1 i' N" A7 t# P" U - st.giveItems(WORLD_MAP_ITEM_ID,1)
- i9 R* D0 ^& M) Q6 B" K - st.exitQuest(False)3 [" O0 Q' d( d3 E+ ^" n. w) l- R% G
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
' d% L: z" c* l; s- [8 t9 H
# F9 H' X8 }, W7 b! f E/ ]1 H, [) n; u% D/ I. `+ {
Q! O& n: i7 e1 a O- G7 S) P5 }! h
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
$ o# I7 q: t" y) B G, f
/ }/ C+ M7 j4 W! f* ~2 c" W- ?- def check(st) :
U- P; G1 o3 n4 P. f/ B, B/ } - if getCount(st) >= 4 :7 s6 V8 K4 Q0 W
- completed(st)
9 S" d/ p5 e) [0 d1 c: N - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.. v) a+ T9 B1 y) W/ F
$ f- \ f/ `! w1 F9 W9 t0 d- class Quest (JQuest):8 z% o- L/ f3 c" S$ l' C
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr). _# o% a. x$ F- P
- def onEvent (self,event,st):
7 {, q% a( _' R( D0 f4 ` - id = st.getState()6 b1 C, n: X6 p# a
- if id == CREATED : st.setState(STARTED)" `6 c* x. f$ q4 Q- T: w. ~0 P: S- U* K
- elif id == COMPLETED: pass
! k- |$ z8 D0 E4 ^+ f - elif id == STARTED : check(st)
s* N1 h4 Z" E& ~1 n; Z+ ? - return
Скопировать код- QUEST.setInitialState(CREATED)
$ E: e6 A/ S$ {! o - QUEST.addStartNpc(7056)
Скопировать код $ [3 U% P5 H- [* l4 B4 }2 U0 I
8 y6 d! M+ Q$ f% ^ N+ t8 L% c |