Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
6 s0 x" i5 a9 @; ?% M, EСборка L2j, e( k& h `9 f0 H9 O
Пример основан на сборке L2J.3 G) O. [. X, u) \$ f
% z; ~, c a% t
Первое что нужно сделать, это добавить необходимые Java классы в квест.
0 P* i. V4 U$ z* i
5 N T/ |, Q! x$ [& m( R- <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 G: W+ w2 _0 W9 a+ L
$ o0 [& ^' _( B* x4 i- </div>
Скопировать код- import sys
8 i% K; P. a9 j0 _9 _1 ? - from net.sf.l2j.gameserver.model.quest import State: X. |5 i. `, X& r9 `% {
- from net.sf.l2j.gameserver.model.quest import QuestState
# Q% Y/ w5 p% X" s - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
- i- j" V6 L) Y8 T - FANGS_ITEM_ID = 18595 @' n2 U, W" Y0 Y8 x8 K) F6 h' C- q
- DROP_RATE = 500000
9 p x) _0 P; o z - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
[3 D' B) H6 h- ?* W. ?2 {7 ^1 J - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):" S! v" G8 L/ ]) t& Y, I, B" a" T
2 Y, G9 U2 k8 P, H: {' {0 X) n- def completed(st) :
, Z; X% ]; Q7 @ - st.setState(COMPLETED)1 ~3 ^+ V! J& ~$ C; C( j8 Z& j
- st.clearQuestDrops()7 u+ b! N0 W: V! j5 l
- st.takeItems(FANGS_ITEM_ID,-1)
$ ]/ d' f; K L0 l - st.giveItems(WORLD_MAP_ITEM_ID,1)
0 N6 ^7 i% c" c" ~$ D: l - st.exitQuest(False)0 O" O! I" y; A9 ?, T
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
% o: F4 L5 j% I- B2 ?; M; N2 w9 x2 a. k. s% y& {7 a1 t2 h4 i) j
/ U j' w7 B/ K* `% l# G' r7 y1 w- E$ y
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):3 l- e7 B$ f; V4 p( B% D# ~
( c0 \1 `& c* l
- def check(st) :
" f) F3 g4 A* } - if getCount(st) >= 4 :$ a/ w8 W( ^% h( a- K- D
- completed(st)6 N0 M* p% j. B/ d% F$ Q- c
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.- w$ F4 N# R' Z5 o1 t& \
/ \; |1 i/ o: l6 f, J3 n( R
- class Quest (JQuest):( D) {3 M: {* e
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)& l- Q0 m8 g7 f+ g$ a, @& T% C8 W% X' C
- def onEvent (self,event,st):
1 {2 \' N: _1 T- K) I4 J, p - id = st.getState()$ _$ c3 D0 f5 E
- if id == CREATED : st.setState(STARTED)
4 m8 v8 K/ u Y& v! s- c Z8 q- q - elif id == COMPLETED: pass% D8 W6 J6 H5 K5 I' N7 E; ~/ b7 R
- elif id == STARTED : check(st)
" Y. b* s% [- m( O - return
Скопировать код- QUEST.setInitialState(CREATED)1 f$ j/ a/ m; x; L3 J
- QUEST.addStartNpc(7056)
Скопировать код 0 `, L6 p, Q- D0 p" [+ T ~
4 `4 r3 r: {+ z0 x5 N, L7 B |