Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude; ], a  h6 y* S* M
Сборка        L2j
. D. M0 x9 E) W# ~Пример основан на сборке L2J.
' j: N& L) W2 X( @/ S. b5 Y9 A  v  H. ?2 o% w6 ]! x+ _$ P3 q
Первое что нужно сделать, это добавить необходимые Java классы в квест." ]0 |' t; {3 b4 ~9 B, p

  1. 7 ?. `" _* l1 U5 O! E3 H: P
  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>( e$ L3 a( ?4 j. U/ M% e

  3. - A( L( l' u2 R, K$ U9 l
  4. </div>
Скопировать код
  1. import sys
    % ^2 ?8 @5 {' V! l2 [" z/ e
  2. from net.sf.l2j.gameserver.model.quest import State3 C7 h1 B& l- [% S- K, A/ T9 s
  3. from net.sf.l2j.gameserver.model.quest import QuestState0 N. V- X* [; K. j* j8 h2 B  y
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082( W% g% H' r& x
  2. FANGS_ITEM_ID = 1859/ U9 p0 T# J2 z+ p6 i2 ^
  3. DROP_RATE = 500000& C2 c6 e! |- _. I7 u; T
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :% D% z9 s/ O2 B% R: m& z) x
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):; j; x5 t! l% C" x- l0 U

# @+ M% y" z' i. |0 m/ P  o6 D
  1. def completed(st) :3 {- N1 J" q  g* Y
  2. st.setState(COMPLETED)
    % x$ [( e8 |2 }8 t$ J
  3. st.clearQuestDrops()
    $ m( z* t, `! z  I) V3 e3 D. ^
  4. st.takeItems(FANGS_ITEM_ID,-1)
    7 l6 z0 a) a; a  C
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    1 ]3 g+ T5 U  \) v' {1 f) j
  6. st.exitQuest(False)
    . B& ~3 Z1 P$ R' d% |; a
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
7 ?+ q5 O8 Z8 Z# D) m  T- A& u/ w3 e7 H. ^" j  C: i* o" l' N& M/ A
2 [3 C9 d  [+ F( O

% }1 \2 t% A+ X& {4 ?+ b1 bИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):3 m+ D  i; H* n& o
% F0 y3 `7 B8 j5 ~5 Z4 z- U; v
  1. def check(st) :
    5 ]/ o( U& ^. r9 H: Q. e$ t8 X% O; C+ R
  2. if getCount(st) >= 4 :- ~: N9 X4 m& _% D7 }
  3. completed(st)" M2 A: R- u* F: N& Z
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал., r( j5 h. c7 `) p/ }
5 G; H9 C7 n+ i
  1. class Quest (JQuest):4 b6 b$ K( S4 i4 [1 A) ?. U6 m
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)4 o" A, F) P$ V( {- x
  3. def onEvent (self,event,st):0 i; V% x% R' ?1 g/ \
  4. id = st.getState()* g7 c: P" U7 E1 z
  5. if id == CREATED : st.setState(STARTED)
    ' d% d: t4 H) E4 i# l
  6. elif id == COMPLETED: pass
    0 o- E/ a. [* q+ j& p
  7. elif id == STARTED : check(st)+ w4 f3 E7 K6 U
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    0 K+ k; Y/ U* v: N9 O
  2. QUEST.addStartNpc(7056)
Скопировать код

0 U: v  K7 g. f2 ]) V; e/ u. s- F6 z. X: I
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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