Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude( v1 E9 k) ~& u/ Z
Сборка        L2j3 U" v4 D2 G# M- [# D
Пример основан на сборке L2J.. [5 T& T. _. y- l

% L) L* `, `  \" H- D/ w* y$ |. h$ FПервое что нужно сделать, это добавить необходимые Java классы в квест./ {# q7 [/ b6 j' T  C' q0 n! Q

  1. 1 n: v2 {( F; F
  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>/ q0 A( c: g$ z

  3. 8 y  R& P) y" Y: _# F. ~5 l
  4. </div>
Скопировать код
  1. import sys
    # e1 p" {+ d! L: x5 ]2 P( Q+ n
  2. from net.sf.l2j.gameserver.model.quest import State& D; }* [0 |9 D' o
  3. from net.sf.l2j.gameserver.model.quest import QuestState3 x' H4 B9 N! [% l' I$ z3 d
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 120825 ]5 n5 }! x' W. ^' W. h
  2. FANGS_ITEM_ID = 1859
    + [! b4 }$ n% d
  3. DROP_RATE = 5000009 O* q4 Y& Q/ I9 H
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    9 o: h  L6 `( e- M3 U$ Q8 |
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
; [1 l9 A' O2 p8 d- J
/ i$ S4 w, Q3 t. e+ O2 L' S
  1. def completed(st) :
    6 t* T) [, S+ i
  2. st.setState(COMPLETED), V) d8 d3 g5 F; J$ \) y/ p
  3. st.clearQuestDrops()+ v/ O- I& h) L. _0 `. u
  4. st.takeItems(FANGS_ITEM_ID,-1)6 M7 A9 o* ]  Z" M4 b
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    - Y9 j! q2 l: X+ O: n( B
  6. st.exitQuest(False)
    8 Q' I9 z# i  y+ }2 h7 N, i
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))' B, I5 T  k4 E$ G
) k1 z. h4 g" k4 R/ y+ u

. b, X! G8 @; U
# l- C* q9 d6 g( k2 V8 o
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):& s6 @* j9 |- c( x5 c4 B& c

  K- N' n- K& m8 }
  1. def check(st) :
    7 M% O* a3 J4 \2 o2 `4 P
  2. if getCount(st) >= 4 :! q$ M5 ?0 m0 A* U) _# \- n
  3. completed(st)7 e( t7 z" Y3 h( \4 Q, v
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
  m( v$ Z9 a$ ^+ K; E) Y2 R
! e3 d8 d+ a( B; w
  1. class Quest (JQuest):' m2 o2 H8 N$ W1 Q
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    $ y& Z9 W" U7 \
  3. def onEvent (self,event,st):
    , L( v$ A% j8 B$ T! T6 i( q) V
  4. id = st.getState()# P7 _- v- _  K% m4 b
  5. if id == CREATED : st.setState(STARTED)
    9 [+ J4 j( |3 P( b! l1 p
  6. elif id == COMPLETED: pass
    ! v5 m1 E$ {( Q9 y. P  U- B& `
  7. elif id == STARTED : check(st)
    ( c- |: Q* `1 L0 G0 L
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    7 y. r9 T9 F- i1 I9 _( ^9 ^! D
  2. QUEST.addStartNpc(7056)
Скопировать код
# t# C# d, _. B( R# ~0 J8 Y9 P, {
% {* V1 M; m0 t' E( v, F
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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