mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 09:44:45 +01:00
Core/Spells: Proc handler script converions (#17122)
* Blazing Speed (Mage) * Blessed Recovery (Priest) * Druid Forms Trinket * Idol Of Mutilation * Nature's Guardian (Shaman) * Nether Protection (Warlock) * Piercing Shots and Bonus 4P T9 Hunter * Lightning Shield (Shaman) * Acclimation (DK) * Move DK T10 4P Melee Bonus * Move DK Improved Blood Presence triggered heal (DK) * Rogue T10 2P Bonus * Illumination (Paladin) * Soul Preserver * Death Choice trinket * stack trinket scripts (ToC25 Caster Trinket, Lightning Capacitor, Thunder Capacitor) * Battle Experience (ICC - Gunship) * Blood Reserve (enchant proc) * Darkmoon Card Greatness * Charm of the Amani Witch Doctor * Mana Drain
This commit is contained in:
@@ -2461,6 +2461,33 @@ class spell_igb_teleport_players_on_victory : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 71201 - Battle Experience - proc should never happen, handled in script
|
||||
class spell_igb_battle_experience_check : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_igb_battle_experience_check() : SpellScriptLoader("spell_igb_battle_experience_check") { }
|
||||
|
||||
class spell_igb_battle_experience_check_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_igb_battle_experience_check_AuraScript);
|
||||
|
||||
bool CheckProc(ProcEventInfo& /*eventInfo*/)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_igb_battle_experience_check_AuraScript::CheckProc);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_igb_battle_experience_check_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_im_on_a_boat : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
@@ -2500,5 +2527,6 @@ void AddSC_boss_icecrown_gunship_battle()
|
||||
new spell_igb_gunship_fall_teleport();
|
||||
new spell_igb_check_for_players();
|
||||
new spell_igb_teleport_players_on_victory();
|
||||
new spell_igb_battle_experience_check();
|
||||
new achievement_im_on_a_boat();
|
||||
}
|
||||
|
||||
@@ -30,6 +30,13 @@
|
||||
|
||||
enum DeathKnightSpells
|
||||
{
|
||||
SPELL_DK_ACCLIMATION_HOLY = 50490,
|
||||
SPELL_DK_ACCLIMATION_FIRE = 50362,
|
||||
SPELL_DK_ACCLIMATION_FROST = 50485,
|
||||
SPELL_DK_ACCLIMATION_ARCANE = 50486,
|
||||
SPELL_DK_ACCLIMATION_SHADOW = 50489,
|
||||
SPELL_DK_ACCLIMATION_NATURE = 50488,
|
||||
SPELL_DK_ADVANTAGE_T10_4P_MELEE = 70657,
|
||||
SPELL_DK_ANTI_MAGIC_SHELL_TALENT = 51052,
|
||||
SPELL_DK_BLACK_ICE_R1 = 49140,
|
||||
SPELL_DK_BLOOD_BOIL_TRIGGERED = 65658,
|
||||
@@ -51,6 +58,7 @@ enum DeathKnightSpells
|
||||
SPELL_DK_IMPROVED_BLOOD_PRESENCE_R1 = 50365,
|
||||
SPELL_DK_IMPROVED_FROST_PRESENCE_R1 = 50384,
|
||||
SPELL_DK_IMPROVED_UNHOLY_PRESENCE_R1 = 50391,
|
||||
SPELL_DK_IMPROVED_BLOOD_PRESENCE_HEAL = 50475,
|
||||
SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED = 63611,
|
||||
SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED = 63622,
|
||||
SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART = 64962,
|
||||
@@ -78,6 +86,141 @@ enum Misc
|
||||
NPC_DK_GHOUL = 26125
|
||||
};
|
||||
|
||||
// -49200 - Acclimation
|
||||
class spell_dk_acclimation : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dk_acclimation() : SpellScriptLoader("spell_dk_acclimation") { }
|
||||
|
||||
class spell_dk_acclimation_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dk_acclimation_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_DK_ACCLIMATION_HOLY) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DK_ACCLIMATION_FIRE) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DK_ACCLIMATION_FROST) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DK_ACCLIMATION_NATURE) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DK_ACCLIMATION_SHADOW) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DK_ACCLIMATION_ARCANE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (eventInfo.GetDamageInfo())
|
||||
{
|
||||
switch (GetFirstSchoolInMask(eventInfo.GetDamageInfo()->GetSchoolMask()))
|
||||
{
|
||||
case SPELL_SCHOOL_HOLY:
|
||||
case SPELL_SCHOOL_FIRE:
|
||||
case SPELL_SCHOOL_NATURE:
|
||||
case SPELL_SCHOOL_FROST:
|
||||
case SPELL_SCHOOL_SHADOW:
|
||||
case SPELL_SCHOOL_ARCANE:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
uint32 triggerspell = 0;
|
||||
|
||||
switch (GetFirstSchoolInMask(eventInfo.GetDamageInfo()->GetSchoolMask()))
|
||||
{
|
||||
case SPELL_SCHOOL_HOLY:
|
||||
triggerspell = SPELL_DK_ACCLIMATION_HOLY;
|
||||
break;
|
||||
case SPELL_SCHOOL_FIRE:
|
||||
triggerspell = SPELL_DK_ACCLIMATION_FIRE;
|
||||
break;
|
||||
case SPELL_SCHOOL_NATURE:
|
||||
triggerspell = SPELL_DK_ACCLIMATION_NATURE;
|
||||
break;
|
||||
case SPELL_SCHOOL_FROST:
|
||||
triggerspell = SPELL_DK_ACCLIMATION_FROST;
|
||||
break;
|
||||
case SPELL_SCHOOL_SHADOW:
|
||||
triggerspell = SPELL_DK_ACCLIMATION_SHADOW;
|
||||
break;
|
||||
case SPELL_SCHOOL_ARCANE:
|
||||
triggerspell = SPELL_DK_ACCLIMATION_ARCANE;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
if (Unit* target = eventInfo.GetActionTarget())
|
||||
target->CastSpell(target, triggerspell, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_dk_acclimation_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_dk_acclimation_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_dk_acclimation_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 70656 - Advantage (T10 4P Melee Bonus)
|
||||
class spell_dk_advantage_t10_4p : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dk_advantage_t10_4p() : SpellScriptLoader("spell_dk_advantage_t10_4p") { }
|
||||
|
||||
class spell_dk_advantage_t10_4p_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dk_advantage_t10_4p_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_DK_ADVANTAGE_T10_4P_MELEE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (Unit* caster = eventInfo.GetActor())
|
||||
{
|
||||
if (caster->GetTypeId() != TYPEID_PLAYER || caster->getClass() != CLASS_DEATH_KNIGHT)
|
||||
return false;
|
||||
|
||||
for (uint8 i = 0; i < MAX_RUNES; ++i)
|
||||
if (caster->ToPlayer()->GetRuneCooldown(i) == 0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_dk_advantage_t10_4p_AuraScript::CheckProc);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_dk_advantage_t10_4p_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 50462 - Anti-Magic Shell (on raid member)
|
||||
class spell_dk_anti_magic_shell_raid : public SpellScriptLoader
|
||||
{
|
||||
@@ -919,6 +1062,52 @@ class spell_dk_improved_blood_presence : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 63611 - Improved Blood Presence Triggered
|
||||
class spell_dk_improved_blood_presence_triggered : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dk_improved_blood_presence_triggered() : SpellScriptLoader("spell_dk_improved_blood_presence_triggered") { }
|
||||
|
||||
class spell_dk_improved_blood_presence_triggered_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dk_improved_blood_presence_triggered_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_DK_IMPROVED_BLOOD_PRESENCE_HEAL))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (eventInfo.GetActor()->GetTypeId() == TYPEID_PLAYER)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
if (DamageInfo* dmgInfo = eventInfo.GetDamageInfo())
|
||||
eventInfo.GetActor()->CastCustomSpell(SPELL_DK_IMPROVED_BLOOD_PRESENCE_HEAL, SPELLVALUE_BASE_POINT0, CalculatePct(int32(dmgInfo->GetDamage()), aurEff->GetAmount()),
|
||||
eventInfo.GetActor(), true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_dk_improved_blood_presence_triggered_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_dk_improved_blood_presence_triggered_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_dk_improved_blood_presence_triggered_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// -50384 - Improved Frost Presence
|
||||
class spell_dk_improved_frost_presence : public SpellScriptLoader
|
||||
{
|
||||
@@ -2006,6 +2195,8 @@ public:
|
||||
|
||||
void AddSC_deathknight_spell_scripts()
|
||||
{
|
||||
new spell_dk_acclimation();
|
||||
new spell_dk_advantage_t10_4p();
|
||||
new spell_dk_anti_magic_shell_raid();
|
||||
new spell_dk_anti_magic_shell_self();
|
||||
new spell_dk_anti_magic_zone();
|
||||
@@ -2022,6 +2213,7 @@ void AddSC_deathknight_spell_scripts()
|
||||
new spell_dk_ghoul_explode();
|
||||
new spell_dk_icebound_fortitude();
|
||||
new spell_dk_improved_blood_presence();
|
||||
new spell_dk_improved_blood_presence_triggered();
|
||||
new spell_dk_improved_frost_presence();
|
||||
new spell_dk_improved_unholy_presence();
|
||||
new spell_dk_pestilence();
|
||||
|
||||
@@ -31,6 +31,11 @@ enum DruidSpells
|
||||
{
|
||||
SPELL_DRUID_BEAR_FORM_PASSIVE = 1178,
|
||||
SPELL_DRUID_DIRE_BEAR_FORM_PASSIVE = 9635,
|
||||
SPELL_DRUID_FORMS_TRINKET_BEAR = 37340,
|
||||
SPELL_DRUID_FORMS_TRINKET_CAT = 37341,
|
||||
SPELL_DRUID_FORMS_TRINKET_MOONKIN = 37343,
|
||||
SPELL_DRUID_FORMS_TRINKET_NONE = 37344,
|
||||
SPELL_DRUID_FORMS_TRINKET_TREE = 37342,
|
||||
SPELL_DRUID_ENRAGE = 5229,
|
||||
SPELL_DRUID_ENRAGE_MOD_DAMAGE = 51185,
|
||||
SPELL_DRUID_ENRAGED_DEFENSE = 70725,
|
||||
@@ -48,6 +53,8 @@ enum DruidSpells
|
||||
SPELL_DRUID_NATURES_SPLENDOR = 57865,
|
||||
SPELL_DRUID_SURVIVAL_INSTINCTS = 50322,
|
||||
SPELL_DRUID_SAVAGE_ROAR = 62071,
|
||||
SPELL_DRUID_T9_FERAL_RELIC_BEAR = 67354,
|
||||
SPELL_DRUID_T9_FERAL_RELIC_CAT = 67355,
|
||||
SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178
|
||||
};
|
||||
|
||||
@@ -197,6 +204,91 @@ class spell_dru_enrage : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 37336 - Druid Forms Trinket
|
||||
class spell_dru_forms_trinket : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dru_forms_trinket() : SpellScriptLoader("spell_dru_forms_trinket") { }
|
||||
|
||||
class spell_dru_forms_trinket_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dru_forms_trinket_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_FORMS_TRINKET_BEAR) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DRUID_FORMS_TRINKET_CAT) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DRUID_FORMS_TRINKET_MOONKIN) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DRUID_FORMS_TRINKET_NONE) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DRUID_FORMS_TRINKET_TREE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
Unit* target = eventInfo.GetActor();
|
||||
|
||||
switch (target->GetShapeshiftForm())
|
||||
{
|
||||
case FORM_BEAR:
|
||||
case FORM_DIREBEAR:
|
||||
case FORM_CAT:
|
||||
case FORM_MOONKIN:
|
||||
case FORM_NONE:
|
||||
case FORM_TREE:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
Unit* target = eventInfo.GetActor();
|
||||
uint32 triggerspell = 0;
|
||||
|
||||
switch (target->GetShapeshiftForm())
|
||||
{
|
||||
case FORM_BEAR:
|
||||
case FORM_DIREBEAR:
|
||||
triggerspell = SPELL_DRUID_FORMS_TRINKET_BEAR;
|
||||
break;
|
||||
case FORM_CAT:
|
||||
triggerspell = SPELL_DRUID_FORMS_TRINKET_CAT;
|
||||
break;
|
||||
case FORM_MOONKIN:
|
||||
triggerspell = SPELL_DRUID_FORMS_TRINKET_MOONKIN;
|
||||
break;
|
||||
case FORM_NONE:
|
||||
triggerspell = SPELL_DRUID_FORMS_TRINKET_NONE;
|
||||
break;
|
||||
case FORM_TREE:
|
||||
triggerspell = SPELL_DRUID_FORMS_TRINKET_TREE;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
target->CastSpell(target, triggerspell, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_dru_forms_trinket_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_dru_forms_trinket_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_dru_forms_trinket_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 54846 - Glyph of Starfire
|
||||
class spell_dru_glyph_of_starfire : public SpellScriptLoader
|
||||
{
|
||||
@@ -1079,6 +1171,77 @@ class spell_dru_typhoon : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 67353 - T9 Feral Relic (Idol of Mutilation)
|
||||
class spell_dru_t9_feral_relic : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dru_t9_feral_relic() : SpellScriptLoader("spell_dru_t9_feral_relic") { }
|
||||
|
||||
class spell_dru_t9_feral_relic_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dru_t9_feral_relic_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_T9_FERAL_RELIC_BEAR) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DRUID_T9_FERAL_RELIC_CAT))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
Unit* target = eventInfo.GetActor();
|
||||
|
||||
switch (target->GetShapeshiftForm())
|
||||
{
|
||||
case FORM_BEAR:
|
||||
case FORM_DIREBEAR:
|
||||
case FORM_CAT:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
uint32 triggerspell = 0;
|
||||
|
||||
Unit* target = eventInfo.GetActor();
|
||||
|
||||
switch (target->GetShapeshiftForm())
|
||||
{
|
||||
case FORM_BEAR:
|
||||
case FORM_DIREBEAR:
|
||||
triggerspell = SPELL_DRUID_T9_FERAL_RELIC_BEAR;
|
||||
break;
|
||||
case FORM_CAT:
|
||||
triggerspell = SPELL_DRUID_T9_FERAL_RELIC_CAT;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
target->CastSpell(target, triggerspell, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_dru_t9_feral_relic_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_dru_t9_feral_relic_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_dru_t9_feral_relic_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 70691 - Item T10 Restoration 4P Bonus
|
||||
class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader
|
||||
{
|
||||
@@ -1209,6 +1372,7 @@ void AddSC_druid_spell_scripts()
|
||||
new spell_dru_bear_form_passive();
|
||||
new spell_dru_dash();
|
||||
new spell_dru_enrage();
|
||||
new spell_dru_forms_trinket();
|
||||
new spell_dru_glyph_of_starfire();
|
||||
new spell_dru_idol_lifebloom();
|
||||
new spell_dru_innervate();
|
||||
@@ -1230,6 +1394,7 @@ void AddSC_druid_spell_scripts()
|
||||
new spell_dru_flight_form();
|
||||
new spell_dru_tiger_s_fury();
|
||||
new spell_dru_typhoon();
|
||||
new spell_dru_t9_feral_relic();
|
||||
new spell_dru_t10_restoration_4p_bonus();
|
||||
new spell_dru_wild_growth();
|
||||
}
|
||||
|
||||
@@ -430,6 +430,61 @@ class spell_gen_bandage : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// Blood Reserve - 64568
|
||||
enum BloodReserve
|
||||
{
|
||||
SPELL_GEN_BLOOD_RESERVE_AURA = 64568,
|
||||
SPELL_GEN_BLOOD_RESERVE_HEAL = 64569
|
||||
};
|
||||
|
||||
class spell_gen_blood_reserve : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_gen_blood_reserve() : SpellScriptLoader("spell_gen_blood_reserve") { }
|
||||
|
||||
class spell_gen_blood_reserve_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_gen_blood_reserve_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_GEN_BLOOD_RESERVE_HEAL))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (DamageInfo* dmgInfo = eventInfo.GetDamageInfo())
|
||||
if (Unit* caster = eventInfo.GetActionTarget())
|
||||
if (caster->HealthBelowPctDamaged(35, dmgInfo->GetDamage()))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
Unit* caster = eventInfo.GetActionTarget();
|
||||
caster->CastCustomSpell(SPELL_GEN_BLOOD_RESERVE_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), caster, TRIGGERED_FULL_MASK, nullptr, aurEff);
|
||||
caster->RemoveAura(SPELL_GEN_BLOOD_RESERVE_AURA);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_gen_blood_reserve_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_gen_blood_reserve_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_gen_blood_reserve_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
enum Bonked
|
||||
{
|
||||
SPELL_BONKED = 62991,
|
||||
@@ -4199,6 +4254,7 @@ void AddSC_generic_spell_scripts()
|
||||
new spell_gen_aura_service_uniform();
|
||||
new spell_gen_av_drekthar_presence();
|
||||
new spell_gen_bandage();
|
||||
new spell_gen_blood_reserve();
|
||||
new spell_gen_bonked();
|
||||
new spell_gen_break_shield("spell_gen_break_shield");
|
||||
new spell_gen_break_shield("spell_gen_tournament_counterattack");
|
||||
|
||||
@@ -51,9 +51,11 @@ enum HunterSpells
|
||||
SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED = 54114,
|
||||
SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF = 55711,
|
||||
SPELL_HUNTER_PET_CARRION_FEEDER_TRIGGERED = 54045,
|
||||
SPELL_HUNTER_PIERCING_SHOTS = 63468,
|
||||
SPELL_HUNTER_READINESS = 23989,
|
||||
SPELL_HUNTER_SNIPER_TRAINING_R1 = 53302,
|
||||
SPELL_HUNTER_SNIPER_TRAINING_BUFF_R1 = 64418,
|
||||
SPELL_HUNTER_T9_4P_GREATNESS = 68130,
|
||||
SPELL_HUNTER_VICIOUS_VIPER = 61609,
|
||||
SPELL_HUNTER_VIPER_ATTACK_SPEED = 60144,
|
||||
SPELL_DRAENEI_GIFT_OF_THE_NAARU = 59543
|
||||
@@ -704,6 +706,63 @@ class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -53234 - Piercing Shots
|
||||
class spell_hun_piercing_shots : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_hun_piercing_shots() : SpellScriptLoader("spell_hun_piercing_shots") { }
|
||||
|
||||
class spell_hun_piercing_shots_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_hun_piercing_shots_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_PIERCING_SHOTS))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (eventInfo.GetActionTarget())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
Unit* caster = eventInfo.GetActor();
|
||||
Unit* target = eventInfo.GetActionTarget();
|
||||
|
||||
if (DamageInfo* dmgInfo = eventInfo.GetDamageInfo())
|
||||
{
|
||||
SpellInfo const* piercingShots = sSpellMgr->AssertSpellInfo(SPELL_HUNTER_PIERCING_SHOTS);
|
||||
int32 duration = piercingShots->GetMaxDuration();
|
||||
uint32 amplitude = piercingShots->Effects[EFFECT_0].Amplitude;
|
||||
uint32 dmg = dmgInfo->GetDamage();
|
||||
|
||||
uint32 bp = CalculatePct(int32(dmg), aurEff->GetAmount()) / (duration / int32(amplitude));
|
||||
bp += target->GetRemainingPeriodicAmount(target->GetGUID(), SPELL_HUNTER_PIERCING_SHOTS, SPELL_AURA_PERIODIC_DAMAGE);
|
||||
|
||||
caster->CastCustomSpell(SPELL_HUNTER_PIERCING_SHOTS, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_hun_piercing_shots_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_hun_piercing_shots_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_hun_piercing_shots_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 56654, 58882 - Rapid Recuperation
|
||||
class spell_hun_rapid_recuperation : public SpellScriptLoader
|
||||
{
|
||||
@@ -967,6 +1026,51 @@ class spell_hun_target_only_pet_and_owner : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 67151 - T9 4P Bonus
|
||||
class spell_hun_t9_4p_bonus : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_hun_t9_4p_bonus() : SpellScriptLoader("spell_hun_t9_4p_bonus") { }
|
||||
|
||||
class spell_hun_t9_4p_bonus_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_hun_t9_4p_bonus_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_T9_4P_GREATNESS))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (eventInfo.GetActor()->GetTypeId() == TYPEID_PLAYER && eventInfo.GetActor()->ToPlayer()->GetPet())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
Unit* caster = eventInfo.GetActor();
|
||||
|
||||
caster->CastSpell(caster->ToPlayer()->GetPet(), SPELL_HUNTER_T9_4P_GREATNESS, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_hun_t9_4p_bonus_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_hun_t9_4p_bonus_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_hun_t9_4p_bonus_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 60144 - Viper Attack Speed
|
||||
class spell_hun_viper_attack_speed : public SpellScriptLoader
|
||||
{
|
||||
@@ -1025,11 +1129,13 @@ void AddSC_hunter_spell_scripts()
|
||||
new spell_hun_misdirection_proc();
|
||||
new spell_hun_pet_carrion_feeder();
|
||||
new spell_hun_pet_heart_of_the_phoenix();
|
||||
new spell_hun_piercing_shots();
|
||||
new spell_hun_rapid_recuperation();
|
||||
new spell_hun_readiness();
|
||||
new spell_hun_scatter_shot();
|
||||
new spell_hun_sniper_training();
|
||||
new spell_hun_tame_beast();
|
||||
new spell_hun_target_only_pet_and_owner();
|
||||
new spell_hun_t9_4p_bonus();
|
||||
new spell_hun_viper_attack_speed();
|
||||
}
|
||||
|
||||
@@ -2731,6 +2731,70 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
enum SoulPreserver
|
||||
{
|
||||
SPELL_SOUL_PRESERVER_DRUID = 60512,
|
||||
SPELL_SOUL_PRESERVER_PALADIN = 60513,
|
||||
SPELL_SOUL_PRESERVER_PRIEST = 60514,
|
||||
SPELL_SOUL_PRESERVER_SHAMAN = 60515,
|
||||
};
|
||||
|
||||
class spell_item_soul_preserver : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_soul_preserver() : SpellScriptLoader("spell_item_soul_preserver") { }
|
||||
|
||||
class spell_item_soul_preserver_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_soul_preserver_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SOUL_PRESERVER_DRUID) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_SOUL_PRESERVER_PALADIN) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_SOUL_PRESERVER_PRIEST) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_SOUL_PRESERVER_SHAMAN))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
Unit* caster = eventInfo.GetActor();
|
||||
|
||||
switch (caster->getClass())
|
||||
{
|
||||
case CLASS_DRUID:
|
||||
caster->CastSpell(caster, SPELL_SOUL_PRESERVER_DRUID, true, nullptr, aurEff);
|
||||
break;
|
||||
case CLASS_PALADIN:
|
||||
caster->CastSpell(caster, SPELL_SOUL_PRESERVER_PALADIN, true, nullptr, aurEff);
|
||||
break;
|
||||
case CLASS_PRIEST:
|
||||
caster->CastSpell(caster, SPELL_SOUL_PRESERVER_PRIEST, true, nullptr, aurEff);
|
||||
break;
|
||||
case CLASS_SHAMAN:
|
||||
caster->CastSpell(caster, SPELL_SOUL_PRESERVER_SHAMAN, true, nullptr, aurEff);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_item_soul_preserver_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_item_soul_preserver_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_item_toy_train_set_pulse : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -2768,6 +2832,336 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
enum DeathChoiceSpells
|
||||
{
|
||||
SPELL_DEATH_CHOICE_NORMAL_AURA = 67702,
|
||||
SPELL_DEATH_CHOICE_NORMAL_AGILITY = 67703,
|
||||
SPELL_DEATH_CHOICE_NORMAL_STRENGTH = 67708,
|
||||
SPELL_DEATH_CHOICE_HEROIC_AURA = 67771,
|
||||
SPELL_DEATH_CHOICE_HEROIC_AGILITY = 67772,
|
||||
SPELL_DEATH_CHOICE_HEROIC_STRENGTH = 67773
|
||||
};
|
||||
|
||||
class spell_item_death_choice : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_death_choice() : SpellScriptLoader("spell_item_death_choice") { }
|
||||
|
||||
class spell_item_death_choice_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_death_choice_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_DEATH_CHOICE_NORMAL_STRENGTH) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DEATH_CHOICE_NORMAL_AGILITY) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DEATH_CHOICE_HEROIC_STRENGTH) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DEATH_CHOICE_HEROIC_AGILITY))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
Unit* caster = eventInfo.GetActor();
|
||||
float str = caster->GetStat(STAT_STRENGTH);
|
||||
float agi = caster->GetStat(STAT_AGILITY);
|
||||
|
||||
switch (aurEff->GetId())
|
||||
{
|
||||
case SPELL_DEATH_CHOICE_NORMAL_AURA:
|
||||
{
|
||||
if (str > agi)
|
||||
caster->CastSpell(caster, SPELL_DEATH_CHOICE_NORMAL_STRENGTH, true, nullptr, aurEff);
|
||||
else
|
||||
caster->CastSpell(caster, SPELL_DEATH_CHOICE_NORMAL_AGILITY, true, nullptr, aurEff);
|
||||
break;
|
||||
}
|
||||
case SPELL_DEATH_CHOICE_HEROIC_AURA:
|
||||
{
|
||||
if (str > agi)
|
||||
caster->CastSpell(caster, SPELL_DEATH_CHOICE_HEROIC_STRENGTH, true, nullptr, aurEff);
|
||||
else
|
||||
caster->CastSpell(caster, SPELL_DEATH_CHOICE_HEROIC_AGILITY, true, nullptr, aurEff);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_item_death_choice_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_item_death_choice_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
enum TrinketStackSpells
|
||||
{
|
||||
SPELL_LIGHTNING_CAPACITOR_AURA = 37657, // Lightning Capacitor
|
||||
SPELL_LIGHTNING_CAPACITOR_STACK = 37658,
|
||||
SPELL_LIGHTNING_CAPACITOR_TRIGGER = 37661,
|
||||
SPELL_THUNDER_CAPACITOR_AURA = 54841, // Thunder Capacitor
|
||||
SPELL_THUNDER_CAPACITOR_STACK = 54842,
|
||||
SPELL_THUNDER_CAPACITOR_TRIGGER = 54843,
|
||||
SPELL_TOC25_CASTER_TRINKET_NORMAL_AURA = 67712, // Item - Coliseum 25 Normal Caster Trinket
|
||||
SPELL_TOC25_CASTER_TRINKET_NORMAL_STACK = 67713,
|
||||
SPELL_TOC25_CASTER_TRINKET_NORMAL_TRIGGER = 67714,
|
||||
SPELL_TOC25_CASTER_TRINKET_HEROIC_AURA = 67758, // Item - Coliseum 25 Heroic Caster Trinket
|
||||
SPELL_TOC25_CASTER_TRINKET_HEROIC_STACK = 67759,
|
||||
SPELL_TOC25_CASTER_TRINKET_HEROIC_TRIGGER = 67760,
|
||||
};
|
||||
|
||||
class spell_item_trinket_stack : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_trinket_stack(char const* scriptName, uint32 stackSpell, uint32 triggerSpell) : SpellScriptLoader(scriptName),
|
||||
_stackSpell(stackSpell), _triggerSpell(triggerSpell)
|
||||
{
|
||||
}
|
||||
|
||||
class spell_item_trinket_stack_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_trinket_stack_AuraScript);
|
||||
|
||||
public:
|
||||
spell_item_trinket_stack_AuraScript(uint32 stackSpell, uint32 triggerSpell) : _stackSpell(stackSpell), _triggerSpell(triggerSpell)
|
||||
{
|
||||
}
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(_stackSpell) || !sSpellMgr->GetSpellInfo(_triggerSpell))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
Unit* caster = eventInfo.GetActor();
|
||||
|
||||
caster->CastSpell(caster, _stackSpell, true, nullptr, aurEff); // cast the stack
|
||||
|
||||
Aura* dummy = caster->GetAura(_stackSpell); // retrieve aura
|
||||
|
||||
//dont do anything if it's not the right amount of stacks;
|
||||
if (!dummy || dummy->GetStackAmount() < aurEff->GetAmount())
|
||||
return;
|
||||
|
||||
// if right amount, remove the aura and cast real trigger
|
||||
caster->RemoveAurasDueToSpell(_stackSpell);
|
||||
if (Unit* target = eventInfo.GetActionTarget())
|
||||
caster->CastSpell(target, _triggerSpell, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_item_trinket_stack_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 _stackSpell;
|
||||
uint32 _triggerSpell;
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_item_trinket_stack_AuraScript(_stackSpell, _triggerSpell);
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 _stackSpell;
|
||||
uint32 _triggerSpell;
|
||||
};
|
||||
|
||||
// 57345 - Darkmoon Card: Greatness
|
||||
enum DarkmoonCardSpells
|
||||
{
|
||||
SPELL_DARKMOON_CARD_STRENGHT = 60229,
|
||||
SPELL_DARKMOON_CARD_AGILITY = 60233,
|
||||
SPELL_DARKMOON_CARD_INTELLECT = 60234,
|
||||
SPELL_DARKMOON_CARD_SPIRIT = 60235,
|
||||
};
|
||||
|
||||
class spell_item_darkmoon_card_greatness : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_darkmoon_card_greatness() : SpellScriptLoader("spell_item_darkmoon_card_greatness") { }
|
||||
|
||||
class spell_item_darkmoon_card_greatness_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_darkmoon_card_greatness_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_DARKMOON_CARD_STRENGHT) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DARKMOON_CARD_AGILITY) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DARKMOON_CARD_INTELLECT) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_DARKMOON_CARD_SPIRIT))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
Unit* caster = eventInfo.GetActor();
|
||||
float str = caster->GetStat(STAT_STRENGTH);
|
||||
float agi = caster->GetStat(STAT_AGILITY);
|
||||
float intl = caster->GetStat(STAT_INTELLECT);
|
||||
float spi = caster->GetStat(STAT_SPIRIT);
|
||||
float stat = 0.0f;
|
||||
|
||||
uint32 spellTrigger = SPELL_DARKMOON_CARD_STRENGHT;
|
||||
|
||||
if (str > stat)
|
||||
{
|
||||
spellTrigger = SPELL_DARKMOON_CARD_STRENGHT;
|
||||
stat = str;
|
||||
}
|
||||
|
||||
if (agi > stat)
|
||||
{
|
||||
spellTrigger = SPELL_DARKMOON_CARD_AGILITY;
|
||||
stat = agi;
|
||||
}
|
||||
|
||||
if (intl > stat)
|
||||
{
|
||||
spellTrigger = SPELL_DARKMOON_CARD_INTELLECT;
|
||||
stat = intl;
|
||||
}
|
||||
|
||||
if (spi > stat)
|
||||
{
|
||||
spellTrigger = SPELL_DARKMOON_CARD_SPIRIT;
|
||||
stat = spi;
|
||||
}
|
||||
|
||||
caster->CastSpell(caster, spellTrigger, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_item_darkmoon_card_greatness_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_item_darkmoon_card_greatness_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 43820 - Amani Charm of the Witch Doctor
|
||||
enum CharmWitchDoctor
|
||||
{
|
||||
SPELL_CHARM_WITCH_DOCTOR_PROC = 43821
|
||||
};
|
||||
|
||||
class spell_item_charm_witch_doctor : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_charm_witch_doctor() : SpellScriptLoader("spell_item_charm_witch_doctor") { }
|
||||
|
||||
class spell_item_charm_witch_doctor_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_charm_witch_doctor_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_CHARM_WITCH_DOCTOR_PROC))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
Unit* caster = eventInfo.GetActor();
|
||||
Unit* target = eventInfo.GetActionTarget();
|
||||
|
||||
if (target)
|
||||
{
|
||||
int32 bp = CalculatePct(target->GetCreateHealth(),aurEff->GetSpellInfo()->Effects[1].CalcValue());
|
||||
caster->CastCustomSpell(target, SPELL_CHARM_WITCH_DOCTOR_PROC, &bp, nullptr, nullptr, true, nullptr, aurEff);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_item_charm_witch_doctor_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_item_charm_witch_doctor_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 27522,40336 - Mana Drain
|
||||
enum ManaDrainSpells
|
||||
{
|
||||
SPELL_MANA_DRAIN_ENERGIZE = 29471,
|
||||
SPELL_MANA_DRAIN_LEECH = 27526
|
||||
};
|
||||
|
||||
class spell_item_mana_drain : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_item_mana_drain() : SpellScriptLoader("spell_item_mana_drain") { }
|
||||
|
||||
class spell_item_mana_drain_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_mana_drain_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_MANA_DRAIN_ENERGIZE)
|
||||
|| !sSpellMgr->GetSpellInfo(SPELL_MANA_DRAIN_LEECH))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
Unit* caster = eventInfo.GetActor();
|
||||
Unit* target = eventInfo.GetActionTarget();
|
||||
|
||||
if (caster->IsAlive())
|
||||
caster->CastSpell(caster, SPELL_MANA_DRAIN_ENERGIZE, true, nullptr, aurEff);
|
||||
|
||||
if (target && target->IsAlive())
|
||||
caster->CastSpell(target, SPELL_MANA_DRAIN_LEECH, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_item_mana_drain_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_item_mana_drain_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_item_spell_scripts()
|
||||
{
|
||||
// 23074 Arcanite Dragonling
|
||||
@@ -2838,5 +3232,14 @@ void AddSC_item_spell_scripts()
|
||||
new spell_item_chicken_cover();
|
||||
new spell_item_muisek_vessel();
|
||||
new spell_item_greatmothers_soulcatcher();
|
||||
new spell_item_soul_preserver();
|
||||
new spell_item_toy_train_set_pulse();
|
||||
new spell_item_death_choice();
|
||||
new spell_item_trinket_stack("spell_item_lightning_capacitor", SPELL_LIGHTNING_CAPACITOR_STACK, SPELL_LIGHTNING_CAPACITOR_TRIGGER);
|
||||
new spell_item_trinket_stack("spell_item_thunder_capacitor", SPELL_THUNDER_CAPACITOR_STACK, SPELL_THUNDER_CAPACITOR_TRIGGER);
|
||||
new spell_item_trinket_stack("spell_item_toc25_normal_caster_trinket", SPELL_TOC25_CASTER_TRINKET_NORMAL_STACK, SPELL_TOC25_CASTER_TRINKET_NORMAL_TRIGGER);
|
||||
new spell_item_trinket_stack("spell_item_toc25_heroic_caster_trinket", SPELL_TOC25_CASTER_TRINKET_HEROIC_STACK, SPELL_TOC25_CASTER_TRINKET_HEROIC_TRIGGER);
|
||||
new spell_item_darkmoon_card_greatness();
|
||||
new spell_item_charm_witch_doctor();
|
||||
new spell_item_mana_drain();
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
enum MageSpells
|
||||
{
|
||||
SPELL_MAGE_BLAZING_SPEED = 31643,
|
||||
SPELL_MAGE_BURNOUT = 29077,
|
||||
SPELL_MAGE_COLD_SNAP = 11958,
|
||||
SPELL_MAGE_FOCUS_MAGIC_PROC = 54648,
|
||||
@@ -116,6 +117,42 @@ class spell_mage_blast_wave : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -31641 - Blazing Speed
|
||||
class spell_mage_blazing_speed : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_mage_blazing_speed() : SpellScriptLoader("spell_mage_blazing_speed") { }
|
||||
|
||||
class spell_mage_blazing_speed_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_mage_blazing_speed_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_BLAZING_SPEED))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
if (Unit* target = eventInfo.GetActionTarget())
|
||||
target->CastSpell(target, SPELL_MAGE_BLAZING_SPEED, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_mage_blazing_speed_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_mage_blazing_speed_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// -44449 - Burnout
|
||||
class spell_mage_burnout : public SpellScriptLoader
|
||||
{
|
||||
@@ -647,6 +684,7 @@ class spell_mage_summon_water_elemental : public SpellScriptLoader
|
||||
void AddSC_mage_spell_scripts()
|
||||
{
|
||||
new spell_mage_blast_wave();
|
||||
new spell_mage_blazing_speed();
|
||||
new spell_mage_burnout();
|
||||
new spell_mage_cold_snap();
|
||||
new spell_mage_fire_frost_ward();
|
||||
|
||||
@@ -37,6 +37,7 @@ enum PaladinSpells
|
||||
SPELL_PALADIN_HOLY_SHOCK_R1 = 20473,
|
||||
SPELL_PALADIN_HOLY_SHOCK_R1_DAMAGE = 25912,
|
||||
SPELL_PALADIN_HOLY_SHOCK_R1_HEALING = 25914,
|
||||
SPELL_PALADIN_ILLUMINATION_ENERGIZE = 20272,
|
||||
|
||||
SPELL_PALADIN_BLESSING_OF_LOWER_CITY_DRUID = 37878,
|
||||
SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PALADIN = 37879,
|
||||
@@ -871,6 +872,61 @@ class spell_pal_holy_shock : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -20210 - Illumination
|
||||
class spell_pal_illumination : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_pal_illumination() : SpellScriptLoader("spell_pal_illumination") { }
|
||||
|
||||
class spell_pal_illumination_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_pal_illumination_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_HOLY_SHOCK_R1_HEALING) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_PALADIN_ILLUMINATION_ENERGIZE) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_PALADIN_HOLY_SHOCK_R1))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
// this script is valid only for the Holy Shock procs of illumination
|
||||
if (eventInfo.GetHealInfo() && eventInfo.GetHealInfo()->GetSpellInfo())
|
||||
{
|
||||
if (eventInfo.GetHealInfo()->GetSpellInfo()->SpellFamilyFlags[1] & 0x00010000)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
Unit* target = eventInfo.GetActor(); // Paladin is the target of the energize
|
||||
|
||||
// proc comes from the Holy Shock heal, need to get mana cost of original spell
|
||||
uint32 originalspellid = sSpellMgr->GetSpellWithRank(SPELL_PALADIN_HOLY_SHOCK_R1, eventInfo.GetHealInfo()->GetSpellInfo()->GetRank());
|
||||
SpellInfo const* originalSpell = sSpellMgr->GetSpellInfo(originalspellid);
|
||||
if (originalSpell && aurEff->GetSpellInfo())
|
||||
{
|
||||
uint32 bp = CalculatePct(originalSpell->CalcPowerCost(target, originalSpell->GetSchoolMask()), aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue());
|
||||
target->CastCustomSpell(SPELL_PALADIN_ILLUMINATION_ENERGIZE, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_pal_illumination_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_pal_illumination_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// Maybe this is incorrect
|
||||
// These spells should always be cast on login, regardless of whether the player has the talent or not
|
||||
|
||||
@@ -1393,6 +1449,7 @@ void AddSC_paladin_spell_scripts()
|
||||
new spell_pal_hand_of_sacrifice();
|
||||
new spell_pal_hand_of_salvation();
|
||||
new spell_pal_holy_shock();
|
||||
new spell_pal_illumination();
|
||||
new spell_pal_improved_aura("spell_pal_improved_concentraction_aura", SPELL_PALADIN_IMPROVED_CONCENTRACTION_AURA);
|
||||
new spell_pal_improved_aura("spell_pal_improved_devotion_aura", SPELL_PALADIN_IMPROVED_DEVOTION_AURA);
|
||||
new spell_pal_improved_aura("spell_pal_sanctified_retribution", SPELL_PALADIN_SANCTIFIED_RETRIBUTION_AURA);
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
enum PriestSpells
|
||||
{
|
||||
SPELL_PRIEST_BLESSED_RECOVERY_R1 = 27813,
|
||||
SPELL_PRIEST_DIVINE_AEGIS = 47753,
|
||||
SPELL_PRIEST_EMPOWERED_RENEW = 63544,
|
||||
SPELL_PRIEST_GLYPH_OF_CIRCLE_OF_HEALING = 55675,
|
||||
@@ -88,6 +89,50 @@ class RaidCheck
|
||||
Unit const* _caster;
|
||||
};
|
||||
|
||||
// -27811 - Blessed Recovery
|
||||
class spell_pri_blessed_recovery : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_pri_blessed_recovery() : SpellScriptLoader("spell_pri_blessed_recovery") { }
|
||||
|
||||
class spell_pri_blessed_recovery_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_pri_blessed_recovery_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_BLESSED_RECOVERY_R1))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
if (DamageInfo* dmgInfo = eventInfo.GetDamageInfo())
|
||||
{
|
||||
if (Unit* target = eventInfo.GetActionTarget())
|
||||
{
|
||||
uint32 triggerSpell = sSpellMgr->GetSpellWithRank(SPELL_PRIEST_BLESSED_RECOVERY_R1, aurEff->GetSpellInfo()->GetRank());
|
||||
uint32 bp = CalculatePct(int32(dmgInfo->GetDamage()), aurEff->GetAmount()) / 3;
|
||||
bp += target->GetRemainingPeriodicAmount(target->GetGUID(), triggerSpell, SPELL_AURA_PERIODIC_HEAL);
|
||||
target->CastCustomSpell(triggerSpell, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_pri_blessed_recovery_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_pri_blessed_recovery_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// -34861 - Circle of Healing
|
||||
class spell_pri_circle_of_healing : public SpellScriptLoader
|
||||
{
|
||||
@@ -869,6 +914,7 @@ class spell_pri_vampiric_touch : public SpellScriptLoader
|
||||
|
||||
void AddSC_priest_spell_scripts()
|
||||
{
|
||||
new spell_pri_blessed_recovery();
|
||||
new spell_pri_circle_of_healing();
|
||||
new spell_pri_divine_aegis();
|
||||
new spell_pri_divine_hymn();
|
||||
|
||||
@@ -43,7 +43,8 @@ enum RogueSpells
|
||||
SPELL_ROGUE_TRICKS_OF_THE_TRADE_PROC = 59628,
|
||||
SPELL_ROGUE_HONOR_AMONG_THIEVES = 51698,
|
||||
SPELL_ROGUE_HONOR_AMONG_THIEVES_PROC = 52916,
|
||||
SPELL_ROGUE_HONOR_AMONG_THIEVES_2 = 51699
|
||||
SPELL_ROGUE_HONOR_AMONG_THIEVES_2 = 51699,
|
||||
SPELL_ROGUE_T10_2P_BONUS = 70804,
|
||||
};
|
||||
|
||||
// 13877, 33735, (check 51211, 65956) - Blade Flurry
|
||||
@@ -843,6 +844,40 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
// 70805 - Rogue T10 2P Bonus -- THIS SHOULD BE REMOVED WITH NEW PROC SYSTEM.
|
||||
class spell_rog_t10_2p_bonus : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_rog_t10_2p_bonus() : SpellScriptLoader("spell_rog_t10_2p_bonus") { }
|
||||
|
||||
class spell_rog_t10_2p_bonus_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_rog_t10_2p_bonus_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_T10_2P_BONUS))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
return eventInfo.GetActor() == eventInfo.GetActionTarget();
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_rog_t10_2p_bonus_AuraScript::CheckProc);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_rog_t10_2p_bonus_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_rogue_spell_scripts()
|
||||
{
|
||||
new spell_rog_blade_flurry();
|
||||
@@ -858,4 +893,5 @@ void AddSC_rogue_spell_scripts()
|
||||
new spell_rog_tricks_of_the_trade_proc();
|
||||
new spell_rog_honor_among_thieves();
|
||||
new spell_rog_honor_among_thieves_proc();
|
||||
new spell_rog_t10_2p_bonus();
|
||||
}
|
||||
|
||||
@@ -48,8 +48,10 @@ enum ShamanSpells
|
||||
SPELL_SHAMAN_ITEM_MANA_SURGE = 23571,
|
||||
SPELL_SHAMAN_LAVA_FLOWS_R1 = 51480,
|
||||
SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1 = 64694,
|
||||
SPELL_SHAMAN_LIGHTNING_SHIELD_R1 = 26364,
|
||||
SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE = 52032,
|
||||
SPELL_SHAMAN_MANA_TIDE_TOTEM = 39609,
|
||||
SPELL_SHAMAN_NATURE_GUARDIAN = 31616,
|
||||
SPELL_SHAMAN_SATED = 57724,
|
||||
SPELL_SHAMAN_STORM_EARTH_AND_FIRE = 51483,
|
||||
SPELL_SHAMAN_TOTEM_EARTHBIND_EARTHGRAB = 64695,
|
||||
@@ -671,7 +673,7 @@ class spell_sha_heroism : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 23551 - Lightning Shield
|
||||
// 23551 - Lightning Shield T2 Bonus
|
||||
class spell_sha_item_lightning_shield : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -706,7 +708,7 @@ class spell_sha_item_lightning_shield : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// 23552 - Lightning Shield
|
||||
// 23552 - Lightning Shield T2 Bonus
|
||||
class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -718,7 +720,7 @@ class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_MANA_SURGE))
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
@@ -753,7 +755,7 @@ class spell_sha_item_mana_surge : public SpellScriptLoader
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE))
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_MANA_SURGE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
@@ -865,6 +867,51 @@ class spell_sha_lava_lash : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -324 - Lightning Shield
|
||||
class spell_sha_lightning_shield : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_sha_lightning_shield() : SpellScriptLoader("spell_sha_lightning_shield") { }
|
||||
|
||||
class spell_sha_lightning_shield_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_sha_lightning_shield_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_LIGHTNING_SHIELD_R1))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (eventInfo.GetActionTarget())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
uint32 triggerSpell = sSpellMgr->GetSpellWithRank(SPELL_SHAMAN_LIGHTNING_SHIELD_R1, aurEff->GetSpellInfo()->GetRank());
|
||||
|
||||
eventInfo.GetActionTarget()->CastSpell(eventInfo.GetActor(), triggerSpell, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_sha_lightning_shield_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_sha_lightning_shield_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_sha_lightning_shield_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 52031, 52033, 52034, 52035, 52036, 58778, 58779, 58780 - Mana Spring Totem
|
||||
class spell_sha_mana_spring_totem : public SpellScriptLoader
|
||||
{
|
||||
@@ -924,6 +971,7 @@ class spell_sha_mana_tide_totem : public SpellScriptLoader
|
||||
void HandleDummy(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
if (Unit* unitTarget = GetHitUnit())
|
||||
{
|
||||
if (unitTarget->getPowerType() == POWER_MANA)
|
||||
@@ -938,6 +986,7 @@ class spell_sha_mana_tide_totem : public SpellScriptLoader
|
||||
caster->CastCustomSpell(unitTarget, SPELL_SHAMAN_MANA_TIDE_TOTEM, &effBasePoints0, NULL, NULL, true, NULL, NULL, GetOriginalCaster()->GetGUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
@@ -952,6 +1001,56 @@ class spell_sha_mana_tide_totem : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -30881 - Nature's Guardian
|
||||
class spell_sha_nature_guardian : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_sha_nature_guardian() : SpellScriptLoader("spell_sha_nature_guardian") { }
|
||||
|
||||
class spell_sha_nature_guardian_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_sha_nature_guardian_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_NATURE_GUARDIAN))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
int32 healthpct = aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue(); // %s2 - the 30% threshold for health
|
||||
|
||||
if (Unit* target = eventInfo.GetActionTarget())
|
||||
{
|
||||
if (target->HealthBelowPctDamaged(healthpct, eventInfo.GetDamageInfo()->GetDamage()))
|
||||
{
|
||||
|
||||
uint32 bp = CalculatePct(target->GetMaxHealth(), aurEff->GetAmount());
|
||||
target->CastCustomSpell(SPELL_SHAMAN_NATURE_GUARDIAN, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff);
|
||||
|
||||
// Threat reduction is around 10% confirmed in retail and from wiki
|
||||
Unit* attacker = eventInfo.GetActor();
|
||||
if (attacker->IsAlive())
|
||||
attacker->getThreatManager().modifyThreatPercent(target, -10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_sha_nature_guardian_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_sha_nature_guardian_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 6495 - Sentry Totem
|
||||
class spell_sha_sentry_totem : public SpellScriptLoader
|
||||
{
|
||||
@@ -1085,8 +1184,10 @@ void AddSC_shaman_spell_scripts()
|
||||
new spell_sha_item_mana_surge();
|
||||
new spell_sha_item_t10_elemental_2p_bonus();
|
||||
new spell_sha_lava_lash();
|
||||
new spell_sha_lightning_shield();
|
||||
new spell_sha_mana_spring_totem();
|
||||
new spell_sha_mana_tide_totem();
|
||||
new spell_sha_nature_guardian();
|
||||
new spell_sha_sentry_totem();
|
||||
new spell_sha_thunderstorm();
|
||||
new spell_sha_totemic_mastery();
|
||||
|
||||
@@ -50,6 +50,12 @@ enum WarlockSpells
|
||||
SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2 = 60956,
|
||||
SPELL_WARLOCK_LIFE_TAP_ENERGIZE = 31818,
|
||||
SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2 = 32553,
|
||||
SPELL_WARLOCK_NETHER_PROTECTION_HOLY = 54370,
|
||||
SPELL_WARLOCK_NETHER_PROTECTION_FIRE = 54371,
|
||||
SPELL_WARLOCK_NETHER_PROTECTION_FROST = 54372,
|
||||
SPELL_WARLOCK_NETHER_PROTECTION_ARCANE = 54373,
|
||||
SPELL_WARLOCK_NETHER_PROTECTION_SHADOW = 54374,
|
||||
SPELL_WARLOCK_NETHER_PROTECTION_NATURE = 54375,
|
||||
SPELL_WARLOCK_SOULSHATTER = 32835,
|
||||
SPELL_WARLOCK_SIPHON_LIFE_HEAL = 63106,
|
||||
SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL = 31117
|
||||
@@ -682,6 +688,95 @@ class spell_warl_life_tap : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
// -30299 - Nether Protection
|
||||
class spell_warl_nether_protection : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_warl_nether_protection() : SpellScriptLoader("spell_warl_nether_protection") { }
|
||||
|
||||
class spell_warl_nether_protection_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_warl_nether_protection_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_NETHER_PROTECTION_HOLY) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_NETHER_PROTECTION_FIRE) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_NETHER_PROTECTION_FROST) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_NETHER_PROTECTION_ARCANE) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_NETHER_PROTECTION_SHADOW) ||
|
||||
!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_NETHER_PROTECTION_NATURE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (eventInfo.GetDamageInfo())
|
||||
{
|
||||
switch (GetFirstSchoolInMask(eventInfo.GetDamageInfo()->GetSchoolMask()))
|
||||
{
|
||||
case SPELL_SCHOOL_HOLY:
|
||||
case SPELL_SCHOOL_FIRE:
|
||||
case SPELL_SCHOOL_NATURE:
|
||||
case SPELL_SCHOOL_FROST:
|
||||
case SPELL_SCHOOL_SHADOW:
|
||||
case SPELL_SCHOOL_ARCANE:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
uint32 triggerspell = 0;
|
||||
|
||||
switch (GetFirstSchoolInMask(eventInfo.GetDamageInfo()->GetSchoolMask()))
|
||||
{
|
||||
case SPELL_SCHOOL_HOLY:
|
||||
triggerspell = SPELL_WARLOCK_NETHER_PROTECTION_HOLY;
|
||||
break;
|
||||
case SPELL_SCHOOL_FIRE:
|
||||
triggerspell = SPELL_WARLOCK_NETHER_PROTECTION_FIRE;
|
||||
break;
|
||||
case SPELL_SCHOOL_NATURE:
|
||||
triggerspell = SPELL_WARLOCK_NETHER_PROTECTION_NATURE;
|
||||
break;
|
||||
case SPELL_SCHOOL_FROST:
|
||||
triggerspell = SPELL_WARLOCK_NETHER_PROTECTION_FROST;
|
||||
break;
|
||||
case SPELL_SCHOOL_SHADOW:
|
||||
triggerspell = SPELL_WARLOCK_NETHER_PROTECTION_SHADOW;
|
||||
break;
|
||||
case SPELL_SCHOOL_ARCANE:
|
||||
triggerspell = SPELL_WARLOCK_NETHER_PROTECTION_ARCANE;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
if (Unit* target = eventInfo.GetActionTarget())
|
||||
target->CastSpell(target, triggerspell, true, nullptr, aurEff);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_warl_nether_protection_AuraScript::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_warl_nether_protection_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_warl_nether_protection_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 18541 - Ritual of Doom Effect
|
||||
class spell_warl_ritual_of_doom_effect : public SpellScriptLoader
|
||||
{
|
||||
@@ -917,6 +1012,7 @@ void AddSC_warlock_spell_scripts()
|
||||
new spell_warl_haunt();
|
||||
new spell_warl_health_funnel();
|
||||
new spell_warl_life_tap();
|
||||
new spell_warl_nether_protection();
|
||||
new spell_warl_ritual_of_doom_effect();
|
||||
new spell_warl_seed_of_corruption();
|
||||
new spell_warl_shadow_ward();
|
||||
|
||||
Reference in New Issue
Block a user