Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
* L( }; E7 l! }9 eСборка        L2j
. ^& Z3 n7 B& N* f0 IПример основан на сборке L2J.
4 p  \$ ^( P# G$ }5 \4 o9 V+ W) R. E7 y2 q. P$ K0 N
Первое что нужно сделать, это добавить необходимые Java классы в квест.- e4 c& V; U2 d+ j4 s* H+ i

  1. ( X0 Q  B4 I7 s, u
  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>
    9 D( J' \/ J$ |" u
  3. - B6 g9 C0 g8 K) x. c" ^! t
  4. </div>
Скопировать код
  1. import sys
    * i% ~, G# Q' s
  2. from net.sf.l2j.gameserver.model.quest import State5 M$ l/ e  A2 k7 L2 s
  3. from net.sf.l2j.gameserver.model.quest import QuestState9 z) X- D3 Q& e/ T! x2 {
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120820 \( j& F* y; u+ e/ t/ F( a2 q3 D5 ^5 {
  2. FANGS_ITEM_ID = 1859
    3 j9 C, ?" B' l& z
  3. DROP_RATE = 500000
    + F5 F- D  A7 Y+ a
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    - c1 |5 |! o3 L9 G1 K( Q! X
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):2 U! g* `4 \3 E

- d3 A" P' y# D( m% T
  1. def completed(st) :
    ' c4 J3 W$ T  h& l7 v- u) R; W
  2. st.setState(COMPLETED)
    4 x6 E2 p9 }' n: F; D1 Z0 Q
  3. st.clearQuestDrops()# j; c+ M' M" p& I5 |- g
  4. st.takeItems(FANGS_ITEM_ID,-1)+ _# _8 I0 o. g6 _  Y
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)  a4 `* v& m- \/ ]( _" D5 g
  6. st.exitQuest(False)
    9 V- t1 t4 x5 _8 I
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
7 t0 @( Z# L- g8 B8 _! W  v# X+ q& [
5 t' n0 h( d2 d' l* f% X
/ a" t% s& |. h

+ [( Z# R! c) i4 [И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):# l7 u# y6 @0 z  \
; Y: ~- A( B' \3 |. I2 N$ d
  1. def check(st) :
    6 }4 W, D3 x9 u$ y' f
  2. if getCount(st) >= 4 :
      p; M; L3 F. \8 v' e; t
  3. completed(st)
    6 u% X. o. v/ l" g9 D3 |$ |( \
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.! E$ i2 Z) h6 @9 ?' L, W
* s& Y$ h6 u: d* W' o3 B6 u% w
  1. class Quest (JQuest):
    $ u1 o& n: ^- l' R. Q0 ^1 C; X
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    ( Q# J8 K( P& w/ p6 s# ]( t7 D
  3. def onEvent (self,event,st):
    ) P( z, n2 V# u
  4. id = st.getState()3 K/ J) V. o8 q# a( I* y5 h% s
  5. if id == CREATED : st.setState(STARTED)
    7 k/ |/ D0 H6 K3 O7 \
  6. elif id == COMPLETED: pass- x2 m+ a5 }* Q
  7. elif id == STARTED : check(st)1 ]* P/ i, `% w- Q# B* w
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    , K- X& ^( W5 u& W! c! l0 z
  2. QUEST.addStartNpc(7056)
Скопировать код
7 G0 D* C' J; Y) c" B' o% T1 x/ X

& t$ p8 l4 C0 b& ?" S! h8 {$ b/ n
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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