Название: Создание квестов L2j_Mobius [Версия для печати] Автор: admin Время: 2024-9-24 00:52 Название: Создание квестов L2j_Mobius Сборка: L2l_Monius # B+ }8 K k# a$ i x i
Следующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk." i. l8 @0 @/ c( ~- R0 F5 L
: r7 G. c5 y' e- D$ Q
# C+ e2 P; M IИди и убей X монстров / Возвращение - награда. 1 X% l4 A" u t6 HQ00529_RegularBarrierMaintenance7 O, W# Y% e1 S1 M# V- ?
& m1 \# l7 x' S3 I" E/ L$ l
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.( l# t" W9 U- S! y
Q00683_AdventOfKrofinSubspecies n; s; \. n7 U y+ h; m8 G3 Z5 O
Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда. ' ^6 f) S9 a- E% b3 ~- _" z1 t; S- yQ10516_UnveiledFafurionTemple 6 ?9 w: F2 B7 f9 I, O( H/ ~7 j1 b5 e' e 2 _, w5 g3 N8 h: dУбейте X монстров, а также соберите X предметов / Возврат - награда. # [0 f( P% d! V+ DQ10517_FafurionsMinions2 E5 T4 b U2 B' b7 z. t
a, n8 K: ^" h- M' v' y& T6 g/ GИди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.9 r4 i' l( s7 Q C; D; j0 Z
Q10518_SucceedingThePriestess/ {5 c2 l: @3 V3 i+ O( W
# A& W4 M9 ^: _8 Z$ j- gУчаствуйте в убийстве рейдбосса / Возврат - награда.# q, d4 ] G; {3 b; V
Q10519_контролирование вашей температуры + w1 e+ g/ \) A; r ' H% h6 i' y1 q. D4 O g- LПоговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда. 2 v3 V$ D4 A7 \$ R3 R9 q$ ]Q10533_OrfensAmbition: x9 e: O6 d# _7 |7 O N z, |
( u2 F2 c# J2 z) M! S f' i# _5 b
7 M6 M2 Z$ [( _& z F9 K W3 T8 h C4 y Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!4 T+ X1 g0 d& d& i" {2 y1 j ; h0 y1 H) l$ p# QШаг 1: Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest"." y7 s" `& o; k* G# Q6 s
+ X$ G& g7 a/ [8 S' U4 n5 ]Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java". * T2 e9 u3 W% a6 i- i* G: ~, H; w* z5 P/ ^5 b) W: s Шаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".( k( o" X2 v- b* M9 Y7 N
1 i+ t `% U1 O( h8 ]
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.; A/ b& L6 v2 C8 ^# ~
( W. x+ L0 ]5 t9 M Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.6 |- ^! [5 d6 n- D# s
7 g* m, }9 _8 W, c; m. y0 D8 T7 PШаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".! U3 k4 z8 F3 m& p
+ e9 u/ y- \( g4 J4 o; zЕсли я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях. 2 H$ V. c4 S! ` D 1 t, g4 \1 I! G9 ~7 d+ GШаг 2:- D$ q+ I; X! C5 g( A
. ? s+ ~. L! s$ q# G6 b% c4 ]0 m
Следующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:* J0 ^: }$ H! S7 t/ v% Z. U
0 U. K1 }: ^; S: T 1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. 5 I, u- L# M+ `Например: ! ^7 S7 k' I3 y# w) l" z8 w0 q6 G v4 {& R, @5 r- ?, U5 \
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:5 s2 l, _" e4 R0 I. W
% z8 [; Z+ W' M' a0 k4 l
/** ! L- W' F3 ]/ i' A0 P+ g
* @author NosBit + f8 D& c5 U0 S* Q+ }! V& E
*/ ! N0 O, ~% y" K' Z M
public class QuestMasterHandler / y6 p1 P6 I0 s* k% @
{ 5 `% b3 H1 O# \/ }) r9 M
private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName()); / `, q" ^# D9 O
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами. - M4 i: u* i' C( ~% {6 B/ q+ u/ |8 ^4 l
/ G! o/ L, G9 O7 o) D' b, r1 ]Шаг 3:& s: M- B, W! K0 X+ f
& c) w6 |, r" u* _0 Y) w
Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д. - j& ^: K7 i( S+ I: Y$ m
Давайте разберем все поля на основе примера:, L& \$ q/ X9 F3 W" @, u5 ^& X. }; a1 S
4 a0 h4 q1 h! @3 N
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' V: R! Z( D+ C3 {) X0 n4 B
Скопировать код
Поля данных:
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 — завершение записи для квеста. j; R2 q/ U, X. ]& R2 [3 K
1 J3 ]0 ]8 n; t; L% n) Z& ]' T* B, i( S4 D
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. ' J$ a$ |% D0 y$ B/ v( d5 y
Пример соодержания% r" w( J/ _9 P4 @$ Y
Вот описание структуры строки:4 _, n; G- P8 b. a/ h
Давайте разберем все поля на основе примера:; x0 @& j( i7 }
/ N2 W- Z; ]. ?
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: Указывает на конец записи о квесте., U1 {# x( {* b7 Z/ w2 [
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.$ }5 c+ Q! H4 I( y
4 b6 d2 u3 O, Y1 V
% Q' b r% C" n) J" ~ 3 V$ O5 q5 N8 v9 G& H1 W, gСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов. 8 r; @+ y9 F! s5 o, w, ~$ M9 K5 g" w8 N1 Y+ I) D Шаг 4 3 p7 l) m7 c$ ^8 Q( v; @Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть: * S0 e6 _9 e; I3 ]Пример добавления нового квеста:% N- b+ b3 d; G! S9 k1 R7 x& }' n
<quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">5 J0 F8 c* e6 f, D I# j
<locations> + l8 T; k' t3 }* h+ x* C; R- d
<param name="startLocationId">2001</param>8 W, F% [' a6 L
<param name="endLocationId">2002</param> : U. v' ~2 |0 w6 \. g! u
<param name="questLocationId">2003</param>. k1 L. i, m5 h! u: F
</locations> ; r6 c9 D# J+ f, ~ t
<conditions>7 x+ k" h0 H; X4 S* p T# J' Q& G$ B
<param name="preQuestId">20000</param>! S# o7 e& t& R4 s/ M3 E
<param name="classIds">0;1;2;3;4;5;6</param> <!-- доступ для всех рас --> ( @& n7 g8 w( B) c2 W( M. f
</conditions> # z+ G2 t$ j* G: e' N* r
<rewards>9 T% y3 S( N3 R4 E3 G
<param name="rewardLevel">50</param> 5 T/ ~0 r8 s( t, a
goalCount: Количество монстров, которых нужно убить или предметов, которые нужно собрать.
goalString: Описание цели.
goalItemId: ID квестового предмета (если требуется).
goalItemCount: Количество квестовых предметов для завершения цели. 4 l; A* O0 s. [2 r
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу. I# S3 D. ]8 a
; L+ V, q5 ?. M$ V! P7 z$ _ Шаг 5 ~* [% E% V9 q5 H6 r9 \7 [
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла: 5 v2 o9 H; _! d. XСтруктура данных
NewQuestDialog_begin — начало записи квеста в файле диалогов.
QuestId=10001 — идентификатор квеста (должен соответствовать ID, который ты используешь в других файлах).
Text0=... — первый диалог, который обычно отображается при старте квеста.
Text1=... — дополнительный текст, который отображается на различных этапах квеста.
Text2=... — текст, который отображается после выполнения определенных действий (например, после выполнения части задания).
Text3=... — дополнительный диалог, например, при встрече с NPC на следующем этапе квеста.
Text4=... — финальный текст или инструкции по следующему шагу для игрока.
NewQuestDialog_end — завершение записи для этого квеста.' l: y r: ? P' S+ C5 C1 B( h
) W% X7 U& Z8 w+ V Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так: 3 R& V( x7 F8 S6 l4 e5 q
NewQuestDialog_begin QuestId=98765 Text0=[Вы готовы принять новый вызов и доказать свою силу?] Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.] Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.] Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.] Text4=[Поговорите с Дарти. Кликните на него и начните диалог.] NewQuestDialog_end ' V5 p# q1 s w1 o. h- e4 ]
Скопировать код
Разъяснение полей: 6 }! L9 R, a, P4 i. ]3 {/ P( P
QuestId=98765 — уникальный идентификатор нового квеста.
Text0 — вводный текст квеста. Отображается при первом контакте с NPC.
Text1 — дополнительный диалог, который дается игроку для создания контекста.
Text2 — текст, который отображается на следующем этапе квеста, например, после выполнения части задания.
Text3 — описание следующего шага или инструкции для игрока.
Text4 — финальный диалог или текст с указанием цели (встреча с другим NPC).* J' W$ k* i: ?' } s" {/ `$ ~9 a
Тексты диалогов (Text0, Text1 и так далее) можно адаптировать под конкретные ситуации в квесте.
Количество текстов можно варьировать в зависимости от сложности квеста.# X4 V- M8 p: F, K7 S4 F' y7 K
, L5 Y+ W; z) \+ F. T
Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла: . q& z, A- Q- F' [2 G! S8 I+ N; |0 b# a K+ j# h8 s9 |
newquestdata_begin / newquestdata_end: Эти параметры обозначают начало и конец блока данных квеста.
quest_id=10001: Уникальный идентификатор квеста (ID). В данном случае это квест с ID 10001.
quest_type=1: Тип квеста. + |9 i/ G1 ?5 |0 p/ s8 r# L
1 обычно означает стандартный квест.8 [4 i1 E# a. {. b0 k R4 `
quest_name=[Новый путь]: Название квеста. Здесь указано "[Новый путь]" — это имя, отображаемое в игре.
quest_level={0;0}: Уровневые ограничения квеста., E$ b5 i- [0 Y
Первое значение указывает минимальный уровень, второе — максимальный уровень.
{0;0} означает, что нет ограничений по уровню. # h0 G# t. ]8 f
pre_quest={}: Предварительный квест, который нужно выполнить перед началом этого квеста.2 |2 a$ j7 \1 J: E, u- a8 I G! z
В данном случае он пустой {}, что означает, что нет предварительных требований.' N3 z3 n* n; P. R1 h1 b. l
class={0;10;18;25;31;38;44;49;53;123;124}: Классы или расы, которые могут брать квест. " R: n1 t) f7 p5 T- D
Номера классов указывают на те классы, которым доступен этот квест. В данном примере классы, такие как 0 (человеки), 10 (рыцари) и другие, имеют доступ.0 f' y) W) U# v
quest_item=82948: ID квестового предмета, необходимого для выполнения цели или этапа квеста.3 @& b9 r9 d# T5 T6 M
В данном случае это предмет с ID 82948./ D/ \6 d8 |( I! v2 A
start_item=0: Предмет, который выдается при начале квеста. , U7 Q' d- o2 A% j( h4 m
Значение 0 означает, что предмет не выдается.0 b8 j* Q' O( {+ U, t3 x% h6 s
start_npc=34505: ID NPC, у которого начинается квест.
start_npc_loc=1002: Локация NPC, у которого начинается квест.: U* ?' c3 ?6 [7 ~9 }0 {" g
Это ID локации, где находится стартовый NPC. 2 Z* K* ~0 K# q
end_npc=34696: ID NPC, у которого завершается квест.
end_npc_loc=1003: Локация NPC, у которого завершается квест.( d0 Y( P2 ~" J2 L9 x0 y/ N
Это ID локации, где находится конечный NPC.' b& n' l/ b0 F1 _; V4 `2 I1 x
quest_loc=1003: Основная локация выполнения квеста. / S. U0 Y; I3 ]; G
Это ID зоны, где нужно выполнять основные задачи. ; {1 [, ]: M* O; b2 p& c* k
goal_string=[Дарти (Зона Тренировки)]: Описание цели квеста. + `8 m# R* Z1 m. J; |. {7 {) W2 ]' c
В данном случае цель связана с персонажем по имени "Дарти" в Зоне Тренировки.. J- r x) y- T6 a: Q
goal_num=1: Количество действий, необходимых для выполнения цели (например, убийств монстров или сбора предметов). $ b( f7 s2 O- ]5 ]# U( D2 ^
В данном случае нужно выполнить одно действие (1). 7 v4 `: ]+ P1 D' Y8 V2 D4 `- y
reward_level=65535: Уровень, при котором можно получить награду.6 ]; n+ t6 w8 ], l8 _! a7 {- H9 v
В данном случае это максимальное значение, указывающее, что награда доступна всегда.# m4 f9 R, r# U- H+ U# |
reward_exp=0: Опыт (EXP), выдаваемый в качестве награды.# X Y7 O' }& T* {' p6 H L6 m
В данном случае опыт не выдается. 6 }1 ~5 N& ?3 T6 \" X
reward_sp=0: Количество SP (Skill Points), выдаваемых в качестве награды.% k8 }2 k! a" j& ~" j6 P! |) q2 o0 V
Здесь тоже 0, значит, SP не выдаются. 6 l0 i9 T* u4 Y( D
reward_item={}: Наградные предметы.+ ^: F, B) n2 B2 F
В данном случае наградные предметы отсутствуют.- U2 q6 N- Y, k& H' s7 u
Этот файл определяет основной функционал и настройки для конкретного квеста в игре. , G3 l1 B1 u) d3 z+ `1 G( z+ Z9 d$ r3 ], `0 A, f
+ U( Q$ j/ J- x2 S0 s( F. X* X4 V9 [9 L+ U; l+ b$ M7 `& \, Q9 ~# N
8 ^! n c- E, n; j6 |: v5 U
( T* T8 N+ w8 K; P0 ]2 x0 _. `6 d! d y
e/ }' T+ m% j3 q: l
+ C) P2 e9 _4 s% e, x( |
9 x( x, {# ~1 |2 k7 }0 q $ t% E' N8 I9 I/ [. ^/ G+ j) A' H
Добро пожаловать artace.ru - творческий сектор (https://artace.ru/)