diff --git a/OpenRA.Mods.Common/Traits/Production.cs b/OpenRA.Mods.Common/Traits/Production.cs index 459e9c6cb0..2681f8d816 100644 --- a/OpenRA.Mods.Common/Traits/Production.cs +++ b/OpenRA.Mods.Common/Traits/Production.cs @@ -28,13 +28,15 @@ namespace OpenRA.Mods.Common.Traits public virtual object Create(ActorInitializer init) { return new Production(init, this); } } - public class Production + public class Production : INotifyCreated { readonly Lazy rp; public readonly ProductionInfo Info; public string Faction { get; private set; } + Building building; + public Production(ActorInitializer init, ProductionInfo info) { Info = info; @@ -42,6 +44,11 @@ namespace OpenRA.Mods.Common.Traits Faction = init.Contains() ? init.Get() : init.Self.Owner.Faction.InternalName; } + void INotifyCreated.Created(Actor self) + { + building = self.TraitOrDefault(); + } + public virtual void DoProduction(Actor self, ActorInfo producee, ExitInfo exitinfo, string factionVariant) { var exit = CPos.Zero; @@ -122,7 +129,7 @@ namespace OpenRA.Mods.Common.Traits public virtual bool Produce(Actor self, ActorInfo producee, string factionVariant) { - if (Reservable.IsReserved(self)) + if (Reservable.IsReserved(self) || (building != null && building.Locked)) return false; // Pick a spawn/exit point pair