# v49 · 怪物坐标偏移修正(2026-10-12) ## 一、结论 **怪物(NPC)坐标 = 对象 `+0x107C` (float X) / `+0x1084` (float Y)** | 类别 | 类型标记 `+0x08` | 名字 | 血量 | 等级 | **坐标** | |---|---|---|---|---|---| | 人物 | `0x31` | `+0x18` | `+0x74 / +0x78` | `+0x2760` | **`+0x1F84` / `+0x1F8C`** | | 怪物 / NPC | `0x2E` | `+0x364` | `+0x5F4 / +0x5F8` | `+0x5FC` | **`+0x107C` / `+0x1084`** | > 两个类别是不同结构 → 坐标偏移不同,**不能混用**。人物对象的 `+0x107C` 全域为 0。 ## 二、CE 实测证据(2026-10-12 01:40) 同屏对象坐标对照 —— 三只怪紧贴人物,数值完全吻合: | 对象 | 地址 | `+0x107C` (X) | `+0x1084` (Y) | |---|---|---|---| | 怪物 B | `0x415F7168` | 1609 | −369 | | 怪物 C | `0x416111D8` | 1596 | −358 | | 怪物 D | `0x41603198` | 1601 | −366 | | 人物 | `0x56DE8428` | (该字段为 0) | (该字段为 0) | | 人物(真实坐标) | `+0x1F84 / +0x1F8C` | 1589.9 | −367.7 | **失效证明**:旧代码读的是 `对象 + 0x107C + 0x280 = 0x12FC` 与 `+0x1084 + 0x288 = 0x130C` —— 实测两处**恒为 0**。这就是「NPC遍历读不出坐标」的病根:**多加了 `0x280` / `0x288`**。 ## 三、改动清单(v49,共 10 处) | 位置 | 子程序 | 改动 | |---|---|---| | L8147-8148 | `_NPC遍历_被单击` | 坐标读取解注释 + 去掉 `+0x280/+0x288` | | L8155-8156 | `_NPC遍历_被单击` | 坐标日志解注释(`挂机信息.加入文本` → `写日志`,与同段一致) | | L8191-8192 | `遍历修炼装置对话` | 坐标读取解注释 + 去掉 `+0x280/+0x288` | | L14488-14489 | `怪物对象遍历_验证` | 坐标读取去掉 `+0x280/+0x288` | | L14495-14496 | `怪物对象遍历_验证` | 坐标日志解注释 | **未改动**:`_人物遍历_被单击`(L7922)、`玩家对象遍历_验证`(L14437)、`防杀测试`(L7988)用的 `+0x1F84/+0x1F8C` 是**人物类**偏移,本来正确。 ## 四、验收 - **t2e 0 错 0 警**,产物 `旧版本更新_修复后_v49.e` = 2,984,126 字节,版本 **1.49.0.0** - 三道门禁(块配平 / 标量误声明 / 变量格式)全部 0 问题 - 界面 form.json 未动 ## 五、请实测 1. 点「**NPC遍历**」按钮 → 日志应新增两行:`遍历怪物坐标x:…` / `遍历怪物坐标y:…` 2. 坐标应与角色当前坐下位置相近(同屏怪距离一般 < 100) 3. 若还要「怪物对象遍历_验证」那个按钮,同理会输出 `坐标x:` / `坐标y:` ## 六、后续可用 既然怪物坐标读通了,`挂机寻路新` 里「找最近的怪并走过去」这类逻辑就可以实现了(此前缺的正是这个字段)。