Квесты
script\HolyStoneKeepperQuest.dat, script\Quest.dat
Всего 48 Известно 47 Производное 0 Не используется 1Мир
Квесты, события-триггеры, Quest.edf и тексты
Квест — составная сущность из двух серверных таблиц (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 — тексты
m_dRepeatTime.m_dwIndex, перенумеровываются при сборке), стабильные текстовые индексы NDQuest (никогда не перенумеровываются) и идентичность в проекте. Смена индекса выпущенного квеста ломает активные квесты игроков.m_dRepeatTime.QuestItem — клиентская таблица трофеев квестов с отдельной секцией имён в NDQuest.StoreList; общий квест есть во всех трёх расовых списках.Quest.edf — производный от Quest.dat, HolyStoneKeepperQuest.dat и девяти Quest*Event.dat (правила quests.md §9). Расовые списки (секции 9–11, по 4 байта) в схеме Quest.edf.strs не описаны отдельной структурой; их правило — §9.5.
| Файл | Сторона | Формат | Уровень | Корпуса | Запись | Свод | Примечание |
|---|---|---|---|---|---|---|---|
script\HolyStoneKeepperQuest.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2408, GU 2408, Sirin 2408 | quests.md | quests.md §3 (HSK) |
script\Quest.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2408, GU 2408, Sirin 2408 | quests.md | quests.md §3–7 |
script\QuestDummyEvent.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2184, GU 2184, Sirin 2184 | quests.md | quests.md §8 |
script\QuestGainItemEvent.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2184, GU 2184, Sirin 2184 | quests.md | quests.md §8 |
script\QuestGradeEvent.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2184, GU 2184, Sirin 2184 | quests.md | quests.md §8 |
script\QuestKillOtherRaceEvent.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2184, GU 2184, Sirin 2184 | quests.md | quests.md §8 |
script\QuestLvLimitEvent.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2184, GU 2184, Sirin 2184 | quests.md | quests.md §8 |
script\QuestLvUpEvent.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2184, GU 2184, Sirin 2184 | quests.md | quests.md §8 |
script\QuestMasteryEvent.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2184, GU 2184, Sirin 2184 | quests.md | quests.md §8 |
script\QuestNPCEvent.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2184, GU 2184, Sirin 2184 | quests.md | quests.md §8 |
script\QuestPromoteEvent.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2184, GU 2184, Sirin 2184 | quests.md | quests.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 Не используется 1QuestDummyEvent.dat, QuestGainItemEvent.dat …
Всего 13 Известно 12 Производное 0 Не используется 1DataTable\<язык>\NDQuest.edf; DataTable\Quest.edf
Всего 71 Известно 1 Производное 63 Не используется 7Поля, которые не читает ни сервер, ни клиент. Для каждого — почему так решено и где это установлено. Редактор сохраняет их байты как есть.
DataTable\<язык>\NDQuest.edf клиентский файлsomething)| Смещ. | Поле | Почему не используется | Данные |
|---|---|---|---|
+0x004 | QuestCode | во всех 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 клиентский файлQuestHappenEvent)| Смещ. | Поле | Почему не используется | Данные |
|---|---|---|---|
+0x008 | EventNo | EventNo ( & 0xFF); никто не читаетquests.md §8.4 (Q4): сервер AoP и 2.2.3.2 — EventNo не читается; клиент AoP — байт +0x08 не читается нигде (таблицу читают только 005E2270, 00462320, 00588420) | 11 знач.; чаще -1 (83%) |
| Смещ. | Поле | Почему не используется | Данные |
|---|---|---|---|
+0x00C | bSelMannually | в STRS bSelMannually; клиент не читаетquests.md §9.2 (Q11): отслеживание указателя на запись ( qtaint.py) и просмотр всех [рег+0Ch] в 51 функции записи квеста — чтений нет | всегда 0 |
+0x118 | LinkedQuest ×5 | 5 пар LinkedQuest: (0,0) при серверном переходе, (−1,−1) при пустом; клиент не читаетquests.md §9.2 (Q1): индексные обращения [рег+рег*8+118h…] и отслеживание указателя — чтений нет | 3 знач.; чаще -1 / -1 / -1 / -1 … (77%) |
+0x11C | LinkedQuest ×5 | 5 пар LinkedQuest: (0,0) при серверном переходе, (−1,−1) при пустом; клиент не читаетquests.md §9.2 (Q1): индексные обращения [рег+рег*8+118h…] и отслеживание указателя — чтений нет | 3 знач.; чаще -1 / -1 / -1 / -1 … (77%) |
+0x198 | Under Inv ×3 | 3 × i32, везде (−1, −1, 0); клиент не читаетquests.md §9.2: отслеживание указателя на запись и поиск смещений в функциях записи квеста — чтений нет | всегда -1 / -1 / 0 |
script\HolyStoneKeepperQuest.dat, script\Quest.dat серверный файл| Смещ. | Поле | Почему не используется | Данные |
|---|---|---|---|
+0x81C | m_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 … серверный файл| Смещ. | Поле | Почему не используется | Данные |
|---|---|---|---|
+0x044 | m_nEevntNo | номер события quests.md §8.4 (Q4): сервер AoP ( dzs.txt) и 2.2.3.2 (capstone) — EventNo не читается; клиент AoP — байт не читается | всегда -1 |