Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!
Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться
x
Хроники Interlude- R; u, m! u& h. ?9 L) {
Сборка L2j( S; V; q5 T$ \& }0 A
Пример основан на сборке L2J.& V( P( H# F- F8 a0 Q- `4 i7 I7 S
2 ?" a6 v1 x" ~- L6 V, ^9 z
Первое что нужно сделать, это добавить необходимые Java классы в квест.
- o: k h f6 _: i/ l* L
* X# X$ [, U8 c- ?, {! z3 [6 p2 M- <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>
" @/ R+ }5 y, W% b, y' ~" B) F - ; L b, a) L5 |; q6 a' x1 V7 c
- </div>
Скопировать код- import sys+ K6 r1 q5 C* D2 T3 o1 Q
- from net.sf.l2j.gameserver.model.quest import State0 \2 @/ h0 I0 J
- from net.sf.l2j.gameserver.model.quest import QuestState$ {1 N. @4 N8 ~& a
- from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код- KELTIR_NPC_ID = 12082
# G$ ^* D& d6 D v; h2 p - FANGS_ITEM_ID = 1859/ w/ L4 t# S" j9 C! k/ ~
- DROP_RATE = 500000: e0 c+ t2 M' n! ~0 [
- WORLD_MAP_ITEM_ID = 1665
Скопировать код- def getCount(st) :
' D/ U, a! K. {: e# ]6 G: U - return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код Функция для завершения квеста (st должна быть в QuestState):
% U' I5 M8 f( Z9 K. o2 U' o% J+ z9 e* P9 X) P. o% x7 j7 V
- def completed(st) :
9 z- P3 Q2 Z& J) R; ^4 ?# Y - st.setState(COMPLETED). t5 r$ `$ A; h+ F x: [# L
- st.clearQuestDrops()
, a# c/ q9 {+ v. [3 N - st.takeItems(FANGS_ITEM_ID,-1)
. x o. b, M3 {+ K4 ?7 R - st.giveItems(WORLD_MAP_ITEM_ID,1)6 E# d2 ]9 r, `
- st.exitQuest(False)
" m: k; w0 F- {3 N; n1 W - return
Скопировать код Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
; s2 ?( g9 g, h/ M7 f1 |2 \( r
' `! Q" L: U$ M6 l0 B& \3 a- C+ e8 t# a4 L! Q8 m
" V" F% U8 z3 P3 Z5 E; z- {6 D% fИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):. k4 D" \6 q8 X! K7 T" r2 G
( p( z0 o# A& a" x9 o
- def check(st) :6 v) ^5 n& q& ^& F3 A9 b. u# }
- if getCount(st) >= 4 :$ Q% H* W$ }; B/ F3 H
- completed(st)1 A/ Z7 M. l3 t" x% O
- return
Скопировать код Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.' h7 ^" I" M4 o2 I6 C; Q. o
+ _7 g6 O* V4 B( |) |9 w- class Quest (JQuest):# F, A! D# Z/ x& Y7 s
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
9 W" ?, ?( c* p5 r$ m9 B - def onEvent (self,event,st):
, w+ G1 \3 ?2 O* C - id = st.getState(), A+ Y5 E+ T* a: @2 D0 f
- if id == CREATED : st.setState(STARTED)9 q2 w+ p$ R2 e% {: N9 l0 ?/ T
- elif id == COMPLETED: pass9 P1 p: _: y0 p# L, M# k& g
- elif id == STARTED : check(st)! B4 e, x& z' A" ]
- return
Скопировать код- QUEST.setInitialState(CREATED)
5 P+ T: }8 b! x$ k! n4 @ - QUEST.addStartNpc(7056)
Скопировать код 0 e: k6 e* J" Q. w V
* e- G" ~. \' N0 i- H% l/ I4 n |