尽管我第一条评论是质疑降低部分观众的体验而没有明显收获的观点,但从技术角度来看,我仍然认为这是一个有趣的问题。
我只是有一个想法:作弊者所做的就是找到改变并冻结它们的价值。然后仅在死亡或改变玩家健康的事件之间进行搜索。而且,作弊者可以通过过滤掉他“不死”时发生的变化来完善搜索范围。
如果“健康”计数器一直在变化,该怎么办?如果性能影响太大,则使其成为指针并每隔一帧或每N帧重新分配一次。或将其与更改每个帧的随机值进行XOR(在使用新的随机值进行加密之前,再次对相同的值进行XOR进行解密)。
如果您还有其他游戏内数据也在更改整个时间(包括玩家角色的x和y位置或时间计数器),则可能很难找出所有更改的数据中的哪一个是健康状况。冻结整个游戏状态对作弊者是不行的。
对于进一步的误导,您实际上可以将运行状况存储在一个普通的只写变量(表示为蜜罐)中。
编辑:
尽管如此,作弊者仍可能试图找出在整个时间中一直在变化的变量中哪些是通过反复试验而冻结的变量。一种可能的解决方案是将变量耦合在一起。
一个例子:
而不是存储健康状况(h)和位置(x),而是将它们存储在两个变量a和b中,以后可以从中获取值:
a = x+h; b = x-h
x = (a+b)/2; h = (a-b)/2
这样,如果作弊者只冻结其中一个,然后移动角色,则位置会受到影响,并且取决于冻结的角色,h变为负数(立即死亡)。您可以在上述公式与以下公式之间切换:
a = x-h; b = x+h
x = (a+b)/2; h = (b-a)/2
在连续的帧中,您可以保证在任一变量被冻结后最多2帧内,运行状况将在x改变时变为0。请记住,您仅存储a和b。如上所述,将其与连续的XOR相结合。结果是收集了一组变量,这些变量将每个帧更改为看似随机的值,冻结任何单个帧或其中的一个子集只会在游戏中产生不希望的副作用,即时死亡就是其中之一。