Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
' |- o% {' X' g% |Сборка        L2j" ~. t; T' d+ B4 V
Пример основан на сборке L2J.* Z3 E4 z: D: N$ W$ z4 n

! r* {, \# p6 n* qПервое что нужно сделать, это добавить необходимые Java классы в квест.
. V/ Q2 y' E" Q) }1 I* y. x& w) _
  1. $ X4 [7 ^: n+ w6 n2 s; q0 Z- g+ g
  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>. F5 g2 g* V4 q3 `- g1 ^  G" \
  3. # T8 B) U! d' F; f8 {2 W4 ?
  4. </div>
Скопировать код
  1. import sys9 |1 e+ F. [5 M! v6 ~
  2. from net.sf.l2j.gameserver.model.quest import State7 W6 x0 |  v& E' ?9 a& j3 k$ \
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    % H# f0 `6 \: _1 W0 X6 h
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120820 Q# k- X: ~# ?7 D
  2. FANGS_ITEM_ID = 1859. F: T6 G$ G& _. @0 v
  3. DROP_RATE = 500000$ n. c6 P; w6 S! f$ Z
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    8 {, A* q5 X  t4 @. M$ {
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
5 D7 P* E( d. q1 x1 R2 O
$ X. X/ _4 b2 Q) O- K
  1. def completed(st) :
    $ Z8 j, N: o# p5 X/ j" e+ ~
  2. st.setState(COMPLETED)) z! o' {9 ^, A9 l% h1 ?8 W7 E
  3. st.clearQuestDrops()
    ! F. X. X! ~# B; g/ Q8 N
  4. st.takeItems(FANGS_ITEM_ID,-1)
    ! M) |4 F( _" \, f
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    9 D* r: g7 h! Q& A
  6. st.exitQuest(False)
    - d+ D, V: Z' }, I
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
1 l/ B" ?9 d+ e4 l  c' j) V, E; v2 _0 F9 o1 K: v9 g& y( E

# q' q( C9 d% I+ H1 a/ F  c) i

& A$ P9 [9 @1 [! h/ P. vИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):: a1 A' I' {- S+ O

: @/ N- Y, N% |5 R; Q* ~
  1. def check(st) :1 O& q" t$ M- L# ?/ `) L4 ^$ a; o
  2. if getCount(st) >= 4 :
    % _' D) r7 ^% v; f# B& H9 L- \! G
  3. completed(st), N8 A  J$ N) T
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.8 h7 c% F; M% j  V5 \1 F
2 v" V% B# x5 W
  1. class Quest (JQuest):5 e; A% K5 f/ m" N. n1 b% O! _3 v
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    # j# ~( _2 `: o( ?5 v
  3. def onEvent (self,event,st):( i8 U  R  ?1 O7 K9 C) u+ C: ^
  4. id = st.getState()% ^* d8 M1 i. ~7 ?! C& {
  5. if id == CREATED : st.setState(STARTED)
    $ B, {8 `; k$ h, l' Z
  6. elif id == COMPLETED: pass( p- c0 ?$ v1 T
  7. elif id == STARTED : check(st)" B  ^6 J& g& H2 @  X
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    7 X2 y7 h8 t# O+ p6 i5 Y
  2. QUEST.addStartNpc(7056)
Скопировать код

$ ~0 B3 Z% X3 A
/ b/ ?6 h3 B0 u, ~7 a' U5 u
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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