diff --git a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs index 56b8671d15..8a6a7f72da 100644 --- a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs +++ b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs @@ -299,12 +299,12 @@ namespace OpenRA.Mods.RA.Scripting } [LuaGlobal] - public void AttackMove(Actor actor, CPos location) + public void AttackMove(Actor actor, CPos location, double nearEnough) { if (actor.HasTrait()) - actor.QueueActivity(new AttackMove.AttackMoveActivity(actor, new Move.Move(location, 0))); + actor.QueueActivity(new AttackMove.AttackMoveActivity(actor, new Move.Move(location, (int)nearEnough))); else - actor.QueueActivity(new Move.Move(location, 0)); + actor.QueueActivity(new Move.Move(location, (int)nearEnough)); } [LuaGlobal] diff --git a/mods/common/lua/actor.lua b/mods/common/lua/actor.lua index ba750c06de..7eb9e650c7 100644 --- a/mods/common/lua/actor.lua +++ b/mods/common/lua/actor.lua @@ -47,8 +47,8 @@ Actor.Teleport = function(actor, location) actor:QueueActivity(OpenRA.New("SimpleTeleport", { location })) end -Actor.AttackMove = function(actor, location) - Internal.AttackMove(actor, location) +Actor.AttackMove = function(actor, location, nearEnough) + Internal.AttackMove(actor, location, nearEnough or 0) end Actor.HeliFly = function(actor, position) @@ -182,3 +182,21 @@ end Actor.ReturnToBase = function(actor, airfield) actor:QueueActivity(OpenRA.New("ReturnToBase", { actor, airfield })) end + +Actor.Patrol = function(actor, waypoints, wait, loop) + Utils.Do(waypoints, function(wpt) + Actor.AttackMove(actor, wpt.Location, 3) + Actor.Wait(actor, wait or 0) + end) + if loop or loop == nil then + Actor.CallFunc(actor, function() Actor.Patrol(actor, waypoints, wait, loop) end) + end +end + +Actor.PatrolUntil = function(actor, waypoints, wait, func) + if func == nil then error("No function specified", 2) end + Actor.Patrol(actor, waypoints, wait, false) + if not func(actor) then + Actor.CallFunc(actor, function() Actor.PatrolUntil(actor, waypoints, wait, func) end) + end +end diff --git a/mods/common/lua/team.lua b/mods/common/lua/team.lua index 6d41af2d23..074e02c076 100644 --- a/mods/common/lua/team.lua +++ b/mods/common/lua/team.lua @@ -18,7 +18,7 @@ Team.AddActorEventHandlers = function(team) Team.InvokeHandlers(team.OnAnyKilled) if Team.AllAreDead(team) then Team.InvokeHandlers(team.OnAllKilled) end end) - + Actor.OnRemovedFromWorld(actor, function() Team.InvokeHandlers(team.OnAnyRemovedFromWorld) if not Team.AnyAreInWorld(team) then Team.InvokeHandlers(team.OnAllRemovedFromWorld) end @@ -58,4 +58,12 @@ end Team.Do = function(team, func) Utils.Do(team.Actors, func) -end \ No newline at end of file +end + +Team.Patrol = function(team, waypoints, wait, loop) + Team.Do(team, function(a) Actor.Patrol(a, waypoints, wait, loop) end) +end + +Team.PatrolUntil = function(team, waypoints, wait, func) + Team.Do(team, function(a) Actor.PatrolUntil(a, waypoints, wait, func) end) +end