Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude# ]7 G, L6 B& P* F7 @+ x) h  `$ {
Сборка        L2j1 J4 q: W! f9 ]0 J
Пример основан на сборке L2J.- J% a6 k9 S/ p
, A; [/ Y( U: M
Первое что нужно сделать, это добавить необходимые Java классы в квест.. z6 @) z* |' O5 Z" E4 M  G
  1. : e4 m) c# U5 w0 |; u6 |/ R9 A
  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 K2 I5 m% c* M) B
  3. # n& F6 ?; n+ ^
  4. </div>
Скопировать код
  1. import sys  \8 h! y( n. H
  2. from net.sf.l2j.gameserver.model.quest import State* h) Y5 o" ^  }8 v! j# z' a
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    5 B3 B# D! C- }% V& L1 i  G
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    $ f6 g! V3 f4 ~8 B9 n1 c
  2. FANGS_ITEM_ID = 1859
    * @, U' f! a5 c& `  Q% K
  3. DROP_RATE = 500000
    * Z% T3 K* x# I6 r) I
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :7 E# z" D& j$ Y
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
; }! R9 u4 u3 |$ H
% T9 P0 s  A* W8 h
  1. def completed(st) :0 m2 O( _5 `! O1 E
  2. st.setState(COMPLETED)
    1 @2 e+ ]( U  V) E& u! R
  3. st.clearQuestDrops()3 `1 |5 _4 [+ O# z7 O
  4. st.takeItems(FANGS_ITEM_ID,-1)
    9 H/ \( _# ^# l5 H; X  d$ K7 h
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    " P& `! s$ l) m  s9 U# ]1 X0 o# R
  6. st.exitQuest(False)
    0 a1 v2 S3 ~+ u! c; W$ I6 m& M$ G
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))% ~% }/ a; a# K" H6 h1 ]% Q
0 o- p, u! r- p# |7 o0 {2 d

( C; E- a7 h+ o2 w8 B" ?* Y
% H( X$ E, i/ D: B2 @: n0 t
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):% G; ?, C) p( t8 Z  b" c

4 ]5 L" s( b5 Z: z) y6 f0 C
  1. def check(st) :# k: t8 P. P! T; w7 Z$ R1 U
  2. if getCount(st) >= 4 :0 g' I6 i, a' |3 n1 V' f
  3. completed(st). i& G% a% I" B1 Z, j# o
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
1 C3 d! ?3 a4 v% n2 k2 r0 }' ]8 s, M
  1. class Quest (JQuest):' B) }5 o! X+ B
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    2 ]0 c# ?. P" M" _
  3. def onEvent (self,event,st):9 h" E6 A8 f7 O) U8 h/ ~
  4. id = st.getState()
    5 x# A0 c( s2 l* ^% s
  5. if id == CREATED : st.setState(STARTED)$ _" l3 p3 k2 i$ D
  6. elif id == COMPLETED: pass
    ! N& A! }& U0 F
  7. elif id == STARTED : check(st)4 L9 Z2 L2 {" H. X  Z- {8 V
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)9 q: i1 i' h- ^8 w
  2. QUEST.addStartNpc(7056)
Скопировать код

) e* ?2 K! z  H; y- t$ B8 |; Q3 Q$ r$ H$ G9 r
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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