From b8d3c9f73aa5871dc60ffd4f03d7bee17621cb7f Mon Sep 17 00:00:00 2001 From: reaperrr Date: Mon, 19 Nov 2018 10:36:52 +0100 Subject: [PATCH] Fix aircraft being repaired mid-air Repairable was originally written for ground actors, so it's both safer and much easier to just handle this in Aircraft directly. --- OpenRA.Mods.Common/Traits/Air/Aircraft.cs | 4 ++-- OpenRA.Mods.Common/Traits/Repairable.cs | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index 82aae460e1..a2524a5884 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -717,9 +717,9 @@ namespace OpenRA.Mods.Common.Traits else self.QueueActivity(order.Queued, new HeliFlyAndLandWhenIdle(self, target, Info)); } - else if (order.OrderString == "Enter") + else if (order.OrderString == "Enter" || order.OrderString == "Repair") { - // Enter orders are only valid for own/allied actors, + // Enter and Repair orders are only valid for own/allied actors, // which are guaranteed to never be frozen. if (order.Target.Type != TargetType.Actor) return; diff --git a/OpenRA.Mods.Common/Traits/Repairable.cs b/OpenRA.Mods.Common/Traits/Repairable.cs index fd8ed8d7c4..005f0f3f00 100644 --- a/OpenRA.Mods.Common/Traits/Repairable.cs +++ b/OpenRA.Mods.Common/Traits/Repairable.cs @@ -101,6 +101,10 @@ namespace OpenRA.Mods.Common.Traits if (order.Target.Type != TargetType.Actor) return; + // Aircraft handle Repair orders directly in the Aircraft trait + if (self.Info.HasTraitInfo()) + return; + if (!CanRepairAt(order.Target.Actor) || (!CanRepair() && !CanRearm())) return;