跳转至

用钩子定位数据

读取内存不是为自定义 HUD 获取数据的唯一方法。你还可以通过计算 DrawIndexedPrimitive() 函数绘制特定模型的次数、钩住游戏负责绘制某些类型文本的内部函数,甚至拦截负责处理游戏服务器数据包的函数调用来收集信息。每个游戏使用这些方法的方式都会截然不同,找到这些方法需要你把从本书学到的所有知识与自己的创造力和编程直觉结合起来。

例如,要创建显示地图上有多少敌人的 HUD,你可以使用透视使用的模型指纹识别方法计算敌人数量,并把这个数字输出到屏幕。这种方法比创建从内存读取敌人列表的方法更好,因为它不需要每次游戏更新时都找新的内存地址。

另一个例子是显示敌人冷却列表,这要求你拦截告诉客户端显示哪些法术效果的传入数据包。然后你可以根据法术和敌人的位置、法术类型等把特定法术与特定敌人关联起来,用这些信息跟踪每个敌人使用过的法术。如果你把这些数据与冷却时间数据库关联起来,就可以准确显示每个敌人法术何时可以再次使用。这特别强大,因为大多数游戏不在内存中存储敌人冷却。