像我们游戏,战斗的逻辑是写在客户端的,而且是只发送结果给服务器,这种情况就非常容易用变速器(调速器)来作弊,尤其是我们游戏还有打 BOSS 这样的玩法.所以...防御变速器作弊是非常必要的.
原理如下:
//开始战斗的时候记录下当前时间
float CurBattleTime = 0;
void StartBattle()
{
CurBattleTime = 0;
_startPoint = System.DateTime.Now;
}//在 Update()里面叠加 Time.deltaTime 给 CurBattleTime
private void Update()
{
CurBattleTime+= Time.deltaTime;
}//战斗结束,判断一下 CurBattleTime 和实际时间差 sysLostTime 有多少的误差
void FinishBattle()
{
var curTime = System.DateTime.Now;
int sysLostTime = (int)((curTime - _startPoint).TotalSeconds);
int tmp = Mathf.CeilToInt(CurBattleTime) - sysLostTime;
if (sysLostTime > 0 && tmp <10)
{
Debug.Log("FinishBattle WithoutCheating battleTime = " + sysLostTime + " tmp = " + tmp);
}
else
{
Debug.Log( "FinishBattle Player Cheating !!!!!!!!!! battleTime = " + sysLostTime + " tmp = " + >tmp);
}
}
实测可以鉴定出葫 lu 侠的变速器,当然也可以在战斗开始的时候给服务器发通知,再在战斗结束的时候发送 CurBattleTime 给服务器,让服务器鉴定时间是否在允许的范围内(我们已经在用这个方法了,所以把老的代码分享出来,不过并没有坑你们,也是可以测出来加速的)
以上代码都是我自己敲出来的,欢迎各种搜
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.