Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
5 o, B! c! S2 U: YСборка        L2j
: j' @! Q) }1 \, l. f; ]/ T+ UПример основан на сборке L2J.
1 n6 v8 d7 c. n4 d
$ J. ]+ a- g7 w  q* V. aПервое что нужно сделать, это добавить необходимые Java классы в квест.
. h2 `7 y2 U& E  j7 L* ]) ^
  1. ) L5 ~. a/ @( j3 |
  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># q1 \7 u) ?7 f  R$ K
  3. 7 _3 P1 G% V* [( r
  4. </div>
Скопировать код
  1. import sys6 m& m( O1 R3 P+ j) `4 M
  2. from net.sf.l2j.gameserver.model.quest import State
    5 i; k( _# L# r$ w, q! o; F
  3. from net.sf.l2j.gameserver.model.quest import QuestState9 A7 W: w9 |' o. t1 O
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
      V4 t6 V! ?% |9 {2 D+ F% p" k
  2. FANGS_ITEM_ID = 1859
    0 Z1 B! ]6 q# h+ H4 {) @- n  x
  3. DROP_RATE = 500000
    / s# {1 V7 m0 @
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :: x$ l0 {7 s# X1 n) n- S5 T) l
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):% o5 g. x* E; Q; Y* o  ]
  |) R0 T/ b* Z$ K) Y
  1. def completed(st) :2 s: S2 C6 L& I+ ^
  2. st.setState(COMPLETED)0 i' W, N/ E/ l# W% X. z( j, F
  3. st.clearQuestDrops()
    3 h, j7 ?3 H: u9 [# |7 H! H
  4. st.takeItems(FANGS_ITEM_ID,-1)  P5 C3 }& |6 _1 F- ~6 k" x
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)0 E9 [& c  p7 I) y5 }* ]. `
  6. st.exitQuest(False)  E  y3 s  L$ B
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
# y  h: h7 w5 d% f1 ?5 K* R2 G
% l' w! X4 A- u$ H; ^7 D' i( ]) g+ j! j' \* d, c7 W3 h
8 f! o3 l) ^& B" t4 v( R8 M
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):2 Z+ v8 N, v* d8 g

# `* E% p) F- x4 a1 \
  1. def check(st) :" o- Z' |: c; d" r8 y
  2. if getCount(st) >= 4 :
    - a5 b, b6 `$ }& c
  3. completed(st)6 N) h% f8 g. F* W1 \
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
' C' V% U. \; z' s1 }" u5 q' E+ C1 K$ f7 N1 }1 A, J# d
  1. class Quest (JQuest):
    2 ]. B) Q0 N% w& O( F! Y* }
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)7 }2 E3 q  j$ R$ i+ ]
  3. def onEvent (self,event,st):
    , k! C- H( m( M
  4. id = st.getState()/ J+ @' o3 g7 f+ b2 s5 o8 U; D, I9 k
  5. if id == CREATED : st.setState(STARTED)* W  K  G' S7 s' J
  6. elif id == COMPLETED: pass" `% C8 F/ t4 v! G$ Y+ k' |1 ^
  7. elif id == STARTED : check(st)/ ~' n: X) N$ n
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    * d+ P2 p, H7 O3 U2 z: \
  2. QUEST.addStartNpc(7056)
Скопировать код

6 k( [8 e9 H* J5 O  ]
+ n$ v5 T& ^, o  \3 _# v5 p3 ~
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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