Название: Создание квестов 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. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:# G7 a3 }5 U* ~1 V* P
9 u1 y* g% w: E! M
/**3 {, U- n9 z5 j+ `& f A3 u3 d
* @author NosBit - l3 f4 ]- B- F6 Z' n( n3 Q4 U
*/ ! Y' s0 }$ f4 K3 x
public class QuestMasterHandler , o/ u- ]5 t! r& ^" t; |5 j8 A8 Q- h
{ ( s4 H( I5 k* @. O
private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName()); - Y {' i. C3 t5 B
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае 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
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
Скопировать код
Поля данных:
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 — завершение записи для квеста. % X. h& V7 J3 B, s1 p
, 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
Давайте разберем все поля на основе примера: 5 o$ c; w' `$ q% l) l! U8 D5 d6 X/ i4 u
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: Указывает на конец записи о квесте.' d! O! ?) h; ~" C( \7 |. a
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с 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
<quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051"> 8 _9 G9 P* ~ ^5 N
quest: Основной элемент квеста, содержащий атрибуты:. U5 B- g7 Y/ ?+ a$ d$ K- u
id: ID квеста, уникальный для каждого квеста.
type: Тип квеста (1 – обычный квест).
name: Название квеста.
startNpcId: ID NPC, с которого начинается квест.
endNpcId: ID NPC, у которого квест заканчивается. " O& y; F4 Q* I% P2 S7 T
locations: Указывает места начала, окончания и квестовой активности." Z$ e) n3 b2 ?
startLocationId: ID места, где начинается квест.
endLocationId: ID места, где квест заканчивается.
questLocationId: ID квестовой зоны.9 w% @+ J$ q% Z. B
conditions: Условия для начала квеста. ; e" z( T2 v9 O9 m/ e
preQuestId: ID предварительного квеста (если есть).
classIds: ID классов или рас, которым доступен квест. 9 I$ G6 W& d: l( T _1 M( S$ Z
rewards: Награды за выполнение квеста.! Q0 ?$ ?/ M* q2 @& u4 o
rewardLevel: Минимальный уровень для получения награды.
rewardSp: Количество опыта (SP).
rewardItemId: ID предмета (например, Adena).
rewardItemCount: Количество предметов." o3 e$ V7 Y! Z" r
goals: Цели квеста.8 C, h; T: I8 \% [0 c4 e+ X, ?
goalCount: Количество монстров, которых нужно убить или предметов, которые нужно собрать.
goalString: Описание цели.
goalItemId: ID квестового предмета (если требуется).
goalItemCount: Количество квестовых предметов для завершения цели. ! }, T% z. u8 a: Q# c% H: a
После того как вы добавите квест в файл 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; @ Структура данных
NewQuestDialog_begin — начало записи квеста в файле диалогов.
QuestId=10001 — идентификатор квеста (должен соответствовать ID, который ты используешь в других файлах).
Text0=... — первый диалог, который обычно отображается при старте квеста.
Text1=... — дополнительный текст, который отображается на различных этапах квеста.
Text2=... — текст, который отображается после выполнения определенных действий (например, после выполнения части задания).
Text3=... — дополнительный диалог, например, при встрече с NPC на следующем этапе квеста.
Text4=... — финальный текст или инструкции по следующему шагу для игрока.
NewQuestDialog_end — завершение записи для этого квеста. & ]4 B6 O" N+ x/ c/ C/ |6 M6 Q
3 n, @ z5 U5 W4 z0 v Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так: ' H5 y) g' S9 W9 b# z1 `' `
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
QuestId=98765 — уникальный идентификатор нового квеста.
Text0 — вводный текст квеста. Отображается при первом контакте с NPC.
Text1 — дополнительный диалог, который дается игроку для создания контекста.
Text2 — текст, который отображается на следующем этапе квеста, например, после выполнения части задания.
Text3 — описание следующего шага или инструкции для игрока.
Text4 — финальный диалог или текст с указанием цели (встреча с другим NPC). 8 b' k- u) X0 d% n) H1 w
( ?' v: i' R! [ W! w" _0 q
2 O. \ ?! O2 N' \
Что можно изменить:
Тексты диалогов (Text0, Text1 и так далее) можно адаптировать под конкретные ситуации в квесте.
Количество текстов можно варьировать в зависимости от сложности квеста. 7 U: s) K$ A; W7 |$ @, f
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
newquestdata_begin / newquestdata_end: Эти параметры обозначают начало и конец блока данных квеста.
quest_id=10001: Уникальный идентификатор квеста (ID). В данном случае это квест с ID 10001.
quest_type=1: Тип квеста.# m- c3 H: m$ i. q/ \3 T" M$ S. Q
1 обычно означает стандартный квест./ Q8 _) [. |+ N
quest_name=[Новый путь]: Название квеста. Здесь указано "[Новый путь]" — это имя, отображаемое в игре.
quest_level={0;0}: Уровневые ограничения квеста. : A0 W, _8 y7 V. S# t
Первое значение указывает минимальный уровень, второе — максимальный уровень.
{0;0} означает, что нет ограничений по уровню. 9 e! U0 j+ p* x% F) a& |; i
pre_quest={}: Предварительный квест, который нужно выполнить перед началом этого квеста. ; x. ?+ }& ]5 T! d
В данном случае он пустой {}, что означает, что нет предварительных требований. ; l/ }- \2 b1 a
class={0;10;18;25;31;38;44;49;53;123;124}: Классы или расы, которые могут брать квест.% ?( ~9 O; Z% X3 ~4 g( a8 M8 k$ B
Номера классов указывают на те классы, которым доступен этот квест. В данном примере классы, такие как 0 (человеки), 10 (рыцари) и другие, имеют доступ. 9 a$ N; J8 T" [. {" l0 |
quest_item=82948: ID квестового предмета, необходимого для выполнения цели или этапа квеста. 4 Y2 u8 W* C J5 p: ?. G
В данном случае это предмет с ID 82948. , W2 ?* J! Y: s" K4 J4 x
start_item=0: Предмет, который выдается при начале квеста. # _. q. E J; \& h$ U
Значение 0 означает, что предмет не выдается. 8 m# T/ ]: _1 w0 P6 v( i |7 {
start_npc=34505: ID NPC, у которого начинается квест.
start_npc_loc=1002: Локация NPC, у которого начинается квест., M5 `( }9 [& M3 T- {
Это ID локации, где находится стартовый NPC. " ~; l! O( {9 P
end_npc=34696: ID NPC, у которого завершается квест.
end_npc_loc=1003: Локация NPC, у которого завершается квест./ h" e6 V" N0 Z8 d+ I9 L& q
Это ID локации, где находится конечный NPC. i+ i, B4 O; ?! c% E! @
quest_loc=1003: Основная локация выполнения квеста. + i# M9 O6 B2 c) T
Это ID зоны, где нужно выполнять основные задачи. 4 h: w T. ]# G* Z+ F$ k7 D( ]: |- X
goal_string=[Дарти (Зона Тренировки)]: Описание цели квеста. 1 G% W% y, G( _
В данном случае цель связана с персонажем по имени "Дарти" в Зоне Тренировки." X6 I( A9 |% r9 ^* P4 N7 q
goal_num=1: Количество действий, необходимых для выполнения цели (например, убийств монстров или сбора предметов).# O7 o5 G- y4 q8 G
В данном случае нужно выполнить одно действие (1). * D% I+ d3 N! W) B" Z' K [: e( f1 r
reward_level=65535: Уровень, при котором можно получить награду.7 c9 S& L3 M& [4 l8 C
В данном случае это максимальное значение, указывающее, что награда доступна всегда. 2 q( B( w7 N: f# I0 b
reward_exp=0: Опыт (EXP), выдаваемый в качестве награды.% h$ s# k* s$ ]) @- x/ i# i( E" m
В данном случае опыт не выдается.) t$ h M9 {) s* B; R
reward_sp=0: Количество SP (Skill Points), выдаваемых в качестве награды. & q N& \3 b* i& L$ m
Здесь тоже 0, значит, SP не выдаются. + D0 ^ P. U% z& C, q
reward_item={}: Наградные предметы. 6 l% o5 D: e6 n, @ n% v
В данном случае наградные предметы отсутствуют. 5 n1 r8 O% ^) h: D% t
Этот файл определяет основной функционал и настройки для конкретного квеста в игре.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/)