From d5c65b59b0e32a3818ef4708a6dc84dcc37d7599 Mon Sep 17 00:00:00 2001 From: Oliver Brakmann Date: Sat, 18 Jul 2015 21:13:33 +0200 Subject: [PATCH] Fix scripted paradrops A recent PR changed ParaDrop from an Effect to an Activity. Idle triggers in the mission scripts however have already queued activities for the paradropped units, so the ParaDrop activity would only run once the first activity had finished (which could never happen). --- mods/ra/maps/allies-03a/allies03a.lua | 8 +++++++- mods/ra/maps/allies-03b/allies03b.lua | 8 +++++++- mods/ra/maps/desert-shellmap/desert-shellmap.lua | 12 ++++++++++-- mods/ra/maps/intervention/intervention.lua | 6 +++++- mods/ra/maps/survival01/survival01.lua | 6 +++++- mods/ra/maps/survival02/survival02.lua | 8 +++++++- 6 files changed, 41 insertions(+), 7 deletions(-) diff --git a/mods/ra/maps/allies-03a/allies03a.lua b/mods/ra/maps/allies-03a/allies03a.lua index 6445ac8a13..fa9edad3e9 100644 --- a/mods/ra/maps/allies-03a/allies03a.lua +++ b/mods/ra/maps/allies-03a/allies03a.lua @@ -16,7 +16,13 @@ else ChangeStance = true end -IdleHunt = function(actor) Trigger.OnIdle(actor, actor.Hunt) end +IdleHunt = function(actor) + Trigger.OnIdle(actor, function(a) + if a.IsInWorld then + a.Hunt() + end + end) +end ProduceUnits = function(factory, count) if ussr.IsProducing("e1") then diff --git a/mods/ra/maps/allies-03b/allies03b.lua b/mods/ra/maps/allies-03b/allies03b.lua index 6067316ad4..ceea0b2135 100644 --- a/mods/ra/maps/allies-03b/allies03b.lua +++ b/mods/ra/maps/allies-03b/allies03b.lua @@ -27,7 +27,13 @@ else ChangeStance = true end -IdleHunt = function(actor) Trigger.OnIdle(actor, actor.Hunt) end +IdleHunt = function(actor) + Trigger.OnIdle(actor, function(a) + if a.IsInWorld then + a.Hunt() + end + end) +end Tick = function() if TeleportJeepCamera and Jeep.IsInWorld then diff --git a/mods/ra/maps/desert-shellmap/desert-shellmap.lua b/mods/ra/maps/desert-shellmap/desert-shellmap.lua index 34efded0f9..41f612277f 100644 --- a/mods/ra/maps/desert-shellmap/desert-shellmap.lua +++ b/mods/ra/maps/desert-shellmap/desert-shellmap.lua @@ -36,9 +36,17 @@ ParadropWaypoints = { Paradrop1, Paradrop2, Paradrop3, Paradrop4, Paradrop5, Par BindActorTriggers = function(a) if a.HasProperty("Hunt") then if a.Owner == allies then - Trigger.OnIdle(a, a.Hunt) + Trigger.OnIdle(a, function(a) + if a.IsInWorld then + a.Hunt() + end + end) else - Trigger.OnIdle(a, function(a) a.AttackMove(AlliedTechnologyCenter.Location) end) + Trigger.OnIdle(a, function(a) + if a.IsInWorld then + a.AttackMove(AlliedTechnologyCenter.Location) + end + end) end end diff --git a/mods/ra/maps/intervention/intervention.lua b/mods/ra/maps/intervention/intervention.lua index 34257899eb..a4030baddc 100644 --- a/mods/ra/maps/intervention/intervention.lua +++ b/mods/ra/maps/intervention/intervention.lua @@ -60,7 +60,11 @@ ParadropSovietUnits = function() local units = powerproxy.SendParatroopers(MCVDeployLocation.CenterPosition, false, 256 - 53) Utils.Do(units, function(a) - Trigger.OnIdle(a, a.Hunt) + Trigger.OnIdle(a, function(actor) + if actor.IsInWorld then + actor.Hunt() + end + end) end) powerproxy.Destroy() diff --git a/mods/ra/maps/survival01/survival01.lua b/mods/ra/maps/survival01/survival01.lua index e4229fcf47..9c4cf41b0f 100644 --- a/mods/ra/maps/survival01/survival01.lua +++ b/mods/ra/maps/survival01/survival01.lua @@ -185,7 +185,11 @@ SendSovietParadrops = function(table) local units = powerproxy.SendParatroopers(table[2].CenterPosition, false, table[1]) Utils.Do(units, function(unit) - Trigger.OnIdle(unit, unit.Hunt) + Trigger.OnIdle(unit, function(a) + if a.IsInWorld then + a.Hunt() + end + end) end) end diff --git a/mods/ra/maps/survival02/survival02.lua b/mods/ra/maps/survival02/survival02.lua index c196631e48..1eb612cea8 100644 --- a/mods/ra/maps/survival02/survival02.lua +++ b/mods/ra/maps/survival02/survival02.lua @@ -35,7 +35,13 @@ ParaWaves = { AttackTicks * 3, { "SovietSquad", SovietParaDrop1 } } } -IdleHunt = function(unit) Trigger.OnIdle(unit, unit.Hunt) end +IdleHunt = function(unit) + Trigger.OnIdle(unit, function(a) + if a.IsInWorld then + a.Hunt() + end + end) +end GuardHarvester = function(unit, harvester) if not unit.IsDead then