Characters and creatures
Monsters
Monsters, special attacks, lines, loot
Overview
A monster is a composite entity: a MonsterCharacter.dat row, names in MonsterCharacter_str.dat, special attacks in MonsterCharacterAI.dat, lines in MobMessage_str.dat, loot in ItemLooting.dat and spawn in map files. The client extract — section 3 of Character.edf, names in NDCharacter.edf, lines in NDMsgMonster.edf — is derived entirely from the server files.
How it works
- Identity is the code
m_strCode(5 hex characters, e.g.09407): quests, spawn, loot, retinue and_dummy.sptreference it. The row positionm_dwIndexgoes to the client in packets: the client finds theCharacter.edfrecord by index, so the row order of the server and the client must match. - Loot (
ItemLooting.dat): a monster's rows are consecutive, the link is the first row with its code.m_nLootRateis the chance of one roll out of 2³¹,m_nOperationCountthe number of rolls,m_nLootListCounthow many of the first 200 slots take part in the choice (the server recounts up to the first"0"); an unknown item code — the server does not start. - Special attacks (
MonsterCharacterAI.dat) are applied by conditions from the monster record; emotions are “condition, code” slots: a phrase from aMobMessage_strset, an animation or nothing. - HP regeneration, zone tethering and no experience per hit — only with the boss flag;
m_fEmoType > 5is aggressive, while the aggression icon in the client comes fromm_fOffensiveRate;m_nViewAngleCapis not a view angle but a defence weakening type. - The hit sound and spark are set by
m_nAttEffTypeandm_nDefEffType(client only); the model is found by code throughResource.edf(the “Models” category). - On a Sirin server monster attacks are computed in Lua — attack fields may be overridden there.
What matters when editing
- Code ≤ 5 characters, level > 0, code and index unique; special attack, child and line set codes exist.
- HP above 65 535 requires 32-bit packets.
- The second loot block of some monsters (a repeated code) is invisible to the server — it is kept as is with a warning.
Server reads of MonsterCharacter.dat — the digest (monsters.md §3, search dataflow\flow2.py: CMonster, m_pMonRec, GetRecord) and reads/MonsterCharacter.json (srvflow.py — only records from GetRecord). The client extract is block 3 of Character.edf (the “classes” domain).
Files of the category
5 in the registry| File | Side | Format | Level | Corpora | Record | Digest | Note |
|---|---|---|---|---|---|---|---|
script\ItemLooting.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 1684, GU 1684, Sirin 1684 | monsters.md | monsters.md §6.2 |
script\MobMessage_str.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 230472, GU 281672, Sirin 230472 | monsters.md, localization.md | lines: 9 languages × 10 phrases (AoP), 11 × 10 (GU); monsters.md §5 |
script\MonsterCharacter.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 2484, GU 2484, Sirin 2484 | monsters.md | monsters.md §3 |
script\MonsterCharacterAI.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 176, GU 176, Sirin 176 | monsters.md | monsters.md §4; schema Monster_Sp.strs |
DataTable\<language>\NDMsgMonster.edf | client | edf | derived | AoP ✓ (en-ph, ru-ru), GU ✓ (en-gb, ru-ru), Sirin ✓ (en-gb, ru-ru) | AoP 88, GU 88, Sirin 88 | monsters.md | Derived from: MobMessage_str.dat. |
“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.
Lines
DataTable\<language>\NDMsgMonster.edf; script\MobMessage_str.dat
Total 9 Known 4 Derived 4 Unused 1Unused 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>\NDMsgMonster.edf client file
Record: group (88 bytes)
| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x02C | pointers ×10 | unused: the loader 005DF9D0 writes the addresses of allocated strings here and does not read the file values (almost all 0 in AoP)monsters.md §5 | — |
script\ItemLooting.dat server file
| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x048 | m_nLootTime | never read monsters.md §6.2: “ m_nLootTime is not read in any function working with the table (1400F3F50, 1400E7EE0 …)”; does not go to the client | always 0 |
script\MonsterCharacter.dat server file
| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x0D4 | m_nToCombatTime | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | 2 values; most often 10000 (98%) |
+0x0F0 | m_nMaxMoveArea | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | 3 values; most often 0 (80%) |
+0x0FC | m_fTarDecType | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 0 |
+0x108 | m_nUglierType | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always -1 |
+0x120 | m_nDnLooting | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | 2 values; most often 1 (74%) |
+0x154 | m_bUseDefence | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 0 |
+0x53C | m_fForceLevel | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | 3 values; most often 1 (82%) |
+0x540 | m_fForceMastery | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x544 | m_fForceAttStd | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x548 | m_strAttTechID1 | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x588 | m_fAttTech1UseProb | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x58C | m_fAttTechID1MotionTime | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x590 | m_strAttTechID2 | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x5D0 | m_fAttTech2UseProb | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x5D4 | m_fAttTechID2MotionTime | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x5D8 | m_strAttTechID3 | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x618 | m_fAttTech3UseProb | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x61C | m_fAttTechID3MotionTime | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x620 | m_strPSecTechID | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x660 | m_fPSecTechIDMotionTime | special technique time (“1” everywhere) monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x664 | m_strMSecTechID | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x6A4 | m_fMSecTechIDMotionTime | special technique time (“1” everywhere) monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x6C0 | m_fAttMoTime2 | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | 9 values; most often 2034 (88%) |
+0x6E0 | m_fCopTime | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | 4 values; most often 5000 (100%) |
+0x6F0 | m_bScaleChange | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | 2 values; most often 0 (100%) |
+0x7E0 | m_fDamHPStd | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 1 |
+0x7F4 | m_fEspTFProb | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | 7 values; most often 0 (86%) |
+0x7F8 | m_fTypeCompTerms | dead — section “3.7 Fields the server does not read” monsters.md §3.7: digest — “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis; this is “not found”, not a strict pro…”; does not go to the client file (block 3 of Character.edf is fully mapped, monsters.md §7.1) | always 0 |
+0x7FC | m_fPSecTechChat | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x800 | m_fPAttTechChat | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x804 | m_fEmo0Chat | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x808 | m_fEmo0ChatProb | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x80C | m_fEmo1Chat | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x810 | m_fEmo1ChatProb | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x814 | m_fEmo2Chat | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x818 | m_fEmo2ChatProb | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x81C | m_fEmo3Chat | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x820 | m_fEmo3ChatProb | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x824 | m_fEmo4Chat | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x828 | m_fEmo4ChatProb | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x82C | m_fAsitReqSteEspChat | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x830 | m_fAsitReqSteEspChatProb | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x834 | m_fAsitReqSteHelpChat | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x838 | m_fAsitReqSteHelpChatProb | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | 2 values; most often 1 (100%) |
+0x83C | m_fAsitReqSteCopChat | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |
+0x840 | m_fAsitReqSteCopChatProb | chat fields ( *Chat/*ChatProb)monsters.md §3.7: “Not a single read found either through record pointers or by offset in CMonster and AI functions [code, data flow analysis]” | always 1 |