Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude. \3 ?8 f' B: p& d5 Y. t* I U3 q/ v
Сборка L2j6 n0 m6 Z$ A, i3 ]
Пример основан на сборке L2J. t. ~' v0 P9 Z( u5 _2 P" b
) I& q" O! g. @% ^* I X3 ]" h1 |Первое что нужно сделать, это добавить необходимые Java классы в квест.: E4 N) W/ n9 A& t5 X" R
- 2 F5 P( I' G, ?- q! X% c& I2 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>
5 {" Y( O1 X' Y1 y4 @6 _/ k; j
; l Y. ~2 v; ~' ^* r) H- </div>
Скопировать код- import sys
) @$ f+ I4 V" m6 o7 j! Z - from net.sf.l2j.gameserver.model.quest import State8 v. ^" H; Q' @& W- I3 w
- from net.sf.l2j.gameserver.model.quest import QuestState
7 D5 G4 A* T4 m+ q( Y( r - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082! N1 g5 h- \. w) ~7 e
- FANGS_ITEM_ID = 1859
( w3 d% ^8 K# I. j6 @ - DROP_RATE = 500000" E& U) p3 `4 J5 s% d3 {
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :# Y/ v/ S) `% o0 ^( ^$ j9 t
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
* o. R+ e+ H8 a: F" Z3 o
1 y) q+ y- E m/ L7 J/ p. O7 `- def completed(st) :7 {# N0 l! O5 v+ V2 b
- st.setState(COMPLETED)
/ p+ C+ M4 J% h) [/ A2 h6 v. I - st.clearQuestDrops()
! l, |8 t4 H( U) H" c0 R - st.takeItems(FANGS_ITEM_ID,-1)
- i+ Y- }, W% q8 p$ i+ ` - st.giveItems(WORLD_MAP_ITEM_ID,1)
% J+ U L* K& Z' W! A6 m, P, d4 U - st.exitQuest(False)
- q5 y2 S) x8 w3 F - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
& X% J8 D% \; k5 N% \7 i$ T& K9 J. v \8 o$ g8 l0 E, o8 Z& w3 n
- k2 a" T! l7 D8 a7 ?+ L- o& c, H
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):1 f( G9 c# Z: D/ {2 F$ _
2 `. Y- v% l% d
- def check(st) :9 q$ _2 ]3 f8 i m( S
- if getCount(st) >= 4 :
, M' l3 j5 U. g @- A1 } M% @- c - completed(st)* i% `8 t/ X/ |# |) K/ O9 z
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
9 s1 C2 \- t2 d$ {/ a4 C# L/ e1 d% P/ D& Q
- class Quest (JQuest):9 C+ z0 a0 D4 h: K8 t# ]' H
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
0 T5 y1 G& [1 \ - def onEvent (self,event,st):
# i0 x. A4 q1 o6 M$ }/ L - id = st.getState()! p- s' p1 ~: T4 \. ?2 D. u
- if id == CREATED : st.setState(STARTED)
, y7 S6 u3 Z$ [* N% g: C- u. v - elif id == COMPLETED: pass
/ T4 q9 `6 @! r- o - elif id == STARTED : check(st)
# R c6 M: c3 Z( h2 J- T - return
Скопировать код- QUEST.setInitialState(CREATED)- u. o9 K+ ]' m+ |% [
- QUEST.addStartNpc(7056)
Скопировать код " [4 q" V3 v2 p3 C3 t
! V/ A W2 @3 j2 J+ P* M |