Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
+ @/ D2 G! J) h' \+ v  uСборка        L2j
: ~8 o/ c, f5 o. V" O: z; [- eПример основан на сборке L2J.  n1 z5 Z5 s! S2 K: H
  G$ b- B- C( {  R- {0 u; ]( |, s
Первое что нужно сделать, это добавить необходимые Java классы в квест.
  B: ?5 D; {4 j, _( j$ M
  1. 2 L0 x8 t4 k" w! k" q# x% l& i- k( K
  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 E" ^( N$ E! R( l7 H  q3 X  b5 y

  3. ( g: f& W# K' L3 y; K
  4. </div>
Скопировать код
  1. import sys
    ' K; ?+ M$ O8 H' ^6 ]1 R0 ]6 a4 C
  2. from net.sf.l2j.gameserver.model.quest import State
    + Y: J7 _4 j/ M# t3 w
  3. from net.sf.l2j.gameserver.model.quest import QuestState, c5 v# N9 Z% q2 O) f0 ^/ ]# g
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120824 D& S' S0 t( M  p3 v( b) ^
  2. FANGS_ITEM_ID = 1859
    ; N4 d$ M- K5 C
  3. DROP_RATE = 500000
    + |) x- K7 Q6 J. e) V, F2 `
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    0 m1 d) S/ E1 U5 a8 f5 G+ P0 j
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
! Y+ n0 k3 c7 s1 Y2 [, a) Z# A8 x: E
  1. def completed(st) :
    4 {! {8 L- q$ b0 e
  2. st.setState(COMPLETED)
    " V: q- o* T( Z2 F
  3. st.clearQuestDrops()
    ) \1 `) j( x: r
  4. st.takeItems(FANGS_ITEM_ID,-1)
    ; n# Q" v8 X8 F7 W- ]# q' E% _
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    , L0 r) q$ ~  b" v( y
  6. st.exitQuest(False)
    * |, O5 M, ~' |
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)); @8 ~& I3 w0 B/ l; `, N8 ?# |

+ z: G5 R1 r0 M1 i! W
$ _' ?9 m# v3 s6 o" d+ [

6 ^) y% B: ?) o# j0 X2 C/ i. ]И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):7 _" j8 e: W3 F5 _+ I$ z  M, R9 n# K

( b  Z2 {, f9 `  w6 Y: [3 Z7 @
  1. def check(st) :
    & N1 ?2 E$ {2 [- j  C
  2. if getCount(st) >= 4 :
    : |/ L" h. k* i4 |# H0 \
  3. completed(st)+ L/ Y. E7 p" W) q
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
' |' g9 g" M# S. j: P
1 F) T0 W3 T5 e4 c: G
  1. class Quest (JQuest):
    7 Z# y2 ]7 G7 Z+ G2 L) B% y
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)! B% _3 E4 e) D9 g( Y( z
  3. def onEvent (self,event,st):
    % h2 N) |/ f- H2 y
  4. id = st.getState()
    $ I& y* h; H) n5 S% d
  5. if id == CREATED : st.setState(STARTED)4 H* Q/ ^! }, T- m/ F  E
  6. elif id == COMPLETED: pass/ f3 K0 U4 A: E
  7. elif id == STARTED : check(st)
    5 Z; [* c! X. p7 w5 J% h& X
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    ( b( \0 F4 e/ n' ]' M; I9 B
  2. QUEST.addStartNpc(7056)
Скопировать код
" F  w' M% i1 }
3 U  A( K2 |0 p
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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