Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude9 ~3 r# |, }4 s" R6 L% k/ y$ Q  B
Сборка        L2j& i" M% }0 h! L* r  V
Пример основан на сборке L2J.9 Q9 I6 `# ?' g' I" I, ]! E

5 E$ r  \. U' yПервое что нужно сделать, это добавить необходимые Java классы в квест.
* ?" H1 f9 v; D# U5 s0 i/ ^. q9 M

  1. % @7 I( W. h4 p3 h2 k+ [6 G4 ^
  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>
    % y5 Z9 M/ i3 y4 J
  3. 3 ?: O* h- b% O5 q1 e7 e
  4. </div>
Скопировать код
  1. import sys& _9 G$ h% ~9 x8 Z
  2. from net.sf.l2j.gameserver.model.quest import State) M: X9 l- K# ]1 I  h6 J) }  G  A& M
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    / U- u3 o& k) X/ ~" \2 A
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082" v  i6 b& s" y8 o$ R0 B1 j
  2. FANGS_ITEM_ID = 1859! A+ P4 F9 q. t$ i3 {3 ?4 a
  3. DROP_RATE = 500000+ g* V, T. u" C' N1 l
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    9 h/ P. |8 H# V
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):6 r4 q# @7 D- \/ H# o

& u  A; j. Z' Y- P6 M( _
  1. def completed(st) :; R. o/ R) s3 m9 q4 x
  2. st.setState(COMPLETED)- I) e. M, {* q) v& t1 x3 ]/ a% ]( ~
  3. st.clearQuestDrops()( ]$ O- n0 f/ O9 v( j1 b- o1 e
  4. st.takeItems(FANGS_ITEM_ID,-1)
    " c5 K3 m- v8 V
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)% y7 H. m: O  z6 r5 R
  6. st.exitQuest(False)
    ' g% Z' c  f0 N$ u( {% W9 p
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))$ K/ F: z/ K, n- ~
% I( G" |" ]/ `+ ]
; b+ n* R- w" a+ i' P

/ O' T8 l% n6 [/ w# F- PИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
; }; f) B. T& V$ \) d/ _- W3 a0 v  z$ Z. H  u7 ^( v# |
  1. def check(st) :) _& O8 f/ k3 [% v6 f' s3 G: `
  2. if getCount(st) >= 4 :) N2 O# ~6 i  l: ?2 C
  3. completed(st)" C: M# }, L# g+ _# K6 ?1 S
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.% E( J6 @; j+ I7 O1 b/ r& h5 O) m, k
: {7 X0 K6 J& R- z" t% k$ n2 n0 V
  1. class Quest (JQuest):& @  e, X/ b" d) s
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)) `! ~- o& Q* h
  3. def onEvent (self,event,st):* _# k' B8 z4 f& z( J( F
  4. id = st.getState()/ M5 U7 ^( e, {/ b7 ^6 G0 o# @. i, v
  5. if id == CREATED : st.setState(STARTED)
    & H4 |/ T- b& }- I5 `
  6. elif id == COMPLETED: pass
    8 [$ g5 |6 U& I" f
  7. elif id == STARTED : check(st)9 Z5 V& H+ N& h6 C
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)& z3 r( H+ b, A7 _5 p: h( {
  2. QUEST.addStartNpc(7056)
Скопировать код

3 A( X$ C% m% k
. D8 l7 `6 f' C, t/ [
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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