Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
7 e3 e+ V* A, j8 j8 _7 Z. cСборка        L2j
% V2 `- {& v8 A1 o% EПример основан на сборке L2J., q' i4 m6 r2 s, ]1 B
: F8 L: P( U- P5 I7 r
Первое что нужно сделать, это добавить необходимые Java классы в квест.
  \1 E; I0 x$ z1 w- o' v6 I

  1. % J% X  U& H7 ]) S, H, 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>& I! ?; ^5 Z7 V8 Z5 T9 B: T# F& g
  3. . e8 V4 s0 W+ g" Q8 t" j! T7 D" F
  4. </div>
Скопировать код
  1. import sys2 c  ^9 g+ }0 u% q! |& X3 ^; p9 A
  2. from net.sf.l2j.gameserver.model.quest import State
    2 a( C0 M7 D# {  T/ U, r/ S! Q
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    : |2 _2 z& M1 u, C
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120820 Q% u/ o0 {# n  c3 Q! r4 W3 [& T
  2. FANGS_ITEM_ID = 1859- Y/ k7 h& @/ h. Z/ V
  3. DROP_RATE = 500000
    0 [! U0 b! O, ^7 X1 r8 K$ o
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :5 n  I, i3 c# |1 E1 W
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
8 s- |+ A# d' e( }. H2 B* X$ s" [9 I8 z. V- s
  1. def completed(st) :2 P) T: R3 y6 y% j' m
  2. st.setState(COMPLETED)
    ' w( Y: O. ^0 E# {
  3. st.clearQuestDrops()
    7 p" d/ v# H) i" _/ Z% m/ Y
  4. st.takeItems(FANGS_ITEM_ID,-1)
    + l, b4 v/ K0 s7 s2 E
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ( _- ~$ ^& S( C7 l
  6. st.exitQuest(False)* E0 }  L9 ~1 o" {3 {! [8 W0 I" R
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
" T  a* Q! F  j0 `% _
/ t% k4 {3 y- A& r4 y% A8 \6 @9 {% Y7 H- R3 [! A

+ P3 D% \7 q$ D* j) kИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
4 O- `8 a9 d+ j8 u! a9 L2 @; f
. `9 e+ b* h; z
  1. def check(st) :
    , S8 Q& X& ]6 E
  2. if getCount(st) >= 4 :$ c0 @* |; A  L& @" j* ~* H
  3. completed(st)
    ' Q9 V" {7 W2 A  F' l# d7 Z8 \! Z) M0 D
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
% e, E2 I9 T1 h" T
9 C6 z/ _) I( I- t' O. G! T
  1. class Quest (JQuest):+ ?: u1 |8 G1 ]. X4 Y
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    ! C1 j' p/ u# n  K) n3 [- N
  3. def onEvent (self,event,st):
    0 j: g8 h& u0 \/ R3 {- S
  4. id = st.getState()% E: D" `2 C' E% t: A  g" l  d
  5. if id == CREATED : st.setState(STARTED)
    ; a& C: [. u1 g) Y* r# H/ {
  6. elif id == COMPLETED: pass! m8 v! p, N- Y
  7. elif id == STARTED : check(st)
    " V: ^- X8 k2 P5 R
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED): `) T2 i+ h, o0 U5 Z. L
  2. QUEST.addStartNpc(7056)
Скопировать код

' S) x* I# M4 S! J) d! v* K! Q& O/ q" X6 ]* d1 s
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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