Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
$ a& q8 Q5 Q% [4 w' c- DСборка L2j
# d$ I: e8 t2 h6 L9 V) {0 AПример основан на сборке L2J.
7 M: i: X3 P) P2 N! z v6 C6 m% j5 C J* n( y
Первое что нужно сделать, это добавить необходимые Java классы в квест.! r, ~6 e2 ?% J9 t6 I
* {1 V# U1 W8 ?: w, t1 {+ {3 e$ n) C- <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>( S0 Q( ?! \" ]" K0 N
; Q* s1 m9 O( W5 P- </div>
Скопировать код- import sys! c F: M$ c/ Z ]7 U3 i
- from net.sf.l2j.gameserver.model.quest import State
0 u, X4 ?+ \+ n1 q9 J' A" Z - from net.sf.l2j.gameserver.model.quest import QuestState
, G9 [: v0 _1 V: X7 K3 E+ W - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 120821 V: M! i/ L6 B& e8 N6 e6 b+ V
- FANGS_ITEM_ID = 1859
4 v/ I* Z6 Y, \" k! @% O- Q% V - DROP_RATE = 500000
3 i9 }9 {' j( O9 E& E6 K# j+ q1 D - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :. t: X" {4 Q: G! Q6 C( e% B, E
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
4 E1 w2 {. Z( p! ]/ S8 Q
# ]4 m, v. g( @' c& p6 A- def completed(st) :3 ]4 m8 b" }0 j3 P
- st.setState(COMPLETED)
6 T: x8 }3 t+ h( h - st.clearQuestDrops(). e4 o1 q0 T0 J* V# O( u X
- st.takeItems(FANGS_ITEM_ID,-1)9 j- l6 L4 g' m
- st.giveItems(WORLD_MAP_ITEM_ID,1)
! F- ]/ T5 g/ e8 v4 u5 U - st.exitQuest(False)
* a% C; s: n ~) I3 J5 F% w- G - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))1 y1 A0 k h( l- m: K. P# Y0 t( W
o* ^, c; @4 o" m6 |% [$ e% `9 L
9 R# |, V* E, K; \# |0 w0 r/ y; Z) n v0 I' `) s' }5 w9 @+ Q
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
* Y( |" y( Q9 H) ~ q/ y1 a p! M. M2 m+ N* S8 h" C* _
- def check(st) :( r2 v5 }5 w5 g
- if getCount(st) >= 4 :
+ x2 j2 |1 E Q& H1 W - completed(st)) W3 o7 C+ W6 E5 {
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.+ x3 D/ q' b, M" i& z
% y. q' h% e5 N8 D% P) k. Z
- class Quest (JQuest):% C" [1 t( T: c5 q ], `
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
7 h! t: l1 d' z( d( u* h- ] - def onEvent (self,event,st):! v! \5 |0 S9 v8 d
- id = st.getState()- D9 W8 a7 ~3 J3 L2 k) Q$ J& w6 L
- if id == CREATED : st.setState(STARTED); z C6 ~+ T& R
- elif id == COMPLETED: pass( {. K# x, C6 U- R2 n! |# f
- elif id == STARTED : check(st)( w! I$ A8 \( @& X1 j6 f
- return
Скопировать код- QUEST.setInitialState(CREATED)
' ] M: _- O- ^( H+ D" W - QUEST.addStartNpc(7056)
Скопировать код 0 D. a. ^5 J0 v$ o$ V) \) H
+ k/ j. Q; }1 }6 [5 d
|