Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
* r1 d4 q- Y- C8 s! DСборка        L2j
0 f$ G7 B3 m" R/ C. `( a# b; EПример основан на сборке L2J.+ \/ g3 m% Z1 U
5 f( H% M+ o# U* o2 y) z
Первое что нужно сделать, это добавить необходимые Java классы в квест.# b* ^  a, N4 \' P% C3 @

  1. / b3 T" |: P4 P
  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>" l! |) a4 o4 a- L8 @

  3. & I" j& r( X  l7 Q3 ~% g
  4. </div>
Скопировать код
  1. import sys
    * M- O' S0 s* ?8 j
  2. from net.sf.l2j.gameserver.model.quest import State
    5 w6 `, e4 a. }' _- t# M
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    $ H* _$ x7 z; p8 u/ k6 l& \  x5 l3 e9 x
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082- n( ^: j! n, W5 y
  2. FANGS_ITEM_ID = 1859
    ( w6 [2 J# W( ?6 h8 ]
  3. DROP_RATE = 5000007 ~$ s( l" l" \; Q! e+ U# G
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    3 y) z) _$ A( |  L
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
% ?' k& J5 N1 ^& h
* L& @8 V5 l1 u) c
  1. def completed(st) :
    # F# V9 ~. b, Q' Y) w
  2. st.setState(COMPLETED)% Z" X& v) k+ j; c" _. O  l1 H
  3. st.clearQuestDrops(). t. I- n4 R) V: Y! v
  4. st.takeItems(FANGS_ITEM_ID,-1)' X7 H! |( X! j7 I) W* f! {
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    # a& M  I5 S! ~; M4 k
  6. st.exitQuest(False)/ O0 K$ o. n8 k0 l3 V. m
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))2 r$ i* C0 W4 e
& I5 r0 I! x, Q" G6 J2 |6 M

" h* |; e5 g/ k1 A7 L

$ S* ?/ H5 m/ w2 F- s% \И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):) T6 k* z( X5 `) x6 ^
& d- Y0 n% |, @: d# o0 O
  1. def check(st) :% C( E+ _1 L1 s, k% Y- Z' k/ ]6 B
  2. if getCount(st) >= 4 :
    + M* m6 V. ^& l0 D! l
  3. completed(st)
    * S' X$ e6 v1 G0 e( `
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.# w# }  X' U5 O( ?
) K+ N; {% h& k& S' |
  1. class Quest (JQuest):( C. E- m% W$ T/ G7 n& V( o. `
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    9 }- P( E' \! ~0 P1 K9 k8 K' T: a
  3. def onEvent (self,event,st):5 }* P( p; h- H3 U
  4. id = st.getState()
    - F$ \0 D# f- Y6 K5 c6 M
  5. if id == CREATED : st.setState(STARTED)# z0 E) @0 c  e' j2 i/ \5 q; M
  6. elif id == COMPLETED: pass* ]* T; j, d: p' ^& D. s3 Q  A
  7. elif id == STARTED : check(st)
    % e& j  D; }# q" ?& d5 U
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    6 U* d3 B8 b2 W$ k
  2. QUEST.addStartNpc(7056)
Скопировать код

$ E4 d& u5 C4 |( }" g8 O8 M3 c$ S5 u- O, y9 l6 p$ [3 \* \) |
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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