diff options
23 files changed, 110 insertions, 65 deletions
diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index 60f766d41f8..f9eb92a1725 100644 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -52,6 +52,24 @@ bool _SpellScript::_ValidateSpellInfo(uint32 spellId) return true; } +bool _SpellScript::_ValidateSpellEffect(uint32 spellId, SpellEffIndex effectIndex) +{ + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId, DIFFICULTY_NONE); + if (!spellInfo) + { + TC_LOG_ERROR("scripts.spells", "_SpellScript::_ValidateSpellEffect: Spell {} does not exist.", spellId); + return false; + } + + if (spellInfo->GetEffects().size() <= effectIndex) + { + TC_LOG_ERROR("scripts.spells", "_SpellScript::_ValidateSpellEffect: Spell {} does not have EFFECT_{}.", spellId, uint32(effectIndex)); + return false; + } + + return true; +} + void _SpellScript::_Register() { m_currentScriptState = SPELL_SCRIPT_STATE_REGISTRATION; diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h index db41de17c8c..b560a6c296c 100644 --- a/src/server/game/Spells/SpellScript.h +++ b/src/server/game/Spells/SpellScript.h @@ -178,6 +178,17 @@ class TC_GAME_API _SpellScript return _ValidateSpellInfo(std::cbegin(spellIds), std::cend(spellIds)); } + static bool ValidateSpellEffect(std::initializer_list<std::pair<uint32, SpellEffIndex>> effects) + { + return _ValidateSpellEffects(effects.begin(), effects.end()); + } + + template <class T> + static bool ValidateSpellEffect(T const& spellEffects) + { + return _ValidateSpellEffects(std::cbegin(spellEffects), std::cend(spellEffects)); + } + private: template<typename Iterator> static bool _ValidateSpellInfo(Iterator begin, Iterator end) @@ -193,7 +204,22 @@ class TC_GAME_API _SpellScript return allValid; } + template<typename Iterator> + static bool _ValidateSpellEffects(Iterator begin, Iterator end) + { + bool allValid = true; + while (begin != end) + { + if (!_ValidateSpellEffect(begin->first, begin->second)) + allValid = false; + + ++begin; + } + return allValid; + } + static bool _ValidateSpellInfo(uint32 spellId); + static bool _ValidateSpellEffect(uint32 spellId, SpellEffIndex effectIndex); }; // SpellScript interface - enum used for runtime checks of script function calls diff --git a/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp b/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp index 1075a2991db..c6c14c1b914 100644 --- a/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp +++ b/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp @@ -416,10 +416,8 @@ class spell_baleroc_decimating_strike : public SpellScript bool Validate(SpellInfo const* spellInfo) override { - if (spellInfo->GetEffects().size() <= EFFECT_2) - return false; - SpellEffectInfo const& spellEffectInfo = spellInfo->GetEffect(EFFECT_2); - return ValidateSpellInfo({ uint32(spellEffectInfo.CalcValue()) }); + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } }) + && ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_2).CalcValue()) }); } void ChangeDamage() diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp index a73bc730ae3..995e560f597 100644 --- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp +++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp @@ -34,7 +34,8 @@ class spell_ooze_zap : public SpellScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1 && ValidateSpellInfo({ SPELL_OOZE_ZAP }); + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }) + && ValidateSpellInfo({ SPELL_OOZE_ZAP }); } SpellCastResult CheckRequirement() diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 29da69b4b16..e2ca321494e 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -1026,7 +1026,7 @@ class spell_putricide_ooze_tank_protection : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1 + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }) && ValidateSpellInfo({ spellInfo->GetEffect(EFFECT_0).TriggerSpell, spellInfo->GetEffect(EFFECT_1).TriggerSpell }); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index b6d5cbe6ae2..a693250358f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -492,7 +492,8 @@ class spell_rotface_mutated_infection_aura : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_2 && ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_2).CalcValue()) }); + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } }) + && ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_2).CalcValue()) }); } void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index c7f60b6e853..2ffe0a3fbdb 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -1438,7 +1438,7 @@ class spell_frostwarden_handler_focus_fire_aura : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } void PeriodicTick(AuraEffect const* /*aurEff*/) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index b6e0a91fd12..946c5c004f3 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -455,7 +455,7 @@ class spell_ulduar_cancel_stone_grip : public SpellScriptLoader bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } void HandleScript(SpellEffIndex /*effIndex*/) diff --git a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp index 9a0f3bda655..46ca46eecae 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp @@ -248,7 +248,7 @@ class spell_mother_shahraz_saber_lash : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1 + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }) && ValidateSpellInfo({ spellInfo->GetEffect(EFFECT_1).TriggerSpell }); } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp index 31a73111749..bc047abe423 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp @@ -483,7 +483,7 @@ class spell_astromancer_wrath_of_the_astromancer : public AuraScript bool Validate(SpellInfo const* spellInfo) override { return ValidateSpellInfo({ SPELL_WRATH_OF_THE_ASTROMANCER_DOT }) - && spellInfo->GetEffects().size() > EFFECT_1; + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) diff --git a/src/server/scripts/Spells/spell_azerite.cpp b/src/server/scripts/Spells/spell_azerite.cpp index 826ca9f3071..26d0076756e 100644 --- a/src/server/scripts/Spells/spell_azerite.cpp +++ b/src/server/scripts/Spells/spell_azerite.cpp @@ -31,7 +31,7 @@ class spell_azerite_gen_aura_calc_from_2nd_effect_triggered_spell : public AuraS bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1 && ValidateSpellInfo({ spellInfo->GetEffect(EFFECT_1).TriggerSpell }); + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }) && ValidateSpellInfo({ spellInfo->GetEffect(EFFECT_1).TriggerSpell }); } void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) @@ -459,8 +459,7 @@ class spell_item_echoing_blades_damage : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_ECHOING_BLADES_TRAIT }) - && sSpellMgr->AssertSpellInfo(SPELL_ECHOING_BLADES_TRAIT, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_2; + return ValidateSpellEffect({ { SPELL_ECHOING_BLADES_TRAIT, EFFECT_2 } }); } void CalculateDamage(SpellEffIndex /*effIndex*/) diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 904d83d1ecc..12d8add1693 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -128,7 +128,8 @@ public: bool Validate(SpellInfo const* spellInfo) override { - return ValidateSpellInfo({ SPELL_DK_RUNIC_POWER_ENERGIZE, SPELL_DK_VOLATILE_SHIELDING }) && spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellInfo({ SPELL_DK_RUNIC_POWER_ENERGIZE, SPELL_DK_VOLATILE_SHIELDING }) + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } bool Load() override @@ -470,7 +471,7 @@ class spell_dk_death_strike : public SpellScript SPELL_DK_FROST, SPELL_DK_DEATH_STRIKE_OFFHAND }) - && spellInfo->GetEffects().size() > EFFECT_2; + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } }); } void HandleDummy(SpellEffIndex /*effIndex*/) @@ -578,7 +579,7 @@ class spell_dk_ghoul_explode : public SpellScript bool Validate(SpellInfo const* spellInfo) override { - return ValidateSpellInfo({ SPELL_DK_CORPSE_EXPLOSION_TRIGGERED }) && spellInfo->GetEffects().size() > EFFECT_2; + return ValidateSpellInfo({ SPELL_DK_CORPSE_EXPLOSION_TRIGGERED }) && ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } }); } void HandleDamage(SpellEffIndex /*effIndex*/) @@ -716,7 +717,7 @@ class spell_dk_obliteration : public AuraScript bool Validate(SpellInfo const* /*spellInfo*/) override { return ValidateSpellInfo({ SPELL_DK_OBLITERATION, SPELL_DK_OBLITERATION_RUNE_ENERGIZE, SPELL_DK_KILLING_MACHINE_PROC }) - && sSpellMgr->AssertSpellInfo(SPELL_DK_OBLITERATION, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_1; + && ValidateSpellEffect({ { SPELL_DK_OBLITERATION, EFFECT_1 } }); } void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) @@ -857,7 +858,7 @@ class spell_dk_rime : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1 && ValidateSpellInfo({ SPELL_DK_FROST_SCYTHE }); + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }) && ValidateSpellInfo({ SPELL_DK_FROST_SCYTHE }); } bool CheckProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 00146e17e91..8f7c61a5b2c 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -481,8 +481,7 @@ class spell_dru_ferocious_bite : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_DRUID_INCARNATION_KING_OF_THE_JUNGLE }) - && sSpellMgr->AssertSpellInfo(SPELL_DRUID_INCARNATION_KING_OF_THE_JUNGLE, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_1; + return ValidateSpellEffect({ { SPELL_DRUID_INCARNATION_KING_OF_THE_JUNGLE, EFFECT_1 } }); } void HandleHitTargetBurn(SpellEffIndex /*effIndex*/) @@ -1543,7 +1542,7 @@ class spell_dru_wild_growth : public SpellScript bool Validate(SpellInfo const* spellInfo) override { - if (spellInfo->GetEffects().size() <= EFFECT_2 || spellInfo->GetEffect(EFFECT_2).IsEffect() || spellInfo->GetEffect(EFFECT_2).CalcValue() <= 0) + if (!ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } }) || spellInfo->GetEffect(EFFECT_2).IsEffect() || spellInfo->GetEffect(EFFECT_2).CalcValue() <= 0) return false; return true; } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 3176c5704fa..d8f21f94bcc 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -774,7 +774,8 @@ class spell_gen_burning_depths_necrolyte_image : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_2 && ValidateSpellInfo({ static_cast<uint32>(spellInfo->GetEffect(EFFECT_2).CalcValue()) }); + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } }) + && ValidateSpellInfo({ static_cast<uint32>(spellInfo->GetEffect(EFFECT_2).CalcValue()) }); } void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -2019,7 +2020,7 @@ class spell_gen_gift_of_naaru : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/) @@ -2637,7 +2638,7 @@ class spell_gen_oracle_wolvar_reputation : public SpellScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } bool Load() override @@ -3088,7 +3089,7 @@ class spell_gen_remove_on_health_pct : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } void PeriodicTick(AuraEffect const* /*aurEff*/) @@ -4857,7 +4858,8 @@ class spell_gen_face_rage : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return ValidateSpellInfo({ SPELL_FACE_RAGE }) && spellInfo->GetEffects().size() > EFFECT_2; + return ValidateSpellInfo({ SPELL_FACE_RAGE }) + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } }); } void OnRemove(AuraEffect const* /*effect*/, AuraEffectHandleModes /*mode*/) diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 5a305ef0102..048484c893c 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -4151,7 +4151,7 @@ class spell_item_artifical_stamina : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } bool Load() override @@ -4177,7 +4177,7 @@ class spell_item_artifical_damage : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } bool Load() override @@ -4302,7 +4302,7 @@ class spell_item_water_strider : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } void OnRemove(AuraEffect const* /*effect*/, AuraEffectHandleModes /*mode*/) @@ -4609,7 +4609,7 @@ class spell_item_seal_of_darkshire_nobility : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1 + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }) && ValidateSpellInfo({ spellInfo->GetEffect(EFFECT_1).TriggerSpell }); } @@ -4734,7 +4734,7 @@ class spell_item_grips_of_forsaken_sanity : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } bool CheckHealth(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 7edb1cb8102..06c2d85cf9d 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -177,7 +177,7 @@ class spell_mage_arcane_barrage : public SpellScript bool Validate(SpellInfo const* spellInfo) override { return ValidateSpellInfo({ SPELL_MAGE_ARCANE_BARRAGE_R3, SPELL_MAGE_ARCANE_BARRAGE_ENERGIZE }) - && spellInfo->GetEffects().size() > EFFECT_1; + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } void ConsumeArcaneCharges() @@ -242,7 +242,7 @@ class spell_mage_arcane_explosion : public SpellScript if (!ValidateSpellInfo({ SPELL_MAGE_ARCANE_MAGE, SPELL_MAGE_REVERBERATE })) return false; - if (spellInfo->GetEffects().size() <= EFFECT_1) + if (!ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } })) return false; return spellInfo->GetEffect(EFFECT_1).IsEffect(SPELL_EFFECT_SCHOOL_DAMAGE); @@ -403,7 +403,7 @@ class spell_mage_cauterize_AuraScript : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_2 && ValidateSpellInfo + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } }) && ValidateSpellInfo ({ SPELL_MAGE_CAUTERIZE_DOT, SPELL_MAGE_CAUTERIZED, @@ -681,7 +681,7 @@ class spell_mage_flame_on : public AuraScript { return ValidateSpellInfo({ SPELL_MAGE_FIRE_BLAST }) && sSpellCategoryStore.HasRecord(sSpellMgr->AssertSpellInfo(SPELL_MAGE_FIRE_BLAST, DIFFICULTY_NONE)->ChargeCategoryId) - && spellInfo->GetEffects().size() > EFFECT_2; + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } }); } void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index 6fcc75d9297..65c8cf22ddc 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -296,7 +296,7 @@ class spell_pal_awakening : public AuraScript bool Validate(SpellInfo const* spellInfo) override { return ValidateSpellInfo({ SPELL_PALADIN_AVENGING_WRATH }) - && spellInfo->GetEffects().size() >= EFFECT_1; + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index bc2966279e0..a785a1b0eae 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -250,8 +250,7 @@ class spell_pri_atonement : public AuraScript bool Validate(SpellInfo const* spellInfo) override { return ValidateSpellInfo({ SPELL_PRIEST_ATONEMENT_HEAL, SPELL_PRIEST_SINS_OF_THE_MANY }) - && spellInfo->GetEffects().size() > EFFECT_1 - && sSpellMgr->AssertSpellInfo(SPELL_PRIEST_SINS_OF_THE_MANY, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_2; + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 }, { SPELL_PRIEST_SINS_OF_THE_MANY, EFFECT_2 } }); } bool CheckProc(ProcEventInfo& eventInfo) @@ -518,7 +517,7 @@ class spell_pri_guardian_spirit : public AuraScript bool Validate(SpellInfo const* spellInfo) override { - return ValidateSpellInfo({ SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL }) && spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellInfo({ SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL }) && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } bool Load() override @@ -601,8 +600,8 @@ class spell_pri_holy_words : public AuraScript bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo - ({ + return ValidateSpellInfo( + { SPELL_PRIEST_HEAL, SPELL_PRIEST_FLASH_HEAL, SPELL_PRIEST_PRAYER_OF_HEALING, @@ -611,10 +610,12 @@ class spell_pri_holy_words : public AuraScript SPELL_PRIEST_HOLY_WORD_CHASTISE, SPELL_PRIEST_HOLY_WORD_SANCTIFY, SPELL_PRIEST_HOLY_WORD_SERENITY - }) - && sSpellMgr->AssertSpellInfo(SPELL_PRIEST_HOLY_WORD_SERENITY, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_1 - && sSpellMgr->AssertSpellInfo(SPELL_PRIEST_HOLY_WORD_SANCTIFY, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_3 - && sSpellMgr->AssertSpellInfo(SPELL_PRIEST_HOLY_WORD_CHASTISE, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_1; + }) && ValidateSpellEffect( + { + { SPELL_PRIEST_HOLY_WORD_SERENITY, EFFECT_1 }, + { SPELL_PRIEST_HOLY_WORD_SANCTIFY, EFFECT_3 }, + { SPELL_PRIEST_HOLY_WORD_CHASTISE, EFFECT_1 } + }); } void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) @@ -975,7 +976,7 @@ class spell_pri_power_word_radiance : public SpellScript bool Validate(SpellInfo const* spellInfo) override { return ValidateSpellInfo({ SPELL_PRIEST_ATONEMENT, SPELL_PRIEST_ATONEMENT_TRIGGERED, SPELL_PRIEST_TRINITY }) - && spellInfo->GetEffects().size() > EFFECT_3; + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_3 } }); } void OnTargetSelect(std::list<WorldObject*>& targets) @@ -1363,7 +1364,7 @@ class spell_pri_purge_the_wicked_dummy : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { return ValidateSpellInfo({ SPELL_PRIEST_PURGE_THE_WICKED_PERIODIC, SPELL_PRIEST_REVEL_IN_PURITY }) - && sSpellMgr->AssertSpellInfo(SPELL_PRIEST_REVEL_IN_PURITY, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_1; + && ValidateSpellEffect({ { SPELL_PRIEST_REVEL_IN_PURITY, EFFECT_1 } }); } void FilterTargets(std::list<WorldObject*>& targets) diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 51baea50382..4f40b6c8f88 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -1886,7 +1886,7 @@ class spell_quest_portal_with_condition : public SpellScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1 + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }) && ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) }) && sObjectMgr->GetQuestTemplate(uint32(spellInfo->GetEffect(EFFECT_1).CalcValue())); } diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 69be47e8777..ff126c3274e 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -102,7 +102,7 @@ class spell_rog_backstab : public SpellScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_3; + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_3 } }); } void HandleHitDamage(SpellEffIndex /*effIndex*/) @@ -677,7 +677,7 @@ class spell_rog_shadowstrike : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { return ValidateSpellInfo({ SPELL_ROGUE_PREMEDITATION_AURA, SPELL_ROGUE_SLICE_AND_DICE, SPELL_ROGUE_PREMEDITATION_PASSIVE }) - && sSpellMgr->AssertSpellInfo(SPELL_ROGUE_PREMEDITATION_PASSIVE, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_0; + && ValidateSpellEffect({ { SPELL_ROGUE_PREMEDITATION_PASSIVE, EFFECT_0 } }); } SpellCastResult HandleCheckCast() diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 5b889da95f7..6d5872f7437 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -221,7 +221,7 @@ class spell_sha_chain_lightning : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { return ValidateSpellInfo({ SPELL_SHAMAN_CHAIN_LIGHTNING_ENERGIZE, SPELL_SHAMAN_MAELSTROM_CONTROLLER }) - && sSpellMgr->AssertSpellInfo(SPELL_SHAMAN_MAELSTROM_CONTROLLER, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_4; + && ValidateSpellEffect({ { SPELL_SHAMAN_MAELSTROM_CONTROLLER, EFFECT_4 } }); } void HandleScript(SpellEffIndex /*effIndex*/) @@ -245,7 +245,7 @@ class spell_sha_chain_lightning_overload : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { return ValidateSpellInfo({ SPELL_SHAMAN_CHAIN_LIGHTNING_OVERLOAD_ENERGIZE, SPELL_SHAMAN_MAELSTROM_CONTROLLER }) - && sSpellMgr->AssertSpellInfo(SPELL_SHAMAN_MAELSTROM_CONTROLLER, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_5; + && ValidateSpellEffect({ { SPELL_SHAMAN_MAELSTROM_CONTROLLER, EFFECT_5 } }); } void HandleScript(SpellEffIndex /*effIndex*/) @@ -305,7 +305,7 @@ class spell_sha_downpour : public SpellScript bool Validate(SpellInfo const* spellInfo) override { - return spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } void FilterTargets(std::list<WorldObject*>& targets) @@ -475,7 +475,8 @@ class spell_sha_earthquake_tick : public SpellScript bool Validate(SpellInfo const* spellInfo) override { - return ValidateSpellInfo({ SPELL_SHAMAN_EARTHQUAKE_KNOCKING_DOWN }) && spellInfo->GetEffects().size() > EFFECT_1; + return ValidateSpellInfo({ SPELL_SHAMAN_EARTHQUAKE_KNOCKING_DOWN }) + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } void HandleDamageCalc(SpellEffIndex /*effIndex*/) @@ -526,7 +527,7 @@ class spell_sha_elemental_blast : public SpellScript SPELL_SHAMAN_ELEMENTAL_BLAST_MASTERY, SPELL_SHAMAN_ELEMENTAL_BLAST_ENERGIZE, SPELL_SHAMAN_MAELSTROM_CONTROLLER - }) && sSpellMgr->AssertSpellInfo(SPELL_SHAMAN_MAELSTROM_CONTROLLER, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_10; + }) && ValidateSpellEffect({ { SPELL_SHAMAN_MAELSTROM_CONTROLLER, EFFECT_10 } }); } void HandleEnergize(SpellEffIndex /*effIndex*/) @@ -1049,7 +1050,7 @@ class spell_sha_lightning_bolt : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { return ValidateSpellInfo({ SPELL_SHAMAN_LIGHTNING_BOLT_ENERGIZE, SPELL_SHAMAN_MAELSTROM_CONTROLLER }) - && sSpellMgr->AssertSpellInfo(SPELL_SHAMAN_MAELSTROM_CONTROLLER, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_0; + && ValidateSpellEffect({ { SPELL_SHAMAN_MAELSTROM_CONTROLLER, EFFECT_0 } }); } void HandleScript(SpellEffIndex /*effIndex*/) @@ -1073,7 +1074,7 @@ class spell_sha_lightning_bolt_overload : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { return ValidateSpellInfo({ SPELL_SHAMAN_LIGHTNING_BOLT_OVERLOAD_ENERGIZE, SPELL_SHAMAN_MAELSTROM_CONTROLLER }) - && sSpellMgr->AssertSpellInfo(SPELL_SHAMAN_MAELSTROM_CONTROLLER, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_1; + && ValidateSpellEffect({ { SPELL_SHAMAN_MAELSTROM_CONTROLLER, EFFECT_1 } }); } void HandleScript(SpellEffIndex /*effIndex*/) diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 7d2c4c00aab..45722e38267 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -259,7 +259,7 @@ class spell_warl_devour_magic : public SpellScript bool Validate(SpellInfo const* spellInfo) override { return ValidateSpellInfo({ SPELL_WARLOCK_GLYPH_OF_DEMON_TRAINING, SPELL_WARLOCK_DEVOUR_MAGIC_HEAL }) - && spellInfo->GetEffects().size() > EFFECT_1; + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } void OnSuccessfulDispel(SpellEffIndex /*effIndex*/) diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index e445092d2f8..c8036eecd29 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -230,7 +230,7 @@ class spell_warr_colossus_smash : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { return ValidateSpellInfo({ SPELL_WARRIOR_COLOSSUS_SMASH_AURA, SPELL_WARRIOR_IN_FOR_THE_KILL, SPELL_WARRIOR_IN_FOR_THE_KILL_HASTE }) - && sSpellMgr->AssertSpellInfo(SPELL_WARRIOR_IN_FOR_THE_KILL, DIFFICULTY_NONE)->GetEffects().size() > EFFECT_2; + && ValidateSpellEffect({ { SPELL_WARRIOR_IN_FOR_THE_KILL, EFFECT_2 } }); } void HandleHit() @@ -467,7 +467,7 @@ class spell_warr_item_t10_prot_4p_bonus : public AuraScript bool Validate(SpellInfo const* spellInfo) override { return ValidateSpellInfo({ SPELL_WARRIOR_STOICISM }) - && spellInfo->GetEffects().size() > EFFECT_1; + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); } void HandleProc(ProcEventInfo& eventInfo) @@ -587,10 +587,8 @@ class spell_warr_shockwave : public SpellScript bool Validate(SpellInfo const* spellInfo) override { - if (!ValidateSpellInfo({ SPELL_WARRIOR_SHOCKWAVE, SPELL_WARRIOR_SHOCKWAVE_STUN })) - return false; - - return spellInfo->GetEffects().size() > EFFECT_3; + return !ValidateSpellInfo({ SPELL_WARRIOR_SHOCKWAVE, SPELL_WARRIOR_SHOCKWAVE_STUN }) + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_3 } }); } bool Load() override |