/// <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);
        }