Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude1 v* D. ~9 B7 L2 k" l. O$ c" d
Сборка        L2j( K+ w  M6 J  Z) ?0 }. {% {4 }
Пример основан на сборке L2J.
& @2 r5 O7 Q, y, T% t6 Y0 C' O! l: q7 D+ c6 y! z
Первое что нужно сделать, это добавить необходимые Java классы в квест.
6 S, ]0 h' u! e& z9 ]

  1. 3 F& ^" o0 T' }: ~4 L6 ^
  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># ?/ n- i& Z. ]  y3 K# T
  3. % B# ~1 h6 D- h) k3 \
  4. </div>
Скопировать код
  1. import sys
    7 o* G  A, U/ Y2 b& ]/ G
  2. from net.sf.l2j.gameserver.model.quest import State7 v- E8 y! G* l- D
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    8 u# _, T/ Y, e9 W! Z( \0 Z
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    3 R7 b- E  _- B$ ?
  2. FANGS_ITEM_ID = 1859: L' [1 M; l+ [4 N4 `6 I# P5 p0 T  ]
  3. DROP_RATE = 500000* }/ J% R9 h8 K5 z& q
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :- y+ t9 P$ Y" i7 G0 c( m' `9 y& h- r
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):) b1 g8 ^5 V+ I1 V1 I# v% H

8 ~/ e7 m' \! G  a, Q5 x, K
  1. def completed(st) :: U2 S" f* Z3 q9 |4 p2 C0 }
  2. st.setState(COMPLETED), g4 q+ {& N. o5 q  R  {: L! [2 O
  3. st.clearQuestDrops()
    $ Q' p; M; {2 x; d/ r4 _
  4. st.takeItems(FANGS_ITEM_ID,-1)
    # K+ v$ u8 ^" v$ J8 K9 {0 T
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    , P5 L# ]* {9 |- z4 W
  6. st.exitQuest(False)
      C! B" J+ V; ?* D
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
+ }/ k+ D/ p! t7 Q1 U% p
6 w" E; k3 N% F% k/ O/ ]6 ?) |. J, `  J9 ^
& ^& B# j9 U/ ?
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):& E' V: Q; h1 x. {  m  }0 x

$ x' ], A  H  i* m1 U
  1. def check(st) :
    * `' p$ _. O3 T% w
  2. if getCount(st) >= 4 :
    0 R4 f; g; d( _4 O& i
  3. completed(st)
    ( W1 F$ y7 X8 s, ~/ i
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.7 D, X3 Q( Z, D6 ^  y8 m; ]

' |1 E5 F( L% |  i( t
  1. class Quest (JQuest):) k4 D1 K- f7 G+ f
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    ; M2 u; |' s- \  W) I% q
  3. def onEvent (self,event,st):) S0 ]( ~3 f! [. Y# G% {
  4. id = st.getState()! `6 b) `- \; u9 A: f( L! _. X
  5. if id == CREATED : st.setState(STARTED)
    : w' c# I( I8 a( y: w9 Z
  6. elif id == COMPLETED: pass. |2 n9 {' Q* U) B5 G" d
  7. elif id == STARTED : check(st)- _# u* `. c9 j; E
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)$ z( D4 `0 d6 H
  2. QUEST.addStartNpc(7056)
Скопировать код

0 N; M& Y/ a4 r; C4 o5 a
" c0 e- v* P  j
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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