Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude% v! v0 e1 f+ `1 n) ]& }3 X
Сборка        L2j$ M9 k: ^) L/ z- @5 f/ d  _
Пример основан на сборке L2J.* ^# a7 t" f' R7 \6 E, Q! Y
( u9 i1 _) O; o( X/ X6 R
Первое что нужно сделать, это добавить необходимые Java классы в квест.' K6 l8 Z# @; j" O+ l
  1. , D/ S, j2 C( `
  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>
    2 h) F+ \0 b6 M3 _3 g/ Y) e

  3. 1 l. d1 W7 @+ ?  V& d. I; q9 J& |
  4. </div>
Скопировать код
  1. import sys- B! C/ e! d% E1 c
  2. from net.sf.l2j.gameserver.model.quest import State
    ! W( T5 V" C( ?9 Y# T" V
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    7 z4 i4 y: K- G8 r) ^* f/ _- c9 b
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120822 X5 q5 V2 e% w+ m
  2. FANGS_ITEM_ID = 1859
    0 R& V( |9 i) n$ [9 J; w0 ~6 k
  3. DROP_RATE = 500000
    4 ?" `2 x2 F+ ?$ }/ x
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :( j& |9 D- {9 x0 z
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):  o9 _7 ]) D( k7 D3 v

5 H( q( s9 ?2 Y5 A! y
  1. def completed(st) :- L; Q8 h: b" m5 K) |0 p
  2. st.setState(COMPLETED)
    , O. k. ~8 {. i' ?! y' B6 m2 s, J
  3. st.clearQuestDrops()
    4 w& {8 F' A4 y0 }7 S" |
  4. st.takeItems(FANGS_ITEM_ID,-1)
    % ~$ e1 i- p! V- {4 v
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)8 p' z+ W* H8 ~4 y+ ^7 [3 U1 H
  6. st.exitQuest(False)3 O& O3 P' f$ {  W3 e
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
! X: f1 C/ `; V7 S- b' l9 W! p; b+ A: b3 H' @, g

; F: X: C3 G: Y- [( s
( z! u7 {3 e$ A: @9 C" s/ D- O
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
' N5 e7 O3 h: Q. R# n4 F
2 G+ q, p1 d6 y7 j0 J) D
  1. def check(st) :
    ' h& V/ F% }  [$ F
  2. if getCount(st) >= 4 :
    & G2 O8 [9 V+ S- u4 f4 c
  3. completed(st)
    : n8 b% z0 y4 G+ X
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.4 G: L, [+ P& [+ w- x+ K5 y

+ L) y, \4 h' g; F* T( w6 B: D
  1. class Quest (JQuest):. v# x1 z2 Z! A  g0 q) y  U
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    - X! G3 L5 z+ u/ O0 L
  3. def onEvent (self,event,st):
    ) [4 ^/ G! Q5 J  m8 V) ^6 O) @" M
  4. id = st.getState()
    % B$ p# C/ ^% U9 \) L& d
  5. if id == CREATED : st.setState(STARTED); \, n; z/ x9 j5 @3 l
  6. elif id == COMPLETED: pass
    $ P7 O% u0 L& e& B; B1 N9 l8 H5 C% B
  7. elif id == STARTED : check(st)2 O7 |  M% R8 L
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    8 b2 v7 w6 b! c0 X% Q6 @
  2. QUEST.addStartNpc(7056)
Скопировать код
# j/ {8 g" D( V  [, Y
" P; R  Z$ [$ F0 m4 j7 X
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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