Название: Создание квестов L2j_Mobius [Версия для печати] Автор: admin Время: 2024-9-24 00:52 Название: Создание квестов L2j_Mobius Сборка: L2l_Monius " G! | Y; T% V7 D6 z: M; O
Следующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.5 O) G! C7 Z; c) X& Y' S, z4 n
6 G% X4 W3 S0 h2 G
" F& _8 W7 U- j
Иди и убей X монстров / Возвращение - награда. 0 X+ F; V' i2 H/ O* M n( _7 oQ00529_RegularBarrierMaintenance 5 V- j5 O( a3 L; j$ ^1 {0 \/ S( r7 z% _2 z$ h
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.- B' s- r$ p& {( h
Q00683_AdventOfKrofinSubspecies % q6 U6 y5 T& Z. s7 x$ v : L9 R% ]" A5 [6 C: WПоговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.) s1 I; I1 q3 Y) d- P
Q10516_UnveiledFafurionTemple) R" j' i7 h, R# S/ o. B
6 O3 c# v2 h' A% r; X
Убейте X монстров, а также соберите X предметов / Возврат - награда. 0 @5 y; ]* A6 ~Q10517_FafurionsMinions% N. H7 E( J5 ]; f* t
9 \2 ]8 E, M# Y/ p" v1 _' e! w! ^
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.0 J) C- ^, ~8 ^' G
Q10529_IvoryTowersResearchFloatingSeaJournal7 m9 s& ~2 ]; ^7 t+ N4 l9 k
8 M- f1 M" H. m7 a* S" q% ^
Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда.& y D, r8 C7 s f; [$ D2 Y
Q10518_SucceedingThePriestess ) [5 a' l8 G5 Y# s7 | {4 O* i: a
Участвуйте в убийстве рейдбосса / Возврат - награда.( {& K7 \+ x l- A
Q10519_контролирование вашей температуры7 a% ?8 E3 \. d& g& h1 z6 _, q1 `! ~$ A# b
& p6 g0 i( ~, Z
Поговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.% w* j1 }4 F" `( j
Q10533_OrfensAmbition1 t3 G* @ h1 \: ]( M( \
1 B& f+ H$ g ^0 C9 { : o! C! e2 j$ B* R# j9 _' f9 P8 w* p P5 v) ~$ l3 t& O. @4 }6 `. x Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!4 w$ q1 i/ ?+ L$ P, X8 d 4 r7 B$ H5 i: ^7 |# O- oШаг 1: Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".) |$ R. Q0 r4 Z$ W( d
" N) |" A4 P0 |& U5 w( f6 M- b Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java".( @4 a5 D: f$ Z+ d7 Z# b5 o1 y
( i/ H- W6 Q4 p) {; u* [ Шаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat". ' Y' i& @. G0 ^3 b, V6 I4 Q2 [- l5 f E
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов.5 r: S& B6 F5 g$ v- X# ^% l
- ?4 b6 H- z; N- \Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест. @6 G; I( b- w% @ A4 M' u' I$ \& {' }5 @+ ~4 l3 @' m {7 @5 O2 E- Y: f Шаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".* _' N8 y3 Z; c; |. [) ^- E' x; w
8 P: H- f+ P6 I0 `* y. oЕсли я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.: r4 A) A0 |( x9 {! }- {
4 h' r5 y4 X: ]5 I Шаг 2:% o( a# v# Q1 ~
" j# j2 t# s h7 iСледующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план: ' i x9 Z! {; O& y7 I' r - Y2 n, Y( d! }1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. 2 {: u! b. z. B O/ Y/ ?
Например: ; g( T. l' M5 U! P- c3 S4 C0 M( y& L1 y5 a% T* `4 ?
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:9 r& y; ~( Y6 n; n% ~4 s; S
) @" I4 T# D: V* k# N
/**$ E# \4 W9 h/ R) P! i1 Z. O
* @author NosBit 4 w9 k9 q) \' v9 `# a) @
*/ $ i4 B* V. M2 H2 g. }6 \
public class QuestMasterHandler; t5 H+ W& L6 b" v2 G
{, y5 A! p4 c1 F* ? `
private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName()); : X: Q7 X6 m4 ~; [) k4 x/ T
7 M4 h, i, x- M- y# }0 u
private static final Class<?>[] QUESTS = + W% `( _2 u+ _5 S7 G* A' u( q9 k! G
{
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами. # O: _: P& n7 T/ @, R4 R# k6 R ! N4 x1 M( ]/ C- ^! a % n- q0 p! e2 n$ c8 \Шаг 3: % D& W0 p' L2 g9 M+ _' Q+ {1 A% Q' g9 f G1 ]! {+ c K
Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д. $ t1 R L( }" JДавайте разберем все поля на основе примера: 0 o9 L4 K m- |0 P' m6 J9 F 9 Y' k" Y: h2 W$ R4 x' L
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" b) W& V3 d/ r, k" w/ W
Скопировать код
Поля данных:
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 — завершение записи для квеста.2 Y5 P2 J- \. ?6 s2 q0 ^$ F4 e3 ^
% l! y7 ]0 \$ \# ]6 F
$ \% h/ Y* b# K2 b" d/ l* U
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. ?8 L* v! C% l8 m2 N) {- @
Пример соодержания: a4 z8 O2 \& g) {7 k7 ~" \2 B
Вот описание структуры строки: . b; O1 e2 V6 ?, z- C& n4 j
Давайте разберем все поля на основе примера: + t5 Y+ P+ m2 f) Z) F1 o* @! @+ C6 }( e& l2 M' _4 B
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: Указывает на конец записи о квесте. + @/ E+ b; W% ^5 k/ }: W0 i
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.; o/ s6 {7 W: D- e: `
0 |, I/ \4 P; `6 A7 e: w# C$ F 9 Y4 ]# a0 r! n% K) _( L5 a9 P% ^3 Y b- h
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов. ; i+ u X& }) q& X- V0 V3 M- M6 D3 \) ^ Шаг 4/ v& B' P. k8 h p& i0 f
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:: I) J8 g) ?8 A/ t
Пример добавления нового квеста: * J) _$ ?7 G1 j
<quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051"> % w0 a) W8 B9 K" X* _+ ?1 ~
<param name="goalItemCount">1</param> & n V' f ]( Q+ R$ Z
</goals> 6 u' V! V2 k" P q
</quest>) }2 X) x4 {: U9 o
Скопировать код
Описание структуры: # ^9 Y) Z; v: X3 w4 m
quest: Основной элемент квеста, содержащий атрибуты:' R9 v" c$ v9 ]0 ^0 \! N4 E
id: ID квеста, уникальный для каждого квеста.
type: Тип квеста (1 – обычный квест).
name: Название квеста.
startNpcId: ID NPC, с которого начинается квест.
endNpcId: ID NPC, у которого квест заканчивается. # P4 \5 J* l% ?3 b6 J0 R2 g: Z% P
locations: Указывает места начала, окончания и квестовой активности. - z/ M4 Y7 C3 A
startLocationId: ID места, где начинается квест.
endLocationId: ID места, где квест заканчивается.
questLocationId: ID квестовой зоны. - w4 i# M9 t( g" b' h G" L. h
conditions: Условия для начала квеста. " g$ n) x" S. }; [* H
preQuestId: ID предварительного квеста (если есть).
classIds: ID классов или рас, которым доступен квест. * ^3 d+ t, I9 m( e2 M3 q
rewards: Награды за выполнение квеста.3 K3 x _. p# Z! w
rewardLevel: Минимальный уровень для получения награды.
rewardSp: Количество опыта (SP).
rewardItemId: ID предмета (например, Adena).
rewardItemCount: Количество предметов.1 u! j' k1 e" L$ j- }
goals: Цели квеста. - i- C7 r O* o6 L% l1 d T
goalCount: Количество монстров, которых нужно убить или предметов, которые нужно собрать.
goalString: Описание цели.
goalItemId: ID квестового предмета (если требуется).
goalItemCount: Количество квестовых предметов для завершения цели. 9 O% @* q/ U$ A ^ S2 }6 R& N7 V
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.0 ^$ n* h4 Y: m6 \" d
! F2 E3 A+ s2 l- o3 g# IШаг 51 \; p2 C7 R1 o
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:# s; }0 B! o& u% v- c Структура данных
NewQuestDialog_begin — начало записи квеста в файле диалогов.
QuestId=10001 — идентификатор квеста (должен соответствовать ID, который ты используешь в других файлах).
Text0=... — первый диалог, который обычно отображается при старте квеста.
Text1=... — дополнительный текст, который отображается на различных этапах квеста.
Text2=... — текст, который отображается после выполнения определенных действий (например, после выполнения части задания).
Text3=... — дополнительный диалог, например, при встрече с NPC на следующем этапе квеста.
Text4=... — финальный текст или инструкции по следующему шагу для игрока.
NewQuestDialog_end — завершение записи для этого квеста.6 T1 L2 b' s U
/ _" F* D2 Y' h3 x- j; tПример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так: $ X. X" S* u8 }5 M" S
NewQuestDialog_begin QuestId=98765 Text0=[Вы готовы принять новый вызов и доказать свою силу?] Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.] Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.] Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.] Text4=[Поговорите с Дарти. Кликните на него и начните диалог.] NewQuestDialog_end; {5 b. y" }3 `! ]0 U% @9 J; X4 s% M
Скопировать код
Разъяснение полей: $ f( t0 i. O% a9 V+ w1 h3 s4 F
QuestId=98765 — уникальный идентификатор нового квеста.
Text0 — вводный текст квеста. Отображается при первом контакте с NPC.
Text1 — дополнительный диалог, который дается игроку для создания контекста.
Text2 — текст, который отображается на следующем этапе квеста, например, после выполнения части задания.
Text3 — описание следующего шага или инструкции для игрока.
Text4 — финальный диалог или текст с указанием цели (встреча с другим NPC).3 I* r! X1 l) s9 P, j3 S! K
! {0 ~- A8 m7 Q/ Z2 ~6 P- g ' S ~% Q O7 t a+ _& B7 m( uЧто можно изменить:
Тексты диалогов (Text0, Text1 и так далее) можно адаптировать под конкретные ситуации в квесте.
Количество текстов можно варьировать в зависимости от сложности квеста. & h# f! B# A) J) w {
( J# t8 q2 M- o+ g; ~. Y$ AФайл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла:2 I7 B* J+ Z4 D0 H" g5 m' H
' O& M# t( X: b" Z! L5 w
newquestdata_begin / newquestdata_end: Эти параметры обозначают начало и конец блока данных квеста.
quest_id=10001: Уникальный идентификатор квеста (ID). В данном случае это квест с ID 10001.
quest_type=1: Тип квеста. # m( L2 n, L4 V: `, k
1 обычно означает стандартный квест.) w% t' H6 m. y, H
quest_name=[Новый путь]: Название квеста. Здесь указано "[Новый путь]" — это имя, отображаемое в игре.
quest_level={0;0}: Уровневые ограничения квеста.4 [ _6 |! V9 ?9 G
Первое значение указывает минимальный уровень, второе — максимальный уровень.
{0;0} означает, что нет ограничений по уровню.& o6 O2 n, y1 H) G" A+ q
pre_quest={}: Предварительный квест, который нужно выполнить перед началом этого квеста.0 {, U k N& y8 b- Y
В данном случае он пустой {}, что означает, что нет предварительных требований. / v! _( r; `6 g" U" f
class={0;10;18;25;31;38;44;49;53;123;124}: Классы или расы, которые могут брать квест. 2 Z6 Z" b1 {6 r( m$ R. J
Номера классов указывают на те классы, которым доступен этот квест. В данном примере классы, такие как 0 (человеки), 10 (рыцари) и другие, имеют доступ.: W6 F# @) a# ~/ @% g
quest_item=82948: ID квестового предмета, необходимого для выполнения цели или этапа квеста. S7 {8 A: n7 \/ `" X1 t3 `% `- ?
В данном случае это предмет с ID 82948. " A8 }" O2 ~, d! z
start_item=0: Предмет, который выдается при начале квеста. , l( f: n$ A' e- _# t
Значение 0 означает, что предмет не выдается.( ^. n( G9 q, i O: B9 h
start_npc=34505: ID NPC, у которого начинается квест.
start_npc_loc=1002: Локация NPC, у которого начинается квест./ Q6 y4 j% M8 Q) k/ m+ T
Это ID локации, где находится стартовый NPC. ( G7 E; P/ A$ m' Q; Z9 w1 Z
end_npc=34696: ID NPC, у которого завершается квест.
end_npc_loc=1003: Локация NPC, у которого завершается квест.8 r, Q! B3 \9 ^- l+ e: B+ V
Это ID локации, где находится конечный NPC.3 g6 \- |) Q; R
quest_loc=1003: Основная локация выполнения квеста.- w7 X' b& S0 R. s8 P7 y
Это ID зоны, где нужно выполнять основные задачи.3 [- ^8 \4 W* W6 }/ h/ u, B
goal_string=[Дарти (Зона Тренировки)]: Описание цели квеста. 0 b0 X3 G! `$ C2 J) W1 g
В данном случае цель связана с персонажем по имени "Дарти" в Зоне Тренировки.- s% M7 \ k0 Z
goal_num=1: Количество действий, необходимых для выполнения цели (например, убийств монстров или сбора предметов).6 g/ b- U c0 f
В данном случае нужно выполнить одно действие (1).. N+ Y Z0 T) t7 L6 i s ^
reward_level=65535: Уровень, при котором можно получить награду. # g4 g, d8 E$ f6 |. p( V3 s
В данном случае это максимальное значение, указывающее, что награда доступна всегда.$ [- h0 p# h9 J! A
reward_exp=0: Опыт (EXP), выдаваемый в качестве награды.# S3 N }% e2 ]! {- @! X! w
В данном случае опыт не выдается. 0 g; L9 b& D8 K# x
reward_sp=0: Количество SP (Skill Points), выдаваемых в качестве награды.4 C. n' g/ {, I( X
Здесь тоже 0, значит, SP не выдаются.* T) A0 i5 _4 T0 G
reward_item={}: Наградные предметы. ! \, b) E2 V* m9 [6 P/ b
В данном случае наградные предметы отсутствуют. ) ?0 ~9 N, U7 \* Z7 S2 N; S( t
Этот файл определяет основной функционал и настройки для конкретного квеста в игре. $ \* U$ \" G u6 K/ S- I - B; o- \+ c& I3 S5 D. |* \; y7 d9 ]
# }0 O, Q' {! ]7 ?" }0 H" S , i6 p& N& _3 m# ^0 R. T4 c& M: M/ d3 d
# Q2 d2 f* q6 r" s0 b
M; |+ P, X0 z8 v ( V9 W6 ?' l( b$ V8 v - Y' u& T+ v0 W5 W0 P1 w S) C2 t2 l' r: O+ q( ^2 V% O7 S
Добро пожаловать artace.ru - творческий сектор (https://artace.ru/)