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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius ! M9 c1 h) V$ `3 N! M$ a/ A( X) _
Следующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.
  \3 {3 x) n8 ]3 H
7 o/ L: X) k8 R6 P9 ]

+ Y3 |* D8 \. c- S, d( HИди и убей X монстров / Возвращение - награда.6 K$ l" B8 Z# A4 P, j2 E
Q00529_RegularBarrierMaintenance
5 X9 `% m! I2 w" g$ A! v+ C8 h' l$ l* z
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.; v0 \0 ~- {+ H1 D
Q00683_AdventOfKrofinSubspecies9 S$ R7 q9 |  g; N: ^7 M: o3 f
7 U" u, Q( D% N! q: q
Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.
) p8 I3 h+ N6 H- bQ10516_UnveiledFafurionTemple+ ^$ N! i: p) r3 m+ \

$ F2 B( P+ R& u+ i7 G1 hУбейте X монстров, а также соберите X предметов / Возврат - награда.9 }/ c$ H* L% L- u% t5 T
Q10517_FafurionsMinions/ _* {8 ~& f. m+ `$ ^$ w0 X+ ^
. \  q+ J6 p1 _1 F- I0 y
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.
8 D4 `9 i) u2 m1 OQ10529_IvoryTowersResearchFloatingSeaJournal% d; [# a3 _$ _

/ h( O6 ~) q; }2 a+ I* b; pИди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.
' G+ o) x$ u& iQ10518_SucceedingThePriestess
7 S7 E/ |) S+ D- x" `$ n* e; U. Z! Y) y. H1 ]1 a( Y1 c  g
Участвуйте в убийстве рейдбосса / Возврат - награда.: O! l+ f9 o1 }& x3 A1 s
Q10519_контролирование вашей температуры
$ U% H" E. J% |# Y7 _& N# p, _, {. y* a. v/ V) p
Поговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.
: z4 o1 ~' [" i3 `. zQ10533_OrfensAmbition
2 r/ p, {! [( ~2 a2 k! s' i; i4 y+ g1 I& m) ]1 X
' M$ F/ y! U2 ~0 c- B1 V" J* C

% G' N+ x  Q, C/ c0 BРуководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!
3 @& `2 g9 R$ N0 {8 b
8 O1 w% d% s6 b
Шаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".* R: x! ]- D- Z/ g$ U' `

) K$ m8 l( a' h* }Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".
8 r- P- |3 [, o
! V" V8 t/ F6 |$ HШаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".: u( N0 ^! V6 W% S5 @. s2 q0 t
! s& v; u# q8 Y' Z
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
, P( m3 P  A  q% j1 H; G
% E+ E/ U  T& |4 P( [1 m7 b- QШаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.
; D6 ]8 J5 y3 i3 w7 D# W! @2 M
  m" R/ D7 m6 X; _& B5 N* f- P, aШаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".
9 x/ w1 C* w' T' t  J" ?( L* U" ~$ Z9 U9 e; F' _# [  y" M
Если я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.- B+ |3 s) D5 R

9 q% b' R% ^4 K6 W* rШаг 2:
4 E, l8 p% G: i# h( i
% C/ M! A6 G+ g- H: ?5 [Следующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:
) k7 a; t6 Z- n  V" h* Y
5 [, M# Y3 J: g1 @1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. * S& Q( s: k. n0 k+ \
Например:( C" v' G2 L. G: Y# G1 S1 m, d# z
" J$ z3 T& k- [) M7 c( D* L3 _2 ~
  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>;
    4 a) b2 S* s3 {* w
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:
5 v6 t6 c" E- G! N& g! ?0 f9 Y0 d; R; J$ F  P4 G/ C; u
  1. /**
    0 a+ G9 C7 J0 }9 S- U, T2 Y
  2. * @author NosBit
    + Z+ v% ]; b# k) Z5 I  K' z* A
  3. */
    - ^! j; c" n% t/ \/ g$ d' J) z
  4. public class QuestMasterHandler
    & O8 D5 P: g6 R9 _; G0 B: @( w
  5. {
    ) _* x- t* Y7 t; I% \+ n9 y
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());! M2 o$ c8 {+ U  L" O! L0 r
  7.         
    + m: u/ a9 E  o. C0 _1 v* j
  8.         private static final Class<?>[] QUESTS =3 i0 R" T3 `! U: s1 e
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.
9 M# n  j2 D9 K5 Y8 W
) F0 S# H" V$ E+ V* W) a+ \# g8 V& p3 R8 w( ^! L' k
Шаг 3:
9 e0 o* A* T+ ^1 o5 Y
5 D/ ?5 H5 i! b$ z9 P5 v2 hФайл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д. ( g3 E: N7 I. q* j2 k
Давайте разберем все поля на основе примера:& A8 j* E( J3 j/ \7 b8 x2 h# @+ e

# W7 ?6 m+ b0 ~
  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
    % M' n! o  `, b
Скопировать код
Поля данных:8 V5 A; }/ U: z, [" D$ s/ [% P

6 X5 V% E; i' |% e; BФайл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. 5 L3 q' Q" n9 M. q2 Y) G) I2 a" O
Пример соодержания
, b+ X6 q. H( H2 ]! A& ~Вот описание структуры строки:
) b) |' p! Q) t1 U- 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
Скопировать код
Давайте разберем все поля на основе примера:$ a7 w7 U$ K% ?: N3 s0 M

: K% N' R( }. ~3 v/ `Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.
  F+ E* L# J+ r* ]8 m: t5 Q/ y3 V% g3 k9 s: W1 J- U8 A- E  s
1 ?6 t( d8 p7 W- e  b/ S

" ]0 m0 |" ]+ E  v& @& |% ?: RСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
" ]6 [5 `& _. b$ X3 E
- Z2 |, i( ?/ R2 y2 f5 LШаг 4$ D5 ?0 T0 ]& k/ O
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:4 x* a. B. B' m/ L% T& m; z0 ]
Пример добавления нового квеста:
) b2 e7 q9 x4 R; p  O
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">
    7 w3 h  g- z+ E3 n9 y! b
  2.     <locations>: v! s' f) e' k- m6 z; D
  3.         <param name="startLocationId">2001</param>
    # u8 S" q' q# h7 ^
  4.         <param name="endLocationId">2002</param>
    . h: X5 U7 c6 }0 D( Q9 b
  5.         <param name="questLocationId">2003</param>
    $ z5 H2 }: f/ K
  6.     </locations>2 }, Z0 |/ k5 E/ J4 h0 t
  7.     <conditions>
    * L0 e8 d) n9 J( F
  8.         <param name="preQuestId">20000</param>
    - P  f1 _- {; b6 T/ c! X& ]6 N
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->! ~" K2 ~# Z* z; m
  10.     </conditions>$ `0 ~. S4 Q( h9 ?& {$ z! J, u# \0 O
  11.     <rewards>* L: I$ J4 ?; l" p+ l
  12.         <param name="rewardLevel">50</param>0 L0 t* s: d5 `) m" S9 ]6 F
  13.         <param name="rewardSp">5000</param>
    " C2 A; T- ]' }5 I- V7 E( O
  14.         <param name="rewardItemId">57</param> <!-- Adena -->3 D7 i9 B# W: v; L# t- z
  15.         <param name="rewardItemCount">10000</param>
    6 _; J# o$ @& i$ l/ X3 c
  16.     </rewards>' A# Q5 y( R' L
  17.     <goals>3 R  i# s, d: Q+ U" ^% K& c  A$ E
  18.         <param name="goalCount">10</param>2 M2 D. f6 e2 h$ o- l+ v. j
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>
    - U7 |" B4 e6 T/ Q! ^
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->
    ( D( {2 Q2 Y$ g3 L
  21.         <param name="goalItemCount">1</param>
    9 y/ \8 X1 Z/ J+ [6 v' Q; I
  22.     </goals>
    9 ^+ a) U9 I* p& W5 \2 y6 S
  23. </quest>' N9 _) }* n8 W' u
Скопировать код
Описание структуры:, C; L5 a0 E( B: v; d& a' K
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.: b# ^4 `1 D% G) e' z. b5 s
: G: u8 h) G; a4 h
Шаг 5, F0 `, I7 {8 `- g  E
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:
* U- W# \+ C3 c, o% ~Структура данных
3 c7 M+ g. B8 k5 eПример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:& ^; c# d+ V# p' r  S1 d/ B' L
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end/ q2 ?. v( p8 X8 A' Y
Скопировать код
Разъяснение полей:
, k: k3 R: D& G) b% j
1 j# E0 p; g9 m8 `% a& I, f1 _. r+ G) e
Что можно изменить:

" \1 H: F# {& R2 p2 PФайл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:0 r6 \8 n! T  j# z0 l. ^* V, U

7 v4 B* G6 b8 l( `6 b% nЭтот файл определяет основной функционал и настройки для конкретного квеста в игре.# x7 ^/ \3 g- l% m( J/ U# |0 L
" E$ O4 ?' o/ a% X

- |. g0 v. L, V6 P6 S- d  p) `% d: ^1 s
( q- F3 d; D; o$ S4 d

8 Z! K" e0 S) o4 d4 z" B7 M5 z* n" p9 J. j( D6 @; T% P# Y! `

" N1 O2 @$ z- I2 ^
/ o# N* I7 y& W. S6 R! B3 l* J  I7 |

7 F2 |6 }9 Q5 ?2 k




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