К содержимому
RF DataСправочник данных
EN

Мир

Квесты

Квесты, события-триггеры, Quest.edf и тексты

Всего 132 Известно 60 Производное 63 Не используется 9

Обзор

Квест — составная сущность из двух серверных таблиц (Quest.dat и HolyStoneKeepperQuest.dat — квесты войны рас), девяти таблиц событий-триггеров Quest*Event.dat, клиентского Quest.edf (12 секций) и текстов NDQuest.edf в каждом языке. Клиентские файлы целиком выводятся из серверных данных и текстов: нужна сборка с упаковкой кодов, а не правка клиентских байтов.

Сервер (RF_Bin\Script)                     Клиент (DataTable)
Quest.dat                ─┐                Quest.edf  (12 секций)
HolyStoneKeepperQuest.dat ├─ сборка ──►      события 0–6, квесты, QuestItem,
Quest*Event.dat × 9      ─┘  (код→число)     расовые списки ×3
(текстов на сервере нет)                   <язык>\NDQuest.edf — тексты

Как работает

  • Запись квеста: до 3 целей (действий), награды (деньги, опыт, очки, до 6 предметов, до 2 мастерств, скилл, форс), до 5 переходов к следующим квестам и переход после провала, до 3 условий провала, группа повторяемости и m_dRepeatTime.
  • Событие-триггер — строка одной из 9 таблиц: когда и кому выдать квест; внутри 3 расовых блока, у каждого до 5 условий и до 5 ссылок на квесты. Строки одного NPC идут подряд; квест LevelUp получают только персонажи, достигшие уровня после выпуска.
  • Три системы нумерации: плотные позиции строк (m_dwIndex, перенумеровываются при сборке), стабильные текстовые индексы NDQuest (никогда не перенумеровываются) и идентичность в проекте. Смена индекса выпущенного квеста ломает активные квесты игроков.
  • Повторяемые квесты одной группы взаимоисключающие: пока взят один, остальные скрыты, после сдачи вся группа ждёт m_dRepeatTime.
  • QuestItem — клиентская таблица трофеев квестов с отдельной секцией имён в NDQuest.

Что важно при правке

  • Лимиты слотов 3 / 6 / 2 / 5 / 3, количества ≤ 255, длины текстов в байтах кодировки, имя квестового предмета ≤ 31 байт.
  • Ссылки на монстров, NPC и предметы существуют; у NPC есть кнопка задания в StoreList; общий квест есть во всех трёх расовых списках.

Quest.edf — производный от Quest.dat, HolyStoneKeepperQuest.dat и девяти Quest*Event.dat (правила quests.md §9). Расовые списки (секции 9–11, по 4 байта) в схеме Quest.edf.strs не описаны отдельной структурой; их правило — §9.5.

Файлы категории

13 в реестре
ФайлСторонаФорматУровеньКорпусаЗаписьСводПримечание
script\HolyStoneKeepperQuest.datсерверdatготов к полномуAoP ✓, GU ✓, Sirin ✓AoP 2408, GU 2408, Sirin 2408quests.mdquests.md §3 (HSK)
script\Quest.datсерверdatготов к полномуAoP ✓, GU ✓, Sirin ✓AoP 2408, GU 2408, Sirin 2408quests.mdquests.md §3–7
script\QuestDummyEvent.datсерверdatготов к полномуAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestGainItemEvent.datсерверdatготов к полномуAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestGradeEvent.datсерверdatготов к полномуAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestKillOtherRaceEvent.datсерверdatготов к полномуAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestLvLimitEvent.datсерверdatготов к полномуAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestLvUpEvent.datсерверdatготов к полномуAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestMasteryEvent.datсерверdatготов к полномуAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestNPCEvent.datсерверdatготов к полномуAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestPromoteEvent.datсерверdatготов к полномуAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
DataTable\<язык>\NDQuest.edfклиентedfпроизводныйAoP ✓ (en-ph, ru-ru), GU ✓ (en-gb, ru-ru), Sirin ✓ (en-gb, ru-ru)AoP 2 секц.: 32/16, GU 2 секц.: 32/16, Sirin…quests.md, localization.mdПроизводный из: тексты квестов и имена QuestItem. quests.md §11.1; динамические строки STRS не поддерживает (client-codecs.md §2.4)
DataTable\Quest.edfклиентedfпроизводныйAoP ✓, GU ✓, Sirin ✓AoP 12 секц.: 336×7/424/44/4×3, GU 12 секц.:…quests.mdПроизводный из: Quest.dat, HolyStoneKeepperQuest.dat, Quest*Event.dat. 12 секций (quests.md §9.1)

«готов к полному» — формат разобран и поля описаны; «производный» — файл собирается из другого; «непрозрачный» — формат известен не до конца; «отложен» и «вне рамок» — файл студией не редактируется.

Разделы категории

Файлы категории разбиты на группы; у каждой группы и подгруппы своя страница с полями только её файлов.

Квесты

script\HolyStoneKeepperQuest.dat, script\Quest.dat

Всего 48 Известно 47 Производное 0 Не используется 1

События-триггеры

QuestDummyEvent.dat, QuestGainItemEvent.dat …

Всего 13 Известно 12 Производное 0 Не используется 1

Неиспользуемые параметры

Поля, которые не читает ни сервер, ни клиент. Для каждого — почему так решено и где это установлено. Редактор сохраняет их байты как есть.

DataTable\<язык>\NDQuest.edf клиентский файл

Запись: Indexes (something)

Смещ.ПолеПочему не используетсяДанные
+0x004QuestCode
во всех 5 279 записях AoP 0; клиент AoP не читает
quests.md §11.1: таблицу индекса ([027BDBE0]+0x60) берут только загрузчик 005E2020 (+0x08, +0x0C), деструктор 005E1C10 (+0x0C) и геттер 005E2470, чей результат читают 005E15A0 и 005E1A30 (только +0x0C); других обращений к +0x60 объекта и к его методам нет (clines); общие функции таблицы 005CD7C0/005CD8C0/005CD870 полей не разбирают
—
+0x00C??
не используется: 005E2020 записывает сюда адрес выделенного текста, значение файла не читает
quests.md §11.1
—

DataTable\Quest.edf клиентский файл

Запись: QuestDummyEvent, QuestNPCEvent, QuestKillOtherRaceEvt, QuestLevelUPEvt, QuestPromoteEvent, QuestGradeEvent, QuestGainItemEvent (QuestHappenEvent)

Смещ.ПолеПочему не используетсяДанные
+0x008EventNo
EventNo (& 0xFF); никто не читает
quests.md §8.4 (Q4): сервер AoP и 2.2.3.2 — EventNo не читается; клиент AoP — байт +0x08 не читается нигде (таблицу читают только 005E2270, 00462320, 00588420)
11 знач.; чаще -1 (83%)

Запись: Quest

Смещ.ПолеПочему не используетсяДанные
+0x00CbSelMannually
в STRS bSelMannually; клиент не читает
quests.md §9.2 (Q11): отслеживание указателя на запись (qtaint.py) и просмотр всех [рег+0Ch] в 51 функции записи квеста — чтений нет
всегда 0
+0x118LinkedQuest ×5
5 пар LinkedQuest: (0,0) при серверном переходе, (−1,−1) при пустом; клиент не читает
quests.md §9.2 (Q1): индексные обращения [рег+рег*8+118h…] и отслеживание указателя — чтений нет
3 знач.; чаще -1 / -1 / -1 / -1 … (77%)
+0x11CLinkedQuest ×5
5 пар LinkedQuest: (0,0) при серверном переходе, (−1,−1) при пустом; клиент не читает
quests.md §9.2 (Q1): индексные обращения [рег+рег*8+118h…] и отслеживание указателя — чтений нет
3 знач.; чаще -1 / -1 / -1 / -1 … (77%)
+0x198Under Inv ×3
3 × i32, везде (−1, −1, 0); клиент не читает
quests.md §9.2: отслеживание указателя на запись и поиск смещений в функциях записи квеста — чтений нет
всегда -1 / -1 / 0

script\HolyStoneKeepperQuest.dat, script\Quest.dat серверный файл

Смещ.ПолеПочему не используетсяДанные
+0x81Cm_strFailBriefCode
В данных всегда −1. Сервер поле не читает (поиск обращений +0x81C по dzs.txt) [код, Q3]
quests.md §3: свод — «2076 | m_strFailBriefCode | cstr64 | В данных всегда −1. Сервер поле не читает (поиск обращений +0x81C по dzs.txt) [код, Q3]»; в клиентский файл не идёт (запись Quest.edf сопоставлена, quests.md §9.2)
всегда -1

QuestDummyEvent.dat, QuestGainItemEvent.dat, QuestGradeEvent.dat … серверный файл

Смещ.ПолеПочему не используетсяДанные
+0x044m_nEevntNo
номер события
quests.md §8.4 (Q4): сервер AoP (dzs.txt) и 2.2.3.2 (capstone) — EventNo не читается; клиент AoP — байт не читается
всегда -1
RF Online — товарный знак своих владельцев. Справочник собран из исследований для разработки контента. Собрано 01.11.2026 · каталог полей от 29.10.2026 · Adagio UI 0.5.0