Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude+ t7 n# s& u% `9 w
Сборка        L2j
4 [' b' x  B2 t" b/ [% A% MПример основан на сборке L2J.
8 T7 Q. H* Z3 e+ L* W
0 T, t" P8 a# I7 a( LПервое что нужно сделать, это добавить необходимые Java классы в квест.
! ?3 X7 _0 o4 k* ^* }7 Y" \

  1. - `6 Z: `' T5 K
  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>8 W! p+ ~8 t" P

  3. * g* E" b6 f+ G' b) I- {/ l
  4. </div>
Скопировать код
  1. import sys$ K: x7 h6 O2 a1 ?4 E& U7 R
  2. from net.sf.l2j.gameserver.model.quest import State6 ~8 e4 P) _" t4 z- Q# A2 J8 }
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    ; A% ?: h( ?0 h) s6 i: T
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120822 A, P+ O! f5 h
  2. FANGS_ITEM_ID = 1859
    ! b  P% o7 a; B" G0 j0 n* R
  3. DROP_RATE = 500000- V8 d! f0 J; t( K: c
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
      m$ a, {; [( a3 y
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):) @! y4 o& x% q$ ^
7 ]& Z! }- h3 U8 x- u) o
  1. def completed(st) :* C& {9 v" V$ a: b& b; ?5 e
  2. st.setState(COMPLETED)3 K! f/ G  V/ A8 h
  3. st.clearQuestDrops(); C0 W. d# j! \7 x5 p
  4. st.takeItems(FANGS_ITEM_ID,-1)) Z5 t6 D2 Z: k
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    & m0 E+ N2 H0 q
  6. st.exitQuest(False)
    , S4 V# S: F( W5 U9 Y1 b
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
$ p+ q+ o9 v. Z2 G# @. m
6 h7 H0 s$ q6 e; T( c0 P6 G9 j! A" ~  ^& O- ?
, n& S" T6 M9 J9 _
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):5 z* `$ f" g! W6 B! T1 J8 V
2 ?3 p0 a) G9 i) Y, w& b
  1. def check(st) :6 C" ^. k6 o# }5 k6 u
  2. if getCount(st) >= 4 :
    , q! s1 d& D- P( D+ ]9 A
  3. completed(st)0 v" \" m8 a6 h
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.- f; U5 g! j4 j( ]5 }' ~+ |
* M6 |; ?1 L  N& n$ u1 z# I1 l
  1. class Quest (JQuest):% j. F  D* O& `/ T' o5 f
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    & [  A3 d6 ~3 n
  3. def onEvent (self,event,st):
    2 M7 [+ R# ?/ u" O+ S) A3 S
  4. id = st.getState()& L' t& `! r; C4 }$ y
  5. if id == CREATED : st.setState(STARTED)4 P. |- D& Y: e
  6. elif id == COMPLETED: pass8 {4 t/ y+ e4 l% d$ n8 C
  7. elif id == STARTED : check(st)
    6 t9 o' W  z' v! F
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    & T9 m. _: t' T  Z3 H; J4 Q9 e; X
  2. QUEST.addStartNpc(7056)
Скопировать код

: H# j' m& u0 H; X+ x
; s$ V% w; I$ t
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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