UE4找所有玩家的血量

/ 9

为什么要找所有玩家的血量?

用于绘制所有玩家的血条,判断玩家是否死亡。

传统找法

一般 FPS 射击游戏中的血量满血时都是数值100类型 float。所以我们满血的时候先精确扫描单浮点100,然后掉血了搜减少的数值。没掉血再搜不变的数值,直到找到血量地址。

找到后指针扫描最大5级偏移。扫描出结果后,要找基址是 "BattleRoyaleTrainer-Win64-Shipping.exe"+02AEFFB8 ,并且偏移是 0x30 -> 0xB0 后。因为我们要找的是所有玩家的血量,也就是 Actor 下的血量。

最终得到血量偏移为 "BattleRoyaleTrainer-Win64-Shipping.exe"+02AEFFB8 -> 0x30 -> 0xB0 -> 0x8 -> 0x7C4。其中 0x8 为遍历 ActorArray 的偏移。

更简单的找法

还有一种方式,找到自己的基址后,去分析结构。然后在里面搜索数值,没有受到伤害之前,基本都是100。找到所有可能为血量的地址后,再进行测试。比如修改,比如受伤后的变化,这样就可以直接确定血量偏移。

有些游戏其他玩家的血量可能不会存储在本地,也就是在 ActorArray 下面可能找不到血量,也有可能是做了加密处理。这个时候想绘制血条已经是不可能的事情了,但判断玩家是否死亡,还可以采用折中的办法。比如玩家死亡后,观察玩家的骨骼数据是否正常。

一般 FPS 游戏中玩家死亡后,尸体会在地上停留几秒才会消失,但是消失后他的 Actor 并没有马上销毁,也就是还在 ActorArray 中。如果我们直接绘制出来,则会出现空框。所以我们需要通过分析人物结构,观察玩家活着和死亡的时候数值变化,如果可以找到固定的变化规律则可以替代血量用于判断敌人死亡。如果找不到,则可观察骨骼变化,一般就算 Actor 还会销毁,但它的骨骼数据已经没有了,也可以用于判断玩家尸体是否消失。