Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude4 E% R5 L9 I3 L. P1 `! r! B
Сборка        L2j- R2 X$ |, c" O( o; _
Пример основан на сборке L2J.
. D6 C; C- T+ M. w) g* C0 W/ B; i
Первое что нужно сделать, это добавить необходимые Java классы в квест.
0 C2 K* O. ?  A# m: A1 c: E; Y
  1. ' |6 L& `% r  }' a* P  n; o
  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>
    / U9 u+ j2 J6 s8 h, O
  3. / H. B# T% C4 |" N! k9 [, D
  4. </div>
Скопировать код
  1. import sys, h9 E. ?" ~! b6 v8 J! H
  2. from net.sf.l2j.gameserver.model.quest import State0 J0 G: n  T/ Q5 l6 l# S# P9 w
  3. from net.sf.l2j.gameserver.model.quest import QuestState( F( b0 D/ a3 P( n- k1 w
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082+ N& Q& R, w* Y* M& N) H7 Z
  2. FANGS_ITEM_ID = 1859
    9 L  \; O- |, `
  3. DROP_RATE = 500000! Q9 s, K  e7 C8 m* c! ?; [" X8 _, _% K( `
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :6 s$ P$ t  _( T# n  `: v& ^
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):8 Y3 A; A  f7 g& L! w9 Y

* C4 u, W$ C3 M1 ?( K# L& Q* b& D
  1. def completed(st) :
    1 S  }$ K" F6 o; z( ]6 e2 `
  2. st.setState(COMPLETED)
    + P1 @& r2 t$ f2 R5 Q. {, c- O$ u$ Z
  3. st.clearQuestDrops()
    , w  W$ n$ ?7 |  Y1 r
  4. st.takeItems(FANGS_ITEM_ID,-1)
    3 }5 G- e' g+ `6 B" _( p1 X# Q
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    8 x7 m# b) X6 B# I. D' E: H" p1 ^# z
  6. st.exitQuest(False)) t8 C2 T# P/ y4 h
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
) m3 p5 s# n0 n8 ?" h* [
5 n  N5 x/ j  t* `2 ]! p' d% S1 v  B- O
6 P: O6 A& c9 _% R/ f" g
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
, F3 U7 E8 i+ E* q$ }% G& q3 m; @  V! `' r' _
  1. def check(st) :# u9 `1 @8 _: p- z& ^
  2. if getCount(st) >= 4 :2 U+ U9 }8 N. Q4 |' D
  3. completed(st)$ J& p. }( @0 A7 P3 p
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.' J! s- r% _$ _3 n9 H) n: R/ s
8 N5 h, I2 D% c$ r
  1. class Quest (JQuest):
    ; ?! Z7 d/ z' y$ S( F
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)# Y( X) v" V! L" d: f+ [9 Y
  3. def onEvent (self,event,st):
    % Y2 v7 H( `: M1 Q
  4. id = st.getState()
    1 ?/ Y3 `4 j7 ]- S
  5. if id == CREATED : st.setState(STARTED)) I* o6 o' Z0 V# T* n. ?. }
  6. elif id == COMPLETED: pass
    6 [' E1 U* L+ Y7 U% |0 t$ @5 J
  7. elif id == STARTED : check(st)
    , o/ V) r9 ]) G, }
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)2 X5 M  U3 Z6 T7 ^1 i2 x" Z1 y
  2. QUEST.addStartNpc(7056)
Скопировать код

0 m- x$ V. ]5 W, r# Q. E# y5 D7 R# f$ [7 R/ o6 E+ R0 N
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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