Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude, a) v& R$ P4 a" U- c2 z
Сборка        L2j$ F% y* o/ [, i8 i7 ?7 U
Пример основан на сборке L2J.- k1 U* h$ K$ k1 I9 G, {
0 K, n) P6 m. i; i
Первое что нужно сделать, это добавить необходимые Java классы в квест.1 `$ f6 A8 Q& q/ U( ^7 J

  1. 4 s0 X* g* q( m; y7 ]/ S7 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>! a8 G5 V' W0 ^; T

  3. & Z# V- ]8 L. r* T5 F) ]% v/ L
  4. </div>
Скопировать код
  1. import sys8 [6 {$ L# f! {6 t2 {% x  I9 v
  2. from net.sf.l2j.gameserver.model.quest import State
    1 s* U4 z7 s7 t
  3. from net.sf.l2j.gameserver.model.quest import QuestState  s4 T/ h& _1 }! [  u1 T
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120826 b4 b/ ?6 @8 `% a. o0 V
  2. FANGS_ITEM_ID = 1859" R3 {' U3 @, A  T  E, U
  3. DROP_RATE = 500000+ r$ D; F* q7 ~& s1 X: ~+ F
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :1 Q& p# `+ @  N: E" f3 @
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
! ?* |) n, F$ P
/ G! `+ }0 F' ^* z+ J5 t; a
  1. def completed(st) :" e4 C- h  Q/ z& e: M) `( V6 F
  2. st.setState(COMPLETED)
    ) s2 M6 I# I! A
  3. st.clearQuestDrops()
    : v5 T4 T( L) d+ }2 e. L
  4. st.takeItems(FANGS_ITEM_ID,-1)3 T* R( Z1 j3 n, L% m4 ^! `
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)' o0 J$ q, l9 |5 o
  6. st.exitQuest(False)
    1 m) d! l( P7 ~' v$ q
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)), m! u) c, j) ^5 F. p

" R' O3 J- K  H6 K
8 O6 M  C1 E  Q
5 F) i+ m$ b1 F
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
9 R- k; B5 l' d& }2 n) n2 E8 i4 _) ^% A4 A* Q# o
  1. def check(st) :* y  K# i( w7 M, x. ?
  2. if getCount(st) >= 4 :
    " C( l' K! J3 T7 P2 C# x% \& u+ t
  3. completed(st)
    ) m7 T/ N+ N6 C
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.2 h. b+ U2 W# N2 S/ L# }) |# m
9 X% d: |# \- w4 @+ [0 J+ q( p5 a( a1 X
  1. class Quest (JQuest):3 K- i9 h+ g. ?2 _- c$ ~2 v+ C/ @7 [
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    8 q$ _. V! y. A) ~4 ]  w
  3. def onEvent (self,event,st):
    2 i$ J. b9 G: G7 w* V# c: j
  4. id = st.getState()
    . i" P# t  S1 u7 Y: C: q
  5. if id == CREATED : st.setState(STARTED)
    * j. v1 S) D+ K
  6. elif id == COMPLETED: pass2 i  t0 q6 F7 y2 U( s! C2 T
  7. elif id == STARTED : check(st)* \* ~9 c- o: _% e  k" z# q7 b" N% z
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    + p2 s* c" t8 {  v4 ^
  2. QUEST.addStartNpc(7056)
Скопировать код

& _+ T1 T7 D" V+ }1 s
$ ^: A$ E5 z2 `$ s
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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