diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 4b64326f4..c07c56ae5 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -5897,7 +5897,7 @@ void Aura::HandleShapeshiftBoosts(bool apply) void Aura::HandleSpellSpecificBoosts(bool apply) { - bool cast_at_remove = false; // if spell must be casted at aura remove + bool cast_at_remove = false; // if spell must be casted at last aura from stack remove uint32 spellId1 = 0; uint32 spellId2 = 0; uint32 spellId3 = 0; @@ -5907,7 +5907,7 @@ void Aura::HandleSpellSpecificBoosts(bool apply) { case SPELLFAMILY_MAGE: { - // Ice Barrier + // Ice Barrier (non stacking from one caster) if (m_spellProto->SpellIconID == 32) { if (!apply && (m_removeMode == AURA_REMOVE_BY_DISPEL || (m_removeMode == AURA_REMOVE_BY_DEFAULT && !GetModifier()->m_amount))) @@ -5954,7 +5954,7 @@ void Aura::HandleSpellSpecificBoosts(bool apply) break; } case SPELLFAMILY_WARLOCK: - // Fear + // Fear (non stacking) if (m_spellProto->SpellFamilyFlags & UI64LIT(0x0000040000000000)) { if(!apply) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index b5112b6df..e30e0f705 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -3962,11 +3962,11 @@ void Unit::RemoveSingleAuraDueToSpellByDispel(uint32 spellId, uint64 casterGUID, // backfire damage and silence dispeler->CastCustomSpell(dispeler, 31117, &damage, NULL, NULL, true, NULL, NULL,casterGUID); + return; } - return; } // Flame Shock - if (spellEntry->SpellFamilyName == SPELLFAMILY_SHAMAN && (spellEntry->SpellFamilyFlags & UI64LIT(0x10000000))) + else if (spellEntry->SpellFamilyName == SPELLFAMILY_SHAMAN && (spellEntry->SpellFamilyFlags & UI64LIT(0x10000000))) { Unit* caster = NULL; uint32 triggeredSpell = 0; @@ -3998,6 +3998,24 @@ void Unit::RemoveSingleAuraDueToSpellByDispel(uint32 spellId, uint64 casterGUID, caster->CastSpell(caster, triggeredSpell, true); return; } + // Vampiric touch (first dummy aura) + else if (spellEntry->SpellFamilyName == SPELLFAMILY_PRIEST && spellEntry->SpellFamilyFlags & UI64LIT(0x0000040000000000)) + { + if (Aura *dot = GetAura(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_PRIEST, UI64LIT(0x0000040000000000), 0x00000000, casterGUID)) + { + if(Unit* caster = dot->GetCaster()) + { + int32 bp0 = dot->GetModifier()->m_amount; + bp0 = 8 * caster->SpellDamageBonus(this, spellEntry, bp0, DOT, 1); + + // Remove spell auras from stack + RemoveSingleSpellAurasByCasterSpell(spellId, casterGUID, AURA_REMOVE_BY_DISPEL); + + CastCustomSpell(this, 64085, &bp0, NULL, NULL, true, NULL, NULL, casterGUID); + return; + } + } + } RemoveSingleSpellAurasByCasterSpell(spellId, casterGUID, AURA_REMOVE_BY_DISPEL); } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 1b26cb5b6..c130a1a95 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "8974" + #define REVISION_NR "8975" #endif // __REVISION_NR_H__