diff options
author | SnapperRy <snapperryen@gmail.com> | 2016-08-25 22:12:25 +0200 |
---|---|---|
committer | SnapperRy <snapperryen@gmail.com> | 2016-08-25 22:16:34 +0200 |
commit | 42a32a3c7c840a518744381607193405bfba9335 (patch) | |
tree | 826b996640a73e14dae58326b8e98c9a66173cf1 /src | |
parent | 9c504c8a8ec4db3b75ad35172827457905ede8ee (diff) |
Core/Unit: do not refresh last damaged timer if hit by SPELL_AURA_DAMAGE_SHIELD.
Fixes spells like Retribution Aura, Thorns and Damage Shield that were preventing units from evading.
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index e004ef25411..a51292c4a30 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -782,8 +782,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam if (damagetype == DIRECT_DAMAGE || damagetype == SPELL_DIRECT_DAMAGE) { victim->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_DIRECT_DAMAGE, spellProto ? spellProto->Id : 0); - if (victim->GetTypeId() == TYPEID_UNIT && !victim->IsPet()) - victim->SetLastDamagedTime(time(NULL)); + victim->UpdateLastDamagedTime(spellProto); } if (victim->GetTypeId() != TYPEID_PLAYER) @@ -17553,6 +17552,17 @@ int32 Unit::GetHighestExclusiveSameEffectSpellGroupValue(AuraEffect const* aurEf return val; } +void Unit::UpdateLastDamagedTime(SpellInfo const* spellProto) +{ + if (GetTypeId() != TYPEID_UNIT || IsPet()) + return; + + if (spellProto && spellProto->HasAura(SPELL_AURA_DAMAGE_SHIELD)) + return; + + SetLastDamagedTime(time(NULL)); +} + bool Unit::IsHighestExclusiveAura(Aura const* aura, bool removeOtherAuraApplications /*= false*/) { for (uint32 i = 0 ; i < MAX_SPELL_EFFECTS; ++i) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 61b7665254b..c553ac8459b 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2166,6 +2166,7 @@ class TC_GAME_API Unit : public WorldObject // Part of Evade mechanics time_t GetLastDamagedTime() const { return _lastDamagedTime; } + void UpdateLastDamagedTime(SpellInfo const* spellProto); void SetLastDamagedTime(time_t val) { _lastDamagedTime = val; } int32 GetHighestExclusiveSameEffectSpellGroupValue(AuraEffect const* aurEff, AuraType auraType, bool checkMiscValue = false, int32 miscValue = 0) const; |