artace.ru - творческий сектор

Название: Создание квестов L2j_Mobius [Версия для печати]

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius
0 t' t! k5 d# O; i& Q  Z$ |7 @2 hСледующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.
/ j+ n) X6 a  {# W4 I8 }. X/ i# `, H  e. V# L! H8 z' e
: N" N) {- m- V' v. |: {
Иди и убей X монстров / Возвращение - награда.0 d3 X( T; p% `9 n0 @# ?7 P
Q00529_RegularBarrierMaintenance( S5 @5 v7 e5 m0 i4 }

1 T; V" G7 x' U7 {3 Y1 A# RПолучите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.
& I, {4 i7 K. T! }Q00683_AdventOfKrofinSubspecies$ t1 T+ S% _/ T1 e2 y) L

: M- l' J/ b. [1 LПоговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.
5 D5 U9 _  z7 T, P: C. G" D. d# hQ10516_UnveiledFafurionTemple
; U4 z  d+ R  l7 [3 t' c5 [! }5 s' ]
) k' L+ I6 @% }Убейте X монстров, а также соберите X предметов / Возврат - награда.) }) e$ Z, h4 C! z9 ]+ D1 A
Q10517_FafurionsMinions8 H7 F) V$ c; ^; m; M, |
. C* ^( v1 w2 O$ N$ @0 T  G& Y
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.
2 p1 t) F7 d& l0 `: d- OQ10529_IvoryTowersResearchFloatingSeaJournal8 e: d) Z3 D0 r: T2 m5 g

' D7 s; w! j4 p3 E1 \Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.
$ U% L5 K  D& `) fQ10518_SucceedingThePriestess. X8 A! I, Z- `! \/ @

% j5 M7 p7 l1 Y% y( ]  z: oУчаствуйте в убийстве рейдбосса / Возврат - награда.9 U$ n& f% t* y
Q10519_контролирование вашей температуры9 S  f/ S$ Q# I* c9 [

7 N$ O7 c9 H& J8 sПоговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.' D0 i* S. y& q
Q10533_OrfensAmbition2 j8 N. v9 v: O" Y$ I. ?

& ?- w$ R& g6 o& T+ Q* c, R: e: p6 e; D% T' `5 @

! _5 h* t9 Y: j, _; DРуководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!

7 w7 K& ?* ~* A& m$ [- L$ h% a  a  R7 Z0 e& a" g+ {$ w: ]
Шаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".+ m" L" J' `$ [  C: a; p; D4 z

5 {3 a5 |3 H8 ZШаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".
+ `$ x. b( {' u8 U3 N
' X# r5 R8 I+ X6 K1 M% QШаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".* C6 p8 o1 U; s5 g4 h# U
" ^( q& o4 \* _, V: k/ ]
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.: G' ^' ~8 v) w* k1 m
: N4 Y8 F% l9 S0 H+ K0 ?
Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.3 b% n  O; m! j, ^$ s

, z4 b! l3 ~: t1 v$ RШаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".+ Y4 t8 S# g' b# B
, I( W/ k8 U$ M
Если я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.
% B0 N5 F/ U) F' Z0 ~- c& e: U. I5 l
Шаг 2:
( z% q: J- ?9 q$ w3 f( O; u' b, A' M' @
Следующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:! l3 l) G" N) K: M+ f6 l
2 [8 O; t( C0 |. w; J% M: \9 W" c0 b
1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест.
7 T2 k) B' @/ P# I' `( C( f  H) CНапример:
% T& ]- v6 H: |9 q: P; `3 y6 q# S0 g
, R! R# R2 D2 u. {5 _* h  p
  1. import quests.<span style="background-color: rgb(255, 255, 255);">Q98765_NewQuest</span>.<span style="background-color: rgb(255, 255, 255);">Q98765_NewQuest</span>;5 j# \& F5 j' t0 ~3 ]6 }6 m( B+ x
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:
8 i; n0 V$ p; P$ n0 Q# l* y
" Y" t  y! Y+ J/ g0 n* }
  1. /**0 e; a' ^  {8 v- R& a5 C
  2. * @author NosBit- \8 \, I. v  [- M" K
  3. */
    8 q- D" c1 Q+ J, n; B
  4. public class QuestMasterHandler
    : ?. p& I1 Q/ o: w
  5. {. r+ z! ?5 y( ^3 _  N$ H* R/ L
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());- O# W/ [6 g3 d2 g' ~; ^/ j" L
  7.         
    / x0 B' Y6 m% }* l) Z
  8.         private static final Class<?>[] QUESTS =
    ) Y" Y5 w& O6 b* `' A
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.
0 y" t8 |9 h' M* X/ w5 H( S; f5 l7 d3 w) S  ]) v

: U2 D  U! F6 n4 u. ZШаг 3:
6 u: N9 Z6 {* P5 x7 m; i
! b& B3 G) V9 d3 PФайл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д.
) [7 @% B: x  n4 g, AДавайте разберем все поля на основе примера:3 q2 B: Y9 T5 z/ P% O
4 A7 k6 I0 i- D& [9 ~
  1. quest_begin        tag=1        id=10811        level=1        title=[Узнай свой предел]        sub_name=[Бремя силы]        desc=[Если готовы, то еще раз поговорите с Рыцарем-Хранителем Евы Леонелом Хантером в Хейне.\n]        goal_id={}        goal_type={}        goal_num={}        target_loc={111382.0;220905.0;-3544.0}        add_target_locs={}        q_level={}        lvl_min=100        lvl_max=0        journal_disp=3        entity_name=[Рыцарь-Хранитель Евы Леонел Хантер]        get_item_in_quest=0        unk1=1        unk2=1        start_npc_id={33907}        start_npc_loc={111382.0;220905.0;-3544.0}        q_requirement=[Дворянин]        quest_intro=[Рыцарь-Хранитель Евы Леонел Хантер из Хейна посоветовал прийти к нему, если Вы желаете узнать предел Ваших возможностей...]        class_limit={}        have_item={}        clan_pet_quest=1        cleared_quest=1        mark_type=-1        category_id=0        priority_level=0        search_zoneid=121        iscategory=3        reward_id={45922;15625}        reward_num={1;0}        pre_level={0}        faction_id=0        faction_level_min=0        faction_level_max=0        quest_end9 g! i- m, i6 b
Скопировать код
Поля данных:- {* }2 I. D9 Z" T
2 L0 y$ `( o+ |% }
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. : F7 A5 o  d$ e- t8 R: e
Пример соодержания
8 I" R! p1 A) |Вот описание структуры строки:
; I6 ~/ e1 A5 ~8 H5 v/ d3 i$ p4 l
  1. questmark_begin        quest_id=10331        npc_id=32153        race_filter={0}        class_filter={0;10}        start_npc_loc={-118017.0;255965.0;-1320.0}        questmark_end
Скопировать код
Давайте разберем все поля на основе примера:5 L' B0 G* b( y# F% E0 o; B7 k
. H/ a' v- Q6 ]9 }; S# K: T
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.4 c5 Z0 ]9 h/ K9 ^; F8 m

, j  _6 N* Y$ D; o% ~6 s" f7 f1 }8 H! [2 M: ^
# ?) t- ^  w; \6 d$ e/ j
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.; v; p& ^# D) [

6 j# j8 c% \5 _" z# W; N) xШаг 4+ _. W7 ]! a1 f% Q+ b( G, e
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:
1 q6 E5 s+ S$ K; H8 T4 g" b3 iПример добавления нового квеста:
$ f% h( o9 \; b
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">
    " c  M+ i2 S; i3 F/ S& T
  2.     <locations>
    " c, q/ W2 ]% f+ n  M" O
  3.         <param name="startLocationId">2001</param>4 r( L6 o% J8 Y' D$ r
  4.         <param name="endLocationId">2002</param>
    9 M8 v; T5 `9 i1 M! G' ^4 A
  5.         <param name="questLocationId">2003</param>
      m( U$ \, t& h& W) N& P9 n
  6.     </locations>- i% t! v! n/ M& G" B2 y+ R
  7.     <conditions>
    2 B  e1 O! r; o& h; s8 N7 j6 g
  8.         <param name="preQuestId">20000</param>
    " B5 \3 j, X, G0 Y, ^. \
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->  V9 J- O0 m, i$ n. ^% {
  10.     </conditions>
    : r/ s# p  t! Q; Z* Y4 S
  11.     <rewards>) J0 i5 v5 s$ Y. i: e5 V( Z3 O
  12.         <param name="rewardLevel">50</param>; L0 O1 @7 v2 b8 E$ R
  13.         <param name="rewardSp">5000</param>5 \1 s8 z: y) N7 a# K0 H. q( }$ }: j
  14.         <param name="rewardItemId">57</param> <!-- Adena -->  t  t: t" N- Y& W/ k
  15.         <param name="rewardItemCount">10000</param>
    - m- W, V& N# y+ q/ B5 @% {: L- l
  16.     </rewards>  a9 k3 }2 P( T$ _: N  R: f* ]
  17.     <goals>
    $ [* }" e. q) C* h8 A4 n
  18.         <param name="goalCount">10</param>) E8 \/ b. ~" n6 |* v" g" h- @2 M- g
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>! V% T/ z8 |& ?% V  M+ [& s4 r* b% I
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->1 K6 e# }' C/ }& X. X
  21.         <param name="goalItemCount">1</param>. \8 A% K1 Z  _9 J& b
  22.     </goals>
    & o, i& R7 B/ Y
  23. </quest>7 `* \- G9 o' h5 N3 H
Скопировать код
Описание структуры:
$ A! }4 [4 p( U2 f1 lПосле того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.
2 i: j9 l3 ~: v. H8 p
: s1 ?! f# \0 A6 HШаг 5: h7 @" h2 o( b1 g: _
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:
3 ~' L- h: i* X; HСтруктура данных) |2 \' `) U3 Y$ e5 ?
Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:
5 L" ]0 z; X3 D' R, ?2 ]
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end
    / E9 ~' n, y  g) t  ^: _2 w# ?
Скопировать код
Разъяснение полей:2 m1 C$ Y2 i8 r, H# j

7 \$ s  \6 W: f& c" Y+ \4 S8 R0 _" t
4 [/ u' }% j2 V% rЧто можно изменить:

4 W! }+ f6 E% d4 x5 ?Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:. o, X% J, E" n
: T/ C/ d. s; G1 h$ m" T2 c
Этот файл определяет основной функционал и настройки для конкретного квеста в игре.
7 G0 N6 [. i) l+ M. C+ E- ?. k2 I- a- e9 X

  x; d7 y! j5 T
3 Y+ H/ H/ X% Y6 n$ j  ]! {3 ]" ^7 r( L+ \: n: b
  U0 E5 ~/ s3 }

: U) D- g$ n2 ?2 X8 T  w  a# i' N! u0 B+ y$ K
) J5 `3 C7 t8 a+ S. \
* t" F! J: m" `

- e2 e& n1 E+ c6 j: F  k




Добро пожаловать artace.ru - творческий сектор (https://www.artace.ru/) Powered by Discuz! X3.5