Название: Создание квестов L2j_Mobius [Версия для печати] Автор: admin Время: 2024-9-24 00:52 Название: Создание квестов L2j_Mobius Сборка: L2l_Monius , l2 L# R& }( e+ g: ~4 }- q& F/ }Следующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.- Q/ p; C Y# r
7 k9 K: b; c- s3 V
T" A% N0 w! R7 P2 sИди и убей X монстров / Возвращение - награда. ( Y0 h, ?* u8 k" v1 X1 j6 i0 JQ00529_RegularBarrierMaintenance0 h' F q- a6 {/ c# ]1 Z8 D
1 n( z! [: _4 F" M- U' {' J5 `Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.0 j; u( u5 w4 t+ @+ s7 }- u
Q00683_AdventOfKrofinSubspecies1 b3 A' {: z% S: s+ Z1 K6 O
! H) n$ z2 \! S) _* `+ @Поговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.8 J0 N* F8 \3 {% ]' f" g
Q10516_UnveiledFafurionTemple 5 D' m; [. Y4 K2 U4 q' F/ g/ `- a( W! z1 V n0 M
Убейте X монстров, а также соберите X предметов / Возврат - награда.9 w& J7 Q, M) y D6 G8 x
Q10517_FafurionsMinions : G, r0 N3 M9 H2 G6 |9 ~( Q% E, v2 Y( c6 `* ~. ~+ O5 S' a* w
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда./ B* v; W8 d# j6 U- f
Q10529_IvoryTowersResearchFloatingSeaJournal , s+ C7 k+ Q5 G0 d P0 A! s5 k0 k+ W, s$ G
Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда. ! W. h: A+ W0 c3 e% ]' @8 n# MQ10518_SucceedingThePriestess5 l$ ^* v0 V* ^" u
7 u, Q5 n, n) i+ OПоговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда.6 i# J5 j J4 X: e0 D( o0 f% W6 a
Q10533_OrfensAmbition + f6 W+ V+ Z: f% O2 x, h9 |2 D; ~' [' [- d* {
' Z9 t. @# i; w" i$ w6 ]+ Y
9 M3 b+ s9 D- t7 o1 s$ v Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!+ W) w! _6 p2 P; g& Z; d' P2 b 3 A. q: @/ a3 G4 x% ~Шаг 1: Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".# v0 x3 _# Y1 P, n( S4 t
2 i! l2 v4 W" X0 q( U Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java". 5 {% ~/ v5 ]& y" W! N 7 H T$ Y& G0 Z7 f; p; kШаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat"., A6 B! A: k7 w. J4 P) |
) n( w# B4 }% Q6 x9 K5 i
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов. + S, |3 h' u" `; S. K$ p. H6 @6 X& Y& [* G' N4 }) B8 G Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.7 g p1 u3 w! @' p. Q/ {& j
# B; k8 R; }( D/ W9 rШаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat".! M5 J# R% v' g4 f
2 D: @! K4 @0 [/ J1 f0 {Если я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях. * `+ _- q. M7 m" d( t 3 p! I$ X; G0 ~+ k4 h( F2 CШаг 2: / S. k6 ^. a3 U, d5 ?; Z! d ' b& y6 { g0 S/ _# pСледующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:8 X# a; e! c+ q
/ y+ i4 R' J/ k( x* I1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. $ `2 _- D4 {; J% b3 R5 {' R, p; \/ y
Например:4 _9 a" h) I$ J: N( s
& c5 O7 {7 q$ z1 B8 A
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:: \: A# r1 V; e
$ G- M1 i+ A# \- Y' e! L
/** . B* N+ I# w3 x
* @author NosBit * V9 }8 P$ b9 P
*/( p: M3 c& t( M2 s1 M6 R9 Z5 A6 ?
public class QuestMasterHandler' J4 q* k5 Q( K5 x
{/ B, o0 j* j$ a6 H5 W# q
private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName()); $ C7 a/ b2 H( h& B: u5 ^1 @& s
' u" l. Z% \5 V) B& x
private static final Class<?>[] QUESTS = * b* D/ ?# t W0 G
{
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами. # f8 j! b( j! M8 F( p' y% i3 k/ E6 I* B) g2 b7 E5 X
! ~6 j4 r: R: \7 V, C2 p% \4 U Шаг 3: 7 |0 z/ x7 o( b9 m4 J2 C 1 F( p0 |! e* e( F9 A6 s3 F+ hФайл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д. $ a! [& @ A0 K4 `& Z6 bДавайте разберем все поля на основе примера:* o0 x4 l& C7 K9 I. w
. G+ h0 L6 V6 u$ P) g) e% @, `
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$ C" M) h, H/ g, L h
Скопировать код
Поля данных:
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 — завершение записи для квеста. : P2 r& ]) [( O& X+ @0 x1 a# m2 w
! ]' i. n5 w& e
; m4 r# D: t ]
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. 9 h3 E/ m& }, u# }
Пример соодержания2 ^& G. _2 P2 d2 q$ c5 h; H
Вот описание структуры строки:% Y! {0 J) H6 h& w t6 g
Давайте разберем все поля на основе примера: 6 J$ b$ M4 k" X2 _ , S* r3 U! s. x2 ^
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: Указывает на конец записи о квесте.- Z p; u+ P# [7 b
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.4 k! e, ~+ ]6 S2 S* e! d9 N) O
1 a3 b. P( L9 ?% I 3 |1 N7 @/ S2 X% V0 `8 m) U* u3 \+ d& P" \0 _) R
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов. ! L' B; Q2 H; p; ]+ z* N" z3 a/ r+ A: y+ y: _7 Y0 \8 U- u0 A3 h Шаг 4 $ b' }& l% U) l* HДля того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть: 0 S5 H' B8 M# PПример добавления нового квеста:# g+ u( {6 m2 U2 Z! Z, s% D
<quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">2 p+ [! e S+ y0 R6 q
<param name="goalItemCount">1</param> 3 p' U+ n+ ^ x# m
</goals>' H- r; e* g3 m- U3 v
</quest>. U$ }' B' I% r3 n2 S/ d
Скопировать код
Описание структуры: ; j- e7 @) p5 E) b. q
quest: Основной элемент квеста, содержащий атрибуты:. v" X7 e2 d& Z8 i# g: K3 x
id: ID квеста, уникальный для каждого квеста.
type: Тип квеста (1 – обычный квест).
name: Название квеста.
startNpcId: ID NPC, с которого начинается квест.
endNpcId: ID NPC, у которого квест заканчивается.% W# H$ C1 S: ^" K
locations: Указывает места начала, окончания и квестовой активности.) u q; u( h$ r+ K. @
startLocationId: ID места, где начинается квест.
endLocationId: ID места, где квест заканчивается.
questLocationId: ID квестовой зоны. : `/ g8 M# c6 ]" ?! u
conditions: Условия для начала квеста. . A' i7 c3 {* G- \! \0 e
preQuestId: ID предварительного квеста (если есть).
classIds: ID классов или рас, которым доступен квест. % g, R+ U$ e% `7 `* K; v, {- D
rewards: Награды за выполнение квеста. # f% P9 W# i. N5 C3 @: \+ d- B
rewardLevel: Минимальный уровень для получения награды.
rewardSp: Количество опыта (SP).
rewardItemId: ID предмета (например, Adena).
rewardItemCount: Количество предметов. ; R$ X; ?# k5 M, r* @1 d. m+ y9 C4 l
goals: Цели квеста.. W6 U: w. [4 }; X: S9 q O" Q% D! ~
goalCount: Количество монстров, которых нужно убить или предметов, которые нужно собрать.
goalString: Описание цели.
goalItemId: ID квестового предмета (если требуется).
goalItemCount: Количество квестовых предметов для завершения цели. z3 x: p3 h2 X f+ `7 q! C
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу. W2 W, |& {& ?2 h7 s
: i6 B X- M' c; s) [7 C( vШаг 5 4 T$ B. w/ ]/ w4 q/ AФайл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла:. f3 R& r4 j( L7 ] Структура данных
NewQuestDialog_begin — начало записи квеста в файле диалогов.
QuestId=10001 — идентификатор квеста (должен соответствовать ID, который ты используешь в других файлах).
Text0=... — первый диалог, который обычно отображается при старте квеста.
Text1=... — дополнительный текст, который отображается на различных этапах квеста.
Text2=... — текст, который отображается после выполнения определенных действий (например, после выполнения части задания).
Text3=... — дополнительный диалог, например, при встрече с NPC на следующем этапе квеста.
Text4=... — финальный текст или инструкции по следующему шагу для игрока.
NewQuestDialog_end — завершение записи для этого квеста.* t- v/ `# x/ |8 N+ Y& U
, s1 o9 W- V/ U/ }Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так:) P* i2 q+ n. o, Z( s* E
NewQuestDialog_begin QuestId=98765 Text0=[Вы готовы принять новый вызов и доказать свою силу?] Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.] Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.] Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.] Text4=[Поговорите с Дарти. Кликните на него и начните диалог.] NewQuestDialog_end; K/ E6 [8 T- L5 T. g8 s
Скопировать код
Разъяснение полей: $ n1 d0 o. F0 v$ F
QuestId=98765 — уникальный идентификатор нового квеста.
Text0 — вводный текст квеста. Отображается при первом контакте с NPC.
Text1 — дополнительный диалог, который дается игроку для создания контекста.
Text2 — текст, который отображается на следующем этапе квеста, например, после выполнения части задания.
Text3 — описание следующего шага или инструкции для игрока.
Text4 — финальный диалог или текст с указанием цели (встреча с другим NPC).) `: m7 ?" [6 V
; {9 ]; K2 b$ k9 h' [) \7 M* l, @/ ]& ^
Что можно изменить:
Тексты диалогов (Text0, Text1 и так далее) можно адаптировать под конкретные ситуации в квесте.
Количество текстов можно варьировать в зависимости от сложности квеста. % C2 x U$ n# L1 t* {/ e
) f0 \3 ?& t3 Q1 b
Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла: # s: ?3 Z6 n0 I2 F9 l/ t# v1 G0 I ! T5 x; U; A" n8 _! H1 d. o$ I& N' ~9 `
newquestdata_begin / newquestdata_end: Эти параметры обозначают начало и конец блока данных квеста.
quest_id=10001: Уникальный идентификатор квеста (ID). В данном случае это квест с ID 10001.
quest_type=1: Тип квеста. : ^6 E6 s/ a6 t! w5 S& b
1 обычно означает стандартный квест.* g3 s/ {/ @$ k( C. A, @( e- T8 d) T
quest_name=[Новый путь]: Название квеста. Здесь указано "[Новый путь]" — это имя, отображаемое в игре.
quest_level={0;0}: Уровневые ограничения квеста.$ @9 C0 A3 t3 [7 M0 G
Первое значение указывает минимальный уровень, второе — максимальный уровень.
{0;0} означает, что нет ограничений по уровню. ! x. J9 `* l! p. h8 F
pre_quest={}: Предварительный квест, который нужно выполнить перед началом этого квеста. ` n, ~6 x5 C( c/ E
В данном случае он пустой {}, что означает, что нет предварительных требований. - Q& f: x: l% W/ @# V
class={0;10;18;25;31;38;44;49;53;123;124}: Классы или расы, которые могут брать квест." Y& y0 M$ e. q
Номера классов указывают на те классы, которым доступен этот квест. В данном примере классы, такие как 0 (человеки), 10 (рыцари) и другие, имеют доступ. 1 [, k/ R- r8 |! g5 f
quest_item=82948: ID квестового предмета, необходимого для выполнения цели или этапа квеста." b; k& U8 D* H# i9 y# [9 n, e
В данном случае это предмет с ID 82948.9 ?9 i; E4 F8 n
start_item=0: Предмет, который выдается при начале квеста. 3 z; G0 E; P {& v9 G, P
Значение 0 означает, что предмет не выдается. " s; ~! w/ C" H: o0 Y
start_npc=34505: ID NPC, у которого начинается квест.
start_npc_loc=1002: Локация NPC, у которого начинается квест., s3 W1 x1 B! v
Это ID локации, где находится стартовый NPC.# }: ]- @% ?; W N1 B
end_npc=34696: ID NPC, у которого завершается квест.
end_npc_loc=1003: Локация NPC, у которого завершается квест. t2 J( V z& S; n4 P
Это ID локации, где находится конечный NPC./ r7 {' c( Y2 M0 f
quest_loc=1003: Основная локация выполнения квеста. 3 u4 }% m2 ~1 i/ o: X
Это ID зоны, где нужно выполнять основные задачи.+ r$ ~, E4 T# U6 X+ i P0 g
goal_string=[Дарти (Зона Тренировки)]: Описание цели квеста. + _% f# G& T8 r$ j
В данном случае цель связана с персонажем по имени "Дарти" в Зоне Тренировки.1 k( C/ S3 E' f
goal_num=1: Количество действий, необходимых для выполнения цели (например, убийств монстров или сбора предметов). : V) n1 ?& A: u8 P+ F& v
В данном случае нужно выполнить одно действие (1). 7 j- A! Y3 X+ V; V( w5 U
reward_level=65535: Уровень, при котором можно получить награду. 5 q- d7 y- W$ e) T- z
В данном случае это максимальное значение, указывающее, что награда доступна всегда. 4 x: d9 a% H) V1 f$ V
reward_exp=0: Опыт (EXP), выдаваемый в качестве награды.9 d6 |+ n2 c; C! E
В данном случае опыт не выдается., w9 Y' T7 y. Y* l- M
reward_sp=0: Количество SP (Skill Points), выдаваемых в качестве награды. 0 [" S" _$ O* g. {4 p
Здесь тоже 0, значит, SP не выдаются. 4 ?4 y# z: v. t5 ~- q9 ]
reward_item={}: Наградные предметы. }/ R. E) n. z# S
В данном случае наградные предметы отсутствуют. 5 g$ G" }; Q3 _) ]$ U. q- b8 q
Этот файл определяет основной функционал и настройки для конкретного квеста в игре.- O3 [% A1 o3 r; m) T
# e: ]5 @ }6 [' o( h
( m+ g0 v- `* ?- ^
; J; D. M, j" O% _: M5 Z' Q D( c# B K* }- [" d% O$ \) Y, ] n
8 R' p5 ~- S! [ S; ]8 S& {4 w
3 \- T# n( e4 @" d7 L I \ % U. i5 g" U& v# m; J5 B7 Y: b) d/ I1 s' v& ^. H6 @' x" u1 n- C8 y
4 q, S7 I- k% |) ^7 y" ^. E
Добро пожаловать artace.ru - творческий сектор (https://artace.ru/)