最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

BetterBot插件的一些說明

2023-06-02 20:16 作者:小青鯊累了  | 我要投稿

簡介

BetterBot(For CSGO)是一個開源的Sourcemod插件,用于大幅度加強CSGO的Bot瞄準能力,該插件由Manicoming在起源論壇于2019開始發(fā)布,后轉(zhuǎn)為Github更新。

授人以魚不如授人以漁!因為諸多原因我現(xiàn)在自己用的版本不一定適合大家各自的服務(wù)器,直接教學(xué)大家如何進行一些基本的修改,以及分析源代碼(主要是botstuff.sp)的內(nèi)容。

首先原始插件地址:

https://github.com/manicogaming/CSGOBetterBots

Sourmod API教程:https://sm.alliedmods.net/new-api/

可能需要科學(xué)的上網(wǎng)。

原作者說因為各種原因覺得麻煩不想宣傳,所以關(guān)于源碼的含義啥的網(wǎng)上是完全沒有教程的。

那下面我就開始解釋吧。

安裝方法就是下載所有前置插件(你得先裝好sourcemod和metamod等),全部完成后啟動進入云服務(wù)器,控制臺輸入sm plugins應(yīng)該能看到當前運行的插件。在srcd控制臺中也有相關(guān)信息,加上會生成log日志文件,在sourcemod/log中。

裝好以后我們要自己diy的最重要的文件就在

addons/sourcemod/scripting/bot_stuff.sp

當前版本已經(jīng)和botmimic的5人協(xié)同demo爆彈方式切割,改為定點爆了,孰好孰壞說不清。

解讀文件內(nèi)容(6.2官方版):


瞄準位置的數(shù)組,BOT身體部位

開局是一堆全局變量,作者的命名還是很規(guī)范的,下面是一些重要的數(shù)組。

底下幾個enum分別是bot移動的方式,看東西的狀態(tài)等,操作優(yōu)先級等,這些都很顯然,也有一些注釋。

手雷狀態(tài)

BOT丟手雷是有幾個狀態(tài)的,可以理解為“不丟”“預(yù)準備”“瞄準”“丟好了”

BOT行為狀態(tài)

可以看到bot的行為有這么多的情況,對應(yīng)的如字面意思,比如在拆包,被火燒了在跑,原地蹲蹲,跟隨等等。這些都是bot在實戰(zhàn)中遇到的具體狀態(tài),他們會自己切換狀態(tài),似乎不可以直接給他進行狀態(tài)的賦值。(可能是CSGO內(nèi)部代碼,動不了,屬于只讀的變量)

初始化函數(shù)

這里作者定義了最基本的一些事件,還有我們的team函數(shù),用過該插件就知道team g2 t;這種類似的寫法用來加入完整隊伍的機器人隊友。

HookEventEx是觸發(fā)事件相關(guān)的,不需要改。

TEAM指令具體實現(xiàn)

Team指令讀取一個iArg的字符串,并通過簡單的if循環(huán)枚舉判斷是否有這個隊伍存在,存在的話就根據(jù)第二個參數(shù)加入對應(yīng)名稱的bot。例如我輸入team heroic t,首先第一個參數(shù)“heroic”會一個一個對比下去,找到確實存在X隊以后,根據(jù)我的“t”參數(shù)把cadian、teses等五個bot加入t邊。這里ServerCommand就是游戲控制臺內(nèi)部形式,跟你自己按~然后輸入是一個效果的。

由于隊伍數(shù)量諸多,這個函數(shù)一直到3250行才結(jié)束。

換地圖后的初始化函數(shù)

這里沒啥,也不用改,就是讀取現(xiàn)在的地圖,準備一下他的單個爆彈,判斷一下是炸彈圖還是人質(zhì)圖,最后給Bot加顏色(小地圖顯示黃色藍色啥的)。

Timer_CheckPlayer看著好長一串,但是思路很簡單,下面我慢慢解釋。

首先上來是一個針對client參數(shù)的for循環(huán)(這里用的是變量i),為啥要這么做呢,因為不管是bot還是人甚至gotv,在服務(wù)器的諸位都會被分配一個編號,這個值就是client的固定參數(shù),在一把比賽中一般是固定的。因為Bot需要服務(wù)器發(fā)指令去操作,所以肯定是一個一個client編號循環(huán)過來的,但是我們不能影響正常玩家,也不需要操作GOTV,更不用考慮死亡的bot,所以這里會有一些限定條件。

由于這里是在寫B(tài)OT開局買槍的邏輯,跟人類沒關(guān)系的,所以條件是有效且Fake(就是虛擬人bot,不是人類)且活著的。是不是很容易想到呢。

下面作者開始定義一些變量,比如iAccout是賬戶的錢,邏輯變量bInBuyZone判斷是不是在購買區(qū)域,iTeam是這個client對應(yīng)的Bot的隊伍……bHasDefuser就是有沒有鉗子。

用來讀取i編號bot的主武器
效果是讓bot會檢視武器。

IsItMyChance是個作者自己寫的概率參數(shù)。

函數(shù)定義

稍微看一下就知道了,隨機生成一個浮點數(shù)然后賦值給flRand,如果函數(shù)參數(shù)小于0.0直接給false。后面正常判定就是你給的參數(shù)fChance是不是大于等于隨機得到的flRand,顯然可以知道我們正常使用的fChance可以是0.0-100.0,給的越大,事情發(fā)生的概率就越大,給100.0那就是必然發(fā)生事件了。因為檢視沒必要一直按著,他給了1.0。

這個函數(shù)下面就沒啥復(fù)雜的,就是怎么買槍,怎么買道具。

有人私信我說BOT好煩啊道具亂買亂扔,那你可以把這里的幾行給他刪了。

BOT買道具

FakeClientCommand是給bot用的指令(因為bot不會真的去控制臺輸入buy ak47)。

這個switch直接刪掉,就不會買那么多道具了。

CT方回防

也很簡單,開局還是一樣的for循環(huán),畢竟要操作bot行動。

然后判斷是bot了,因為是回防的邏輯,先判斷是不是存在plantedc4(埋下去的包),以及是不是CT的bot。

然后直接變量設(shè)置為c4位置,讓bot過去。作者是讓他們切刀一路跑的(看到人會切主武器),但我覺得這純呆呆鳥,你要是覺得沒意思就把GetPlayerWeaponSlot里面的knife改成primary,會拿著主武器回防(手槍局除外)。

或者用BotEquipBestWeapon也可以。但是這樣40s回防一般都不夠時間的,可以寬容點控制臺給個mp c4_timer 50。多給10s機會。

撿槍函數(shù)


這函數(shù)主要是在讓bot去撿地上更好的槍,還有就是敵人全死了就切刀之類的小事。

發(fā)槍函數(shù)

這函數(shù)是讓bot開局發(fā)槍,不需要改。

參數(shù)控制

這個函數(shù)比較玄學(xué),他讀取了botprofile的一些參數(shù)在這里重新賦值了,你如果覺得不喜歡他自作主張導(dǎo)致bot變菜,把底下涉及隨機的那部分改成自己botprofile同樣的參數(shù)就好。

作者為了讓森載尼更厲害還給他們的參數(shù)單獨賦值了,你覺得不喜歡就把這些刪了,改自己的。這里其實每個client(就是每個bot)的參數(shù)都可以不一樣的,想diy的話按照他的格式就可以了。

然后最底下設(shè)置bot的隊伍,這樣你TAB才看到 FAZE broky這種格式,也會讀取他們的準星然后賦值進去,這些數(shù)據(jù)庫我之前的視頻解釋了,不再贅述。

底下的g_bUseUSP啥的是開局用usp還是p2000,a4還是a1這些的概率,不改也行,改也可以。

關(guān)于ECO經(jīng)濟啥的,我沒改過
回合正式開始前的準備函數(shù)

大家應(yīng)該都有經(jīng)驗了,看到for循環(huán)加上這個三連擊的且就是要對bot參數(shù)操作了,事實上也確實是這樣的,這里就是在回合開始前先把一些全局變量給到初始值,比如對于i號bot,開局正常情況肯定是不丟槍,不扔雷啥的。在過去的版本還有要不要執(zhí)行demo方式五人爆彈什么的,現(xiàn)在被刪掉了。

底下在設(shè)置i號bot的這個moraleoffset,我也不是很清楚是啥,士氣?挺抽象的。

一回合結(jié)束的收尾函數(shù)

這是回合結(jié)束的函數(shù),第一個while計算一回合打完,全局變量g_iTScore就是T得到的分,CT也一樣。

for循環(huán)是讓還在mimic丟道具的bot別扔了,回合都結(jié)束了,也是很合理。

第二個for循環(huán)把丟道具的時間戳清零一下,下回合正常用。

回合開局freeze時間函數(shù)

freezetime就是開局你站在那買槍的那段時間,因為動不了所以叫freezetime,這里就只是讀取一下游戲時間,宣布回合開始。

沒必要改。

主武器購買

這一坨還是買武器,不過是主武器,所以沒什么好看的。

“能看到掉包了嗎?”函數(shù)
DHook的函數(shù)

這個函數(shù)我不是特別明白,因為我不會dhook的具體操作,但是大概知道混煙,混噪音背后敵人,還有丟道具啥的跟這個有些關(guān)系。

尋找新目標函數(shù)

Bot在每個時刻都會存在一個任務(wù),比如說現(xiàn)在他的任務(wù)就是把我的角色打死,那么打死以后他不能繼續(xù)維持這個狀態(tài),不然就是宕機了。所以就得給他發(fā)一個Ignored的值,如果我還沒打死就繼續(xù)把我設(shè)置為目標。

g_fTargetPos可以理解為目標的三維坐標,他有兩個參數(shù),第一個是client編號,第二個是位置。

這里是定義bot移動的方式,&=~是跑,|=是走。如果你覺得,誒,那我t可以莽一點吧,可以多跑,也是ok的,你可以加到if條件里面,比如GetClientTeam(client)==CS_TEAM_T&&!g_bBombPlanted啥的,自己看著辦吧。

Bot爆單個道具

說白了。這個思路很簡單,BotMove讓bot走到要爆的地方了,然后看看距離<25.0很近了,就直接開始瞄準,后面就從文件讀取這個道具爆的方式了(就是個小規(guī)模的demo重放,比起自己動不容易丟歪)

第一個if,如果很安全或者都死光了可以跑。

第二個if,從實體Entity屬性中檢索浮點值。(不重要)

下面開始重頭戲了,大伙都喜歡的。

關(guān)于瞄準和爆頭率藝術(shù):


先找到這里。

這個函數(shù)決定爆頭率,頭就是spine_3。

爆頭率控制

在能看見頭的情況下,這里的IsItMyChance就在控制每一次瞄準要不要打頭,iDefIndex是武器的編號,具體之前有個表但我找不到了。

如果想要自定義爆頭率,改變if內(nèi)的條件,加入自定義函數(shù)控制全局變量。比如我的寫法是加一個g_fHeadShotT對于T爆頭率,每個回合開始前隨機在0.0-100.0產(chǎn)生,然后賦值。這樣一局下來就比較合理?;蛘吣阕约涸O(shè)置幾個檔位,按照TEAM的那種寫法對全局變量操作就行,很簡單。

其他就沒了,投擲物投擲方面還沒研究,因為我用的還是舊版全局mimic,我覺得那個真比現(xiàn)在是這個強度大吧。

其他問題歡迎評論區(qū)留言

BetterBot插件的一些說明的評論 (共 條)

分享到微博請遵守國家法律
威海市| 英德市| 荔波县| 大理市| 南汇区| 施秉县| 东乌| 崇明县| 盐源县| 九龙城区| 桦川县| 福州市| 莱州市| 鹤壁市| 开鲁县| 屏边| 乳源| 太保市| 宁夏| 灵丘县| 化德县| 太原市| 山阴县| 太仆寺旗| 高青县| 兰西县| 建昌县| 抚宁县| 海晏县| 都匀市| 巴青县| 崇阳县| 台北市| 越西县| 胶州市| 翁牛特旗| 文化| 仪陇县| 金山区| 衡水市| 儋州市|