Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude/ R# A! [& ?9 S4 V1 B$ F+ @
Сборка        L2j- h  c* J; S0 n( G
Пример основан на сборке L2J.3 A* J5 W; \( z1 c; V5 K5 {1 f1 S/ J

# v* ]% S$ k( `3 a( jПервое что нужно сделать, это добавить необходимые Java классы в квест.6 |3 @5 D# n; E  W* W9 l: ?
  1. 1 B9 j7 b/ o$ 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>% n, t. v; @  y' n( x$ u
  3. ) ?9 J/ l/ [" V9 J3 ~" h  ?
  4. </div>
Скопировать код
  1. import sys
    % B5 i8 k) {( {8 I
  2. from net.sf.l2j.gameserver.model.quest import State. z; w/ d8 `" s" d" \3 L5 z
  3. from net.sf.l2j.gameserver.model.quest import QuestState6 @5 s3 x5 f1 M  W( V- w) v
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    4 D$ V. ~1 V. E9 _9 _& L+ P* a" N
  2. FANGS_ITEM_ID = 1859
    * g# N" [. g- k& l5 e' \6 G7 H
  3. DROP_RATE = 5000007 n! t! ]. X7 G" o4 w
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :1 H0 h; N9 q* ]: o
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):! O, g! f6 P& A) I9 m  g
6 ]6 c, K/ w3 C' O& s8 S
  1. def completed(st) :4 a( ]& a6 b( j' P
  2. st.setState(COMPLETED)% g: d+ r9 S. f* e$ c% F8 t
  3. st.clearQuestDrops()* W, S9 a9 K) s* l# Y* @' k
  4. st.takeItems(FANGS_ITEM_ID,-1)
    0 m$ S4 u2 X/ g, R. h
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)2 X5 m2 i& V0 R% S. d
  6. st.exitQuest(False)
    6 j7 j* U$ T- G. m* ]
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))) \6 {2 _( }* ?; R* j0 q6 ?" ?
1 `: l# }- U& \
5 J2 b6 v# `1 l' o; m" D
# u1 a$ K6 T( Z" V( w
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
  p4 f$ F/ j/ `
' p% C8 o( a) T# q7 o3 X% L& P
  1. def check(st) :5 S9 Z0 b2 j; Q$ v
  2. if getCount(st) >= 4 :
    8 n% `/ R: Q; Z) E5 L
  3. completed(st); g/ w# L/ f  z$ U+ }0 W
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.1 t, t! g7 T- w* {; l+ A
, ~4 X: X8 }4 i' d0 Y, I4 {
  1. class Quest (JQuest):! v* B" O' A- u2 ]
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)& N, J/ s; b+ a$ y1 @
  3. def onEvent (self,event,st):
    ' `  q5 l( g4 e
  4. id = st.getState()
    $ f+ v' r* t: t1 K1 _4 w
  5. if id == CREATED : st.setState(STARTED)
    . \) m& d. n) e" b8 a; }
  6. elif id == COMPLETED: pass
    % ~9 B! I2 _% c( k& L4 n
  7. elif id == STARTED : check(st)
    " N4 r. }- u# \! G
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    3 m' O" G* a) |3 C. E; n
  2. QUEST.addStartNpc(7056)
Скопировать код

6 }2 A8 p( G$ F0 a
& F( v! Q! ~- M1 R! t- [
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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