diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/SpellMgr.h | 7 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_paladin.cpp | 107 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 65 |
3 files changed, 21 insertions, 158 deletions
diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 33a07b0085d..798b2753710 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -1110,13 +1110,16 @@ class SpellMgr return spell_id; } - uint32 GetSpellWithRank(uint32 spell_id, uint32 rank) const + // not strict check returns provided spell if rank not avalible + uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict = false) const { if (SpellChainNode const* node = GetSpellChainNode(spell_id)) { if (rank != node->rank) - return GetSpellWithRank(node->rank < rank ? node->next : node->prev, rank); + return GetSpellWithRank(node->rank < rank ? node->next : node->prev, rank, strict); } + else if (strict && rank > 1) + return 0; return spell_id; } diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index 7f81f568676..970923c6a37 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -28,24 +28,6 @@ enum PaladinSpells PALADIN_SPELL_HOLY_SHOCK_R1 = 20473, PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE = 25912, PALADIN_SPELL_HOLY_SHOCK_R1_HEALING = 25914, - PALADIN_SPELL_HOLY_SHOCK_R2 = 20929, - PALADIN_SPELL_HOLY_SHOCK_R2_DAMAGE = 25911, - PALADIN_SPELL_HOLY_SHOCK_R2_HEALING = 25913, - PALADIN_SPELL_HOLY_SHOCK_R3 = 20930, - PALADIN_SPELL_HOLY_SHOCK_R3_DAMAGE = 25902, - PALADIN_SPELL_HOLY_SHOCK_R3_HEALING = 25903, - PALADIN_SPELL_HOLY_SHOCK_R4 = 27174, - PALADIN_SPELL_HOLY_SHOCK_R4_DAMAGE = 27176, - PALADIN_SPELL_HOLY_SHOCK_R4_HEALING = 27175, - PALADIN_SPELL_HOLY_SHOCK_R5 = 33072, - PALADIN_SPELL_HOLY_SHOCK_R5_DAMAGE = 33073, - PALADIN_SPELL_HOLY_SHOCK_R5_HEALING = 33074, - PALADIN_SPELL_HOLY_SHOCK_R6 = 48824, - PALADIN_SPELL_HOLY_SHOCK_R6_DAMAGE = 48822, - PALADIN_SPELL_HOLY_SHOCK_R6_HEALING = 48820, - PALADIN_SPELL_HOLY_SHOCK_R7 = 48825, - PALADIN_SPELL_HOLY_SHOCK_R7_DAMAGE = 48823, - PALADIN_SPELL_HOLY_SHOCK_R7_HEALING = 48821, SPELL_BLESSING_OF_LOWER_CITY_DRUID = 37878, SPELL_BLESSING_OF_LOWER_CITY_PALADIN = 37879, @@ -104,51 +86,14 @@ class spell_pal_holy_shock_SpellScript : public SpellScript { if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R1)) return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R1_HEALING)) + // can't use other spell than holy shock due to spell_ranks dependency + if (spellmgr.GetFirstSpellInChain(PALADIN_SPELL_HOLY_SHOCK_R1) != spellmgr.GetFirstSpellInChain(spellEntry->Id)) return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R2)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R2_DAMAGE)) + uint8 rank = spellmgr.GetSpellRank(spellEntry->Id); + if (!spellmgr.GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE, rank, true)) return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R2_HEALING)) - return false; - - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R3)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R3_DAMAGE)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R3_HEALING)) - return false; - - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R4)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R4_DAMAGE)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R4_HEALING)) - return false; - - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R5)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R5_DAMAGE)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R5_HEALING)) - return false; - - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R6)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R6_DAMAGE)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R6_HEALING)) - return false; - - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R7)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R7_DAMAGE)) - return false; - if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R7_HEALING)) + if (!spellmgr.GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_HEALING, rank, true)) return false; return true; @@ -160,48 +105,12 @@ class spell_pal_holy_shock_SpellScript : public SpellScript { Unit *caster = GetCaster(); - int hurt = 0; - int heal = 0; - - switch(GetSpellInfo()->Id) - { - case PALADIN_SPELL_HOLY_SHOCK_R1: - hurt = PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE; - heal = PALADIN_SPELL_HOLY_SHOCK_R1_HEALING; - break; - case PALADIN_SPELL_HOLY_SHOCK_R2: - hurt = PALADIN_SPELL_HOLY_SHOCK_R2_DAMAGE; - heal = PALADIN_SPELL_HOLY_SHOCK_R2_HEALING; - break; - case PALADIN_SPELL_HOLY_SHOCK_R3: - hurt = PALADIN_SPELL_HOLY_SHOCK_R3_DAMAGE; - heal = PALADIN_SPELL_HOLY_SHOCK_R3_HEALING; - break; - case PALADIN_SPELL_HOLY_SHOCK_R4: - hurt = PALADIN_SPELL_HOLY_SHOCK_R4_DAMAGE; - heal = PALADIN_SPELL_HOLY_SHOCK_R4_HEALING; - break; - case PALADIN_SPELL_HOLY_SHOCK_R5: - hurt = PALADIN_SPELL_HOLY_SHOCK_R5_DAMAGE; - heal = PALADIN_SPELL_HOLY_SHOCK_R5_HEALING; - break; - case PALADIN_SPELL_HOLY_SHOCK_R6: - hurt = PALADIN_SPELL_HOLY_SHOCK_R6_DAMAGE; - heal = PALADIN_SPELL_HOLY_SHOCK_R6_HEALING; - break; - case PALADIN_SPELL_HOLY_SHOCK_R7: - hurt = PALADIN_SPELL_HOLY_SHOCK_R7_DAMAGE; - heal = PALADIN_SPELL_HOLY_SHOCK_R7_HEALING; - break; - default: - sLog.outError("spell_pal_holy_shock_SpellScript::HandleDummy: Spell %u not handled in HS",GetSpellInfo()->Id); - return; - } + uint8 rank = spellmgr.GetSpellRank(GetSpellInfo()->Id); if (caster->IsFriendlyTo(unitTarget)) - caster->CastSpell(unitTarget, heal, true, 0); + caster->CastSpell(unitTarget, spellmgr.GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_HEALING, rank), true, 0); else - caster->CastSpell(unitTarget, hurt, true, 0); + caster->CastSpell(unitTarget, spellmgr.GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE, rank), true, 0); } } diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 4e161091f43..c78efc15a22 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -28,15 +28,6 @@ enum PriestSpells PRIEST_SPELL_PENANCE_R1 = 47540, PRIEST_SPELL_PENANCE_R1_DAMAGE = 47758, PRIEST_SPELL_PENANCE_R1_HEAL = 47757, - PRIEST_SPELL_PENANCE_R2 = 53005, - PRIEST_SPELL_PENANCE_R2_DAMAGE = 53001, - PRIEST_SPELL_PENANCE_R2_HEAL = 52986, - PRIEST_SPELL_PENANCE_R3 = 53006, - PRIEST_SPELL_PENANCE_R3_DAMAGE = 53002, - PRIEST_SPELL_PENANCE_R3_HEAL = 52987, - PRIEST_SPELL_PENANCE_R4 = 53007, - PRIEST_SPELL_PENANCE_R4_DAMAGE = 53003, - PRIEST_SPELL_PENANCE_R4_HEAL = 52988, }; class spell_pri_penance_SpellScript : public SpellScript @@ -45,30 +36,14 @@ class spell_pri_penance_SpellScript : public SpellScript { if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R1)) return false; - if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R1_DAMAGE)) - return false; - if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R1_HEAL)) - return false; - - if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R2)) - return false; - if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R2_DAMAGE)) - return false; - if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R2_HEAL)) + // can't use other spell than this penance due to spell_ranks dependency + if (spellmgr.GetFirstSpellInChain(PRIEST_SPELL_PENANCE_R1) != spellmgr.GetFirstSpellInChain(spellEntry->Id)) return false; - if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R3)) - return false; - if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R3_DAMAGE)) - return false; - if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R3_HEAL)) - return false; - - if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R4)) - return false; - if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R4_DAMAGE)) + uint8 rank = spellmgr.GetSpellRank(spellEntry->Id); + if (!spellmgr.GetSpellWithRank(PRIEST_SPELL_PENANCE_R1_DAMAGE, rank, true)) return false; - if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R4_HEAL)) + if (!spellmgr.GetSpellWithRank(PRIEST_SPELL_PENANCE_R1_HEAL, rank, true)) return false; return true; @@ -81,37 +56,13 @@ class spell_pri_penance_SpellScript : public SpellScript return; Unit *caster = GetCaster(); - SpellEntry const *spellInfo = GetSpellInfo(); - int hurt = 0; - int heal = 0; - switch(spellInfo->Id) - { - case PRIEST_SPELL_PENANCE_R1: - hurt = PRIEST_SPELL_PENANCE_R1_DAMAGE; - heal = PRIEST_SPELL_PENANCE_R1_HEAL; - break; - case PRIEST_SPELL_PENANCE_R2: - hurt = PRIEST_SPELL_PENANCE_R2_DAMAGE; - heal = PRIEST_SPELL_PENANCE_R2_HEAL; - break; - case PRIEST_SPELL_PENANCE_R3: - hurt = PRIEST_SPELL_PENANCE_R3_DAMAGE; - heal = PRIEST_SPELL_PENANCE_R3_HEAL; - break; - case PRIEST_SPELL_PENANCE_R4: - hurt = PRIEST_SPELL_PENANCE_R4_DAMAGE; - heal = PRIEST_SPELL_PENANCE_R4_HEAL; - break; - default: - sLog.outError("spell_pri_penance_SpellScript::HandleDummy: Spell %u Penance need set correct heal/damage spell", spellInfo->Id); - return; - } + uint8 rank = spellmgr.GetSpellRank(GetSpellInfo()->Id); if (caster->IsFriendlyTo(unitTarget)) - caster->CastSpell(unitTarget, heal, false, 0); + caster->CastSpell(unitTarget, spellmgr.GetSpellWithRank(PRIEST_SPELL_PENANCE_R1_HEAL, rank), false, 0); else - caster->CastSpell(unitTarget, hurt, false, 0); + caster->CastSpell(unitTarget, spellmgr.GetSpellWithRank(PRIEST_SPELL_PENANCE_R1_DAMAGE, rank), false, 0); } void Register() |