Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude6 U4 w- y* B8 i/ L6 A8 d3 O3 ?& ^+ b
Сборка L2j" t7 A+ z& D7 U4 E( D3 |
Пример основан на сборке L2J.
) [! ^2 E: X; B9 S
1 x: F" b" n8 p# G# s' rПервое что нужно сделать, это добавить необходимые Java классы в квест.
1 f- i+ K! a: Y6 @/ w( C. {, u- 1 [: k& a+ Z& I( n3 u( S) T
- <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>
2 k1 g; o4 i% j - : N8 p3 Z! v6 c. y f: {8 w
- </div>
Скопировать код- import sys2 e7 ^# M" T: U1 g
- from net.sf.l2j.gameserver.model.quest import State8 ]6 H4 ^1 a# q
- from net.sf.l2j.gameserver.model.quest import QuestState
; W6 h' f7 V1 E4 {& A& s9 V6 k, f - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
/ a' w6 _9 O. S) S# }& Q8 y - FANGS_ITEM_ID = 18593 x9 G9 \( D! O% r" O3 m* E# {4 P
- DROP_RATE = 5000007 K7 {8 L- u6 N; {2 L1 j
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :/ X' z$ G; b7 [' G8 v
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
' e1 f4 c; s$ _( {! F6 n( I( w
: J {: r, T- n9 I, ^& d- K' P- def completed(st) :0 G4 r* j8 [" ?6 X, `+ y4 L* ^
- st.setState(COMPLETED)
9 M6 R% V6 D0 ]; e" s" D0 ] - st.clearQuestDrops()6 j$ J4 c1 t" O
- st.takeItems(FANGS_ITEM_ID,-1)
- Q* V3 ?$ K3 k5 i; _ - st.giveItems(WORLD_MAP_ITEM_ID,1)- b0 N; P6 }6 A! K
- st.exitQuest(False)* a5 k; Q$ `3 p; O8 O& L) z
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))' y$ q" K2 j! I7 l, K3 |
% k) m- p# M% K+ j4 x5 Y& D$ k
5 ^* t6 ^9 F3 z8 H: k( M6 N( t8 ]. a g1 d, ?
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
P6 c! f+ d" z J7 L6 |
/ |/ Q) \; o3 D+ N; O- N) R6 f- def check(st) :4 e& V V) s" P) u( i$ k- G
- if getCount(st) >= 4 :) \3 E' C9 ?1 d( f
- completed(st)
% `) |/ [# y( ?0 H8 g - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
: W7 b( Z: f2 G" \( D
1 ~. e; g/ P- n: _% Y) W- class Quest (JQuest):5 E+ `8 P/ H* w4 j# S
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)3 N. v- F3 h1 C
- def onEvent (self,event,st):
. Y1 l5 v1 O+ l( ?1 ? - id = st.getState()$ t% o2 s, d5 X N% n
- if id == CREATED : st.setState(STARTED)
+ B, q J* r8 L2 Y; c# p9 R. | - elif id == COMPLETED: pass
0 z7 K- W3 t9 I) I& B1 O - elif id == STARTED : check(st)9 S/ W) I0 B' V; a, T5 r
- return
Скопировать код- QUEST.setInitialState(CREATED)
3 A. O& {; ?, Z( [$ y - QUEST.addStartNpc(7056)
Скопировать код 9 [5 i1 E, X+ R0 @9 V4 r7 ?
- H3 t" u% J1 A& U' Z6 }% |* u
|