*Use spell_ranks table in spell scripts to not duplicate data.
--HG-- branch : trunk
This commit is contained in:
@@ -13940,6 +13940,8 @@ INSERT INTO spell_ranks (`first_spell_id`, `spell_id`, `rank`) VALUES
|
|||||||
-- Penance
|
-- Penance
|
||||||
(47757, 47757, 1),
|
(47757, 47757, 1),
|
||||||
(47757, 52986, 2),
|
(47757, 52986, 2),
|
||||||
|
(47757, 52987, 3),
|
||||||
|
(47757, 52988, 4),
|
||||||
-- Savage Rend
|
-- Savage Rend
|
||||||
(50498, 50498, 1),
|
(50498, 50498, 1),
|
||||||
(50498, 53578, 2),
|
(50498, 53578, 2),
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
DELETE FROM spell_ranks WHERE `spell_id` IN (52987, 52988);
|
||||||
|
INSERT INTO spell_ranks (`first_spell_id`, `spell_id`, `rank`) VALUES
|
||||||
|
(47757, 52987, 3),
|
||||||
|
(47757, 52988, 4);
|
||||||
@@ -1110,13 +1110,16 @@ class SpellMgr
|
|||||||
return spell_id;
|
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 (SpellChainNode const* node = GetSpellChainNode(spell_id))
|
||||||
{
|
{
|
||||||
if (rank != node->rank)
|
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;
|
return spell_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,24 +28,6 @@ enum PaladinSpells
|
|||||||
PALADIN_SPELL_HOLY_SHOCK_R1 = 20473,
|
PALADIN_SPELL_HOLY_SHOCK_R1 = 20473,
|
||||||
PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE = 25912,
|
PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE = 25912,
|
||||||
PALADIN_SPELL_HOLY_SHOCK_R1_HEALING = 25914,
|
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_DRUID = 37878,
|
||||||
SPELL_BLESSING_OF_LOWER_CITY_PALADIN = 37879,
|
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))
|
if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R1))
|
||||||
return false;
|
return false;
|
||||||
if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE))
|
// can't use other spell than holy shock due to spell_ranks dependency
|
||||||
return false;
|
if (spellmgr.GetFirstSpellInChain(PALADIN_SPELL_HOLY_SHOCK_R1) != spellmgr.GetFirstSpellInChain(spellEntry->Id))
|
||||||
if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R1_HEALING))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R2))
|
uint8 rank = spellmgr.GetSpellRank(spellEntry->Id);
|
||||||
|
if (!spellmgr.GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE, rank, true))
|
||||||
return false;
|
return false;
|
||||||
if (!sSpellStore.LookupEntry(PALADIN_SPELL_HOLY_SHOCK_R2_DAMAGE))
|
if (!spellmgr.GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_HEALING, 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))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -160,48 +105,12 @@ class spell_pal_holy_shock_SpellScript : public SpellScript
|
|||||||
{
|
{
|
||||||
Unit *caster = GetCaster();
|
Unit *caster = GetCaster();
|
||||||
|
|
||||||
int hurt = 0;
|
uint8 rank = spellmgr.GetSpellRank(GetSpellInfo()->Id);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (caster->IsFriendlyTo(unitTarget))
|
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
|
else
|
||||||
caster->CastSpell(unitTarget, hurt, true, 0);
|
caster->CastSpell(unitTarget, spellmgr.GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE, rank), true, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,15 +28,6 @@ enum PriestSpells
|
|||||||
PRIEST_SPELL_PENANCE_R1 = 47540,
|
PRIEST_SPELL_PENANCE_R1 = 47540,
|
||||||
PRIEST_SPELL_PENANCE_R1_DAMAGE = 47758,
|
PRIEST_SPELL_PENANCE_R1_DAMAGE = 47758,
|
||||||
PRIEST_SPELL_PENANCE_R1_HEAL = 47757,
|
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
|
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))
|
if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R1))
|
||||||
return false;
|
return false;
|
||||||
if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R1_DAMAGE))
|
// can't use other spell than this penance due to spell_ranks dependency
|
||||||
return false;
|
if (spellmgr.GetFirstSpellInChain(PRIEST_SPELL_PENANCE_R1) != spellmgr.GetFirstSpellInChain(spellEntry->Id))
|
||||||
if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R1_HEAL))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R2))
|
uint8 rank = spellmgr.GetSpellRank(spellEntry->Id);
|
||||||
|
if (!spellmgr.GetSpellWithRank(PRIEST_SPELL_PENANCE_R1_DAMAGE, rank, true))
|
||||||
return false;
|
return false;
|
||||||
if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R2_DAMAGE))
|
if (!spellmgr.GetSpellWithRank(PRIEST_SPELL_PENANCE_R1_HEAL, rank, true))
|
||||||
return false;
|
|
||||||
if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R2_HEAL))
|
|
||||||
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))
|
|
||||||
return false;
|
|
||||||
if (!sSpellStore.LookupEntry(PRIEST_SPELL_PENANCE_R4_HEAL))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -81,37 +56,13 @@ class spell_pri_penance_SpellScript : public SpellScript
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
Unit *caster = GetCaster();
|
Unit *caster = GetCaster();
|
||||||
SpellEntry const *spellInfo = GetSpellInfo();
|
|
||||||
|
|
||||||
int hurt = 0;
|
uint8 rank = spellmgr.GetSpellRank(GetSpellInfo()->Id);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (caster->IsFriendlyTo(unitTarget))
|
if (caster->IsFriendlyTo(unitTarget))
|
||||||
caster->CastSpell(unitTarget, heal, false, 0);
|
caster->CastSpell(unitTarget, spellmgr.GetSpellWithRank(PRIEST_SPELL_PENANCE_R1_HEAL, rank), false, 0);
|
||||||
else
|
else
|
||||||
caster->CastSpell(unitTarget, hurt, false, 0);
|
caster->CastSpell(unitTarget, spellmgr.GetSpellWithRank(PRIEST_SPELL_PENANCE_R1_DAMAGE, rank), false, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Register()
|
void Register()
|
||||||
|
|||||||
Reference in New Issue
Block a user