Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude  g7 l5 M/ {* j; K
Сборка        L2j
* O- S9 v/ l: r# B) `Пример основан на сборке L2J.
% o$ T9 t( u- ]( ~- E) b. D/ ^, P: D7 v
Первое что нужно сделать, это добавить необходимые Java классы в квест.
$ M3 ^1 e$ V, [: f' M; ~  \: u

  1. # n8 N+ h$ }$ M& e1 P5 R9 ]3 q
  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 _! s: B' }" u3 n
  3. 9 Y# x% b$ z; r) V/ W
  4. </div>
Скопировать код
  1. import sys
    . |; K0 a7 k" w
  2. from net.sf.l2j.gameserver.model.quest import State2 t, ]) P$ h4 O9 c3 X6 g/ p
  3. from net.sf.l2j.gameserver.model.quest import QuestState+ h3 G+ ?5 H: V
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082, `" W2 G! W/ E$ J
  2. FANGS_ITEM_ID = 1859
    + Y% t! B0 L8 {
  3. DROP_RATE = 500000! J* ?3 F$ C5 M1 `( t- [$ D( Z' i% y
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :/ L$ ~# U) V/ n+ y2 R4 Q9 x1 q6 r
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
% _* d/ i7 l) `
% q6 |" x2 e3 _+ A9 {
  1. def completed(st) :
    ' s6 Z+ R9 ?; h& O/ m
  2. st.setState(COMPLETED)5 O4 w3 s+ d; v( |* k7 E
  3. st.clearQuestDrops()
    , W, L$ c; `5 x: _
  4. st.takeItems(FANGS_ITEM_ID,-1)
    : S7 |( X, a' ?
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ; V7 `( D( A; [% {0 [9 L& j' s
  6. st.exitQuest(False)5 p7 C* O/ F' q4 I" G% \
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
$ q: W, |5 m' S" g
$ F/ t6 w3 E, E3 l  ]3 f9 A
# l2 k9 t- O5 s

8 l, k" Z! q2 l) k: x3 \И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
! I" x2 G4 t" e& a$ D
8 O2 A1 X  j" H, {  o
  1. def check(st) :5 }. [  ^5 n$ v# p1 U* L2 F! U
  2. if getCount(st) >= 4 :
    ; k& C8 U* |$ R, r
  3. completed(st)
    3 i; R$ _) E* v: _! e$ Y5 ]; C
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
; E9 x# v" e& @& R+ L- g8 u  F0 P; |2 e6 j8 m  z$ Z' c
  1. class Quest (JQuest):
    ; P. k# H5 x6 v5 N, f2 L4 V) \
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)* }0 a! T  \# s2 i. u2 I
  3. def onEvent (self,event,st):0 U% ?4 F7 c8 m% w% {' w/ D& s. R
  4. id = st.getState()4 ~* Q" V: L1 _9 |" }
  5. if id == CREATED : st.setState(STARTED)
    7 y2 g7 y1 l: ?( p. ^
  6. elif id == COMPLETED: pass
    ; D1 e. B$ o6 p1 \' z; f
  7. elif id == STARTED : check(st)$ L9 j' J( k$ y  K
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)/ H" L* s3 Y$ x- `
  2. QUEST.addStartNpc(7056)
Скопировать код
+ ^% D1 i% K( z1 K
+ U& d& D! N. \& V* T1 T
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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