Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude' I4 h+ v2 {- K0 f
Сборка        L2j
7 d5 I: A0 [$ D3 j$ RПример основан на сборке L2J.# N5 B. G0 m* V0 j6 O) n
( l$ s0 H: f3 _5 }; j, _3 U
Первое что нужно сделать, это добавить необходимые Java классы в квест.2 m. Q3 n5 q' H) l" H

  1. . e! S- a5 J' R( R6 r+ ?
  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>$ M0 y7 j2 z6 P" d. j4 k
  3. 1 @0 Y9 O* P, c6 F
  4. </div>
Скопировать код
  1. import sys
    % s+ j) b' J9 h$ E. C
  2. from net.sf.l2j.gameserver.model.quest import State
    , S1 U; ^' j+ M& B
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    # s3 O7 L" I( O" k: Q7 P
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    $ t, ^4 g* j; s# C% q0 p$ a
  2. FANGS_ITEM_ID = 18598 E: L' H- U- P
  3. DROP_RATE = 500000
    & L$ s5 d/ n& C( p! N& i. S4 k
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :2 w% @( \! i4 c& H7 K
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
4 L& q5 P1 K$ N6 _7 N
$ N8 I6 ]8 |$ N$ h5 W, w2 G
  1. def completed(st) :
    $ a" J8 \( f9 L* \( o/ ~
  2. st.setState(COMPLETED)
    * p; {7 z1 K  I( F0 m+ h) t' C
  3. st.clearQuestDrops()* z2 w5 g! \+ P" |: w$ o
  4. st.takeItems(FANGS_ITEM_ID,-1)) J/ X& s5 m6 l+ R. k- x
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)( ?, g  M8 E/ O
  6. st.exitQuest(False)
    5 @8 R& g2 E- c' l' Y" _$ \
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
9 E3 b1 a% i+ S$ }7 }
0 d; z  d( I' f0 l1 F. l
( M0 U4 z6 G( R  L' \( I; H
/ g0 m3 ~3 s, P
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
1 l: r$ ^6 G+ |( d+ `
% u4 ~2 o6 G) e3 h8 C+ B
  1. def check(st) :) c* k7 k8 S0 A$ y
  2. if getCount(st) >= 4 :6 B9 K) c$ p! l1 V0 S. f% f8 \
  3. completed(st)3 M" Y- j6 E7 n9 o
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
/ ?, @' {/ j7 [, v* H2 ^) z4 F% d  h
  1. class Quest (JQuest):0 }' R" H/ W+ T& T$ O8 B1 X) _. f8 _7 c
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    ; k3 c( T8 f' d
  3. def onEvent (self,event,st):
    . H' j: x% i1 T, k0 x
  4. id = st.getState()- X" w9 q5 ~* ~4 t1 t( K
  5. if id == CREATED : st.setState(STARTED): \3 b8 I' d. a) n" _
  6. elif id == COMPLETED: pass+ }6 g4 ]4 Q9 e/ F" P- S  Y- M5 _5 ?
  7. elif id == STARTED : check(st)
    % _( u+ }% j$ K1 w, J$ x- x& r) C
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    / l8 ^  w9 @9 W, T% L
  2. QUEST.addStartNpc(7056)
Скопировать код

6 N& b6 w; |! Y' O( s% y
9 `# v6 `/ J$ B# ^$ o
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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