Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude1 L8 E" ]' n( ]/ t8 _" d
Сборка L2j
! c- k+ a$ |8 a1 l# k0 cПример основан на сборке L2J.
* D1 M0 ?: v0 w: g4 N! {
* {, k1 @$ Z3 n% w* P3 oПервое что нужно сделать, это добавить необходимые Java классы в квест.
5 O$ a- c: y. X3 Z6 A# d, z% o" f
' X q+ B2 [% j- <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>; B- K' d" k9 x4 k3 R4 I
- : Z! z0 m' d2 s2 u' D: i
- </div>
Скопировать код- import sys+ z! H2 x+ k3 I
- from net.sf.l2j.gameserver.model.quest import State! u" X/ H& m# Z5 v4 X- g* b6 O
- from net.sf.l2j.gameserver.model.quest import QuestState
! C0 v* m+ @* x* f - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082" |. @) r6 N/ x& h
- FANGS_ITEM_ID = 1859
) g4 N8 ?# E+ R - DROP_RATE = 500000
2 X6 u, u1 T) A! o5 W4 I' W - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :! m6 U0 B& v) u7 m. p& Y' i: S
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):. r0 Z" T+ I8 {, _0 g& u: R, F
; {- |: C2 a' `" y6 t/ Q4 N- def completed(st) :: i2 H, `( }1 v* Q5 H$ C. x- n
- st.setState(COMPLETED)" W3 v0 y, v+ }" K2 M7 |% s, ]
- st.clearQuestDrops()
; ` I$ F P( k8 U/ h - st.takeItems(FANGS_ITEM_ID,-1)2 h1 C& t& u; c9 b( C2 \0 T
- st.giveItems(WORLD_MAP_ITEM_ID,1)
7 B$ t8 a, \/ \1 q7 B - st.exitQuest(False)0 e0 s1 x! u; R$ I& Z
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))' H4 T# M5 r3 a6 H' x- Z
& `9 f% k) B; B6 Z+ M4 A* @# @
7 N3 n1 ^8 [0 g6 z4 r% N2 @
" R5 y) u$ j" P
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):; v. o* r$ U0 Z' F6 D
+ ^4 w Z& G1 }! E7 Q- def check(st) :+ I3 F% z; y& ?9 _
- if getCount(st) >= 4 :! \( G2 ]7 @. F
- completed(st)
, s0 Z; d; M. o/ `& R$ p - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.- s" |- ?& }6 U n# F
( N8 j/ ?7 @ J/ ]: j% i8 {- class Quest (JQuest):' h7 U: f+ `; E1 e) f
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
1 B& }7 B* r' H - def onEvent (self,event,st):
& V& H3 ] H& ]+ a - id = st.getState()
# p) o# J$ r, Q6 C; c - if id == CREATED : st.setState(STARTED)
6 d/ M' [7 c; r- w7 v - elif id == COMPLETED: pass, o& F8 p: X2 y
- elif id == STARTED : check(st)
7 z. B4 J' |3 J8 B3 s; Y - return
Скопировать код- QUEST.setInitialState(CREATED)
& C: E* O" O/ j- `( A7 A$ } - QUEST.addStartNpc(7056)
Скопировать код
% Q* _, Q; I1 s* p3 ? ~6 e6 [' v# c: B) y) g7 u9 R
|