diff --git a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs index 242b29ef14..83ec8f60bb 100644 --- a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs @@ -55,6 +55,9 @@ namespace OpenRA.Mods.RA { if (x.Actor.Owner == self.Owner && x.Trait.Info.Produces.Contains(Info.Type)) { + var b = x.Actor.TraitOrDefault(); + if (b != null && b.Locked) + continue; isActive = true; break; } diff --git a/OpenRA.Mods.RA/Player/ProductionQueue.cs b/OpenRA.Mods.RA/Player/ProductionQueue.cs index de1e597908..d6ecfcd5ce 100644 --- a/OpenRA.Mods.RA/Player/ProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ProductionQueue.cs @@ -145,12 +145,12 @@ namespace OpenRA.Mods.RA newOwner.PlayerActor.Trait().Update(); } - public void Killed(Actor killed, AttackInfo e) { if (killed == self) ClearQueue(); } - public void Selling(Actor self) { } - public void Sold(Actor self) { ClearQueue(); } + public void Killed(Actor killed, AttackInfo e) { if (killed == self) { ClearQueue(); Enabled = false; } } + public void Selling(Actor self) { ClearQueue(); Enabled = false; } + public void Sold(Actor self) { } - public void BeforeTransform(Actor self) { } - public void OnTransform(Actor self) { ClearQueue(); } + public void BeforeTransform(Actor self) { ClearQueue(); Enabled = false; } + public void OnTransform(Actor self) { } public void AfterTransform(Actor self) { } void CacheProduceables(Actor playerActor) @@ -225,6 +225,8 @@ namespace OpenRA.Mods.RA public virtual IEnumerable BuildableItems() { + if (!Enabled) + return Enumerable.Empty(); if (self.World.AllowDevCommands && developerMode.AllTech) return produceable.Select(a => a.Key);