Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude7 X0 }) p- P J$ k6 `1 K/ X
Сборка L2j' v0 f' L! d% \, U
Пример основан на сборке L2J.
, r: i6 O _1 ~7 o* m3 Q: \5 ]" A" J9 Z% z1 S- F/ ]
Первое что нужно сделать, это добавить необходимые Java классы в квест.
& y, r; Q; w! v$ q4 O/ f- 3 V6 F. R7 O/ ]- K! n% H5 D+ x
- <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>- |' z% p6 c; Z
. [" `0 o, e& r W- Q3 d- </div>
Скопировать код- import sys
. n6 m/ ?5 D3 s - from net.sf.l2j.gameserver.model.quest import State
+ j3 E) F' t d" G7 ?* [ - from net.sf.l2j.gameserver.model.quest import QuestState3 K4 D! K$ \4 `8 O
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
4 L1 @9 R7 S4 Y/ D& { - FANGS_ITEM_ID = 1859* F9 L: E4 P8 D
- DROP_RATE = 500000; e' x9 i5 J$ N) s+ J0 w
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
( p: ~+ M! i/ N1 ^ - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):1 B9 C7 B1 p: `$ R$ p- P/ g5 Z0 v
( E1 T& I) V- a. a; f' \% D. U4 v- def completed(st) :
* @; ^& N* z2 [3 c - st.setState(COMPLETED)$ g: ]8 ]' d- c: H. l
- st.clearQuestDrops()
# p6 Z3 ]: F# M8 u u - st.takeItems(FANGS_ITEM_ID,-1): K) p1 E. ?7 ^ ~# y: a& Z4 v2 ?
- st.giveItems(WORLD_MAP_ITEM_ID,1)
- P' V+ P. ~6 M, _7 Y0 r - st.exitQuest(False)$ n( Q6 c Z+ W! {2 q& |
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
5 z* V" M' i; J
' {/ V- k1 Y+ _# O' V6 a9 x& C
2 r& X9 G, Z3 b0 ]: M9 j
: Q4 c; j) L* _8 H& b, sИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):- {* P8 F; x6 c( t: k4 z& O4 L* H* M
5 I2 D5 Y# w9 U0 h4 m
- def check(st) :
* c0 p L; ] J$ F - if getCount(st) >= 4 :
! S7 p: T1 G9 ?# r8 M - completed(st)5 j0 e) ^7 {# |! P1 d! [$ E
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.2 U( X' }6 `" G) V0 i3 s& Z
1 w! a9 h- d) X0 l% w
- class Quest (JQuest):
" D7 h- u. a- W( l4 q% S" i. W. O - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
- Y9 m" i. n- c- A% `' ^ - def onEvent (self,event,st): b) S# |6 p9 T% y8 I
- id = st.getState()
% G) o8 `& S! m; _* }/ h" f$ f- | - if id == CREATED : st.setState(STARTED)7 w, ]2 x0 K. \# m, @, H$ ]8 Y
- elif id == COMPLETED: pass
) d; Y/ @% O- V) \, @7 D- i - elif id == STARTED : check(st)
" ]7 b* Q: L5 {, Z7 ]4 h# x - return
Скопировать код- QUEST.setInitialState(CREATED)
# v4 ~5 `* w0 b9 Z - QUEST.addStartNpc(7056)
Скопировать код - N) V' l) C" N2 Z/ J6 J4 q
3 l+ C5 P1 z+ P* I: p/ ?" E |