Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude3 A0 {9 t# C' H2 Y' ?
Сборка        L2j
' W& i$ v) z9 D* L# cПример основан на сборке L2J.7 W' J/ J' _+ y& L, H/ ~

0 i. J; l! z/ kПервое что нужно сделать, это добавить необходимые Java классы в квест.
' H" H; z; G. Y, Y; c2 t

  1. 0 q3 Q* ~+ w% o/ S
  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>- }! M8 N0 E9 O- `
  3. , G: L! C  l) g/ ^. x
  4. </div>
Скопировать код
  1. import sys
    + c  ?, U9 i; k9 l* }2 Y+ H
  2. from net.sf.l2j.gameserver.model.quest import State
    , r6 ^- U/ v. U( T1 U( e' [) C3 G% ~1 E
  3. from net.sf.l2j.gameserver.model.quest import QuestState; G6 ~9 V4 j: y* C: `" c/ O
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    $ i. @- j, i; {6 N$ |4 |: I
  2. FANGS_ITEM_ID = 1859
    2 t0 E; q- C) V+ K
  3. DROP_RATE = 500000
    4 b. s8 o% ^$ ~+ j  D
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :0 t! D) x0 U4 D
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
4 C2 x" i5 @8 u2 W7 v4 C7 K
+ H5 s( V/ r; c5 E" E
  1. def completed(st) :
    ' H$ J* w4 D/ d$ p% F- N$ C
  2. st.setState(COMPLETED)
    5 L" H% T7 J, Y9 g
  3. st.clearQuestDrops()
    4 L; K8 X% G# |. M& X( |" @- x' C/ {
  4. st.takeItems(FANGS_ITEM_ID,-1)
      m2 t7 l  x8 X9 S# o/ [
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    4 M- Y+ A0 ?% K0 O
  6. st.exitQuest(False)
    2 H5 t' y- o' y7 b
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
3 m1 d9 q* p6 y, T
' D5 [& k& r) h% u1 D6 D
  e2 O+ F+ a4 O: ?1 i! A
5 c1 `) }' R7 M7 y7 T% h( M: S: A
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):, S) W% ]# ?0 |3 d2 B

+ R% E( j6 {; J/ v2 d/ q; c1 c
  1. def check(st) :
    . M) R0 H8 c1 p( V# c% W4 k
  2. if getCount(st) >= 4 :
    9 ^# \! a5 Z0 x* m
  3. completed(st)
    ( e" Z7 k2 s( S
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
7 \  i! f3 U8 q1 @. d7 W3 r3 o; A8 q
  1. class Quest (JQuest):
    . W. X3 _3 c% F+ a
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr), @0 a+ p7 U3 P, K! K
  3. def onEvent (self,event,st):
    : r" N# g0 }' [+ c1 H8 U4 H' p& Y6 e
  4. id = st.getState()
    $ q) N( N6 a5 x, q
  5. if id == CREATED : st.setState(STARTED)
    - N% n" Q0 ^5 p
  6. elif id == COMPLETED: pass& f4 H) }. G& z8 N# h8 A' L
  7. elif id == STARTED : check(st)
    : J! X6 L# ^2 Z" T
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    ' l8 Z3 N: n! @3 }' u- a+ ]
  2. QUEST.addStartNpc(7056)
Скопировать код

" `" g$ h, w/ d) x7 S0 Q* o4 N3 y7 i3 q3 Q5 g. w+ V8 d
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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