diff --git a/OpenRA.Mods.Common/Activities/Air/ResupplyAircraft.cs b/OpenRA.Mods.Common/Activities/Air/ResupplyAircraft.cs index 9a92ef28b7..7c4944b911 100644 --- a/OpenRA.Mods.Common/Activities/Air/ResupplyAircraft.cs +++ b/OpenRA.Mods.Common/Activities/Air/ResupplyAircraft.cs @@ -28,7 +28,7 @@ namespace OpenRA.Mods.Common.Activities if (host == null) return; - if (aircraft.IsPlane) + if (!aircraft.Info.TakeOffOnResupply) { ChildActivity = ActivityUtils.SequenceActivities( aircraft.GetResupplyActivities(host) @@ -38,12 +38,13 @@ namespace OpenRA.Mods.Common.Activities } else { - // Helicopters should take off from their helipad immediately after resupplying. // HACK: Append NextInQueue to TakeOff to avoid moving to the Rallypoint (if NextInQueue is non-null). ChildActivity = ActivityUtils.SequenceActivities( aircraft.GetResupplyActivities(host) .Append(new AllowYieldingReservation(self)) - .Append(new TakeOff(self)).Append(NextInQueue).ToArray()); + .Append(new TakeOff(self)) + .Append(NextInQueue) + .ToArray()); } } diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index c8892660fc..2e4c2b8bbb 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -78,6 +78,12 @@ namespace OpenRA.Mods.Common.Traits [Desc("Does this actor cancel its previous activity after resupplying?")] public readonly bool AbortOnResupply = true; + [Desc("Does this actor automatically take off after resupplying?")] + public readonly bool TakeOffOnResupply = false; + + [Desc("Does this actor automatically take off after creation?")] + public readonly bool TakeOffOnCreation = true; + [Desc("Altitude at which the aircraft considers itself landed.")] public readonly WDist LandAltitude = WDist.Zero; @@ -264,7 +270,8 @@ namespace OpenRA.Mods.Common.Traits if (host == null) return; - self.QueueActivity(new TakeOff(self)); + if (Info.TakeOffOnCreation) + self.QueueActivity(new TakeOff(self)); } // Add land activity if LandOnCondidion resolves to true and the actor can land at the current location. diff --git a/mods/cnc/rules/defaults.yaml b/mods/cnc/rules/defaults.yaml index dce6c0c841..92b9bfed37 100644 --- a/mods/cnc/rules/defaults.yaml +++ b/mods/cnc/rules/defaults.yaml @@ -272,6 +272,7 @@ AirborneCondition: airborne CruisingCondition: cruising CanHover: True + TakeOffOnResupply: true HiddenUnderFog: Type: GroundPosition ActorLostNotification: diff --git a/mods/ra/rules/defaults.yaml b/mods/ra/rules/defaults.yaml index 84ddadbc9f..a9e660176a 100644 --- a/mods/ra/rules/defaults.yaml +++ b/mods/ra/rules/defaults.yaml @@ -548,6 +548,7 @@ CanHover: True CruisingCondition: cruising WaitDistanceFromResupplyBase: 4c0 + TakeOffOnResupply: true GpsDot: String: Helicopter Hovers@CRUISING: diff --git a/mods/ts/rules/defaults.yaml b/mods/ts/rules/defaults.yaml index c872e260f1..6adf8b67c4 100644 --- a/mods/ts/rules/defaults.yaml +++ b/mods/ts/rules/defaults.yaml @@ -820,6 +820,7 @@ CruiseAltitude: 2048 CanHover: True CruisingCondition: cruising + TakeOffOnResupply: true Hovers@CRUISING: RequiresCondition: cruising