Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
T. e5 \8 }9 I! M7 b" VСборка L2j0 ?3 A) i0 Z4 R
Пример основан на сборке L2J.
; A) g2 l( [/ U5 K+ A- T7 y4 g1 D5 S; o. D/ a8 N% G3 p4 k
Первое что нужно сделать, это добавить необходимые Java классы в квест.
. C/ \$ v3 i( k5 I. N- " n! Q* ^2 [( ~ 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>
+ S9 v# m: `; t/ o2 X, d; }% G
/ b) J4 Y) w+ w+ Z8 N- u- </div>
Скопировать код- import sys2 E$ o( z5 B$ u, R. @
- from net.sf.l2j.gameserver.model.quest import State5 [8 p* ?' n+ K. A
- from net.sf.l2j.gameserver.model.quest import QuestState( D$ z/ r' D4 }
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
2 O0 M# H$ u: ]9 m3 ?) W) s - FANGS_ITEM_ID = 1859* P8 T! t( Z! p# V
- DROP_RATE = 500000
2 H# ]6 ]+ E. G3 R" o - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :/ {5 H5 [( `1 X; w) L
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):/ n8 L) ]0 a& R" t! o% I {$ ~- ]' E
, X. I5 _" O0 d+ m) o- def completed(st) :
& w6 ~! y$ e4 P: o) m9 Q% @5 M6 j - st.setState(COMPLETED)
7 N% u- I3 V4 U$ m5 ^* T; b" e; x - st.clearQuestDrops()( y' [3 J4 Z+ t* t ~) o
- st.takeItems(FANGS_ITEM_ID,-1), I/ @* c* J% T, B; {/ |
- st.giveItems(WORLD_MAP_ITEM_ID,1)1 A/ m0 {/ r p3 k" W
- st.exitQuest(False)
3 `5 j( }; z5 y - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
* t! d- }, N! ? H! A2 E- x K
( Q6 h! ]3 x' Y& v& j2 d3 Y- I3 x# p
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):! A& G: D. t+ o( u. U: f+ H
0 w6 ^8 t( U( s( S& n3 ~+ A, Q
- def check(st) :
( B0 I" t5 J4 P5 ^0 ] - if getCount(st) >= 4 :
2 ~- ]& c+ |7 G4 d& Z - completed(st)
4 s% X& G3 N. S" \2 j - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
/ B; ]" ^" Q' r& j9 V% |" r2 ]- a3 h7 }" E7 {7 T; y4 X
- class Quest (JQuest):
6 `' h) t/ s1 E4 @ - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
0 T L: [8 [% u" K/ g+ l - def onEvent (self,event,st):3 u# A( j* d; a, N
- id = st.getState()
" C j6 p& L M/ k# b. q8 g - if id == CREATED : st.setState(STARTED)* j; t/ \3 s/ e6 p* a
- elif id == COMPLETED: pass
6 W" k# j. m7 J* E# H7 W - elif id == STARTED : check(st)8 l' F+ P4 T) R- P/ O2 @+ w
- return
Скопировать код- QUEST.setInitialState(CREATED)
2 d! w' G! O, q0 u2 y - QUEST.addStartNpc(7056)
Скопировать код 0 j. S8 O+ E1 c4 }& g R
0 I9 H4 o& D0 p; M6 s
|