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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius
. H: p1 A" e: `% O* BСледующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.  [' [0 h2 T% W: V" A# ^) U" h

- L9 r- [3 O5 `5 T6 k
$ v9 F1 T$ q; o
Иди и убей X монстров / Возвращение - награда.7 G6 y; o) t" m0 N: Z$ t
Q00529_RegularBarrierMaintenance  _6 l0 a% J4 Z! g
* e' q) c' C8 A& d% |5 U
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой./ ^& N( ?/ i) p8 N2 u) {
Q00683_AdventOfKrofinSubspecies' t2 O2 |# u; _" B/ _6 A$ m

9 b  }% [- x; |- A% H1 Y4 X# ~Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.2 i" \, ^% A" \' z) v- S0 b% `/ j
Q10516_UnveiledFafurionTemple7 Z6 X/ w7 {$ ~6 _5 V- b7 n: I

" t" a; j* O* K5 |' d/ R+ B# NУбейте X монстров, а также соберите X предметов / Возврат - награда.' X! b; P# B2 Z) k: J  S0 x. J
Q10517_FafurionsMinions
( M% y& R: g0 w, W2 ?4 l
2 j; S2 H" B. S7 w: o4 MИди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.% G# Q1 S1 n0 t! p3 r
Q10529_IvoryTowersResearchFloatingSeaJournal
6 U: T; p) \# h
  b& |! k0 K# c- T7 D( [! pИди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.
1 U7 e5 V  d+ E/ K. R: @Q10518_SucceedingThePriestess' V+ X; V% D, E5 |) i4 I+ I- x
. @0 N" B: S, l2 U
Участвуйте в убийстве рейдбосса / Возврат - награда.( k: U0 [( D- ^8 A. X: L! g! P$ M
Q10519_контролирование вашей температуры
# q4 d% Y5 C0 m" d& H9 l8 h* V* c; p3 b' [
Поговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.5 ]& ]/ S9 _# d& B
Q10533_OrfensAmbition
& `/ ]" p, d4 _9 ~
8 D& l/ G9 E$ b# R+ Q: f
! ~) W9 @; v& I  s6 d3 a$ }6 ~0 G- ~8 G/ r" i; |3 i% D
Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!
1 O& D6 h0 `, r. J
6 u  Z; U0 Q: k
Шаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".
3 {+ l! L6 Y- J5 w3 n/ s2 |( ^# d8 o+ S# X2 M
Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java"., d1 G, K) ?$ \) p& g# I" Y7 t; T6 w
, Z" e; Q$ \- V, o9 I
Шаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".
2 O! j6 D# {3 o$ s2 B7 l
% X/ C; D9 p4 [2 AСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.' l2 l5 `$ O  b# D' w6 z1 @# U# U! s
- D; n8 H$ @7 Z7 T& ~4 r" P5 j
Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.$ h3 ?" l1 F8 @& c% W6 Q5 _2 Q
* J2 ]$ z9 i2 N) L
Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".4 g8 ^" x5 k5 s7 P" Z0 m0 \

/ Y6 x2 J# l; q7 J6 hЕсли я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.
- g* z& I) A+ ?# c5 b
3 J0 X% T# }  d6 z8 FШаг 2:
' k, F5 y2 P/ y& O$ b* S4 ]6 ]7 k0 S+ B- z2 l
Следующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:8 C3 ?( U5 N3 C. t4 \& t
0 ~8 j) U* _" d9 z" C
1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. , _( T. t. z: [2 y) ]; U
Например:
& |$ a7 ]7 l. w: f$ @8 L4 d
9 g* N8 e1 M: L* B" v# ~
  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 ?1 C1 S# B* Z& V1 b; k: b
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:/ o* d, }5 U5 v/ e2 S! J

8 k  m0 E# {1 S6 F2 j7 J3 }9 J  S
  1. /**
      b4 Y* p: X. {; }2 a, I1 g
  2. * @author NosBit% L; U0 A2 m! j8 l! H, ~
  3. */  j; P, {( A. g2 z
  4. public class QuestMasterHandler& Z+ F4 E' b( n: ^
  5. {
    + l( K# ?$ e% K3 e
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());
    4 t) ?4 z6 D! l/ @
  7.         4 h/ Q0 f& c8 \3 C0 T
  8.         private static final Class<?>[] QUESTS =
    : N* A3 `+ S+ ], Z: G6 [: X  P
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.
5 c; [; H) A' l1 S: s1 Q+ M5 Z4 _9 o5 Q( g
) p% a) C& \3 _% [; Z) P
Шаг 3:
; O& I4 V# T: M3 h6 A$ @, F) Z9 w: h! ~
Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д. 2 N& y! l# ^; e4 S- e3 Y' }/ w. ?
Давайте разберем все поля на основе примера:
# b7 v4 b& j  |* I. l% O9 I6 B8 j0 y
  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
      }/ D& w  ~2 E" O3 G
Скопировать код
Поля данных:
) D. k$ X0 z) |) y# J
  T+ t, v: m( u2 ?3 p9 fФайл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре.
" h. {* |# x# k5 C6 H: bПример соодержания
8 o# g# g# U5 xВот описание структуры строки:
3 p9 n0 B' P2 q8 S/ `
  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
Скопировать код
Давайте разберем все поля на основе примера:/ p% l5 U2 a% B. I4 Q% q

/ b/ G, c/ v: {3 cЭта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.$ K. @" H3 l' g5 M" y$ V. j

( A) W. M( b4 B/ J
/ e( y; X9 u7 i
; Z7 ?" H+ `* _/ {3 _2 C
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.$ t  P" _# _7 }$ J0 m9 M% X

7 d4 ^3 Z# d" o1 e0 D- D: PШаг 4
2 p7 z0 y. {; w- EДля того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:
6 A; n9 }# R. Z4 _3 @Пример добавления нового квеста:: F" U+ L& m- L% b/ l3 M& D
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">7 V4 Y: e1 o& W8 g+ o! }" v
  2.     <locations>  D6 F& B( v9 v5 j1 h- G0 s
  3.         <param name="startLocationId">2001</param>% P8 H) U: w, D$ |; Z, r$ O" Z
  4.         <param name="endLocationId">2002</param>3 g' d& X8 Z/ b2 t4 \6 f3 P
  5.         <param name="questLocationId">2003</param>
    6 q8 w9 B! t" _0 A
  6.     </locations>
    ' e1 @; S8 }( r: v7 x
  7.     <conditions>' `) a( G; r7 M- c* t4 M9 Q% g
  8.         <param name="preQuestId">20000</param>
    ( n: L$ ?( I# {
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->. \8 ^* t  ]  M0 T; j  I6 O+ ~* d
  10.     </conditions>  _' k0 ^# I9 ]# _; m: N
  11.     <rewards>
    & ^5 A8 G4 {# }0 F  K9 D
  12.         <param name="rewardLevel">50</param>
    $ ~, q1 R7 Z4 T. z' `2 q6 y
  13.         <param name="rewardSp">5000</param>5 Z, l/ W6 \5 {8 `
  14.         <param name="rewardItemId">57</param> <!-- Adena -->* i. r1 l- u  n! F) r
  15.         <param name="rewardItemCount">10000</param>
    9 K0 @8 h9 Y+ @( d6 j3 y7 C
  16.     </rewards>- C& Z4 S4 Z, A$ i* e& N
  17.     <goals>6 ?9 @. _3 b. ^6 Y- l) D
  18.         <param name="goalCount">10</param>1 B- l2 n, J6 q4 h5 Q* E; O0 d
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>
    / z5 a& u" t; D  ^' O
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->
    1 ]4 l/ Q9 I2 W4 M
  21.         <param name="goalItemCount">1</param>8 r& M  \  r7 g& g8 B& `" D9 j
  22.     </goals>, X: d& B2 q5 U) Q
  23. </quest>
      E4 T1 j9 D$ G: c5 T
Скопировать код
Описание структуры:
* O8 I0 g2 z. BПосле того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.
' _# j0 N7 |  z! a$ Z9 v: B1 O1 g# i/ W5 x+ y9 w3 K  q
Шаг 5
6 L5 ]5 V( L, G3 b/ r+ {1 |1 ^; nФайл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:
# s7 c6 S  H5 ?0 z1 rСтруктура данных. h" D4 Q- v8 `  \
Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:
2 Q0 x1 _) B' x7 ~
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end: ^: F5 [6 a. j; u; |# M
Скопировать код
Разъяснение полей:( j/ }# w9 G6 b6 i
1 W) O1 _6 }% }$ `! Q" G( ~
+ ~* t& s: L& z, C: u* E
Что можно изменить:

3 s  O! }7 D6 D7 AФайл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:5 u( J! s- u3 i4 ?4 V2 q

2 u4 V0 f4 B6 @# H8 S$ SЭтот файл определяет основной функционал и настройки для конкретного квеста в игре.  w4 ]1 _+ R2 {# v
% s: E' r+ n- `" k% T/ r

6 y% q9 C& h* t, t# m
, f1 q4 B! t; C: A
2 |( t4 f, j7 l; k0 H: @) j0 c2 m* U

3 \# r- S" O& R9 `6 w
5 d9 |" s  o  `7 L" w3 S, N  x; m
% V) J% Q$ R- ~  D" ~% N: _: _, t) }" W* [' K
+ y: H, F1 |3 E* L7 W





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