Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude, a) v& R$ P4 a" U- c2 z
Сборка L2j$ F% y* o/ [, i8 i7 ?7 U
Пример основан на сборке L2J.- k1 U* h$ K$ k1 I9 G, {
0 K, n) P6 m. i; i
Первое что нужно сделать, это добавить необходимые Java классы в квест.1 `$ f6 A8 Q& q/ U( ^7 J
4 s0 X* g* q( m; y7 ]/ S7 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>! a8 G5 V' W0 ^; T
& Z# V- ]8 L. r* T5 F) ]% v/ L- </div>
Скопировать код- import sys8 [6 {$ L# f! {6 t2 {% x I9 v
- from net.sf.l2j.gameserver.model.quest import State
1 s* U4 z7 s7 t - from net.sf.l2j.gameserver.model.quest import QuestState s4 T/ h& _1 }! [ u1 T
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 120826 b4 b/ ?6 @8 `% a. o0 V
- FANGS_ITEM_ID = 1859" R3 {' U3 @, A T E, U
- DROP_RATE = 500000+ r$ D; F* q7 ~& s1 X: ~+ F
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :1 Q& p# `+ @ N: E" f3 @
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
! ?* |) n, F$ P
/ G! `+ }0 F' ^* z+ J5 t; a- def completed(st) :" e4 C- h Q/ z& e: M) `( V6 F
- st.setState(COMPLETED)
) s2 M6 I# I! A - st.clearQuestDrops()
: v5 T4 T( L) d+ }2 e. L - st.takeItems(FANGS_ITEM_ID,-1)3 T* R( Z1 j3 n, L% m4 ^! `
- st.giveItems(WORLD_MAP_ITEM_ID,1)' o0 J$ q, l9 |5 o
- st.exitQuest(False)
1 m) d! l( P7 ~' v$ q - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)), m! u) c, j) ^5 F. p
" R' O3 J- K H6 K
8 O6 M C1 E Q5 F) i+ m$ b1 F
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
9 R- k; B5 l' d& }2 n) n2 E8 i4 _) ^% A4 A* Q# o
- def check(st) :* y K# i( w7 M, x. ?
- if getCount(st) >= 4 :
" C( l' K! J3 T7 P2 C# x% \& u+ t - completed(st)
) m7 T/ N+ N6 C - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.2 h. b+ U2 W# N2 S/ L# }) |# m
9 X% d: |# \- w4 @+ [0 J+ q( p5 a( a1 X
- class Quest (JQuest):3 K- i9 h+ g. ?2 _- c$ ~2 v+ C/ @7 [
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
8 q$ _. V! y. A) ~4 ] w - def onEvent (self,event,st):
2 i$ J. b9 G: G7 w* V# c: j - id = st.getState()
. i" P# t S1 u7 Y: C: q - if id == CREATED : st.setState(STARTED)
* j. v1 S) D+ K - elif id == COMPLETED: pass2 i t0 q6 F7 y2 U( s! C2 T
- elif id == STARTED : check(st)* \* ~9 c- o: _% e k" z# q7 b" N% z
- return
Скопировать код- QUEST.setInitialState(CREATED)
+ p2 s* c" t8 { v4 ^ - QUEST.addStartNpc(7056)
Скопировать код
& _+ T1 T7 D" V+ }1 s
$ ^: A$ E5 z2 `$ s |