Dim 当前应用包名,X坐标,Y坐标
当前应用包名 = sys.GetFront()
TracePrint 当前应用包名
Dim addr = "0x7"//开始搜索的起始值,我们要找的X坐标信息的地址为886F9040,我们可以填0x7,比8小一点。因为在特征码定位和基址定位中地址是不变的,所以作用是用来加快搜索速度
Dim tb1 = {"lv":1109308085} //第一个特征点的坐标,我们就拿X坐标的值来。显然有点画蛇添足,其实直接拿X坐标地址去读内存就直接获取X坐标的值了
Dim tb2 = {"lv":1116455199,"offset":8}//第二个特征点的坐标。GG里面Y坐标的地址比X坐标地址大,偏移就是为正数
Dim tb = {tb1, tb2}
Dim t = TickCount()//按键自带命令,计算内存搜索时间的
Dim A = Sys.MemorySearch(当前应用包名, True,addr, tb, "i32",0,1)//这里的True代表新搜索,显然第一次是新搜索,i32的意思就是特征点的数据类型tb1和tb2这两个键表值的类型,i就是int,1109308085和1116455199,是32位整数型,0代表搜索范围,0为最广,1是搜索次数。只搜索一次。
//返回的A为一个数组。可能在数组中会搜索到很多结果,一般以数组第一个为准,所以搜索到保存A坐标的信息的地址是是A(0)
TracePrint "搜索地址为:"&A(0)&",耗时"&(TickCount()-t)
//此时A(0)应该是为16进制的地址字符串,偏移为10进制数据,要把结果转换成10进制数值加上偏移再转成16进制的数据。最后转成字符串才能在内存搜索这个命令里面去使用
Dim X地址 = 地址相加(A(0), 0)//该函数下面有注释
Dim Y地址 = 地址相加(A(0), 8)
TracePrint X地址 //6进制的地址字符串
Do
X坐标 = Sys.MemoryRead(当前应用包名, X地址, "f32")//我们GG搜索到的值为双精度浮点数,所以为f32,这里大小写应该不敏感,官方的提示全部是大写。我用小写也可以搜到
TracePrint X坐标 //输出X的浮点数坐标值
Y坐标 = Sys.MemoryRead(当前应用包名, Y地址, "f32")
TracePrint Y坐标//输出Y的浮点数坐标值
ShowMessage "x坐标为:"&X坐标&"\ny坐标为"&Y坐标//页面直接显示一下
Delay 300//循环读取加点间隔
Loop
Function 地址相加(地址, 偏移)
Dim A = Right(地址,Len(地址)-2)//去掉16进制左边的0x
Dim B = Clng("0x"&A)//把这个16进制数据强制转换成十进制整型
Dim C = B+偏移 //结果加偏移
Dim D = Hex(C) //强制转16进制
Dim E = "0x"&D //加上0x,转成字符串
地址相加 = E
End Function