Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
+ [+ f8 e! j. jСборка L2j
, O% Y7 f, d E* fПример основан на сборке L2J./ u, q8 S$ T5 k# {" V' f
0 Y7 g4 u: }9 u% U
Первое что нужно сделать, это добавить необходимые Java классы в квест.
9 @; \9 e7 x, A$ {- & L. L2 A1 q% h: t8 {
- <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 |% J n! m H" Y& t - . q2 e" o4 J' V6 N
- </div>
Скопировать код- import sys
7 k1 y3 s6 H6 y' E: G5 T - from net.sf.l2j.gameserver.model.quest import State
1 y# B: U2 ?% ^8 [' y/ v - from net.sf.l2j.gameserver.model.quest import QuestState p: J8 _" |- n3 x
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
$ J( d/ z9 R( ]. r0 H0 b - FANGS_ITEM_ID = 1859
* X* n( N( X! t$ R, G - DROP_RATE = 500000
! r! B/ I' R5 H/ c3 o" R/ C - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :: R; t: I6 x9 i3 _ D
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
6 t+ F# t+ A ^9 _, {2 s3 S; t8 J7 F: O) a; c$ O/ u( ^
- def completed(st) :+ L" u4 D" F8 x v
- st.setState(COMPLETED)5 a6 i1 Z1 A. a& P9 o4 l
- st.clearQuestDrops()1 E0 B1 W5 W% L- ^6 P
- st.takeItems(FANGS_ITEM_ID,-1), {7 ?1 q* Q6 T( [0 k
- st.giveItems(WORLD_MAP_ITEM_ID,1)
' ^5 }! ?5 E8 E' \, E" x! K# U - st.exitQuest(False)5 z1 B2 E O, k" o9 e: X/ h
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
4 ~+ x2 G! l5 M' G
# [$ ~% n0 B6 {: M% L+ _7 e1 ~ R5 P+ h+ b& I! O0 F
. M* b' e$ m% a2 YИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):! s. Z) k: n0 C$ x+ v
) w* x8 X2 E4 `! O- }3 B# w1 z- def check(st) :: R8 @. C8 P( b( G' f+ o
- if getCount(st) >= 4 :
1 a* F; n) E% ~ - completed(st)" g) a% B% _0 _- x6 J
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
9 G" U$ o D8 W4 X: ?* C6 L0 l- r8 R6 \+ z3 P
- class Quest (JQuest):
$ M% z, Q4 Q+ C% i- z - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
" Q5 h. g9 p/ J0 c - def onEvent (self,event,st):
- i, U3 ] {2 I0 ^" o9 j - id = st.getState()$ P5 n* z! D( G
- if id == CREATED : st.setState(STARTED)
$ ~9 t; l. |0 z7 Z' S+ i7 T - elif id == COMPLETED: pass7 W7 c. q% [$ f, I) T& a1 [
- elif id == STARTED : check(st)
# Z- A0 V; k3 c7 `7 j - return
Скопировать код- QUEST.setInitialState(CREATED)
) `8 I5 ^. V, i - QUEST.addStartNpc(7056)
Скопировать код . B, ~2 V" b* s+ q9 Z
- r( \. u% a J2 G |