Core/Spell: Fixed Shaman Masteries

This commit is contained in:
Aokromes
2017-11-27 12:40:22 +00:00
5 changed files with 85 additions and 2 deletions

View File

@@ -0,0 +1,7 @@
DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_sha_elemental_overload';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(77222, 'spell_sha_elemental_overload');
DELETE FROM `spell_proc` WHERE `SpellID`= 77222;
INSERT INTO `spell_proc` (`SpellID`, `SpellFamilyName`, `SpellFamilyMask0`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `AttributesMask`) VALUES
(77222, 11, 0, 0x00010000, 1, 2, 0, 0x0000020);

View File

@@ -7375,6 +7375,17 @@ float Unit::SpellHealingPctDone(Unit* victim, SpellInfo const* spellProto) const
}
}
AuraEffectList const& mHealingFromTargetHealthPct = owner->GetAuraEffectsByType(SPELL_AURA_MOD_HEALING_FROM_TARGET_HEALTH);
for (AuraEffectList::const_iterator i = mHealingFromTargetHealthPct.begin(); i != mHealingFromTargetHealthPct.end(); ++i)
{
if ((*i)->IsAffectingSpell(spellProto))
{
uint32 masteryBonus = (*i)->GetAmount();
float healthPct = 100.0f - victim->GetHealthPct();
AddPct(DoneTotalMod, CalculatePct(masteryBonus, healthPct));
}
}
return DoneTotalMod;
}

View File

@@ -413,7 +413,7 @@ enum AuraType
SPELL_AURA_351 = 351,
SPELL_AURA_352 = 352,
SPELL_AURA_MOD_CAMOUFLAGE = 353, // NYI
SPELL_AURA_354 = 354, // Restoration Shaman mastery - mod healing based on target's health (less = more healing)
SPELL_AURA_MOD_HEALING_FROM_TARGET_HEALTH = 354, // Restoration Shaman mastery - mod healing based on target's health (less = more healing)
SPELL_AURA_355 = 355,
SPELL_AURA_356 = 356, // Arcane Mage mastery - mod damage based on current mana
SPELL_AURA_ENABLE_BOSS1_UNIT_FRAME = 357,

View File

@@ -412,7 +412,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNULL, //351 SPELL_AURA_351
&AuraEffect::HandleNULL, //352 SPELL_AURA_352
&AuraEffect::HandleNULL, //353 SPELL_AURA_MOD_CAMOUFLAGE
&AuraEffect::HandleNULL, //354 SPELL_AURA_354
&AuraEffect::HandleNoImmediateEffect, //354 SPELL_AURA_MOD_HEALING_FROM_TARGET_HEALTH implemented in Unit::SpellHealingPctDone
&AuraEffect::HandleUnused, //355 unused (4.3.4)
&AuraEffect::HandleNULL, //356 SPELL_AURA_356
&AuraEffect::HandleNULL, //357 SPELL_AURA_ENABLE_BOSS1_UNIT_FRAME

View File

@@ -34,6 +34,8 @@ enum ShamanSpells
SPELL_SHAMAN_ANCESTRAL_AWAKENING = 52759,
SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC = 52752,
SPELL_SHAMAN_BIND_SIGHT = 6277,
SPELL_SHAMAN_CHAIN_LIGHTNING = 421,
SPELL_SHAMAN_CHAIN_LIGHTNING_TRIGGERED = 45297,
SPELL_SHAMAN_EARTH_SHIELD_HEAL = 379,
SPELL_SHAMAN_ELEMENTAL_MASTERY = 16166,
SPELL_SHAMAN_EXHAUSTION = 57723,
@@ -46,9 +48,12 @@ enum ShamanSpells
SPELL_SHAMAN_GLYPH_OF_MANA_TIDE = 55441,
SPELL_SHAMAN_GLYPH_OF_THUNDERSTORM = 62132,
SPELL_SHAMAN_LAVA_BURST = 51505,
SPELL_SHAMAN_LAVA_BURST_TRIGGERED = 77451,
SPELL_SHAMAN_LAVA_FLOWS_R1 = 51480,
SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1 = 65264,
SPELL_SHAMAN_LAVA_SURGE = 77762,
SPELL_SHAMAN_LIGHTNING_BOLT = 403,
SPELL_SHAMAN_LIGHTNING_BOLT_TRIGGERED = 45284,
SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD = 23552,
SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE = 27635,
SPELL_SHAMAN_ITEM_MANA_SURGE = 23571,
@@ -1272,6 +1277,65 @@ public:
}
};
// 77222 - Elemental Overload
class spell_sha_elemental_overload : public SpellScriptLoader
{
public:
spell_sha_elemental_overload() : SpellScriptLoader("spell_sha_elemental_overload") { }
class spell_sha_elemental_overload_AuraScript : public AuraScript
{
PrepareAuraScript(spell_sha_elemental_overload_AuraScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_SHAMAN_LIGHTNING_BOLT, SPELL_SHAMAN_LIGHTNING_BOLT_TRIGGERED,
SPELL_SHAMAN_CHAIN_LIGHTNING, SPELL_SHAMAN_CHAIN_LIGHTNING_TRIGGERED,
SPELL_SHAMAN_LAVA_BURST, SPELL_SHAMAN_LAVA_BURST_TRIGGERED });
}
bool CheckProc(ProcEventInfo& eventInfo)
{
return roll_chance_i(GetEffect(EFFECT_0)->GetAmount());
}
void HandleEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
{
if (Unit* target = eventInfo.GetProcTarget())
{
if (Unit* caster = GetCaster())
{
switch (eventInfo.GetProcSpell()->GetSpellInfo()->Id)
{
case SPELL_SHAMAN_LIGHTNING_BOLT:
caster->CastSpell(target, SPELL_SHAMAN_LIGHTNING_BOLT_TRIGGERED, true);
break;
case SPELL_SHAMAN_CHAIN_LIGHTNING:
caster->CastSpell(target, SPELL_SHAMAN_CHAIN_LIGHTNING_TRIGGERED, true);
break;
case SPELL_SHAMAN_LAVA_BURST:
caster->CastSpell(target, SPELL_SHAMAN_LAVA_BURST_TRIGGERED, true);
break;
default:
break;
}
}
}
}
void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_sha_elemental_overload_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_sha_elemental_overload_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
AuraScript* GetAuraScript() const override
{
return new spell_sha_elemental_overload_AuraScript();
}
};
void AddSC_shaman_spell_scripts()
{
new spell_sha_ancestral_awakening();
@@ -1281,6 +1345,7 @@ void AddSC_shaman_spell_scripts()
new spell_sha_earth_shield();
new spell_sha_earthbind_totem();
new spell_sha_earthen_power();
new spell_sha_elemental_overload();
new spell_sha_feedback();
new spell_sha_fire_nova();
new spell_sha_flame_shock();