Название: Создание квестов L2j_Mobius [Версия для печати] Автор: admin Время: 2024-9-24 00:52 Название: Создание квестов L2j_Mobius Сборка: L2l_Monius ; ]" P9 s7 N2 ^1 {0 Z8 c
Следующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk.; f. W4 O- T: Y/ q2 i. m
: n6 k# U. e' O ; S: o0 _6 z1 W3 ]5 c+ W( w- S9 v+ K8 QИди и убей X монстров / Возвращение - награда. * u' k2 {2 D( e! l9 RQ00529_RegularBarrierMaintenance* t7 {% {7 o: g
; h5 a1 Y O9 D9 v5 K! Q8 V* t
Получите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.2 t3 x) p; L: _( ^! f3 N
Q00683_AdventOfKrofinSubspecies * Q+ t! n. C& k+ X* R. K: y/ y6 A 6 k6 w! e9 v# W, c7 IПоговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда. 1 P2 \# @0 r' T1 @+ j" V X o8 ?' qQ10516_UnveiledFafurionTemple0 X8 a! N+ b5 g' f$ G* o! c# Q
' x n$ Y/ D! X* u' ~* b& I' o
Убейте X монстров, а также соберите X предметов / Возврат - награда.) p, l( `7 X5 g
Q10517_FafurionsMinions# |8 f a" |) l0 b- c5 o* S
$ n; v% X1 r% h `8 GИди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.' S& W, l; E) o% I3 n
Q10529_IvoryTowersResearchFloatingSeaJournal 5 I- o: K8 A7 f- t( J0 P, D 2 V0 y# [2 _4 V& p7 s* EИди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда. 9 }0 \; z$ |; Y" f2 h# l2 ^% U6 j& `) nQ10518_SucceedingThePriestess% D. M* W- j) K3 g; W+ O8 |. X; {
9 e& l6 @% L3 ]( y( Q0 {Участвуйте в убийстве рейдбосса / Возврат - награда.3 O$ |$ c! A- V/ f1 o6 K2 B7 ]5 f
Q10519_контролирование вашей температуры 2 ]# X3 Y7 N: i" F " ~ ^- a* h- o" _1 d- sПоговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда. 7 J( n/ }) s, ^ w3 z( V# s0 GQ10533_OrfensAmbition y/ h9 `5 I6 r \. A3 j
# b. Y5 _( W% T& V 9 i, p) _& ?$ C& o* n9 U8 r E; y. @3 U Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста! 1 N/ P& T% [' F; L, j9 v6 R- w$ [* g/ x0 a) D0 ]) o: z# a
Шаг 1: Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest". 5 a0 v2 y! S: N5 o $ J5 D' Z) l8 z ~Шаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java". / {$ \/ p0 a- d6 [5 T& S+ y; F' a' N( z" E! m Шаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat".$ S; T; a9 [0 V% z5 E. E) v
8 Q3 a% p3 F, f `Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов. / j J! ]# T& |, q( m, z, `- W; S& P( p Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест.- Z. {0 a" h/ J0 z% z( q8 U' L
7 m" {/ r/ J4 h: FШаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat". 8 S* I( B! m8 m) a* Z/ l+ A: H+ K & v6 \- X! ?* \5 P' @Если я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях. * t* w9 h% C3 q: F( `. P- w" @( e& B4 [/ {% B Шаг 2:# K& Z: w. A! Y: B8 M. j9 ^9 l( M
5 z. D% X4 z8 l% W4 f+ IСледующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план: % W* D' g4 o) M$ ~/ S* s- Z$ Z' `, H) X 1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. # R& \# g* _3 B7 |
Например: + v& ]- K% U x0 f5 W$ D' _. w+ l* T; Z2 Y& k5 Q$ i
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест:. O5 o7 |( P% R( A8 @& Q. \1 Z
( T$ g7 d" a) a, O6 h2 \
/**& f+ H- U& s( M( {4 l$ N
* @author NosBit) W* _. f+ D0 u' \% J( X
*/ ' v" V( V7 L. Z# Y
public class QuestMasterHandler # P% n2 T" v. a# n5 y$ r- Z
{# i% n# v8 g, D/ T" W" _
private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());* S, y/ R& C% p+ X# w
4 Q3 e" ~+ P0 @0 h! @; R- g% ~
private static final Class<?>[] QUESTS =$ b2 c, w9 F( K( m
{
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами. 9 m0 p n9 b0 ~* M! _9 z6 n; @6 x7 l! y
' e5 E# @% S7 o9 C- j! t Шаг 3: 4 A2 c" `( g$ n: z: [; T* T7 U- @- B9 f& E# U
Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д. " L7 \9 n/ K* {' @3 h7 k
Давайте разберем все поля на основе примера: 1 n& o/ ^; ? a0 u5 K7 t1 }0 m3 J& V. ?6 a% Z( f) j
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 # P+ v, s& `# I6 f. m; l
Скопировать код
Поля данных:
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 — завершение записи для квеста. 9 [% @/ z8 q0 z, u, G" e
2 i9 H: [" `5 ^% \5 B7 W% p- [$ \( ]! W
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. 9 C% d4 s- [" L6 a- n: R. GПример соодержания . K$ k, }+ k# Q2 \9 [2 n; ]Вот описание структуры строки:% W8 w/ q" T9 a4 J) ]
Давайте разберем все поля на основе примера: a: _& b8 N) p$ p* s, Y
# g5 G. K. o! N6 M
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: Указывает на конец записи о квесте.$ W8 F2 ^8 r; H) j8 [
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC.( q7 }$ V& {# O* ]* J
# g3 V9 y I9 L) G 5 S- o+ Q: I" w5 B* H" J+ W8 U9 ~# N/ a/ H, i( r' M$ i2 { E
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов. 0 f0 T' J ]0 g' Y+ _4 M6 _- n" b, O( _0 c* ^" Y Шаг 42 m# R# Z/ G Y- N9 V' Q; A
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть:/ ]% ^5 a1 N* ~; S7 q, H/ j- m
Пример добавления нового квеста: " m+ b5 C q2 x4 L7 g1 ~
<quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051"> N: r; y! W. P6 w* ?% o: R
<param name="goalItemCount">1</param>8 B+ M; y6 W5 y! I2 c5 }0 d: S% E
</goals>" E" N# q5 Y4 x# l" H+ n
</quest> 8 P9 X F9 w/ {* E5 e: N+ J; Z/ u, y) {8 X
Скопировать код
Описание структуры:+ ]2 o+ ~$ ^/ V8 t( f/ ]
quest: Основной элемент квеста, содержащий атрибуты:$ h; `, V0 P0 a, u9 u+ ^/ s5 n; e" q
id: ID квеста, уникальный для каждого квеста.
type: Тип квеста (1 – обычный квест).
name: Название квеста.
startNpcId: ID NPC, с которого начинается квест.
endNpcId: ID NPC, у которого квест заканчивается.! i c! j- U' D/ O
locations: Указывает места начала, окончания и квестовой активности. * A( ^5 _; w- T
startLocationId: ID места, где начинается квест.
endLocationId: ID места, где квест заканчивается.
questLocationId: ID квестовой зоны.# _! _2 w" G' S! H; x. X7 H
conditions: Условия для начала квеста. 4 f1 l) K& m5 o9 b& _9 S) H- A7 U
preQuestId: ID предварительного квеста (если есть).
classIds: ID классов или рас, которым доступен квест. ; L* C) R4 ^/ P) P+ c7 c* e$ @. B! c
rewards: Награды за выполнение квеста. & P/ D* q4 S ]+ s a3 ?
rewardLevel: Минимальный уровень для получения награды.
rewardSp: Количество опыта (SP).
rewardItemId: ID предмета (например, Adena).
rewardItemCount: Количество предметов.( d, l3 p7 Q2 G6 e; x
goals: Цели квеста. 2 ~" B5 U! ^! K% @- O
goalCount: Количество монстров, которых нужно убить или предметов, которые нужно собрать.
goalString: Описание цели.
goalItemId: ID квестового предмета (если требуется).
goalItemCount: Количество квестовых предметов для завершения цели. ( T- o0 f+ E+ n+ Z4 g% f
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.8 a2 b5 F8 F- n
+ R& Y# T5 B! l& ^0 t* bШаг 5% A J @2 ?+ q4 U; R7 j
Файл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла: " \' z0 n6 N! P4 tСтруктура данных
NewQuestDialog_begin — начало записи квеста в файле диалогов.
QuestId=10001 — идентификатор квеста (должен соответствовать ID, который ты используешь в других файлах).
Text0=... — первый диалог, который обычно отображается при старте квеста.
Text1=... — дополнительный текст, который отображается на различных этапах квеста.
Text2=... — текст, который отображается после выполнения определенных действий (например, после выполнения части задания).
Text3=... — дополнительный диалог, например, при встрече с NPC на следующем этапе квеста.
Text4=... — финальный текст или инструкции по следующему шагу для игрока.
NewQuestDialog_end — завершение записи для этого квеста. B, X- e7 C) ^$ R
/ t' s# M/ Q7 ~+ \4 E7 s Пример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так: * S' ~; S0 `2 ~# T2 K
NewQuestDialog_begin QuestId=98765 Text0=[Вы готовы принять новый вызов и доказать свою силу?] Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.] Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.] Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.] Text4=[Поговорите с Дарти. Кликните на него и начните диалог.] NewQuestDialog_end % C3 x$ @& U9 L$ y4 F6 D
Скопировать код
Разъяснение полей:% v# g# U) G5 x/ C2 ~! z+ @/ I
QuestId=98765 — уникальный идентификатор нового квеста.
Text0 — вводный текст квеста. Отображается при первом контакте с NPC.
Text1 — дополнительный диалог, который дается игроку для создания контекста.
Text2 — текст, который отображается на следующем этапе квеста, например, после выполнения части задания.
Text3 — описание следующего шага или инструкции для игрока.
Text4 — финальный диалог или текст с указанием цели (встреча с другим NPC). : J. `8 |* _# i; g7 O
& z" {9 |9 P; `7 B- o, ^ # D4 d) _& ^& F9 {& xЧто можно изменить:
Тексты диалогов (Text0, Text1 и так далее) можно адаптировать под конкретные ситуации в квесте.
Количество текстов можно варьировать в зависимости от сложности квеста.- R7 \& u' B) H m2 W3 Z: e
0 I" a- o! O$ k9 g" f$ ?
Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла: & y% e6 Z% ? q8 k, H" x" |: L) n x7 G% X6 A6 n
newquestdata_begin / newquestdata_end: Эти параметры обозначают начало и конец блока данных квеста.
quest_id=10001: Уникальный идентификатор квеста (ID). В данном случае это квест с ID 10001.
quest_type=1: Тип квеста.! E3 ?1 k( _: b* E& U3 V, v
1 обычно означает стандартный квест. 8 a/ M2 s P; b! C. Q! s- @, A/ S; r5 b- E
quest_name=[Новый путь]: Название квеста. Здесь указано "[Новый путь]" — это имя, отображаемое в игре.
Первое значение указывает минимальный уровень, второе — максимальный уровень.
{0;0} означает, что нет ограничений по уровню.4 ]8 m$ A% @ Z: X9 @! X- Z, w: O
pre_quest={}: Предварительный квест, который нужно выполнить перед началом этого квеста. 4 Q& Z1 W2 `' n8 U, s1 m
В данном случае он пустой {}, что означает, что нет предварительных требований. , A6 L( Y# ~1 ?- c
class={0;10;18;25;31;38;44;49;53;123;124}: Классы или расы, которые могут брать квест. & H8 F9 ?( q! q1 x6 P) G8 M+ V
Номера классов указывают на те классы, которым доступен этот квест. В данном примере классы, такие как 0 (человеки), 10 (рыцари) и другие, имеют доступ.' u6 O* b# A3 s; D
quest_item=82948: ID квестового предмета, необходимого для выполнения цели или этапа квеста.) |) R0 z3 ~* l! ?* Z& ?
В данном случае это предмет с ID 82948. a5 c; J. V. L5 G% a8 v F: Z
start_item=0: Предмет, который выдается при начале квеста.) V/ i1 N$ K* r& ]- Q7 H
Значение 0 означает, что предмет не выдается.1 K7 y' m. W& o$ K: d
start_npc=34505: ID NPC, у которого начинается квест.
start_npc_loc=1002: Локация NPC, у которого начинается квест.1 M* ~3 N, @& ]6 m0 Q* f' s7 ?( W
Это ID локации, где находится стартовый NPC. # D. }3 j: C8 p& f' I! }
end_npc=34696: ID NPC, у которого завершается квест.
end_npc_loc=1003: Локация NPC, у которого завершается квест. / f/ G1 Q2 t/ a0 P. C6 D* q
Это ID локации, где находится конечный NPC.5 v6 p2 i! p! \* a! l$ u4 h
quest_loc=1003: Основная локация выполнения квеста.8 z- N- P! Y8 J1 c: T4 W3 x
Это ID зоны, где нужно выполнять основные задачи. 7 d7 S9 z7 w T7 A5 d* `5 O+ {: I4 P3 q
goal_string=[Дарти (Зона Тренировки)]: Описание цели квеста. : T) `4 G, |3 T6 h
В данном случае цель связана с персонажем по имени "Дарти" в Зоне Тренировки.. @3 E5 r: ^. e% u5 D
goal_num=1: Количество действий, необходимых для выполнения цели (например, убийств монстров или сбора предметов).3 j. `& x3 d" e/ ?' ?
В данном случае нужно выполнить одно действие (1).# v" A8 C: y. a w# y) e, }" ^
reward_level=65535: Уровень, при котором можно получить награду. ~. z5 o" q* T6 X4 ?
В данном случае это максимальное значение, указывающее, что награда доступна всегда. ; r/ i( U2 A) J
reward_exp=0: Опыт (EXP), выдаваемый в качестве награды. / I* b3 J1 _8 E) s
В данном случае опыт не выдается. ( o8 p% ~8 A: [! p1 ~6 K H2 f
reward_sp=0: Количество SP (Skill Points), выдаваемых в качестве награды.% M! @' ?0 a) V; c0 j
Здесь тоже 0, значит, SP не выдаются. ' V% ~ H) N* C) G% I/ d" d& @
reward_item={}: Наградные предметы. - f) a) V/ L3 {1 Q; ^) L* p0 U
В данном случае наградные предметы отсутствуют. ' O% n8 E7 L9 N
Этот файл определяет основной функционал и настройки для конкретного квеста в игре.- V6 `! o2 }9 E. Q( p2 F
8 X, y [* e9 q' P 7 a. e- }9 w2 n. o1 E- z( [ - W% ^$ I" ]/ S 3 |+ F& }! m" s, g 5 `& Q: T% l& k% s' A. K % W% ?& J, \& w+ \: J; A f1 a % t- t* H" ?/ N: X, } . @7 g4 c8 W% z0 d# M2 L, N! r9 e4 E% X& v( H. t% o4 P
# x3 O$ p( ~/ ^% o
Добро пожаловать artace.ru - творческий сектор (https://www.artace.ru/)