Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude' X9 b; C+ Z: l% Y1 u& }' n
Сборка L2j, Y7 y; }) [+ e4 }$ b5 a
Пример основан на сборке L2J.5 f9 Q0 c3 x1 D' y
) Q2 w$ W4 O" |3 j8 I: t3 bПервое что нужно сделать, это добавить необходимые Java классы в квест.
0 J6 M7 I' T" G. b; b; V- % k! m8 g/ T( r+ m9 N, f6 p
- <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>
" ~$ x" T' Z' `6 x |% [% Y
; J7 n0 ^& P$ D! {; @4 n* Z- </div>
Скопировать код- import sys# A: S1 B$ `9 Q6 ^0 I- E3 v! e
- from net.sf.l2j.gameserver.model.quest import State
- I C/ k$ h* E; d0 `# c: Z; [ - from net.sf.l2j.gameserver.model.quest import QuestState
4 |# S" H* U. d& X" l - from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
) C7 E8 c! ] H- O& J - FANGS_ITEM_ID = 1859
j, P2 S0 O' _! T+ L7 ~% y - DROP_RATE = 500000; E3 f, d/ @# Z
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
! M1 \: ^3 `8 R: h - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):$ U$ c% R: Z- w" c
$ y$ g0 z- m# v- def completed(st) : p! o5 t! T4 Q* S- e7 l9 \
- st.setState(COMPLETED)
1 e% u: j8 e/ p( w$ Y: B - st.clearQuestDrops()0 K! Y/ ]$ H- U1 h# [: e
- st.takeItems(FANGS_ITEM_ID,-1)
3 h' K& w6 j3 i/ h# B - st.giveItems(WORLD_MAP_ITEM_ID,1)
- |# i! X1 @' U' g" t. | - st.exitQuest(False)
* z9 N' T0 p2 Q. Z - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
( R1 C0 _' b0 R* r! L# y: b' G3 `4 d# H
. F) I" }0 M/ u& X
( A9 o& P7 `1 e& x
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
G- B) z# d1 n" _! w2 M4 ^) |) `
& s' A. h3 N' w b& t- def check(st) :
, L: F! }, Q. g8 R N% @6 K2 q - if getCount(st) >= 4 :
9 x5 U7 d% j* @9 M' i. H - completed(st)
' S1 g8 I9 [7 B p" q! | - return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
8 E& f% C# s) P! ^$ `" m( v
6 E0 K, j1 d5 K- class Quest (JQuest):8 L y3 j# T! y3 P9 }2 e' Y% h
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
$ |, n' E9 J1 D( K4 g1 H9 X - def onEvent (self,event,st):
1 M3 v" z7 [/ [3 h s$ \; O - id = st.getState()
, Y, V2 k% _. T9 t& X - if id == CREATED : st.setState(STARTED)' T% Q9 M3 J4 T7 S2 G
- elif id == COMPLETED: pass/ j4 d6 a3 M) v0 x" S% e
- elif id == STARTED : check(st), Y$ f, a' M2 C) K, `4 R
- return
Скопировать код- QUEST.setInitialState(CREATED)
4 H0 r6 I; b6 ]/ Q( I+ e - QUEST.addStartNpc(7056)
Скопировать код ! y8 R0 X* S6 Z0 `( l) ?
, A% U( Y2 G! Z- v+ {! p3 d
|