为什么要强制整合所有玩家在同一个时刻上玩游戏呢?例举2个很多人都遇到过的实例:
1. 枪林弹雨中我冲向掩体,躲了进去,暗自庆幸捡回了一条小命,忽然我身体被拉回到了掩体外,死了!什么情况?因为有个高ping玩家,他开枪射杀了半秒前的我,那时我正在跑向掩体。因为延迟补偿的原因,服务器判定为成功击杀,并重新向我发送了变化后的数据。是不是感觉被回溯了?是不是有点不爽?
2. 我背对着一个敌人从高处跳下,并向前跑动了一段距离躲进了掩体,心里寻思着:很好,没有人打我,满血无伤。正准备掏出闪光弹反击敌人时,我的身体忽然被拉回到了半空中,死了!Why?空中打鸟!太过分了!回溯!
在例举的这2个实例中,我们不难发现,敌人在攻击我时,我是完全不知道的!因为敌人延迟高,他那边在攻击过去的我。而我这边显示我已经跑到安全位置。是不是有点像《终结者》这部电影?杀死过去的约翰·康纳,未来的约翰·康纳也会消失。如何避免这种情况?据我所知,没有办法可以完全避免!但是,如果我把自己的时间刻度滞后,是不是可以减少被回溯的可能呢?不仅可以减少被回溯的可能,反而使其他玩家会被我回溯,相当于合法回溯。这就是sv_clockcorrectionmsecs这个参数的真正作用了。设置该参数值为多少最佳呢?假设房间内有一堆玩家,找延迟最高(不包括你自己)的那位:玩家A,延迟200毫秒。再看自己的延迟,延迟50毫秒。把2者相加就是该参数的最佳设置值,保险起见,在此基础上再加上个50毫秒。因为网络延迟有时候会忽高忽低,尽量选择最高值。为什么要这么设置呢?分析解释:某一个时刻,你向着掩体逃跑,发送该信息给服务器耗时25毫秒,服务器接收到信息后转发该信息给玩家A耗时100毫秒,也就是说玩家A看到的是125毫秒前的你,此时玩家A向你射击,并发送该信息给服务器耗时100毫秒,服务器接收到信息后判定你被打中运动减速,并转发该信息给你耗时25毫秒,也就是说250毫秒后你才收到你被打中减速的信息。把sv_clockcorrectionmsecs设置为250毫秒,保险起见再加50毫秒,设置为300毫秒,基本上房间内的高ping玩家都不可能回溯的到你,因为他们都是默认设置,30毫秒,除非有人开回溯挂才能回溯你。这里我想到了一个题外话,csgo的假身外挂和回溯外挂是不是csgo的开发人员制作的?为什么刚好和这些参数有关系?