Top.Mail.Ru

[Квесты] Создаём собственные квесты (часть 1)

[Скопировать ссылку]
admin Опубликовано 2024-9-17 18:39:47 | Показать все сообщения |Режим чтения Распечатать Назад Вперед

Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!

Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться

x
Хроники        Interlude
+ [+ f8 e! j. jСборка        L2j
, O% Y7 f, d  E* fПример основан на сборке L2J./ u, q8 S$ T5 k# {" V' f
0 Y7 g4 u: }9 u% U
Первое что нужно сделать, это добавить необходимые Java классы в квест.
9 @; \9 e7 x, A$ {
  1. & L. L2 A1 q% h: t8 {
  2. <div><span style="color: rgb(20, 20, 20); font-family: Monaco, Menlo, Consolas, &quot;Roboto Mono&quot;, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace; font-size: 12px; white-space-collapse: preserve; background-color: rgb(245, 245, 245);">(net.sf.l2j.gameserver.model.quest).</span>
    0 |% J  n! m  H" Y& t
  3. . q2 e" o4 J' V6 N
  4. </div>
Скопировать код
  1. import sys
    7 k1 y3 s6 H6 y' E: G5 T
  2. from net.sf.l2j.gameserver.model.quest import State
    1 y# B: U2 ?% ^8 [' y/ v
  3. from net.sf.l2j.gameserver.model.quest import QuestState  p: J8 _" |- n3 x
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    $ J( d/ z9 R( ]. r0 H0 b
  2. FANGS_ITEM_ID = 1859
    * X* n( N( X! t$ R, G
  3. DROP_RATE = 500000
    ! r! B/ I' R5 H/ c3 o" R/ C
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :: R; t: I6 x9 i3 _  D
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
6 t+ F# t+ A  ^9 _, {2 s3 S; t8 J7 F: O) a; c$ O/ u( ^
  1. def completed(st) :+ L" u4 D" F8 x  v
  2. st.setState(COMPLETED)5 a6 i1 Z1 A. a& P9 o4 l
  3. st.clearQuestDrops()1 E0 B1 W5 W% L- ^6 P
  4. st.takeItems(FANGS_ITEM_ID,-1), {7 ?1 q* Q6 T( [0 k
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ' ^5 }! ?5 E8 E' \, E" x! K# U
  6. st.exitQuest(False)5 z1 B2 E  O, k" o9 e: X/ h
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
4 ~+ x2 G! l5 M' G
# [$ ~% n0 B6 {: M% L+ _7 e1 ~  R5 P+ h+ b& I! O0 F

. M* b' e$ m% a2 YИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):! s. Z) k: n0 C$ x+ v

) w* x8 X2 E4 `! O- }3 B# w1 z
  1. def check(st) :: R8 @. C8 P( b( G' f+ o
  2. if getCount(st) >= 4 :
    1 a* F; n) E% ~
  3. completed(st)" g) a% B% _0 _- x6 J
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
9 G" U$ o  D8 W4 X: ?* C6 L0 l- r8 R6 \+ z3 P
  1. class Quest (JQuest):
    $ M% z, Q4 Q+ C% i- z
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    " Q5 h. g9 p/ J0 c
  3. def onEvent (self,event,st):
    - i, U3 ]  {2 I0 ^" o9 j
  4. id = st.getState()$ P5 n* z! D( G
  5. if id == CREATED : st.setState(STARTED)
    $ ~9 t; l. |0 z7 Z' S+ i7 T
  6. elif id == COMPLETED: pass7 W7 c. q% [$ f, I) T& a1 [
  7. elif id == STARTED : check(st)
    # Z- A0 V; k3 c7 `7 j
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    ) `8 I5 ^. V, i
  2. QUEST.addStartNpc(7056)
Скопировать код
. B, ~2 V" b* s+ q9 Z

- r( \. u% a  J2 G
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

Правил начисления баллов

Опубликовать
Сектор творческих людей
Горячая линия

638638758

С понедельника по воскресенье с 9:00 до 23:00

Обратной связь

admin@artace.ru Онлайн

QR-код

Powered by Discuz! X3.5© 2001-2021 Comsenz Inc.