diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 4b981f247..00fda0fc4 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1672,6 +1672,10 @@ void Spell::SetTargetMap(SpellEffectIndex effIndex, uint32 targetMode, UnitList& switch (targetMode) { case TARGET_RANDOM_NEARBY_LOC: + // special case for Fatal Attraction (BT, Mother Shahraz) + if (m_spellInfo->Id == 40869) + radius = 30.0f; + // Get a random point in circle. Use sqrt(rand) to correct distribution when converting polar to Cartesian coordinates. radius *= sqrtf(rand_norm_f()); // no 'break' expected since we use code in case TARGET_RANDOM_CIRCUMFERENCE_POINT!!! @@ -7973,6 +7977,7 @@ void Spell::GetSpellRangeAndRadius(SpellEffectEntry const* spellEffect, float& r case 30004: // Flame Wreath (Karazhan, Shade of Aran) case 31298: // Sleep (Hyjal Summit, Anetheron) case 39992: // Needle Spine Targeting (BT, Warlord Najentus) + case 40869: // Fatal Attraction (BT, Mother Shahraz) case 41303: // Soul Drain (BT, Reliquary of Souls) case 41376: // Spite (BT, Reliquary of Souls) case 51904: // Summon Ghouls On Scarlet Crusade diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 092a7ce67..415d7fb86 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1501,6 +1501,14 @@ void Spell::EffectDummy(SpellEffectEntry const* effect) m_caster->CastSpell(unitTarget, 40932, true); return; } + case 40869: // Fatal Attraction + { + if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) + return; + + m_caster->CastSpell(unitTarget, 41001, true); + return; + } case 40962: // Blade's Edge Terrace Demon Boss Summon Branch { if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) @@ -1517,6 +1525,16 @@ void Spell::EffectDummy(SpellEffectEntry const* effect) unitTarget->CastSpell(unitTarget, spell_id, true); return; } + case 41333: // Empyreal Equivalency + { + if (!unitTarget) + return; + + // Equilize the health of all targets based on the corresponding health percent + float health_diff = (float)unitTarget->GetMaxHealth() / (float)m_caster->GetMaxHealth(); + unitTarget->SetHealth(m_caster->GetHealth() * health_diff); + return; + } case 42287: // Salvage Wreckage { if (m_caster->GetTypeId() != TYPEID_PLAYER) diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 0c2e59f7a..9047dd574 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -2138,6 +2138,16 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons (spellInfo_2->Id == 23014 && spellInfo_1->Id == 19832)) return false; + // Shade Soul Channel and Akama Soul Channel + if ((spellInfo_1->Id == 40401 && spellInfo_2->Id == 40447) || + (spellInfo_2->Id == 40401 && spellInfo_1->Id == 40447)) + return false; + + // Eye Blast visual and Eye Blast + if ((spellInfo_1->Id == 39908 && spellInfo_2->Id == 40017) || + (spellInfo_2->Id == 39908 && spellInfo_1->Id == 40017)) + return false; + break; } case SPELLFAMILY_MAGE: diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 5ed854275..17dbeee8d 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 "12611" + #define REVISION_NR "12612" #endif // __REVISION_NR_H__