Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
/ X( c3 s. p+ h4 p z# f, W6 `1 @Сборка L2j) B- X" ?' a: R$ q9 o! ?3 n
Пример основан на сборке L2J.
5 e3 Y8 X$ d; f" Z
5 _+ y: {& s$ j t) O V# ~5 }; s: U& pПервое что нужно сделать, это добавить необходимые Java классы в квест.
4 T7 d6 z& r2 U: z
! J2 C6 x$ [ A: H) K- <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>
0 F% i& ], A1 r( ~, M6 R - % O l. w& y; M" u
- </div>
Скопировать код- import sys
' O% W9 J& G8 [4 R r- z R3 X - from net.sf.l2j.gameserver.model.quest import State
! ]; R S/ z0 l: _3 p' y6 P9 c - from net.sf.l2j.gameserver.model.quest import QuestState' M+ Q% i' n8 C# @
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082: M! h# w2 @0 e" ?0 k
- FANGS_ITEM_ID = 1859
) F& E4 a* S" d: o' p2 Y# ` - DROP_RATE = 500000 W/ z1 ~! X# j: n; ~; U
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
) P* `& P$ K& U& h- t - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):( E+ T& x8 O1 G7 z: ]& q
6 u+ n+ d/ O7 I' m' U1 k+ j2 G- def completed(st) :& V1 I |; W; B2 e
- st.setState(COMPLETED)3 t2 O$ c/ e6 {
- st.clearQuestDrops()1 `; _ W6 Q" `1 F3 u! N
- st.takeItems(FANGS_ITEM_ID,-1)
* B* ?& O+ U0 n9 H1 Y! L - st.giveItems(WORLD_MAP_ITEM_ID,1), |/ X# C% U% f; x, L. U
- st.exitQuest(False)
. |; K. Y Z3 w, I# U3 K' C3 k( ] - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))0 D+ n9 w t1 g
1 a# k! i5 n6 {4 G% B
7 l" ?# K0 F* ?9 ?1 e2 L) ?& [$ r' k2 J8 F; l* z2 [, W1 k$ k$ N
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):# x' u8 n; y- V% w2 e5 U$ C' o
3 q) N) |- y5 E' Y) d3 R
- def check(st) :; v2 a, n. D2 E4 W P
- if getCount(st) >= 4 :
# q$ o( L1 Y J% E' o8 V - completed(st)
. s( I, ~) Y( Q H% `1 F7 t) V - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
) q, L" b1 o- \& X; {8 }- j ~; S4 H3 z: t' D
- class Quest (JQuest):
) X/ N+ N( [) Z# i9 `1 g/ E& b - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) A9 v' ? b# Z# v. L4 Z+ ?. b: k
- def onEvent (self,event,st):
9 p; j2 n7 z4 q. J( | - id = st.getState()8 i K9 w: T- G0 C' l, G
- if id == CREATED : st.setState(STARTED); g9 }) p! c1 ? Z& |
- elif id == COMPLETED: pass0 |+ x4 {3 y) ~5 G, t6 F
- elif id == STARTED : check(st)
0 _- ^; q2 m' l/ j3 c: U3 T8 l. u - return
Скопировать код- QUEST.setInitialState(CREATED)0 I, m1 Y6 Y0 d) x* }0 l
- QUEST.addStartNpc(7056)
Скопировать код ' c) ~+ F: H' L* z2 a
( I y1 s7 X# q4 ` |