Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude7 ^! z* \: R8 ?5 y9 [! z9 ]" C
Сборка        L2j
- L3 P5 n4 b% bПример основан на сборке L2J.% S$ Z" V$ A+ W& k6 S
( u) G. _+ n9 C
Первое что нужно сделать, это добавить необходимые Java классы в квест.5 j# {3 Z* C; i- f: G1 J% Z
  1. % Q3 J4 ?! ]5 ?( v  T3 `) 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. u; J' [8 [3 L# v) d, A$ q
  3. ( w+ C1 R' K% h4 j
  4. </div>
Скопировать код
  1. import sys( E. Z) j( s4 E5 z, n: s
  2. from net.sf.l2j.gameserver.model.quest import State
    0 W: j* _- Q. L$ H2 V5 g
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    8 M8 w2 F) A% L# u2 U
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    # ^" q# S0 e1 e1 Z' k
  2. FANGS_ITEM_ID = 1859
    ! g3 E( B2 y7 U) W1 e6 x: R/ u
  3. DROP_RATE = 5000006 b; Y3 V, s  S
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :5 |* e" @1 t) Y" Y
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
' S3 S. H/ ~% W- j5 A# A( ^
; q$ k7 ~3 ^2 i$ [7 z4 X# w  Z
  1. def completed(st) :- ~! H' j) m- e/ \6 \. M4 z
  2. st.setState(COMPLETED)
    : a$ I, G# q/ j# |* a; A6 Z
  3. st.clearQuestDrops(). Q& T, P1 y8 D0 {( L! h
  4. st.takeItems(FANGS_ITEM_ID,-1), _9 R: T( f* M7 D* @
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
      i; x% n, L: s! h6 u" Y0 G
  6. st.exitQuest(False)8 \- W2 J6 L2 i5 M. M' R% J
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))$ I! n7 M0 ^# C) j' P
. \1 p& n' j! \$ t' L
. v; T( `0 @8 B' Y. i

9 H6 q, g. r8 l0 e' ]И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
- }/ l4 B2 T0 U, S
# `$ K5 H0 W4 f) G4 e
  1. def check(st) :
    : |" A. A: Z* F2 q5 a: l) d. K
  2. if getCount(st) >= 4 :  s) v4 R5 n5 \5 U3 N  Z" [1 Z
  3. completed(st)( Q. y. N) e# B. e6 T
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.+ r3 l2 [- S* {! X7 s) N' A
8 l) _- @! ]/ d' H& ^5 Y
  1. class Quest (JQuest):8 t" j: m( e; S" }" Y
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)8 i: B: m6 }& {; \- s: Z' p1 |; \5 J
  3. def onEvent (self,event,st):
    9 P5 t$ M2 I( B: z5 ?" {/ f
  4. id = st.getState()
    9 P7 o/ Q" z. q! x2 k( \9 v
  5. if id == CREATED : st.setState(STARTED)
    . k. b. {& e7 h4 L' L! F
  6. elif id == COMPLETED: pass) Q1 B8 {/ g1 k& T
  7. elif id == STARTED : check(st)
    ' K' h" i' u" h
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED), W! a6 a1 y' L
  2. QUEST.addStartNpc(7056)
Скопировать код
! [8 j9 T1 x) m# p
" z3 O3 W- R" ]6 g+ H
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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