Work around a recursive loop in TargetAndAttack

This commit is contained in:
abcdefg30
2019-10-09 15:11:29 +02:00
committed by reaperrr
parent 3860cd1b98
commit feb58801e0
7 changed files with 65 additions and 9 deletions

View File

@@ -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,8 +264,12 @@ TargetAndAttack = function(yak, target)
end
yak.CallFunc(function()
-- 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
ActivateAI = function()

View File

@@ -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,8 +282,12 @@ TargetAndAttack = function(yak, target)
end
yak.CallFunc(function()
-- 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
ActivateAI = function()

View File

@@ -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,8 +177,12 @@ TargetAndAttack = function(yak, target)
end
yak.CallFunc(function()
-- 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
IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end

View File

@@ -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,8 +189,12 @@ TargetAndAttack = function(yak, target)
end
yak.CallFunc(function()
-- 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
IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end

View File

@@ -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,8 +152,12 @@ TargetAndAttack = function(yak, target)
end
yak.CallFunc(function()
-- 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
ActivateAI = function()

View File

@@ -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,8 +150,12 @@ TargetAndAttack = function(mig, target)
end
mig.CallFunc(function()
-- 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
GroundWaves = function()

View File

@@ -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,8 +149,12 @@ TargetAndAttack = function(mig, target)
end
mig.CallFunc(function()
-- 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
GroundWaves = function()