From c23bb261bc622fcff50ddcffdd1030c706942cdd Mon Sep 17 00:00:00 2001 From: Olion Date: Sat, 16 May 2015 19:49:24 +0300 Subject: [PATCH] [Core]Spell attribute allowing heartbeart resist mechanic --- src/game/Server/SharedDefines.h | 2 +- src/game/WorldHandlers/SpellAuras.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/game/Server/SharedDefines.h b/src/game/Server/SharedDefines.h index c142ee37..6622da87 100644 --- a/src/game/Server/SharedDefines.h +++ b/src/game/Server/SharedDefines.h @@ -307,7 +307,7 @@ enum SpellAttributes SPELL_ATTR_CASTABLE_WHILE_SITTING = 0x08000000, // 27 castable while sitting SPELL_ATTR_CANT_USED_IN_COMBAT = 0x10000000, // 28 Can not be used in combat SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY = 0x20000000, // 29 unaffected by invulnerability (hmm possible not...) - SPELL_ATTR_UNK30 = 0x40000000, // 30 breakable by damage? + SPELL_ATTR_HEARTBEAT_RESIST_CHECK = 0x40000000, // 30 TC 335: random chance the effect will end (subjected to the hearbeat resist) SPELL_ATTR_CANT_CANCEL = 0x80000000 // 31 positive aura can't be canceled }; diff --git a/src/game/WorldHandlers/SpellAuras.cpp b/src/game/WorldHandlers/SpellAuras.cpp index b126bdae..cc6a9611 100644 --- a/src/game/WorldHandlers/SpellAuras.cpp +++ b/src/game/WorldHandlers/SpellAuras.cpp @@ -4928,8 +4928,11 @@ SpellAuraHolder::SpellAuraHolder(SpellEntry const* spellproto, Unit* target, Wor break; } - m_isHeartbeatSubject = (GetSpellMechanicMask(m_spellProto, (1 << MAX_EFFECT_INDEX) - 1) & HEARTBEAT_AURA_MECHANIC_MASK) - && caster->GetTypeId() == TYPEID_PLAYER && target->GetTypeId() == TYPEID_PLAYER && !IsChanneledSpell(m_spellProto); + //m_isHeartbeatSubject = (GetSpellMechanicMask(m_spellProto, (1 << MAX_EFFECT_INDEX) - 1) & HEARTBEAT_AURA_MECHANIC_MASK) && caster != target + // && caster->GetTypeId() == TYPEID_PLAYER && target->GetTypeId() == TYPEID_PLAYER && !IsChanneledSpell(m_spellProto); + + //TODO consider removing the m_isHeartbeatSubject variable due to simplified condition check + m_isHeartbeatSubject = bool(m_spellProto->Attributes & SPELL_ATTR_HEARTBEAT_RESIST_CHECK); for (int32 i = 0; i < MAX_EFFECT_INDEX; ++i) { m_auras[i] = NULL; }