Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude. X. ^6 h+ \. o5 N% o) `
Сборка        L2j) q  L* w/ P8 x8 g2 z7 @- B, r
Пример основан на сборке L2J.
% ^4 O& x. t' c! G7 B$ S
; G) A9 y- B. Y# \& @Первое что нужно сделать, это добавить необходимые Java классы в квест.
8 _9 ^: v- U: n3 N- a
  1. ( y$ d4 `1 z* E8 o! t  _$ A1 O! 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>
    2 [) W4 ]) G9 @4 ]0 z
  3. $ F" Y& N  L( s. o" F# V! u* k; g5 G
  4. </div>
Скопировать код
  1. import sys- W* I, c( O' E6 c$ P# Y
  2. from net.sf.l2j.gameserver.model.quest import State! ~* C* v4 M* G# \# I
  3. from net.sf.l2j.gameserver.model.quest import QuestState. h: L7 p& W0 c2 Y! {
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082/ H) K# O9 x( g) s7 ~
  2. FANGS_ITEM_ID = 1859
    8 P" B; I/ V* ?% Q) j
  3. DROP_RATE = 5000008 U0 e7 C) h0 O
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :' b' L3 t. L9 o
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
) }) P2 A( J) r2 g% E. G* x, g4 K" Q3 R% g# |- q8 _2 F
  1. def completed(st) :1 E& E5 t* s7 L' ?) R# O
  2. st.setState(COMPLETED)
    9 j7 @& R" _/ M' R  Q
  3. st.clearQuestDrops()2 M9 s% T% j) s4 m
  4. st.takeItems(FANGS_ITEM_ID,-1)0 F  X+ C6 D' R
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)4 g* J% N7 p' g5 F# h2 n
  6. st.exitQuest(False)9 }/ N) b7 ^# W( |% }- m6 r9 g
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))0 r. j. }2 B* q
# Q$ a  y. Z* j* h- w( w+ B/ O& G

! _" s' t+ R- }0 C* t
* W6 z7 [- a/ g
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):: s5 Q; D* i( Q1 t2 o+ I. Q* c
6 h( k3 e+ f( l
  1. def check(st) :+ P/ N& ?8 O0 r: P4 _
  2. if getCount(st) >= 4 :
    6 s# Q6 G# n2 y7 L. h% P5 j0 d! }
  3. completed(st)
    ; s5 a; U8 W, B# e  E8 l
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
9 T0 x' A! l( P! e
& O1 [4 r$ x, I( }2 K) Z/ \
  1. class Quest (JQuest):; {* `" v/ o: Z+ f
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)8 J2 ^* O6 B: ?
  3. def onEvent (self,event,st):
    4 u& v4 V) v1 @2 r" {
  4. id = st.getState()
    3 }/ }0 A1 I3 w, y  F6 A! S
  5. if id == CREATED : st.setState(STARTED)
    # y6 `$ k( Q) t) N0 w
  6. elif id == COMPLETED: pass
    # |, M" S$ I. S
  7. elif id == STARTED : check(st)3 m: W2 B) m9 U0 a0 D7 b+ c+ P
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
      ]. W3 @/ I9 y% N
  2. QUEST.addStartNpc(7056)
Скопировать код
3 P% W! \2 S0 _: {0 A1 t- B
) O. }/ }6 T: O" K3 Q) z  ~  F4 s' ~
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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