diff --git a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs index cf20e6d650..1861c770cb 100644 --- a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs +++ b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs @@ -342,5 +342,35 @@ namespace OpenRA.Mods.RA.Scripting { return world.FindActorsInCircle(location, radius).ToArray(); } + + [LuaGlobal] + public void BuildWithSharedQueue(Player player, string unit, double amount) + { + var ri = Rules.Info[unit]; + if (ri == null || !ri.Traits.Contains()) + return; + + var category = ri.Traits.Get().Queue; + + var queue = world.ActorsWithTrait() + .Where(a => a.Actor.Owner == player && a.Trait.Info.Type == category) + .Select(a => a.Trait).FirstOrDefault(); + + if (queue != null) + queue.ResolveOrder(queue.self, Order.StartProduction(queue.self, unit, (int)amount)); + } + + [LuaGlobal] + public void BuildWithPerFactoryQueue(Actor factory, string unit, double amount) + { + if (!factory.HasTrait()) + return; + + var ri = Rules.Info[unit]; + if (ri == null || !ri.Traits.Contains()) + return; + + factory.Trait().ResolveOrder(factory, Order.StartProduction(factory, unit, (int)amount)); + } } } diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index d8deb3b629..82a28d7449 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -180,3 +180,4 @@ LuaScripts: mods/common/lua/reinforcements.lua mods/common/lua/supportpowers.lua mods/common/lua/rules.lua + mods/common/lua/production.lua diff --git a/mods/common/lua/production.lua b/mods/common/lua/production.lua new file mode 100644 index 0000000000..9acef2b6c5 --- /dev/null +++ b/mods/common/lua/production.lua @@ -0,0 +1,17 @@ +Production = { } + +Production.BuildWithSharedQueue = function(player, unit, amount) + Internal.BuildWithSharedQueue(player, unit, amount or 1) +end + +Production.BuildWithPerFactoryQueue = function(factory, unit, amount) + Internal.BuildWithPerFactoryQueue(factory, unit, amount or 1) +end + +Production.SetRallyPoint = function(factory, location) + Actor.Trait(factory, "RallyPoint").rallyPoint = location.Location +end + +Production.SetPrimaryBuilding = function(factory) + Actor.Trait(factory, "PrimaryBuilding"):SetPrimaryProducer(factory, true) +end diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 3615116d7e..2173f2b60a 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -161,3 +161,4 @@ LuaScripts: mods/common/lua/reinforcements.lua mods/common/lua/supportpowers.lua mods/common/lua/rules.lua + mods/common/lua/production.lua diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 99105ce6fe..acf490c4e3 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -177,3 +177,4 @@ LuaScripts: mods/common/lua/reinforcements.lua mods/common/lua/supportpowers.lua mods/common/lua/rules.lua + mods/common/lua/production.lua diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index 09bc97b964..6d339fdc35 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -199,3 +199,4 @@ LuaScripts: mods/common/lua/reinforcements.lua mods/common/lua/supportpowers.lua mods/common/lua/rules.lua + mods/common/lua/production.lua