星球基地 AI代碼解析 全角色執行任務優先級彙總
首先,請允許我向大家隆重介紹下面這一段代碼,就是它葬送了無數大好局勢和無數賤民的生命!
它就是整個AI算法的核心:當你的角色狀態處於空閒時,自動進入相應的任務優先級列表的判定,簡單點來説就是一個觸發機制,並且一但這個機制被觸發,這個角色就會進入相應的任務狀態,不會被打斷,不!會!被!打!斷!
首先,我將要向大家介紹的是一個物種:保安
有人肯定要問,為什麼説是個物種?因為遊戲角色的AI類型劃分是這樣的:
搬運機器人
建築機器人
挖礦機器人
保安
人類(其它殖民者)
入侵者
遊客
所以説,這個故事告訴我們千萬不要把保安當做正常的人類來看。
以下便是保安這個物種的優先級:
所有的優先級依次是:
拿武器後消滅入侵者
生存需求
去看有優先級的監控
去看監控
去喝飲料
去放鬆(鍛鍊)
回到室內建築
在室內看風景
你木有看錯,對於所有的保安(其實包括人類),消滅入侵者比滿足生存需求的優先級更高。滿足survivalrule這是一個子項,裏面包含的是各種屬性低了就去補的觸發機制,具體結構可以參考我在樓頂介紹的那個邏輯算法。
早上看見一位小夥伴的悲慘遭遇,保安到死都在看監控沒去反擊入侵者。所以,現在你明白了麼?
沒錯,我去打入侵者的優先級是比看監控(Go Operate)要高,但問題是我已經在看監控了呀,你在我看完監控之前休想讓我進入這個空閒判定機制。
耿直的保安,卒。
接下來便是賤民們的優先級列表,製作組總算是展現了點誠意,先不説合不合理,至少是非常用心的:
首先説明,製作組把所有職業的任務混在了一起,請自行對應相應職業。賤民的任務優先級從高到低分別是:
拿武器攻擊入侵者(這裏指的不是保安,保安不算人類!)
攻擊完入侵者後扔掉武器
去修被隕石砸的室內建築(這個我看了下代碼,沒有室外也是醉)
生存需求(吃飯 ,睡覺 ,blablabla)
去維持緊急的食物需求,造食物(生物學家專屬技能)
去搬交易需要的貨物到飛船
去建造
去休閒(注意,這裏限制了是當狀態非常不開心的時候)
去拿零件之後維修
去拿醫療包救人
去高優先級的礦場挖礦
去製作各種東西
去拿建築材料之後運送建築材料(知道為什麼要多造機器人了吧,工人如果有礦挖優先級絕不搬這些 )
去找那些製作台所需的資源然後存放到製作台
去找喝的
去休閒(當狀態有點不開心的時候)
去挖礦(無優先級,事實證明如果麼有優先級人類非常不想去挖礦)
去搬東西到倉庫
進到室內
讓路(給其它優先級高的角色)
在室內閒逛接下來就是星際海盜們的世界觀了:
排序從高到低:
攻擊殖民者(理所當然)
進入室內
在室內閒逛
沒了。
有人可能會説,怎麼這麼簡單?還有,你要去攻擊殖民者不就包含進入室內了麼,怎麼下面還有個進入室內?由於入侵者這個項比較少,我決定展開來解釋嵌套關係,來讓大家更好的理解這套AI邏輯的運行方法 。
首先讓我們進入第一個優先級的函數:去攻擊殖民者,讓我們去看一下它是怎樣被定義的:
第一個if的地方判定的是角色的身份,我就不再一一贅述statusflag12代表的內容了。然後這個函數會去尋找離強盜們最近的站着的角色。
讓我們再來到findneareststanding函數被定義的地方:
這裏就很明瞭了,該函數會枚舉所有你的殖民者們,並且如果它們當前狀態不是死亡,或者被打倒的狀態時,函數會計算一個限制距離內所有殖民者中離你最近的一個,並把結果返回上一級。
讓我們回到這裏:
現在,我們得到了findnearsetstanding函數傳回的離你最近並且可用的殖民者了,我們的下一個目標便是要接近她,這個目標則由goTarget實現。
我們來詳細看一看gotarget:
我們真正輸入的參數其實是當前處理的這個強盜和這個強盜將要選定目標的被害人,而這個函數的作用就是使強盜走向被害人,而其中就包含了goToBestAirlock(走向選定的最佳氣閘)。至於這個函數是如何定義的就不再解釋,太過複雜,也考慮到了其它正在執行的任務對流量造成的影響。
至此,強盜開始了自己入侵的過程,補充下前面setradius參數指的是當強盜離目標8個單位時,強盜會開始開火。
而我們看到,如果在findneareststanding(查找最近的目標)函數階段,所有的目標都在範圍之外,那麼這個函數將會返回一個空值,下面一階段的if條件不會被 滿足,然後整個大函數會返回一個false的值,這也就代表了在任務優先級列表中,第一個優先級的任務(攻擊殖民者)的條件不滿足,開始按順序進行優先級列表中的下一個任務。
所以説了那麼多,我想表達的就是,其實在攻擊殖民者這個任務裏包括了許許多多邏輯AI,其中就包括進入氣閘這一項。至於第二個優先級任務安排進入室內的原因是,如果強盜周邊在規定範圍內沒有符合要求的目標,那麼強盜就會進入室內。
在此之後,強盜滿足了處於室內的狀態,優先級順位中第二位的進入室內的條件返回也會變成false,這時候,強盜會執行第三順位的任務:在室內隨機遊蕩,直到在下一次判定的時候第一順位任務的條件被觸發,那麼強盜就會去攻擊那個被選中的倒黴蛋了。
點擊進入本站《星球基地》遊戲論壇專區