Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude: H, J( s* Z' ^/ l* f. [" B7 J: m
Сборка L2j
2 P. k# ?* G6 z8 \' t0 VПример основан на сборке L2J.: F: R; v- `$ v5 d3 q$ J6 X. ]7 ?
' I& O+ ~8 x( m
Первое что нужно сделать, это добавить необходимые Java классы в квест.
3 P) v* e- _( y4 B- + |" I5 Y7 A4 U1 l
- <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>
! }3 d% D. J% s- O
+ Y% V, J8 B& E; }0 m0 }& O4 |- </div>
Скопировать код- import sys
% P0 E! s5 k: @4 X' F - from net.sf.l2j.gameserver.model.quest import State) T0 F$ P, f% o" A, J
- from net.sf.l2j.gameserver.model.quest import QuestState- K# I8 x, V' {1 \! r& g- h
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082/ Q I w# i6 K c! o: u, C
- FANGS_ITEM_ID = 1859# C* S/ ~" Q# n4 M1 x
- DROP_RATE = 500000) m" r3 G) ^! s
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :) g0 V4 U7 L/ Q# B
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
* U6 x7 ?0 {% V+ M; F1 I
$ @" I2 O" T. P# e% m- def completed(st) :2 z: } K; K: v. t6 y5 d
- st.setState(COMPLETED)+ T: C! ]- l! t
- st.clearQuestDrops()) w2 b& x/ n( ?. z
- st.takeItems(FANGS_ITEM_ID,-1)8 h, L, D7 _! y! U
- st.giveItems(WORLD_MAP_ITEM_ID,1)
1 O0 O1 q2 f% i) s3 E3 f! ^ - st.exitQuest(False)+ e5 f+ F v2 i* O9 s
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)) E) {' h/ o3 t# z
3 V/ M! i% p: O
1 ~. _1 F1 v! M4 l/ S+ s; A' A7 r1 n- n
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
0 l% E! V% K8 A$ [ C6 S4 q. x! g4 Y7 `3 U: G9 b7 H) V
- def check(st) :( b: n5 e1 u6 v
- if getCount(st) >= 4 :
1 J" U$ J8 u! X - completed(st)
: g; o/ A4 W# I+ H - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
3 y7 x4 p2 r5 _9 z" w% p# \( f2 N* X
- class Quest (JQuest):; ?) m* \2 j$ X- A- N5 J
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)' i, p, E* K9 D3 I
- def onEvent (self,event,st):
, M2 q+ J0 Q6 W: m' X: \# Y - id = st.getState()' F0 @/ ]+ \$ p! [7 l
- if id == CREATED : st.setState(STARTED)( K5 j$ ]3 r) p6 k. F+ T+ E
- elif id == COMPLETED: pass8 c1 f# s" j3 O" H" Y8 d
- elif id == STARTED : check(st)
) i! W3 J& Y# [4 X$ F' J - return
Скопировать код- QUEST.setInitialState(CREATED)% H1 z5 E. a/ a0 S# b
- QUEST.addStartNpc(7056)
Скопировать код 0 D, E: H& |* X. g4 g
1 I& u# ?8 h" ]! a0 U7 Y |