diff --git a/OpenRA.Mods.Common/Activities/UnloadCargo.cs b/OpenRA.Mods.Common/Activities/UnloadCargo.cs index 14308d2ae6..26c029b305 100644 --- a/OpenRA.Mods.Common/Activities/UnloadCargo.cs +++ b/OpenRA.Mods.Common/Activities/UnloadCargo.cs @@ -119,11 +119,12 @@ namespace OpenRA.Mods.Common.Activities var move = actor.Trait(); var pos = actor.Trait(); + var passenger = actor.Trait(); pos.SetPosition(actor, exitSubCell.Value.Cell, exitSubCell.Value.SubCell); pos.SetCenterPosition(actor, spawn); - actor.CancelActivity(); + passenger.OnBeforeAddedToWorld(actor); w.Add(actor); }); } diff --git a/OpenRA.Mods.Common/Traits/Cargo.cs b/OpenRA.Mods.Common/Traits/Cargo.cs index fc975eeb40..443cabdca2 100644 --- a/OpenRA.Mods.Common/Traits/Cargo.cs +++ b/OpenRA.Mods.Common/Traits/Cargo.cs @@ -428,8 +428,7 @@ namespace OpenRA.Mods.Common.Traits foreach (var nbm in nbms) nbm.OnNotifyBlockingMove(passenger, passenger); - // For show. - passenger.QueueActivity(new Nudge(passenger)); + passenger.Trait().OnEjectedFromKilledCargo(passenger); } else passenger.Kill(e.Attacker); diff --git a/OpenRA.Mods.Common/Traits/Passenger.cs b/OpenRA.Mods.Common/Traits/Passenger.cs index c72544fbe4..fb5f6dc999 100644 --- a/OpenRA.Mods.Common/Traits/Passenger.cs +++ b/OpenRA.Mods.Common/Traits/Passenger.cs @@ -207,6 +207,19 @@ namespace OpenRA.Mods.Common.Traits ReservedCargo = null; } + public virtual void OnBeforeAddedToWorld(Actor actor) + { + actor.CancelActivity(); + } + + public virtual void OnEjectedFromKilledCargo(Actor self) + { + // Cancel all other activities to keep consistent behavior with the one in UnloadCargo. + self.CurrentActivity?.Cancel(self); + + self.QueueActivity(new Nudge(self)); + } + void INotifyKilled.Killed(Actor self, AttackInfo e) { if (Transport == null)