Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
6 X  P* G1 S- H& v0 ^) |' mСборка        L2j
- a# Z# \8 R6 ^; H9 \  S7 q$ `2 L  zПример основан на сборке L2J./ x3 |# {& L& j0 @
* p* f! _7 c, E3 Z
Первое что нужно сделать, это добавить необходимые Java классы в квест.9 h, }* v/ ^: T9 v9 N) k$ ~  \
  1. , D, |# T0 ^, @" d+ {5 I
  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>
    + A9 N. p, G  {  @: g

  3. - m1 z' e0 x  D, F% R2 D
  4. </div>
Скопировать код
  1. import sys$ Y3 Z: w8 A/ E# |; T# o
  2. from net.sf.l2j.gameserver.model.quest import State) i1 }8 m$ ^- s) ]/ b0 J* X
  3. from net.sf.l2j.gameserver.model.quest import QuestState, h" R  {: b* \+ F) |
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    . M) i& k$ }( R8 a
  2. FANGS_ITEM_ID = 1859
    5 [* i+ o0 z0 x
  3. DROP_RATE = 500000
    % a, |4 w1 U8 P  E5 e6 j
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :/ ^" n- M1 {# Z2 S3 a, v! V5 V8 _2 x
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):; Q& I- u4 q$ d* Y

3 I% r. m$ i; u' H4 }$ {; E/ G( o
  1. def completed(st) :
    1 @) V  x' K' o, A3 `+ R
  2. st.setState(COMPLETED)
    ; V% H; D! v$ d6 y2 |. k% d: C
  3. st.clearQuestDrops(), C6 k" L" u  O% c
  4. st.takeItems(FANGS_ITEM_ID,-1)$ u& E3 B7 H8 u, `$ ]- D8 z. \  r- E
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    : B" j! V9 N' J$ T7 `
  6. st.exitQuest(False)3 \! W6 r( g6 s
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))6 A/ \; C( ?- S2 m( z
2 X/ `* |3 w2 C" D' l% D1 c  n
5 B0 c: _: Y( E/ j2 ]
  q* R6 X6 i- \* D
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
: O, j# f- E+ n+ G7 F# Y8 T4 {/ g* X$ D9 g
  1. def check(st) :
    * x7 U' I7 b; u2 t8 `
  2. if getCount(st) >= 4 :8 G" |; W6 g& I1 d4 M
  3. completed(st)4 C( \2 I) T; c$ F# R+ P
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.* o" |  T: u, m7 e. B

$ n9 Z2 c* I2 Z
  1. class Quest (JQuest):
    ) w0 @$ z2 o8 C' m  W
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    % Y& d6 Y4 ?. E# M% J# P8 j
  3. def onEvent (self,event,st):
    & y8 z: t1 J, V2 M. {7 Q
  4. id = st.getState()
      ?* Z, ^3 G% T* u
  5. if id == CREATED : st.setState(STARTED)
    & [" S8 A4 }9 U  T$ ?( z- ]
  6. elif id == COMPLETED: pass, `/ `8 H- y9 c1 h" a0 O1 |- D0 T: n: _
  7. elif id == STARTED : check(st)
    & z2 [2 y9 N5 h4 r
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    ( ]- D4 b/ I3 J  b8 {
  2. QUEST.addStartNpc(7056)
Скопировать код
/ m+ m0 j/ N& \5 I- k

& }  q3 c9 P/ e" @+ [/ `; `
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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