diff --git a/OpenRA.Mods.Common/Activities/ExternalCaptureActor.cs b/OpenRA.Mods.Common/Activities/ExternalCaptureActor.cs index db205e8afa..ca29a52cb2 100644 --- a/OpenRA.Mods.Common/Activities/ExternalCaptureActor.cs +++ b/OpenRA.Mods.Common/Activities/ExternalCaptureActor.cs @@ -50,7 +50,8 @@ namespace OpenRA.Mods.Common.Activities BeginCapture(self); else { - if (capturable.Captor != self) return NextActivity; + if (capturable.Captor != self) + return NextActivity; if (capturable.CaptureProgressTime % 25 == 0) { @@ -99,8 +100,9 @@ namespace OpenRA.Mods.Common.Activities void EndCapture(Actor self) { - if (target.Type == TargetType.Actor && capturable.CaptureInProgress) + if (capturable.CaptureInProgress) capturable.EndCapture(); + if (capturingToken != ConditionManager.InvalidConditionToken) capturingToken = conditionManager.RevokeCondition(self, capturingToken); } diff --git a/OpenRA.Mods.Common/Traits/ExternalCapturable.cs b/OpenRA.Mods.Common/Traits/ExternalCapturable.cs index cf116362fd..8d47d59729 100644 --- a/OpenRA.Mods.Common/Traits/ExternalCapturable.cs +++ b/OpenRA.Mods.Common/Traits/ExternalCapturable.cs @@ -52,18 +52,18 @@ namespace OpenRA.Mods.Common.Traits { [Sync] public int CaptureProgressTime = 0; [Sync] public Actor Captor; - private Actor self; public bool CaptureInProgress { get { return Captor != null; } } + readonly Building building; + public ExternalCapturable(Actor self, ExternalCapturableInfo info) : base(info) { - this.self = self; + building = self.TraitOrDefault(); } public void BeginCapture(Actor captor) { - var building = self.TraitOrDefault(); if (building != null) building.Lock(); @@ -72,7 +72,6 @@ namespace OpenRA.Mods.Common.Traits public void EndCapture() { - var building = self.TraitOrDefault(); if (building != null) building.Unlock();