diff --git a/data/sql/updates/pending_db_world/rev_1716477609336515289.sql b/data/sql/updates/pending_db_world/rev_1716477609336515289.sql new file mode 100644 index 00000000000000..953bfff02c4b67 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1716477609336515289.sql @@ -0,0 +1,2 @@ +-- +UPDATE `spell_proc_event` SET `Cooldown`=600 WHERE `entry`=69762; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index d21c9935da3878..b9326859aa1294 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -869,85 +869,29 @@ class UnchainedMagicTargetSelector bool _removeHealers; }; -class spell_sindragosa_unchained_magic : public SpellScriptLoader +class spell_sindragosa_unchained_magic : public SpellScript { -public: - spell_sindragosa_unchained_magic() : SpellScriptLoader("spell_sindragosa_unchained_magic") { } - - class spell_sindragosa_unchained_magic_SpellScript : public SpellScript - { - PrepareSpellScript(spell_sindragosa_unchained_magic_SpellScript); - - void FilterTargets(std::list& unitList) - { - std::list healList = unitList; - std::list dpsList = unitList; - unitList.clear(); - uint32 maxSize = uint32(GetCaster()->GetMap()->GetSpawnMode() & 1 ? 3 : 1); - healList.remove_if(UnchainedMagicTargetSelector(false)); - if (healList.size() > maxSize) - Acore::Containers::RandomResize(healList, maxSize); - dpsList.remove_if(UnchainedMagicTargetSelector(true)); - if (dpsList.size() > maxSize) - Acore::Containers::RandomResize(dpsList, maxSize); - unitList.splice(unitList.begin(), healList); - unitList.splice(unitList.begin(), dpsList); - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sindragosa_unchained_magic_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); - } - }; + PrepareSpellScript(spell_sindragosa_unchained_magic); - SpellScript* GetSpellScript() const override + void FilterTargets(std::list& unitList) { - return new spell_sindragosa_unchained_magic_SpellScript(); + std::list healList = unitList; + std::list dpsList = unitList; + unitList.clear(); + uint32 maxSize = uint32(GetCaster()->GetMap()->GetSpawnMode() & 1 ? 3 : 1); + healList.remove_if(UnchainedMagicTargetSelector(false)); + if (healList.size() > maxSize) + Acore::Containers::RandomResize(healList, maxSize); + dpsList.remove_if(UnchainedMagicTargetSelector(true)); + if (dpsList.size() > maxSize) + Acore::Containers::RandomResize(dpsList, maxSize); + unitList.splice(unitList.begin(), healList); + unitList.splice(unitList.begin(), dpsList); } - class spell_sindragosa_unchained_magic_AuraScript : public AuraScript - { - PrepareAuraScript(spell_sindragosa_unchained_magic_AuraScript); - - std::map _lastMSTimeForSpell; - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - _lastMSTimeForSpell.clear(); - return true; - } - - bool CheckProc(ProcEventInfo& eventInfo) - { - SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); - if (!spellInfo) - return false; - - uint32 currMSTime = GameTime::GetGameTimeMS().count(); - std::map::iterator itr = _lastMSTimeForSpell.find(spellInfo->Id); - if (itr != _lastMSTimeForSpell.end()) - { - uint32 lastMSTime = itr->second; - itr->second = currMSTime; - if (getMSTimeDiff(lastMSTime, currMSTime) < 600) - return false; - - return true; - } - - _lastMSTimeForSpell[spellInfo->Id] = currMSTime; - return true; - } - - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_sindragosa_unchained_magic_AuraScript::CheckProc); - } - }; - - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_sindragosa_unchained_magic_AuraScript(); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sindragosa_unchained_magic::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; @@ -2012,7 +1956,7 @@ void AddSC_boss_sindragosa() new boss_sindragosa(); new npc_ice_tomb(); new spell_sindragosa_s_fury(); - new spell_sindragosa_unchained_magic(); + RegisterSpellScript(spell_sindragosa_unchained_magic); new spell_sindragosa_permeating_chill(); new spell_sindragosa_instability(); new spell_sindragosa_icy_grip();