Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
7 e3 e+ V* A, j8 j8 _7 Z. cСборка L2j
% V2 `- {& v8 A1 o% EПример основан на сборке L2J., q' i4 m6 r2 s, ]1 B
: F8 L: P( U- P5 I7 r
Первое что нужно сделать, это добавить необходимые Java классы в квест.
\1 E; I0 x$ z1 w- o' v6 I
% J% X U& H7 ]) S, H, W- <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>& I! ?; ^5 Z7 V8 Z5 T9 B: T# F& g
- . e8 V4 s0 W+ g" Q8 t" j! T7 D" F
- </div>
Скопировать код- import sys2 c ^9 g+ }0 u% q! |& X3 ^; p9 A
- from net.sf.l2j.gameserver.model.quest import State
2 a( C0 M7 D# { T/ U, r/ S! Q - from net.sf.l2j.gameserver.model.quest import QuestState
: |2 _2 z& M1 u, C - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 120820 Q% u/ o0 {# n c3 Q! r4 W3 [& T
- FANGS_ITEM_ID = 1859- Y/ k7 h& @/ h. Z/ V
- DROP_RATE = 500000
0 [! U0 b! O, ^7 X1 r8 K$ o - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :5 n I, i3 c# |1 E1 W
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
8 s- |+ A# d' e( }. H2 B* X$ s" [9 I8 z. V- s
- def completed(st) :2 P) T: R3 y6 y% j' m
- st.setState(COMPLETED)
' w( Y: O. ^0 E# { - st.clearQuestDrops()
7 p" d/ v# H) i" _/ Z% m/ Y - st.takeItems(FANGS_ITEM_ID,-1)
+ l, b4 v/ K0 s7 s2 E - st.giveItems(WORLD_MAP_ITEM_ID,1)
( _- ~$ ^& S( C7 l - st.exitQuest(False)* E0 } L9 ~1 o" {3 {! [8 W0 I" R
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
" T a* Q! F j0 `% _
/ t% k4 {3 y- A& r4 y% A8 \6 @9 {% Y7 H- R3 [! A
+ P3 D% \7 q$ D* j) kИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
4 O- `8 a9 d+ j8 u! a9 L2 @; f
. `9 e+ b* h; z- def check(st) :
, S8 Q& X& ]6 E - if getCount(st) >= 4 :$ c0 @* |; A L& @" j* ~* H
- completed(st)
' Q9 V" {7 W2 A F' l# d7 Z8 \! Z) M0 D - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
% e, E2 I9 T1 h" T
9 C6 z/ _) I( I- t' O. G! T- class Quest (JQuest):+ ?: u1 |8 G1 ]. X4 Y
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
! C1 j' p/ u# n K) n3 [- N - def onEvent (self,event,st):
0 j: g8 h& u0 \/ R3 {- S - id = st.getState()% E: D" `2 C' E% t: A g" l d
- if id == CREATED : st.setState(STARTED)
; a& C: [. u1 g) Y* r# H/ { - elif id == COMPLETED: pass! m8 v! p, N- Y
- elif id == STARTED : check(st)
" V: ^- X8 k2 P5 R - return
Скопировать код- QUEST.setInitialState(CREATED): `) T2 i+ h, o0 U5 Z. L
- QUEST.addStartNpc(7056)
Скопировать код
' S) x* I# M4 S! J) d! v* K! Q& O/ q" X6 ]* d1 s
|