[模块使用例程]神鬼传奇部分功能
.版本 2.支持库 spec
.程序集 程序集1
.程序集变量 进程ID, 整数型
.程序集变量 全局基址, 文本型
.程序集变量 进程句柄, 整数型
.程序集变量 地址, 整数型
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
.局部变量 怪物数组, 整数型, , "0"
.局部变量 A, 整数型
初始化 ()
' 读取当前人物属性 ()
' 二叉树遍历 (怪物数组)
' A = 最近怪 (怪物数组)
功能_喊话 (“彩打机12222”)
返回 (0)' 可以根据您的需要返回任意数值
.子程序 初始化
进程ID = 进程_进程名取ID (“Game.exe”)
进程句柄 = 进程_打开进程 (进程ID)
地址 = 模块_取模块句柄 (进程ID, “Game.exe”)
.子程序 搜索基址_人物, 文本型
.局部变量 基址, 文本型
' ' 8B 08 89 8D 9C 6D 01 00 8B 50 04 89 95 A0 6D 01 00 8B 48 08 89 8D A4 6D 01 00 8B 70 0C 8B 58 10
基址 = 内存_搜索特征码2 (进程ID, “Game.exe”, “8B 08 89 8D 9C 6D 01 00 8B 50 04 89 95 A0 6D 01 00 8B 48 08 89 8D A4 6D 01 00 8B 70 0C 8B 58 10”, “-39”, 0)
返回 (基址)
.子程序 读取当前人物属性, 人物角色
.局部变量 主角, 人物角色
' 内存_读整数型 (, )
主角.最大血量 = 内存_读整数型 (进程句柄, 地址 + 转换_十六到十 (“171E8F0”))
主角.当前血量 = 内存_读整数型 (进程句柄, 地址 + 转换_十六到十 (“171E8B8”))
主角.最大蓝量 = 内存_读整数型 (进程句柄, 地址 + 转换_十六到十 (“171E8F8”))
主角.当前蓝量 = 内存_读整数型 (进程句柄, 地址 + 转换_十六到十 (“171E8C0”))
主角.当前XP = 内存_读整数型 (进程句柄, 地址 + 转换_十六到十 (“184F6A0”))' 184F6A0
主角.当前坐标.X坐标 = 内存_读小数型 (进程句柄, 地址 + 转换_十六到十 (“171E86C”))' +F0读里面的值乘以2.56是X坐标(整数型)’
主角.当前坐标.Y坐标 = 内存_读小数型 (进程句柄, 地址 + 转换_十六到十 (“171E870”))' +F4读里面的值乘以2.56是Y坐标(整数型)’
主角.当前经验 = 内存_读整数型 (进程句柄, 地址 + 转换_十六到十 (“171E8D8”))
主角.人物等级 = 内存_读整数型 (进程句柄, 地址 + 转换_十六到十 (“171E8B8”) + 转换_十六到十 (“18”))
返回 (主角)
' Game.exe+171E8D8
.子程序 二叉树遍历
.参数 读取到怪物数组, 整数型, 数组
.局部变量 二叉树首地址, 整数型
.局部变量 怪物数组, 怪物角色
.局部变量 A, 整数型
.局部变量 怪物地址, 整数型
.局部变量 名字长度, 整数型
二叉树首地址 = 内存_读整数型 (进程句柄, 地址 + 转换_十六到十 (“9DE9FC”))' 游戏怪物数组基址
' “Game.exe+9DE9FC”"Game.exe+1ED6DC0"
二叉树首地址 = 内存_读整数型 (进程句柄, 二叉树首地址 + 转换_十六到十 (“2BC30”))
二叉树首地址 = 内存_读整数型 (进程句柄, 二叉树首地址 + 转换_十六到十 (“64”))
二叉树首地址 = 内存_读整数型 (进程句柄, 二叉树首地址 + 转换_十六到十 (“4”))' 二叉树EAX
读取二叉树 (进程句柄, 二叉树首地址, , 读取到怪物数组)
.计次循环首 (取数组成员数 (读取到怪物数组), A)
怪物数组.怪物ID = 内存_读整数型 (进程句柄, 读取到怪物数组 + 转换_十六到十 (“c”))
名字长度 = 内存_读整数型 (进程句柄, 读取到怪物数组 + 转换_十六到十 (“324”))
.如果 (名字长度 > 16)
怪物数组.怪物名称 = 内存_读文本型 (进程句柄, 内存_读整数型 (进程句柄, 读取到怪物数组 + 转换_十六到十 (“314”)), 名字长度)
.否则
怪物数组.怪物名称 = 内存_读文本型 (进程句柄, 读取到怪物数组 + 转换_十六到十 (“314”), 名字长度)
.如果结束
怪物数组.当前坐标.X坐标 = 内存_读小数型 (进程句柄, 读取到怪物数组 + 转换_十六到十 (“AC”))
怪物数组.当前坐标.Y坐标 = 内存_读小数型 (进程句柄, 读取到怪物数组 + 转换_十六到十 (“B0”))
怪物数组.当前血量 = 内存_读整数型 (进程句柄, 读取到怪物数组 + 转换_十六到十 (“27A0”))
怪物数组.最大血量 = 内存_读整数型 (进程句柄, 读取到怪物数组 + 转换_十六到十 (“27A0”) - 转换_十六到十 (“B4”))
.' 如果真 (内存_读整数型 (进程句柄, 读取到怪物数组 + 转换_十六到十 (“88”)) = 1)' 1是宠物
' 删除成员 (读取到怪物数组, A, 1)
.如果真结束
调试输出 (怪物数组.怪物名称, 怪物数组.当前坐标.X坐标, 怪物数组.当前坐标.Y坐标, 转换_十到十六 (读取到怪物数组 ))
.计次循环尾 ()
.子程序 功能_喊话
.参数 喊话内容, 文本型
.局部变量 汇编, 类_汇编
.局部变量 内存地址, 整数型
内存地址 = 内存_申请内存 (进程句柄, 取文本长度 (喊话内容))
内存_写文本型 (进程句柄, 内存地址, 喊话内容)
汇编.置代码 ()
' ’汇编.置入代码 ({ 104 } + 到字节集 (目的地坐标.Y坐标))
' ’汇编.置入代码 ({ 104 } + 到字节集 (目的地坐标.X坐标))
汇编.push (内存地址)
汇编.push (转换_十六到十 (“22f3a08”))
汇编.Mov_Ecx (转换_十六到十 (“22f0fb8”))
汇编.Mov_Ebx (转换_十六到十 (“7866d0”))
汇编.Call_Ebx ()
汇编.Ret ()
汇编.远程调用代码 (进程句柄, 汇编.返回代码 (), 真)
.子程序 最近怪, 整数型, , 返回最近怪物地址
.参数 附近怪物数组, 整数型, 数组
.局部变量 怪物, 怪物角色
.局部变量 A, 整数型
.局部变量 人物, 人物角色
.局部变量 临时怪物距离, 双精度小数型
.局部变量 临时怪物距离数组, 双精度小数型, , "0"
.局部变量 判断距离数组, 双精度小数型, , "0"
人物 = 读取当前人物属性 ()
.计次循环首 (取数组成员数 (附近怪物数组), A)
怪物.当前坐标.X坐标 = 内存_读小数型 (进程句柄, 附近怪物数组 + 转换_十六到十 (“AC”))
怪物.当前坐标.Y坐标 = 内存_读小数型 (进程句柄, 附近怪物数组 + 转换_十六到十 (“B0”))
临时怪物距离 = 求距离 (人物.当前坐标.X坐标, 人物.当前坐标.Y坐标, 怪物.当前坐标.X坐标, 怪物.当前坐标.Y坐标)
加入成员 (临时怪物距离数组, 临时怪物距离)
.计次循环尾 ()
判断距离数组 = 临时怪物距离数组
数组排序 (临时怪物距离数组, 真)
' 调试输出 (取数组成员数 (判断距离数组), 取数组成员数 (附近怪物数组))
.计次循环首 (取数组成员数 (判断距离数组), A)
.如果真 (临时怪物距离数组 = 判断距离数组 )' 第一个遍历到自己,所以是第二个
返回 (附近怪物数组 [取数组成员数 (判断距离数组)])
.如果真结束
.计次循环尾 ()
返回 (0)
页:
[1]