《無主之地2》機(jī)械術(shù)士DeathTrapAI改善修正補(bǔ)丁;為機(jī)械蘿莉的Deathtrap制作的AI修正補(bǔ)丁,現(xiàn)在DT的行動(dòng)將會(huì)更加的智能化,不像之前那么蠢了,感謝“l(fā)ightrift2”制作,需要的玩家不要錯(cuò)過哦!
資源詳情
這個(gè)補(bǔ)丁都做了什么?
首先 體現(xiàn)最明顯的:
1. dt現(xiàn)在不會(huì)對(duì)著某些敵人(尤其是boss 比如威爾海姆或者武士)傻傻一直放電了,而是會(huì)使用能用的各種攻擊,優(yōu)先級(jí)為狂暴 激光 擊掌 電球 普通近戰(zhàn) 放電。其中,dt不會(huì)對(duì)空中的敵人使用狂暴 擊掌 電球和普通近戰(zhàn),因?yàn)樘恕?
2. 把放電這樣一個(gè)距離遠(yuǎn) 能對(duì)地的技能優(yōu)先級(jí)置后,直接觸發(fā)了dt的一個(gè)bug(我不清楚原來有沒有,如果沒有 是因?yàn)楸粌?yōu)先級(jí)更高的射電覆蓋了)。就是近戰(zhàn)(包括狂暴和普通近戰(zhàn))有時(shí)候會(huì)卡住dt。具體觸發(fā)是:dt追著敵人想要近戰(zhàn),而敵人正在移動(dòng) 然后敵人突然停止并不再位移,正在追趕的dt就會(huì)一臉撞上 然后卡住。直到雙方有一個(gè)先移動(dòng)位置,否則就會(huì)一直卡著。這個(gè)bug我嘗試了各種辦法修復(fù),但是全部然并卵。觸發(fā)的幾率不是非常高 但是著實(shí)讓人討厭。這個(gè)修復(fù)占用了大概十幾個(gè)小時(shí)的時(shí)間(當(dāng)然現(xiàn)在已經(jīng)弄好了)。
3. 想要進(jìn)行近戰(zhàn)時(shí)(包括狂暴和普通近戰(zhàn)),dt會(huì)優(yōu)先繞到蘿莉和敵人成的直線上,蘿莉的另一側(cè)。這么做原因有二 一是某種程度上防卡,二是有些敵人的判定很奇葩,比如威爾海姆 dt飛到他的腰后面近戰(zhàn)攻擊 是打不到的。這時(shí)玩家就可以通過自身的位移 來一定程度上控制dt的位置。
然后是一些細(xì)枝末節(jié),玩得細(xì)的dalao們可能需要這些信息:
1. 不再傻傻對(duì)著某些敵人一直放電的原理是:dt的ai其實(shí)是在一直重復(fù)檢查一個(gè)按優(yōu)先度排序的隊(duì)列,隊(duì)列中的項(xiàng)是dt的不同行動(dòng)。排得越靠前,這個(gè)動(dòng)作的優(yōu)先級(jí)越高。一旦它可以被執(zhí)行(cd好了且執(zhí)行條件滿足),就會(huì)被優(yōu)先執(zhí)行。原版中,這個(gè)隊(duì)列為:被召喚/時(shí)間到了消失/射電攻擊/回盾/隨機(jī)隊(duì)列1/隨機(jī)隊(duì)列2/閑置/巡邏。其中,隨機(jī)隊(duì)列1包括四種特殊攻擊:狂暴 激光 擊掌和電球。隨機(jī)隊(duì)列2包括6種動(dòng)畫不同實(shí)質(zhì)相同的普通近戰(zhàn)攻擊。問題就出在射電攻擊上。一來 它排得實(shí)在是太靠前了,它c(diǎn)d一好,條件一滿足就會(huì)被執(zhí)行。二來,它的發(fā)動(dòng)條件有問題,原版的條件是“目標(biāo)是飛行的 或 目標(biāo)不可以被相位鎖定”。我反正是沒看懂這個(gè)條件要表達(dá)什么...單是“或目標(biāo)不可被相位鎖定”,就足以讓dt對(duì)著大部分boss一直放電了。在這個(gè)補(bǔ)丁中,射電攻擊被調(diào)整到了相當(dāng)?shù)偷膬?yōu)先級(jí),它的條件也被改為了“目標(biāo)不是友好的”。
2. 原本四種特殊攻擊是包含在隨機(jī)隊(duì)列1里的,而隨機(jī)隊(duì)列1的發(fā)動(dòng)條件是“目標(biāo)不是友好的”。也就是說 最外層的優(yōu)先排序隊(duì)列從前到后,一遍一遍重復(fù)檢查各個(gè)項(xiàng)目的發(fā)動(dòng)條件是否滿足,檢查到隨機(jī)隊(duì)列1,發(fā)現(xiàn)dt現(xiàn)在的目標(biāo)確實(shí)是個(gè)敵人,就會(huì)進(jìn)入這個(gè)隨機(jī)隊(duì)列1,按權(quán)重(原版4個(gè)特殊攻擊的權(quán)重相同)選擇一個(gè)項(xiàng)目執(zhí)行。這導(dǎo)致了dt在一部分情況下卡住。比如根據(jù)目標(biāo)不是友好的這個(gè)條件進(jìn)入了隨機(jī)隊(duì)列1,然后這四個(gè)攻擊全正在冷卻 或者條件都不滿足,dt就會(huì)卡住一段時(shí)間。在這個(gè)補(bǔ)丁中,直接把這四項(xiàng)從隨機(jī)隊(duì)列1提出來 放到了最外層的優(yōu)先度隊(duì)列里。順序是狂暴 激光 擊掌和電球。這時(shí),這個(gè)隊(duì)列從前到后檢查項(xiàng)目時(shí),就會(huì)一并檢查這技能到底在不在cd,能不能用了。這樣修改給這四種攻擊加了優(yōu)先級(jí),這跟原版不一樣了。比如狂暴和激光都能用,dt會(huì)先想要執(zhí)行狂暴。但是這實(shí)在是沒辦法......
3. 如果看下附帶的excel文件 或者自己進(jìn)游戲dump一下dt的ai設(shè)定,就會(huì)看到dtai的構(gòu)成。其實(shí)是最外層一個(gè)優(yōu)先隊(duì)列,套著一些小的優(yōu)先隊(duì)列/順序執(zhí)行隊(duì)列和隨機(jī)執(zhí)行隊(duì)列。其中所有順序執(zhí)行隊(duì)列(包括電球和狂暴)都會(huì)在某種程度上對(duì)dt的流暢攻擊有卡的效果。具體原因我也解釋不了,但是實(shí)驗(yàn)就是這樣的。所以把電球從一個(gè)“電球-停頓”的小順序隊(duì)列中拿了出來,直接放到了外層優(yōu)先隊(duì)列里。這樣做跟原版也是有區(qū)別的,失去了放電球之后的那個(gè)(說實(shí)話還挺長(zhǎng)的)停頓??癖┮?yàn)樯婕斑^程太多,拿不出來。
4. 在射電攻擊后調(diào)后,dt最嚴(yán)重的卡頓出現(xiàn)了。觸發(fā)條件就是上面第二條說的,在面對(duì)一些喜歡“突然移動(dòng) 然后停著好久不動(dòng)”的敵人時(shí)很容易觸發(fā)。在嘗試了4天之后,終于找到了一個(gè)解決方案 就是給所有攻擊都添加一個(gè)失敗時(shí)間,就是如果dt要做這個(gè)動(dòng)作,而因?yàn)槭裁丛?失敗時(shí)間過了還沒做成功,就算作這次攻擊失敗,dt順著優(yōu)先隊(duì)列找其他能用的。起手快的技能設(shè)定的失敗時(shí)間短,起手慢的技能設(shè)定的失敗時(shí)間長(zhǎng)?,F(xiàn)在dt是這么應(yīng)對(duì)卡頓的:敵人突然快速移動(dòng),dt因?yàn)檎诜偶す饣蛘哳愃频脑?,沒跟上。然后dt追著敵人想要近戰(zhàn),敵人停下了。dt追上敵人并一臉撞上(然后本應(yīng)該卡住的)并近戰(zhàn)不出來。然后dt開始計(jì)時(shí),失敗時(shí)間到了還沒近戰(zhàn)出來,這次攻擊算作失敗,dt順著優(yōu)先隊(duì)列找其他能用的技能。如果是狂暴卡住了,下一個(gè)能用的一般是激光或者拍掌,這倆默認(rèn)攻擊距離都比狂暴遠(yuǎn),dt就會(huì)后撤。一后撤,狂暴(優(yōu)先度更高)就能用了。如果是普通近戰(zhàn)卡住了,下一個(gè)能用的是放電。放電攻擊幾乎沒有什么限制,優(yōu)先低,距離也遠(yuǎn),電幾下 甚至還沒電,其他優(yōu)先級(jí)更高的技能就好了。這時(shí)距離又因?yàn)榉烹姳焕_,一般就能順利執(zhí)行了。失敗時(shí)間設(shè)置得都很短,比如普通近戰(zhàn)是0.3秒,特殊攻擊是1到2秒。這些數(shù)字是經(jīng)驗(yàn)值,很可能有改進(jìn)的空間。而且這樣會(huì)多多少少降低dt的攻擊頻率,不過就觀察來看 基本就是理論上會(huì)降低,實(shí)際看不出延遲。
5. 現(xiàn)在的dt依舊會(huì)面臨兩個(gè)很大的問題,而這兩個(gè)問題都是我自認(rèn)解決不了的...一是碉堡和血翼。這兩個(gè)敵人雖然是飛行敵人,但是由于停滯時(shí)間長(zhǎng),理論上是可以使用狂暴等近戰(zhàn)攻擊的。不過如果為了這個(gè) 允許狂暴攻擊空中敵人,dt又會(huì)在其他地方滿地圖飛著想懟小飛機(jī)。兩害相較取其輕,所以dt現(xiàn)在不會(huì)使用狂暴 電球 拍掌和普通近戰(zhàn)攻擊空中敵人。二是判定奇葩的敵人,尤其是體型巨大的,比如鯊蟲/武士。dt面對(duì)這些敵人很可能出現(xiàn)近戰(zhàn)攻擊打不出傷害的情況,這是因?yàn)楣舻奈恢么_實(shí)不是hitbox的判定范圍...這個(gè)真是沒辦法,碰撞箱之類的東西肯定都是寫死在游戲里的。盡力通過調(diào)整自身位置,調(diào)整dt攻擊方位吧。
6. 所有攻擊的范圍/傷害/攻擊方式 都沒有修改。連dt小得可憐的索敵范圍也沒改(站在平臺(tái)下 檢測(cè)不到碉堡233)。準(zhǔn)確地說,dt索敵范圍是4096,但是射電攻擊最遠(yuǎn)能打到9999。射電攻擊的優(yōu)先級(jí)一后移,現(xiàn)在可能給人一種“dt掃描距離變近了”的感覺,有時(shí)候需要蘿莉引導(dǎo)一下 dt才會(huì)開始打人。但是本著依照原版的原則,所有攻擊的范圍都沒改,所以也只能這樣。好在并沒有近到貼臉才能識(shí)別,使用起來也沒有明顯的不適。大概距離是:站在三角地帶分隔 傳送點(diǎn)正對(duì)著的馬路中間,能檢測(cè)到并主動(dòng)攻擊對(duì)面的猿獸。
使用說明
1. 如果你現(xiàn)在的游戲是原版,啥mod也沒裝,這是最簡(jiǎn)單的。請(qǐng)使用包里的DTAIFix.txt,并按裝mod的一般方法安裝,改為要替換的文件名即可。
安裝方法
2. 如果你現(xiàn)在的游戲裝了社區(qū)補(bǔ)丁,也請(qǐng)下載網(wǎng)盤鏈接里的DTAIFix.txt。然后打開你的Filtertool,在菜單欄里選擇Profiles,選擇New Profile,隨便起個(gè)名字,作為你社區(qū)mod的備份。然后再新建一個(gè)Profile,選擇這個(gè)Profile,然后在菜單欄的DeveloperTool里選擇Add Single Mod,選擇DTAIFix.txt并在添加好后打勾。這樣第一個(gè)Profile代表原本的社區(qū)mod,第二個(gè)代表加了DTAIFix的社區(qū)mod。選擇第二個(gè),然后File菜單-SavePatch。這樣DTAIFix就被打包進(jìn)你的社區(qū)mod了。想去掉就選擇原來的Profile然后savePatch即可。
3. 如果你裝過一些mod,但不包括社區(qū)補(bǔ)丁...推薦你裝一個(gè)社區(qū)補(bǔ)丁,然后按2操作,把你以前的mod以及這個(gè)dtaifix全部添加進(jìn)社區(qū)補(bǔ)丁,然后反選(取消)所有社區(qū)補(bǔ)丁本身的內(nèi)容。如果你不愿意這么做,可以手動(dòng)合并。方法是:打開你之前的那些mod,看其中有哪些的內(nèi)容形似set Transient.SparkServiceConfiguration_6 Keys (....)以及set Transient.SparkServiceConfiguration_6 Values(....),然后把他們的Keys后面括號(hào)中的內(nèi)容,以及Values后面括號(hào)中的內(nèi)容,全部依次復(fù)制到DTAIFix.txt的這兩個(gè)括號(hào)中,添在末尾就行。這兩個(gè)括號(hào)中的內(nèi)容一般均為多項(xiàng),引號(hào)括起來為一項(xiàng),逗號(hào)分隔。注意格式即可。
另外多說一點(diǎn)。這個(gè)Transient.SparkServiceConfiguration_6是原本無主之地2的一個(gè)micropatch,原本人家是有內(nèi)容的,大概有十幾條吧。如果有內(nèi)容為set Transient.SparkServiceConfiguration_6 Keys這樣的mod,開頭與DTAIFix.txt的開頭不一樣,那就是它圖方便直接覆蓋掉了原本的micropatch的一些或者全部?jī)?nèi)容。DTAIFix.txt里已經(jīng)在開頭集成了原本官方Transient.SparkServiceConfiguration_6補(bǔ)丁中的內(nèi)容。