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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius
9 A( A. h; Q8 o! x7 k) pСледующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.4 t4 G2 N. ]2 o* w8 J, R

# X  ~8 N0 k3 [7 s4 |/ a

- M. w  T' x8 E- }! ^Иди и убей X монстров / Возвращение - награда.: P- B, n' g: z9 @5 T6 N
Q00529_RegularBarrierMaintenance
% L0 a1 v6 w3 ?8 M# Z9 T' r5 ^* ?, a9 g  d
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.
2 a+ E9 Y" z4 FQ00683_AdventOfKrofinSubspecies
+ Y  V- r) p. e7 t
0 Q& O" I# m3 p  l) V6 b; D( NПоговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.( K$ V+ u% Q% T/ u3 v
Q10516_UnveiledFafurionTemple
# k# ^) q. h  T2 Z$ ^. B3 s- e( m, e( y8 h
Убейте X монстров, а также соберите X предметов / Возврат - награда.1 @. @* C( c8 I* f' I
Q10517_FafurionsMinions
# ?! \. o0 q8 u2 ^& z: @1 i  Q, ?$ k& U' `( ~
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.% U: L1 V% N5 L( T# d0 p# n, o
Q10529_IvoryTowersResearchFloatingSeaJournal1 ]; G2 {; E: [: t5 Z4 Q( R) S
8 M  Q5 j- Y6 R9 ~- l, z
Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.
7 }7 x1 q+ j, `5 k/ O6 }Q10518_SucceedingThePriestess7 F- U/ D# D- F8 ]8 @' H1 K
0 {0 g" p" M0 n7 k' ^: T  u5 E
Участвуйте в убийстве рейдбосса / Возврат - награда.& D" {$ B' {( J% J& x0 r: z
Q10519_контролирование вашей температуры3 f0 j, V) u3 g, o/ z3 K

+ j# @; V% W  Q) R9 m; o3 h( J9 aПоговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.# {6 l  k& A- c9 }0 Q( k
Q10533_OrfensAmbition
  K, k8 K, |: }" [- ~
: \2 n3 Y& W4 B$ E, W2 Z% Z; X3 j6 _) o" q+ d  Q

7 ]' |8 a2 G8 K; \" A5 PРуководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!

9 K% ~; B7 L1 y. F7 F3 M7 X! t! ^9 B( O$ Q
Шаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".( n+ U+ _1 j3 X
! b% S# b" e2 a! h+ `; H
Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".4 |1 E# q" E& B7 {

- }1 Z: Z7 d$ ^; w! rШаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".
$ T% s( z1 M: B3 D6 Q8 s( D0 O8 K# z2 A/ p8 j9 v$ ?/ T6 S
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
8 N6 J9 C! S" F, F
& s1 z2 T) ^6 c7 VШаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.
* Q. V- P' x7 ~
7 C; |9 o$ y3 y2 {4 }Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".
: U) r: w% {& ~5 n
4 b' m$ P# \+ t- Z) Z- z" GЕсли я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.+ G1 W; ~& H' [7 B! V& w: C. ^
, [  T  d  L$ Z2 S: S0 D
Шаг 2:8 Z) s) w! r- A& O2 [  o
8 Q& u0 [2 H; k; D9 c! e
Следующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:
. n- |5 ]* w; {) J3 a+ `! U7 z1 v* ?/ x
4 f8 j! c  }; j& Y! {# f1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. % m6 P: n4 Q4 X, V2 T
Например:
  m% |3 O- o8 I% P. \! S( r3 R2 ^2 G+ P* D* x0 ?# Q+ k3 p* c
  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>;
    + P5 @- D& [3 \4 Y  L* {
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:# G7 a3 }5 U* ~1 V* P

9 u1 y* g% w: E! M
  1. /**3 {, U- n9 z5 j+ `& f  A3 u3 d
  2. * @author NosBit
    - l3 f4 ]- B- F6 Z' n( n3 Q4 U
  3. */
    ! Y' s0 }$ f4 K3 x
  4. public class QuestMasterHandler
    , o/ u- ]5 t! r& ^" t; |5 j8 A8 Q- h
  5. {
    ( s4 H( I5 k* @. O
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());
    - Y  {' i. C3 t5 B
  7.         ; T% e- d* K1 o/ a! t6 W: p
  8.         private static final Class<?>[] QUESTS =
    & `3 N% e0 G7 Q. |) J
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.& Z6 {! V2 x5 S
5 ^# }  O6 Y/ j
% r" r" [. ~' m1 q3 [
Шаг 3:
' y! E' e( T6 m. D7 A; f# x( I8 ~1 I% I1 I3 t, z+ A- g* ~
Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д.
! g% d8 G/ z) Z! o1 FДавайте разберем все поля на основе примера:, a5 f3 J1 P) S* Z4 U: j' K) H% l5 v* w$ u

) \" O) e3 b  }9 X1 w. D% T
  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 x. P, T$ T9 o$ V9 I
Скопировать код
Поля данных:
, v9 i1 @8 s* Y5 f1 T' i& j7 E# I( |& w5 a& ~  t. ?, b
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. 3 j1 C- X) r) f4 X
Пример соодержания
0 F& C6 S% L- U# i$ rВот описание структуры строки:0 E5 g1 d0 o) H- q/ o5 ?9 u% M8 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
Скопировать код
Давайте разберем все поля на основе примера:
5 o$ c; w' `$ q% l) l! U8 D5 d6 X/ i4 u
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.6 a1 q' i2 n& G, L  W! b( b
( j' d2 Z( N# r

3 D! [: n7 R- t( m
/ o3 y  \2 N+ S
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.7 N3 Y3 ^" X. I% h
3 P/ }' I/ ~7 u; S0 ]' G& D3 p! X
Шаг 44 H5 G. K7 P: _
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:. ]- @' {1 @+ Y1 f3 h! a3 C  ^+ k
Пример добавления нового квеста:1 C1 K* C: k, w/ r
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">
    8 _9 G9 P* ~  ^5 N
  2.     <locations>
    # e# p: g* n" C- @
  3.         <param name="startLocationId">2001</param>
    6 ?3 e* b+ I3 h7 V3 f- g, Y
  4.         <param name="endLocationId">2002</param>' G! ~' x0 ^2 M  n# _; a
  5.         <param name="questLocationId">2003</param>
    * \  [. E; t2 H$ |! \7 _* b
  6.     </locations>; S% J$ ^- @( M/ a4 C0 `
  7.     <conditions>( u5 R  ?& S3 J) B+ E- ]- l% |# B
  8.         <param name="preQuestId">20000</param>
    ' ^, v1 `$ ]& R* p, o  n
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->4 N& g' Z" Q2 ?
  10.     </conditions>$ r  B0 _( V' r8 C0 P8 [$ ^6 \8 ^
  11.     <rewards>$ Q& Y( f; @! E( \( C
  12.         <param name="rewardLevel">50</param>: I: X9 J! K0 p" b
  13.         <param name="rewardSp">5000</param>9 {9 `# N. i# q& R5 c! ]
  14.         <param name="rewardItemId">57</param> <!-- Adena -->; n- F! ?/ Z2 ]1 J, h
  15.         <param name="rewardItemCount">10000</param>/ O/ P5 |5 g/ D7 y
  16.     </rewards>+ B* u; p5 Q7 c7 t+ V
  17.     <goals>+ g. K: c( A+ G/ x' ?2 S2 Y
  18.         <param name="goalCount">10</param>
    " w& Z  o; ?' z9 H3 g
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param># e- g$ j* L/ v( e7 y: }  v2 P
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->
    + l9 F) s* _, s' ~1 G, K
  21.         <param name="goalItemCount">1</param>$ c4 H7 E/ L9 B' w- ?  h1 p6 }
  22.     </goals>8 o/ G, m8 E/ D7 {
  23. </quest>5 X# t* s6 T( d; ^+ {
Скопировать код
Описание структуры:, z) {) o# n) c, }: P5 |% q
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.' h* E, t0 G$ Y6 j

/ W! b4 M5 Q! S# F$ J0 ~" jШаг 5. W- B/ ?8 n3 X6 k
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:, ~, `2 Q: l9 U* t" |" V; @
Структура данных3 n, @  z5 U5 W4 z0 v
Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:
' H5 y) g' S9 W9 b# z1 `' `
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end
    1 f1 U2 n+ d6 g
Скопировать код
Разъяснение полей:" Y( v; y4 e& o  E# R5 ]7 z
( ?' v: i' R! [  W! w" _0 q
2 O. \  ?! O2 N' \
Что можно изменить:

  H4 F0 s$ h1 K+ gФайл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:8 H' r1 a9 W7 R/ _" ?  v" p
, V& y5 h% o: l6 \9 R) \! Z
Этот файл определяет основной функционал и настройки для конкретного квеста в игре.7 O8 ?9 H9 \- k, y1 X; n. L: F4 B

* c' K( |( \; W8 O9 W
; F) L4 F- N' l4 {" n. }: ?, d8 t
( n- @- o. p8 }- o; n8 b- E0 [& |% K1 `7 I/ j) r7 {
- H  ^* ~$ F/ @9 b+ o: G
2 v6 n, O% A( I  ~

0 b" n+ f0 Z8 n
: e6 e& k6 N) ~- D2 v* A7 d, L' s. q# p/ F+ L
" A* g! d4 W7 j9 T7 N7 R0 D





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