Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
* H( g, y% k% c- X) p( i: Q+ \Сборка        L2j; K5 k5 J) W1 t) A: \+ e5 x1 {
Пример основан на сборке L2J.9 w. i  F# S; O1 K" A3 V' ]5 r
4 ^* m/ s, H+ d, q- U
Первое что нужно сделать, это добавить необходимые Java классы в квест.
" W+ y8 z! F: Q% ~; I
  1. 9 z# j% `/ E' p+ X# V
  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>
    4 S8 \/ d3 O6 D. I; Q) G
  3. ( d. }( a; P! t/ |. y! s. v' m4 E7 A
  4. </div>
Скопировать код
  1. import sys5 c& [) r$ S( z: c/ N
  2. from net.sf.l2j.gameserver.model.quest import State
    , C( u7 ^- w$ y
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    , w+ U" f5 y0 s1 m: z2 v
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082+ L( i4 E8 B) H2 w) ^
  2. FANGS_ITEM_ID = 1859, _! r( a9 |5 q7 i+ Q: n
  3. DROP_RATE = 500000
    7 |* D/ Y' _! |4 ^) n! }& D3 ]1 u
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :! @7 X) a! h9 ^* N3 Y& ^7 R  j
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
7 H% C+ P/ f* B7 N. [
, X2 D( R) p) J' X
  1. def completed(st) :& ]! @' e, x$ \( c) h: y* Z
  2. st.setState(COMPLETED)7 _( @: T- E/ ~+ H
  3. st.clearQuestDrops()
    7 A8 D- M/ @) f) ~
  4. st.takeItems(FANGS_ITEM_ID,-1)0 t. {0 l1 S, o! U
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)# D0 n* o0 Y, q1 L, F( T1 Q
  6. st.exitQuest(False)
    % N6 Y1 O: E+ ~$ C$ `' \
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
6 L8 f$ e5 c3 k# ~4 J9 J0 P1 P4 u. I/ t7 c: ^
8 J5 L+ m1 F0 M* r& P; K+ L
* L( p4 G& J/ `( p% ]
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
* d0 N. ]/ V; f5 ^, b; e7 h5 ^8 M, F# W' Y: J5 r
  1. def check(st) :4 i8 @7 N: C) R  v2 Q
  2. if getCount(st) >= 4 :; Q9 r1 V8 o* p+ S$ g" @: M8 Y, Y
  3. completed(st)
    ( u6 P$ ?/ W& x  n, \3 z3 a
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал." }$ j9 ]# |. v- @  v, a
+ H- |1 y7 U9 y4 x" ]
  1. class Quest (JQuest):( h3 M% L* d% w6 V7 B$ e
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    5 _2 S0 T+ f, V. n# p9 z, i
  3. def onEvent (self,event,st):! ]3 @4 B' M6 {: f$ b
  4. id = st.getState()
    9 u  f# k/ d+ P  {- O4 V2 B; J+ D
  5. if id == CREATED : st.setState(STARTED)0 \! i* u# V( T1 ?
  6. elif id == COMPLETED: pass
    % u; p  F+ F/ Y! T4 Q6 ~& U
  7. elif id == STARTED : check(st)
    ; ?, `1 y. V1 {2 B, L2 T4 o$ M, K
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)3 s6 q' e4 D: G* \' C0 a/ f" y
  2. QUEST.addStartNpc(7056)
Скопировать код
4 {: V* R3 O* s3 R; ?2 I& Z
5 @$ i' P; e, R7 ^2 ~1 z
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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