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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius
" K. p8 d1 s& h" M# rСледующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.
0 H: d, _1 [! f7 W, d/ n8 c3 r) Q/ d+ q3 g/ w, Y" J4 M
+ }2 P8 t0 C" {
Иди и убей X монстров / Возвращение - награда.
0 M- X3 M! f7 q) i  lQ00529_RegularBarrierMaintenance/ w0 X( k2 c! @

4 x* S: t  G9 ~# ~8 V& l( C0 @Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.
& f8 V4 x* Y4 zQ00683_AdventOfKrofinSubspecies' N/ R+ N3 j$ v8 K9 H, n

' F: K# T+ E/ H! cПоговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.
% m, [$ K9 S( L2 @! Q8 K- k& Q$ w* \3 |Q10516_UnveiledFafurionTemple# Y' J) u4 ^+ f) m9 A
8 R1 m1 T$ R  x+ d# h% A
Убейте X монстров, а также соберите X предметов / Возврат - награда.
. S0 ?- }6 b7 V5 a3 O& u" {Q10517_FafurionsMinions9 Y+ W# f) y" u) J

1 {5 C9 Y1 O% Z  S2 Q! H& {0 ZИди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.
& E& Y- g. Y) K  YQ10529_IvoryTowersResearchFloatingSeaJournal' B$ D# y5 q+ f) m6 a! c# r
9 @4 v! H, Y0 Z. A- m% r8 ^, R$ X
Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.3 r% }4 {/ P+ C. d: x. A2 [; P' b
Q10518_SucceedingThePriestess
0 E5 r6 ]" _5 r- n) D) b8 \" L' F% f: M  M
Участвуйте в убийстве рейдбосса / Возврат - награда.
7 ?3 h; q/ k: s) z: JQ10519_контролирование вашей температуры4 ^% _0 ^$ E/ x' ]

0 ^& B9 r' o" z- C8 H, Q/ VПоговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.4 `8 ^  O/ s) N
Q10533_OrfensAmbition- |( m+ [2 Y: ]# q; u: j* P
" I0 N4 y/ l; x" e8 e( U* Z* c6 a
- c7 D$ I5 [) j. Q' ^

/ E, h' E9 s3 M2 r8 {Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!

8 \) l* L: T' D4 c2 B4 M$ r, {2 g! N4 i# |5 `/ k6 H5 ^7 _
Шаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".
  g! A5 n+ ~& ]; @2 w* f- z
0 r+ ~& a) T( G2 DШаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".
& m% E6 ?" T1 q' }4 }! X, g6 g* ]) s2 W" j
Шаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".' y: E; o; r. _1 v
* e" c. [* Y& r0 }/ m7 A
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.# W! s1 J! h( U/ C4 y. C, j/ j

2 p+ \9 F9 c; R% O2 PШаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.
- R; \: w) [) M) ?! f; {# x0 O# y3 E0 x) B) s
Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".
7 V3 E! m! ]" Q5 ]1 A
( z/ t; G6 W9 i3 c6 j6 E, A1 MЕсли я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.' @$ H6 h5 F# q: v# S$ c+ G

, ~  h; j  q0 l1 mШаг 2:, S9 @2 K+ {6 U/ g" S

' U; j: `4 K$ L, g, K3 r# DСледующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:. ^- g9 u/ M/ x" r
* `6 ^( x$ z4 J' u3 w" h: Y( s  l
1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест.
  E( f/ J6 p1 d& S+ x0 D! rНапример:$ B% x# T- n4 q- P, W
  s" j1 \" l" T3 e1 y, z
  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>;
    9 S5 N; B* `* b% w
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:* O; |# s* D# K7 `( [
) M) |( |) T9 @2 U4 H+ h0 f
  1. /**
    9 k* m& w" _% K" N& r
  2. * @author NosBit
    - ]1 R# M" w& [1 A" X( F7 h2 w
  3. */# s9 R' V# ^, z/ N+ A
  4. public class QuestMasterHandler# g) p8 H% O; @8 X
  5. {
    , @9 h. O0 E8 r  b; s: e
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());/ m$ Q) t) ]7 c" A9 q7 D
  7.         
    9 Q6 s4 c9 `* V5 v
  8.         private static final Class<?>[] QUESTS =- I5 O& V3 u' R1 A1 a
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.
" T! L2 n3 @8 K$ u( {9 E8 t) c1 J) L- A6 y
* t4 M; ^$ m7 O( `; @& Q) M- f
Шаг 3:
. T& h6 Y8 {; h2 l) o8 @  x% \" M
% u7 b% g" P) |! F- U- @8 {Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д.
% B6 F" n) D' WДавайте разберем все поля на основе примера:9 z- Y" Q7 Q! y" E  `4 V* q
' v5 K( j2 p+ P& y
  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_end: s9 U* I( V/ `/ B9 T" i
Скопировать код
Поля данных:- p- x% J, e! M
# ]/ M% P7 l5 B
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. : F9 @, w; k" ~) X
Пример соодержания
% b' Y+ i% j1 X5 vВот описание структуры строки:
9 s4 J5 r  c  l2 H; @# ~1 ~! Y
  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
Скопировать код
Давайте разберем все поля на основе примера:
* X3 m' e# t; p& X1 Y9 Q5 }% I- b4 Q; C: ]
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.% ~8 o8 H. Q1 h% H5 C2 @# U

. K8 ]) `- J5 j% |+ E+ S, I4 G
/ I7 I, N3 |& B, Z

# Z  T& h) O* {7 U! Q+ H# \& QСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
: L& F. ?- ]! _# F, [; O1 s9 k& ~5 y* C4 ^: `5 Q; ]
Шаг 40 R. \: T: E. P: G
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:
- i8 _4 t" n6 i0 q0 {9 b4 KПример добавления нового квеста:% h% d. F; `4 @0 ~0 Z7 B5 @  o
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">0 M' |- B/ _" M, N; Y% H
  2.     <locations>
    ) x$ C+ d: H6 n+ R% L8 H
  3.         <param name="startLocationId">2001</param>1 F8 k% {5 V% s( a2 {" H
  4.         <param name="endLocationId">2002</param>; L) B3 z5 F8 N4 i' l
  5.         <param name="questLocationId">2003</param>
    $ _" F- ^( I# Q2 u$ G/ a( r
  6.     </locations>
    ; i8 V6 L8 ^; k* O
  7.     <conditions>* j1 Q7 G- N7 i  [
  8.         <param name="preQuestId">20000</param>) \$ z0 m1 Y; o. v8 u& B
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->3 ]7 m) L2 V5 f/ W) g) ]
  10.     </conditions>- V. [( W$ C5 Y/ W* ]
  11.     <rewards>
    ; {7 o( X2 w; v2 w1 |# z: r
  12.         <param name="rewardLevel">50</param>: j1 d6 s$ x" \+ p
  13.         <param name="rewardSp">5000</param>7 n/ D8 p# M$ k, Z
  14.         <param name="rewardItemId">57</param> <!-- Adena -->
    ' \0 M+ e/ L* e* n5 d$ q
  15.         <param name="rewardItemCount">10000</param>
    1 @: Z, H( ]! \* _/ L- C
  16.     </rewards>
    ) L: e' I+ Z% j/ G+ L; W
  17.     <goals>
    ( d5 u9 c2 B) r4 |, H. r; ^, A9 {
  18.         <param name="goalCount">10</param>$ r, F5 @" x) i/ z& r2 F* P% A2 M
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>  b# T: f$ k5 j2 f) y$ `
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->
    / K* v8 q; R' ^* ~: @
  21.         <param name="goalItemCount">1</param>
    . d- Q6 l7 @$ O& j  h, q, z
  22.     </goals>
    " D; W! O9 O/ O3 m/ _% t/ j
  23. </quest>
    ) T" X; p/ @0 ?% Z" P) _- j
Скопировать код
Описание структуры:
( i$ G+ o' l( V& n) n. LПосле того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.* J6 I* I+ `( K% U

" Y, a# a! N- J) Y) \5 |4 nШаг 5
( ^5 m- W( Q8 kФайл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:( @# K9 o/ a! k7 d
Структура данных" N' X  x$ }+ ^
Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:) V7 l% B% C+ M9 S
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end, |; y4 O, _0 t5 s
Скопировать код
Разъяснение полей:
1 a6 R4 ^# n- O
6 O5 O) W* X! w
2 I* m& P( J* W! {Что можно изменить:
& J! o; E: B! \1 v9 T
Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:
3 f, P( I0 X' R7 P% r* |' K1 i8 f
' J5 _1 K2 e2 YЭтот файл определяет основной функционал и настройки для конкретного квеста в игре.6 v- k7 f/ g$ X3 a# F
" \. z/ }4 g0 [: U9 h6 o# Z1 d

) O2 n6 P. g+ n; n" v
" c2 U( K% W% A% c' I0 D" ~3 ?' ~
; y! B$ m* t: I1 y. Z! U, Y9 v7 i9 ?0 V- u
5 p4 [' [+ k  j

; S  u+ p2 ]1 Q5 I% n3 a7 a% G: B' r+ j# W' ^/ h" Y0 E

8 Q' ^7 h5 s' o+ u0 X/ T) F. X2 q: N& a( k' c6 i





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