mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Scripts/Spells: Update Lava surge script
This commit is contained in:
3
sql/updates/world/master/2025_09_30_01_world.sql
Normal file
3
sql/updates/world/master/2025_09_30_01_world.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
DELETE FROM `spell_proc` WHERE `SpellId` IN (77756);
|
||||
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
|
||||
(77756,0x00,11,0x10000000,0x00000000,0x00000000,0x00000000,0x40000,0x0,0x1,0x2,0x0,0x0,0x0,0,100,0,0); -- Lava Surge
|
||||
@@ -1757,17 +1757,40 @@ class spell_sha_lava_surge : public AuraScript
|
||||
return ValidateSpellInfo({ SPELL_SHAMAN_LAVA_SURGE, SPELL_SHAMAN_IGNEOUS_POTENTIAL });
|
||||
}
|
||||
|
||||
bool CheckProcChance(AuraEffect const* aurEff, ProcEventInfo const& /*eventInfo*/) const
|
||||
bool CheckProcChance(AuraEffect const* aurEff, ProcEventInfo const& /*eventInfo*/)
|
||||
{
|
||||
int32 procChance = aurEff->GetAmount();
|
||||
Unit* caster = GetTarget();
|
||||
float flameShocks = 0.0f;
|
||||
auto work = [&, shaman = caster->GetGUID()](Unit const* target)
|
||||
{
|
||||
if (target->HasAuraEffect(SPELL_SHAMAN_FLAME_SHOCK, EFFECT_1, shaman))
|
||||
flameShocks += 1.0f;
|
||||
};
|
||||
Trinity::UnitWorker worker(caster, work);
|
||||
Cell::VisitAllObjects(caster, worker, 100.0f);
|
||||
|
||||
// Proc uptime is not supposed to scale with the number of applied flame shocks
|
||||
_normalizedTicks += 1.0f / flameShocks;
|
||||
|
||||
// first 6 ticks after last proc fail to prevent overwriting
|
||||
if (_normalizedTicks < 6.0f)
|
||||
return false;
|
||||
|
||||
float procChance = aurEff->GetAmount();
|
||||
if (AuraEffect const* igneousPotential = GetTarget()->GetAuraEffect(SPELL_SHAMAN_IGNEOUS_POTENTIAL, EFFECT_0))
|
||||
procChance += igneousPotential->GetAmount();
|
||||
|
||||
return roll_chance_i(procChance);
|
||||
float missChance = std::max(100 - procChance, 0.0f) / 100.0f;
|
||||
|
||||
procChance = (1.0f - std::pow(missChance, _normalizedTicks)) * 100.0f;
|
||||
|
||||
return roll_chance_f(procChance);
|
||||
}
|
||||
|
||||
void HandleEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo const& /*eventInfo*/)
|
||||
{
|
||||
_normalizedTicks = 0.0f;
|
||||
|
||||
PreventDefaultAction();
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_LAVA_SURGE, CastSpellExtraArgsInit{ .TriggerFlags = TRIGGERED_FULL_MASK });
|
||||
}
|
||||
@@ -1777,6 +1800,8 @@ class spell_sha_lava_surge : public AuraScript
|
||||
DoCheckEffectProc += AuraCheckEffectProcFn(spell_sha_lava_surge::CheckProcChance, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
OnEffectProc += AuraEffectProcFn(spell_sha_lava_surge::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
|
||||
float _normalizedTicks = 0.0f;
|
||||
};
|
||||
|
||||
// 77762 - Lava Surge
|
||||
|
||||
Reference in New Issue
Block a user