Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
  T. e5 \8 }9 I! M7 b" VСборка        L2j0 ?3 A) i0 Z4 R
Пример основан на сборке L2J.
; A) g2 l( [/ U5 K+ A- T7 y4 g1 D5 S; o. D/ a8 N% G3 p4 k
Первое что нужно сделать, это добавить необходимые Java классы в квест.
. C/ \$ v3 i( k5 I. N
  1. " n! Q* ^2 [( ~  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>
    + S9 v# m: `; t/ o2 X, d; }% G

  3. / b) J4 Y) w+ w+ Z8 N- u
  4. </div>
Скопировать код
  1. import sys2 E$ o( z5 B$ u, R. @
  2. from net.sf.l2j.gameserver.model.quest import State5 [8 p* ?' n+ K. A
  3. from net.sf.l2j.gameserver.model.quest import QuestState( D$ z/ r' D4 }
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    2 O0 M# H$ u: ]9 m3 ?) W) s
  2. FANGS_ITEM_ID = 1859* P8 T! t( Z! p# V
  3. DROP_RATE = 500000
    2 H# ]6 ]+ E. G3 R" o
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :/ {5 H5 [( `1 X; w) L
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):/ n8 L) ]0 a& R" t! o% I  {$ ~- ]' E

, X. I5 _" O0 d+ m) o
  1. def completed(st) :
    & w6 ~! y$ e4 P: o) m9 Q% @5 M6 j
  2. st.setState(COMPLETED)
    7 N% u- I3 V4 U$ m5 ^* T; b" e; x
  3. st.clearQuestDrops()( y' [3 J4 Z+ t* t  ~) o
  4. st.takeItems(FANGS_ITEM_ID,-1), I/ @* c* J% T, B; {/ |
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)1 A/ m0 {/ r  p3 k" W
  6. st.exitQuest(False)
    3 `5 j( }; z5 y
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
* t! d- }, N! ?  H! A2 E- x  K

( Q6 h! ]3 x' Y& v& j
2 d3 Y- I3 x# p
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):! A& G: D. t+ o( u. U: f+ H
0 w6 ^8 t( U( s( S& n3 ~+ A, Q
  1. def check(st) :
    ( B0 I" t5 J4 P5 ^0 ]
  2. if getCount(st) >= 4 :
    2 ~- ]& c+ |7 G4 d& Z
  3. completed(st)
    4 s% X& G3 N. S" \2 j
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
/ B; ]" ^" Q' r& j9 V% |" r2 ]- a3 h7 }" E7 {7 T; y4 X
  1. class Quest (JQuest):
    6 `' h) t/ s1 E4 @
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    0 T  L: [8 [% u" K/ g+ l
  3. def onEvent (self,event,st):3 u# A( j* d; a, N
  4. id = st.getState()
    " C  j6 p& L  M/ k# b. q8 g
  5. if id == CREATED : st.setState(STARTED)* j; t/ \3 s/ e6 p* a
  6. elif id == COMPLETED: pass
    6 W" k# j. m7 J* E# H7 W
  7. elif id == STARTED : check(st)8 l' F+ P4 T) R- P/ O2 @+ w
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    2 d! w' G! O, q0 u2 y
  2. QUEST.addStartNpc(7056)
Скопировать код
0 j. S8 O+ E1 c4 }& g  R
0 I9 H4 o& D0 p; M6 s
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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