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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius
7 G1 U' M; Y+ h5 T  n3 h' dСледующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.7 y+ W1 T4 b6 g' B( Q2 ~, a2 H' U' X

- b$ U, @! y# e% }; H7 O: x

# ]0 u7 j- d$ F2 s/ t0 ^Иди и убей X монстров / Возвращение - награда.
! y5 V: A7 P6 a) sQ00529_RegularBarrierMaintenance4 Q. a" E$ B* j5 \( {' F; I* `
( W" m% j( X" Q( g; ?& `5 e! C
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.$ c- k+ H3 Z- V# I4 Z" H
Q00683_AdventOfKrofinSubspecies1 Z: v/ d& S. n$ G9 C
2 ]2 S$ I. I% W" N0 Y1 F6 }% `
Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.
6 b* q0 y9 Y: O* lQ10516_UnveiledFafurionTemple
4 N7 O7 [# \/ M" |  U% o5 j2 W
$ W3 X' [3 a5 k2 oУбейте X монстров, а также соберите X предметов / Возврат - награда.& N8 O2 H0 _$ n
Q10517_FafurionsMinions
6 S0 z  G, ~* y! Z3 Y  E# ]% q8 r% ~5 N  d, J: a/ w9 R
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.% m# t6 \* O) E3 S2 z; n- R
Q10529_IvoryTowersResearchFloatingSeaJournal
0 |; ~- R8 J# `. j2 {
% A, a6 q) \4 MИди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.
4 o, X+ v2 S7 k' SQ10518_SucceedingThePriestess# N" L% }) ^& a6 L9 F

9 ^' p- N) r3 e/ T, H% x( m9 CУчаствуйте в убийстве рейдбосса / Возврат - награда.
+ F4 H( C' ~4 g9 qQ10519_контролирование вашей температуры
" T1 P: G) Y4 a& N6 E
( \: d  S! c% Z/ ~/ EПоговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.' S" U4 }7 f1 j3 n6 Z, U
Q10533_OrfensAmbition
/ O" u4 R* b1 |
" ^; L- z- ]; h5 s4 }% s7 `
+ S6 `+ {. ~3 x1 z  S: {( U8 X; S  K! m* B; R# f  B
Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!

/ p6 L, u4 _, _3 {
# N, W3 p* x+ `" M* C9 \# nШаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".
9 B: H) D! @, l9 F! g1 A
7 ^: n, o, k8 Z5 p- G% _Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".
' ~5 w, G4 B  H( G1 I. [  e4 S! z2 P) ^
Шаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".+ z3 `; O* r. C0 Y

0 \9 W5 w: i( ~( N2 f1 fСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.4 _3 i, m, x6 o

0 w& g: x4 |, S- {Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.5 |- c/ \' k5 B+ I

. t% Y3 c1 B/ x: [/ PШаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".. J6 ~4 W, H) l' s0 _

) J- N+ y- T- A, u' CЕсли я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.
) e% O" |( X+ q- k- n! R# v9 P0 ?6 P# P
3 z: S2 y7 N8 a, z8 i7 uШаг 2:
& B: n3 t" k# H" F
  b1 h6 n; f# l' X9 }Следующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:* b3 S. D9 b6 s- Q6 M/ U' |

& E. q) C! Y  k5 \+ i& r7 J1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест.
9 ~7 B  O. }  m. x+ PНапример:
0 {; R2 `/ U* o* n
, {0 m- Q1 `- V% }4 h  ^
  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>;
    % w6 i. c9 q9 T' n0 q  x
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:
# N$ c) }5 R9 p' v
$ }" a. H2 k: ~1 a- m& d3 a9 W3 s
  1. /**/ K4 s+ c9 b& v, u
  2. * @author NosBit! B0 @. P+ P, Y0 @5 P  B
  3. */
    8 T2 M+ E+ I; Z0 x6 K; h$ u
  4. public class QuestMasterHandler
    3 p$ }/ t8 v& p' u
  5. {5 p. U! h  B& e. f: M
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());
    , |. o9 C0 d2 T/ e
  7.         & g% I+ _2 k- V6 J& \# s% M7 P
  8.         private static final Class<?>[] QUESTS =
    , C4 _: b9 F7 v9 @" F
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.+ f! m; ]" U% V' ?7 }7 A
* Y0 M$ W- L; T! P7 J3 y

% W* P& h9 Q. {- z- K1 Y3 mШаг 3:1 [" X: R) y0 j6 b9 n

( d! g5 t% {2 Y3 q, M! [Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д.
, j) a- I  O9 V3 eДавайте разберем все поля на основе примера:  r$ B9 l& T- X" r7 j9 }4 n, K
6 _, e5 Z; w# x* M
  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
    2 B! v# g) G4 o0 V8 _: n; w
Скопировать код
Поля данных:
' E2 U7 A1 ]/ n) ?: D$ j" Y! y6 Y6 \% T. @( g- p& O
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. 0 ^; B2 `  ~+ r0 s$ t! h3 V
Пример соодержания/ K5 w6 d, X8 A/ a: ^  R5 a
Вот описание структуры строки:
3 @7 z7 y2 v6 E8 z( _! 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
Скопировать код
Давайте разберем все поля на основе примера:
6 q) ^: ?2 f% h* Z5 T  I. z' v3 N8 K% f" X
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.
6 r" ?3 c- L! `: v) }4 Z0 R$ q8 g1 ^1 o

3 j  E3 u3 h! S5 S& X
& W  X2 N( {7 i/ ~+ i3 g% C
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
: m  H7 T% _1 j# N5 Q, u, D5 a* f, j) J2 m3 M9 ]
Шаг 4
" t: l- U- i  u2 zДля того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:: C" R  \# b0 l% {+ G. K1 h- S5 c
Пример добавления нового квеста:; z7 M  n& h! q  c% u- R
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">7 g3 \" X  Y7 _. \  Y8 v, K
  2.     <locations>
    ! |6 J  Q0 t% r
  3.         <param name="startLocationId">2001</param>7 }+ y6 t4 i* [
  4.         <param name="endLocationId">2002</param>
    ) ^/ {0 q$ x$ w3 C# d( [( V
  5.         <param name="questLocationId">2003</param>" |0 i0 J6 f9 S6 m0 W, a" e
  6.     </locations>
    * B( O# p) E9 B8 X& ^3 k3 h
  7.     <conditions>
    - V: p# o7 f3 ^( X- u
  8.         <param name="preQuestId">20000</param>
    % @, c9 m% P, ^5 }$ \$ [1 h/ ^0 a# n
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->6 l% }4 @# @# A  U
  10.     </conditions>
    . E+ x. n9 X/ G/ g! u* k
  11.     <rewards>
    9 R, N: K7 ^" _1 m! ]' k
  12.         <param name="rewardLevel">50</param>' {1 N6 K( }% K' j
  13.         <param name="rewardSp">5000</param>
    4 [& c, R# I6 O! V6 ~5 C
  14.         <param name="rewardItemId">57</param> <!-- Adena -->
    # y5 ~! t" Y, b1 W( F9 z; o6 U4 s
  15.         <param name="rewardItemCount">10000</param>1 k+ w+ I3 F3 Y& A& B5 u. x) m# e- h
  16.     </rewards>
    / w+ k: a, K4 H* Z- X$ _
  17.     <goals>
    9 B5 C* Z/ I+ i( k  i) J5 N
  18.         <param name="goalCount">10</param>* i1 w+ J4 z. {8 K* g6 _1 u) g
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>
    6 u; ^3 L- c3 V& ?& a9 {
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->
    " n8 p" J3 [1 F! }4 ^
  21.         <param name="goalItemCount">1</param>, E7 L! }" U0 @. S  r, W: L
  22.     </goals>
    1 X. c/ c" W0 G( T6 p, ?
  23. </quest>" [" m, ]+ i: F( w
Скопировать код
Описание структуры:: p. z0 L2 S8 P9 N
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.
, F% m8 Z- Y. o" k. M& P) c# p8 y8 ~. o2 t7 t
Шаг 5
" V7 ^; b5 z" B% fФайл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:
6 o! n4 D" W2 HСтруктура данных
6 `, W' l! `1 R9 m' [8 WПример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:. U( [; r2 p* B! r
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end7 x  @" N8 l% s# S; v
Скопировать код
Разъяснение полей:+ [1 V) \; ?7 a6 ~) \
# K- J- k8 |' T! |! F( c& M" B  X4 r* J
3 C2 c- f  ^5 W& I! J
Что можно изменить:

3 s( }$ _1 H4 o% z1 RФайл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:
% o& I$ s: Z3 J* r* j3 `, i7 p+ {- D
Этот файл определяет основной функционал и настройки для конкретного квеста в игре.
0 M! U1 l; |( `; J
2 U/ z  j% ?: ], z# w# F, q  _
7 F/ K6 X' Z& O2 ^* e6 i# C% k4 ]3 E) ?2 g& y2 X" T; d6 x

) R9 a" D& _. R! {# T* p) Q: `* L  R0 ~) f3 S! _) |

4 r, ^! d! d+ _% j$ e# D% |; \" o1 A3 M: u  f1 d4 U' T& y' ~

2 Y: t( |' c0 r8 i8 b/ I
0 i4 `; z) N' ]- l
' {7 w; A! p- |5 Q4 W




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