Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude. \3 ?8 f' B: p& d5 Y. t* I  U3 q/ v
Сборка        L2j6 n0 m6 Z$ A, i3 ]
Пример основан на сборке L2J.  t. ~' v0 P9 Z( u5 _2 P" b

) I& q" O! g. @% ^* I  X3 ]" h1 |Первое что нужно сделать, это добавить необходимые Java классы в квест.: E4 N) W/ n9 A& t5 X" R
  1. 2 F5 P( I' G, ?- q! X% c& I2 J
  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>
    5 {" Y( O1 X' Y1 y4 @6 _/ k; j

  3. ; l  Y. ~2 v; ~' ^* r) H
  4. </div>
Скопировать код
  1. import sys
    ) @$ f+ I4 V" m6 o7 j! Z
  2. from net.sf.l2j.gameserver.model.quest import State8 v. ^" H; Q' @& W- I3 w
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    7 D5 G4 A* T4 m+ q( Y( r
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082! N1 g5 h- \. w) ~7 e
  2. FANGS_ITEM_ID = 1859
    ( w3 d% ^8 K# I. j6 @
  3. DROP_RATE = 500000" E& U) p3 `4 J5 s% d3 {
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :# Y/ v/ S) `% o0 ^( ^$ j9 t
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
* o. R+ e+ H8 a: F" Z3 o
1 y) q+ y- E  m/ L7 J/ p. O7 `
  1. def completed(st) :7 {# N0 l! O5 v+ V2 b
  2. st.setState(COMPLETED)
    / p+ C+ M4 J% h) [/ A2 h6 v. I
  3. st.clearQuestDrops()
    ! l, |8 t4 H( U) H" c0 R
  4. st.takeItems(FANGS_ITEM_ID,-1)
    - i+ Y- }, W% q8 p$ i+ `
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    % J+ U  L* K& Z' W! A6 m, P, d4 U
  6. st.exitQuest(False)
    - q5 y2 S) x8 w3 F
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
& X% J8 D% \; k5 N% \7 i$ T& K9 J. v  \8 o$ g8 l0 E, o8 Z& w3 n

- k2 a" T! l7 D8 a
7 ?+ L- o& c, H
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):1 f( G9 c# Z: D/ {2 F$ _
2 `. Y- v% l% d
  1. def check(st) :9 q$ _2 ]3 f8 i  m( S
  2. if getCount(st) >= 4 :
    , M' l3 j5 U. g  @- A1 }  M% @- c
  3. completed(st)* i% `8 t/ X/ |# |) K/ O9 z
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
9 s1 C2 \- t2 d$ {/ a4 C# L/ e1 d% P/ D& Q
  1. class Quest (JQuest):9 C+ z0 a0 D4 h: K8 t# ]' H
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    0 T5 y1 G& [1 \
  3. def onEvent (self,event,st):
    # i0 x. A4 q1 o6 M$ }/ L
  4. id = st.getState()! p- s' p1 ~: T4 \. ?2 D. u
  5. if id == CREATED : st.setState(STARTED)
    , y7 S6 u3 Z$ [* N% g: C- u. v
  6. elif id == COMPLETED: pass
    / T4 q9 `6 @! r- o
  7. elif id == STARTED : check(st)
    # R  c6 M: c3 Z( h2 J- T
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)- u. o9 K+ ]' m+ |% [
  2. QUEST.addStartNpc(7056)
Скопировать код
" [4 q" V3 v2 p3 C3 t

! V/ A  W2 @3 j2 J+ P* M
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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