Название: Создание квестов L2j_Mobius [Версия для печати] Автор: admin Время: 2024-9-24 00:52 Название: Создание квестов L2j_Mobius Сборка: L2l_Monius 4 g) R: Z/ C8 n$ T1 ?% i# F
Следующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk. & ]2 A( y& o* |& g* s, y. ~ 9 t9 T$ d3 o" R: @# e5 @" i. L8 ^3 N6 R
Иди и убей X монстров / Возвращение - награда. 9 v6 r! f. r% Z+ C9 t* DQ00529_RegularBarrierMaintenance 8 @8 e, C# f+ l6 v! B, x- t5 i% H& H2 v# @
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой. # x: r/ u/ f6 N" q6 c8 X" } k. R3 pQ00683_AdventOfKrofinSubspecies$ t6 x. t C8 M5 T" p, Z
1 w3 e! D0 w5 o) Y& ^Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.+ w7 Y- \1 p, p4 J
Q10516_UnveiledFafurionTemple * x( g( i# U I9 D. i + [, H7 d# p( s: v9 j$ V) CУбейте X монстров, а также соберите X предметов / Возврат - награда.9 A3 Q: Y: j3 Y8 @- x8 _
Q10517_FafurionsMinions6 w% W- h e8 t8 }
5 p4 J& I' ^6 XИди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.2 z! l! T) l) x. G
Q10529_IvoryTowersResearchFloatingSeaJournal 2 W0 G! w+ U: `6 V U6 R/ j7 K5 T ]: k! w$ V; k3 o
Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.+ x" C2 K6 I2 i
Q10518_SucceedingThePriestess' K& D3 N0 Q! e! E# H0 o# m+ a
* ~6 u5 L0 O3 ` b6 l Z! z9 s: t: d- O
Участвуйте в убийстве рейдбосса / Возврат - награда., q' x! k- c% L0 E" N4 b
Q10519_контролирование вашей температуры 1 H; n2 u K$ z, ?6 T2 ^2 v 8 `% `3 z/ ?3 n0 y; |. rПоговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда. ' z2 _- A$ I E3 u# JQ10533_OrfensAmbition7 L p$ U( G/ S8 |6 Y
$ t" e# ]( M: O3 n* H+ O& b4 z& ]' i' J3 n6 d
: N' {' t* q4 `$ z; J, V- M$ X Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!5 g' B# X `7 A 6 L/ a R3 B8 h* Z
Шаг 1: Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest". 9 w: E5 U* M) B& x& m; B , V* u/ G7 B: V4 a- E iШаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java". 3 [; Y! b) a7 h6 t/ K+ h/ |6 T 8 }5 Q* e( O* @! l# JШаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".* F K3 o" A) f. a5 f
8 I5 {* n; J2 H9 ` p. g. {" x% NСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.' e N1 M0 |) d5 @: t
9 z: @3 |5 l7 }6 }9 Z( CШаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест. h& E; A, n4 g+ R! E+ q! P$ X Q; ?/ M Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat"." I- n- \ t2 L" q5 Q) F
* ?( }& |; m* mЕсли я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях. ) [6 b' q. R3 r9 q/ e, \5 N% T4 }3 j* r u A$ j Шаг 2: 1 z3 N* i$ X" H5 D' K: }, B! O ; e# H) _5 N! A( j3 H7 D4 BСледующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план: 3 z, _' u3 ?; |. `9 [% z& L5 V3 @1 w4 ] 1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. # y. [1 Y+ L& ?& ]: iНапример: 3 p$ @' M2 J9 u% G. J ( H4 W) _8 |$ d/ _
import quests.<span style="background-color: rgb(255, 255, 255);">Q98765_NewQuest</span>.<span style="background-color: rgb(255, 255, 255);">Q98765_NewQuest</span>;$ k2 H. s( U' e$ j+ E. g
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:+ }% r0 m! r) k1 j8 F _! \# I
' C) e( U/ h: G! a2 D% X
/**5 I' l7 v( {# v9 D) B) ]! h( ^. X
* @author NosBit . n/ A; ~9 B" I$ d- i
*/6 {7 Y! U0 |) K9 J9 h8 X
public class QuestMasterHandler 0 g# `1 P9 O- F* G' `
{8 N" E2 C; U7 S" x' @
private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName()); 3 {9 p( `( t4 q9 v. [& P$ j2 {
& x% S) f# m9 @4 G8 N! N; R
private static final Class<?>[] QUESTS =" b2 j3 A1 ]7 U( e* o* ~, F1 _$ r
{
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами. " k; J# D* S; @# e8 b; D1 k4 {' l7 }% x
8 ]/ s9 q! ^, }) N/ R& I6 O0 YШаг 3:: ^; q) T( Q/ y: X, Y) q
6 S( f/ g7 W- G5 t* j, V
Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д. - n$ I- E: n( o, Q
Давайте разберем все поля на основе примера: 0 p' L# l) L; h+ k. o/ \1 q Q* w) S* |& V" V5 W x
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' N9 J7 a8 i; Q
Скопировать код
Поля данных:
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 — завершение записи для квеста. 6 u/ C1 R# D0 {& I
6 s$ ]( n" `1 v" y4 c2 J# m! O0 c `: O+ F: _3 R- F( x7 v
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. ! G% V* x- b1 g" y. S. @+ C% z" s& `Пример соодержания, b) O1 u1 c9 S1 w. v4 `9 \/ n, R
Вот описание структуры строки:# {5 b+ u' x" N- X" }
Давайте разберем все поля на основе примера:0 J, e" C: i# o( d, A7 A
; {7 W3 _) T8 O4 D
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: Указывает на конец записи о квесте. : f( D/ O+ `& u
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC. 4 u0 k$ R: x1 M( E6 p( u7 x& E$ q* s' e9 x1 u0 ^4 @* v) k
/ N( @; ^/ j s, @6 Y0 S6 h
/ D( U1 N( q+ g) S u$ ^Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.7 k% D) s1 c" @) e! t
- m: V$ ]* V% k/ C) d( tШаг 4 1 K" T9 p1 l0 QДля того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:/ V1 V8 m* b! W8 ^2 D' W
Пример добавления нового квеста:7 a" C; |) p# j( n. z
<quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">4 }5 ]: N; h5 x6 Z+ ?
<locations># Q5 E8 _) P3 R
<param name="startLocationId">2001</param> 7 W. M; ^* h! K L' y
<param name="goalString">Defeat monsters in the Ancient Forest</param>1 W: h q. Y, T' u6 I
<param name="goalItemId">92000</param> <!-- некий квестовый предмет -->' i) C$ q1 Q1 s. I7 C+ l
<param name="goalItemCount">1</param>! |* t a2 V- }! ]
</goals>- N a. o7 A: _" H9 _7 z; [( P
</quest>: D6 z5 m3 m8 x$ c# ]3 Q, o" A& @2 ?- R
Скопировать код
Описание структуры: / Q% t: S W! r6 _: j% k
quest: Основной элемент квеста, содержащий атрибуты:* u5 q' ]' J) _7 r& c
id: ID квеста, уникальный для каждого квеста.
type: Тип квеста (1 – обычный квест).
name: Название квеста.
startNpcId: ID NPC, с которого начинается квест.
endNpcId: ID NPC, у которого квест заканчивается. % X- R& z4 N$ U
locations: Указывает места начала, окончания и квестовой активности. 3 d3 q4 G# k! R0 t- }9 n/ z
startLocationId: ID места, где начинается квест.
endLocationId: ID места, где квест заканчивается.
questLocationId: ID квестовой зоны./ P( ^6 }6 n# O- y+ d3 S
conditions: Условия для начала квеста. " E* U$ H" Q' z% n) O
preQuestId: ID предварительного квеста (если есть).
classIds: ID классов или рас, которым доступен квест. `7 `" X- }: R( |2 z" t
rewards: Награды за выполнение квеста.# U m8 O5 i. [0 M7 o. U- S. ^. U
rewardLevel: Минимальный уровень для получения награды.
rewardSp: Количество опыта (SP).
rewardItemId: ID предмета (например, Adena).
rewardItemCount: Количество предметов.* t, {& t3 g* M
goals: Цели квеста.$ J+ ?0 r0 U3 C
goalCount: Количество монстров, которых нужно убить или предметов, которые нужно собрать.
goalString: Описание цели.
goalItemId: ID квестового предмета (если требуется).
goalItemCount: Количество квестовых предметов для завершения цели. 8 ^* H7 ?7 t! y e, p0 W
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу. 7 U9 s: P: N. j+ C3 t" N* l4 f+ j # ~! |# \# o, j5 B; k nШаг 5" v+ b. s6 E0 l. ?" p) m6 M) T+ a
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:3 ]1 ?/ @! F& b6 u/ } Структура данных
NewQuestDialog_begin — начало записи квеста в файле диалогов.
QuestId=10001 — идентификатор квеста (должен соответствовать ID, который ты используешь в других файлах).
Text0=... — первый диалог, который обычно отображается при старте квеста.
Text1=... — дополнительный текст, который отображается на различных этапах квеста.
Text2=... — текст, который отображается после выполнения определенных действий (например, после выполнения части задания).
Text3=... — дополнительный диалог, например, при встрече с NPC на следующем этапе квеста.
Text4=... — финальный текст или инструкции по следующему шагу для игрока.
NewQuestDialog_end — завершение записи для этого квеста.) c2 R" Z* H2 |- X& ~- @
' B( H: T+ h: u" h5 _6 S; k* c3 t. e Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так: ; n4 U! w* X% T& x
NewQuestDialog_begin QuestId=98765 Text0=[Вы готовы принять новый вызов и доказать свою силу?] Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.] Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.] Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.] Text4=[Поговорите с Дарти. Кликните на него и начните диалог.] NewQuestDialog_end7 Q7 @" F& h2 ?3 j2 s. L
Скопировать код
Разъяснение полей:) K0 T4 k/ a9 Y4 @/ I! j
QuestId=98765 — уникальный идентификатор нового квеста.
Text0 — вводный текст квеста. Отображается при первом контакте с NPC.
Text1 — дополнительный диалог, который дается игроку для создания контекста.
Text2 — текст, который отображается на следующем этапе квеста, например, после выполнения части задания.
Text3 — описание следующего шага или инструкции для игрока.
Text4 — финальный диалог или текст с указанием цели (встреча с другим NPC). y1 R$ }( u( L1 _4 L9 x
; Q+ C+ v0 V/ a: b1 G1 m" i$ u# l. \7 P0 R# J. z3 W2 d# |
Что можно изменить:
Тексты диалогов (Text0, Text1 и так далее) можно адаптировать под конкретные ситуации в квесте.
Количество текстов можно варьировать в зависимости от сложности квеста. # ?1 x2 Z' z0 H
5 t" |! r4 `' N" eФайл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла: # B6 i: i! }9 R) p1 K& Z ^ ; f' b n/ {5 y0 V) @8 g6 I
newquestdata_begin / newquestdata_end: Эти параметры обозначают начало и конец блока данных квеста.
quest_id=10001: Уникальный идентификатор квеста (ID). В данном случае это квест с ID 10001.
quest_type=1: Тип квеста.6 F* P; A: R A2 R# c3 W; d; F4 q
1 обычно означает стандартный квест. ! {1 i, H% J: \: ~ o% f
quest_name=[Новый путь]: Название квеста. Здесь указано "[Новый путь]" — это имя, отображаемое в игре.
quest_level={0;0}: Уровневые ограничения квеста. 7 h% I3 g& b$ L
Первое значение указывает минимальный уровень, второе — максимальный уровень.
{0;0} означает, что нет ограничений по уровню. . t( n# U2 I( S7 ?, k
pre_quest={}: Предварительный квест, который нужно выполнить перед началом этого квеста., q0 B& J' B h
В данном случае он пустой {}, что означает, что нет предварительных требований. ; Y0 }8 z9 W+ J% u. ?
class={0;10;18;25;31;38;44;49;53;123;124}: Классы или расы, которые могут брать квест. ! d: }2 Z# N$ f% J/ N: K
Номера классов указывают на те классы, которым доступен этот квест. В данном примере классы, такие как 0 (человеки), 10 (рыцари) и другие, имеют доступ.5 n1 u! T ~" J+ t+ S6 x" E
quest_item=82948: ID квестового предмета, необходимого для выполнения цели или этапа квеста. 2 {+ I& Y$ Q c/ t5 M/ p" U( I
В данном случае это предмет с ID 82948.3 E4 h$ ?: h5 z d) F$ |$ U. C) ]
start_item=0: Предмет, который выдается при начале квеста.# z! @+ K8 c0 |4 p9 n
Значение 0 означает, что предмет не выдается.( z" |! q5 E. [8 _5 J
start_npc=34505: ID NPC, у которого начинается квест.
start_npc_loc=1002: Локация NPC, у которого начинается квест.5 I2 r1 T2 m, l/ K
Это ID локации, где находится стартовый NPC., Z: b1 a* g8 Y5 I; V P5 L$ p9 H
end_npc=34696: ID NPC, у которого завершается квест.
end_npc_loc=1003: Локация NPC, у которого завершается квест.& I: t$ C% ? y0 M/ E: Q. C
Это ID локации, где находится конечный NPC.6 n1 G2 D2 h; ]0 f. v4 s
quest_loc=1003: Основная локация выполнения квеста.% a- P" I; [# P& r9 {: k
Это ID зоны, где нужно выполнять основные задачи. " k. H( ~- y4 Z1 x. r% `
goal_string=[Дарти (Зона Тренировки)]: Описание цели квеста.4 `; k( \4 B9 ?+ l) N! }4 p
В данном случае цель связана с персонажем по имени "Дарти" в Зоне Тренировки. # X0 |# b+ D! ~' |* r
goal_num=1: Количество действий, необходимых для выполнения цели (например, убийств монстров или сбора предметов). * n( R$ A# _" z
В данном случае нужно выполнить одно действие (1).; h5 D' h ^5 ^) G) ^" O
reward_level=65535: Уровень, при котором можно получить награду. " Y6 |9 r+ s& G; l$ S, S
В данном случае это максимальное значение, указывающее, что награда доступна всегда." q% L8 M1 v* V9 ^1 A8 u
reward_exp=0: Опыт (EXP), выдаваемый в качестве награды.$ M w1 m9 ]% K
В данном случае опыт не выдается.4 W5 S, Q% ?* q9 ?. S
reward_sp=0: Количество SP (Skill Points), выдаваемых в качестве награды. $ f4 D+ I( I8 ^5 i5 A
Здесь тоже 0, значит, SP не выдаются. 8 \+ p9 ~$ Q7 V, H" @2 Q
reward_item={}: Наградные предметы. $ q& v& L. y+ | I, w7 x
В данном случае наградные предметы отсутствуют.& ^7 l# r! ~5 y1 [ B) U
Этот файл определяет основной функционал и настройки для конкретного квеста в игре. a' c8 o$ u$ q
$ ^. z7 u. u% |3 v; t
2 ~! r7 n7 f i4 a1 W
/ w- F; p$ h5 s1 b* k: B0 B+ O
, g" F5 g- Z: I# T* y
+ B5 P) p% V/ L1 J3 V$ X# z& b. l4 B6 `% T0 ~; V
; A# O+ Z& X8 u: N% ~1 p8 I4 W* y & e3 ]2 {2 r9 z. k3 z% v/ E Y6 x$ t/ R" ~! y C) W+ T ' P) I% e- Q: c9 [: v5 T
Добро пожаловать artace.ru - творческий сектор (https://artace.ru/)