Название: Создаём собственные квесты (часть 1) [Версия для печати] Автор: admin Время: 2024-9-17 18:39 Название: Создаём собственные квесты (часть 1) Хроники Interlude C$ p/ j, n% }Сборка L2j 9 o( S/ N+ `. H* v. |' k% WПример основан на сборке L2J.8 K; {0 p- O7 j/ u9 ~ i+ E
9 |6 E5 z0 i2 U# a0 ?4 D& tПервое что нужно сделать, это добавить необходимые Java классы в квест.2 \& O2 M R/ c% Q+ c2 G
5 [! S* o6 t7 y ^, S5 t
<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> / G S _/ k9 H6 A. a( m/ h. g: n
6 M8 ^; x8 L7 p; m: K1 c |: a
</div>
Скопировать код
import sys- x+ c# h% d9 ~
from net.sf.l2j.gameserver.model.quest import State' n* H& Q! F$ _/ G" |7 O
from net.sf.l2j.gameserver.model.quest import QuestState- C% Z, p9 r4 T6 f/ R
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
KELTIR_NPC_ID = 12082 ( L# e4 y! _. \- A( c t
FANGS_ITEM_ID = 1859 ; k9 q: Z# G, ]; b1 s w. z
DROP_RATE = 500000/ M8 V7 ^3 G' Y% N0 L$ n
WORLD_MAP_ITEM_ID = 1665
Скопировать код
def getCount(st) :4 i1 Z5 F; w( {7 Y, t4 }
return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState): 3 ~3 a/ x$ y) B' ?1 b3 ] / s& U& X2 o! r r) [. ^. U
def completed(st) :& P% W+ B" R/ [ U$ ?' H' j
st.setState(COMPLETED)' u I. m; V( j
st.clearQuestDrops() % ~5 {3 c4 C3 @0 R
st.takeItems(FANGS_ITEM_ID,-1)1 x* D7 z; K1 {3 i
st.giveItems(WORLD_MAP_ITEM_ID,1). U8 S" G1 \ j3 ]+ z) x
st.exitQuest(False) 9 g( R& g9 H$ I( l# b
return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)) 5 R6 l6 L: Y* E/ _ O4 M. I4 z. G
! t5 }- {$ M O; }. l: F
* N, i3 C! Z8 |/ J
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):3 y3 O; V. ]3 `* z# A2 Y o( z+ x3 h
& `4 M, `! D7 k9 L# Y) U: S' Z4 p
def check(st) :- U$ C/ r) i* c0 S2 _
if getCount(st) >= 4 : % @$ _+ ]% O2 g) a
completed(st)1 z4 m0 ~: E* u7 K
return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.8 D0 r# h4 L, F