Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
- c  P) s. _" I5 z( c$ e- m" FСборка        L2j! I3 Q$ B/ ~: w8 g
Пример основан на сборке L2J./ F3 ?7 M' }5 W; A( z

+ N" A# S+ Q) D2 i, t/ O6 a+ uПервое что нужно сделать, это добавить необходимые Java классы в квест.- p6 p# q- m8 x) f* S; d; ?# g3 P( H" E$ A
  1. 5 C' e" r/ c$ f
  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>
    $ _. Q/ |9 Z$ X" ~6 ?

  3.   {& y# o4 h6 G6 s* c7 e+ e
  4. </div>
Скопировать код
  1. import sys
    ! f* B  U5 Q/ F4 C6 a" ~
  2. from net.sf.l2j.gameserver.model.quest import State; N/ R  Z7 D- A8 k# h+ i' \
  3. from net.sf.l2j.gameserver.model.quest import QuestState  M% {: n1 c9 S' ?# q6 u
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    2 v! [9 B$ [8 h) l
  2. FANGS_ITEM_ID = 1859
    ) v7 n$ @- h7 l- B* q1 f) D( |8 A
  3. DROP_RATE = 500000$ L/ g+ _1 w4 U' ?  ^% e
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :+ j! J- G1 W& o" F0 X/ {; N
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):  a& A7 `  H3 }5 S, i4 R
' q( G1 {! z+ ]1 o# G! {% |
  1. def completed(st) :# M% N* [: n3 t+ L
  2. st.setState(COMPLETED)$ {( f+ f  K: ?$ D7 d+ P
  3. st.clearQuestDrops()# k5 r! o% q+ P$ N- E
  4. st.takeItems(FANGS_ITEM_ID,-1)- @$ G+ K& B2 U- n' q7 q  M
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)' @* t/ i9 w/ X/ }2 h$ C
  6. st.exitQuest(False)+ e, f' W, x; U
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
8 P/ z7 Y8 P* F: q9 N7 X7 P% _" U" W& V" q
# ?' E4 e, n' w1 Z3 R- c/ K+ L

+ B7 k0 Y) |& o* [. _+ QИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):- Z. {' f9 {9 r1 L7 N, Y  W: z

" c: b& a+ K6 @$ g+ k* \
  1. def check(st) :& G5 T$ |- H; C. N9 s$ J/ G6 Q0 N
  2. if getCount(st) >= 4 :9 N# N) a1 P( [5 ~
  3. completed(st)% J( O0 @9 O" h0 w& G
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
; D3 G2 v& Y4 H: v. ]- {6 |  t: J9 h
! p+ |2 b% A, G. o
  1. class Quest (JQuest):
    ! P+ t4 r2 e! u2 `
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    4 D, w. C9 D3 N  Q( O, j
  3. def onEvent (self,event,st):1 B6 _3 A) ?: x0 r, k9 \$ S
  4. id = st.getState(). ?" `1 A: c/ `4 h7 q; x- Q
  5. if id == CREATED : st.setState(STARTED)2 H' _1 p/ s, `$ N9 h# [
  6. elif id == COMPLETED: pass" A" w; E0 T- |$ \
  7. elif id == STARTED : check(st)
    * Q& C3 s. q& u  j. v
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)9 b- U" j1 V1 V! ]4 n7 R
  2. QUEST.addStartNpc(7056)
Скопировать код

* T! X6 g8 t( j- Q, D2 v: L6 a3 [  \% [' V0 r
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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