Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
! W' `( Q2 H: }+ V. V+ g! HСборка        L2j" h! {0 e2 s0 K+ K) e
Пример основан на сборке L2J.
& l7 S$ X7 t# w5 p4 Z' n
2 l( q7 H) E& @9 n3 c$ GПервое что нужно сделать, это добавить необходимые Java классы в квест.
" i! ]$ ?5 N2 K. k' a2 t+ m+ `
  1. . d/ b/ |5 T/ J! v: G% W
  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/ Y' n  A6 P- A  r; |

  3. ; U% J8 W- G$ ]
  4. </div>
Скопировать код
  1. import sys
    . @% ~  g: G# l5 ]$ L) M1 Y
  2. from net.sf.l2j.gameserver.model.quest import State5 c+ R: C( F* Q/ u
  3. from net.sf.l2j.gameserver.model.quest import QuestState" Q: @' X: {3 F  s
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    5 g4 q2 y0 x6 d! ?
  2. FANGS_ITEM_ID = 1859# e; H) W+ c4 m! y: w* g1 K
  3. DROP_RATE = 500000
    ; }+ N, i( x0 Q8 I
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :6 |$ }6 a* Q+ u
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):0 A/ J# A2 ?1 J3 g

2 F* c* V0 |, ]8 K) p
  1. def completed(st) :- g. Y+ K' J" z- R1 p
  2. st.setState(COMPLETED). Q! h4 ?- y9 g6 P
  3. st.clearQuestDrops()
    6 b1 ~" Q* a( Q1 ~* ^( N) ]
  4. st.takeItems(FANGS_ITEM_ID,-1)
      ?0 z& a/ r! w% A) n- X+ j1 a
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
      z! b2 d. ?, ^- t* N# W1 |
  6. st.exitQuest(False)( q% R: H) r; Q& [0 q4 M& m
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
5 W0 ^; F7 ]. Z3 i" l+ y; L- T
, g2 a7 k% E9 A+ q) [" s
( X- O& Z4 R( ]
- R+ I; u+ k; |/ \4 R1 _
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
# i4 S/ |& \$ W: l7 a3 W( Z, \& Y, }
  1. def check(st) :9 [: o4 q0 P" v; m, U, E* {# r
  2. if getCount(st) >= 4 :
    9 M7 a. A1 a+ ~+ @5 q
  3. completed(st)1 C9 x& w; O- x; S7 v4 S! I
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
, S; L8 j7 i- x" H( N+ t9 b5 X( @$ P
  1. class Quest (JQuest):
    0 S9 B6 L: X6 v2 w, A6 H
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)- _6 r: d$ O. l: |( x, {
  3. def onEvent (self,event,st):4 \2 a1 q5 c! k! K- |+ q$ M( U
  4. id = st.getState()
    & g: h5 ?) _) v, R6 i4 w
  5. if id == CREATED : st.setState(STARTED)2 r5 _( |, l0 g" V5 r
  6. elif id == COMPLETED: pass3 R& x! W- w/ p4 x9 @
  7. elif id == STARTED : check(st)
    / k& h8 u, @; Z1 K7 N0 S& t$ x1 a! v
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)# a" p5 x6 x' |* U( s$ H
  2. QUEST.addStartNpc(7056)
Скопировать код

2 _" |- |- Z/ a
$ I* x6 k4 B$ W
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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