Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
' {8 A# b$ H2 Z5 F: X& y0 AСборка        L2j
# E, ~4 l) V5 j4 N+ o( I7 PПример основан на сборке L2J.9 r! L- D2 N! X( ]
; ?5 c# O& P2 h0 k& `+ P
Первое что нужно сделать, это добавить необходимые Java классы в квест.) J' w! Z* E1 |+ j1 V: P
  1. / M' x6 _+ F+ z
  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>9 }1 c& v) v: ~9 q

  3. ' o% ^' B. {. M+ S7 v& D/ P' ^
  4. </div>
Скопировать код
  1. import sys& |6 M  ~: @8 W
  2. from net.sf.l2j.gameserver.model.quest import State3 X- U8 Z/ M) o. v
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    ) d# ^% V, |9 P/ ~& Y6 ?, S
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    , o. b$ _" Y  l5 l
  2. FANGS_ITEM_ID = 1859- j! k( m  g* A
  3. DROP_RATE = 500000  D/ m5 z/ n- k; w7 h7 w7 h4 g
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    " w5 w- T/ n+ |, f6 t$ o$ Q
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
, I! Q& n+ r( g( q" \* x5 W8 @5 b$ u5 m
  1. def completed(st) :( v1 g& x$ ]  E3 o& D5 u7 _+ ~
  2. st.setState(COMPLETED)
    3 v3 z1 T# r5 r! S6 k
  3. st.clearQuestDrops()* J) M) \. a+ F
  4. st.takeItems(FANGS_ITEM_ID,-1)
    2 m. |3 d! h5 s/ H; ?/ s* W
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ; [* n, K' W8 n5 t- @
  6. st.exitQuest(False)8 ~# c* \/ ~% y, E: M) ^* S5 f
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))# |6 B; [1 d1 R0 M- W$ e

4 a1 c( c/ u4 Y4 L, _) e
& o3 E% T" t' M- ?% R
( ?/ |( E# g- o. j" l& W; H
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
; \- e& }7 ^6 x) H. u+ I- h
6 K, w  _) q& D. p3 z: }4 q
  1. def check(st) :5 L5 i, B( H! X) I' c- ]
  2. if getCount(st) >= 4 :3 U0 I5 Q  }3 o; R5 d+ G, B/ b
  3. completed(st); i) _4 W( O  T- W1 H: s- a& y
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.5 D7 ?- e  q3 j8 Z/ y" g

9 _- @. z0 _' `6 t" v- U% k
  1. class Quest (JQuest):
    , |2 r; T8 P0 c; R
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)$ x' k- m' f2 [7 D+ c' k4 r$ E
  3. def onEvent (self,event,st):
    $ C( B: P$ @- _9 `0 G5 a
  4. id = st.getState()$ B- v' t. t! j, o" p
  5. if id == CREATED : st.setState(STARTED)$ B  |' T1 w+ `) C
  6. elif id == COMPLETED: pass
    9 q0 o6 F, b" j: |! k
  7. elif id == STARTED : check(st)
    0 z' e. K# r3 k3 [+ w5 P$ d
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    9 N* v" t- L0 A$ u
  2. QUEST.addStartNpc(7056)
Скопировать код
/ j6 F) L* H  w. p

/ \  S" w+ `  u+ b- {; s4 o
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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