← 返回总索引玩家对象字段(数组指针 + 偏移) 2026-09-16-13-19-49\玩家对象字段_数组指针偏移.md
分类:内存逆向与基址定位来源会话:2026-09-16原件:2026-09-16-13-19-49\玩家对象字段_数组指针偏移.md

玩家对象字段(数组指针 + 偏移)— 按 _人物遍历_被单击 真实代码

数据源:你贴出的 _人物遍历_被单击 子程序(易语言,本机活游戏实跑代码)。
这是本游戏(D:\rxjh2025,YGOnline.exe 2026-09-14 构建)玩家对象布局的权威值,推翻 31007 模块旧表的对象字段。
配套验证脚本:CE_玩家对象字段验证.lua(CE 挂进程跑,输出 rxjh_playerobj.txt)。


一、数组指针(对象数组)

代码逐字:

怪物位置 = 内存_读整数型 (全局_进程句柄, (8000 + x) × 4 + #怪物基址值)

注:槽位 8000(x=0)不读,可能是自身/sentinel 占位;其余 2000 槽覆盖全部可见玩家/怪物。


二、玩家对象字段(相对对象指针 怪物位置

偏移(hex) 偏移(dec) 字段 读取方式 来源 状态
+0x08 8 类型(0x31=人物 / 0x2E=怪物?) 整数 代码过滤 ==0x31 ✅ 代码
+0x0C 12 怪物ID / 槽位ID 整数 内存_读整数型(ptr+0xC) ✅ 代码(=CE +0x0C 槽位ID)
+0x14 20 全服ID(发包用) 整数 代码未读;CE 早前验证 玩家位置+20 为邀请值 ✅ CE
+0x18 24 名字(BIG5 内联文本) 文本 编码_BIG5到简体(内存_读文本型(ptr+0x18)) ✅ 代码
+0x74 116 当前血 整数 代码注释 内存_读整数型(ptr+0x74) ✅ 代码(本版本!)
+0x78 120 最大血 整数 代码注释 内存_读整数型(ptr+0x78) ✅ 代码(本版本!)
+0x2780 10112 等级 整数 内存_读整数型(ptr+0x2780) ✅ 代码(本版本!)
+0x1F84 8068 坐标X(float) 小数 到整数(内存_读小数型(ptr+0x1F84)) ✅ 代码(本版本!)
+0x1F8C 8076 坐标Y(float) 小数 到整数(内存_读小数型(ptr+0x1F8C)) ✅ 代码(本版本!)

三、⚠ 与 31007 模块旧表的冲突(旧值作废)

字段 31007 模块旧值 本版本真实(代码) 结论
当前血 +0x5F8 +0x74 旧错,以代码为准
最大血 (+0x5FC 附近) +0x78 以代码为准
等级 +0x5FC +0x2780 旧错,以代码为准
坐标X 0x1078(怪布局)/ 0x1F5C(玩家猜) +0x1F84 以代码为准
坐标Y 0x1080 +0x1F8C 以代码为准
名字 +0x18(玩家)/ +0x360(怪物) +0x18(玩家内联) ✅ 一致
类型 +0x08 +0x08 ✅ 一致
槽位ID +0x0C +0x0C ✅ 一致
全服ID +0x14 +0x14 ✅ 一致

说明:31007 模块的"怪物/玩家对象字段"对应一个更早的游戏版本,且怪物类与玩家类是不同结构。本次 _人物遍历_被单击 是玩家类(type 0x31)的实跑代码,HP/等级/坐标偏移以它为准。
旧表里的 +0x265C 职业 / +0x2660 性别 / +0x2664 正邪 / +0x1FF0 门派 / +0x1D24 目标X 也来自 31007,本版本布局已变(等级从 +0x2754→+0x2780 偏了 +0x2C,且非整体平移),这些字段的偏移在本版本仍未验证,需重定位(标记 ⚠)。


四、验证用法(CE)

  1. CE 打开 D:\rxjh2025\client\YGOnline.exe → 内存浏览器 → Lua 引擎 → 执行 CE_玩家对象字段验证.lua
  2. C:\Users\Administrator\rxjh_playerobj.txt
    - 每个 type=31 对象打印 名字/ID/全服ID/等级/当前血/最大血/坐标X/坐标Y
    - 找你自己的角色名,核对 等级 / 坐标 / 当前血 是否和游戏内一致 → 一致则 offset 全部坐实
  3. 锚定"自己":脚本顶部 SELF_HP 填你血条数字、SELF_NAME 填角色名,命中会标 <<你自己,据此确认 +0x74 真是当前血、+0x78 真是最大血。
  4. 把 txt 发我,我把 ✅ 全部固化进 基址总表 和工程 常量.e.txt,并把 ⚠ 的 职业/性别/正邪/门派 一并重定位。