廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 6149 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
11922911
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎 社區建設獎
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x44 鮮花 x96
分享: 轉寄此文章 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 鮮花 x240
分享: 轉寄此文章 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 鮮花 x10
分享: 轉寄此文章 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.084839 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言