Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude; s( L  K* [) Z& w8 A) r
Сборка        L2j
- a9 F1 h6 M8 T$ I! B9 ~/ pПример основан на сборке L2J.
. G% n4 a$ G0 P; ]7 {( ?
6 y+ W7 o0 x$ h8 a* dПервое что нужно сделать, это добавить необходимые Java классы в квест." r# H8 s( `( n

  1. ' e/ E, d8 e' D* W; \/ W" C
  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>
    - D- O5 N* V( L+ m" @5 P
  3. / }$ f  s8 U. {( c
  4. </div>
Скопировать код
  1. import sys2 r  b$ ]/ @# U8 L- m. j3 k/ O
  2. from net.sf.l2j.gameserver.model.quest import State* o' ~8 a% B, v1 K
  3. from net.sf.l2j.gameserver.model.quest import QuestState; y) m, H, M$ `# S9 S, A+ D
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    ; |, [( y) ^2 K6 h
  2. FANGS_ITEM_ID = 1859
    1 E1 C4 _$ L0 J. r
  3. DROP_RATE = 500000
    , c3 L3 v- I, w
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    8 F2 |4 T; k1 e4 o/ ^6 H
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
7 I, e& M# g6 H& v8 h5 _
1 x0 z- ^, O# h7 m( |% A2 U
  1. def completed(st) :* U$ v8 S& P! p: v3 @
  2. st.setState(COMPLETED)
    6 T9 p0 R/ Q: K6 p8 N; e9 P
  3. st.clearQuestDrops()
    / m8 J- K+ K1 C* E/ F) E8 e
  4. st.takeItems(FANGS_ITEM_ID,-1)8 L- D% I" N, y" L3 Y
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    ) o1 M% r  U. {" G, h
  6. st.exitQuest(False)0 {! G* q( A( q0 z& D0 b4 a
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))4 D, E: O# j2 ~2 S9 y' s! v) p

# @7 q3 ]9 G. O- u) p- F9 V/ g; p, o8 |: Z" x

  m6 B$ C7 l! {# CИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):" {) T- j2 D) k# d

# L9 g7 I7 n2 H  U- E) J8 B% ~9 g+ E
  1. def check(st) :& E/ q1 Z5 M" d: c
  2. if getCount(st) >= 4 :* ^; s4 W: m) O2 x
  3. completed(st)
    ! l; }/ _$ ]( H5 b) N+ z" }. |
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
6 ~) O9 P  e2 u. I
0 Y/ j) ?5 P' r
  1. class Quest (JQuest):% z; W  I7 C5 {
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    , c4 H% u( w6 F- \% _
  3. def onEvent (self,event,st):
    $ W% Q- D. _0 p, _
  4. id = st.getState()8 E- Y( Z. F( b8 r) ^6 i
  5. if id == CREATED : st.setState(STARTED)
    - d$ P/ {4 `+ w+ w- c. k  |
  6. elif id == COMPLETED: pass
    3 G5 m, U9 }. d) V! x
  7. elif id == STARTED : check(st)0 s8 R2 E. N, I+ M" V/ J, p
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)( Q# V) I$ s4 I: {9 M. k
  2. QUEST.addStartNpc(7056)
Скопировать код
( S1 @+ w6 R. _1 X

+ n& m0 o/ m" R; Y& ?
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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