diff --git a/OpenRA.Game/Actor.cs b/OpenRA.Game/Actor.cs index 785e3a997f..f52554891a 100755 --- a/OpenRA.Game/Actor.cs +++ b/OpenRA.Game/Actor.cs @@ -200,7 +200,7 @@ namespace OpenRA { World.AddFrameEndTask( w => { - if (Destroyed || !IsInWorld) return; + if (Destroyed) return; World.Remove( this ); World.traitDict.RemoveActor( this ); diff --git a/OpenRA.Game/Network/UnitOrders.cs b/OpenRA.Game/Network/UnitOrders.cs index 5a9e603ff1..b68f39f984 100755 --- a/OpenRA.Game/Network/UnitOrders.cs +++ b/OpenRA.Game/Network/UnitOrders.cs @@ -141,9 +141,14 @@ namespace OpenRA.Network } default: { - if (!order.IsImmediate) - foreach (var t in order.Subject.TraitsImplementing()) - t.ResolveOrder(order.Subject, order); + if( !order.IsImmediate ) + { + var self = order.Subject; + var health = self.TraitOrDefault(); + if( health == null || !health.IsDead ) + foreach( var t in self.TraitsImplementing() ) + t.ResolveOrder( self, order ); + } break; } } diff --git a/OpenRA.Mods.RA/Cargo.cs b/OpenRA.Mods.RA/Cargo.cs index 3409a1da6d..51d77d4146 100644 --- a/OpenRA.Mods.RA/Cargo.cs +++ b/OpenRA.Mods.RA/Cargo.cs @@ -146,9 +146,12 @@ namespace OpenRA.Mods.RA public void Damaged(Actor self, AttackInfo e) { - if (e.DamageStateChanged && e.DamageState == DamageState.Dead) - foreach (var c in cargo) - c.Kill(e.Attacker); + if( e.DamageStateChanged && e.DamageState == DamageState.Dead ) + { + foreach( var c in cargo ) + c.Destroy(); + cargo.Clear(); + } } } }