Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
  u/ V1 r# j+ \+ ~" iСборка        L2j$ \' n2 T* n0 N* ?# ^
Пример основан на сборке L2J.) k# u! N9 K" k" _
% I3 e) L; ]7 H$ t$ s
Первое что нужно сделать, это добавить необходимые Java классы в квест.* m8 [: B4 N" ]) g/ ?! U2 a# S" \' L8 ^

  1. 6 {* Y9 J$ {  k1 n
  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>, X2 c- y6 a! K( q

  3. ; K# x+ k  V, k5 p% w) f
  4. </div>
Скопировать код
  1. import sys
    ' C6 Y2 z/ h; _$ S- K$ m1 m
  2. from net.sf.l2j.gameserver.model.quest import State
    & J" L0 O; L; Q( f
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    / A8 |+ X& D6 H
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120829 s( H5 O0 e8 |
  2. FANGS_ITEM_ID = 1859# j! a6 U2 I( R6 w  v5 ]
  3. DROP_RATE = 500000
    7 E" {+ E$ `# r9 }* J, \
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    9 E) m) ?. O& i* t
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):" S$ g& O; E: u7 }6 N  S

* Y8 K: y  S* m! P3 ^4 j
  1. def completed(st) :  m# r3 v1 z) V# C2 V
  2. st.setState(COMPLETED)
    : K  \& J2 x% V6 ^8 a' ~& k9 E
  3. st.clearQuestDrops()
    * q8 O  ^" _5 A! W4 V, P% F3 y
  4. st.takeItems(FANGS_ITEM_ID,-1)4 ^, ~5 O/ C# x
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    / j6 \! _# y2 t
  6. st.exitQuest(False)* }0 ~0 n8 K/ I. B" W
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
( J; ?$ x7 L# S0 r- m  ~
1 t/ D+ v  M% z+ V8 s' Z0 `7 k& j' ]. ?( Q4 Q

6 X5 f) {9 t; i9 f9 J+ I" NИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):* g$ O; s; z) p5 J' M
; P" \* O9 ^) g! y) `
  1. def check(st) :
    . h$ Z! Y! h) b* Y1 D
  2. if getCount(st) >= 4 :* M5 }" K% J  f: V) `0 `+ \
  3. completed(st). n8 Q0 Z  F; s( @2 l
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.* c' Y9 f6 F. b- ^" n; X' ]
' Q) u% M# c4 a
  1. class Quest (JQuest):: K# x# g. v* w5 P  S" Y  h+ \
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
      M* m  T- P" J; E0 r, [
  3. def onEvent (self,event,st):- w) W3 @9 l+ g: Z
  4. id = st.getState()
    6 b! r- A9 ^+ K$ _
  5. if id == CREATED : st.setState(STARTED)! J% @" J/ D) E' `4 ]6 k
  6. elif id == COMPLETED: pass& T" \+ x2 L0 c; o
  7. elif id == STARTED : check(st)2 e. E; T% O! `
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)6 O! u# _' Q- ?0 c& c% i
  2. QUEST.addStartNpc(7056)
Скопировать код
* K7 {: \- Z; V6 Z7 J7 f
% G" T2 ~: S3 D8 L. a. r; F3 q
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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