CS1.6HLServer服务器问题高手进.

CS1.6HLServer服务器问题高手进.,第1张

很简单比如你的IP是:2222159797然后你有一个域名是: >while(true){
buffclear();
int len = scread(buff);
if(len ==-1){ break;}
buffflip();
content += charsetdecode(buff);
}

请你选择本目录下的hldsexe文件创建一个快捷方式,可发送到桌面上,然后用右键选取快捷方式的“属性”,在“属性”的“目标”后面填上
-game cstrike +servercfgfile servercfg -insecure -port 27016 +maxplayers 14 +map de_dust2 +sv_lan 0 -console
在exe后面有空格
-console
//以控制台模式启动服务器
-game cstrike
//指定服务器内容为CS;在控制台模式下此为必须的参数;
-insecure
//取消VAC(Valve Anti-Cheat)Valve的反作弊模块;欲加载VAC则取消此参数,同时确保[HLServer\cstrike\liblistgam]里secure "1";
-ip 19216812
//指定服务器IP地址为19216812;此IP地址必须是服务器本机有效的内网或外网IP;
-port 27026
//指定服务器端口为27026,端口范围一般在:27010~27030。空缺此参数时,则默认27015为服务器端口;
+maxplayers 14
//指定服务器最大人数14,范围1~32(根据地图、服务器性能来定);
+map de_dust2
//指定服务器地图为de_dust2,备选地图参照[HLServer\maps\bsp];
+sv_lan 0
//指定服务器为Internet(互联网)服务器;+sv_lan 1为Lan(局域网)服务器;
-nomaster
//令服务器不在Master Server挂号;也就是服务器不会在Internet在服务器列表里被刷到;此参数一般与+sv_lan 1同时用,目的是建立独立的局域网CS服务器;
+servercfgfile server2cfg
//指定[HLServer\cstrike\server2cfg]为服务器设置文件;空缺此参数时,则默认[HLServer\cstrike\servercfg]为服务器设置文件;
+mapcyclefile mapcycle2txt
//指定[HLServer\cstrike\mapcycle2txt]为地图循环列表文件;空缺此参数时,则默认[HLServer\cstrike\mapcycletxt]为地图循环列表文件;
+motdfile motd2txt
//指定[HLServer\cstrike\motd2txt]为服务器欢迎窗口内容;空缺此参数时,则默认[HLServer\cstrike\motdtxt ]为服务器欢迎窗口内容;
+logsdir logs2
//指定服务器日志log所在的目录为[HLServer\cstrike\logs2];空缺此参数时,则默认[HLServer\cstrike\logs]为服务器日志log所在的目录;
-nojoy
//关闭服务器对手柄摇杆支持,客户端可以使用手柄摇杆等;这可能只是为了稍微减轻CPU压力,因为服务器关闭了手柄摇杆支持端口;
-noipx
//关闭对NetWare IPX的支持;稍微减轻CPU压力,除非是在NetWare LAN上玩;
-heapsize 250000
//指定HLDS使用250 MB内存,当你有足够内存的情况下,可以提高服务器性能;此为非必须参数
-zone 2048
//即使在consloe里有过长语句时,服务器也不至于挂掉;此为非必须参数
+log on
//服务器日志记录开启

我找来一篇中国点通俱乐部综合CS技术社区上的一篇帖子,你看看就知道为什么了:
>No masters loaded
Using default master
这是服务器没有挂到 INTERNET 列表 不能被刷出!
L 05/05/2009 - 19:55:52: Team "CT" triggered "Target_Saved" (CT "1") (T "0") 这回合CT胜利 得分
L 05/05/2009 - 19:55:52: World triggered "Round_End" 回合结束
L 05/05/2009 - 19:55:57: World triggered "Round_Start" 回合开始
L 05/05/2009 - 19:58:48: Server cvar "mp_buytime" = "1" 购q时间 1分钟
L 05/05/2009 - 19:59:07: Server cvar "mp_startmoney" = "8000" 开始钱数8000
---------------------
安装
---------------------
服务器端的安装 必须使用Metamod插件的形式, 最低支持的版本为metamod v18 或更新的版本。
Metamod的安装十分的简单
-> 目录建立
在半条命HL的MOD下(例如 cstrike 、dod, 等) 您必须在metamod工作目录下建立。
一般metamod的结构为:
'half life'\cstrike\addons\
我们可以创建新目录
'half life'\cstrike\addons\sxei\
'half life'\cstrike\addons\sxei\dlls\
-> 将我们的插件复制(sxei_mmdll)
目录创建完毕后我们将sXe反作弊系统的服务端sxei_mmdll复制到下面的目录中
'half life'\cstrike\addons\sxei\dlls\
形成如下的路径地址
'half life'\cstrike\addons\sxei\dlls\sxei_mmdll
如果是胜利之日DOD系列则形成如下的路径地址
'half life'\dod\addons\sxei\dlls\sxei_mmdll
-----------------------
配置
-----------------------
现在我们需要让Metamod插件知道我们新增加了一个服务器插件, 我们编辑Metamod插件的配置文件'pluginsini'
此文件目录位于
'half life'\'mod'\addons\metamod\
反恐精英CS的目录地址位于
\'half life'\cstrike\addons\metamod\pluginsini
胜利之日DOD的目录地址位于
\'half life'\dod\addons\metamod\pluginsini
在这个配置文件中我们增加如下的内容
; sXe Injected
win32 addons/sxei/dlls/sxei_mmdll
到上面为止我们已经全部将sXe Injected的服务端配置完毕, 我们可以检查运行状态下的metamod是否已经将sXe Injected插件加载运行。如果
Cs服务器已经在运行中 我们可以通过 Metamod 刷新配置'meta refresh'命令(这个命令必须拥有OP权限) 查询
也可以使用'meta list' 命令查看所有的插件运行状态, 例如下面的状态:
Like this
] meta list
Currently loaded plugins:
description stat pend file vers src load unlod
[ 1] AMX RUN - amx_mmdll v20063 ini ANY ANY
[ 2] sXe Injected RUN - sxei_mmdll v52 ini ANY ANY
[ 3] Fun RUN - fundll v20063 pl1 ANY ANY
[ 4] CSStats RUN - csstatsdll v20063 pl1 ANY ANY
4 plugins, 4 running
注意: 这点是十分重要的, 您在启动服务器的快捷方式中必须有+ip这一命令参数,并且+ip的参数必须为您服务器的连接真实ip地址,如果不
这样做sXe Injected插件的服务端将不会检测到客户端的存在
启动参数例如
+ ip 200323223
hlds_run -game cstrike + maxplayers 14 + ip 200323223 + map de_dust2 +port 27015
hlds_run -game dod + maxplayers 14 + ip 200323223 + map dod_donner +port 27015
其他的任何路由以及ip地址或者错误的参数都将导致客户端认为玩家是一种作弊行为将会被sXe踢出服务器如果您无法修改启动参数或者不会利
用启动参数做修改我们为您增加了新的办法来处理此问题。我们可以利用对servercfg文件新增加参数的办法来解决
例如增加:
ip 200323223
------------------------
管理
------------------------
sXe Injected 服务端的一些管理变量
-> 开启(缺省值1)
__ sxei_required \ sXe的变量数值可以按照我们的要求对sXe进行管理
__ sxei_required -1 \ 为关闭 sXe 不进行认为的反作弊行为验证
__ sxei_required 0 \ 在任意的状态(客户端开启sXe或者没有使用sXe)下客户端都可以在运行sXe服务端的服务器进行游戏。那么他们之间的
区别仅仅为:在sXe客户端未开启的状态下增加"[NO-sXe-I]"玩家名字的前缀,开启sXe客户端的玩家进入服务器玩家名字没有任何的变化。
__ sxei_required 1 \ sXe客户端必须正常开启并且没有任何的作弊行为,否则将不会通过sXe服务端的反作弊行为验证。如没有开启sXe客户
端或者有作弊的行为,服务器将在6秒内对玩家实施黑屏,过了6秒后服务器将会踢出玩家,并且在控制台上对玩家显示反馈信息。
-> 自动升级(__sxei_srv_upg, 缺省值1)
-----------------------------------------------------
__ sxei_srv_upg 1 \ 开启反作弊程序的自动升级,在服务端出新新的版本后,它自动地将下载最新的版本。
__ sxei_srv_upg 0 \ 关闭反作弊程序的自动升级功能。
-> 显示版本号的两个变量(__sxei_srv_ver, __sxei_clt_ver)
---------------------------------------------
__sxei_srv_ver \ 开启sXe服务端的对应版本号
__sxei_clt_ver \ 进入服务器的玩家需要开启的客户端对应的版本号
---------------------------------------------

首先说明:
sv_ 以及sys_ 系列参数,是服务器端的命令,如果是在非本地服务器上修改这些系列参数的命令,你需要获得服务器管理员的权限、
ex_interp和cl_updaterate的关系是非常紧密的,这两个参数的说明都请必须阅读。
文章中假设玩家的网络都在宽带接入的方式下进行。
------------------------------------------------------------------------------------------------
参数介绍:
cl_cmdrate:
这个命令决定了客户端向每秒钟服务端发送数据包的数量。很明显地,这个参数的数值设定得越高,那么服务器就能相应客户端处理信息的速度越快,基本上数值设定得高是没什么错的。如果你与你的朋友都在局域网中游戏,而延时非常严重,那么很可能就是这个参数没有设置好。事实上,大多数的宽带接入没有提供足量的上行带宽,这也恰好是这个命令需要的。
cl_updaterate:
cl_updaterate与cl_cmdrate是类似的,不过方向是相反的。它控制的是客户端每秒钟从服务端接收数据包的数量。因此,它和你的下行带宽是紧密相连的。cl_updaterate的数值设定得越高,你和服务器的同步率就越高。因为只有服务器才会决定你开q是否命中,所以你需要足够的更新数据包(upadates)。
sv_maxupdaterate:
cl_updaterate控制客户端每秒接收来自服务端的数据更新包数量(只对客户端本身控制),而sv_maxupdaterate就指定了服务端每秒发送多少数据包到客户端上(对服务端进行控制)。因此,客户端cl_updaterate的数值设定比服务端sv_maxupdaterate的数值要高,是不能增加客户端接受的更新数据包数量的。
sys_ticrate:
这个命令设定了服务器每秒能处理的最大数据“帧”数。默认设定下,这个参数设置为100。为什么服务器的fps那么重要?这个参数决定了服务器的感应能力。我敢肯定我们都觉得服务器好像在TI-83 Plus(图形计算器)上工作一样,而我们就是在LAN上进行这些图形计算器的处理。
sys_ticrate只是指定你的服务器所能计算的最大fps。默认设定下,服务器不会达到你所设定的数值,因为运算系统可能在处理某些其他的进程。市面上有不同的加速("boost")服务器fps的软件,不过大多数(如果不是全部的话)服务器加速软件是靠网络服务器供应商处理的,记住,这样的加速会加重服务器CPU的负荷。(出于某些原因,在de_inferno和de_aztec上用服务器加速软件的话,会剧烈增加CPU的负荷,大家可能曾经有过这样的体验。)在默认设置下,Half-life服务器,基于Win32的服务器一般在64fps,而基于Linux的服务器一般在50fps。如果使用加速软件的话,可能可以提升到512fps或者更高。这么高的服务器fps是受到争议的,不过我感觉如果在200fps左右就能感觉到明显的改进了。
一致性才是关键的。Fps从100飙升到512,这样可能会带来一个更差的游戏环境,因为sys_ticrate只在150左右,150是大多数服务器硬件所能承受的了的。
如果你有一个服务器的权限,而且想测试一下服务器的fps,那么在控制台输入rcon stats,看看你的服务器是否加速了:暂时地把sys_ticrate调到10000,然后在看看服务器的fps是否超过100,如果超过100,那就是加速了的。
ex_interp:
在解释这个参数之前,我们看看Webster字典对interpolate(添加,改写)这个词的解释
(以下是Webster字典的解释,译者这里不将原英文去掉,是让大家容易看到原有的解释)
Main Entry: in•ter•po•late
主要条目: in•ter•po•late
3 : to estimate values of (a function) between two known values
3 : 评估两个已知值之间的量的关系
intransitive senses : to make insertions (as of estimated values)
不及物动词:进行插入(到已评估的值之中)
每一秒你只能从服务器获得有限的更新,因此是不可能每次都那么精确地及时地与服务器达到同步。举个例子:
下面的图形显示的是圆的线性内插法。当数据点(更新数据包)的数量增加的时候,则插入的量则变得更加地准确。在CS中,你可以将这个比喻成在一秒内一个人物位置变化所跨越的范围。在服务器看来,这是一个精准的圆圈,而从客户端就需要在两个“真正”的数据包中插入一定的数据。
这就是ex_interp作用所在。在每一个更新包之间都会有一个很小的时间增量存在,这个时间由half-life的预处理系统计算。ex_interp设置了在每两个连续的更新之间的插入数(时间单位是秒)。在上面所看到的图象中,这些小的时间间隔会表示为图象的直边。因为插入值的处理是在客户端进行的,所以在服务器看来并不是完全的同步的。没有什么可以代替从服务端发出的真实的数据更新包,不过插入值的计算在大体上还是能达到要求。(译者注:感谢inbremen找到的)
------------------------------------------------------------------------------------------------
对线上游戏(互联网对战)的推荐值:
rate
我之前已经假设rate的数值为20000。把它调到20000以上不会有任何的改善,还可能会造成更不好的影响。
推荐值:
rate 20000
sv_maxrate:
这个值在大多数的情况下设置为0。我会解释一下为什么在线上游戏时这并不是个理想的数值。sv_maxrate 0 会检测每一个客户端rate的设置,并尽量满足每一个玩家的需求。假设对half-life引擎来说每一秒允许玩家使用的rate参数的数值超过20000。如果有一个玩家将这个数值设定为一个超高值(比如:999999999),那么服务器会尽量的去满足这个玩家的需要。那么这样会潜在的浪费带宽,并且会对服务器造成更多的负担,也许会超过服务器所能承受的范围。因此,我提出一个比较安全的建议,sv_maxrate在20000的时候会有比较好的表现。在现实中,sv_maxrate 0和sv_maxrate 20000的效果对游戏的进行而言可能都是一样的,不过提高一些预防的范围总是好的。
推荐值:
sv_maxrate 20000
cl_cmdrate:在理想情况下,这个数值应该和服务器的fps是相等的(不是有些人所认为的客户端的fps)。如果你对服务器的更新超过了在同一时段内服务器所能处理的帧数的话,多余的更新包会被服务器所丢弃。因此,cl_cmdrate设置得太高会有不好的效果,直接造成带宽的浪费。
推荐值:
cl_cmdrate与服务器的fps值相等或者稍高。
ex_interp:
把这个参数设为0或者什么都不写。CS会自动的把ex_interp设置为1/cl_updaterate(比如你的console窗口会显示“ex_interp forced up to xx msec")。这就是你想你的客户端要进行插入的时间长度。改变cl_updaterate会自动地改变ex_interp(当ex_interp=0时发生)。因此我推荐只改变cl_updaterate,让CS去设置你的ex_interp。现在已经不可能把ex_interp设定得比1/cl_updaterate更低了,把它设定得高一些却会产生错误。设置一个比1/cl_updaterate更高的值会造成你开q的时候打在屏幕中人物的后面(译者注:就是实际上你并没有打中人物,而只打在他的后面)。举个例子,如果你用cl_updaterate 101,那么ex_interp应该是1/101=0009(9毫秒),那么使用默认的ex_interp 01,而cl_updaterate还是这么高的话,那么之前所说的错误就会产生。
推荐值:
ex_interp 0
cl_updaterate:长期以来,大家都认为cl_updaterate的规定是在101,这样能使你获得少量的"choke(阻塞)"。Choke可以用命令net_graph 3看到。个人认为,choke是我不会考虑的东西。其实cl_updatarete的最佳值是很复杂的。CAL的服务端的config提供sv_maxupdaterate为101,那么很多人会总结为我们也应该把cl_updaterate设置为101。在理想的状况下,这是正确地,不过在实际情况下,并不是那么有用。在北美,大多数的服务器都不能负荷每秒100帧的运算,这就意味着服务器无法发出每秒100个更新包,而玩家们就会觉得很“卡”了。由于我们从客户端如果没有远程控制密码(远程控制权限)的话是无法窥探服务端的fps的,如何选择最适当的数值就像猜谜游戏一样了。你可能会说,“好吧,那就把cl_updaterate设置为101就不管了,我会获得服务器给我更新的最大值。”问题就在忽视了cl_updaterate对ex_interp的影响以及两者之间微妙的平衡关系。寻找一个适当的cl_updaterate值(记住要把ex_interp先设为0),从101开始逐渐减小,你会发现人物只是“微小的闪动”(译者注:原文是“slightyly skip around”,从实际 *** 作来看,我们可以看到人物的重影,就像闪动一样,我就把它翻译成“闪动”了)。“微小的闪动”是优先的选择,只要ex_interp等于1/cl_updaterate,那么人物就会在应有的位置上出现。在不同的服务器中游戏你都要改变cl_updaterate。如果必要的话,把它设置低于50也不要担心。预处理系统会发挥好它的作用的。备注:大多数的公众服务器都会使用默认的sv_maxupdaterate 30,那么在那种情况下,cl_updaterate就最好了。
请注意,从一个低的cl_updaterate数值(比如说20)逐渐增加是不行的,一旦你把它设定得更高,ex_interp是不会重新设定的,你需要不断手动地将ex_interp置0。这里我提供一个简易的脚本给大家调整你的cl_updaterate。
点击这里下载config
推荐值:
cl_updaterate应该与服务器的fps相等,不应该超过服务器的sv_maxupdaterate数值
sys_ticrate:
找合适的sys_ticrate就需要进行一些实验了。首先,如果你的服务器没有被加速,提高这个数值并超过100就不会有任何效果。如果你正好租用了一个高性能的服务器的话(你的服务器可能已被加速),那么你就有空间这么做。总体上来说,服务端有更高的fps是一件好事,提高sys_ticrate超过200(或者比200低)是毫无效果的。如果把sys_ticrate设为9999,你的服务器fps会根据现有的情况在150到1000之间不停的跳变,把sys_ticrate设定为低于200的数值会有一个更一致的环境,不过会对服务器的性能有所减弱。同样的,在一个物理服务器(一台电脑或者服务器主机)上都可能运行不同的HLDS(Half-Life Dedicated Server),那么如果每一个HLDS都把sys_ticrate设为10000的话,服务器的CPU的负荷就相当大了。这样的情况下,会潜在地造成在那台物理服务器上的性能的下降(也可能提高你每月的租用费用)。最后,服务器的fps只会在某几个数值上作用,举例来说,我的服务器fps只在85,102,128,170,256等数值上,而不是在他们之间(比如91)。如果你把sys_ticrate设为100,你的服务器fps最大值就会在100以下(比如85),因此,设定sys_ticrate大于目标fps数值约20到50左右比较合适。
推荐值:
sys_ticrate 110-180,结合你的服务器性能考虑。
------------------------------------------------------------------------------------------------
关于局域网对战的备注:
局域网对战,比如the CPL,cl_updaterate设置为101,这与局域网服务器的质量有关。通常在LAN上,只有一小部分的服务器会在虚拟盒中运行,因此服务器使用更少的资源。如果服务器都加速超过了100fps,那么cl_updaterate 101就是一个非常理想的数值。判断一个LAN服务器最快的方法就是看看玩家们ping的平均值。一个运行在50到64fps的默认服务器,在LAN下的平均ping值为15ms,而加速过的服务器会使ping值下降,大概在5ms左右。据我所知,the CPL,ESWC还有WCG都是使用加速过的服务器的。
-------------------------------------------------------------------------------------------
在参照CPL比赛服务器的config文件和本人亲自与战队的朋友试验后,最佳的参数设置如下:
// “sv_maxrate 0” 会自动监测所有玩家的连接速度,并满足每个人的要求。为防止系统过载,应设置为20000左右。
sv_maxrate 25000
sv_minrate 2500
// 每秒钟服务器端允许客户端接收的最大数据包数量。16中sv_maxupdaterate默认是30
sv_maxupdaterate 101
// 设定你服务器的最大FPS。其值应该等于服务器一般状态下的fps值+20。
sys_ticrate 10000
// 客户端最大移动速度
sv_maxspeed 320
这样的设置用起比较理想,基本上玩家没有choke,前提是客户端的cl_cmdrate和cl_updaterate不能设得比服务器端sv_maxupdaterate的值101高,如果超过的话会产生choke。下面将给出客户端的最佳设置。
如何最佳设置最佳CS16的客户端网络参数:
在比赛中,客户端的cmdrate updaterate rate ex_interp是允许修改的。在lan比赛中,网络带比较好的情况下,这几个数值是最佳的设置。
rate 20000 默认值为空
sv_maxrate 20000 默认值 0
cl_cmdrate 101 默认值 30
cl_updaterate 101 默认值 30
ex_interp 0 默认值 01
sys_ticrate 100 取默认值 100
fps_max 101 默认值 101
服务端的sys_ticrate 和 sv_maxupdaterate都是由服务器OP决定,玩家无法更改。这就引出一个问题:当我们进入一个没有OP权限的服务器时,根本就不知道服务器的sv_maxupdaterate值是多少,也就没有依据来设置客户端的cl_cmdrate和cl_updaterate值,如果服务器的sv_maxupdaterate值是50,而你的cl_cmdrate和cl_updaterate值设置成101的话,就会有choke产生。这时的解决办法是在控制台输入“net_graph 3”命令来查看是否有choke产生,如果有的话逐渐降低cl_cmdrate和cl_updaterate值,直到没有choke产生为止。
补充一下,由于同一服务器在不同人数的时候需要设定的updaterate值是不一样的(如果网络带宽足够用的话,这种情况也不会发生),假如你知道服务器的sv_maxupdaterate值是101,建议你把cl_cmdrate和cl_updaterate值都设成比101低一点,大家可根据实际情况进行设置。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10785581.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存