Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude' X9 b; C+ Z: l% Y1 u& }' n
Сборка        L2j, Y7 y; }) [+ e4 }$ b5 a
Пример основан на сборке L2J.5 f9 Q0 c3 x1 D' y

) Q2 w$ W4 O" |3 j8 I: t3 bПервое что нужно сделать, это добавить необходимые Java классы в квест.
0 J6 M7 I' T" G. b; b; V
  1. % k! m8 g/ T( r+ m9 N, f6 p
  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>
    " ~$ x" T' Z' `6 x  |% [% Y

  3. ; J7 n0 ^& P$ D! {; @4 n* Z
  4. </div>
Скопировать код
  1. import sys# A: S1 B$ `9 Q6 ^0 I- E3 v! e
  2. from net.sf.l2j.gameserver.model.quest import State
    - I  C/ k$ h* E; d0 `# c: Z; [
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    4 |# S" H* U. d& X" l
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    ) C7 E8 c! ]  H- O& J
  2. FANGS_ITEM_ID = 1859
      j, P2 S0 O' _! T+ L7 ~% y
  3. DROP_RATE = 500000; E3 f, d/ @# Z
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    ! M1 \: ^3 `8 R: h
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):$ U$ c% R: Z- w" c

$ y$ g0 z- m# v
  1. def completed(st) :  p! o5 t! T4 Q* S- e7 l9 \
  2. st.setState(COMPLETED)
    1 e% u: j8 e/ p( w$ Y: B
  3. st.clearQuestDrops()0 K! Y/ ]$ H- U1 h# [: e
  4. st.takeItems(FANGS_ITEM_ID,-1)
    3 h' K& w6 j3 i/ h# B
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    - |# i! X1 @' U' g" t. |
  6. st.exitQuest(False)
    * z9 N' T0 p2 Q. Z
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
( R1 C0 _' b0 R* r! L# y: b' G3 `4 d# H
. F) I" }0 M/ u& X
( A9 o& P7 `1 e& x
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
  G- B) z# d1 n" _! w2 M4 ^) |) `
& s' A. h3 N' w  b& t
  1. def check(st) :
    , L: F! }, Q. g8 R  N% @6 K2 q
  2. if getCount(st) >= 4 :
    9 x5 U7 d% j* @9 M' i. H
  3. completed(st)
    ' S1 g8 I9 [7 B  p" q! |
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
8 E& f% C# s) P! ^$ `" m( v
6 E0 K, j1 d5 K
  1. class Quest (JQuest):8 L  y3 j# T! y3 P9 }2 e' Y% h
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    $ |, n' E9 J1 D( K4 g1 H9 X
  3. def onEvent (self,event,st):
    1 M3 v" z7 [/ [3 h  s$ \; O
  4. id = st.getState()
    , Y, V2 k% _. T9 t& X
  5. if id == CREATED : st.setState(STARTED)' T% Q9 M3 J4 T7 S2 G
  6. elif id == COMPLETED: pass/ j4 d6 a3 M) v0 x" S% e
  7. elif id == STARTED : check(st), Y$ f, a' M2 C) K, `4 R
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    4 H0 r6 I; b6 ]/ Q( I+ e
  2. QUEST.addStartNpc(7056)
Скопировать код
! y8 R0 X* S6 Z0 `( l) ?
, A% U( Y2 G! Z- v+ {! p3 d
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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