Scripts/Spells: Fix shaman Lava Surge proc (#27667)

Co-authored-by: Shauren <shauren.trinity@gmail.com>
This commit is contained in:
Robingad
2022-01-28 12:18:45 +02:00
committed by GitHub
parent 1696d73860
commit 5b57722211
2 changed files with 35 additions and 2 deletions

View File

@@ -0,0 +1,4 @@
DELETE FROM `spell_proc` WHERE `SpellId` IN (77756,77762);
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
(77756,0x00,11,0x10000000,0x00000000,0x00000000,0x00000000,0x0,0x1,0x2,0x0,0x0,0x0,0,0,0,0), -- Lava Surge (proc aura)
(77762,0x00,11,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x0,0x8,0x0,0,0,0,0); -- Lava Surge (effect buff)

View File

@@ -73,6 +73,7 @@ enum ShamanSpells
SPELL_SHAMAN_HEALING_RAIN_HEAL = 73921,
SPELL_SHAMAN_ICEFURY = 210714,
SPELL_SHAMAN_ICEFURY_OVERLOAD = 219271,
SPELL_SHAMAN_IGNEOUS_POTENTIAL = 279830,
SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD = 23552,
SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE = 27635,
SPELL_SHAMAN_ITEM_MANA_SURGE = 23571,
@@ -958,7 +959,7 @@ class spell_sha_lava_burst : public SpellScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_SHAMAN_PATH_OF_FLAMES_TALENT, SPELL_SHAMAN_PATH_OF_FLAMES_SPREAD });
return ValidateSpellInfo({ SPELL_SHAMAN_PATH_OF_FLAMES_TALENT, SPELL_SHAMAN_PATH_OF_FLAMES_SPREAD, SPELL_SHAMAN_LAVA_SURGE });
}
void HandleScript(SpellEffIndex /*effIndex*/)
@@ -968,9 +969,27 @@ class spell_sha_lava_burst : public SpellScript
caster->CastSpell(GetHitUnit(), SPELL_SHAMAN_PATH_OF_FLAMES_SPREAD, GetSpell());
}
void EnsureLavaSurgeCanBeImmediatelyConsumed()
{
Unit* caster = GetCaster();
if (Aura* lavaSurge = caster->GetAura(SPELL_SHAMAN_LAVA_SURGE))
{
if (!GetSpell()->m_appliedMods.count(lavaSurge))
{
uint32 chargeCategoryId = GetSpellInfo()->ChargeCategoryId;
// Ensure we have at least 1 usable charge after cast to allow next cast immediately
if (!caster->GetSpellHistory()->HasCharge(chargeCategoryId))
caster->GetSpellHistory()->RestoreCharge(chargeCategoryId);
}
}
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_sha_lava_burst::HandleScript, EFFECT_0, SPELL_EFFECT_TRIGGER_MISSILE);
AfterCast += SpellCastFn(spell_sha_lava_burst::EnsureLavaSurgeCanBeImmediatelyConsumed);
}
};
@@ -1010,7 +1029,16 @@ class spell_sha_lava_surge : public AuraScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_SHAMAN_LAVA_SURGE });
return ValidateSpellInfo({ SPELL_SHAMAN_LAVA_SURGE, SPELL_SHAMAN_IGNEOUS_POTENTIAL });
}
bool CheckProcChance(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
int32 procChance = aurEff->GetAmount();
if (AuraEffect const* igneousPotential = GetTarget()->GetAuraEffect(SPELL_SHAMAN_IGNEOUS_POTENTIAL, EFFECT_0))
procChance += igneousPotential->GetAmount();
return roll_chance_i(procChance);
}
void HandleEffectProc(AuraEffect* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
@@ -1021,6 +1049,7 @@ class spell_sha_lava_surge : public AuraScript
void Register() override
{
DoCheckEffectProc += AuraCheckEffectProcFn(spell_sha_lava_surge::CheckProcChance, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectProc += AuraEffectProcFn(spell_sha_lava_surge::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};