Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude/ j  L1 a9 c5 j
Сборка        L2j9 |9 ~7 \# ~2 v- Y# b
Пример основан на сборке L2J., F# U8 _" n2 f$ ?
( o; u' s7 R5 D) w& @. a3 |' y
Первое что нужно сделать, это добавить необходимые Java классы в квест.3 p. V/ j' N0 t# S8 S; N
  1. 0 a0 b/ h5 c7 N5 m1 L9 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>
    " f7 z; B" C, z9 K" K) e4 l: T9 u

  3. ) F3 Q! L, e0 t. s4 E8 ^: W
  4. </div>
Скопировать код
  1. import sys" ]3 A3 l* W$ t
  2. from net.sf.l2j.gameserver.model.quest import State' i- F/ |0 a; M* A
  3. from net.sf.l2j.gameserver.model.quest import QuestState) z7 t5 ]. a, X$ l" ]7 |
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082$ E& _+ m3 C% I7 S4 v
  2. FANGS_ITEM_ID = 1859/ _: k: E$ Q# c' L  A/ `
  3. DROP_RATE = 500000
    * x- Y% I% x; O) ^, O0 v9 I1 _
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :" p4 o* M) W. R8 \8 o2 r4 J: j
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):5 |7 V  s+ D/ W$ ^7 A

$ I: `. D; j9 B5 u/ ?
  1. def completed(st) :
    0 V9 o/ Z5 F6 ^) [
  2. st.setState(COMPLETED). Y0 R. j7 s4 I' G1 E' @9 V: B( t, V* X
  3. st.clearQuestDrops()
    $ J( i, U5 z1 c9 S
  4. st.takeItems(FANGS_ITEM_ID,-1)
    * I) ~  q& R$ x; A+ f# R3 S4 b% Z) H
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
      `7 X, r0 `) o$ D0 [$ @" ?) {
  6. st.exitQuest(False)2 U. X6 o7 @% f. {! J
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))5 Z# n3 i0 Y$ e9 S# v

7 Z6 r* z6 N% k- g; _. |% f' ^, f6 p. H- f9 d* t/ \

- j# E- [9 w' v  z7 e8 l  \# @/ rИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):6 f6 d4 u) ~0 [
  Z# r) P, g/ J+ o* a9 }& R
  1. def check(st) :+ Q( Y# J, ^& m# j& }5 T" L2 O
  2. if getCount(st) >= 4 :1 r1 V* o/ i" L/ \9 ?1 @
  3. completed(st)3 f& ~! F6 v, L
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
/ o3 Z9 X' B: ~$ x  d: q
+ T2 E( |1 E8 x, R, L
  1. class Quest (JQuest):. N$ ^" j6 ]  b' R8 V# V
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    " `7 M) L: W; h' j5 e7 x
  3. def onEvent (self,event,st):
    / o2 j  W: H1 O+ r" L$ d! e9 u
  4. id = st.getState(). {1 s4 H8 x- q" J4 V" _0 k
  5. if id == CREATED : st.setState(STARTED); D$ W( I7 S3 F( s" s+ ^
  6. elif id == COMPLETED: pass
    ! u& m  y2 H+ e4 {( D; x
  7. elif id == STARTED : check(st)
    ) B# c1 c9 f/ K8 a: i2 Z. m) f* i8 ?
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    1 @7 U, f0 T: G+ }
  2. QUEST.addStartNpc(7056)
Скопировать код

! q2 Q. k* m. T0 N( ]2 `! Y3 v  u: Z+ o' R3 ~
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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