Персонажи и существа
Монстры
Монстры, спецатаки, реплики, лут
Обзор
Монстр — составная сущность: строка MonsterCharacter.dat, имена в MonsterCharacter_str.dat, спецатаки в MonsterCharacterAI.dat, реплики в MobMessage_str.dat, лут в ItemLooting.dat и спавн в файлах карт. Клиентская выжимка — секция 3 Character.edf, имена NDCharacter.edf, реплики NDMsgMonster.edf — целиком выводится из серверных файлов.
Как работает
- Идентичность — код
m_strCode(5 hex-символов, например09407): по нему ссылаются квесты, спавн, лут, свита,_dummy.spt. Позиция строкиm_dwIndexуходит клиенту в пакетах: клиент находит записьCharacter.edfпо индексу, поэтому порядок строк сервера и клиента обязан совпадать. - Лут (
ItemLooting.dat): строки монстра идут подряд, привязка — первая строка с его кодом.m_nLootRate— шанс одного броска из 2³¹,m_nOperationCount— число бросков,m_nLootListCount— сколько первых из 200 слотов участвует в выборе (сервер пересчитывает до первого"0"); неизвестный код предмета — сервер не стартует. - Спецатаки (
MonsterCharacterAI.dat) применяются по условиям из записи монстра; эмоции — слоты «условие, код»: фраза из набораMobMessage_str, анимация или пусто. - Регенерация HP, привязка к зоне и отсутствие опыта за удар — только при флаге босса;
m_fEmoType > 5— агрессивный, а значок агрессии в клиенте берётся изm_fOffensiveRate;m_nViewAngleCap— не угол обзора, а тип ослабления защиты. - Звук и искра попадания задают
m_nAttEffTypeиm_nDefEffType(только клиент); модель — по коду черезResource.edf(категория «Модели»). - На сервере с Sirin атака монстров считается в Lua — поля атаки там могут быть перекрыты.
Что важно при правке
- Код ≤ 5 символов, уровень > 0, уникальность кода и индекса; коды спецатак, детей и наборов реплик существуют.
- HP больше 65 535 требует 32-битных пакетов.
- Второй блок лута у части монстров (повтор кода) сервер не видит — он сохраняется как есть с предупреждением.
Чтения сервера по MonsterCharacter.dat — свод (monsters.md §3, поиск dataflow\flow2.py: CMonster, m_pMonRec, GetRecord) и reads/MonsterCharacter.json (srvflow.py — только записи из GetRecord). Клиентская выжимка — блок 3 Character.edf (домен «классы»).
Файлы категории
5 в реестре| Файл | Сторона | Формат | Уровень | Корпуса | Запись | Свод | Примечание |
|---|---|---|---|---|---|---|---|
script\ItemLooting.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 1684, GU 1684, Sirin 1684 | monsters.md | monsters.md §6.2 |
script\MobMessage_str.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 230472, GU 281672, Sirin 230472 | monsters.md, localization.md | реплики: 9 языков × 10 фраз (AoP), 11 × 10 (GU); monsters.md §5 |
script\MonsterCharacter.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 2484, GU 2484, Sirin 2484 | monsters.md | monsters.md §3 |
script\MonsterCharacterAI.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 176, GU 176, Sirin 176 | monsters.md | monsters.md §4; схема Monster_Sp.strs |
DataTable\<язык>\NDMsgMonster.edf | клиент | edf | производный | AoP ✓ (en-ph, ru-ru), GU ✓ (en-gb, ru-ru), Sirin ✓ (en-gb, ru-ru) | AoP 88, GU 88, Sirin 88 | monsters.md | Производный из: MobMessage_str.dat. |
«готов к полному» — формат разобран и поля описаны; «производный» — файл собирается из другого; «непрозрачный» — формат известен не до конца; «отложен» и «вне рамок» — файл студией не редактируется.
Разделы категории
Файлы категории разбиты на группы; у каждой группы и подгруппы своя страница с полями только её файлов.
Неиспользуемые параметры
Поля, которые не читает ни сервер, ни клиент. Для каждого — почему так решено и где это установлено. Редактор сохраняет их байты как есть.
DataTable\<язык>\NDMsgMonster.edf клиентский файл
Запись: группа (88 байт)
| Смещ. | Поле | Почему не используется | Данные |
|---|---|---|---|
+0x02C | указатели ×10 | не используется: загрузчик 005DF9D0 записывает сюда адреса выделенных строк, значения файла не читает (в AoP почти все 0)monsters.md §5 | — |
script\ItemLooting.dat серверный файл
| Смещ. | Поле | Почему не используется | Данные |
|---|---|---|---|
+0x048 | m_nLootTime | не читается monsters.md §6.2: « m_nLootTime не читается ни в одной функции, работающей с таблицей (1400F3F50, 1400E7EE0 …)»; в клиент не идёт | всегда 0 |
script\MonsterCharacter.dat серверный файл
| Смещ. | Поле | Почему не используется | Данные |
|---|---|---|---|
+0x0D4 | m_nToCombatTime | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | 2 знач.; чаще 10000 (98%) |
+0x0F0 | m_nMaxMoveArea | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | 3 знач.; чаще 0 (80%) |
+0x0FC | m_fTarDecType | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 0 |
+0x108 | m_nUglierType | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда -1 |
+0x120 | m_nDnLooting | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | 2 знач.; чаще 1 (74%) |
+0x154 | m_bUseDefence | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 0 |
+0x53C | m_fForceLevel | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | 3 знач.; чаще 1 (82%) |
+0x540 | m_fForceMastery | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x544 | m_fForceAttStd | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x548 | m_strAttTechID1 | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x588 | m_fAttTech1UseProb | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x58C | m_fAttTechID1MotionTime | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x590 | m_strAttTechID2 | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x5D0 | m_fAttTech2UseProb | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x5D4 | m_fAttTechID2MotionTime | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x5D8 | m_strAttTechID3 | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x618 | m_fAttTech3UseProb | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x61C | m_fAttTechID3MotionTime | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x620 | m_strPSecTechID | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x660 | m_fPSecTechIDMotionTime | время спецтехники (во всех «1») monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x664 | m_strMSecTechID | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x6A4 | m_fMSecTechIDMotionTime | время спецтехники (во всех «1») monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x6C0 | m_fAttMoTime2 | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | 9 знач.; чаще 2034 (88%) |
+0x6E0 | m_fCopTime | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | 4 знач.; чаще 5000 (100%) |
+0x6F0 | m_bScaleChange | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | 2 знач.; чаще 0 (100%) |
+0x7E0 | m_fDamHPStd | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 1 |
+0x7F4 | m_fEspTFProb | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | 7 знач.; чаще 0 (86%) |
+0x7F8 | m_fTypeCompTerms | мёртвые — раздел «3.7 Поля, которые сервер не читает» monsters.md §3.7: свод — «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных; это «не найдено», а не строгое до…»; в клиентский файл не идёт (блок 3 Character.edf сопоставлен полностью, monsters.md §7.1) | всегда 0 |
+0x7FC | m_fPSecTechChat | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x800 | m_fPAttTechChat | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x804 | m_fEmo0Chat | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x808 | m_fEmo0ChatProb | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x80C | m_fEmo1Chat | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x810 | m_fEmo1ChatProb | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x814 | m_fEmo2Chat | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x818 | m_fEmo2ChatProb | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x81C | m_fEmo3Chat | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x820 | m_fEmo3ChatProb | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x824 | m_fEmo4Chat | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x828 | m_fEmo4ChatProb | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x82C | m_fAsitReqSteEspChat | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x830 | m_fAsitReqSteEspChatProb | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x834 | m_fAsitReqSteHelpChat | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x838 | m_fAsitReqSteHelpChatProb | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | 2 знач.; чаще 1 (100%) |
+0x83C | m_fAsitReqSteCopChat | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |
+0x840 | m_fAsitReqSteCopChatProb | чат-поля ( *Chat/*ChatProb)monsters.md §3.7: «Ни одного чтения не найдено ни через указатели на запись, ни по смещению в функциях CMonster и ИИ [код, анализ потока данных]» | всегда 1 |