Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
+ p, v* Q; ]* hСборка        L2j
. |( O( ~1 J5 a3 hПример основан на сборке L2J.) Z5 @6 k" T( _" o
) T( _2 t% m+ v. f
Первое что нужно сделать, это добавить необходимые Java классы в квест./ C3 f4 M9 y. L" {: z& O

  1. 5 V) X+ r. r7 B, A% L& n( k+ E" v* |, O
  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>
    6 [  c  x+ m+ V" M" h  x

  3. 5 l. i2 a. E/ r) B
  4. </div>
Скопировать код
  1. import sys' W3 n" i, g  B8 `* E3 V* ^
  2. from net.sf.l2j.gameserver.model.quest import State4 i  s5 r8 d4 a7 I
  3. from net.sf.l2j.gameserver.model.quest import QuestState5 p6 W1 }! [6 i* ~3 p, G2 N1 [" {
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082* u/ I% C; U( u4 N- g" D
  2. FANGS_ITEM_ID = 18594 B" c; U; J7 Y5 K* s2 t7 }# C
  3. DROP_RATE = 500000
    9 h8 j2 O0 P, t4 R2 W
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    8 P1 ~0 p. N1 x8 u
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
6 C8 y9 k9 O+ M0 _
  W" }8 }2 W, F1 C" z* ?
  1. def completed(st) :
    % O  ?- q% p3 K8 P" ~0 m
  2. st.setState(COMPLETED)
    & ^' P( L$ j2 k1 D
  3. st.clearQuestDrops()
    ) f/ h- `5 D9 o1 t# d& e+ z
  4. st.takeItems(FANGS_ITEM_ID,-1)
    8 a4 s5 m3 y9 @
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)+ s) A# h. o* A# s
  6. st.exitQuest(False)
    6 j7 w5 R8 K& ]$ M* T# g- ?2 m
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))  k( a- I9 O5 ]& j' z  e: ]4 ]- W

2 y( k; w" C" k4 ?7 b3 [2 R7 x4 s
6 \! Q0 t: Z  a7 [

0 a! e( H6 C. P4 s( g( vИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
! R% L  h8 X2 A2 G( m9 O# s$ c" L
  1. def check(st) :2 c! |7 l9 Y$ p8 F/ n" Q" G# \
  2. if getCount(st) >= 4 :4 X6 z9 C2 y% G; X/ |
  3. completed(st)# r% V! p3 n8 ]" }7 Z* G2 M
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
& U! O0 e2 [2 V. O, m4 P$ ]7 |9 h5 |* w
  1. class Quest (JQuest):- l& |  G# @# R; x/ Z% q" s
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    ' C4 L: x* L% k
  3. def onEvent (self,event,st):
    2 I7 w1 N8 c" W8 ?( s6 `8 Q
  4. id = st.getState()! k- b1 k1 v0 v7 [
  5. if id == CREATED : st.setState(STARTED)3 r% o1 ~6 j: r
  6. elif id == COMPLETED: pass( x1 `- o9 A, S. z& L, T  L
  7. elif id == STARTED : check(st): l% S, ?  D1 I
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    $ j7 q( p+ m; E- {
  2. QUEST.addStartNpc(7056)
Скопировать код

+ Z! i% f, {, ^/ D+ ]0 ?0 E& o2 z( j: s" u
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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