Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude0 M+ P# N' y! [) i/ Z$ l
Сборка        L2j
3 q: M; V2 P, G& \Пример основан на сборке L2J.5 ?, p5 x+ w& x$ V% J6 w
7 A2 w! l* S+ g: K/ ]3 k
Первое что нужно сделать, это добавить необходимые Java классы в квест.; p& m: r/ T+ {* c0 c$ s

  1. * a5 v2 {' |3 r8 `" \8 ~
  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>3 ?$ s) i$ m  K( D1 ]
  3. + _( I* X2 w% V7 P5 x. o
  4. </div>
Скопировать код
  1. import sys
    # Q" W) I+ A* u5 B) |8 {
  2. from net.sf.l2j.gameserver.model.quest import State% P1 A" T% ^0 m' d* t' J8 H) G- \$ {
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    1 _" J. A6 [% ?) }6 H
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    + V. |5 e  B7 ^' H+ m
  2. FANGS_ITEM_ID = 1859* @. G& Y- B/ _( E! B: @! v
  3. DROP_RATE = 500000
    & ~" w# B* C9 }# |
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :' J8 y4 k, [0 k5 s' u6 |
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
& l7 {+ `3 F, L! R
. J, v5 o6 M' E2 L- \) X
  1. def completed(st) :! u4 Z: s+ |$ j  {/ r1 A
  2. st.setState(COMPLETED)  ^8 a* ?+ Z# t. v3 U8 C
  3. st.clearQuestDrops(); S8 ^+ M6 b2 R
  4. st.takeItems(FANGS_ITEM_ID,-1)& I5 A: I& ^  D$ p1 S1 h
  5. st.giveItems(WORLD_MAP_ITEM_ID,1), J1 Z8 f, e6 N. e+ m6 O
  6. st.exitQuest(False)
    & E  I$ I/ a  X/ h: c' ^) @
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))+ J' [- J2 Q# v
- e$ {) t. I5 |

% `6 d6 v7 B" V# y

; W: c/ X4 D# l! |И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):  t; L$ J; S' G! m
* Z7 Z& v8 V$ ~' _7 E/ c
  1. def check(st) :
    3 E1 a! p" w, N  n( @* V8 ?# Z8 \
  2. if getCount(st) >= 4 :3 I& W; e2 T# [0 t
  3. completed(st)2 O0 P+ N2 m6 f% W$ T: \/ t" U1 k
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.& w' ^5 D8 R0 T5 Z

  ~; x! s8 t" W1 g- F
  1. class Quest (JQuest):7 V' \7 r, u  X9 Z
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)/ c$ G, U2 H! ~0 T0 F' g
  3. def onEvent (self,event,st):% {) D6 U( C* D) o
  4. id = st.getState()% L& L) K. `+ p0 S
  5. if id == CREATED : st.setState(STARTED)0 B- Q  q& j; ?7 ^8 o* ?6 s
  6. elif id == COMPLETED: pass$ ^; p8 e5 k6 K6 V
  7. elif id == STARTED : check(st)
    ) w1 @4 t1 Q+ h3 a1 ]
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    / m5 x0 {8 C& ~' w( k* B  s
  2. QUEST.addStartNpc(7056)
Скопировать код
  f4 L* J( Z% w
7 r5 a0 q, j# ?$ k
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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