diff --git a/mods/ra/maps/allies-04/allies04-AI.lua b/mods/ra/maps/allies-04/allies04-AI.lua index 52a437f40c..5cda4e6603 100644 --- a/mods/ra/maps/allies-04/allies04-AI.lua +++ b/mods/ra/maps/allies-04/allies04-AI.lua @@ -245,6 +245,10 @@ ProduceAircraft = function() end TargetAndAttack = function(yak, target) + if yak.IsDead then + return + end + if not target or target.IsDead or (not target.IsInWorld) then local enemies = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == player and self.HasProperty("Health") and yak.CanTarget(self) end) @@ -260,7 +264,11 @@ TargetAndAttack = function(yak, target) end yak.CallFunc(function() - TargetAndAttack(yak, target) + -- TODO: Replace this with an idle trigger once that works for aircraft + -- Add a delay of one tick to fix an endless recursive call + Trigger.AfterDelay(1, function() + TargetAndAttack(yak, target) + end) end) end diff --git a/mods/ra/maps/allies-05a/allies05a-AI.lua b/mods/ra/maps/allies-05a/allies05a-AI.lua index cbd6e92a8c..9936b34530 100644 --- a/mods/ra/maps/allies-05a/allies05a-AI.lua +++ b/mods/ra/maps/allies-05a/allies05a-AI.lua @@ -264,6 +264,10 @@ ProduceAircraft = function() end TargetAndAttack = function(yak, target) + if yak.IsDead then + return + end + if not target or target.IsDead or (not target.IsInWorld) then local enemies = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == greece and self.HasProperty("Health") and yak.CanTarget(self) end) if #enemies > 0 then @@ -278,7 +282,11 @@ TargetAndAttack = function(yak, target) end yak.CallFunc(function() - TargetAndAttack(yak, target) + -- TODO: Replace this with an idle trigger once that works for aircraft + -- Add a delay of one tick to fix an endless recursive call + Trigger.AfterDelay(1, function() + TargetAndAttack(yak, target) + end) end) end diff --git a/mods/ra/maps/allies-06a/allies06a-AI.lua b/mods/ra/maps/allies-06a/allies06a-AI.lua index 20a92de6d1..52af5fe480 100644 --- a/mods/ra/maps/allies-06a/allies06a-AI.lua +++ b/mods/ra/maps/allies-06a/allies06a-AI.lua @@ -159,6 +159,10 @@ ProduceAircraft = function() end TargetAndAttack = function(yak, target) + if yak.IsDead then + return + end + if not target or target.IsDead or (not target.IsInWorld) then local enemies = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == player and self.HasProperty("Health") and yak.CanTarget(self) end) if #enemies > 0 then @@ -173,7 +177,11 @@ TargetAndAttack = function(yak, target) end yak.CallFunc(function() - TargetAndAttack(yak, target) + -- TODO: Replace this with an idle trigger once that works for aircraft + -- Add a delay of one tick to fix an endless recursive call + Trigger.AfterDelay(1, function() + TargetAndAttack(yak, target) + end) end) end diff --git a/mods/ra/maps/allies-06b/allies06b-AI.lua b/mods/ra/maps/allies-06b/allies06b-AI.lua index e6f582d298..32e7154851 100644 --- a/mods/ra/maps/allies-06b/allies06b-AI.lua +++ b/mods/ra/maps/allies-06b/allies06b-AI.lua @@ -171,6 +171,10 @@ ProduceAircraft = function() end TargetAndAttack = function(yak, target) + if yak.IsDead then + return + end + if not target or target.IsDead or (not target.IsInWorld) then local enemies = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == player and self.HasProperty("Health") and yak.CanTarget(self) end) if #enemies > 0 then @@ -185,7 +189,11 @@ TargetAndAttack = function(yak, target) end yak.CallFunc(function() - TargetAndAttack(yak, target) + -- TODO: Replace this with an idle trigger once that works for aircraft + -- Add a delay of one tick to fix an endless recursive call + Trigger.AfterDelay(1, function() + TargetAndAttack(yak, target) + end) end) end diff --git a/mods/ra/maps/allies-07/allies07-AI.lua b/mods/ra/maps/allies-07/allies07-AI.lua index a357dcc34c..a09e374340 100644 --- a/mods/ra/maps/allies-07/allies07-AI.lua +++ b/mods/ra/maps/allies-07/allies07-AI.lua @@ -134,6 +134,10 @@ ProduceAircraft = function() end TargetAndAttack = function(yak, target) + if yak.IsDead then + return + end + if not target or target.IsDead or (not target.IsInWorld) then local enemies = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == greece and self.HasProperty("Health") and yak.CanTarget(self) end) if #enemies > 0 then @@ -148,7 +152,11 @@ TargetAndAttack = function(yak, target) end yak.CallFunc(function() - TargetAndAttack(yak, target) + -- TODO: Replace this with an idle trigger once that works for aircraft + -- Add a delay of one tick to fix an endless recursive call + Trigger.AfterDelay(1, function() + TargetAndAttack(yak, target) + end) end) end diff --git a/mods/ra/maps/allies-08a/allies08a-AI.lua b/mods/ra/maps/allies-08a/allies08a-AI.lua index 5ca2b0a212..8258e7f80f 100644 --- a/mods/ra/maps/allies-08a/allies08a-AI.lua +++ b/mods/ra/maps/allies-08a/allies08a-AI.lua @@ -130,9 +130,13 @@ ProduceAircraft = function() end TargetAndAttack = function(mig, target) + if mig.IsDead then + return + end + if not target or target.IsDead or (not target.IsInWorld) then local enemies = Utils.Where(greece.GetActors(), function(actor) - return actor.HasProperty("Health") and actor.Type ~= "brik" + return actor.HasProperty("Health") and actor.Type ~= "brik" and mig.CanTarget(target) end) if #enemies > 0 then target = Utils.Random(enemies) @@ -146,7 +150,11 @@ TargetAndAttack = function(mig, target) end mig.CallFunc(function() - TargetAndAttack(mig, target) + -- TODO: Replace this with an idle trigger once that works for aircraft + -- Add a delay of one tick to fix an endless recursive call + Trigger.AfterDelay(1, function() + TargetAndAttack(mig, target) + end) end) end diff --git a/mods/ra/maps/allies-08b/allies08b-AI.lua b/mods/ra/maps/allies-08b/allies08b-AI.lua index 8fa0316f6c..616670e8f3 100644 --- a/mods/ra/maps/allies-08b/allies08b-AI.lua +++ b/mods/ra/maps/allies-08b/allies08b-AI.lua @@ -129,9 +129,13 @@ ProduceAircraft = function() end TargetAndAttack = function(mig, target) + if mig.IsDead then + return + end + if not target or target.IsDead or (not target.IsInWorld) then local enemies = Utils.Where(greece.GetActors(), function(actor) - return actor.HasProperty("Health") and actor.Type ~= "brik" + return actor.HasProperty("Health") and actor.Type ~= "brik" and mig.CanTarget(target) end) if #enemies > 0 then target = Utils.Random(enemies) @@ -145,7 +149,11 @@ TargetAndAttack = function(mig, target) end mig.CallFunc(function() - TargetAndAttack(mig, target) + -- TODO: Replace this with an idle trigger once that works for aircraft + -- Add a delay of one tick to fix an endless recursive call + Trigger.AfterDelay(1, function() + TargetAndAttack(mig, target) + end) end) end