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

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

Автор: admin    Время: 2024-9-24 00:52
Название: Создание квестов L2j_Mobius
Сборка: L2l_Monius
! v. X4 {+ k0 l% Z, WСледующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.. u' Y' t+ m0 W0 n6 e$ r+ n0 c
8 T$ e  d9 l7 J0 J* P0 D1 u8 ]( L1 v

, B7 f  `. l) r5 t% B) VИди и убей X монстров / Возвращение - награда., p, _! x* n2 V' O3 D  Q
Q00529_RegularBarrierMaintenance: W( q1 R: r) d  }

5 z) h/ |  W2 ~6 D; @, K  fПолучите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.8 M4 |& f0 N% w9 u% ]
Q00683_AdventOfKrofinSubspecies; `" C' d9 E2 m% W0 n
' i, P: A( N- G& Y  y% R* _
Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.  [+ D" B, ?0 v& d) n4 D* F7 u% r
Q10516_UnveiledFafurionTemple
8 ^% o2 E$ ~$ K
1 V& w; V& E! \9 t: ZУбейте X монстров, а также соберите X предметов / Возврат - награда.
/ ?5 T9 H9 q4 v7 |; c. W3 |4 r$ `Q10517_FafurionsMinions) S' u" I8 P/ M9 F; w

/ T0 P1 c" F1 q# Y4 CИди собери X капель монстров / Вернись - убей X монстров / Вернись - награда." Z2 D% j0 v% }& ~; p
Q10529_IvoryTowersResearchFloatingSeaJournal- L0 u2 v0 W- Q
; ]7 ~! c8 i7 J* B0 \$ L0 L
Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.
  |' ^9 N1 D6 GQ10518_SucceedingThePriestess/ M6 {2 y: a% P6 F

6 T% ?: }5 Z) j) I$ u3 E+ A# Y1 T/ GУчаствуйте в убийстве рейдбосса / Возврат - награда.
: v$ a, X5 m! o9 \1 Z: CQ10519_контролирование вашей температуры
* O6 t! e! _- q( F2 [8 m3 v/ J$ a
Поговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.5 F) e* r; S( q
Q10533_OrfensAmbition/ G2 I* b. F1 E- `) j

: U# u. E9 F6 @& j6 |2 a2 f& h* {) r# B, b* T: I$ G* x: O

7 z- u5 D/ `, C9 KРуководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!
' V4 }( E  @$ s; S+ o9 T$ l8 X

0 E8 B1 S/ B# y2 \/ nШаг 1:
Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".
; }* g+ q6 C7 `6 p" D0 l8 g
. Y, {* U; A) s4 X7 e1 n; jШаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".
' S  n; |: @$ S0 q8 t
! c! [9 W5 _: Z7 V, mШаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".
* c( w8 {7 S. |5 l, H
  _, Z% y! Z* o9 ]Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
  g: i9 z( y- \% f  o8 m
5 ^( M$ R5 Y9 t; X7 c! c. \Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.
# W' ~( B7 }! p& m0 ?' ?# n% Q. A) ^! d: f3 L! f5 |
Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".
1 W5 y$ P. R: k6 y% R; k& h3 ^4 a) S3 h2 Y0 X4 |1 u' a
Если я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.
% [1 i5 P+ N) z0 m) `0 v" o) A7 d3 m$ H8 m$ M8 g% r' @
Шаг 2:
9 `9 A' ~0 L+ O+ u
# `0 p( M/ k/ H/ x; y: ^  v* T+ UСледующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:3 @. Z7 M; B6 Z# D2 R8 x3 v: C
/ P5 j4 N( ~/ v% s
1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. & ~& A. l1 H$ X% f! z0 }! U
Например:5 t  u' G1 p3 `' n1 M

7 Y& {" _' D: X! q! x  }3 H$ T
  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 w$ ?! f( J) y
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:# t, a) @& r* Z( Q; U+ N& }! Q

% h" ^! l  O/ j3 @
  1. /**
    , }3 h; i8 u( O5 g8 O3 N" \: |
  2. * @author NosBit
    3 \7 T. ?7 @: j3 W) ~- E
  3. */
    & M; z) F2 p+ k/ c9 f$ ]  z1 l/ m
  4. public class QuestMasterHandler
    " ~9 q3 P0 I. K
  5. {
    / I2 [% H: N6 v0 e. o+ Y; z0 T
  6.         private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());
    " ?- n+ A8 f; g0 d2 H
  7.         
    9 |2 g; ]0 V0 g0 a
  8.         private static final Class<?>[] QUESTS =
    5 }7 q, {! t' Z/ E
  9.         {
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.
; O* @, f7 w% O+ H  o
/ ~( N3 M0 o5 H3 b* L" d; s" i" F: k) U- g
Шаг 3:0 u! H7 \, W. n; O

; f1 V6 B1 N; R: mФайл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д.
/ z% R" P% b: b& g& AДавайте разберем все поля на основе примера:
) G: _9 f0 l2 o# }1 \  H
6 k5 E4 P, {0 v+ z' v7 X
  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
    6 ]3 d( B0 N7 l& }% E4 G) ]; `
Скопировать код
Поля данных:4 U) r5 k1 H0 D- X$ @3 u
8 t0 I6 v9 {8 K1 H" y
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре.
5 m$ y" Y+ T$ k/ \$ WПример соодержания
6 N/ e6 n  i' ^' l  L8 e: l4 yВот описание структуры строки:9 x* i* M' f6 U7 c2 y/ K
  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
Скопировать код
Давайте разберем все поля на основе примера:
8 k" t% a4 \( N/ T
- n5 S/ V  J: f5 F# \2 U; jЭта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.5 i5 R2 d) x$ b" O6 d; `: Y

* x) s6 x1 Y. k% F/ v; {& \- x
1 a9 y; Y# b3 n5 c

% O2 Q" N- H, h; kСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.
- Z' ]. n, Q/ c$ ~3 n( E. x( e& t) Q6 d, I6 O
Шаг 40 g0 }0 F( {# O8 q# d# ^
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:6 d  Y) j3 q! E. ^" Z( }/ h
Пример добавления нового квеста:: A- X% t6 s3 r/ l" e9 V: J
  1. <quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">6 e& x: q/ E3 V) \* M
  2.     <locations>7 V. D% u2 v7 u0 v4 R& R' }
  3.         <param name="startLocationId">2001</param>: I; t. ^) h: C2 r( m
  4.         <param name="endLocationId">2002</param>
    / _" n) d+ W- o/ T) [
  5.         <param name="questLocationId">2003</param>
    9 r) s# R/ M5 p3 g8 g/ D8 t1 r
  6.     </locations>
    4 c9 c' H/ V# @+ @, ?
  7.     <conditions>0 ]! V- B4 I4 C
  8.         <param name="preQuestId">20000</param>
    8 b& S5 r8 L* w
  9.         <param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас -->3 s" L6 d0 A0 I% J0 u3 `: O
  10.     </conditions>
    4 v; b) U1 a! M7 E& w# z) d' B1 o+ c
  11.     <rewards>
    / z3 A  y2 B- u  Y5 q' q# k
  12.         <param name="rewardLevel">50</param>  V& z; u* M& k) v* {
  13.         <param name="rewardSp">5000</param>
    / s: A. x3 D. I5 {3 H
  14.         <param name="rewardItemId">57</param> <!-- Adena -->- l# T" J. C1 P2 D% L) @* R
  15.         <param name="rewardItemCount">10000</param>3 k1 `% b9 V" t/ y3 F# G) X) i% z
  16.     </rewards>
    7 a+ a& c# [# F4 e
  17.     <goals>2 w. f* |2 ?& D% C; a: q
  18.         <param name="goalCount">10</param>' m8 }, w/ J/ O+ w# a+ V1 Q" j
  19.         <param name="goalString">Defeat monsters in the Ancient Forest</param>
    ) [/ z& `' j1 J; t# t) q3 z' W  N
  20.         <param name="goalItemId">92000</param> <!-- некий квестовый предмет -->
    # p' z3 m3 P2 {3 V, O  ^" [4 h
  21.         <param name="goalItemCount">1</param>
      h- e+ C$ ^; k8 W% I
  22.     </goals>
    ( J. ^  `$ {( m4 E/ I
  23. </quest>
    4 y3 W3 @% ^, g' s4 Z7 x
Скопировать код
Описание структуры:2 Q+ W8 \8 }# y8 D3 ?- f! ?
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.
# Z2 k: m/ i9 `# {' I" v3 o% L
3 U' z! S. Z. ~0 z" rШаг 5/ l, E5 C% q! M% E9 f) x' X
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:
; J" B* k6 _" sСтруктура данных" i6 H% m1 r/ n# z; y
Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:2 x8 l8 ]9 M9 W& J* b2 w
  1. NewQuestDialog_begin        QuestId=98765        Text0=[Вы готовы принять новый вызов и доказать свою силу?]        Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.]        Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.]        Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.]        Text4=[Поговорите с Дарти. Кликните на него и начните диалог.]        NewQuestDialog_end! b2 k& k0 c8 G" f- s
Скопировать код
Разъяснение полей:4 K. U9 z; n; o: C

9 o) a. E8 N1 F  ]3 F
" h! ?6 E$ o4 i; N: g; P8 OЧто можно изменить:
7 z% D1 A$ z* a  ]
Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:( t0 \0 _* Y( h+ u

! N/ h. v6 s5 u0 ]! h! FЭтот файл определяет основной функционал и настройки для конкретного квеста в игре.; J. H% U& K& \" g! Z9 l. O

6 g) H4 ~* u0 J$ Z  P/ a- g( L$ n: ^8 y' ?4 w

" y2 s& C* ^: a. C5 Z
) @7 q: [/ k% r! z3 o
2 }4 s' o  [4 j6 o  w7 |: P: w; k! Q& K- Q
: ?' K) I. C' q
5 |* B6 d! d+ @/ t

0 P7 T9 h  L1 [/ o; B7 b2 J4 P7 }
/ x' F  {! E5 R4 I/ \




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