77范文网 - 专业文章范例文档资料分享平台

CS1.6 制作脚本详细教程(8)

来源:网络收集 时间:2020-05-05 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

能达到54KB/每秒的速度。再做一个比较形象的例子就是你在家里使用QQ传文件和你在网吧里面使用QQ传文件时会发现在网吧明显要快于家里,

这是为什么呢?第一:就是网络的带宽大;第二:就是因为是你的上行来决定了你的下行,当上传的速度越快那么你的下载速度也就越快。如

果我记得没有错的话这样的技术叫做“不对称传输”是电信采用的传输方式。

两个参数一起使用后导致的现象就是高ping或是瞬间的爆ping现象发生。其表现出来的形式就是你的ping值将永远大于每方最上面的平均

ping值。而要完全解决ping高的问题最重要的还是跟你的网络环境硬件有重大的关系。如果你换一个2M的带宽上网那么ping值自然就比1MB的小

,这个道理我想也是不用我再多讲的了。

在LAN下你这样设置是对的,之所以设置成这样是因为比赛是在LAN里进行服务器的传输质量高同步高,所以才敢采用101这样的最大的同步 率.

在最后还需要指出的是在服务器中突然出现warning:CL_FlushEntityPacket的问题原因就是使用cl_cmdrate 101 cl_updaterate 101这样的

参数导致客户端无法达到参数所设置的同步数率而出现的lag现象.

服务器端配置文件参数参考: sv_maxupdaterate 30

// 服务器每秒更新最大频率 // 根据实际网络状况调节 // sv_maxrate / 300 = 要设的值 // 默认=30 // 局域=101

2.为什么rate 要设置成20000 或25000呢?

这个rate 要设置成20000 或25000也都是跟服务器相关的,都不能大过sv_maxrate 25000.所以一般都设置为20000 到25000但是测试得到的

结果是25000是最价的参数.

根据服务器的参数可以计算出来: sv_maxrate 25000

// 服务器最大传输速率 <0-25000>

// (服务器上传带宽 x 125) /服务器设定的最大人数 = 要设的值 // 0=无限制 // 局域=25000

好了以上的参数我们先讲解到这里,最后就是一个曾经引起很大争议的参数ex_interp,这个参数在CS中代表了游戏补偿桢的补充命令。

那么究竟它又有什么好争议的呢?甚至到CPL那里随便的修改ex_interp这个参数值都将视为作弊。

如果想搞清楚这些那么就继续往下看:

1、使用ex_interp 0.01和0.1有什么区别呢?

ex_interp 0.1相对0.01来说,特别是在射击中,随机性要大一些。换句话说用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来收集足够的数据进行插值。

3、10ms和100ms插值的不同?

如果熟悉插值的会知道,插值的方法有很多,如果只有两个点,那只能做简单的两点线

性插值,也就是两点成一线段。不断做两点线性插

值结果就是一条由很多线段组成的折线。如果有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来往前查找历史记录(比如目标的移动路线),以此判断是否击中或者谁先击中。

推算公式如下:

Command Execution Time = Current Server Time - ping - ex_interp

5、为什么CPL强调ex_interp 0.01而不是0.1?

尽管在电脑上看来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以上的参数来获得更好的同步率和减少丢包的情况发生。

6、如果不是在LAN,updaterate<100会如何?

由于大部分人都是在互联网上打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值。

这里就公布做为中国网络环境下使用的比较合适的网络参数:

1M网络环境:

cl_cmdrate 30~40 cl_updaterate 30~40

2M网络环境:

cl_cmdrate 80~85 cl_updaterate 80~85

3M以上网络环境:

cl_cmdrate 101 cl_updaterate 101

而最后提到的“然后从0.01开始慢慢增加ex_interp的值,直到电脑屏幕上的图象平滑连续为止。”这个方法将是最好的测得适合自己的ex_interp的值最佳参数。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库CS1.6 制作脚本详细教程(8)在线全文阅读。

CS1.6 制作脚本详细教程(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/1025494.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: