diff --git a/OpenRA.Mods.Common/Activities/UnloadCargo.cs b/OpenRA.Mods.Common/Activities/UnloadCargo.cs index 45c24f4324..f3f6e929a0 100644 --- a/OpenRA.Mods.Common/Activities/UnloadCargo.cs +++ b/OpenRA.Mods.Common/Activities/UnloadCargo.cs @@ -59,6 +59,12 @@ namespace OpenRA.Mods.Common.Activities if (IsCanceling || cargo.IsEmpty(self)) return NextActivity; + if (!cargo.CanUnload()) + { + Cancel(self, true); + return NextActivity; + } + foreach (var inu in notifiers) inu.Unloading(self); diff --git a/OpenRA.Mods.Common/Traits/Cargo.cs b/OpenRA.Mods.Common/Traits/Cargo.cs index 21bb702167..783bd0893b 100644 --- a/OpenRA.Mods.Common/Traits/Cargo.cs +++ b/OpenRA.Mods.Common/Traits/Cargo.cs @@ -185,11 +185,13 @@ namespace OpenRA.Mods.Common.Traits { if (order.OrderString == "Unload") { - if (!CanUnload()) + if (!order.Queued && !CanUnload()) return; + if (!order.Queued) + self.CancelActivity(); + Unloading = true; - self.CancelActivity(); if (aircraft != null) self.QueueActivity(new HeliLand(self, true)); self.QueueActivity(new UnloadCargo(self, true)); @@ -201,7 +203,7 @@ namespace OpenRA.Mods.Common.Traits return Util.AdjacentCells(self.World, Target.FromActor(self)).Where(c => self.Location != c); } - bool CanUnload() + public bool CanUnload() { if (checkTerrainType) {