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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius , `2 z1 _2 ~) [' i. T7 J2 {
Следующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.3 m, g6 h) Y7 U; w$ R: @
1 K$ N& v: ^( g" A# W3 \
! V# C1 |. I& z1 A' D
Иди и убей X монстров / Возвращение - награда.
1 r* S: ?2 o& t( z2 |6 j8 cQ00529_RegularBarrierMaintenance
  X1 o2 U+ z1 K# |
. k5 d; }* D  f8 ]Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.. n/ X1 d$ ~& G# f3 c# Y4 H
Q00683_AdventOfKrofinSubspecies0 Q* P1 Z/ h8 ~) g! d
; X  D0 }8 P; c! E
Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.
% ~' {) G( h, S: {Q10516_UnveiledFafurionTemple
7 t3 W3 ^! Q4 I8 L6 W4 H6 M5 b" R3 g9 s; i
Убейте X монстров, а также соберите X предметов / Возврат - награда.# Y  \6 O6 M& ?$ M* z
Q10517_FafurionsMinions
8 w; B& }3 y8 Q* v, r+ w% D5 P
' W" z3 [. \- u% A9 C5 LИди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.
# b# m& v9 [7 b$ pQ10529_IvoryTowersResearchFloatingSeaJournal4 f  f5 M1 v) b1 `& }( c

4 Z! f1 o- w# aИди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.
' R( v) ~) ^/ U; ?$ sQ10518_SucceedingThePriestess
5 L$ m3 _6 Z- f% b! H# [5 y7 S5 X3 [- W, }. R; }
Участвуйте в убийстве рейдбосса / Возврат - награда.% \1 p3 F8 K% G  W( G5 k
Q10519_контролирование вашей температуры; O0 b7 y. V, A7 ]/ V4 d

" l6 Y8 ~) @" w) ?Поговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.
' w) T' w( y# P, zQ10533_OrfensAmbition
. p6 h3 S; T% p+ ]' z
2 l7 V2 H$ G1 {' n8 d6 A4 ]+ H9 Q& P. q

# k  f0 Q1 |$ T4 fРуководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!

5 Z+ j+ f4 O4 @/ }. G1 S' C
+ r7 D& T! B, hШаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".5 y  }& G- I: L. j4 `( O
, w9 @; [! d1 u, m4 Z# o  {
Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".
$ y& A- U; n3 ^4 v) z" C9 m/ ^) F: A; r' ?' |5 k* _9 u! l# ^
Шаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".4 h9 V/ t0 O/ e& N, i

- V" V% q# A. [: J3 z7 Y: DСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.7 t( S8 J' K$ \& q) ^3 S2 b1 O

$ s6 c& w* C# j5 ]  E- ^3 cШаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.
" j9 c( N. S! F- \( t8 \( R5 k  @8 J6 B5 B. e& t" q& h: F8 R
Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".9 e/ s5 F1 A* Q0 k& @* F  I8 ~" K
+ ~% o2 ~8 c' g7 |+ P4 v
Если я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.. W$ Q! B$ O3 a8 I" H

& A2 I! |7 c3 R$ T& M* yШаг 2:
7 {5 {1 \6 s5 F) j5 D+ p/ U: a$ i
% i% H8 S$ V& _9 S/ oСледующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:" [* Y+ \6 r5 n8 h7 C% K- L

* w) V+ b9 o; q% s: J& Z% ^3 B9 x1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. $ Z+ h7 h; P4 V0 z+ Z+ M, m
Например:' G7 h, g5 |* \/ I" x$ W) n0 e

1 Y) o! y* w4 e+ f* B, ]0 N' 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>;
    0 ^6 U0 u7 E% E' i+ Z& h) R  y1 X4 h
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:
3 l/ r4 ^/ V& u/ r* g- i6 G1 u9 M+ e4 p+ F
  1. /**
    * p! K6 M5 [1 b* Q
  2. * @author NosBit* t# m4 W6 }, l( R0 n& W) w
  3. */
    & {% G  h3 j1 K8 |
  4. public class QuestMasterHandler2 a: x( i1 J% m1 u+ F0 C# T
  5. {
    2 W: Q. X. j' z8 R$ x
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());5 E# ?6 t, m, J" O
  7.         
    % c: V4 n) D% i
  8.         private static final Class<?>[] QUESTS =
    / D2 {9 S+ k9 M. S% H2 [
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.& b* x" r" [  c3 D9 A* J
' V! _$ Q$ m2 {/ M1 y
5 y' F6 r; [5 O" U  K) X7 r# `2 t/ B5 U
Шаг 3:2 F9 E. v9 O1 b. }$ d, V# d
" ?- U/ l- v* q
Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д.
7 ^- Z6 z, \% X4 T0 E5 OДавайте разберем все поля на основе примера:
' I: o2 D2 u7 j) `6 P' l4 L# U
9 v* W+ `: w) i0 F
  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% ?+ h5 }; }' Z# y9 ?
Скопировать код
Поля данных:2 L: B4 l) l. w2 G0 m8 O, [0 X

2 H7 q- m6 ?' \4 wФайл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. " m. X1 l# @; m: @
Пример соодержания
/ u5 A5 V6 ~& {& F9 y$ u: ]Вот описание структуры строки:
/ s0 \2 V3 ~' q' I& a
  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
Скопировать код
Давайте разберем все поля на основе примера:
0 r- `( E) |$ `; |# J* B$ \' }, q
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.( W  [4 O7 G0 I4 F
, v' L& W7 X' N( [) |  e+ k

% i) x; F" C: y, a

' l' i3 [# d7 u' hСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
4 G: Y6 M! ~' t! J1 h9 Y  Z" x& ?0 g% s8 E' a9 M2 ~* F
Шаг 4
- x2 @" Q) t8 L5 q9 _8 n( EДля того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:
4 }9 s5 i  u, Q% r5 A8 V6 iПример добавления нового квеста:  f1 E1 S3 N7 r  K) g& w# L9 p3 \
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">% t! g) g) Q9 S1 D: J8 ]
  2.     <locations>
    + _& W( K9 o5 i8 d$ ~
  3.         <param name="startLocationId">2001</param>$ B4 d( ?- a. v1 X
  4.         <param name="endLocationId">2002</param>1 l8 Z3 N8 n$ H# F
  5.         <param name="questLocationId">2003</param>; K' `: R9 Z2 |/ H7 N" y( [
  6.     </locations>. c  V' t4 B+ G1 c* Z: {, D! W% d
  7.     <conditions>
    ) P& t+ w1 U! n6 k4 k- Y
  8.         <param name="preQuestId">20000</param>$ J5 K5 {2 p: d4 _
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->
    : G' {/ e9 R5 o" |/ g
  10.     </conditions>% `% ~) [* @. J, z7 m4 Y
  11.     <rewards>& w/ v+ q/ G1 q1 C
  12.         <param name="rewardLevel">50</param>
    5 E6 u% ?  O- V1 P! z: G
  13.         <param name="rewardSp">5000</param>
    $ h5 |% A, E" }' G$ }
  14.         <param name="rewardItemId">57</param> <!-- Adena -->4 Y( {; V& j! r# k3 m# d, D2 T
  15.         <param name="rewardItemCount">10000</param>
    + D8 x; B! c( t) M/ I1 L0 Z5 e
  16.     </rewards>9 V! ]$ C7 h7 r- z8 `/ y9 B
  17.     <goals>
    ' R: o- j# K1 s9 }$ l
  18.         <param name="goalCount">10</param>/ i9 K+ Y, r; |
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>6 J& H# Q) k6 K3 b# {( s, S
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->) W" n+ V( g+ t: N
  21.         <param name="goalItemCount">1</param>0 s/ t, w- Y7 U4 _- W% g; v3 H" t
  22.     </goals>
    / d8 s4 i  g5 d, j* U9 R$ x7 b
  23. </quest>& A; S/ }: X) p$ T
Скопировать код
Описание структуры:
, a4 R) d' X) r" K+ `После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.' q8 \( A3 t4 U7 a. d

# n7 `4 d5 H: T9 S- W( V5 _3 SШаг 5" `2 x% Q6 ], S, [* O) L
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:
8 U. |! t+ N  ^# B5 [8 l% E" v  ]7 @Структура данных
9 }9 w7 Q1 g2 I9 sПример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:) g( T! ~) y9 V' j
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end
    - m8 M- ^# T- v% q0 \( Z6 |; k
Скопировать код
Разъяснение полей:) E& h( Y* q( F* h: [0 A
9 B6 i2 r- y$ t: l! [

8 B7 v: H' d2 H$ hЧто можно изменить:
+ f/ k1 O) |4 z! b8 R0 Q: G, J
Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:7 a% L3 C# g) b$ K$ k

) s  Y3 n- d# }' s5 f* L3 ^( X) HЭтот файл определяет основной функционал и настройки для конкретного квеста в игре.
1 h5 E7 f0 j5 m$ o# R& E# O, J. n1 {" |

# |: H0 o# p7 `% K
8 z6 I. a* g! A3 s% d, N( I- V8 w+ v# q& [# l/ M/ K) w1 w5 v2 h- c

) S0 T7 ]1 t6 E( n# U1 p- P0 m( `4 J4 q; J
4 w/ {4 @3 x4 ^7 @, ?

9 G+ s/ a" d4 C7 A; u* u: [# Z

7 G, N4 Y+ p" w  B




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