Название: Создаём собственные квесты (часть 1) [Версия для печати] Автор: admin Время: 2024-9-17 18:39 Название: Создаём собственные квесты (часть 1) Хроники Interlude ' P6 a; L5 S. A) V4 nСборка L2j9 ^' x4 z9 I7 l' p) U: Q/ e Пример основан на сборке L2J. 8 o6 {/ B# k q. Q5 A 3 u- P" O5 \* H4 S& b/ Q& ?' QПервое что нужно сделать, это добавить необходимые Java классы в квест.8 U0 h5 k* E4 p4 A7 `
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
KELTIR_NPC_ID = 12082 : W; Z( v+ r6 c' E9 O
FANGS_ITEM_ID = 1859 ]$ k& |; ~. |
DROP_RATE = 5000004 C( a) Y v2 Z. z2 z* A) c1 W
WORLD_MAP_ITEM_ID = 1665
Скопировать код
def getCount(st) :; s1 L+ W* y4 Q% D& `1 C
return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):1 f ~; v0 T2 j7 M% Y$ B$ m( K
3 r9 q3 O0 [3 `/ h1 J1 |
def completed(st) : 7 o6 c, W( u) A# _
st.setState(COMPLETED)+ e5 e2 |3 ^/ R7 k
st.clearQuestDrops()0 `! E6 w; s) O- `; z
st.takeItems(FANGS_ITEM_ID,-1) 5 p0 o1 ^0 H$ X
st.giveItems(WORLD_MAP_ITEM_ID,1)1 R5 o+ x4 m: f/ N( M
st.exitQuest(False)5 }& b8 W z3 ^% U7 q- q
return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))8 @* B: b) v+ m+ Z1 A2 y2 \5 g
/ g1 L, `' D$ K y9 L1 v
% n5 Z) m/ O, _' k6 T) g. V" @% {: x5 o" a1 Y
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):0 @! O* p" B+ w" |
+ t2 l, M t, Z( B' N4 i* k
def check(st) :4 K" l, o: g+ _& v6 ~
if getCount(st) >= 4 :; p8 r8 N" y0 B# I6 K3 _
completed(st) & _ D0 J7 C+ S( A7 N K
return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал. . }' X+ M6 z6 y1 g( \/ `; Y, {+ f: k) n" q
class Quest (JQuest): & j; o2 G" v F1 z* `" ~) Z1 W
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) 2 |6 B2 {3 D" [. N, i