Название: Создание квестов L2j_Mobius [Версия для печати] Автор: admin Время: 2024-9-24 00:52 Название: Создание квестов L2j_Mobius Сборка: L2l_Monius . Y: B+ }. F+ J- y8 N4 CСледующие квесты можно использовать в качестве шаблонов для создания практически любого простого квеста go kill или go talk. 1 I4 }4 d2 p/ c" j* _( t/ Z6 S5 X P4 r
( r# Y, D* a& E
Иди и убей X монстров / Возвращение - награда. 3 H( m3 ^0 l6 X+ _9 dQ00529_RegularBarrierMaintenance2 Q: _7 x- Y/ D; @% j8 O- k- O
' t% O% f. |/ B9 g! AПолучите квест от любого из двух разных NPC / Убейте X монстров / Вернитесь с наградой.2 g5 G, t0 {. c/ i0 m
Q00683_AdventOfKrofinSubspecies 4 [5 n/ R. B) e8 S; }9 S8 z : j- N% D- s/ z) x l: Y GПоговори с NPC 1 / Поговори с NPC 2 / Поговори с завершающим NPC / Награда.1 ^1 p6 ^- |3 |# j) m, a V
Q10516_UnveiledFafurionTemple. N2 g+ u4 _% U8 ^# d$ I
2 k& ^. y/ L3 z1 Q1 E2 }. R" K! \( `
Убейте X монстров, а также соберите X предметов / Возврат - награда. W+ ? E2 \" s
Q10517_FafurionsMinions $ o+ H1 o) t r: P) d$ C: @" P! V0 _9 c; p4 u
Иди собери X капель монстров / Вернись - убей X монстров / Вернись - награда.& w7 u; q _2 \1 v+ Y3 n( l
Q10529_IvoryTowersResearchFloatingSeaJournal9 ]) p9 O0 ^) }& F/ O
% g5 V5 @9 H" x3 Q0 y5 k! }% j
Иди убей X монстров, а также собери X предметов / Возвращение - иди собери X предметов / Возвращение - награда. ' H$ _2 e A3 | A8 ]$ h% M$ CQ10518_SucceedingThePriestess: K* K3 H( C8 u% R, f! {
- H, P3 n7 O5 p3 KУчаствуйте в убийстве рейдбосса / Возврат - награда.* u8 n: B' q5 d
Q10519_контролирование вашей температуры 0 V9 Z$ N& U9 n 7 j* k" J4 O6 h" P& [Поговорите с NPC 1 / Примите участие в убийстве рейдбосса / Возвращение - награда. 2 h/ c% _7 h4 r: t9 N, X2 ^Q10533_OrfensAmbition' S) i2 p8 S9 Z8 ~" L6 d `( L/ ~
+ Z) s& t' {+ y0 l; t 1 t4 |7 U5 T0 a/ _8 N( ?$ Q 0 I8 O8 N2 A7 N) {Руководство требует обновления. И, к сожалению, с самыми последними хрониками вы не сможете избежать модификаций клиента. Поэтому, исключительно в образовательных целях, я предлагаю свой опыт по добавлению нового квеста!% i# U. N, G- ?8 L, v* Z# ^8 S 1 u m$ L8 _6 J/ yШаг 1: Создайте свой квест с уникальным ID. В этом примере я буду ссылаться на квест как "Q98765_NewQuest".* }2 f( Z" b) z6 k5 v
; J9 Y# Y3 t' X2 ]* a7 d" zШаг 2: Когда вы успешно создали свой квест и Eclipse не выдает ошибок, добавьте название квеста и импортируйте его в файл "QuestMasterHandler.java"./ E/ Q0 z7 b6 E+ |1 V$ R
% y6 V5 G7 d$ Z( `' hШаг 3: Перейдите в клиент и с помощью редактора клиента добавьте квест в следующие файлы .dat: "questname-ru.dat" и "QuestMarkConditionData.dat". ! t, j B9 E! C/ r d" ?6 A! B, ^3 v& D. Q3 i: B
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов. % R, S3 ~: Y0 Y5 v% S) s V6 C$ E+ o# Z% u1 O Шаг 4: Найдите в серверных файлах файл с названием "NewQuestData.xml" и добавьте туда свой квест. / `9 {# ?( X" Q3 [" `) y% o/ p $ [! l; C& b, o& BШаг 5: Найдите в клиенте следующие файлы и добавьте туда свой квест: "NewQuestData-ru.dat", "NewQuestDialog-ru.dat" и "NewQuestNpcPortrait.dat". ! p3 i7 v/ Z$ ~2 C2 ~, v* x5 e x2 u9 j9 W/ w7 e! pЕсли я что-то забыл, не стесняйтесь исправить меня. Это руководство создано исключительно в образовательных целях.% L; J/ t' o1 ^0 a
. |( j1 ] ]" t) i) F2 s+ p Шаг 2: S4 n* M) `8 f1 A+ x+ h& e
8 C+ `6 K0 m. L0 K$ z2 e. \* e
Следующий шаг заключается в добавлении вашего квеста в QuestMasterHandler.java. Вот общий план:( s. H7 n4 B8 n1 a; n5 R T
) N$ e ^. `( f 1. Импорт вашего квеста: В начале файла после всех существующих импортов добавьте строку, которая будет импортировать ваш квест. 7 r3 C0 Y5 C! A+ Z: SНапример: ( W) I% {( [% |% ]! y8 |* h/ u, l9 o( N. D/ e6 l$ Z
import quests.<span style="background-color: rgb(255, 255, 255);">Q98765_NewQuest</span>.<span style="background-color: rgb(255, 255, 255);">Q98765_NewQuest</span>; % ^8 l6 } U" R& [4 y s
Скопировать код
1. Регистрация квеста: Найдите метод, который отвечает за регистрацию всех квестов. Обычно это делается в статическом блоке или методе init, где происходит инициализация квестов. В этом блоке добавьте строку, которая будет регистрировать ваш квест: " |0 f1 J \7 F5 V G 7 z7 t0 W A' O! S2 r9 R
/** 2 J; R3 o0 y( O) I1 b. \* W' }2 N' F
* @author NosBit 3 \. @( k# {! Z$ q9 g
*/6 d2 F7 z( ]- R4 b( h
public class QuestMasterHandler / @6 T" H0 G: ]& v! X4 `
{ ) g! r- @/ D/ k. ]- L4 b N: c3 O! N
private static final Logger LOGGER = Logger.getLogger(QuestMasterHandler.class.getName());' `$ n7 a- n1 O9 t, n
. g- R1 X8 f% |& ~
private static final Class<?>[] QUESTS =6 _2 a7 b( L+ ]7 p y$ B
{
Скопировать код
Проверка: Убедитесь, что идентификатор вашего квеста (в данном случае Q98765_NewQuest.class) уникален и не конфликтует с уже существующими квестами.) U( h2 h& ]. ~7 E/ t( q
( ~9 B( W3 R( r" O* B+ d/ E. y% p2 w$ ?: K Шаг 3:. O1 S$ L: e- C* D! A* B
+ F8 H/ B6 E; W5 p* o( |
Файл QuestName-ru.dat используется для описания квестов и содержит различные параметры, которые задают характеристики квеста, его цели, награды, ограничения и т.д. ) p1 D0 y/ C& r4 ]. I0 j* S
Давайте разберем все поля на основе примера: . a3 m( N3 K% Z& g+ E6 F 4 y8 Y1 ?1 N) S/ N9 |( 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 ! J G5 Z1 c' P/ o4 G0 B- l2 ~
Скопировать код
Поля данных:
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 — завершение записи для квеста. ) H7 P6 a& f% _" h' r, h
! n/ e2 A9 i$ J* v) h3 l2 G' k* j+ [
Файл клиента QuestMarkConditionData.dat содержит информацию о квестах, связанных с условиями, необходимыми для активации или завершения определённых действий в игре. ; t* A1 i# ]8 {1 h# z$ ~5 ~$ y
Пример соодержания 4 I( B7 g: ?4 R+ Q. }% l' NВот описание структуры строки: # i1 f- I1 d. N6 _
Давайте разберем все поля на основе примера:0 z k+ L6 t, l6 x1 W
. O2 r+ ~$ c/ b8 q9 x5 e, y
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: Указывает на конец записи о квесте.! a& \& t7 U; m( J
Эта структура помогает клиенту определять условия, при которых игрок может начать или выполнить квест, а также идентифицировать необходимые взаимодействия с NPC." [* W e. V2 i) s- O+ _) C
4 p% C( |, l+ Z! R, p7 z' Y" T; e/ @4 i0 a: }) ~: @
& J# ^. E- @7 H+ f& C7 X3 _
Следующие шаги относятся к любым новым хроникам, которые используют всплывающие окна квестов./ L. X3 y8 }; U$ g
3 q _7 I$ z6 r, a4 |0 @% S+ P Шаг 4& g" k! s1 Q. h) U- I6 f
Для того чтобы добавить свой квест в файл NewQuestData.xml, нужно следовать структуре, аналогичной приведенному вами примеру. Вот как это может выглядеть: # h( m$ g [) T" o! v _Пример добавления нового квеста: / w2 ]/ l& l, \ @
<quest id="20001" type="1" name="Mystery of the Lost Relic" startNpcId="30050" endNpcId="30051">6 O) G9 T! c4 w
<locations>' e% ^! _. t5 d& ]; Z& M, T4 n
<param name="startLocationId">2001</param>: @! n& Z S. O3 S
quest: Основной элемент квеста, содержащий атрибуты:8 d" f/ O. _+ A% g, Z
id: ID квеста, уникальный для каждого квеста.
type: Тип квеста (1 – обычный квест).
name: Название квеста.
startNpcId: ID NPC, с которого начинается квест.
endNpcId: ID NPC, у которого квест заканчивается. 1 C, O, R( k& q. Q! c/ U$ F
locations: Указывает места начала, окончания и квестовой активности. 6 M* c; a8 R0 H1 `4 Q# g; Q; \
startLocationId: ID места, где начинается квест.
endLocationId: ID места, где квест заканчивается.
questLocationId: ID квестовой зоны.5 O* [/ F! ]( ~+ x
conditions: Условия для начала квеста. ) x# X5 l$ u9 @ g
preQuestId: ID предварительного квеста (если есть).
classIds: ID классов или рас, которым доступен квест. : _" F& i _* j, ^
rewards: Награды за выполнение квеста. 0 E; S5 I6 ?" K% z
rewardLevel: Минимальный уровень для получения награды.
rewardSp: Количество опыта (SP).
rewardItemId: ID предмета (например, Adena).
rewardItemCount: Количество предметов.5 F$ i4 c* r+ w! y' U# h) X
goals: Цели квеста.* {- m$ k$ G$ @* F9 s
goalCount: Количество монстров, которых нужно убить или предметов, которые нужно собрать.
goalString: Описание цели.
goalItemId: ID квестового предмета (если требуется).
goalItemCount: Количество квестовых предметов для завершения цели.; z. {) {& Y6 M# x
После того как вы добавите квест в файл NewQuestData.xml, нужно перезапустить сервер, чтобы изменения вступили в силу.# O4 I: _. ~! i" N
& V3 Q2 V) P* @& A Шаг 5 1 ^ j' s* n# w0 vФайл NewQuestDialog-ru.dat используется для хранения диалогов, связанных с квестом. Он определяет тексты, которые отображаются в окнах диалогов с NPC во время выполнения квеста. Вот разбор ключевых элементов строки и структура файла: : M' j; y2 K% rСтруктура данных
NewQuestDialog_begin — начало записи квеста в файле диалогов.
QuestId=10001 — идентификатор квеста (должен соответствовать ID, который ты используешь в других файлах).
Text0=... — первый диалог, который обычно отображается при старте квеста.
Text1=... — дополнительный текст, который отображается на различных этапах квеста.
Text2=... — текст, который отображается после выполнения определенных действий (например, после выполнения части задания).
Text3=... — дополнительный диалог, например, при встрече с NPC на следующем этапе квеста.
Text4=... — финальный текст или инструкции по следующему шагу для игрока.
NewQuestDialog_end — завершение записи для этого квеста. M; @) H- h+ n S
4 H# ?. C3 B3 J9 T+ I( cПример записи для нового квеста (ID 98765) Если ты хочешь создать диалоги для нового квеста с ID 98765, твой файл может выглядеть так: ; j; ]& q8 V8 g o/ q
NewQuestDialog_begin QuestId=98765 Text0=[Вы готовы принять новый вызов и доказать свою силу?] Text1=[Как вы себя чувствуете? Вы выглядите уверенно. Это хороший знак, но не расслабляйтесь — впереди много испытаний. Примите это задание, если готовы.] Text2=[Пора приступить к тренировкам. Идите за мной в тренировочную зону.] Text3=[Следуйте моим указаниям, и вы раскроете весь свой потенциал.] Text4=[Поговорите с Дарти. Кликните на него и начните диалог.] NewQuestDialog_end ! _4 y5 B. v) S. d# d8 U
QuestId=98765 — уникальный идентификатор нового квеста.
Text0 — вводный текст квеста. Отображается при первом контакте с NPC.
Text1 — дополнительный диалог, который дается игроку для создания контекста.
Text2 — текст, который отображается на следующем этапе квеста, например, после выполнения части задания.
Text3 — описание следующего шага или инструкции для игрока.
Text4 — финальный диалог или текст с указанием цели (встреча с другим NPC).( _9 C3 ?/ U3 S- E* J3 r0 H8 ^* [
4 x! G7 L* s2 H7 y) X
0 {6 G4 j4 i( c, CЧто можно изменить:
Тексты диалогов (Text0, Text1 и так далее) можно адаптировать под конкретные ситуации в квесте.
Количество текстов можно варьировать в зависимости от сложности квеста.$ t# h8 j6 N1 q7 B w; I
1 ^% Y: I$ f2 r: C7 M9 I& N8 @Файл NewQuestData-ru.dat содержит параметры, связанные с квестом в игре Lineage II, и описывает условия, NPC, цели и награды. Рассмотрим параметры этого файла: ( E9 D6 c* y1 @* }( W 8 l/ B Y8 R L1 ?7 {. @8 ~* _" n0 l
newquestdata_begin / newquestdata_end: Эти параметры обозначают начало и конец блока данных квеста.
quest_id=10001: Уникальный идентификатор квеста (ID). В данном случае это квест с ID 10001.
quest_type=1: Тип квеста. 2 R4 ~7 {% v ?( j, Y8 K
1 обычно означает стандартный квест. 7 E8 D5 A/ u- B
quest_name=[Новый путь]: Название квеста. Здесь указано "[Новый путь]" — это имя, отображаемое в игре.
Первое значение указывает минимальный уровень, второе — максимальный уровень.
{0;0} означает, что нет ограничений по уровню., o" T# s: t+ o8 J
pre_quest={}: Предварительный квест, который нужно выполнить перед началом этого квеста.4 c' _+ [, Q0 z6 [9 O
В данном случае он пустой {}, что означает, что нет предварительных требований. / r* ]* w; Q, u" c, X
class={0;10;18;25;31;38;44;49;53;123;124}: Классы или расы, которые могут брать квест.' |4 N2 D H- `2 e' g; J) @1 X" E
Номера классов указывают на те классы, которым доступен этот квест. В данном примере классы, такие как 0 (человеки), 10 (рыцари) и другие, имеют доступ.* F' N0 W x: n7 u, k! k
quest_item=82948: ID квестового предмета, необходимого для выполнения цели или этапа квеста.& v; X$ l b1 c3 E y' q/ A. o; V
В данном случае это предмет с ID 82948. + J; d. O7 E9 k" h
start_item=0: Предмет, который выдается при начале квеста. # O2 c/ C2 {! C! g% L' w
Значение 0 означает, что предмет не выдается.8 ?0 B& p/ m% U4 d2 B& z0 |3 x
start_npc=34505: ID NPC, у которого начинается квест.
start_npc_loc=1002: Локация NPC, у которого начинается квест. & |- x9 V2 ]1 f. V$ f# _ e/ f
Это ID локации, где находится стартовый NPC.- e Q: U9 @/ D
end_npc=34696: ID NPC, у которого завершается квест.
end_npc_loc=1003: Локация NPC, у которого завершается квест. : v" @' r% l. H: d% u' @
Это ID локации, где находится конечный NPC. : x. ^* K1 D% R0 v6 Y3 b$ {
quest_loc=1003: Основная локация выполнения квеста. 1 J H! b* ` T7 |. }) I0 L3 V' K
Это ID зоны, где нужно выполнять основные задачи.. a* O4 |! @& n0 I" O" t
goal_string=[Дарти (Зона Тренировки)]: Описание цели квеста. ) O) J7 z; ]* |9 G" D
В данном случае цель связана с персонажем по имени "Дарти" в Зоне Тренировки.# W8 j6 j2 T- m' X( I5 f/ ?5 s8 W) z* |
goal_num=1: Количество действий, необходимых для выполнения цели (например, убийств монстров или сбора предметов).9 B# T6 ?" r7 V6 E- x$ R
В данном случае нужно выполнить одно действие (1).( B, Q6 r9 Q) k E- o' Q
reward_level=65535: Уровень, при котором можно получить награду. , ?$ t: t: T8 e- Q" s
В данном случае это максимальное значение, указывающее, что награда доступна всегда. y* n) v! z$ s/ @" E6 x* m3 e; X
reward_exp=0: Опыт (EXP), выдаваемый в качестве награды.8 O% p5 ?2 @$ S; U( E6 U
В данном случае опыт не выдается. + R( b" {; {2 f ]6 L; Y4 ]5 ~
reward_sp=0: Количество SP (Skill Points), выдаваемых в качестве награды.$ A1 I5 R' }% d- z# w0 K9 i
Здесь тоже 0, значит, SP не выдаются. & f6 p6 O5 h: B) g8 t% P7 \
В данном случае наградные предметы отсутствуют. 8 s7 P3 W$ F3 ?/ x% j
Этот файл определяет основной функционал и настройки для конкретного квеста в игре. * M0 Z+ b B0 f. a0 I; w; y% L% n# ^ : n; W5 B/ M, ~1 h% v3 Q: J$ ~: r+ Y
, W H5 a8 |& g( k
1 K3 J4 y3 V, o
. Z: q, U0 c" R% J 7 G! O4 z7 e! d0 G) _: _6 Z5 L- s& d, J7 m2 E& f$ m8 k% x6 Z. W
. G7 S2 z: X) T- \6 _
2 Z2 g. c. f, t4 V* V2 h
! H6 }/ j9 g) F* A3 k+ ]! _
Добро пожаловать artace.ru - творческий сектор (https://www.artace.ru/)