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

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

只狼AI初探

2020-10-24 00:04 作者:瑣帝BNU  | 我要投稿

由于AI文件太復雜了,這次先從一個簡單的入手,那就是彌山院的對空突刺和重揮

眾所周知,彌山院的對空突刺僅在其出下段時,檢測到只狼向后跳才變招,那么這是經(jīng)驗的部分,在程序中如何實現(xiàn)呢?以及實戰(zhàn)中如何穩(wěn)定觸發(fā)呢?


以及重揮動作,可能很多人都沒見過,甚至以為是廢案

首先,定位數(shù)據(jù):

圓真所在地圖:m10_00_00_00(即平田宅?。?/p>

圓真的單位編號:10500001

圓真的AI文件:105000

對空突刺動作編號:3003

下段危動作編號:3017

定位AI文件

這兩個文件中,后綴battle的為戰(zhàn)斗時的AI邏輯,解包并打開,然后直接搜3003,定位到下面一段代碼,也就是關于“干擾(Interrupt)”的各種反應機制,建議直接跳過這段代碼看后文。

Goal.Interrupt = function (arg0, arg1, arg2)
??? local local0 = arg1:GetDist(TARGET_ENE_0)
??? local local1 = arg1:GetSpecialEffectActivateInterruptType(0)
??? local local2 = arg1:GetRandam_Int(1, 100)
??? if arg1:IsLadderAct(TARGET_SELF) then
??????? return false
??? elseif not arg1:HasSpecialEffectId(TARGET_SELF, 200004) then
??????? return false
??? elseif arg1:IsInterupt(INTERUPT_ParryTiming) and not arg1:HasSpecialEffectId(TARGET_SELF, 5028) then
??????? return Common_Parry(arg1, arg2, 50, 0)
??? elseif arg1:IsInterupt(INTERUPT_Damaged) then
??????? return arg0.Damaged(arg1, arg2)
??? elseif Interupt_PC_Break(arg1) then
??????? arg1:Replanning()
??????? return true
??? elseif arg1:IsInterupt(INTERUPT_ActivateSpecialEffect) then
??????? local local3 = 5211 (此為一個后撤動作)
??????? if local1 == 110111 or local1 == 110115 or local1 == 110116 then
??????????? if arg1:HasSpecialEffectId(TARGET_SELF, 5029) and local0 <= 6 then
??????????????? if arg1:IsInsideTarget(TARGET_ENE_0, AI_DIR_TYPE_F, 90) and arg1:HasSpecialEffectId(TARGET_SELF, 5020) then
?????????????????? ?arg2:ClearSubGoal()
??????????????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 0.5, 3003, TARGET_ENE_0, 9999, 0)
??????????????????? return true
??????????????? end
??????????? elseif local0 <= 2 then
??????????????? arg2:ClearSubGoal()
?????????????? ?arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 0.1, local3, TARGET_ENE_0, 9999, 0)
??????????????? return true
??????????? elseif local0 <= 5 then
??????????????? if arg1:IsInsideTarget(TARGET_ENE_0, AI_DIR_TYPE_F, 90) then
??????????????????? if arg1:HasSpecialEffectId(TARGET_SELF, 5020) then
??????????????????????? arg2:ClearSubGoal()
??????????????????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 0.1, 3003, TARGET_ENE_0, 9999, 0)
??????????????????????? return true
??????????????????? end
??????????????? else
??????????????????? arg2:ClearSubGoal()
??????????????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 0.1, local3, TARGET_ENE_0, 9999, 0)
??????????????? end
??????????????? return true
??????????? end
??????? elseif local1 == 110112 or local1 == 110117 or local1 == 110118 then
??????????? if local0 <= 3 then
??????????????? if arg1:HasSpecialEffectId(TARGET_SELF, 5020) then
??????????????????? arg2:ClearSubGoal()
??????????????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 0.1, 3003, TARGET_ENE_0, 9999, 0)
??????????????????? return true
??????????????? else
??????????????????? return true
??????????????? end
??????????? elseif local0 <= 8 then
??????????????? arg2:ClearSubGoal()
??????????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 2, 5210, TARGET_ENE_0, 9999, 0)??(5210是一個往前墊步的動作)
??????????????? arg1:SetTimer(5, 2)
??????????? end
??????? elseif local1 == 110113 then
??????????? if local0 <= 3 then
??????????????? if arg1:HasSpecialEffectId(TARGET_SELF, 5020) then
??????????????????? arg2:ClearSubGoal()
?????????? ?????????arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 0.1, 3003, TARGET_ENE_0, 9999, 0)
??????????????????? return true
??????????????? end
??????????? elseif local0 <= 10 and arg1:IsInsideTarget(TARGET_ENE_0, AI_DIR_TYPE_F, 90) then
??????????????? arg2:ClearSubGoal()
??????????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 0.1, 5213, TARGET_ENE_0, 9999, 0)? ?(5213是彌山院向自己的右側墊步)
??????????????? return true
??????????? end
??????? elseif local1 == 110114 then
??????????? if local0 <= 3 then
??????????????? if arg1:HasSpecialEffectId(TARGET_SELF, 5020) then
??????????????????? arg2:ClearSubGoal()
??????????????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 0.1, 3003, TARGET_ENE_0, 9999, 0)
??????????????????? return true
??????????????? end
??????????? elseif local0 <= 10 and arg1:IsInsideTarget(TARGET_ENE_0, AI_DIR_TYPE_F, 90) then
??????????????? arg2:ClearSubGoal()
??????????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 0.1, 5212, TARGET_ENE_0, 9999, 0)? ?(5212是彌山院向自己的左側墊步 ??????????????

? return true
??????????? end
??????? end
??????? if local1 == 107710 then
??????????? arg2:ClearSubGoal()
??????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 2, 3024, TARGET_ENE_0, 9999, 0)? ?(3024是向背后突刺)
??????????? return true
??????? elseif local1 == 5026 then
??????????? if arg1:GetSpRate(TARGET_SELF) <= 0.3 then
????????? ??????arg2:ClearSubGoal()
??????????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 2, 3090, TARGET_ENE_0, 9999, 0)? ??(3090是很使勁的揮槍)
??????????????? return true
??????????? end
??????? elseif local1 == 5027 then
??????????? arg2:ClearSubGoal()
??????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 2, 3021, TARGET_ENE_0, 9999, 0)? ? ?(3021是投技)
??????????? return true
??????? end
??? end
??? if arg1:IsInterupt(INTERUPT_ShootImpact) and arg0.ShootReaction(arg1, arg2) then
??????? return true
??? elseif arg1:IsInterupt(INTERUPT_Inside_ObserveArea) then
??????? if arg1:IsInsideObserve(0) == true and arg1:IsFinishTimer(0) == true then
??????????? arg2:ClearSubGoal()
??????????? arg2:AddSubGoal(GOAL_COMMON_EndureAttack, 0.3, 3012, TARGET_ENE_0, 9999, 0)? ? ?(3012和3024很像)
??????????? arg1:SetTimer(0, 5)
?????????? ?arg1:DeleteObserve(0)
??????????? return true
??????? elseif arg1:IsInsideObserve(1) == true then
??????????? arg1:Replanning()
??????????? arg1:DeleteObserve(1)
??????????? return true
??????? end
??? end
??? return false
end

如果你已經(jīng)跳到這里了,那么很好,我們要開始分析了

3003也就是對空突刺,一共出現(xiàn)了5次,第一次出現(xiàn)時AI做了這樣一個判斷:

AI機制

相信有中學數(shù)學基礎的朋友一定是看得懂這個框圖的,雖然我不知道5029和5020特效是啥,不過猜測5020應該是非精英怪(因為精英怪不會出這個,合情推理一下吧),5029可能和硬直有關。再說一下距離,距離6大概略長于狼的身高,也就是6英尺(既然長度單位是英尺,那還是可以估算狼的身高的,不過不是本文的重點)

這是在第一種干擾類型下的AI機制,雖然不是很清楚具體是什么,不過大概可以看出AI的思維要判斷方位、距離、滯空三個要素。

第二類干擾下我就簡單說說,如果距離<=3且玩家滯空,那么就會對空突刺,反正如果距離在3到8之間,則圓真會選擇接近玩家

此外還有兩類相似的干擾,都是滿足玩家的距離在3以內(nèi)且滯空,則對空突刺,反正距離在3到10則會選則往左/右側向墊步

除了對空突刺外還有很多干擾類型,暫不討論

注意:既然是對干擾的應對機制,那么硬直狀態(tài)下肯定不會有反應,比如動作后搖和被識破被炎上等情況下的硬直。在視頻:

中,兩種方法都是在等彌山院的后搖和硬直結束再起跳,具體分析如下:

對于視頻中方法一,后撤步有兩個功能:等時間和拉開距離

在前面的分析中,對空突刺的觸發(fā)條件要求非精英,并且距離在2到6之間,所以如果不后撤的話,干等一段時間再起跳會觸發(fā)后撤機制,干等然后后跳則又可能打不到;如果不后撤并直接起跳,則彌山院處于后搖之中,無法實現(xiàn)對空應對機制。

對于視頻中的方法二,也是類似的原理,不過距離和時機需要玩家自己把握(一次不成多試幾次),好處在于完全不用拼刀hhh


除了對空突刺,上面還提到了3090動作,這個可能很少有玩家注意,它的條件是?local1==5026和if arg1:GetSpRate(TARGET_SELF) <= 0.3 ,也就是在玩家識破圓真后,如果他沒有崩軀干,且軀干積累70%以上,則會在玩家識破后發(fā)動3090重揮(當然,玩家不能去進攻,不然會讓他受傷觸發(fā)其他變招,所以這一招很少見)

3090動作演示

關于AI的機制我也只是剛剛開始研究,先給大家拿一點出來玩玩吧~


只狼AI初探的評論 (共 條)

分享到微博請遵守國家法律
广东省| 竹溪县| 台中市| 辉南县| 德兴市| 兴隆县| 广汉市| 五台县| 沂水县| 健康| 平定县| 策勒县| 汉川市| 晋城| 澄江县| 宁武县| 海林市| 松江区| 察隅县| 浦城县| 石狮市| 云和县| 南华县| 镇宁| 淄博市| 夏河县| 扶沟县| 绍兴县| 华坪县| 虹口区| 阳西县| 丰宁| 资中县| 望谟县| 湟中县| 凌海市| 拉孜县| 大庆市| 江川县| 泽普县| 呼玛县|