广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 5501 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
11922911
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖 社区建设奖
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x31 鲜花 x69
分享: 转寄此文章 Facebook Plurk Twitter 版主评分版主评分版主评分 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[插件] [测试用途] 尝试修改CStrike模块  (amxx module)
原创文章
【插件资讯】

插件来源:原创
使用指令:cs_set_user_model
安装路径:addons/amxmodx/modules/

【插件介绍】

本文针对 CStrike 模块里的一个 native 函数尝试作出一些简单修正

复制程式
static cell AMX_NATIVE_CALL cs_set_user_model(AMX *amx, cell *params) // cs_set_user_model(index, const model[]); = 2 params

cs_set_user_model 这个函数也许你已经很熟悉, 它让插件可以给玩家定义一个新的模型.
但有时候, 当你给大量玩家调用这函数时可能会产生一些问题, 最常见是当每局开始时一些玩家会从伺服器中被踢出, 此类错误通常被称为SVC_BAD错误.
在这情况下, 发生错误的原因往往是因为它在同一刻里改变大量玩家的模型所造成的. 而在模块中所用改变模型的方法亦可能也是原因之一.


以下为 CStrike 模块的一些 C++ 源码

复制程式
static cell AMX_NATIVE_CALL cs_set_user_model(AMX *amx, cell *params)
{
       // ... ...

       strcpy(model, MF_GetAmxString(amx, params[2], 0, &len));
       
       g_players[params[1]].SetModel(model);
       g_players[params[1]].SetModelled(true);

       SETCLIENTKEYVALUE(params[1], GETINFOKEYBUFFER(pPlayer), "model", (char*)g_players[params[1]].GetModel());

       return 1;
}
它通过SETCLIENTKEYVALUE去改变玩家的模型, 情况就像你在插件里使用 set_user_info( player, "model", "xxx" ) 或在游戏中使用指令 model "xxx" 一样, 但只是这样做是不足够的, 因为几乎立即就会被 CS 重置成原来的模型.

复制程式
void PlayerPostThink(edict_t* pPlayer) {
       int entityIndex = ENTINDEX(pPlayer);

       if(g_players[entityIndex].GetModelled()) {
              if (g_players[entityIndex].GetInspectModel() && strcmp(g_players[entityIndex].GetModel(), GETCLIENTKEYVALUE(GETINFOKEYBUFFER(pPlayer), "model")) != 0) {
                     SETCLIENTKEYVALUE(entityIndex, GETINFOKEYBUFFER(pPlayer), "model", (char*)g_players[entityIndex].GetModel());
                     g_players[entityIndex].SetInspectModel(false);
              }
       }
       RETURN_META(MRES_IGNORED);
}
问题就在这里, 为了防止CS重置玩家的模型, 它所使用的对策是在玩家的每个 PostThink 事件中检查模型是否被改变, 如果被 CS 改变了就立即设回新的模型. 但不是上策, 更可能会令到问题恶化.



就此我对源码作了一些修改, 并移除了使用 PostThink, 改用一些更可行的做法, 详细不多解释.

这个版本(也许)能减少此类问题的发生, 但我不能保证(毕竟我找不到32个玩家来测试)

目前只编译 Windows 的版本
建议预先备份原始的 cstrike_amxx.dll 否则后果自负

[此文章售价 1 雅币已有 31 人购买]
若发现会员采用欺骗的方法获取财富,请立刻举报,我们会对会员处以2-N倍的罚金,严重者封掉ID!

威望要 1 以上才可以下载附件,您目前威望不足,请勿购买


[ 此文章被11922911在2013-04-28 17:40重新编辑 ]

此文章被评分,最近评分记录
财富:100 (by z2352671) | 理由: 发文奖励:DD 好东西
财富:500 (by amore12) | 理由: 赞..^^



YouTube: @holla16
献花 x4 回到顶端 [楼 主] From:未知地址 | Posted:2013-04-27 23:20 |
e1242656 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x6 鲜花 x120
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

这跟ZP武器在下回合会变回原形有关吗?



RC:18589523 欢迎加入^^
献花 x0 回到顶端 [1 楼] From:台湾中华电信股份有限公司 | Posted:2013-04-28 07:51 |
a7811311622 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖 优秀管理员勋章 社区建设奖
头衔:我…在工作了…我…在工作了…
版主
级别: 版主 该用户目前不上站
版区: CS提问区
推文 x771 鲜花 x2152
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用 e1242656 于 2013-04-28 07:51 发表的 : 到引言文
这跟ZP武器在下回合会变回原形有关吗?
ZP武器不是人物吧…
我用的ZP武器下回合也不会有什么变回原形的问题…
表情


尚无签名,欢迎 [新增个性化签名]
献花 x0 回到顶端 [2 楼] From:台湾中华电信股份有限公司 | Posted:2013-04-28 18:57 |
弑血
个人头像
个人文章 个人相簿 个人日记 个人地图
社区建设奖 特殊贡献奖 创作大师奖
小有名气
级别: 小有名气 该用户目前不上站
推文 x108 鲜花 x239
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

他这个应该是用模块说明比插件还要少BUG
有的时候 人物太多 同时间 转换模组时 会出现 重叠
也可能导致整的死当或跳离
这个应该是弥补所说的缺点 表情 表情



目前传授教学&有兴趣者可以问我
BOT瞄准攻击NPC&模仿事件触发计算出场&新增地图重生位置等等
已修复entity的attachment错误问题,开始尝试写出各种npc_boss成品
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
按这里检视影片,登入论坛可以直接观看
献花 x0 回到顶端 [3 楼] From:台湾中华电信股份有限公司 | Posted:2013-04-30 08:38 |
aa123zzzz
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

感激楼主 我会仔细看看这些指令


献花 x0 回到顶端 [4 楼] From:未知地址 | Posted:2013-04-30 11:07 |
xuqiang52133
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x1 鲜花 x32
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

这个插件的模块你要是能改成支持CS1.5的就牛了。


我要暴你头。。。。。
献花 x0 回到顶端 [5 楼] From:辽宁 | Posted:2013-05-31 13:12 |
Marchillus 手机 会员卡
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x35 鲜花 x94
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

难怪我的伺服器有12人的时候就开始会刷新回合就跳离...


2021年,我回来过。
可以关注我的Pixiv喔~主要画日系ACG插画~
https://www.pixiv.net/member.php?id=12398761
献花 x0 回到顶端 [6 楼] From:IANA | Posted:2013-06-12 17:12 |
z2352671213
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖 社区建设奖
小人物
级别: 小人物 该用户目前不上站
推文 x10 鲜花 x47
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
Re:amxx module,|[测试用途] 尝试修改CStrike模块
很棒啊,不过我觉得要防止SVC_BAD的话只要避免所有模型都在近乎同一时间里改变就行了,也就是,大幅度地延长不同玩家之间的模型改变的间隔时间。


献花 x0 回到顶端 [7 楼] From:未知地址 | Posted:2017-01-22 16:19 |
陈冠冠
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x5
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

这个我略过 我很少乱用CStrike
放插件.模组.地图.为啥要改? 表情 表情


献花 x0 回到顶端 [8 楼] From:台湾固网股份有限公司 | Posted:2024-01-10 15:47 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.024930 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言