mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-25 03:12:09 +01:00
Scripts/Spells: Fix shaman Mastery: Elemental Overload + Stormkeeper and Unlimited Power talents (#27561)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_mastery_elemental_overload';
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_mastery_elemental_overload_proc';
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_unlimited_power';
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(168534, 'spell_sha_mastery_elemental_overload'), -- Mastery: Elemental Overload
|
||||
(45284, 'spell_sha_mastery_elemental_overload_proc'), -- Lightning Bolt Overload
|
||||
(45297, 'spell_sha_mastery_elemental_overload_proc'), -- Chain Lightning Overload
|
||||
(114738, 'spell_sha_mastery_elemental_overload_proc'), -- Lava Beam Overload
|
||||
(120588, 'spell_sha_mastery_elemental_overload_proc'), -- Elemental Blast Overload
|
||||
(219271, 'spell_sha_mastery_elemental_overload_proc'), -- Icefury Overload
|
||||
(285466, 'spell_sha_mastery_elemental_overload_proc'),-- Lava Burst Overload
|
||||
(260895, 'spell_sha_unlimited_power');-- Lava Burst Overload
|
||||
|
||||
DELETE FROM `spell_proc` WHERE `SpellId` IN (168534,260895);
|
||||
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
|
||||
(168534,0x00,11,0x00000000,0x00000000,0x00000000,0x00000000,0x10000,0x5,0x2,0x0,0x0,0x6,0,100,0,0), -- Mastery: Elemental Overload
|
||||
(260895,0x00,11,0x00000000,0x00000000,0x00008000,0x00000000,0x00000,0x1,0x1,0x0,0x2,0x0,0, 0,0,0); -- Unlimited Power
|
||||
@@ -39,7 +39,9 @@ enum ShamanSpells
|
||||
SPELL_SHAMAN_AFTERSHOCK_ENERGIZE = 210712,
|
||||
SPELL_SHAMAN_ANCESTRAL_GUIDANCE = 108281,
|
||||
SPELL_SHAMAN_ANCESTRAL_GUIDANCE_HEAL = 114911,
|
||||
SPELL_SHAMAN_CHAIN_LIGHTNING = 188443,
|
||||
SPELL_SHAMAN_CHAIN_LIGHTNING_ENERGIZE = 195897,
|
||||
SPELL_SHAMAN_CHAIN_LIGHTNING_OVERLOAD = 45297,
|
||||
SPELL_SHAMAN_CHAIN_LIGHTNING_OVERLOAD_ENERGIZE = 218558,
|
||||
SPELL_SHAMAN_CHAINED_HEAL = 70809,
|
||||
SPELL_SHAMAN_CRASH_LIGHTNING_CLEAVE = 187878,
|
||||
@@ -54,6 +56,7 @@ enum ShamanSpells
|
||||
SPELL_SHAMAN_ELEMENTAL_BLAST_HASTE = 173183,
|
||||
SPELL_SHAMAN_ELEMENTAL_BLAST_MASTERY = 173184,
|
||||
SPELL_SHAMAN_ELEMENTAL_MASTERY = 16166,
|
||||
SPELL_SHAMAN_ELEMENTAL_BLAST_OVERLOAD = 120588,
|
||||
SPELL_SHAMAN_ENERGY_SURGE = 40465,
|
||||
SPELL_SHAMAN_EXHAUSTION = 57723,
|
||||
SPELL_SHAMAN_FLAME_SHOCK = 8050,
|
||||
@@ -66,16 +69,24 @@ enum ShamanSpells
|
||||
SPELL_SHAMAN_GHOST_WOLF = 2645,
|
||||
SPELL_SHAMAN_HEALING_RAIN_VISUAL = 147490,
|
||||
SPELL_SHAMAN_HEALING_RAIN_HEAL = 73921,
|
||||
SPELL_SHAMAN_ICEFURY = 210714,
|
||||
SPELL_SHAMAN_ICEFURY_OVERLOAD = 219271,
|
||||
SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD = 23552,
|
||||
SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE = 27635,
|
||||
SPELL_SHAMAN_ITEM_MANA_SURGE = 23571,
|
||||
SPELL_SHAMAN_LAVA_BEAM = 114074,
|
||||
SPELL_SHAMAN_LAVA_BEAM_OVERLOAD = 114738,
|
||||
SPELL_SHAMAN_LAVA_BURST = 51505,
|
||||
SPELL_SHAMAN_LAVA_BURST_BONUS_DAMAGE = 71824,
|
||||
SPELL_SHAMAN_LAVA_BURST_OVERLOAD = 77451,
|
||||
SPELL_SHAMAN_LAVA_SURGE = 77762,
|
||||
SPELL_SHAMAN_LIGHTNING_BOLT = 188196,
|
||||
SPELL_SHAMAN_LIGHTNING_BOLT_ENERGIZE = 214815,
|
||||
SPELL_SHAMAN_LIGHTNING_BOLT_OVERLOAD = 45284,
|
||||
SPELL_SHAMAN_LIGHTNING_BOLT_OVERLOAD_ENERGIZE = 214816,
|
||||
SPELL_SHAMAN_LIQUID_MAGMA_HIT = 192231,
|
||||
SPELL_SHAMAN_MAELSTROM_CONTROLLER = 343725,
|
||||
SPELL_SHAMAN_MASTERY_ELEMENTAL_OVERLOAD = 168534,
|
||||
SPELL_SHAMAN_PATH_OF_FLAMES_SPREAD = 210621,
|
||||
SPELL_SHAMAN_PATH_OF_FLAMES_TALENT = 201909,
|
||||
SPELL_SHAMAN_POWER_SURGE = 40466,
|
||||
@@ -83,11 +94,13 @@ enum ShamanSpells
|
||||
SPELL_SHAMAN_SPIRIT_WOLF_TALENT = 260878,
|
||||
SPELL_SHAMAN_SPIRIT_WOLF_PERIODIC = 260882,
|
||||
SPELL_SHAMAN_SPIRIT_WOLF_AURA = 260881,
|
||||
SPELL_SHAMAN_STORMKEEPER = 191634,
|
||||
SPELL_SHAMAN_TIDAL_WAVES = 53390,
|
||||
SPELL_SHAMAN_TOTEMIC_POWER_MP5 = 28824,
|
||||
SPELL_SHAMAN_TOTEMIC_POWER_SPELL_POWER = 28825,
|
||||
SPELL_SHAMAN_TOTEMIC_POWER_ATTACK_POWER = 28826,
|
||||
SPELL_SHAMAN_TOTEMIC_POWER_ARMOR = 28827,
|
||||
SPELL_SHAMAN_UNLIMITED_POWER_BUFF = 272737,
|
||||
SPELL_SHAMAN_WINDFURY_ATTACK = 25504,
|
||||
SPELL_SHAMAN_WINDFURY_ENCHANTMENT = 334302,
|
||||
SPELL_SHAMAN_WIND_RUSH = 192082,
|
||||
@@ -1009,6 +1022,117 @@ class spell_sha_liquid_magma_totem : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
// 168534 - Mastery: Elemental Overload (passive)
|
||||
class spell_sha_mastery_elemental_overload : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_sha_mastery_elemental_overload);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo
|
||||
({
|
||||
SPELL_SHAMAN_LIGHTNING_BOLT,
|
||||
SPELL_SHAMAN_LIGHTNING_BOLT_OVERLOAD,
|
||||
SPELL_SHAMAN_ELEMENTAL_BLAST,
|
||||
SPELL_SHAMAN_ELEMENTAL_BLAST_OVERLOAD,
|
||||
SPELL_SHAMAN_ICEFURY,
|
||||
SPELL_SHAMAN_ICEFURY_OVERLOAD,
|
||||
SPELL_SHAMAN_LAVA_BURST,
|
||||
SPELL_SHAMAN_LAVA_BURST_OVERLOAD,
|
||||
SPELL_SHAMAN_CHAIN_LIGHTNING,
|
||||
SPELL_SHAMAN_CHAIN_LIGHTNING_OVERLOAD,
|
||||
SPELL_SHAMAN_LAVA_BEAM,
|
||||
SPELL_SHAMAN_LAVA_BEAM_OVERLOAD,
|
||||
SPELL_SHAMAN_STORMKEEPER
|
||||
});
|
||||
}
|
||||
|
||||
bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
|
||||
{
|
||||
SpellInfo const* spellInfo = eventInfo.GetSpellInfo();
|
||||
if (!spellInfo || !eventInfo.GetProcSpell())
|
||||
return false;
|
||||
|
||||
if (!GetTriggeredSpellId(spellInfo->Id))
|
||||
return false;
|
||||
|
||||
float chance = aurEff->GetAmount(); // Mastery % amount
|
||||
|
||||
if (spellInfo->Id == SPELL_SHAMAN_CHAIN_LIGHTNING)
|
||||
chance /= 3.0f;
|
||||
|
||||
if (Aura* stormkeeper = eventInfo.GetActor()->GetAura(SPELL_SHAMAN_STORMKEEPER))
|
||||
if (eventInfo.GetProcSpell()->m_appliedMods.find(stormkeeper) != eventInfo.GetProcSpell()->m_appliedMods.end())
|
||||
chance = 100.0f;
|
||||
|
||||
return roll_chance_f(chance);
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& procInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
Unit* caster = procInfo.GetActor();
|
||||
|
||||
caster->m_Events.AddEventAtOffset([caster,
|
||||
targets = CastSpellTargetArg(procInfo.GetProcTarget()),
|
||||
overloadSpellId = GetTriggeredSpellId(procInfo.GetSpellInfo()->Id),
|
||||
args = CastSpellExtraArgs(procInfo.GetProcSpell())]()
|
||||
{
|
||||
caster->CastSpell(targets, overloadSpellId, args);
|
||||
}, 400ms);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckEffectProc += AuraCheckEffectProcFn(spell_sha_mastery_elemental_overload::CheckProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
OnEffectProc += AuraEffectProcFn(spell_sha_mastery_elemental_overload::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
|
||||
uint32 GetTriggeredSpellId(uint32 triggeringSpellId)
|
||||
{
|
||||
switch (triggeringSpellId)
|
||||
{
|
||||
case SPELL_SHAMAN_LIGHTNING_BOLT: return SPELL_SHAMAN_LIGHTNING_BOLT_OVERLOAD;
|
||||
case SPELL_SHAMAN_ELEMENTAL_BLAST: return SPELL_SHAMAN_ELEMENTAL_BLAST_OVERLOAD;
|
||||
case SPELL_SHAMAN_ICEFURY: return SPELL_SHAMAN_ICEFURY_OVERLOAD;
|
||||
case SPELL_SHAMAN_LAVA_BURST: return SPELL_SHAMAN_LAVA_BURST_OVERLOAD;
|
||||
case SPELL_SHAMAN_CHAIN_LIGHTNING: return SPELL_SHAMAN_CHAIN_LIGHTNING_OVERLOAD;
|
||||
case SPELL_SHAMAN_LAVA_BEAM: return SPELL_SHAMAN_LAVA_BEAM_OVERLOAD;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
// 45284 - Lightning Bolt Overload
|
||||
// 45297 - Chain Lightning Overload
|
||||
// 114738 - Lava Beam Overload
|
||||
// 120588 - Elemental Blast Overload
|
||||
// 219271 - Icefury Overload
|
||||
// 285466 - Lava Burst Overload
|
||||
class spell_sha_mastery_elemental_overload_proc : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_sha_mastery_elemental_overload_proc);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_SHAMAN_MASTERY_ELEMENTAL_OVERLOAD });
|
||||
}
|
||||
|
||||
void ApplyDamageModifier(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (AuraEffect const* elementalOverload = GetCaster()->GetAuraEffect(SPELL_SHAMAN_MASTERY_ELEMENTAL_OVERLOAD, EFFECT_1))
|
||||
SetHitDamage(CalculatePct(GetHitDamage(), elementalOverload->GetAmount()));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_sha_mastery_elemental_overload_proc::ApplyDamageModifier, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
// 30884 - Nature's Guardian
|
||||
class spell_sha_natures_guardian : public AuraScript
|
||||
{
|
||||
@@ -1347,6 +1471,31 @@ class spell_sha_t10_restoration_4p_bonus : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 260895 - Unlimited Power
|
||||
class spell_sha_unlimited_power : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_sha_unlimited_power);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_SHAMAN_UNLIMITED_POWER_BUFF });
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& procInfo)
|
||||
{
|
||||
Unit* caster = procInfo.GetActor();
|
||||
if (Aura* aura = caster->GetAura(SPELL_SHAMAN_UNLIMITED_POWER_BUFF))
|
||||
aura->SetStackAmount(aura->GetStackAmount() + 1);
|
||||
else
|
||||
caster->CastSpell(caster, SPELL_SHAMAN_UNLIMITED_POWER_BUFF, procInfo.GetProcSpell());
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_sha_unlimited_power::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
// 33757 - Windfury Weapon
|
||||
class spell_sha_windfury_weapon : public SpellScript
|
||||
{
|
||||
@@ -1476,6 +1625,8 @@ void AddSC_shaman_spell_scripts()
|
||||
RegisterSpellScript(spell_sha_lightning_bolt);
|
||||
RegisterSpellScript(spell_sha_lightning_bolt_overload);
|
||||
RegisterSpellScript(spell_sha_liquid_magma_totem);
|
||||
RegisterAuraScript(spell_sha_mastery_elemental_overload);
|
||||
RegisterSpellScript(spell_sha_mastery_elemental_overload_proc);
|
||||
RegisterAuraScript(spell_sha_natures_guardian);
|
||||
RegisterSpellScript(spell_sha_path_of_flames_spread);
|
||||
RegisterAuraScript(spell_sha_spirit_wolf);
|
||||
@@ -1486,6 +1637,7 @@ void AddSC_shaman_spell_scripts()
|
||||
RegisterAuraScript(spell_sha_t9_elemental_4p_bonus);
|
||||
RegisterAuraScript(spell_sha_t10_elemental_4p_bonus);
|
||||
RegisterAuraScript(spell_sha_t10_restoration_4p_bonus);
|
||||
RegisterAuraScript(spell_sha_unlimited_power);
|
||||
RegisterSpellScript(spell_sha_windfury_weapon);
|
||||
RegisterAuraScript(spell_sha_windfury_weapon_proc);
|
||||
RegisterAreaTriggerAI(areatrigger_sha_wind_rush_totem);
|
||||
|
||||
Reference in New Issue
Block a user