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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius % H8 g) b6 _+ E. D0 M  H  r( ~
Следующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.
( t' C' K& B  D1 g
' j. N! v, Z) L/ m( r, ^& S

& f/ ?8 V: k$ r1 b& j; iИди и убей X монстров / Возвращение - награда.7 P0 J9 B; |0 C4 D
Q00529_RegularBarrierMaintenance6 D1 W1 s2 d0 N* W* \
  \0 m: z: ~8 X4 |
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.3 M( n' `8 f, ^  k( K( j
Q00683_AdventOfKrofinSubspecies
! ?9 S% g4 m: t/ _7 T9 B6 O
) z" @( u3 r3 m4 r( ?Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.9 ^5 @! J4 Y0 S5 f: L9 M! R& y
Q10516_UnveiledFafurionTemple
, n  n& q, B0 @7 x! N7 }: A0 L8 e9 a: e+ h3 j9 A4 }6 n
Убейте X монстров, а также соберите X предметов / Возврат - награда.
# _* C. v+ ^, i1 M# A! \. J5 }Q10517_FafurionsMinions
/ n4 W! E4 H. g
. r' J+ l) p/ q7 {) M% sИди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.( m5 J( S" }, Z0 q/ H) o0 S
Q10529_IvoryTowersResearchFloatingSeaJournal5 Z! i* W" N' A! X, N/ U& S
- f% O3 g5 O- w/ r* o
Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.% C" C( h0 ]& h6 [2 `
Q10518_SucceedingThePriestess, X, ?5 `7 |4 a8 |* T& \+ `0 ^
; F$ n! n+ N( c4 P! K7 h  i
Участвуйте в убийстве рейдбосса / Возврат - награда.
* }+ j2 a. c- w) X+ ]Q10519_контролирование вашей температуры
$ @; `  W4 b, E8 n$ y8 R7 z8 }& v4 }
Поговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.- `) u0 @) m6 {2 E8 t1 `8 ^
Q10533_OrfensAmbition" q) [, `+ Q/ Z2 d

' @) e: q' g( T) C9 W
: z1 u& R4 p4 y; g) Y4 T
6 c; A' U' l, ?% g' ^" |4 d  |Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!

/ ^+ G  Q2 R5 Q. ]2 i/ E0 Q8 Y9 a/ g+ v" W
Шаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".# t  t' f3 E: P# R) D
! g# U3 e6 G8 y
Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".
1 Z7 A4 _' e! s) A! h; {3 V" W& S1 C! |! F6 L6 i, f: d  r! ?
Шаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".
) z7 x2 q! ?. S0 J6 P, n8 I4 T
% @% T1 J1 r) k$ c8 `4 oСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
8 n5 R) p9 e( k8 |5 S: |/ M! E& |/ _6 q$ m5 J  v) W
Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.
/ S" t& ]( i/ k# z. _1 A
+ W$ w3 f2 V+ [, y$ u6 w; `: gШаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".
- z, R6 M/ E9 D! @4 ?+ a& ^3 X: M" i( w
Если я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.
/ D( v8 H. E" j7 j& i* d
( h5 C, Q, J5 tШаг 2:
* T2 s. h/ z( R* k& n& a" R# @% K7 f$ g& i* v: ]1 c! W
Следующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:9 O8 H5 C$ N0 z- j& w

/ b: J) h  l; @: p3 D. V& |1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. " e1 O# u" @! n' ^% O: M1 O6 o
Например:9 o! H% l! Y1 f# m; k( y. G
* _* s9 v; x6 @+ U6 E3 M
  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 Y( d4 ^4 ]2 p5 ^" w
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:* W, x, f8 n1 j% C- b5 c6 v& N: f
  l. ^5 E, t& u# F* n; `
  1. /**  O/ ]. R9 O* C. J( q
  2. * @author NosBit2 b+ G4 q8 ]$ r  I7 f0 \+ q
  3. */
      \* ^2 W: w# n+ R+ o" l
  4. public class QuestMasterHandler+ n$ X# E& \, v% p
  5. {$ O! d/ t6 F! d; Z  C
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());
    / h# P/ ]3 M% A0 N9 f: j' S; }2 e7 T0 s. M
  7.         
    % C* Q/ X  S1 ?) n, }- M
  8.         private static final Class<?>[] QUESTS =$ D3 L3 O9 [1 r/ i1 P4 p
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.& E; J1 }# m! c# J
* X5 x; |' H: a. |0 x& x6 ?

9 K  X, K4 p0 ?$ zШаг 3:2 l3 K9 q/ x0 G+ r

! `7 Y/ P" i/ _6 \7 mФайл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д.
# R9 R' E. y3 n( D  z& iДавайте разберем все поля на основе примера:; ~9 p; q# k' U7 \1 [2 U8 |0 G( ~
! w, D. i+ a/ L+ \
  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* T1 b! }3 o5 m0 d2 `3 |: L
Скопировать код
Поля данных:
) h' n  G! ^( a5 L, d( U5 k! u; p
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. 3 B. h" r, |* |. z
Пример соодержания
; ?* o5 M  |2 x4 M- zВот описание структуры строки:
! ~8 I" H  q- @( b( v
  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
Скопировать код
Давайте разберем все поля на основе примера:( v; k* @( I7 S& Y* P6 ~

- J  ^  l: F. sЭта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.9 z8 a1 o5 U! l$ X( _" l
( S1 S! X6 J% M  s' V

$ J5 Z# C* v1 S; N, h% k4 t( I
2 p2 }; G. v; b: W# ~1 E: z- y
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.1 _2 k" Q) h* Z, R- n8 d# }$ @) i! Q
- V3 Y' o8 M$ L' }! z& s
Шаг 4
, A' M, q; G. r; W6 G5 T) mДля того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:5 Q# h! n  g, d: [; S; j! O
Пример добавления нового квеста:. i$ A( a3 P3 f( g. s! E
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">3 r5 ]: O# Y1 R8 m6 Z8 s) ^5 V9 M
  2.     <locations>
    # J$ p4 u# M1 V5 E: E( d
  3.         <param name="startLocationId">2001</param>
    # a& _- j* m( s6 _. K- V
  4.         <param name="endLocationId">2002</param>
    $ U: D* D+ f  U5 h, N* U
  5.         <param name="questLocationId">2003</param>+ j+ `3 O- m2 _  @
  6.     </locations>0 z* p( h! |, e# o6 R# q) H
  7.     <conditions>/ H4 M, z* F# {% E5 l/ ^
  8.         <param name="preQuestId">20000</param>3 b/ }6 a0 K; ]- P& r
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->- i- R" G' c/ h1 K# o9 _
  10.     </conditions>
    6 ^  W. u  x7 H
  11.     <rewards>' M) [0 k" g3 _8 W- j
  12.         <param name="rewardLevel">50</param>  G' ~" v1 e. ~8 X) v9 J6 Z* O+ f
  13.         <param name="rewardSp">5000</param>1 _9 r! J" D* v% k
  14.         <param name="rewardItemId">57</param> <!-- Adena -->! y* e# M; Y+ a
  15.         <param name="rewardItemCount">10000</param>" m9 v9 J' n: Y1 [4 i1 C. M
  16.     </rewards>, ]/ B/ X* N& @' A
  17.     <goals># Z9 L  W, [1 o/ @* Q* M8 d9 x
  18.         <param name="goalCount">10</param>: r# c1 w, m; Z. m, i
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>
    , z9 K( o# B* h, f8 a5 |: _, \
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->
    . X( P" K  C% Z- T3 ^! T
  21.         <param name="goalItemCount">1</param>  \, h* }( K/ B, K' I
  22.     </goals>
    3 Y: r; c8 k: k* i
  23. </quest>
    ) w7 y5 w. B6 A0 b/ c4 p5 d
Скопировать код
Описание структуры:: i! `& W3 V# x. b$ p7 ?+ Y( M
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.0 V$ X) r) w: g; a9 \' [+ n
1 |: n" B, \) Y# t1 I5 g
Шаг 5
7 Z% l9 @: J% c+ v) i' L  d, YФайл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:
" V. X* w) R  }4 m+ [6 l7 c; BСтруктура данных
! `. r! N* D, y7 J8 @% v3 }Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:
7 I/ [# p; |2 x1 Y
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end
    * ?8 Y0 e8 Q. I! W7 M
Скопировать код
Разъяснение полей:' |( t3 H- b1 b
9 Y5 w+ _2 u& P1 v

& D6 u' g4 U% M8 _Что можно изменить:

( _4 Q8 M2 l1 d5 a6 G/ UФайл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:9 j/ c" _& W* h# O* N, ~
7 L8 l; X. t2 ~/ }$ W( t4 d% _
Этот файл определяет основной функционал и настройки для конкретного квеста в игре.- J& e4 l/ L. I4 I- w

7 _5 Z1 M: @. u* V3 a$ X2 p6 o3 Y
" K/ k( q0 E5 w9 u6 ^* v  U, c! t$ Y  C4 m7 V! |$ r

, T9 x. B# D* W: [; Z9 w9 Y  y* w0 j& \: B3 Q

% ~/ U8 `( y5 Z8 G+ X; t. |
! V0 ~; G: P' }9 N8 Q8 v6 y& O' s) \0 Y( i0 I* j8 x

& K; v8 v" T6 w% M1 @- z" T5 [
0 D$ H) \5 z- b




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