Название: Создание квестов L2j_Mobius [Версия для печати] Автор: admin Время: 2024-9-24 00:52 Название: Создание квестов L2j_Mobius Сборка: L2l_Monius " K. p8 d1 s& h" M# rСледующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk. 0 H: d, _1 [! f7 W, d/ n8 c3 r) Q/ d+ q3 g/ w, Y" J4 M
+ }2 P8 t0 C" {
Иди и убей X монстров / Возвращение - награда. 0 M- X3 M! f7 q) i lQ00529_RegularBarrierMaintenance/ w0 X( k2 c! @
4 x* S: t G9 ~# ~8 V& l( C0 @Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой. & f8 V4 x* Y4 zQ00683_AdventOfKrofinSubspecies' N/ R+ N3 j$ v8 K9 H, n
' F: K# T+ E/ H! cПоговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда. % m, [$ K9 S( L2 @! Q8 K- k& Q$ w* \3 |Q10516_UnveiledFafurionTemple# Y' J) u4 ^+ f) m9 A
8 R1 m1 T$ R x+ d# h% A
Убейте X монстров, а также соберите X предметов / Возврат - награда. . S0 ?- }6 b7 V5 a3 O& u" {Q10517_FafurionsMinions9 Y+ W# f) y" u) J
1 {5 C9 Y1 O% Z S2 Q! H& {0 ZИди собери X капель монстров / Вернись - убей X монстров / Вернись - награда. & E& Y- g. Y) K YQ10529_IvoryTowersResearchFloatingSeaJournal' B$ D# y5 q+ f) m6 a! c# r
9 @4 v! H, Y0 Z. A- m% r8 ^, R$ X
Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.3 r% }4 {/ P+ C. d: x. A2 [; P' b
Q10518_SucceedingThePriestess 0 E5 r6 ]" _5 r- n) D) b8 \" L' F% f: M M
Участвуйте в убийстве рейдбосса / Возврат - награда. 7 ?3 h; q/ k: s) z: JQ10519_контролирование вашей температуры4 ^% _0 ^$ E/ x' ]
0 ^& B9 r' o" z- C8 H, Q/ VПоговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.4 `8 ^ O/ s) N
Q10533_OrfensAmbition- |( m+ [2 Y: ]# q; u: j* P
" I0 N4 y/ l; x" e8 e( U* Z* c6 a
- c7 D$ I5 [) j. Q' ^
/ E, h' E9 s3 M2 r8 {Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста! 8 \) l* L: T' D4 c2 B4 M$ r, {2 g! N4 i# |5 `/ k6 H5 ^7 _
Шаг 1: Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest". g! A5 n+ ~& ]; @2 w* f- z 0 r+ ~& a) T( G2 DШаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java". & m% E6 ?" T1 q' }4 }! X, g6 g* ]) s2 W" j Шаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".' y: E; o; r. _1 v
* e" c. [* Y& r0 }/ m7 A
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.# W! s1 J! h( U/ C4 y. C, j/ j
2 p+ \9 F9 c; R% O2 PШаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест. - R; \: w) [) M) ?! f; {# x0 O# y3 E0 x) B) s Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat". 7 V3 E! m! ]" Q5 ]1 A ( z/ t; G6 W9 i3 c6 j6 E, A1 MЕсли я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.' @$ H6 h5 F# q: v# S$ c+ G
, ~ h; j q0 l1 mШаг 2:, S9 @2 K+ {6 U/ g" S
' U; j: `4 K$ L, g, K3 r# DСледующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:. ^- g9 u/ M/ x" r
* `6 ^( x$ z4 J' u3 w" h: Y( s l 1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. E( f/ J6 p1 d& S+ x0 D! rНапример:$ B% x# T- n4 q- P, W
s" j1 \" l" T3 e1 y, z
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:* O; |# s* D# K7 `( [
) M) |( |) T9 @2 U4 H+ h0 f
/** 9 k* m& w" _% K" N& r
* @author NosBit - ]1 R# M" w& [1 A" X( F7 h2 w
*/# s9 R' V# ^, z/ N+ A
public class QuestMasterHandler# g) p8 H% O; @8 X
{ , @9 h. O0 E8 r b; s: e
private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());/ m$ Q) t) ]7 c" A9 q7 D
9 Q6 s4 c9 `* V5 v
private static final Class<?>[] QUESTS =- I5 O& V3 u' R1 A1 a
{
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами. " T! L2 n3 @8 K$ u( {9 E8 t) c1 J) L- A6 y
* t4 M; ^$ m7 O( `; @& Q) M- f Шаг 3: . T& h6 Y8 {; h2 l) o8 @ x% \" M % u7 b% g" P) |! F- U- @8 {Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д. % B6 F" n) D' WДавайте разберем все поля на основе примера:9 z- Y" Q7 Q! y" E `4 V* q
' v5 K( j2 p+ P& y
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: s9 U* I( V/ `/ B9 T" i
Скопировать код
Поля данных:
quest_begin — начало записи для квеста.
tag — идентификатор типа данных. Может использоваться для группировки квестов или идентификации квестов по определённым категориям.
id — уникальный идентификатор квеста. Должен быть уникален для каждого квеста.
level — уровень сложности квеста. Используется для группировки и показа квестов, подходящих по уровню.
title — название квеста, которое отображается в интерфейсе. Заключено в квадратные скобки.
sub_name — подзаголовок квеста, используется для дополнительного описания. Заключен в квадратные скобки.
desc — описание квеста, которое появляется при его принятии или выполнении. Здесь также используется разметка с символами переноса строки (\n).
goal_id — идентификатор цели квеста. Может содержать ID объекта или персонажа, который нужно достичь.
goal_type — тип цели. Указывает, какого типа задача ставится перед игроком (например, убить монстров, собрать предметы).
goal_num — количество необходимых действий для завершения цели. Например, количество монстров для убийства или предметов для сбора.
target_loc — координаты (X, Y, Z), куда должен отправиться игрок для выполнения задачи. Координаты указываются в формате {X;Y;Z}.
add_target_locs — дополнительные целевые локации, если квест предполагает несколько мест назначения.
q_level — уровень сложности или рекомендованный уровень для выполнения квеста.
lvl_min — минимальный уровень персонажа, с которого квест доступен.
lvl_max — максимальный уровень персонажа для выполнения квеста. Если не указан, то квест доступен на любом уровне выше минимального.
journal_disp — параметр, определяющий отображение квеста в журнале квестов (например, на каком этапе он должен отображаться).
entity_name — имя NPC или объекта, который связан с выполнением квеста (например, кто выдаёт квест или с кем нужно взаимодействовать).
get_item_in_quest — указывает, должен ли игрок получать предметы в ходе выполнения квеста. 0 — нет, 1 — да.
unk1 — неизвестное поле, возможно зарезервировано для будущих функций или модификаций.
unk2 — аналогично, поле с неизвестным назначением.
start_npc_id — ID NPC, который выдаёт квест. ID указан в фигурных скобках {}.
start_npc_loc — координаты NPC, который выдаёт квест. Используется формат {X;Y;Z}.
q_requirement — дополнительные требования к выполнению квеста, например, наличие определённого статуса или ранга (например, "Дворянин").
quest_intro — вводное описание квеста, которое отображается при первом контакте с NPC.
class_limit — ограничения по классам персонажа. Указываются ID классов, которым доступен квест.
have_item — список предметов, которые должны быть у игрока для выполнения квеста.
clan_pet_quest — указывает, является ли квест клановым или петом. 1 — да, 0 — нет.
cleared_quest — указывает, выполнен ли квест или нет. 1 — выполнен, 0 — не выполнен.
mark_type — тип метки, связанной с квестом. Используется для отображения различных иконок или маркеров на карте.
category_id — ID категории, к которой относится квест. Может использоваться для фильтрации квестов по категориям.
priority_level — уровень приоритета квеста. Чем выше значение, тем приоритетнее квест для отображения и выполнения.
search_zoneid — ID зоны, в которой происходит действие квеста. Определяет область, в которой игрок должен выполнять задание.
iscategory — указывает, является ли квест частью категории квестов (например, кампаний или цепочек заданий).
reward_id — ID награды за квест. Может быть несколько наград, указываются через точку с запятой.
reward_num — количество каждой награды, соответствующее полю reward_id.
pre_level — предварительный уровень или дополнительные условия, которые должны быть выполнены до начала квеста.
faction_id — ID фракции, к которой относится квест. Может быть использован для фракционных квестов.
faction_level_min — минимальный уровень фракции, необходимый для выполнения квеста.
faction_level_max — максимальный уровень фракции, при котором квест доступен.
quest_end — завершение записи для квеста. J9 z0 ^: w# B" S; |+ D& T7 K0 m
- p- x% J, e! M
# ]/ M% P7 l5 B
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. : F9 @, w; k" ~) X
Пример соодержания % b' Y+ i% j1 X5 vВот описание структуры строки: 9 s4 J5 r c l2 H; @# ~1 ~! Y
Давайте разберем все поля на основе примера: * X3 m' e# t; p& X1 Y9 Q5 }% I- b4 Q; C: ]
questmark_begin: Указывает на начало записи о квесте.
quest_id=10331: Идентификатор квеста. В данном случае, квест с ID 10331.
npc_id=32153: Идентификатор NPC (неигрового персонажа), с которым игрок должен взаимодействовать для начала или выполнения условий квеста.
race_filter={0}: Фильтр по расе. Указывает, какие расы могут участвовать в квесте. В данном примере {0} может означать, что квест доступен для всех рас или для определённой расы (например, 0 - для всех) .
class_filter={0;10}: Фильтр по классу. Указывает, какие классы могут участвовать в квесте. В этом случае {0;10} может означать, что квест доступен для классов с ID 0 и 10.
start_npc_loc={-118017.0;255965.0;-1320.0}: Координаты начала взаимодействия с NPC. Эти координаты определяют место, где находится NPC в игровом мире (X, Y, Z).
questmark_end: Указывает на конец записи о квесте., S" R6 @' |0 w2 O% M4 ~
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.% ~8 o8 H. Q1 h% H5 C2 @# U
. K8 ]) `- J5 j% |+ E+ S, I4 G / I7 I, N3 |& B, Z # Z T& h) O* {7 U! Q+ H# \& QСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов. : L& F. ?- ]! _# F, [; O1 s9 k& ~5 y* C4 ^: `5 Q; ] Шаг 40 R. \: T: E. P: G
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть: - i8 _4 t" n6 i0 q0 {9 b4 KПример добавления нового квеста:% h% d. F; `4 @0 ~0 Z7 B5 @ o
<quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">0 M' |- B/ _" M, N; Y% H
<locations> ) x$ C+ d: H6 n+ R% L8 H
<param name="startLocationId">2001</param>1 F8 k% {5 V% s( a2 {" H
<param name="endLocationId">2002</param>; L) B3 z5 F8 N4 i' l
<param name="goalItemCount">1</param> . d- Q6 l7 @$ O& j h, q, z
</goals> " D; W! O9 O/ O3 m/ _% t/ j
</quest> ) T" X; p/ @0 ?% Z" P) _- j
Скопировать код
Описание структуры: ( i$ G+ o' l( V& n) n. L
quest: Основной элемент квеста, содержащий атрибуты:3 H: Z3 L- f1 I7 o G% @9 ~( b
id: ID квеста, уникальный для каждого квеста.
type: Тип квеста (1 – обычный квест).
name: Название квеста.
startNpcId: ID NPC, с которого начинается квест.
endNpcId: ID NPC, у которого квест заканчивается. . d0 w$ t6 o( f2 R, D
locations: Указывает места начала, окончания и квестовой активности. + I2 O% G9 {; H. ]2 t
startLocationId: ID места, где начинается квест.
endLocationId: ID места, где квест заканчивается.
questLocationId: ID квестовой зоны.; T) u& r+ k* O9 T
conditions: Условия для начала квеста.2 x$ U1 l( I8 C6 `) v" p m a
preQuestId: ID предварительного квеста (если есть).
classIds: ID классов или рас, которым доступен квест. 9 d9 [* v3 ~. `
rewards: Награды за выполнение квеста.2 R* ~1 d1 G9 j' S( r# ?; t9 H
rewardLevel: Минимальный уровень для получения награды.
rewardSp: Количество опыта (SP).
rewardItemId: ID предмета (например, Adena).
rewardItemCount: Количество предметов.; m( b/ O* ]5 {
goals: Цели квеста.; w4 j- @( w; Z" t& _$ r+ T i3 S
goalCount: Количество монстров, которых нужно убить или предметов, которые нужно собрать.
goalString: Описание цели.
goalItemId: ID квестового предмета (если требуется).
goalItemCount: Количество квестовых предметов для завершения цели. 3 T% o3 g: J0 F w- g: ?
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.* J6 I* I+ `( K% U
" Y, a# a! N- J) Y) \5 |4 nШаг 5 ( ^5 m- W( Q8 kФайл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:( @# K9 o/ a! k7 d Структура данных
NewQuestDialog_begin — начало записи квеста в файле диалогов.
QuestId=10001 — идентификатор квеста (должен соответствовать ID, который ты используешь в других файлах).
Text0=... — первый диалог, который обычно отображается при старте квеста.
Text1=... — дополнительный текст, который отображается на различных этапах квеста.
Text2=... — текст, который отображается после выполнения определенных действий (например, после выполнения части задания).
Text3=... — дополнительный диалог, например, при встрече с NPC на следующем этапе квеста.
Text4=... — финальный текст или инструкции по следующему шагу для игрока.
NewQuestDialog_end — завершение записи для этого квеста. 9 I' v' A4 k. n" x( Q
" N' X x$ }+ ^ Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:) V7 l% B% C+ M9 S
NewQuestDialog_begin QuestId=98765 Text0=[Вы готовы принять новый вызов и доказать свою силу?] Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.] Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.] Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.] Text4=[Поговорите с Дарти. Кликните на него и начните диалог.] NewQuestDialog_end, |; y4 O, _0 t5 s
Скопировать код
Разъяснение полей: 1 a6 R4 ^# n- O
QuestId=98765 — уникальный идентификатор нового квеста.
Text0 — вводный текст квеста. Отображается при первом контакте с NPC.
Text1 — дополнительный диалог, который дается игроку для создания контекста.
Text2 — текст, который отображается на следующем этапе квеста, например, после выполнения части задания.
Text3 — описание следующего шага или инструкции для игрока.
Text4 — финальный диалог или текст с указанием цели (встреча с другим NPC).0 `7 ~9 g# g* N8 t2 n
6 O5 O) W* X! w 2 I* m& P( J* W! {Что можно изменить:
Тексты диалогов (Text0, Text1 и так далее) можно адаптировать под конкретные ситуации в квесте.
Количество текстов можно варьировать в зависимости от сложности квеста.! z- w. h8 `. d0 ?
& J! o; E: B! \1 v9 T
Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла: 3 f, P( I0 X' R7 P% r* |' K1 i8 f ' J5 _1 K2 e2 Y
newquestdata_begin / newquestdata_end: Эти параметры обозначают начало и конец блока данных квеста.
quest_id=10001: Уникальный идентификатор квеста (ID). В данном случае это квест с ID 10001.
quest_type=1: Тип квеста. % r- j5 i7 c- t t* }
1 обычно означает стандартный квест. ! i% Y: d% a0 ^( ]4 P( w
quest_name=[Новый путь]: Название квеста. Здесь указано "[Новый путь]" — это имя, отображаемое в игре.
Первое значение указывает минимальный уровень, второе — максимальный уровень.
{0;0} означает, что нет ограничений по уровню. ( C$ y9 m# x: i% e$ m4 D
pre_quest={}: Предварительный квест, который нужно выполнить перед началом этого квеста.1 {. w! P! E4 S; q. u" f; ]
В данном случае он пустой {}, что означает, что нет предварительных требований.# K/ g+ c7 f% ]* i
class={0;10;18;25;31;38;44;49;53;123;124}: Классы или расы, которые могут брать квест. ) H! Y# H5 _# ]% a/ l4 s
Номера классов указывают на те классы, которым доступен этот квест. В данном примере классы, такие как 0 (человеки), 10 (рыцари) и другие, имеют доступ. % Q7 X( R: B6 X, o
quest_item=82948: ID квестового предмета, необходимого для выполнения цели или этапа квеста. $ b# ?3 Q3 M/ \' H6 c z& e
В данном случае это предмет с ID 82948. ' B+ [# i$ m# K1 h
start_item=0: Предмет, который выдается при начале квеста. x: Y) |5 r! w; R. M* N$ {7 j* E; ?" z
Значение 0 означает, что предмет не выдается.# }& J' L$ B# i/ o$ u$ R
start_npc=34505: ID NPC, у которого начинается квест.
start_npc_loc=1002: Локация NPC, у которого начинается квест. % \0 |# i. P1 Z! g. \ m
Это ID локации, где находится стартовый NPC.. o0 {* C% y' z1 b3 W1 V: B+ r1 k
end_npc=34696: ID NPC, у которого завершается квест.
end_npc_loc=1003: Локация NPC, у которого завершается квест. + b0 T8 d3 M9 P( x: h! |
Это ID локации, где находится конечный NPC.* Z# B- D3 ~9 N
quest_loc=1003: Основная локация выполнения квеста.+ b- k7 W! `, \- F ?5 l- [
Это ID зоны, где нужно выполнять основные задачи.) R. Q+ E e2 {4 v
goal_string=[Дарти (Зона Тренировки)]: Описание цели квеста.2 W, e* e8 f3 l0 q& u
В данном случае цель связана с персонажем по имени "Дарти" в Зоне Тренировки. 8 n- J" m4 P' v' J" ? F$ n7 w
goal_num=1: Количество действий, необходимых для выполнения цели (например, убийств монстров или сбора предметов). ( Z0 O9 r2 H. P3 \ x9 k0 R
В данном случае нужно выполнить одно действие (1).. A3 p) b- R$ Z7 ^
reward_level=65535: Уровень, при котором можно получить награду. ' j }! F) B2 @. W
В данном случае это максимальное значение, указывающее, что награда доступна всегда. / R" }) v1 \1 k+ i8 _) \
reward_exp=0: Опыт (EXP), выдаваемый в качестве награды. . {, n6 H, y2 V0 n
В данном случае опыт не выдается.. Y* d+ W3 ?' w {( b) }! b: y
reward_sp=0: Количество SP (Skill Points), выдаваемых в качестве награды. + N$ Z1 F! a- {1 ]1 A4 B* x# d
Здесь тоже 0, значит, SP не выдаются. 5 I8 J2 z+ `/ K/ R0 ?2 X
reward_item={}: Наградные предметы. . {: T) V) c2 n( Z q# {. d
В данном случае наградные предметы отсутствуют. ( m; H+ W2 S" R
Этот файл определяет основной функционал и настройки для конкретного квеста в игре.6 v- k7 f/ g$ X3 a# F
" \. z/ }4 g0 [: U9 h6 o# Z1 d
) O2 n6 P. g+ n; n" v " c2 U( K% W% A% c' I0 D" ~3 ?' ~ ; y! B$ m* t: I1 y. Z! U, Y9 v7 i9 ?0 V- u
5 p4 [' [+ k j
; S u+ p2 ]1 Q5 I% n3 a7 a% G: B' r+ j# W' ^/ h" Y0 E
8 Q' ^7 h5 s' o+ u0 X/ T) F. X2 q: N& a( k' c6 i
Добро пожаловать artace.ru - творческий сектор (https://www.artace.ru/)