Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude+ g* a7 y1 E( S& K1 M) q# @
Сборка        L2j/ |3 V4 N' `% z' b8 t. i9 g5 Z+ v- {
Пример основан на сборке L2J./ E/ C6 e; \( E. ~

: ]0 f  A- G  R& w. `; C* NПервое что нужно сделать, это добавить необходимые Java классы в квест.+ Z% W  u! B6 o

  1. . [# H  ?- J% ^2 p
  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>6 @, ?7 v4 e- K7 W6 l/ o1 E0 K

  3. 0 R) M, M; t7 B/ a, X
  4. </div>
Скопировать код
  1. import sys
    0 H. D* N$ ?4 K4 z$ W; }) _
  2. from net.sf.l2j.gameserver.model.quest import State6 e/ Y' ]% ^+ |# E7 |
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    2 i( F! g3 {5 ?; f9 x9 d
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082# ^1 R1 l6 j: e1 y5 e- d% X& K
  2. FANGS_ITEM_ID = 18599 b6 f: \+ r7 `( f
  3. DROP_RATE = 500000
    / k: ?, S& j  r0 v, y
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    8 W* I5 |6 V) w4 D  M8 D4 @
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):! O4 ^1 N1 m! `

( W' X/ |/ n! X+ H. ]$ N- c
  1. def completed(st) :
    % ~  K/ l$ n9 s& \
  2. st.setState(COMPLETED)- T7 c" m5 x- f6 `
  3. st.clearQuestDrops()4 e% K: J2 E3 W; w7 h2 W
  4. st.takeItems(FANGS_ITEM_ID,-1)
    ( P5 X, e! v6 m- |5 X( I0 f
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    $ a. E  v; @/ F& `2 G
  6. st.exitQuest(False)  F' u2 d7 Z4 u7 a; i. N0 c
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))' G" i4 o! s0 a9 S
6 D- F, e/ W& H/ V1 U
! i7 L2 V& Q0 d/ ?( G

, e7 j' o* q# M" A* \  kИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
. e2 u4 _; L* D; w: ~% y. m! t2 ?" C- F1 m. u1 s9 b
  1. def check(st) :$ ?2 C; a8 ], t, q0 W& I9 Y
  2. if getCount(st) >= 4 :0 E' I8 u) y9 c0 p% v
  3. completed(st)
    # \9 F9 \: X% u: ]7 h3 `- _; r# t
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.( e' w0 h$ K0 B: ?. c/ b4 O

- m) @- h4 S  w4 i6 K# t
  1. class Quest (JQuest):& }( o* \6 K3 |
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr). `: W) Z: w! |" z( K3 z/ t
  3. def onEvent (self,event,st):" i7 T5 a4 D& Q& z
  4. id = st.getState()5 ?9 C( H% z3 g8 `
  5. if id == CREATED : st.setState(STARTED)
    ( R# C  `, M* V. a, h" N" ~6 u  m2 P
  6. elif id == COMPLETED: pass
    % `; Z. F2 k1 Z6 U0 e
  7. elif id == STARTED : check(st)
    - i( _5 U7 N, j! U
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED). a7 ?0 Y6 g' N
  2. QUEST.addStartNpc(7056)
Скопировать код
5 n# [0 B& |7 c8 C  I7 y0 K
* a3 L) }3 S3 J7 ^+ g3 H% V
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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