Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude
* L( }; E7 l! }9 eСборка L2j
. ^& Z3 n7 B& N* f0 IПример основан на сборке L2J.
4 p \$ ^( P# G$ }5 \4 o9 V+ W) R. E7 y2 q. P$ K0 N
Первое что нужно сделать, это добавить необходимые Java классы в квест.- e4 c& V; U2 d+ j4 s* H+ i
( X0 Q B4 I7 s, u- <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>
9 D( J' \/ J$ |" u - - B6 g9 C0 g8 K) x. c" ^! t
- </div>
Скопировать код- import sys
* i% ~, G# Q' s - from net.sf.l2j.gameserver.model.quest import State5 M$ l/ e A2 k7 L2 s
- from net.sf.l2j.gameserver.model.quest import QuestState9 z) X- D3 Q& e/ T! x2 {
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 120820 \( j& F* y; u+ e/ t/ F( a2 q3 D5 ^5 {
- FANGS_ITEM_ID = 1859
3 j9 C, ?" B' l& z - DROP_RATE = 500000
+ F5 F- D A7 Y+ a - WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
- c1 |5 |! o3 L9 G1 K( Q! X - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):2 U! g* `4 \3 E
- d3 A" P' y# D( m% T- def completed(st) :
' c4 J3 W$ T h& l7 v- u) R; W - st.setState(COMPLETED)
4 x6 E2 p9 }' n: F; D1 Z0 Q - st.clearQuestDrops()# j; c+ M' M" p& I5 |- g
- st.takeItems(FANGS_ITEM_ID,-1)+ _# _8 I0 o. g6 _ Y
- st.giveItems(WORLD_MAP_ITEM_ID,1) a4 `* v& m- \/ ]( _" D5 g
- st.exitQuest(False)
9 V- t1 t4 x5 _8 I - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
7 t0 @( Z# L- g8 B8 _! W v# X+ q& [
5 t' n0 h( d2 d' l* f% X
/ a" t% s& |. h
+ [( Z# R! c) i4 [И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):# l7 u# y6 @0 z \
; Y: ~- A( B' \3 |. I2 N$ d
- def check(st) :
6 }4 W, D3 x9 u$ y' f - if getCount(st) >= 4 :
p; M; L3 F. \8 v' e; t - completed(st)
6 u% X. o. v/ l" g9 D3 |$ |( \ - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.! E$ i2 Z) h6 @9 ?' L, W
* s& Y$ h6 u: d* W' o3 B6 u% w
- class Quest (JQuest):
$ u1 o& n: ^- l' R. Q0 ^1 C; X - def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
( Q# J8 K( P& w/ p6 s# ]( t7 D - def onEvent (self,event,st):
) P( z, n2 V# u - id = st.getState()3 K/ J) V. o8 q# a( I* y5 h% s
- if id == CREATED : st.setState(STARTED)
7 k/ |/ D0 H6 K3 O7 \ - elif id == COMPLETED: pass- x2 m+ a5 }* Q
- elif id == STARTED : check(st)1 ]* P/ i, `% w- Q# B* w
- return
Скопировать код- QUEST.setInitialState(CREATED)
, K- X& ^( W5 u& W! c! l0 z - QUEST.addStartNpc(7056)
Скопировать код 7 G0 D* C' J; Y) c" B' o% T1 x/ X
& t$ p8 l4 C0 b& ?" S! h8 {$ b/ n |