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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius 2 [8 f  W) I; e' i$ Q3 q
Следующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.
4 u; b( l4 f& L# b% p* i" W
% X3 p* H/ [/ G# E8 P
* S3 s( [. B9 j5 E
Иди и убей X монстров / Возвращение - награда.' h' c# v- n; `. N
Q00529_RegularBarrierMaintenance
5 O& \' M7 V) M# b' u4 J+ E: T& U- G, W
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.
: d9 r" K" z5 v# K' q0 E8 g  L& wQ00683_AdventOfKrofinSubspecies
% o* q7 G3 i. t) p' H1 n& M
  I- X3 M8 D: K) g1 k" [# GПоговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.9 s4 C) X" A& @  Y% J
Q10516_UnveiledFafurionTemple
4 |9 S4 \  T  h
1 d. I: |, t. w+ Y3 }1 v5 H% GУбейте X монстров, а также соберите X предметов / Возврат - награда.
5 p( y# h! f6 K; GQ10517_FafurionsMinions$ V$ V7 _0 q6 |2 \! H, I
# _; @) T, u: z0 _* F5 }
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.* [4 D7 X! C7 w
Q10529_IvoryTowersResearchFloatingSeaJournal, m6 u6 a3 w$ ~; O" c" y

3 i* y) b, X0 EИди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.
3 w7 E( n) f7 \Q10518_SucceedingThePriestess
: X. d( J* O, C( A' N* h4 R5 e
  B  Y; Z* G/ L! n+ lУчаствуйте в убийстве рейдбосса / Возврат - награда.
7 m+ T, S: d! nQ10519_контролирование вашей температуры
* }/ q7 X, q. q4 J; B8 k# m0 w2 ^9 Y6 g' y, M% q1 N
Поговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.$ t1 Z; h% e1 v
Q10533_OrfensAmbition
" ~1 p$ b" b* E+ {; X9 C7 q- w( x3 f" L2 [

! e* R1 H, b! ?* p$ ^4 h1 r6 n! d3 K* U! @+ a5 j& `  R
Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!
$ X* P8 O% _5 Z. P+ G

7 _8 r& M. j: W( Q2 y8 y9 ~Шаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".. o5 h3 F: ~+ }& ?) x7 m! s8 Y

" ^3 ~* X% E7 y- n1 NШаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".
& k) I* P9 n) a0 e) g  q: H
2 L6 }  }3 T# s# n( a* OШаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".
7 }0 h5 s2 _5 A, Y+ }* J/ o2 B/ B( x8 ]5 K8 C3 [
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
$ ~6 U& H& T3 f- A0 m8 }8 A4 B5 G9 Y5 d) Q2 b0 p
Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.7 j- t; _4 h) T. `# l7 u
  |* O+ _& E% ^' Y# c: T
Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".
1 F; e7 X# w* l* d6 p% E! J( {. W, Q# y5 Y3 o6 X, u
Если я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.0 P# i5 U- i4 t& s
7 q+ P" p% {$ ^8 n( D0 s) ^' Z
Шаг 2:
8 u, f* A' a) Z( k- `: g2 z. f; L
- K" z. E9 j  ?: W/ @Следующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:% M+ \% E8 ~$ z9 X% j: C' C

* u% J4 z  S2 A  m$ d1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. 9 X) J# ^, ?, E9 M" R- |
Например:. p- A& ^: Q9 j* l6 H

! B9 L8 E. l" T( s' Q4 \/ I
  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>;
    ) f1 ]+ f/ D# `
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:
+ A* D! ]0 L8 F5 u+ m0 l) Q
: Q) G; ^' `9 ~- e/ ~
  1. /**
    % U5 `, c2 V; D% U( K4 g- v
  2. * @author NosBit
    , S* U' \' k- E: _
  3. */. u7 @+ ~) C" s0 U! P& t
  4. public class QuestMasterHandler
    ! w0 K! J8 d; m1 g
  5. {
    5 X4 r; i9 q" b& R' T+ A
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());  Y) f$ ~5 j  N9 f) _
  7.         % R% h% C9 m5 \; ^! m% P$ e& `
  8.         private static final Class<?>[] QUESTS =7 ]7 E: `) |9 K* M1 ~) a
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.
! V, S# p- I- M8 `' _2 s, ~& `1 N
( A: M! D, I$ \% h7 m9 V+ ?" K- j# c; n! ?2 ]$ p- [% Q0 t# u: _
Шаг 3:) ]# b6 l* r& f* H, {" j

* ?0 |* b/ _/ i% O+ @0 t7 p# C9 ?Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д. # l' i1 F  h( E  _
Давайте разберем все поля на основе примера:
- j( B5 p; e% h' ?8 A2 U
$ W) C8 E/ C* H5 F
  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_end0 ?  I' I: a5 ]/ c5 u- \( e- M+ W0 z
Скопировать код
Поля данных:/ u" m2 c( Q2 g/ c, `/ D/ R

  z' D5 y) d/ c& I& U! ]Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. ' r0 q* J" R7 G0 u5 v5 L& x
Пример соодержания
. p) _) U4 n. OВот описание структуры строки:
5 U8 V9 z# C4 J8 g. Q$ q; Y, ~8 o
  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
Скопировать код
Давайте разберем все поля на основе примера:8 v0 z! r! g9 A1 R4 X
, G+ M7 E3 A6 ~; S  l
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.0 |0 l1 J+ b8 M7 z& P- e
6 G, h0 {5 e2 V4 `8 l

/ P" U8 w1 m+ K
0 Q* A$ t1 Q5 {0 }" I5 j( v
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов./ K+ I. Z4 W. ~; |1 j1 u

  M: |6 Q! n. l% V' [' @/ X: dШаг 4
5 ?# d, q, B: B4 k1 f9 r, }Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:
$ r* S9 U2 p5 m$ ]# tПример добавления нового квеста:
5 i0 x. Q4 f+ {: e$ \7 x2 F
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">
    ( n  h& T1 Q) g# r. \
  2.     <locations>
    3 ^% q( S) j+ G. ]( Y, u
  3.         <param name="startLocationId">2001</param>
    % A  }5 D3 ]0 u+ Q! E; c0 Q
  4.         <param name="endLocationId">2002</param>
    0 ?& {/ S+ Q5 b0 Q
  5.         <param name="questLocationId">2003</param>1 u6 p$ \! f. o7 L# v
  6.     </locations>
    6 F1 w* c# @$ R4 I' U  S
  7.     <conditions>
    # F! p9 j  d! a! U7 ^5 R
  8.         <param name="preQuestId">20000</param>, @5 t1 f9 s3 I- x7 A% }* a
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->
    + M  \; w/ f/ P' M, l
  10.     </conditions>
    : o8 b: l' N8 T* S& d( S
  11.     <rewards>
    . V$ U8 _2 o5 v6 y0 d: \, H
  12.         <param name="rewardLevel">50</param>
    7 a8 g$ p4 t2 B3 L0 C
  13.         <param name="rewardSp">5000</param>
    9 _/ ~. l8 o" U7 r$ D1 ^# h
  14.         <param name="rewardItemId">57</param> <!-- Adena -->9 h) f! B2 ^; B
  15.         <param name="rewardItemCount">10000</param>
    6 G, _! X& J9 p0 q/ k) ^
  16.     </rewards>0 X' z$ b; D$ ^
  17.     <goals>
    ! I! f0 c0 B9 p
  18.         <param name="goalCount">10</param>
    7 q# ~7 @" c- d& a; w# d$ |2 _
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>
    $ U- F- E% O# s; R  E& C
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->
    $ f% ^# ^8 l. S3 G! t8 A/ t
  21.         <param name="goalItemCount">1</param>6 X9 f' P3 z: I6 U; R# c% j
  22.     </goals>
      g5 w* ]4 u/ K
  23. </quest>
    $ n0 k3 r* e  P2 d$ e5 _. G
Скопировать код
Описание структуры:1 V7 ^: X  p9 e; k3 }
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.
- F8 ^) _3 t3 r& w. p1 P  }" |! L
% f) @) K! v! M% f5 R6 @6 KШаг 5
$ f! G8 n+ u* k! {Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:
/ h7 T, e2 Y6 T' ?# i1 _2 `Структура данных, M* {& @" f+ L  W
Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:
' q! k. c- Z" O. O( U( h5 a
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end
    0 X# m% U6 y. l) }& W1 J0 f, h: S
Скопировать код
Разъяснение полей:
: v) ?* D! J* o: ]; x# t2 l) m) t4 I8 B
7 k8 I3 p! K9 ^( M' \7 M' {8 [
Что можно изменить:

1 h7 p! z4 x0 J7 Z0 B/ L. q- OФайл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:
' E* t" G/ ?$ d$ c3 w5 E1 ?: ]4 ?, _2 _
Этот файл определяет основной функционал и настройки для конкретного квеста в игре.5 u# l! U2 U) n5 {7 Z/ E% ?
. n( W4 Z) a) G: G5 ?4 o# o* A

: ]# J2 q  n2 o7 A$ P' p$ n0 Z4 \8 l" V% o2 ?( F# f
& z& U" G! r/ P& B! f

9 n" }$ `6 k: Y* Y1 k  f+ {
2 v! k% H" J- H' R' b
# O% Z: ?7 m* m5 c, }, k6 K& t) v& i$ Z" G8 ]( D& R4 f$ ?
  ]5 x' G& F1 J/ x8 H
' B9 s1 C/ p$ y9 h





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