Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
) t$ K) T3 r/ v% C( NСборка        L2j
: o* [& Q5 G. z- l% KПример основан на сборке L2J.
- L! o% P" P3 r- `3 `& g- n; c! W7 I* d$ V- O
Первое что нужно сделать, это добавить необходимые Java классы в квест.
, [& i8 }) {3 M+ ], l1 w' y" K
  1. & A& P+ o, F( z8 [
  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>1 f* X! S0 ]4 W& c# K4 T, a" t

  3. . Q- b  d' y3 K
  4. </div>
Скопировать код
  1. import sys  v) H/ s2 H) g. D: t" b9 n
  2. from net.sf.l2j.gameserver.model.quest import State. t, _* K. U4 P  d- Q. v  `: i+ E
  3. from net.sf.l2j.gameserver.model.quest import QuestState: I% O2 l, c$ m
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082( n. \  W$ _$ |$ K0 Z* z/ s  w
  2. FANGS_ITEM_ID = 1859
    / D8 a: s+ [: l% B
  3. DROP_RATE = 500000
    , P* \+ l' P4 o1 `
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    ; h, _" J8 [* V% b8 N4 A
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):' u: l+ U6 G$ `8 X

7 U( |! S, {! |3 k: g
  1. def completed(st) :6 R9 e& C: t1 j$ l) }" S8 ?  X& `
  2. st.setState(COMPLETED)1 }/ W" X  Z' E' \  ~8 T# Z7 y
  3. st.clearQuestDrops()7 d2 \  \, o+ J- y3 a
  4. st.takeItems(FANGS_ITEM_ID,-1)
    ) o1 i' N" A7 t# P" U
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    - i9 R* D0 ^& M) Q6 B" K
  6. st.exitQuest(False)3 [" O0 Q' d( d3 E+ ^" n. w) l- R% G
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
' d% L: z" c* l; s- [8 t9 H
# F9 H' X8 }, W7 b! f  E/ ]1 H, [) n; u% D/ I. `+ {
  Q! O& n: i7 e1 a  O- G7 S) P5 }! h
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
$ o# I7 q: t" y) B  G, f
/ }/ C+ M7 j4 W! f* ~2 c" W- ?
  1. def check(st) :
      U- P; G1 o3 n4 P. f/ B, B/ }
  2. if getCount(st) >= 4 :7 s6 V8 K4 Q0 W
  3. completed(st)
    9 S" d/ p5 e) [0 d1 c: N
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.. v) a+ T9 B1 y) W/ F

$ f- \  f/ `! w1 F9 W9 t0 d
  1. class Quest (JQuest):8 z% o- L/ f3 c" S$ l' C
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr). _# o% a. x$ F- P
  3. def onEvent (self,event,st):
    7 {, q% a( _' R( D0 f4 `
  4. id = st.getState()6 b1 C, n: X6 p# a
  5. if id == CREATED : st.setState(STARTED)" `6 c* x. f$ q4 Q- T: w. ~0 P: S- U* K
  6. elif id == COMPLETED: pass
    ! k- |$ z8 D0 E4 ^+ f
  7. elif id == STARTED : check(st)
      s* N1 h4 Z" E& ~1 n; Z+ ?
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    $ E: e6 A/ S$ {! o
  2. QUEST.addStartNpc(7056)
Скопировать код
$ [3 U% P5 H- [* l4 B4 }2 U0 I

8 y6 d! M+ Q$ f% ^  N+ t8 L% c
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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