aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSnapperRy <snapperryen@gmail.com>2016-08-25 22:12:25 +0200
committerSnapperRy <snapperryen@gmail.com>2016-08-25 22:16:34 +0200
commit42a32a3c7c840a518744381607193405bfba9335 (patch)
tree826b996640a73e14dae58326b8e98c9a66173cf1 /src
parent9c504c8a8ec4db3b75ad35172827457905ede8ee (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.cpp14
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
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;