改变玩家的模型并减少SVC_BAD错误

改变玩家的模型并减少SVC_BAD错误

ID:38676691

大小:339.00 KB

页数:43页

时间:2019-06-17

改变玩家的模型并减少SVC_BAD错误_第1页
改变玩家的模型并减少SVC_BAD错误_第2页
改变玩家的模型并减少SVC_BAD错误_第3页
改变玩家的模型并减少SVC_BAD错误_第4页
改变玩家的模型并减少SVC_BAD错误_第5页
资源描述:

《改变玩家的模型并减少SVC_BAD错误》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Changingplayermodelsandloweringsvc_bad简介本教程面向需要在Counter-Strike中改变用户模型的中级AMXX编程人员,它将探讨几种应对广为人知的SVC_BAD错误的不同方法及其影响。SVC_BAD错误对那些没有留意它的人,这个错误通常是由于异常的引擎消息引起的。当异常消息产生时,最常见的后果是你从正在游戏的服务器里被踢出,并且在你的控制台会出现以下几种错误之一:·Host_Error:IllegibleServerMessage:SVC_BAD·Host_Error:UserMsg:NotPresentonClient###·Host_Error

2、:CL_ParseServerMessage:Badservermessage·诸如此类...这些错误的主要原因可能是:·数据在网络传送过程中出错·MODs或插件发送了一个不存在/无效的消息·MODs或插件发送了参数数量不正确的消息然而在我们的情况里,它是因为在同一时刻改变大量玩家的模型而产生的,并导致几乎每个玩家无明显原因的发生错误。也许是因为Valve没有修正某个小BUG而导致这种情况吧。那么这种情况下我们应该怎么办呢?请继续读下去…CStrike模块里的native函数也许你改变用户模型的首选方法是这个。是的,这种方法具有简单易行的特点并且你只需要学习三个小小的native函数。但是

3、我们将看到为什么不能在你的插件里用它们改变大量的模型(例如:在丧尸服务器里)。通过阅读源代码我们知道它在玩家的InfoBuffer里设置模型名称并持续监控它,到目前为止似乎一切正常…Code:staticcellAMX_NATIVE_CALLcs_set_user_model(AMX*amx,cell*params)//cs_set_user_model(index,constmodel[]);=2params{//...g_players[params[1]].SetModel(model);g_players[params[1]].SetModelled(true);SETCLIENT

4、KEYVALUE(params[1],GETINFOKEYBUFFER(pPlayer),"model",char*)g_players[params[1]].GetModel());//...}问题来了:为了防止CS重置我们自已设置的模型,它在玩家的每一个PostThink事件中检查模型是否发生了变化,如果变化了,就立即将模型改回我们设置的模型:Code:voidPlayerPostThink(edict_t*pPlayer){intentityIndex=ENTINDEX(pPlayer);if(g_players[entityIndex].GetModelled()){if(g_pl

5、ayers[entityIndex].GetInspectModel()&&strcmp(g_players[entityIndex].GetModel(),GETCLIENTKEYVALUE(GETINFOKEYBUFFER(pPlayer),"model"))!=0){//LOG_CONSOLE(PLID,"%sshouldhavemodel%sandcurrentlyhas%s",STRING(pPlayer->v.netname),(char*)g_players[entityIndex].GetModel(),GETCLIENTKEYVALUE(GETINFOKEYBUFFER(

6、pPlayer),"model"));SETCLIENTKEYVALUE(entityIndex,GETINFOKEYBUFFER(pPlayer),"model",(char*)g_players[entityIndex].GetModel());g_players[entityIndex].SetInspectModel(false);}}RETURN_META(MRES_IGNORED);}但在一些事件比如roundstart事件发生时,CS会将每个玩家的模型设置回默认模型(gign,sas,leet,等等).所以如果一个叫Player的玩家有自定义模型时事情将会变成这样:·Play

7、er被设置成自定义模型"zombie"–服务器发送一个消息给所有玩家以通知这个事情。·新的一局–许多消息被发送:更新成绩、删除实体、玩家重生、等等。·CS将Player的模型重设为"leet"–另一个消息被发送。·Player的模型马上在PostThink事件中被设回"zombie"–再次发送消息。如你所见,在新的一局开始时产生了大量的网络流量。你甚至可以使用DamagedSoul写的MessageLogging插件亲自

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。