[反恐精英]ex_interp参数中文最详解释
编者按:很久以来,有关ex_interp的争论就不断,目前国人的对其的认识,我想大多数都是这么认为的:Valve已经修正了有关ex_interp的BUG,ex_interp 0.1 和0.01都是合法的,并不会造成不公平现象,而且相比之下ex_interp = 0.01更占便宜。所有这些认识,我想应该都是源于OGC在《向CPL新加坡致敬》中引用的关于ex_interp的解释,那篇解释之前已经被包括我在内的无数人看过,也在心中植下了根深蒂固的印象,OGC还在寻找原作者署名吧?不要找了,原作者是个外国人,如果真有人来了那一定是假冒的…… |
其实,在那篇文章里,对于ex_interp的解释是基本正确的,呵呵。
最后,作者额外的解释了两句:
另外一点,如果你想你的cs更象“街头混战”一样的话,用另外的话说平滑而无顿挫感,那么我建议你将ex_interp设定为0.1。
不过如果你想你增加你的准确度的话(子弹打在你所实际瞄准的位置),那么就把ex_interp设定到最低值。
这么一句话,让每个人都以为ex_interp 为0.01占到了便宜。没错,应该是这样,服务器通过插值运算出来的人物运动只是模拟而已,也就是说,如果你的枪刚好在模拟运算欺骗了你的眼睛的同时开火的话,子弹是注定打不到你想打的人的。
不过请看Gotfrag上John Mellin写的文章《Cs 1.6 NetCode Explained》(付费内容)
ex_interp:Set this variable to 0 and nothing else. Counter-Strike will automatically set your ex_interp to 1/cl_updaterate (i.e. your console will say: ex_interp forced up to xx msec?. This is because the time in between each packet is exactly 1/(the # of updates per second), so this is how long you want your client to interpolate. Adjusting your cl_updaterate will automatically adjust your ex_interp (when ex_interp is set to 0). I renetmend only changing your cl_updaterate, and letting Counter-Strike set your ex_interp. You cannot set this netmand lower than 1/cl_updaterate anymore, and setting it higher is an exploit. Using a valve above 1/cl_updaterate forces you to shoot behind the actual model displayed on your screen, which should be considered an exploit. For example, if you use cl_updaterate 101, the correct valve for ex_interp would be 1/101 = 0.009 (9 milliseconds), but by using the default valve of ex_interp 0.1 with this high cl_updaterate, the aforementioned exploit appears.
Renetmendation:
ex_interp 0.
这么一段话的意思是:
ex_interp:
把这个值设成0,CS会自动把你的“ex_interp”设成“1/cl_updaterate”(控制台会告诉你“ex_interp”被强制设成XX毫秒。原文“ex_interp forced up to xx msec”)。这是因为两个数据包之间的时间间隔就正好是1/(每秒更新次数),这就是你需要客户端做出插值预算的时间长度。调整“cl_updaterate”会自动调整“ex_interp”(当“ex_interp”设成0的时候)。我建议你只修改“cl_updaterate”,而让你的CS来自动修改“ex_interp”。你现在不能把“ex_interp”设置的低于“1/cl_updaterate”,而把它设高则导致了你射击对手的时候不得不瞄准出现在屏幕上的人的后面,这种行为通常被认为是exploit。比如,如果你的“cl_updaterate”是101,你“ex_interp”的正确值就是“1/101=0.009”(9毫秒)。而使用默认值0.1就形成了前面所说的exploit。注意到这里有段:而把它设高则导致了你射击对手的时候不得不瞄准出现在你屏幕上的人的后面。
这段话看起来是不是很别扭?字面上看还是设高了吃亏嘛,呵呵,别着急,这是这个外国人没解释好,一会我会给出中国人能看懂的解释。现在肯定有人想问,什么是exploit?我是搞计算机的,一般在网络攻击中,exploit是代表“溢出”,“漏洞”的意思。
再看cpl的相关规则:Any netpetitor or team accidentally utilizing ANY exploit or bug in a map or game will forfeit that round and all remaining rounds for the half. Players need to be responsible for their actions in regards to know map or game bugs/exploits.
大概意思是:
任何人利用任何BUG或exploit在一副地图或者一场比赛中将被判当局以及该半场内之后所有之局为负,选手们有责任了解在地图和游戏中什么样的行为可能导致BUG和exploit的产生。
所以,如果我们把BUG翻译为错误的话,那么可以把exploit看做是漏洞。但是,在这篇文章里,还是没有详细的解释清楚,为什么ex_interp 设置高了会是一个exploit?而Using a valve above 1/cl_updaterate forces you to shoot behind the actual model displayed on your screen这句话真是只有鬼才看的明白。要怪就怪Valve,从来没有官方声明能把这些参数完全解释清楚,是否那些做程序的人自己都不玩CS呢?这虽然可能有人知道,但至少你不知道,我不知道,我们中国人也都不知道。即便是在国外,大多数的人的相关认识也是通过以上2篇文章以及由这2篇文章衍生出的其他一些文章建立起来的。但是所有的文章,都没有给出一个可以让人看懂的解释,看完所有这些文章以后,我们的疑问反而越来越多,究竟ex_interp的修改对游戏的效果有没有影响,为什么有人会说,ex_interp 高是"Indeed Cheating"?
那么现在我来对ex_interp做个更详细的解释,似乎好像应该仿佛国内外还没有我这么对ex_interp解释完全的文章,希望看了这篇文章之后,你对ex_interp的认识会超过70%以上的老外,也许他们明白怎样修改ex_interp会导致犯规,但是也未必清楚真正导致犯规的原因。
其实所有的分析都基于以下几个已经确定的内容(请注意,这里只讨论1.6,1.5由于存在bug,无法用以下说法解释)。