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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius
$ D" z1 b! \# ~- {8 {, XСледующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.
: E4 T, o+ g0 {3 [: H
4 S) }  S" v. c: I
2 E& n6 y) c- M' z4 ?0 F9 Q3 w! q
Иди и убей X монстров / Возвращение - награда.- V% I6 ?, {" b2 n& E  F. V
Q00529_RegularBarrierMaintenance. I7 i9 p. t/ Q8 L& \, X

' f% n7 J  ^9 CПолучите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.
+ ]  y8 l8 \6 @Q00683_AdventOfKrofinSubspecies+ D6 k  A  M0 ~( ]' j0 [* s

& i! w) F" m" x5 m1 t0 _1 ?Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.
0 q! {6 ?* @. m2 @6 v8 nQ10516_UnveiledFafurionTemple0 z/ z6 l, D% o- X1 w

2 ?  p, r" z1 ^+ {1 Y3 `0 H! LУбейте X монстров, а также соберите X предметов / Возврат - награда.
& [" O) g* Q2 u7 p( `& {Q10517_FafurionsMinions
1 Y4 W7 d# e+ `* p7 T2 Q& ?- K3 \! V/ C* S- W, h2 ~
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.
2 r: S0 i7 _( q) RQ10529_IvoryTowersResearchFloatingSeaJournal
* o3 f. k) l, a
( I/ B$ ]  e5 V$ YИди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.
% q0 N! x# w$ S/ Z! Y, H* oQ10518_SucceedingThePriestess! I8 I# F8 u0 z+ m$ h: l( o
( D/ l$ P+ q3 z, N2 n$ _3 Z: d
Участвуйте в убийстве рейдбосса / Возврат - награда." C% Z; H4 o% T* C1 P
Q10519_контролирование вашей температуры0 ?/ Y& h8 l2 v4 Z0 g

# c7 p4 R, R) {4 ]Поговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.
0 C. F+ k7 L! Z  Q7 f9 d% Q; U: ?  WQ10533_OrfensAmbition9 U/ t& I$ G6 w
( r0 E$ N9 U5 s1 J9 X# R1 Z8 I  |( t
- r6 D' @1 n" M- E$ V
9 F  \: D. e, x( k$ m
Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!

% h: z- D) E% m9 F
8 y, ?6 Y- e+ zШаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".
( ?9 K* p" a. e$ u
- C7 C# Y$ e( J: B9 {! F( g2 W+ w7 tШаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".
6 e$ w' x+ d: f
" t' g2 a7 L3 g" c3 [( iШаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".  ^/ O0 }2 n* T# j" \

6 t/ H& b4 _) C# KСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.% w' Q- X# d" Y. i* x8 G

+ i& \. }* {" s: G5 }Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.
$ I- M( q2 U  m0 ^+ P4 I0 \
" I" i# o7 E3 ^. _& ]Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".; x( X6 N0 ?! ]- \

2 r4 @; w2 h( A7 r' W& sЕсли я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.  l, W# i5 @$ p2 q

- H6 o1 G6 \2 E  [Шаг 2:
% S0 Y$ _7 f  W) {
: K" V5 J: U  uСледующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:
. k1 l# E2 J; D5 G& B3 x0 }/ d9 ^% P7 g+ C1 G! {
1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест.
# p4 I( b/ j0 e6 ~5 SНапример:
, [/ o$ P9 w  S/ Z' h0 p4 |, x3 U$ X7 n$ M  L2 K3 l8 W
  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>;' C: ~7 ]4 K+ u- o3 }+ N
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:
  U3 C2 v/ U. [; X! v: `% X
4 T6 Z: x) T  Q( |
  1. /**6 e  B) A0 _+ j+ M' j
  2. * @author NosBit$ V, L! b2 a# Y( l4 D
  3. */
    ( E+ l$ g/ f4 ^2 r. B* l
  4. public class QuestMasterHandler
    $ ]* H! }1 |5 A
  5. {* H9 F( c9 \, j5 I4 ~
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());9 ~+ C& Y* t' R- l# x. J' e
  7.         
    ; D" r/ ^+ L3 J( V- O6 N. L
  8.         private static final Class<?>[] QUESTS =  u; Q7 U& e5 v* U+ O7 s  Z
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.
$ n2 V8 T/ G+ S# P9 E8 f7 k# `6 E/ [& q
) d2 m8 i  L) N2 r! [3 o! Y  H/ P
Шаг 3:
: {7 t0 Z$ {' A1 v7 J
6 W$ ~& O9 K6 X  H( \) Z& XФайл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д.
5 W, f" _. T2 G* W/ c; AДавайте разберем все поля на основе примера:
- [+ K( s" f4 o6 J# H, T3 q
8 c0 D, d% U$ x4 K
  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) Y5 a( N. f! S4 u! r( X
Скопировать код
Поля данных:" g& I9 F& G2 p6 N( Z- t

2 |2 ^3 C& r6 L% SФайл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. ! V. m& P4 G, I% j$ G3 L
Пример соодержания
7 m9 J& V* L9 J. S0 ]1 R$ ?: PВот описание структуры строки:
4 S6 Y6 z% J# W+ v. p, t  b3 M
  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
Скопировать код
Давайте разберем все поля на основе примера:" ^6 \! a- u( k' U
4 u% z& j- G% r- |; l
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.
. f3 X3 h( o- [# t* y
  A1 L8 l, I) P" H) u7 r& J5 ?: a  e5 D3 S
; F' I' |3 {) K. C
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.2 m: c  j6 C9 M: o

. \3 Q7 z! q& OШаг 4
9 y- B0 b& D, iДля того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:
/ J6 a! C; J7 l- L# k: y$ tПример добавления нового квеста:" S0 e/ u' ^- ?$ {1 F$ Z: S% f5 Y
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">
    8 o3 l" B% p3 U' d( b
  2.     <locations>
    & L& n: o6 i( z" z; A# X( \; C/ K
  3.         <param name="startLocationId">2001</param>* A, O7 _# T* @4 {$ I5 B0 \0 m: N
  4.         <param name="endLocationId">2002</param>
    . p% c( Z6 q9 C! H
  5.         <param name="questLocationId">2003</param>
    6 d) M  y0 f$ Y6 Q* t1 W
  6.     </locations>
    2 e  v) u. {# ^
  7.     <conditions>$ h, l4 r2 z/ D3 z9 \
  8.         <param name="preQuestId">20000</param>- R3 F2 r  Y0 f2 Z5 M
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->
    6 ~$ P3 f+ e9 z) l0 v4 i+ J
  10.     </conditions>
    , c! Y7 Q* q; G  ~; K3 p
  11.     <rewards># N% ^" q% F2 x* k2 O. \! w, ^1 w
  12.         <param name="rewardLevel">50</param>
    % `  c1 S% |+ e, i
  13.         <param name="rewardSp">5000</param>
    + y" {* |: _( h0 |
  14.         <param name="rewardItemId">57</param> <!-- Adena -->
    ! R3 [8 }  i, V  R$ f1 X. P9 T
  15.         <param name="rewardItemCount">10000</param>
    ' F* X: ]- a# @
  16.     </rewards>! p! L# ]2 T( J0 F
  17.     <goals>4 `2 h% U; y9 P; _4 s
  18.         <param name="goalCount">10</param>- W9 ~% ~' |1 W1 o( k
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>2 Y" t/ C; ?$ m
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->
    & S# x" l" b* B
  21.         <param name="goalItemCount">1</param>
    ; P4 s2 e; ?# m4 L: Z0 y
  22.     </goals>
    - [9 O9 J: @) D$ e( u
  23. </quest>
    ( T( C. O# }% L! m( z8 G! F
Скопировать код
Описание структуры:
) ?6 ]( l- l3 M% E8 |: PПосле того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.: K- ^8 Y1 I% T2 ?0 q

- z3 A/ N: p# W+ X  c/ FШаг 5/ i3 S9 M4 T9 C& D* b
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:
, y( I1 s) u  z" X4 y4 `. L9 \Структура данных
1 b+ K% {: r+ AПример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:
* f+ t* Z" H7 J! r5 |4 ~, T/ h, Q! v
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end
    0 P$ I& s) [2 j" M0 c
Скопировать код
Разъяснение полей:9 f/ n# t8 N! c3 ^  {* u  z9 \. R

" x! V  r4 E: [3 d, i! F. m8 S9 x: O4 v1 ~- {6 l
Что можно изменить:

3 ]% ?2 q4 Q9 A- @8 Z* mФайл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:' t/ `1 O( J3 m* H7 a

" s  v3 m0 P! n/ _$ G+ MЭтот файл определяет основной функционал и настройки для конкретного квеста в игре.
* G5 U5 k% H2 W% \* D
, G$ W, k/ N. G( U8 a; n( q- h8 _: W5 E
! |6 P! u) d& b8 j/ L% Z
) i  O. z0 Z. y) D) v, a" w  B2 j
6 T$ I5 }% t( o! {
/ c3 \% l( }, @* R. F

% y* e' F; ^4 @! x' a3 B
9 `) A+ L1 b% O, M( E8 J% g. k+ i  \# Y
$ L9 J$ b+ W0 ^- o





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