Core/Spells: fixed armor specializations

This commit is contained in:
Ovalord committed 2017-12-20 20:20:52 +01:00
1 parent bc44d386bf
commit 03f1e5a94e
5 files changed
+246 -2

No files matched your search

+161
View File
@@ -4248,6 +4248,166 @@ class spell_gen_pony_mount_check : public SpellScriptLoader
}
};
enum ArmorSpecializationSpells
{
// Warrior
SPELL_ARMOR_SPEC_WAR_ARMS = 86110,
SPELL_ARMOR_SPEC_WAR_FURY = 86101,
SPELL_ARMOR_SPEC_WAR_PROTECTION = 86535,
// Paladin
SPELL_ARMOR_SPEC_PAL_HOLY = 86103,
SPELL_ARMOR_SPEC_PAL_PROTECTOION = 86102,
SPELL_ARMOR_SPEC_PAL_RETRIBUTION = 86539,
// Hunter
SPELL_ARMOR_SPEC_HUN = 86538,
// Rogue
SPELL_ARMOR_SPEC_ROG = 86092,
// Death Knight
SPELL_ARMOR_SPEC_DK_BLOOD = 86537,
SPELL_ARMOR_SPEC_DK_FROST = 86536,
SPELL_ARMOR_SPEC_DK_UNHOLY = 86113,
// Shaman
SPELL_ARMOR_SPEC_SHA_ELEMENTAL = 86100,
SPELL_ARMOR_SPEC_SHA_ENHANCEMENT = 86099,
SPELL_ARMOR_SPEC_SHA_RESTORATION = 86108,
// Druid
SPELL_ARMOR_SPEC_DRU_BALANCE = 86093,
SPELL_ARMOR_SPEC_DRU_FREAL_BEAR = 86096,
SPELL_ARMOR_SPEC_DRU_FERAL = 86097,
SPELL_ARMOR_SPEC_DRU_RESTORATION = 86104
};
class spell_gen_armor_specialization : public SpellScriptLoader
{
public:
spell_gen_armor_specialization() : SpellScriptLoader("spell_gen_armor_specialization") { }
class spell_gen_armor_specialization_SpellScript : public SpellScript
{
PrepareSpellScript(spell_gen_armor_specialization_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo(
{
SPELL_ARMOR_SPEC_WAR_ARMS,
SPELL_ARMOR_SPEC_WAR_FURY,
SPELL_ARMOR_SPEC_WAR_PROTECTION,
SPELL_ARMOR_SPEC_PAL_HOLY,
SPELL_ARMOR_SPEC_PAL_PROTECTOION,
SPELL_ARMOR_SPEC_PAL_RETRIBUTION,
SPELL_ARMOR_SPEC_HUN,
SPELL_ARMOR_SPEC_ROG,
SPELL_ARMOR_SPEC_DK_BLOOD,
SPELL_ARMOR_SPEC_DK_FROST,
SPELL_ARMOR_SPEC_DK_UNHOLY,
SPELL_ARMOR_SPEC_SHA_ELEMENTAL,
SPELL_ARMOR_SPEC_SHA_ENHANCEMENT,
SPELL_ARMOR_SPEC_SHA_RESTORATION,
SPELL_ARMOR_SPEC_DRU_BALANCE,
SPELL_ARMOR_SPEC_DRU_FREAL_BEAR,
SPELL_ARMOR_SPEC_DRU_FERAL,
SPELL_ARMOR_SPEC_DRU_RESTORATION
});
}
void HandleDummy(SpellEffIndex /*effIndex*/)
{
Player* player = GetHitPlayer();
if (!player)
return;
uint32 spellId = 0;
switch (player->GetPrimaryTalentTree(player->GetActiveSpec()))
{
case TALENT_TREE_WARRIOR_ARMS:
spellId = SPELL_ARMOR_SPEC_WAR_ARMS;
break;
case TALENT_TREE_WARRIOR_FURY:
spellId = SPELL_ARMOR_SPEC_WAR_FURY;
break;
case TALENT_TREE_WARRIOR_PROTECTION:
spellId = SPELL_ARMOR_SPEC_WAR_PROTECTION;
break;
case TALENT_TREE_PALADIN_HOLY:
spellId = SPELL_ARMOR_SPEC_PAL_HOLY;
break;
case TALENT_TREE_PALADIN_PROTECTION:
spellId = SPELL_ARMOR_SPEC_PAL_PROTECTOION;
break;
case TALENT_TREE_PALADIN_RETRIBUTION:
spellId = SPELL_ARMOR_SPEC_PAL_RETRIBUTION;
break;
case TALENT_TREE_HUNTER_BEAST_MASTERY:
case TALENT_TREE_HUNTER_MARKSMANSHIP:
case TALENT_TREE_HUNTER_SURVIVAL:
spellId = SPELL_ARMOR_SPEC_HUN;
break;
case TALENT_TREE_ROGUE_ASSASSINATION:
case TALENT_TREE_ROGUE_COMBAT:
case TALENT_TREE_ROGUE_SUBTLETY:
spellId = SPELL_ARMOR_SPEC_ROG;
break;
case TALENT_TREE_DEATH_KNIGHT_BLOOD:
spellId = SPELL_ARMOR_SPEC_DK_BLOOD;
break;
case TALENT_TREE_DEATH_KNIGHT_FROST:
spellId = SPELL_ARMOR_SPEC_DK_FROST;
break;
case TALENT_TREE_DEATH_KNIGHT_UNHOLY:
spellId = SPELL_ARMOR_SPEC_DK_UNHOLY;
break;
case TALENT_TREE_SHAMAN_ELEMENTAL:
spellId = SPELL_ARMOR_SPEC_SHA_ELEMENTAL;
break;
case TALENT_TREE_SHAMAN_ENHANCEMENT:
spellId = SPELL_ARMOR_SPEC_SHA_ENHANCEMENT;
break;
case TALENT_TREE_SHAMAN_RESTORATION:
spellId = SPELL_ARMOR_SPEC_SHA_RESTORATION;
break;
case TALENT_TREE_DRUID_BALANCE:
spellId = SPELL_ARMOR_SPEC_DRU_BALANCE;
break;
case TALENT_TREE_DRUID_FERAL_COMBAT:
{
if (player->GetShapeshiftForm() == FORM_BEAR)
spellId = SPELL_ARMOR_SPEC_DRU_FREAL_BEAR;
else
spellId = SPELL_ARMOR_SPEC_DRU_FERAL;
break;
}
case TALENT_TREE_DRUID_RESTORATION:
spellId = SPELL_ARMOR_SPEC_DRU_RESTORATION;
break;
default:
return;
}
if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId))
if (player->HasAllItemsToFitToSpellRequirements(spellInfo))
player->CastSpell(player, spellId, true);
}
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_gen_armor_specialization_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
return new spell_gen_armor_specialization_SpellScript();
}
};
void AddSC_generic_spell_scripts()
{
new spell_gen_absorb0_hitlimit1();
@@ -4349,4 +4509,5 @@ void AddSC_generic_spell_scripts()
new spell_gen_landmine_knockback_achievement();
new spell_gen_clear_debuffs();
new spell_gen_pony_mount_check();
new spell_gen_armor_specialization();
}