Merge pull request #15156 from LuqJensen/Ice-barrier
Core/Spells: Fix Shattered Barrier triggering on dispel
This commit is contained in:
commit
c1e3fdc826
2 files changed
+25
-10
No files matched your search
@@ -1419,16 +1419,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (!caster)
|
||||
break;
|
||||
// Ice barrier - dispel/absorb remove
|
||||
if (removeMode == AURA_REMOVE_BY_ENEMY_SPELL && GetSpellInfo()->SpellFamilyFlags[1] & 0x1)
|
||||
{
|
||||
// Shattered Barrier
|
||||
if (AuraEffect* dummy = caster->GetDummyAuraEffect(SPELLFAMILY_MAGE, 2945, 0))
|
||||
if (roll_chance_i(dummy->GetSpellInfo()->ProcChance))
|
||||
caster->CastSpell(target, 55080, true, NULL, GetEffect(0));
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_WARRIOR:
|
||||
if (!caster)
|
||||
|
||||
@@ -45,11 +45,17 @@ enum MageSpells
|
||||
SPELL_MAGE_WORGEN_FORM = 32819,
|
||||
SPELL_MAGE_SHEEP_FORM = 32820,
|
||||
SPELL_MAGE_GLYPH_OF_ETERNAL_WATER = 70937,
|
||||
SPELL_MAGE_SHATTERED_BARRIER = 55080,
|
||||
SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT = 70908,
|
||||
SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY = 70907,
|
||||
SPELL_MAGE_GLYPH_OF_BLAST_WAVE = 62126,
|
||||
};
|
||||
|
||||
enum MageSpellIcons
|
||||
{
|
||||
SPELL_ICON_MAGE_SHATTERED_BARRIER = 2945
|
||||
};
|
||||
|
||||
// Incanter's Absorbtion
|
||||
class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript
|
||||
{
|
||||
@@ -321,6 +327,13 @@ class spell_mage_ice_barrier : public SpellScriptLoader
|
||||
{
|
||||
PrepareAuraScript(spell_mage_ice_barrier_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_SHATTERED_BARRIER))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated)
|
||||
{
|
||||
canBeRecalculated = false;
|
||||
@@ -341,10 +354,22 @@ class spell_mage_ice_barrier : public SpellScriptLoader
|
||||
}
|
||||
}
|
||||
|
||||
void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
// Shattered Barrier
|
||||
// Procs only if removed by damage.
|
||||
if (aurEff->GetAmount() <= 0)
|
||||
if (Unit* caster = GetCaster())
|
||||
if (AuraEffect* dummy = caster->GetDummyAuraEffect(SPELLFAMILY_MAGE, SPELL_ICON_MAGE_SHATTERED_BARRIER, EFFECT_0))
|
||||
if (roll_chance_i(dummy->GetSpellInfo()->ProcChance))
|
||||
caster->CastSpell(GetTarget(), SPELL_MAGE_SHATTERED_BARRIER, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_ice_barrier_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
|
||||
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_ice_barrier_AuraScript::Trigger, EFFECT_0);
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_mage_ice_barrier_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user