Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
' d( {$ X- a% nСборка L2j
* }* Q% h2 ?. x0 yПример основан на сборке L2J.
5 a4 t9 w+ f3 t2 d) P5 T4 @, {. S
# Y: Z$ b8 P7 f$ e0 @$ xПервое что нужно сделать, это добавить необходимые Java классы в квест.
9 W D- h! r/ b7 Q7 v. w- o
# B6 R* `$ r1 y8 y- <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>6 d; T' _5 ~5 `& d% K% `
/ d1 @) D* K6 N3 m& k- </div>
Скопировать код- import sys4 O- u H- C3 f2 D/ D
- from net.sf.l2j.gameserver.model.quest import State8 e6 T" f; ]" |# F
- from net.sf.l2j.gameserver.model.quest import QuestState
1 x5 O1 E' s; o2 b& W - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082) J! C, t# g& N
- FANGS_ITEM_ID = 1859
. r. a0 l6 T2 C0 m) T( |6 z" w4 D - DROP_RATE = 500000
* V/ [+ x; W4 G$ l2 y W2 ? - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
4 l+ s. [, h" U7 a - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):* G2 H8 B( ~. X+ v* f5 U6 t+ b& t% x& d I
+ n8 B/ B* P: y4 W9 K& _ V3 |" C6 u- def completed(st) :
+ u! |% \/ h+ N: a& e+ p! y& V# W6 }, O - st.setState(COMPLETED)
- k9 B0 F) m/ b/ I - st.clearQuestDrops()6 I* [9 W2 }' r6 C$ n
- st.takeItems(FANGS_ITEM_ID,-1)
' D% ]" V& C" V) z - st.giveItems(WORLD_MAP_ITEM_ID,1)$ p! y9 T$ z& N" K8 `
- st.exitQuest(False)8 J0 u- U- Q# J$ x7 b$ u
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))+ N) n* V5 D1 o8 A
* Y6 v) |! C$ e
) d6 x9 k, a) T# i y5 _5 o) K7 t0 X: [! R3 Y) _/ X$ B1 N
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
0 H( X2 e0 t$ f4 c; B2 g4 m( b2 s7 f
- def check(st) :
# t* z4 O* h) B5 ?" d* Y - if getCount(st) >= 4 :
; t! j& S' B' r - completed(st)' s& J' _9 e% D: M6 u7 [3 i
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.& S V* G; D5 Q0 B9 r7 Z4 Z* w
5 w, P* v u0 s- o4 ~: o C- class Quest (JQuest):. Q- ]! z2 Z+ }+ ?( |$ X8 V+ i8 ^
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
# _2 j% Z: _, G4 G: n - def onEvent (self,event,st):
4 f6 g4 S, v, h - id = st.getState()
9 v! k9 Y/ ?% F$ h7 D% M - if id == CREATED : st.setState(STARTED)
3 H5 t& A' S" ?6 x; i0 |, ]* M; W& E - elif id == COMPLETED: pass
( e' p3 y& Z0 `$ }; j' E - elif id == STARTED : check(st)8 r$ X. F5 B4 F: o
- return
Скопировать код- QUEST.setInitialState(CREATED)" m3 K& y( ^/ `0 Y7 o
- QUEST.addStartNpc(7056)
Скопировать код
! D d G3 }- L
. x" B2 C0 Q- `' u7 N1 X( | |