Core/Spells: fixed Mage's Hot Streak and Improved Hot Streak talents
This commit is contained in:
1 parent
fb61a8f3c6
commit
fe952e429a
2 files changed
+234
-1
No files matched your search
@@ -49,6 +49,8 @@ enum MageSpells
|
||||
SPELL_MAGE_EARLY_FROST_TRIGGERED_R1 = 83162,
|
||||
SPELL_MAGE_EARLY_FROST_TRIGGERED_R2 = 83239,
|
||||
SPELL_MAGE_EARLY_FROST_VISUAL = 94315,
|
||||
SPELL_MAGE_FIREBALL = 133,
|
||||
SPELL_MAGE_FIRE_BLAST = 2136,
|
||||
SPELL_MAGE_FOCUS_MAGIC_PROC = 54648,
|
||||
SPELL_MAGE_FROST_NOVA = 122,
|
||||
SPELL_MAGE_FROST_WARDING_R1 = 11189,
|
||||
@@ -60,7 +62,7 @@ enum MageSpells
|
||||
SPELL_MAGE_FLAME_ORB_BEAM_DUMMY = 86719,
|
||||
SPELL_MAGE_FLAME_ORB_DAMAGE = 82739,
|
||||
SPELL_MAGE_FLAME_ORB_SELF_SNARE = 82736,
|
||||
|
||||
SPELL_MAGE_FROSTFIRE_BOLT = 44614,
|
||||
SPELL_MAGE_FROSTFIRE_ORB_DUMMY = 92283,
|
||||
SPELL_MAGE_FROSTFIRE_ORB_SUMMON = 84714,
|
||||
SPELL_MAGE_FROSTFIRE_ORB_AOE = 84718,
|
||||
@@ -71,6 +73,9 @@ enum MageSpells
|
||||
SPELL_MAGE_FROSTFIRE_BOLT_CHILL_EFFECT = 44614,
|
||||
|
||||
SPELL_MAGE_HOT_STREAK = 44445,
|
||||
SPELL_MAGE_HOT_STREAK_TRIGGERED = 48108,
|
||||
SPELL_MAGE_IMPROVED_HOT_STREAK_R1 = 44446,
|
||||
SPELL_MAGE_IMPROVED_HOT_STREAK_R2 = 44448,
|
||||
SPELL_MAGE_IMPROVED_POLYMORPH_RANK_1 = 11210,
|
||||
SPELL_MAGE_IMPROVED_POLYMORPH_STUN_RANK_1 = 83046,
|
||||
SPELL_MAGE_IMPROVED_POLYMORPH_MARKER = 87515,
|
||||
@@ -79,6 +84,8 @@ enum MageSpells
|
||||
SPELL_MAGE_IGNITE = 12654,
|
||||
SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE = 29077,
|
||||
SPELL_MAGE_PERMAFROST = 91394,
|
||||
SPELL_MAGE_PYRO_BLAST = 11366,
|
||||
SPELL_MAGE_SCORCH = 2948,
|
||||
SPELL_MAGE_SLOW = 31589,
|
||||
SPELL_MAGE_SQUIRREL_FORM = 32813,
|
||||
SPELL_MAGE_GIRAFFE_FORM = 32816,
|
||||
@@ -1850,6 +1857,215 @@ class spell_mage_flame_orb_aoe_dummy: public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 44445 - Hot Streak
|
||||
class spell_mage_hot_streak : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_mage_hot_streak() : SpellScriptLoader("spell_mage_hot_streak") { }
|
||||
|
||||
class spell_mage_hot_streak_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_mage_hot_streak_AuraScript);
|
||||
|
||||
bool Load() override
|
||||
{
|
||||
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
|
||||
}
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo(
|
||||
{
|
||||
SPELL_MAGE_HOT_STREAK_TRIGGERED,
|
||||
SPELL_MAGE_IMPROVED_HOT_STREAK_R1,
|
||||
SPELL_MAGE_IMPROVED_HOT_STREAK_R2,
|
||||
SPELL_MAGE_FIREBALL,
|
||||
SPELL_MAGE_PYRO_BLAST,
|
||||
SPELL_MAGE_FIRE_BLAST,
|
||||
SPELL_MAGE_FROSTFIRE_BOLT
|
||||
});
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
if (roll_chance_i(GetSpellInfo()->Effects[EFFECT_0].BasePoints)
|
||||
&& !caster->HasAura(SPELL_MAGE_IMPROVED_HOT_STREAK_R1)
|
||||
&& !caster->HasAura(SPELL_MAGE_IMPROVED_HOT_STREAK_R2))
|
||||
switch (eventInfo.GetSpellInfo()->Id)
|
||||
{
|
||||
case SPELL_MAGE_FIREBALL:
|
||||
case SPELL_MAGE_PYRO_BLAST:
|
||||
case SPELL_MAGE_FIRE_BLAST:
|
||||
case SPELL_MAGE_FROSTFIRE_BOLT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetCaster()->CastSpell(GetCaster(), SPELL_MAGE_HOT_STREAK_TRIGGERED, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_mage_hot_streak_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_mage_hot_streak_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_mage_hot_streak_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// -44446 - Improved Hot Streak
|
||||
class spell_mage_improved_hot_streak : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_mage_improved_hot_streak() : SpellScriptLoader("spell_mage_improved_hot_streak") { }
|
||||
|
||||
class spell_mage_improved_hot_streak_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_mage_improved_hot_streak_AuraScript);
|
||||
|
||||
uint8 criticalStrikesCounter;
|
||||
|
||||
bool Load() override
|
||||
{
|
||||
criticalStrikesCounter = 0;
|
||||
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
|
||||
}
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo(
|
||||
{
|
||||
SPELL_MAGE_HOT_STREAK_TRIGGERED,
|
||||
SPELL_MAGE_FIREBALL,
|
||||
SPELL_MAGE_PYRO_BLAST,
|
||||
SPELL_MAGE_FIRE_BLAST,
|
||||
SPELL_MAGE_FROSTFIRE_BOLT
|
||||
});
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
switch (eventInfo.GetSpellInfo()->Id)
|
||||
{
|
||||
case SPELL_MAGE_FIREBALL:
|
||||
case SPELL_MAGE_PYRO_BLAST:
|
||||
case SPELL_MAGE_FIRE_BLAST:
|
||||
case SPELL_MAGE_FROSTFIRE_BOLT:
|
||||
if (eventInfo.GetDamageInfo()->GetHitMask() & PROC_HIT_CRITICAL)
|
||||
criticalStrikesCounter++;
|
||||
else
|
||||
criticalStrikesCounter = 0;
|
||||
|
||||
if (criticalStrikesCounter == 2)
|
||||
{
|
||||
if (roll_chance_i(GetSpellInfo()->Effects[EFFECT_0].BasePoints))
|
||||
{
|
||||
criticalStrikesCounter = 0;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
criticalStrikesCounter = 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetCaster()->CastSpell(GetCaster(), SPELL_MAGE_HOT_STREAK_TRIGGERED, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_mage_improved_hot_streak_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_mage_improved_hot_streak_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_mage_improved_hot_streak_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 92315 - Pyroblast!
|
||||
class spell_mage_pyroblast : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_mage_pyroblast() : SpellScriptLoader("spell_mage_pyroblast") { }
|
||||
|
||||
class spell_mage_pyroblast_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_mage_pyroblast_SpellScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo(
|
||||
{
|
||||
SPELL_MAGE_HOT_STREAK_TRIGGERED,
|
||||
SPELL_MAGE_PYRO_BLAST
|
||||
});
|
||||
}
|
||||
|
||||
void HandleHotStreak(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
GetCaster()->RemoveAurasDueToSpell(SPELL_MAGE_HOT_STREAK_TRIGGERED);
|
||||
}
|
||||
|
||||
void HandleDamage(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
// Copy the spellpower coefficient from the original pyroblast spell
|
||||
if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(SPELL_MAGE_PYRO_BLAST))
|
||||
{
|
||||
int32 damage = GetEffectValue();
|
||||
if (Unit* target = GetHitUnit())
|
||||
{
|
||||
damage = GetCaster()->SpellDamageBonusDone(target, spell, uint32(damage), SPELL_DIRECT_DAMAGE, EFFECT_0);
|
||||
damage = target->SpellDamageBonusTaken(GetCaster(), spell, uint32(damage), SPELL_DIRECT_DAMAGE);
|
||||
}
|
||||
SetHitDamage(damage);
|
||||
}
|
||||
}
|
||||
|
||||
void ApplyDotBonus()
|
||||
{
|
||||
if (Unit* target = GetHitUnit())
|
||||
if (Unit* caster = GetCaster())
|
||||
if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(SPELL_MAGE_PYRO_BLAST))
|
||||
if (Aura* aura = target->GetAura(GetSpellInfo()->Id))
|
||||
aura->GetEffect(EFFECT_1)->SetBonusAmount(caster->SpellDamageBonusDone(target, spell, 0, DOT, EFFECT_1));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectLaunch += SpellEffectFn(spell_mage_pyroblast_SpellScript::HandleHotStreak, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_mage_pyroblast_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
AfterHit += SpellHitFn(spell_mage_pyroblast_SpellScript::ApplyDotBonus);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
return new spell_mage_pyroblast_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_mage_spell_scripts()
|
||||
{
|
||||
new spell_mage_arcane_potency();
|
||||
@@ -1866,8 +2082,10 @@ void AddSC_mage_spell_scripts()
|
||||
new spell_mage_flame_orb_aoe_dummy();
|
||||
new spell_mage_focus_magic();
|
||||
new spell_mage_frostbolt();
|
||||
new spell_mage_hot_streak();
|
||||
new spell_mage_ice_barrier();
|
||||
new spell_mage_ignite();
|
||||
new spell_mage_improved_hot_streak();
|
||||
new spell_mage_glyph_of_ice_block();
|
||||
new spell_mage_glyph_of_icy_veins();
|
||||
new spell_mage_glyph_of_polymorph();
|
||||
@@ -1879,6 +2097,7 @@ void AddSC_mage_spell_scripts()
|
||||
new spell_mage_permafrost();
|
||||
new spell_mage_polymorph();
|
||||
new spell_mage_polymorph_cast_visual();
|
||||
new spell_mage_pyroblast();
|
||||
new spell_mage_replenish_mana();
|
||||
new spell_mage_ring_of_frost();
|
||||
new spell_mage_ring_of_frost_freeze();
|
||||
|
||||
Reference in new issue
Block a user