脚本代码如下:
fp = Plugin.File.OpenFile("F:\pogo.txt") //数据保存在F:\pogo.txt
Sub OnScriptExit //在脚本退出时自动执行
Call Plugin.File.CloseFile(fp)//关闭文件
End Sub
pvz = Plugin.Window.Find(0,"Plants vs. Zombies") //获取窗口句柄,"Plants vs. Zombies"为窗口标题
base_addr = Plugin.Memory.Read32Bit(pvz, &H6A9EC0)
this_level = Plugin.Memory.Read32Bit(pvz, base_addr + &H768)
zombie_info = Plugin.Memory.Read32Bit(pvz, this_level + &H90)
// 令zombie_info = [[6A9EC0] +768] +90]
Dim tm
Do
If tm <> Plugin.Memory.Read32Bit(pvz, this_level + &H5568) Then
tm = Plugin.Memory.Read32Bit(pvz, this_level + &H5568) //记录当前时间
bogo_X = Plugin.Memory.ReadSingle(pvz, zombie_info + &H2C) //2C对应僵尸X坐标
bogo_Y = Plugin.Memory.ReadSingle(pvz, zombie_info + &H30) //30对应僵尸Y坐标
bogo_above_ground_level = Plugin.Memory.ReadSingle(pvz, zombie_info + &H84) //84对应僵尸离地面高度
Call Plugin.File.WriteLine(fp, tm &vbTab& bogo_X &vbTab& bogo_Y &vbTab& bogo_above_ground_level) //把数据写入到文件
End If
Loop //循环执行`Do`后面的语句
由于僵尸数据的特别的填充顺序,在一般的情况下不能直接写 zombie_info + &H2C 而要写成 zombie_info + (n * &H15C)+&H2C 然后仔细调整 n 的值使得数据对应的就是需要的僵尸,而不是对应其他的僵尸(或僵尸鬼魂)。
因为制作的存档考虑了研究的方便,这里的 n 取的是 0 ,所以 n * &H15C 等于 0,也就不必写出了……