Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude/ C) J" J1 j5 V; Y( _& M3 q
Сборка        L2j: c- `7 `9 R, [. A0 T
Пример основан на сборке L2J.
  |# _. ~2 \1 q! e& P2 j  {" N
8 f( n9 ^! X% z) p8 x/ XПервое что нужно сделать, это добавить необходимые Java классы в квест.
; u+ d# \6 u+ N3 H/ }

  1. ; m( s$ O; J% r/ 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>7 t8 Z+ D3 d# A: t8 n7 g: z6 N9 l

  3. , w% q/ y* U/ z4 P% W" R5 ~' `8 v
  4. </div>
Скопировать код
  1. import sys  E1 n+ j. |% _* x
  2. from net.sf.l2j.gameserver.model.quest import State
    - y( z+ ]" A9 V3 B5 F% b
  3. from net.sf.l2j.gameserver.model.quest import QuestState$ ^% ]  L! V3 a. E) K  J
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    " ~$ ^. \: N% R+ ~' i- ]
  2. FANGS_ITEM_ID = 18597 s; P/ n% x9 S( a" P, K/ B
  3. DROP_RATE = 500000, \8 v+ O! G# F. [4 F7 n2 x# X6 O- o
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :. O3 K+ I% ?. A) j, s
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):- u% F/ @8 O' k# O6 Y0 H

4 j2 O" ]# S) b" `( n3 X4 `1 K. D, a
  1. def completed(st) :
    / L; J+ o; U. J! K6 N! ]' }/ W! ^
  2. st.setState(COMPLETED)
    2 C0 o& W% _8 k
  3. st.clearQuestDrops()
    , ^' o6 i" Y6 l8 K# O" E
  4. st.takeItems(FANGS_ITEM_ID,-1)+ R& O- q/ |) a1 S9 |3 G6 G
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)4 ?$ M; y% Z' `
  6. st.exitQuest(False)
    ; c% Z4 b3 ?  m
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
3 g5 N* q) k/ c1 U# C; _1 |! c0 h) `( l9 p) F' N2 c  M" |6 J: `) o

: c, q; o  w# a: I" j1 y" k% V

4 W  d$ t6 m: B# \И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):8 n9 E4 A& e+ H6 L2 O( c' T

. v# |" m  ~6 o1 y
  1. def check(st) :. F: e0 L- m% Z3 m( f. j/ Z
  2. if getCount(st) >= 4 :( ]5 J2 q5 J0 [. U! h# y
  3. completed(st)" b8 U+ r% p! i  M
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
; o$ V; j" K* ^* [* i1 K" H6 C6 x6 c" j: B( q2 T
  1. class Quest (JQuest):2 ~4 z. T4 O8 ?) w2 q; `4 \' }
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    * e, `2 S* B6 P& a4 p, B
  3. def onEvent (self,event,st):
    6 e1 G$ D% L' L: s; E3 ?
  4. id = st.getState()
    9 q: A6 x4 P) R% x8 G
  5. if id == CREATED : st.setState(STARTED)
    0 R$ E3 q; w8 O: |: m0 x
  6. elif id == COMPLETED: pass
    ' c  G9 Q) I& M" l  r/ x
  7. elif id == STARTED : check(st)
    5 r: x# {' q- E8 }3 Q* C  y
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)6 D* \, e8 a5 Y$ L) `' O
  2. QUEST.addStartNpc(7056)
Скопировать код

, T- n8 X. M4 O0 z0 {5 B# d# c/ X! E, @  q! Z
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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