/// <summary>Inflicts damage upon this unit and returns whether lethal damage was dealt.</summary> public virtual bool ReceiveDamage(Unit caster, uint damage, float hatredScale = 1f, uint mitigation = 0) { bool wasKilled = false; Player creditedPlayer = null; if (IsDead || PendingDisposal || (IsInvulnerable && damage != int.MaxValue)) { return(false); } if (caster.Realm != Realm) { creditedPlayer = caster.CbtInterface.CreditedPlayer; } lock (DamageApplicationLock) { if (IsDead) { return(false); } if (damage >= Health) { wasKilled = true; damage = Health; _health = 0; if (creditedPlayer != null) { PendingTotalDamageTaken += damage; AddTrackedDamage(creditedPlayer, damage); } TotalDamageTaken = PendingTotalDamageTaken; PendingTotalDamageTaken = 0; } else { _health = Math.Max(0, _health - damage); if (creditedPlayer != null) { PendingTotalDamageTaken += damage; AddTrackedDamage(creditedPlayer, damage); } } } CbtInterface.OnTakeDamage(caster, damage, hatredScale, mitigation); caster.CbtInterface.OnDealDamage(this, damage); LastHitOid = caster.Oid; if (wasKilled) { SetDeath(caster); } return(wasKilled); }