Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
5 |& ]: D& r; Y' d- i9 g, ~Сборка        L2j3 g6 C2 V# q1 z" {
Пример основан на сборке L2J.
$ w. z- w4 J" b: w
' s5 y- `+ f( G3 x3 @2 c3 jПервое что нужно сделать, это добавить необходимые Java классы в квест.% G" ^9 c0 C6 Z+ k+ V
  1. % G$ t9 ~  Y1 T3 R. \
  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 O6 l. f! `% X4 F

  3. 6 h' D- E! a" J( O: ~
  4. </div>
Скопировать код
  1. import sys* _" E  n" l9 A5 A, Y& E/ e
  2. from net.sf.l2j.gameserver.model.quest import State% I- [# g% k: s- i
  3. from net.sf.l2j.gameserver.model.quest import QuestState" g  B6 V1 j% T+ @
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    % S6 }, O# ]4 B0 I
  2. FANGS_ITEM_ID = 18595 r7 l, r2 g" m/ O4 D. h$ K, f
  3. DROP_RATE = 500000+ Y' s& @, S/ K$ k, l' f
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :+ ?1 s! i3 G, N# c
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
. z3 P+ D' s$ G3 [2 e3 g" j! e0 |+ V  S9 `/ R5 R
  1. def completed(st) :
    . A& d! L7 I6 }
  2. st.setState(COMPLETED)0 @# J1 \" B# ?. Q  L
  3. st.clearQuestDrops(), v! _; r9 P$ d. u% e2 ^5 I- J
  4. st.takeItems(FANGS_ITEM_ID,-1)
    & q" M) ]( C3 ?% q! y7 d, Y9 B
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)# o  }7 i# n9 C$ R& z" f- ~
  6. st.exitQuest(False)/ b4 W& i" q, e9 N4 m/ H  e
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
0 @: V8 p8 `: R7 [; _: w6 h9 N9 e0 G' E- W
3 R/ H9 ^3 K5 S1 H1 u1 j

3 l- t+ `& S% d, B9 }И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):, ?$ U) y8 ~5 K9 {  T4 C

& x/ e' H+ [; b0 x* _
  1. def check(st) :
    7 m) D1 H0 E6 J+ I) I
  2. if getCount(st) >= 4 :
    8 R9 y# q$ K8 p0 L
  3. completed(st)
    7 z9 }2 Q5 R: @: K; _
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
4 {3 T: M! N- W
: h1 N3 v- z' r. o! h! t% l, m
  1. class Quest (JQuest):
    , {8 J8 E' K+ t
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    8 T+ J6 L1 M# O0 o& Q; v+ i% h
  3. def onEvent (self,event,st):- O+ B& n7 V+ I: v; y) u
  4. id = st.getState()( O9 F/ p! o& a6 L( z7 l2 P. V+ ^: T$ _& K
  5. if id == CREATED : st.setState(STARTED)2 X$ t5 {8 [+ U
  6. elif id == COMPLETED: pass
    ) _+ x( R6 U; g" l5 t
  7. elif id == STARTED : check(st)
    7 A$ U: {: O; Q6 a4 M
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
      E5 s4 u. B: o" k% H: E0 V
  2. QUEST.addStartNpc(7056)
Скопировать код
! b+ i3 W6 d7 l2 i0 }; h
' z% D8 k4 @$ a. `4 E5 y$ O- }
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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