Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
5 o, B! c! S2 U: YСборка L2j
: j' @! Q) }1 \, l. f; ]/ T+ UПример основан на сборке L2J.
1 n6 v8 d7 c. n4 d
$ J. ]+ a- g7 w q* V. aПервое что нужно сделать, это добавить необходимые Java классы в квест.
. h2 `7 y2 U& E j7 L* ]) ^- ) L5 ~. a/ @( j3 |
- <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># q1 \7 u) ?7 f R$ K
- 7 _3 P1 G% V* [( r
- </div>
Скопировать код- import sys6 m& m( O1 R3 P+ j) `4 M
- from net.sf.l2j.gameserver.model.quest import State
5 i; k( _# L# r$ w, q! o; F - from net.sf.l2j.gameserver.model.quest import QuestState9 A7 W: w9 |' o. t1 O
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
V4 t6 V! ?% |9 {2 D+ F% p" k - FANGS_ITEM_ID = 1859
0 Z1 B! ]6 q# h+ H4 {) @- n x - DROP_RATE = 500000
/ s# {1 V7 m0 @ - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :: x$ l0 {7 s# X1 n) n- S5 T) l
- return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):% o5 g. x* E; Q; Y* o ]
|) R0 T/ b* Z$ K) Y
- def completed(st) :2 s: S2 C6 L& I+ ^
- st.setState(COMPLETED)0 i' W, N/ E/ l# W% X. z( j, F
- st.clearQuestDrops()
3 h, j7 ?3 H: u9 [# |7 H! H - st.takeItems(FANGS_ITEM_ID,-1) P5 C3 }& |6 _1 F- ~6 k" x
- st.giveItems(WORLD_MAP_ITEM_ID,1)0 E9 [& c p7 I) y5 }* ]. `
- st.exitQuest(False) E y3 s L$ B
- return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
# y h: h7 w5 d% f1 ?5 K* R2 G
% l' w! X4 A- u$ H; ^7 D' i( ]) g+ j! j' \* d, c7 W3 h
8 f! o3 l) ^& B" t4 v( R8 M
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):2 Z+ v8 N, v* d8 g
# `* E% p) F- x4 a1 \- def check(st) :" o- Z' |: c; d" r8 y
- if getCount(st) >= 4 :
- a5 b, b6 `$ }& c - completed(st)6 N) h% f8 g. F* W1 \
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
' C' V% U. \; z' s1 }" u5 q' E+ C1 K$ f7 N1 }1 A, J# d
- class Quest (JQuest):
2 ]. B) Q0 N% w& O( F! Y* } - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)7 }2 E3 q j$ R$ i+ ]
- def onEvent (self,event,st):
, k! C- H( m( M - id = st.getState()/ J+ @' o3 g7 f+ b2 s5 o8 U; D, I9 k
- if id == CREATED : st.setState(STARTED)* W K G' S7 s' J
- elif id == COMPLETED: pass" `% C8 F/ t4 v! G$ Y+ k' |1 ^
- elif id == STARTED : check(st)/ ~' n: X) N$ n
- return
Скопировать код- QUEST.setInitialState(CREATED)
* d+ P2 p, H7 O3 U2 z: \ - QUEST.addStartNpc(7056)
Скопировать код
6 k( [8 e9 H* J5 O ]
+ n$ v5 T& ^, o \3 _# v5 p3 ~ |