Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude( h8 ?9 K( T/ F; W
Сборка        L2j7 p* F% U- ^' R6 k4 v
Пример основан на сборке L2J.* x) t$ ^: F, `9 G" L; J
5 ]% _) s$ `" m( k# B6 `1 |
Первое что нужно сделать, это добавить необходимые Java классы в квест.
0 }0 {- m1 v7 S( j( {) B
  1. 8 N6 D. Z. P' ^; @1 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>
    , p& j1 U8 g8 c- k& Y  W
  3. + A% l  A1 Z( k" f& Z
  4. </div>
Скопировать код
  1. import sys
    ) b* ^4 U; G9 w6 J
  2. from net.sf.l2j.gameserver.model.quest import State
    0 f- g; b9 A' ^4 O
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    ! e' }+ ~: I8 {; P" P2 ]
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    9 Y: W+ X: b8 ]  l
  2. FANGS_ITEM_ID = 1859, [! }3 x' J9 `% |/ }7 s
  3. DROP_RATE = 5000003 |  {. s& _3 Z9 P) ]
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :3 C9 K' W! z0 ]% u, l
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):* ]/ k3 U" _1 P: m8 o) n) `

, K) P9 h5 F' v7 D, V5 f
  1. def completed(st) :
    ( |5 M3 v( h/ p
  2. st.setState(COMPLETED)
    * O) c+ z; j# s* J
  3. st.clearQuestDrops()
    ) q3 B. N3 `( T% j
  4. st.takeItems(FANGS_ITEM_ID,-1)' [' O' ~5 N8 W& F
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    / {8 w5 C% i0 A
  6. st.exitQuest(False)1 ^2 ^7 }* {/ {) B5 a3 b& I( |. ~3 S9 r
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
/ C* u% D: L; P
5 K: G9 \2 X9 y7 P6 C1 r, ]% t% l0 ]/ ^- C

: c  ~6 M3 T! s/ j* L0 LИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):3 H  N5 o& ?  P  J! H; H
2 m0 Y9 u$ N' U; T( @9 t: x
  1. def check(st) :
    3 M4 I6 J" ^, p$ U% N% U
  2. if getCount(st) >= 4 :7 p; Z% W4 G" F( f  l5 A
  3. completed(st). t' M3 D) s& k# K* r4 t: }2 t
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
: E) k7 v0 R7 T+ A& K6 [6 p- d
' ^" N+ s3 S9 J( w( z. B0 m" K  _7 [
  1. class Quest (JQuest):
    / j$ i" N) l2 J, X3 J
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)& C* X# i  W0 k4 \4 t
  3. def onEvent (self,event,st):* s/ k) j. X) q# V" P. ?* I0 {
  4. id = st.getState(). j4 p1 N5 }6 M& `5 J  v; O
  5. if id == CREATED : st.setState(STARTED), J5 h7 V9 \  T9 K
  6. elif id == COMPLETED: pass' O9 u1 K# n- c9 I. i* r
  7. elif id == STARTED : check(st)) Z2 R' w; B( q, S1 A6 {" X
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)" ^- T4 G- M3 z4 M1 P) D4 |( p% s2 Q
  2. QUEST.addStartNpc(7056)
Скопировать код

! U  N3 c) L+ L& u8 p# J6 c
7 G! p+ q& P. f$ s% _+ b
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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