diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_shaman.cpp | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index b592bdcaf8e..f6af68eb0c9 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -21,15 +21,13 @@ * Scriptnames of files in this file should be prefixed with "spell_sha_". */ -#include "Player.h" #include "ScriptMgr.h" -#include "GridNotifiers.h" +#include "CellImpl.h" #include "GridNotifiersImpl.h" -#include "Unit.h" +#include "Player.h" #include "SpellScript.h" #include "SpellHistory.h" #include "SpellAuraEffects.h" -#include "CellImpl.h" enum ShamanSpells { @@ -260,15 +258,6 @@ class spell_sha_earth_shield : public SpellScriptLoader } }; -uint32 const ElementalBlastBuffSpells[] = -{ - SPELL_SHAMAN_ELEMENTAL_BLAST_CRIT, - SPELL_SHAMAN_ELEMENTAL_BLAST_HASTE, - SPELL_SHAMAN_ELEMENTAL_BLAST_MASTERY, - SPELL_SHAMAN_ELEMENTAL_BLAST_MULTISTRIKE, - SPELL_SHAMAN_ELEMENTAL_BLAST_AGILITY, -}; - // 117014 - Elemental Blast class spell_sha_elemental_blast : public SpellScriptLoader { @@ -279,14 +268,18 @@ public: { PrepareSpellScript(spell_sha_elemental_blast_SpellScript); - static TRINITY_CONSTEXPR uint32 EnhancementBuffCount = std::extent<decltype(ElementalBlastBuffSpells)>::value; - static TRINITY_CONSTEXPR uint32 BuffCount = EnhancementBuffCount - 1; - bool Validate(SpellInfo const* /*spellInfo*/) override { - for (uint32 i = 0; i < EnhancementBuffCount; ++i) - if (!sSpellMgr->GetSpellInfo(ElementalBlastBuffSpells[i])) - return false; + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ELEMENTAL_BLAST_CRIT)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ELEMENTAL_BLAST_HASTE)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ELEMENTAL_BLAST_MASTERY)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ELEMENTAL_BLAST_MULTISTRIKE)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ELEMENTAL_BLAST_AGILITY)) + return false; if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ELEMENTAL_BLAST_SPIRIT)) return false; return true; @@ -300,9 +293,14 @@ public: void TriggerBuff() { Player* caster = GetCaster()->ToPlayer(); - uint32 possbleSpells = (caster->GetSpecId(caster->GetActiveTalentGroup()) == TALENT_SPEC_SHAMAN_ENHANCEMENT ? EnhancementBuffCount : BuffCount) - 1; - caster->CastSpell(caster, ElementalBlastBuffSpells[urand(0, possbleSpells)], TRIGGERED_FULL_MASK); - if (caster->GetSpecId(caster->GetActiveTalentGroup()) == TALENT_SPEC_SHAMAN_RESTORATION) + uint32 spellId; + if (caster->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_SHAMAN_ENHANCEMENT) + spellId = RAND(SPELL_SHAMAN_ELEMENTAL_BLAST_CRIT, SPELL_SHAMAN_ELEMENTAL_BLAST_HASTE, SPELL_SHAMAN_ELEMENTAL_BLAST_MASTERY, SPELL_SHAMAN_ELEMENTAL_BLAST_MULTISTRIKE, SPELL_SHAMAN_ELEMENTAL_BLAST_AGILITY); + else + spellId = RAND(SPELL_SHAMAN_ELEMENTAL_BLAST_CRIT, SPELL_SHAMAN_ELEMENTAL_BLAST_HASTE, SPELL_SHAMAN_ELEMENTAL_BLAST_MASTERY, SPELL_SHAMAN_ELEMENTAL_BLAST_MULTISTRIKE); + + caster->CastSpell(caster, spellId, TRIGGERED_FULL_MASK); + if (caster->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_SHAMAN_RESTORATION) caster->CastSpell(caster, SPELL_SHAMAN_ELEMENTAL_BLAST_SPIRIT, TRIGGERED_FULL_MASK); } |