Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude1 h  J: h' P' M6 g6 c
Сборка        L2j
) V( z! o% Z9 G# R9 k5 wПример основан на сборке L2J.; g# L3 |& G6 V
# F& s/ M6 j3 t$ z+ a4 t
Первое что нужно сделать, это добавить необходимые Java классы в квест.
& d$ q8 Z2 ?, v* |1 }. T# O* G
  1. 9 P+ b( ]9 a1 a3 e- V2 U
  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>
    # h7 W4 Z, Q1 M
  3. ' `/ L4 S4 r& G+ T, N
  4. </div>
Скопировать код
  1. import sys
    5 f, Q+ q# k, F' h. a
  2. from net.sf.l2j.gameserver.model.quest import State. s+ P# f& L2 l" m7 [- ?- v
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    / p8 ^! O  ?9 X. t2 z7 @' q
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    8 o6 y5 V# w6 Y
  2. FANGS_ITEM_ID = 1859' \; L- Q5 G; C
  3. DROP_RATE = 500000" t% d/ j7 l1 w; N3 q1 O7 [
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :+ o  q7 j) s" D. p
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
( |0 b) _! a" B# j$ e# h$ n. j, n! r) b: c# b7 r
  1. def completed(st) :
    # V8 q+ v, S% W9 |1 M: _
  2. st.setState(COMPLETED)
    / H% s! g2 g4 P6 K' H% f
  3. st.clearQuestDrops()
    . d( L0 V3 s* k
  4. st.takeItems(FANGS_ITEM_ID,-1). `' p0 }8 B/ _0 k. H- `
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ! I" b2 d" z5 l7 l
  6. st.exitQuest(False)) }4 `) N) j" l; H
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))9 m5 s$ d$ _2 w2 \( [* ]1 G

. \$ X! h2 a) B1 P) @6 B( s3 {
' N# T+ `" G) V7 z. w/ G/ V

+ M4 g3 S. B. _3 z* `И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):0 q& `4 ]1 n% |; y6 W% L' C! A6 Y

* r/ c- x4 [; R# {& C* z
  1. def check(st) :6 \& S" h& l) z2 B: g4 E: c0 P
  2. if getCount(st) >= 4 :
    6 V+ T/ w, ?. O2 t9 P) Y: y
  3. completed(st)9 \& K& Q" C& O$ U; E! I
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
- O5 z5 f, f- d2 ]4 _5 _- Z
( L) q3 y6 J6 Z+ p
  1. class Quest (JQuest):9 C7 I' _1 u4 Z1 T! f
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    5 j+ O5 F0 c6 r  W) G; ~4 y6 h7 ?) A9 [- S
  3. def onEvent (self,event,st):
    9 E+ j6 z6 `1 s* _5 k& N
  4. id = st.getState()
    7 p. [9 e0 F  m9 H$ d1 o
  5. if id == CREATED : st.setState(STARTED)4 p( R" ^0 @7 \5 }
  6. elif id == COMPLETED: pass
    " y: }9 p" }6 i5 ?! O
  7. elif id == STARTED : check(st)% `0 I" c$ I* B- n' {3 \
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    ' y& N, u; O# B- T5 N# S/ w$ J
  2. QUEST.addStartNpc(7056)
Скопировать код

1 N1 h$ z, o6 m# ?; E& S3 H! a7 k
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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