Название: Создание квестов L2j_Mobius [Версия для печати] Автор: admin Время: 2024-9-24 00:52 Название: Создание квестов L2j_Mobius Сборка: L2l_Monius 2 o _$ ^5 Y. e' q) ^Следующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk./ |9 R$ p1 F6 R% B' A4 _' u
$ ?7 r8 d$ y% J% U0 \" l, N- q$ }2 r$ Y8 ~; u
Иди и убей X монстров / Возвращение - награда. , X; f' j1 U# W) Z( rQ00529_RegularBarrierMaintenance H1 l) ?# ]$ i; e6 z; S: Y
1 _6 Q1 H# Y# ~ ]% q3 [
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.# M- c2 h$ J3 f* U6 _ X( x) @ c6 R
Q00683_AdventOfKrofinSubspecies3 s0 d) \; |/ u3 ^# Z
X, f* f( |3 k: W; Q' ZПоговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда. , h6 ?( t; d O, z' vQ10516_UnveiledFafurionTemple ) R" y/ p7 f3 b) B% G2 H# ^! ]4 \. N. s
Убейте X монстров, а также соберите X предметов / Возврат - награда.& B) ^$ ^' X' p2 n6 O
Q10517_FafurionsMinions ~; g3 X7 G# O4 P6 s E/ y
& m: w' M/ _0 a+ q3 K4 ^2 @8 ~
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда. 7 x6 G. a1 P- i4 k7 wQ10529_IvoryTowersResearchFloatingSeaJournal * \: n0 E4 Y3 x9 [" P% K5 D+ t 0 r B1 e8 n5 t5 AИди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда. $ T/ d+ T4 P5 k3 U6 lQ10518_SucceedingThePriestess * p+ i: P W ?4 l: V0 a% T 1 c- g3 o$ a8 H* A" NУчаствуйте в убийстве рейдбосса / Возврат - награда.( q! Z! X( \2 @" t
Q10519_контролирование вашей температуры4 m! Q% Z% R& U" j x( s
- P5 L( B+ L9 b
Поговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.; p% O2 f; g7 A' c. K$ e1 q$ A( T
Q10533_OrfensAmbition4 H% \- H. ~3 r8 S
z# L; A4 a$ _; V+ R, z \
$ \$ W$ @+ g; V1 q! Z; c) I* c
% N" W; M i- ^4 t( ]% r6 O* bРуководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста! , `% X3 [) X: z. K! o) ^, T$ i# V7 Z# b5 o! s
Шаг 1: Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".7 o& }4 {: }0 ?) `& ]
! f" y7 P8 I; d, v4 G1 W. ~6 JШаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".' P& s/ T% B6 ]
+ R1 B* [7 X5 f& T4 PШаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".6 D5 i# `3 } |, y4 S) B
, a# h* l- @- z1 ^& `Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов. 4 b/ j% R5 B1 ]+ |/ e3 U5 h6 u4 t0 B4 t: F4 j9 Z7 w$ k Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест., ] U6 ~9 U' |9 N! N+ P" C% e7 H
3 [' {7 X* ^2 N% i* _4 X1 qШаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".& B, w; E1 e9 @3 g' Y* n3 t
, w |4 F8 T. K9 _
Если я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях. , H1 }0 |7 z, R9 ^1 ?, B$ A 6 W" I0 A6 n# b- a2 a! Z( r/ z& EШаг 2: 7 U8 t' n4 { i" p- S 8 o+ \' v7 k( j9 Y) JСледующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план: : z' ~) o" }! j% `0 V6 j# c% Z! K, l9 n( E 1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. / m" W- { f3 o8 B$ ~- tНапример:% h: P! J h1 w1 K# {' q8 J
# L7 [7 W& A$ d- q4 ? C5 {
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест: 8 P+ D2 m$ P- c1 f1 U3 Z; H; p# n' t% U! @- L1 n% R. m
/**" T9 v3 h. C5 T
* @author NosBit 8 a7 ^8 ~3 { y0 M7 X
*/ 7 P% d. N0 D: t6 {+ V; ?
public class QuestMasterHandler 7 Z" U/ H& X* S/ M6 H" A5 ]
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.$ L8 E7 w# h: R' ]2 `0 _$ e$ a8 R
, V, z1 l! D! N" ^" C! R& A% j ( Q$ f/ z/ c: Z) s& M, y3 wШаг 3: 6 ^7 ]' m4 l. N2 x+ D6 g* Z P) I$ T- N8 Y6 } o
Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д. 9 K( y/ H. s5 a- \: b: j% {' u( A! d
Давайте разберем все поля на основе примера:, k1 W9 Q( E$ l$ ~2 A
! p! n: {5 [" G* }% ~% 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_end3 I# q- e- U" ]! n
Скопировать код
Поля данных:
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 x- E4 ^' E6 _6 l$ p
' d: F; z1 a5 D# c+ n2 K; g( h
) z4 f4 N q8 _% d2 qФайл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. + G$ K) [$ m2 H/ e' FПример соодержания 4 s2 D0 v" @1 B0 e. Q& g ZВот описание структуры строки:* u' h4 Z8 T5 W4 J1 {. t
Давайте разберем все поля на основе примера: I2 S' I0 ^# r" f0 N5 u# ^/ J! f- \+ 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: Указывает на конец записи о квесте.! D& {3 u. S. I" {- z! u- J. V
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC. 2 Z4 r5 r. w# W1 l$ E$ `/ O- ~$ G: C! G c- X8 j( n
8 a6 S0 S" J3 A( x$ V$ ^. f
- m5 \+ L" v* i$ f" j" ~; B" B' QСледующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов. 8 U3 |* x" U/ B5 _# n; r% m) B/ Z L$ d0 F( Y9 S Шаг 4 L( T3 }6 N6 w r
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть: / o) b8 u, g3 VПример добавления нового квеста: 6 [0 _8 o% W4 Z! e- L, H4 O
<quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051"> ( e5 i# J4 g2 u
<locations> , O ~. A% x5 O: |# H6 |8 l1 l# a
<param name="startLocationId">2001</param> @" u2 I; [$ L" Z6 `3 L: O2 t
<param name="rewardItemCount">10000</param>3 C# s/ ^( I* M, `! p
</rewards> ! r# }) |. B f/ G0 S. }! Q
<goals> $ N& o7 p3 q( ]
<param name="goalCount">10</param> $ | {4 y: |7 y* L- p9 ?% o! s i
<param name="goalString">Defeat monsters in the Ancient Forest</param>6 ^: I0 _$ z( x* T6 a
<param name="goalItemId">92000</param> <!-- некий квестовый предмет -->8 R" p. y1 D! _; |& F+ j$ d* |) V
<param name="goalItemCount">1</param> 4 H7 O; ?8 t! U# b3 a
</goals>* \" g+ c0 y. n! D& `4 ?( W
</quest>+ n4 d4 `4 \0 M2 q
Скопировать код
Описание структуры:$ b: G0 ?" A( {
quest: Основной элемент квеста, содержащий атрибуты: 4 ?! m0 d. |. ~( z( H2 S
id: ID квеста, уникальный для каждого квеста.
type: Тип квеста (1 – обычный квест).
name: Название квеста.
startNpcId: ID NPC, с которого начинается квест.
endNpcId: ID NPC, у которого квест заканчивается. " U4 u" q' Q2 j0 i( O. ~4 _2 O
locations: Указывает места начала, окончания и квестовой активности. & U- q5 u9 `3 s- o
startLocationId: ID места, где начинается квест.
endLocationId: ID места, где квест заканчивается.
questLocationId: ID квестовой зоны. & K2 N6 C$ f2 u' d3 b \: L
conditions: Условия для начала квеста. Z. o7 c: a# _$ U9 b6 g
preQuestId: ID предварительного квеста (если есть).
classIds: ID классов или рас, которым доступен квест.$ \. q3 N( g1 C( r! }: H
rewards: Награды за выполнение квеста.* I* ] K, b/ O5 H) L; q
rewardLevel: Минимальный уровень для получения награды.
rewardSp: Количество опыта (SP).
rewardItemId: ID предмета (например, Adena).
rewardItemCount: Количество предметов. - S! G3 }6 V) o( [
goals: Цели квеста. : L$ f9 y/ |4 m9 D% K$ T6 X, K
goalCount: Количество монстров, которых нужно убить или предметов, которые нужно собрать.
goalString: Описание цели.
goalItemId: ID квестового предмета (если требуется).
goalItemCount: Количество квестовых предметов для завершения цели. + v8 Q1 N3 j/ v$ q1 `# \5 D
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу. @' D* e7 k7 d5 G 2 e9 ~. }: |/ ]1 }6 fШаг 5. U! h5 o% U' k3 q q
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:( p9 A# S, j: a Структура данных
NewQuestDialog_begin — начало записи квеста в файле диалогов.
QuestId=10001 — идентификатор квеста (должен соответствовать ID, который ты используешь в других файлах).
Text0=... — первый диалог, который обычно отображается при старте квеста.
Text1=... — дополнительный текст, который отображается на различных этапах квеста.
Text2=... — текст, который отображается после выполнения определенных действий (например, после выполнения части задания).
Text3=... — дополнительный диалог, например, при встрече с NPC на следующем этапе квеста.
Text4=... — финальный текст или инструкции по следующему шагу для игрока.
NewQuestDialog_end — завершение записи для этого квеста. * }: C9 u5 B# j' j E. }# M, {
* ?) i1 q% p1 x9 P( c6 ` Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:, g; [5 d! G& u: e! g' b& F+ |* w! z3 T
NewQuestDialog_begin QuestId=98765 Text0=[Вы готовы принять новый вызов и доказать свою силу?] Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.] Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.] Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.] Text4=[Поговорите с Дарти. Кликните на него и начните диалог.] NewQuestDialog_end L- `7 ]* O: ]% e* u( S/ T3 d
Скопировать код
Разъяснение полей: : r1 x+ S+ j$ U8 `( O
QuestId=98765 — уникальный идентификатор нового квеста.
Text0 — вводный текст квеста. Отображается при первом контакте с NPC.
Text1 — дополнительный диалог, который дается игроку для создания контекста.
Text2 — текст, который отображается на следующем этапе квеста, например, после выполнения части задания.
Text3 — описание следующего шага или инструкции для игрока.
Text4 — финальный диалог или текст с указанием цели (встреча с другим NPC). ' e$ E+ i8 Z6 x1 m7 s* d
0 e: O1 H9 v! m( D. y! ~% B% i, ]2 d
" \! j/ {. Q0 v
Что можно изменить:
Тексты диалогов (Text0, Text1 и так далее) можно адаптировать под конкретные ситуации в квесте.
Количество текстов можно варьировать в зависимости от сложности квеста. 2 ?' }- D# e+ m J
) P4 X V0 |; j. r3 K1 M& v, W$ ^
Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла: & K0 B; Z1 I, J U2 L e: l3 r* b. Y3 a/ o# k. T5 J
newquestdata_begin / newquestdata_end: Эти параметры обозначают начало и конец блока данных квеста.
quest_id=10001: Уникальный идентификатор квеста (ID). В данном случае это квест с ID 10001.
quest_type=1: Тип квеста. " C- \1 x$ N L# r) j: r
1 обычно означает стандартный квест.1 B' g4 X, \7 L2 |, T7 y+ @' k
quest_name=[Новый путь]: Название квеста. Здесь указано "[Новый путь]" — это имя, отображаемое в игре.
Первое значение указывает минимальный уровень, второе — максимальный уровень.
{0;0} означает, что нет ограничений по уровню." Q5 B; P; @% }7 |9 n) ] l X
pre_quest={}: Предварительный квест, который нужно выполнить перед началом этого квеста. S* U4 E6 p# d( N0 E
В данном случае он пустой {}, что означает, что нет предварительных требований. 9 R. B( k! ~2 Z. g# C) |& E
class={0;10;18;25;31;38;44;49;53;123;124}: Классы или расы, которые могут брать квест. 0 p _% I; j* `3 M$ W
Номера классов указывают на те классы, которым доступен этот квест. В данном примере классы, такие как 0 (человеки), 10 (рыцари) и другие, имеют доступ., u1 _! X1 |. g
quest_item=82948: ID квестового предмета, необходимого для выполнения цели или этапа квеста.% Y4 I0 ]) L& ]* ^
В данном случае это предмет с ID 82948., L1 I s* g7 k& S* J
start_item=0: Предмет, который выдается при начале квеста. 4 l8 z+ ~! ~+ ^, b
Значение 0 означает, что предмет не выдается. $ B6 t. S( c$ e0 L; H! K
start_npc=34505: ID NPC, у которого начинается квест.
start_npc_loc=1002: Локация NPC, у которого начинается квест. 1 t1 C' C+ p( Y
Это ID локации, где находится стартовый NPC. 5 S; p6 M7 G) G: Y5 L
end_npc=34696: ID NPC, у которого завершается квест.
end_npc_loc=1003: Локация NPC, у которого завершается квест.4 G, O2 r8 f- ]4 U9 }- j+ n. L
Это ID локации, где находится конечный NPC. ! w! r6 ^% u, Q X1 _
quest_loc=1003: Основная локация выполнения квеста.+ c" b. b" D% d6 r; _
Это ID зоны, где нужно выполнять основные задачи. 2 G* @- l: u8 `
goal_string=[Дарти (Зона Тренировки)]: Описание цели квеста.5 x1 w; w; f! {+ N! n& |7 }
В данном случае цель связана с персонажем по имени "Дарти" в Зоне Тренировки. $ ?, w" U* p. O5 |: t
goal_num=1: Количество действий, необходимых для выполнения цели (например, убийств монстров или сбора предметов).4 v0 A) |/ `& g+ T5 ]3 \) w
В данном случае нужно выполнить одно действие (1). 5 T1 k" W& A3 _1 s- ]- H9 K' V
reward_level=65535: Уровень, при котором можно получить награду. 4 F& f' L: y+ y6 \- E( [
В данном случае это максимальное значение, указывающее, что награда доступна всегда./ y" p6 j3 ?8 D" u
reward_exp=0: Опыт (EXP), выдаваемый в качестве награды.& Z$ g* S- ]4 h7 o
В данном случае опыт не выдается. 0 Y* A/ H; S. p1 T( B' _+ z* k4 _
reward_sp=0: Количество SP (Skill Points), выдаваемых в качестве награды. . g) e# c" d7 W6 u+ N7 f
Здесь тоже 0, значит, SP не выдаются. 2 F/ `: P C; z9 x, X
reward_item={}: Наградные предметы.1 T2 ^& g8 G+ y( |; u
В данном случае наградные предметы отсутствуют. 6 W7 q k& d+ c9 a4 F
Этот файл определяет основной функционал и настройки для конкретного квеста в игре. ?/ t& J- R: m3 C0 ^ Y! t ' t$ K4 m. @ ]- g: i+ Y0 d9 e; t0 {0 I4 b6 [
7 o; d- `8 r8 r& ~6 J
0 {& X% D+ j7 p1 Q" M# Q& T' H( ?5 m% P" d
, z ?, a) x$ |- q7 I1 z/ m7 L! \
X7 M' {# Z2 r+ d' O
* n% ~, d( V6 ]& B/ O& y# F0 D2 f3 R% d2 x* q. e' D. D
2 q+ y G2 ?' L' e( W2 B" I+ c
Добро пожаловать artace.ru - творческий сектор (https://artace.ru/)