Skip to content
RF DataData reference
RU

World

Quests

Quests, trigger events, Quest.edf and texts

Total 132 Known 60 Derived 63 Unused 9

Overview

A quest is a composite entity of two server tables (Quest.dat and HolyStoneKeepperQuest.dat — race war quests), nine trigger event tables Quest*Event.dat, the client Quest.edf (12 sections) and the texts NDQuest.edf in every language. The client files are derived entirely from the server data and texts: it takes a build with code packing, not editing of client bytes.

Server (RF_Bin\Script)                     Client (DataTable)
Quest.dat                ─┐                Quest.edf  (12 sections)
HolyStoneKeepperQuest.dat ├─ build ──►       events 0–6, quests, QuestItem,
Quest*Event.dat × 9      ─┘  (code→number)   race lists ×3
(no texts on the server)                   <language>\NDQuest.edf — texts

How it works

  • The quest record: up to 3 targets (actions), rewards (money, experience, points, up to 6 items, up to 2 masteries, skill, force), up to 5 transitions to next quests and a transition after failure, up to 3 failure conditions, a repeat group and m_dRepeatTime.
  • A trigger event is a row of one of the 9 tables: when and to whom to give the quest; inside are 3 race blocks, each with up to 5 conditions and up to 5 quest references. Rows of one NPC are consecutive; a LevelUp quest is received only by characters that reach the level after the release.
  • Three numbering systems: dense row positions (m_dwIndex, renumbered at build), stable NDQuest text indexes (never renumbered) and identity in the project. Changing the index of a released quest breaks players' active quests.
  • Repeatable quests of one group are mutually exclusive: while one is taken the others are hidden, after turning it in the whole group waits m_dRepeatTime.
  • QuestItem is the client table of quest trophies with its own name section in NDQuest.

What matters when editing

  • Slot limits 3 / 6 / 2 / 5 / 3, quantities ≤ 255, text lengths in encoding bytes, a quest item name ≤ 31 bytes.
  • References to monsters, NPCs and items exist; the NPC has a quest button in StoreList; a shared quest is in all three race lists.

Quest.edf is derived from Quest.dat, HolyStoneKeepperQuest.dat and the nine Quest*Event.dat (rules in quests.md §9). The race lists (sections 9–11, 4 bytes each) are not described as a separate structure in the Quest.edf.strs schema; their rule is §9.5.

Files of the category

13 in the registry
FileSideFormatLevelCorporaRecordDigestNote
script\HolyStoneKeepperQuest.datserverdatready for fullAoP ✓, GU ✓, Sirin ✓AoP 2408, GU 2408, Sirin 2408quests.mdquests.md §3 (HSK)
script\Quest.datserverdatready for fullAoP ✓, GU ✓, Sirin ✓AoP 2408, GU 2408, Sirin 2408quests.mdquests.md §3–7
script\QuestDummyEvent.datserverdatready for fullAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestGainItemEvent.datserverdatready for fullAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestGradeEvent.datserverdatready for fullAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestKillOtherRaceEvent.datserverdatready for fullAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestLvLimitEvent.datserverdatready for fullAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestLvUpEvent.datserverdatready for fullAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestMasteryEvent.datserverdatready for fullAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestNPCEvent.datserverdatready for fullAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
script\QuestPromoteEvent.datserverdatready for fullAoP ✓, GU ✓, Sirin ✓AoP 2184, GU 2184, Sirin 2184quests.mdquests.md §8
DataTable\<language>\NDQuest.edfclientedfderivedAoP ✓ (en-ph, ru-ru), GU ✓ (en-gb, ru-ru), Sirin ✓ (en-gb, ru-ru)AoP 2 sections: 32/16, GU 2 sections: 32/16,…quests.md, localization.mdDerived from: quest texts and QuestItem names. quests.md §11.1; STRS does not support dynamic strings (client-codecs.md §2.4)
DataTable\Quest.edfclientedfderivedAoP ✓, GU ✓, Sirin ✓AoP 12 sections: 336×7/424/44/4×3, GU 12 sec…quests.mdDerived from: Quest.dat, HolyStoneKeepperQuest.dat, Quest*Event.dat. 12 sections (quests.md §9.1)

“ready for full” — the format is understood and the fields are described; “derived” — the file is assembled from another; “opaque” — the format is not fully known; “postponed” and “out of scope” — the studio does not edit the file.

Sections of the category

The files of the category are split into groups; every group and subgroup has its own page with the fields of its files only.

Quests

script\HolyStoneKeepperQuest.dat, script\Quest.dat

Total 48 Known 47 Derived 0 Unused 1

Trigger events

QuestDummyEvent.dat, QuestGainItemEvent.dat …

Total 13 Known 12 Derived 0 Unused 1

Unused parameters

Fields that neither the server nor the client reads. For each: why it was decided so and where that was established. The editor keeps their bytes as they are.

DataTable\<language>\NDQuest.edf client file

Record: Indexes (something)

OffsetFieldWhy unusedData
+0x004QuestCode
0 in all 5 279 AoP records; the AoP client does not read it
quests.md §11.1: the index table ([027BDBE0]+0x60) is taken only by the loader 005E2020 (+0x08, +0x0C), destructor 005E1C10 (+0x0C) and getter 005E2470, whose result is read by 005E15A0 and 005E1A30 (only +0x0C); there are no other accesses to +0x60 of the object or its methods (clines); the generic table functions 005CD7C0/005CD8C0/005CD870 do not parse fields
—
+0x00C??
unused: 005E2020 writes the address of the allocated text here and does not read the file value
quests.md §11.1
—

DataTable\Quest.edf client file

Record: QuestDummyEvent, QuestNPCEvent, QuestKillOtherRaceEvt, QuestLevelUPEvt, QuestPromoteEvent, QuestGradeEvent, QuestGainItemEvent (QuestHappenEvent)

OffsetFieldWhy unusedData
+0x008EventNo
EventNo (& 0xFF); nobody reads it
quests.md §8.4 (Q4): AoP and 2.2.3.2 server — EventNo is not read; AoP client — byte +0x08 is not read anywhere (the table is read only by 005E2270, 00462320, 00588420)
11 values; most often -1 (83%)

Record: Quest

OffsetFieldWhy unusedData
+0x00CbSelMannually
bSelMannually in STRS; the client does not read it
quests.md §9.2 (Q11): tracking the record pointer (qtaint.py) and reviewing all [reg+0Ch] in 51 quest record functions — no reads
always 0
+0x118LinkedQuest ×5
5 LinkedQuest pairs: (0,0) for a server-side transition, (−1,−1) when empty; the client does not read them
quests.md §9.2 (Q1): indexed accesses [reg+reg*8+118h…] and pointer tracking — no reads
3 values; most often -1 / -1 / -1 / -1 … (77%)
+0x11CLinkedQuest ×5
5 LinkedQuest pairs: (0,0) for a server-side transition, (−1,−1) when empty; the client does not read them
quests.md §9.2 (Q1): indexed accesses [reg+reg*8+118h…] and pointer tracking — no reads
3 values; most often -1 / -1 / -1 / -1 … (77%)
+0x198Under Inv ×3
3 × i32, (−1, −1, 0) everywhere; the client does not read it
quests.md §9.2: tracking the record pointer and searching offsets in the quest record functions — no reads
always -1 / -1 / 0

script\HolyStoneKeepperQuest.dat, script\Quest.dat server file

OffsetFieldWhy unusedData
+0x81Cm_strFailBriefCode
Always −1 in the data. The server does not read the field (search for +0x81C accesses in dzs.txt) [code, Q3]
quests.md §3: digest — “2076 | m_strFailBriefCode | cstr64 | Always −1 in the data. The server does not read the field (search for +0x81C accesses in dzs.txt) [code, Q3]”; does not go to the client file (the Quest.edf record is mapped, quests.md §9.2)
always -1
RF Online is a trademark of its owners. The reference is compiled from research for content development. Built 01.11.2026 · field catalog dated 29.10.2026 · Adagio UI 0.5.0