Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude O' t4 h6 C, p: S4 z
Сборка L2j6 T( |: I3 |0 W6 t% E
Пример основан на сборке L2J." D" n( X) K1 C( f# F
8 V& e& M3 ^( i; ]2 @# x E, [Первое что нужно сделать, это добавить необходимые Java классы в квест.9 d8 ~( z( z/ t+ g
- $ ^0 t) _4 ^* Z
- <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>
0 z1 X8 X# y3 \ i" t$ J7 }
; J( E# u; o9 u. d T! |% ~- </div>
Скопировать код- import sys
7 q. B& I Q( {. |) q& [ - from net.sf.l2j.gameserver.model.quest import State
- P0 ~; }) z8 a% l# {. X# T) ~ - from net.sf.l2j.gameserver.model.quest import QuestState) D2 ?' U' r) b0 O+ P* }9 Y
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 120825 ^- P3 ^4 J2 a& |
- FANGS_ITEM_ID = 1859
' d! W$ m8 z. v* |8 Z/ R - DROP_RATE = 500000* g7 }9 s% j: {; k0 T
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
* T3 y( ]8 Q$ q5 e8 S/ a6 T - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):* T& u. K) i0 |+ m0 s
& P" z. i7 e0 m1 d0 s- def completed(st) :
. h5 E9 U- w [4 s# [" |% n - st.setState(COMPLETED)
$ V8 m7 g0 ]* k& q& K' S" E8 E, T5 K - st.clearQuestDrops()
( [. A; C* X6 f2 `! a0 [2 Q: G - st.takeItems(FANGS_ITEM_ID,-1)
" e6 n# H5 ]: q N3 l - st.giveItems(WORLD_MAP_ITEM_ID,1)
7 i$ U$ }/ J; J. d0 X- J - st.exitQuest(False)
6 ?' H5 H, p: F: N9 C. v - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
$ }5 v) w6 j" F8 Y
- ^% G h' |. v" l8 Q
# @% ^+ d* H! y; a0 F( g) g3 _" {& \1 w& c7 e( `
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
5 I5 s6 h5 Z8 N3 ~! r+ z* ~" \2 u" @7 j" R; _3 s$ Z5 `: B
- def check(st) :# @6 V4 D' M" r* B" d" b9 C, O
- if getCount(st) >= 4 :
' G7 ?9 k8 U9 W - completed(st)
* ~) o; J/ e" L' r7 } d) h - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
, z" ^! O+ f8 ]9 q3 T) ?. x4 K' m$ S7 S( }2 f
- class Quest (JQuest):
- i2 A4 n; C4 W8 {* [9 N - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
" z7 z5 u' M# M - def onEvent (self,event,st):
% m' f( m7 W0 K# m - id = st.getState()
: A1 M: ^ w% F5 G% k& U; o) z+ x - if id == CREATED : st.setState(STARTED)
; ], C4 a' d/ a9 |) v - elif id == COMPLETED: pass
( f2 y' N1 p: ?9 w" U( z) s - elif id == STARTED : check(st)- r4 K$ ]1 Q, r* z3 |/ t
- return
Скопировать код- QUEST.setInitialState(CREATED)
6 z# X# ]1 O& ]1 |- e' P, ` - QUEST.addStartNpc(7056)
Скопировать код ! K# s A7 |! ]; K
# S, Q& u+ R* j. h) B: \9 H
|