我想知道,有没有办法在我们的游戏中检测到像游戏守护者这样的速度黑客应用程序?
我搜索了整个互联网,但没有得到满意的答案。
我想知道,有没有办法在我们的游戏中检测到像游戏守护者这样的速度黑客应用程序?
我搜索了整个互联网,但没有得到满意的答案。
解决方案不是更多的软件。该解决方案从一开始就不会受到此攻击。
例子:
如果您允许您的用户向您的服务器发送他们在世界地图上的坐标(“我是蓝色玩家,由于我移动了我的全部津贴,我现在处于 156/467”),那么有人写一个传送作弊是微不足道的. 只需发送不同的坐标,就可以传送。孩子们玩。
如果您只允许您的用户向您的服务器发送意向消息(“我是蓝色玩家,我打算将我的全部津贴移向 156/467 的方向”)并让您的服务器弄清楚这意味着什么(是允许玩家移动,他的津贴是多少,蓝色玩家在一个单位时间内会走多远)并将结果发送回来,你永远不会有这个问题。
不要相信客户的输入。电子游戏安全的第一条规则:客户端在敌人手中。
如果您继续信任您的客户,那么将越来越多的软件推到您的客户之上是没有意义的。只需停止并设计您的游戏,以便客户端可以发送意图并由服务器确定结果。
这取决于您的游戏,但您可以通过简单地检查每一帧的玩家位置来尝试检测速度黑客。
Time.deltaTime
.这将是独立于帧率的检查,因为您将使用每秒允许的最大距离。
如果服务器始终拥有所有玩家位置,并且您的问题在于速度黑客,那么解决方案并不难(假设玩家位置不断发送到服务器)。
请执行以下操作,首先在更新玩家位置之前检查当前位置和旧位置之间的距离是否不是太大
var distance = Vector3.Distance(old.position, currentposition);
if(distance<=alloweddistance)
...
如果是避免将位置\设置玩家更新为旧位置\踢玩家。一个更好的解决方案是不允许玩家将他们当前的位置发送到服务器,而是发送他们移动的方向和速度。服务器应该随着方向和移动速度改变他们的位置,而不是客户端。
我为我自己的在线多人项目找到了解决方案,它适用于任何在线游戏。
为了解决这个问题,我们只需要计算服务器中的时间。例如,我们可以stopwatch
在客户端使用并执行此操作......在特定情况下,我们可以通过网络比较它们,如果它们之间有任何差异(超过 3 秒),那么很明显使用了播放器速度破解。
我在我的游戏中尝试了这种方法,效果很好。