弹道的稳定和很多因素有关系
比如你使用的鼠标 还有网络 还有机器配置和服务器端的设置
给你个脚本 我不会做 但是懂 复制到你config里
大家好!自从DcOo的 Twins版发布以后我就接到很多人反映说是游戏的弹道被修改了啦...弹道好散的啦...更看到有人问什么版本才是最接近正版的弹道的呢?等等这样的问题。
其实有关游戏的弹道影响问题我在很早的一个篇玩家帖子里面简单的讲解过,可能一些老一点的玩家有点印象,不过因为觉得写这些带有强制教育性的文章是没有什么玩家会去认真去阅读的,所以就在很早就打消了准备讲解一下因为网络参数的设置而对游戏弹道的巨大影响。
在前段时间在逛Esai论坛的时候发现有一个聪明的玩家通过自己的亲身体验重新证实了对游戏的弹道影响其实是网络参数和服务器之间的同步问题。我感到很高兴至少在中国还是有人去相信和研究网络参数而不一味的套用和模仿使用专业的比赛参数。
而今天我就利用自己的一点时间和利用以前曾经写的有关网络参数对游戏弹道影响的帖子结合国外专业玩家的收费帖子来为大家详细讲解一下游戏弹道被修改和影响的原因。
首先大家必须要认清楚一些错误的观念:
1、游戏的弹道是无法修改的,只能因为网络的同步(延迟)而受到影响。
2、正版和D版的唯一区别就在于启动的方式不同和认证的方式不同。所以不要去追求什么弹道最接近正版,如果不懂得因为网络参数的直接影响即使给你正版的CS弹道在你看来也是一样的散乱和漂移。
3、CPL等专业的LAN(即局域网)比赛组织的比赛参数不适合在互联网上比赛混战的玩家使用。
4、因为你的网络条件而直接决定了你与服务器的同步(延迟)所以不要认为比赛参数才是最终参数。如果你还是怎么认为那么你就是忽略了比赛的环境还跟你现在的环境不一样呢!
好了现在开始就由我来讲解游戏的弹道是如何被网络参数所影响的。不过在这以前我先引用两位玩家自己体验和转贴的一些内容来为后面我的解释做一个对照。
引用一:来自DcOo玩家zhongdingyong转贴的“简说弹道脚本问题说给那些还在迷惑中的CSer”内容如下:
还有别忘了1.6还有个ex_interp 0.01(这个在1。6中是弹道参数)
ex_interp 0.01 情况下压***特好,一压就死,反而 0.1 只在墙上描绘的弹道很集中,其实子弹很散。
我也可以说, 我闭着眼也能杀人,只不过效率不一样。但是,如果wNv 用30 0.1打比赛,绝对拿不到中国冠军。。。
子弹打在墙上的是客户断自己描绘的,并不是所谓的真实弹道,没必要研究墙上的弹孔!
我还发现某些人打比赛,弹道很NB,震动很大,很齐,后坐力回复超快,我研究了很多人的这些,也问过某些人,发现这是XXX***器的反后坐力作用,改config 改不到那种程度。除非 rate 达到 9999999 ,理论上才行。
说明:从上面我们不难看到是一篇典型的讲解CPL等LAN下的比赛组织所使用的服务器端和客户端的参数设置文章。写的是很准确但是却忽略了对于在互联网上打CS的网络延迟的问题。
但是最近总是发现如果在PING30~40的服务器上,在T家的A门处往对面的假木门射击,连射3发的子弹竟然非常飘,第1颗子弹是在准心瞄准处,
而第2发就飘到第1发上面了,第3发子弹更高。
这样总是在对方近距离移动时,***明明压了,但是就是扫不死人。
后来我把这两个参数都改为80,然后再在同样的位置3连发,这下前2发在一个点上,只有第3发稍微高了一点,弹道明显比都用101的好。
说明:根据玩家自己的亲身感受来重新证明了CPL参数不适合互联网上打CS的玩家设置。那么什么各位是否又重新去考虑过或是修改过以前一直使用的101所带来的巨大变化么?我想Li0nK是正确的,因为他想变的更强。
好了现在话题转移到我这边来,我就来讲解一下有关网络对于弹道的影响究竟为什么有那么大的变化好了。
首先需要说明的是在游戏中影响了游戏弹道的参数分别是:
特别说明:CPL lan比赛强制并且是不能修改的参数标准为:
cl_updaterate是它控制的是每秒钟你从服务器端接收的数据包的数量。因此,它依赖的是你的下载速度。你的“cl_updaterate”值越高,你和服务器的同步率就越高。既然只有服务器能决定你是否打中了,你当然希望收到足够多的数据包以保持和服务器同步。但是因为你的网络的环境决定你不能使用101这就好象你用一个试管去接口径是5寸的自来水水龙头,最后的结果当然是你的试管破裂。
cl_cmdrate 101这个参数决定了每秒钟你--即客户端发给服务器多少个数据包。很显然,这个值越高,服务器对你执行的命令的响应就越快。但是做为中国都是使用1M带宽上网的用户来说,你最大的上行速度也就是54KB而不是1M这就好象你用了一个水桶去接口径只有1CM大小的自来水水龙头的水一样的道理,最后的结果是你的上行根本达不到要求。
并且需要在这里重新指出的是:你的网络下行完全根据你的网络上行而决定的。比如:你下行可以达到185KB/每秒的速度,而你的上行就只能达到54KB/每秒的速度。再做一个比较形象的例子就是你在家里使用QQ传文件和你在网吧里面使用QQ传文件时会发现在网吧明显要快于家里,
这是为什么呢?第一:就是网络的带宽大;第二:就是因为是你的上行来决定了你的下行,当上传的速度越快那么你的下载速度也就越快。如果我记得没有错的话这样的技术叫做“不对称传输”是电信采用的传输方式。
两个参数一起使用后导致的现象就是高ping或是瞬间的爆ping现象发生。其表现出来的形式就是你的ping值将永远大于每方最上面的平均ping值。而要完全解决ping高的问题最重要的还是跟你的网络环境硬件有重大的关系。如果你换一个2M的带宽上网那么ping值自然就比1MB的小,这个道理我想也是不用我再多讲的了。
在LAN下你这样设置是对的,之所以设置成这样是因为比赛是在LAN里进行服务器的传输质量高同步高,所以才敢采用101这样的最大的同步率.
参数导致客户端无法达到参数所设置的同步数率而出现的lag现象.
服务器端配置文件参数参考:
// 服务器每秒更新最大频率
// 根据实际网络状况调节
根据服务器的参数可以计算出来:
// (服务器上传带宽 x 125) /服务器设定的最大人数 = 要设的值
好了以上的参数我们先讲解到这里,最后就是一个曾经引起很大争议的参数ex_interp,这个参数在CS中代表了游戏补偿桢的补充命令。
那么究竟它又有什么好争议的呢?甚至到CPL那里随便的修改ex_interp这个参数值都将视为***。
如果想搞清楚这些那么就继续往下看:
0.1的,有时候虽然没有瞄得很准但一样爆了头,有的时候瞄得很准却打不死人……
如果LAN(即局域网)条件下电脑甲用0.01,电脑乙用0.1。当服务器送出数据包A,由于ping值差别很小,基本在1ms左右,可以忽略不计,所以此数据包A将同时到达电脑甲和乙。那么这时候在两条电脑上会出现什么情况呢?结果就是,等过了10ms,在电脑甲的显示器上才出现数据包A描述的图象;而再过了90ms(100ms时),在电脑乙的显示器上才会出现数据包A描述的图象。所以其实这里的0.1和0.01的单位就是秒(s):0.1=0.1s=100ms;0.01=0.01s=10ms。
2、那在这儿10ms或者100ms内这两台电脑都做了些什么呢?
很简单,数据插值。我们知道服务器只能向电脑发出不连续的数据包。在LAN里,updaterate采用的是最大值100。亦就是1秒内服务器向电脑发出了100个数据包,每10ms发出一个。如果我们的电脑只是按照这些数据包来生成屏幕上出现的图象,尽管10ms很短很短,敏锐的人眼还是足够让每个人都会觉得图象及其不连续,这就是必须做数据插值用来填充两个数据包间那10ms空白的根本原因。你的电脑正是通过这0.01s或者0.1s来收集足够的数据进行插值。
如果熟悉插值的会知道,插值的方法有很多,如果只有两个点,那只能做简单的两点线性插值,也就是两点成一线段。不断做两点线性插值结果就是一条由很多线段组成的折线。如果有N个点,那么就能采用高阶函数做插值,比如用N-1次多项式做插值,结果是一条很光滑的曲线。
假设服务器最开始向电脑发出的数据包为A,之后是B、C、D、E和F、G、H、I、J、K,间隔为10ms。电脑甲和乙将同时收到A,但是它们不会立刻把A画出来。对于采用ex_interp 0.01的电脑甲来说,它要等10ms后收到了B时才开始把A图象在屏幕上画出来,再等到10ms后,电脑才会画B图象。而对于在画B图象之前那10ms的空白,电脑甲用已知的A和B这两个数据点通过两点线性插值来计算并在屏幕上画出。对于采用
ex_interp 0.1的电脑乙来说,它要等收到A数据包100ms后,也就是当收到了K数据包的时候才开始画出图象A。而对于在A~K这些离散数据之间10段空白,电脑乙已有11个数据采样点,这样它就可以通过高阶函数来进行非常光滑的数据插值。
所以,ex_interp其实就是给出一个采样时间,10ms和100ms的差别就是100ms的图象更加平滑,因为采样数据点多可以用高阶插值函数。这就是为什么强调公平的CPL在规则里要求所有人的ex_interp必须相同。
4、服务器端如何协调不同的ex_interp?
正像前面说的,尽管电脑甲和电脑乙同时收到数据包A,但是电脑甲要在10ms的时候才画出图象A,而电脑乙要到100ms时才会画出图象A。显然,用电脑甲的人会比用电脑乙的早90ms先看到图象A。如果看到A时就要开火,用电脑甲的会不会比用电脑乙的有优势?
***是不会,因为服务器是知道两台电脑的ex_interp的。这里服务器会存储相当长度的一段历史,当收到来自电脑甲和乙的命令后,通过下面的公式,也就是根据相应的ex_interp来往前查找历史记录(比如目标的移动路线),以此判断是否击中或者谁先击中。
尽管在电脑上看来ex_interp 0.1的图象会比0.01的平滑流畅,但是我们通过上面的公式知道,服务器必须要倒推一段时间的历史记录来对开火等客户端命令进行判断。这段倒推的时间越长,不可预知的数据误差就会越大。因此ex_interp
0.1相对0.01来说,特别是在射击击中上,随机性要大一些,更加平滑。换句话说用ex_interp 0.1的,有时候虽然没有瞄得很准但一样爆了头,有的时候瞄得很准却打不死人。当然这些许的随机性对于一般人,对于在几十ping的互联网上打CS的或者***法稍差一点的人来说是感觉不出来的,但是对于顶级高手可能就不同了。强调指哪儿打哪儿,强调每台比赛机器尽量和服务器同步,也许这就是CPL规定ex_interp 0.01的原因。
(这也是LAN里练出来的步***一般来说比高ping的internet上练出来的要硬的原因,因为互联网上的瞄准是“模糊的”)
补充说明:这里实际上存在一个疑点。从上面的解释看,采用ex_interp 0.1时,A-B之间的插值计算除了用到A这一个过去数据点
,还用到了B到K的10的未来数据点。因此,也许,在计算A-B之间的图象时用到了过多的“未来”的数据,在图象上可能会出现一些不应该出现的反映“将来”的信息。由于不知道这里的插值函数的具体形式,这个问题存在与否现在无法确定。说不定这才是CPL不让用ex_interp 0.1的真正原因......但是根据无限天空的测试所得到的结果其实ex_interp根本是无法达到0.01的强制效果的,因为服务器的关系会强制将参数在瞬间修正为0.028以上的参数来获得更好的同步率和减少丢包的情况发生。
由于大部分人都是在互联网上打CS的,服务器一般的sv_maxupdaterate都是30(没有专门调过的服务器的fps不会大于100,sv_maxupdaterate达不到100),也就是服务器每秒只向各位的电脑发出30个数据包,每33ms一个数据包。如果此时还是设置ex_interp为0.01会如何?大家应该会有经验,这时候会看到屏幕上人物的移动一闪一闪的不连续。原因很简单,由于数据采样时间只有10ms,而数据包间隔却有33ms,电脑将无法采用哪怕最基本的两点线性插值。电脑只能用另一个方法,根据当前人物的位置和速度来预估计算这33ms中人物的移动(其实当网络传输过程中丢包过多时,电脑也会用同样的处理办法)。自然,这肯定会跟实际情况有很大出入。当服务器新一轮的数据包传到后,服务器会强制你的电脑对人物的位置进行修正,这时候就出现了人物动作发闪不连续的现象。
讲解到这里新的问题又重新产生,我们知道如果做为公平性来讲那么我们必须要将ex_interp设置成0.01并且在开CD的情况下那么前面所说的人物闪动不连续的情况更加的严重。这又是为什么呢?
很简单因为CD的工作原理是在启动的时候强制hl.exe程序反复的进行跟CD内部代码反复验证来获取是否在***,于是CD的工作图就是:
HL.exe程序启动==》通过防火墙==》被客户端CD拦截(开始识别比对,错误即拦截)==》进入服务器(开始传送经过服务器端加密的代码)==》返回到CD客户端==》通过有验证即继续返回,感觉有敏感代码即拦截。==》最后返回到HL.exe程序调用的cstrike文件夹内容。
在这个过程中CD其实在客户端部分就有一个返回代码和一个跟随服务器数据包的返回代码,这样也就是说有三种数据包在返回,根据上面的理论电脑将无法采用哪怕最基本的两点线性插值这样就造成了电脑的负担过重而重新根据当前人物的位置和速度来预估计算这33ms中人物的移动的位置进行修正,这时候就出现了人物动作发闪不连续的现象。
在互联网上打CS的时候,你一般是不会知道服务器的sv_maxupdaterate的(其实就算知道也不见得有用,因为服务器输出的数据包不见得就能达到sv_maxupdaterate)。简单的解决方法就是干脆设cl_updaterate为101,也就是说有来多少数据我就收多少,然后从0.01开始慢慢增加ex_interp的值,直到电脑屏幕上的图象平滑连续为止。
那么这个方法可行么?我的回答是:“不可行!”
因为我们不知道服务器端的sv_maxupdaterate数值是多少,那么我们也就无法做出很好的同步参数,但是如果使用通用的101那么就将导致你的网络ping数值永远大于每方平均ping值。而当你的网络能够跟服务器达到一个很好的同步的时候那么你的ping值将永远小于每方平均ping值。
这里就公布做为中国网络环境下使用的比较合适的网络参数:
而最后提到的“然后从0.01开始慢慢增加ex_interp的值,直到电脑屏幕上的图象平滑连续为止。”这个方法将是最好的测得适合自己的ex_interp的值最佳参数
还有别忘了1.6还有个ex_interp 0.01(这个在1。6中是弹道参数)
ex_interp 0.01 情况下压***特好,一压就死,反而 0.1 只在墙上描绘的弹道很集中,其实子弹很散。
我也可以说, 我闭着眼也能杀人,只不过效率不一样。但是,如果wNv 用30 0.1打比赛,绝对拿不到中国冠军。。。
子弹打在墙上的是客户断自己描绘的,并不是所谓的真实弹道,没必要研究墙上的弹孔!
我还发现某些人打比赛,弹道很NB,震动很大,很齐,后坐力回复超快,我研究了很多人的这些,也问过某些人,发现这是XXX***器的反后坐力作用,改config 改不到那种程度。除非 rate 达到 9999999 ,理论上才行。
游戏中影响了游戏弹道的参数分别是:
中国网络环境下使用的比较合适的网络参数:
许多游戏玩家都遭遇过游戏画面刷新率过低的问题。大家都知道,Windows桌面的刷新率通常是85Hz,至少75Hz,这样的刷新率才能产生不会出现闪烁的显示画面。但在游戏和一些大型3D软件中,会将刷新率降回60Hz,这将带来严重的画面闪烁和抖动,使用时间长了必定头昏眼花。
ATi的显卡则得升级到催化剂3.6版以上才有类似的选项,叫做“DirectX覆盖刷新速率”,将其设定为“与桌面相同”,即可解决游戏画面刷新率过低的问题。
在NVIDIA的显卡中一直有一项“垂直同步”的选项,通常是默认打开的。设置“垂直同步”之后,许多玩家面临一个问题,就是性能降低,譬如在CS之类的游戏中,帧速率无法超过60fps,严重影响竞技水平的发挥。这种现象对测试人员而言是常识,在测试中必须关闭“垂直同步”才不会限制显卡性能的发挥,但是关闭对游戏画面有很大的影响,是以损失画质为代价。
如何做到既保证性能,又保证舒适?问题的根源是Windows默认的游戏刷新率是60Hz。简单的解决办法是修改注册表。
1先在 开始菜单 运行 里面 输 regedit 然后确定 进入注册表。
3点注册表编辑里面的查找 搜寻“Monitor”键值。找到后,会发现该分支下应该有类似“0000MODESXXX,XXX”的键,XXX,XXX这就是该电脑的最大分辨率。
4右击“MODES”新建一个项。
当然你也可以建多个分辨率的名称。
6在右边的窗口右击新建一个字符串值,名称输入Mode1
8双击“Mode1”,数值设为“85-85,85-85” 当然你也可以设为“100-100,100-100” 前提是你的显示器刷新率支持100HZ的,不要太高哦,85就是标准的了!
就是这样了,关闭注册表并重启电脑,检查显示器设置,如果发现刷新率已经改为设定的值85Hz,就说明修改成功了,进CS,画面稳定,不闪烁,也达到了85HZ,最重要的是帧速率基本稳定在85fps(注册表数值设100的话,CS里画面刷新率就达到了100HZ,帧速率可以稳定在100fps)如果你的电脑性能不行,那是先天不足,可能会有误差。
下面有几个不是默认设置,大家可以用用:
s_eax "1"(打开声卡的EAX,方位感更好,默认是0)
cl_cmdrate "80"(网络传输更高,只要是宽带都行,LINE甚至可以100,ADSL不行默认好像是60)
m_filter "0" (“关闭鼠标平滑”,感觉定位更准,KING在CCSK上也是这么说,默认是1)
以上一点小小的改动都是在CPL的允许下的,所以更加没有什么***嫌疑,其中最具争议性的cl_dynamiccrosshair "0"也是CPL允许的,大家放心。不过你们可以去试试,虽然在移动中准星不变了,但是只是虚拟的,也就是说,子弹还是按照原来扩大的准星弹道来飞,只是感觉更容易瞄而已(远距离),如果碰到要压***的时候,很难控制(近距离)。这是用了以后的一个问题,还有就是如果FPS不稳定的话,连第一***都不准。所以dynamiccrosshair是0还是1,要看你平时的FPS稳不稳定。(稳定就0不稳定还是用1好)
这样在CS中就会自动调用你的这个valve\config.cfg文件中内容,注意跟1.5不同的是如果你直接修改cstrike_schinese\config.cfg文件的话,上面一些参数会在你第二次进入CS时候失效。
然后你要把垂直同步,各向异性过滤和全屏反锯齿关掉,你可以在显卡设置里面找到.
本config优化了fps,我自己有时能到230多,当然和个人显卡有关!
需要改动的config.cfg文件是*:Cs1.6中文版valve下面的那个,其他的改也没用!
经过优化后~!就轻易的上了200FPS,如果大家的配置更加好话,相信肯定会有一个让人惊讶的FPS数字