aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellScript.cpp18
-rw-r--r--src/server/game/Spells/SpellScript.h26
-rw-r--r--src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp6
-rw-r--r--src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp2
-rw-r--r--src/server/scripts/Spells/spell_azerite.cpp5
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp11
-rw-r--r--src/server/scripts/Spells/spell_druid.cpp5
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp12
-rw-r--r--src/server/scripts/Spells/spell_item.cpp10
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp8
-rw-r--r--src/server/scripts/Spells/spell_paladin.cpp2
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp23
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp2
-rw-r--r--src/server/scripts/Spells/spell_rogue.cpp4
-rw-r--r--src/server/scripts/Spells/spell_shaman.cpp15
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp2
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp10
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