Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude  O' t4 h6 C, p: S4 z
Сборка        L2j6 T( |: I3 |0 W6 t% E
Пример основан на сборке L2J." D" n( X) K1 C( f# F

8 V& e& M3 ^( i; ]2 @# x  E, [Первое что нужно сделать, это добавить необходимые Java классы в квест.9 d8 ~( z( z/ t+ g
  1. $ ^0 t) _4 ^* Z
  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 z1 X8 X# y3 \  i" t$ J7 }

  3. ; J( E# u; o9 u. d  T! |% ~
  4. </div>
Скопировать код
  1. import sys
    7 q. B& I  Q( {. |) q& [
  2. from net.sf.l2j.gameserver.model.quest import State
    - P0 ~; }) z8 a% l# {. X# T) ~
  3. from net.sf.l2j.gameserver.model.quest import QuestState) D2 ?' U' r) b0 O+ P* }9 Y
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120825 ^- P3 ^4 J2 a& |
  2. FANGS_ITEM_ID = 1859
    ' d! W$ m8 z. v* |8 Z/ R
  3. DROP_RATE = 500000* g7 }9 s% j: {; k0 T
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    * T3 y( ]8 Q$ q5 e8 S/ a6 T
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):* T& u. K) i0 |+ m0 s

& P" z. i7 e0 m1 d0 s
  1. def completed(st) :
    . h5 E9 U- w  [4 s# [" |% n
  2. st.setState(COMPLETED)
    $ V8 m7 g0 ]* k& q& K' S" E8 E, T5 K
  3. st.clearQuestDrops()
    ( [. A; C* X6 f2 `! a0 [2 Q: G
  4. st.takeItems(FANGS_ITEM_ID,-1)
    " e6 n# H5 ]: q  N3 l
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    7 i$ U$ }/ J; J. d0 X- J
  6. st.exitQuest(False)
    6 ?' H5 H, p: F: N9 C. v
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
$ }5 v) w6 j" F8 Y
- ^% G  h' |. v" l8 Q
# @% ^+ d* H! y; a0 F( g) g
3 _" {& \1 w& c7 e( `
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
5 I5 s6 h5 Z8 N3 ~! r+ z* ~" \2 u" @7 j" R; _3 s$ Z5 `: B
  1. def check(st) :# @6 V4 D' M" r* B" d" b9 C, O
  2. if getCount(st) >= 4 :
    ' G7 ?9 k8 U9 W
  3. completed(st)
    * ~) o; J/ e" L' r7 }  d) h
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
, z" ^! O+ f8 ]9 q3 T) ?. x4 K' m$ S7 S( }2 f
  1. class Quest (JQuest):
    - i2 A4 n; C4 W8 {* [9 N
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    " z7 z5 u' M# M
  3. def onEvent (self,event,st):
    % m' f( m7 W0 K# m
  4. id = st.getState()
    : A1 M: ^  w% F5 G% k& U; o) z+ x
  5. if id == CREATED : st.setState(STARTED)
    ; ], C4 a' d/ a9 |) v
  6. elif id == COMPLETED: pass
    ( f2 y' N1 p: ?9 w" U( z) s
  7. elif id == STARTED : check(st)- r4 K$ ]1 Q, r* z3 |/ t
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    6 z# X# ]1 O& ]1 |- e' P, `
  2. QUEST.addStartNpc(7056)
Скопировать код
! K# s  A7 |! ]; K
# S, Q& u+ R* j. h) B: \9 H
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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