aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellMgr.h7
-rw-r--r--src/server/scripts/Spells/spell_paladin.cpp107
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp65
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()