diff --git a/data/sql/updates/pending_db_world/rev_1653826897656877600.sql b/data/sql/updates/pending_db_world/rev_1653826897656877600.sql new file mode 100644 index 000000000..28f2eb3aa --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1653826897656877600.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `spell_script_names` WHERE `spell_id`=24326; +INSERT INTO `spell_script_names` VALUES +(24326,'spell_gahzranka_slam'); diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp index b75928c48..86e4c473d 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp @@ -24,6 +24,7 @@ EndScriptData */ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellScript.h" #include "zulgurub.h" enum Spells @@ -110,7 +111,44 @@ public: } }; +class spell_gahzranka_slam : public SpellScript +{ + PrepareSpellScript(spell_gahzranka_slam); + + void FilterTargets(std::list& targets) + { + if (Unit* caster = GetCaster()) + { + _wipeThreat = targets.size() < caster->GetThreatMgr().getThreatList().size(); + } + } + + void HandleWipeThreat(SpellEffIndex /*effIndex*/) + { + if (_wipeThreat) + { + if (Unit* caster = GetCaster()) + { + if (Unit* target = GetHitUnit()) + { + caster->GetThreatMgr().modifyThreatPercent(target, -100); + } + } + } + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_gahzranka_slam::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_gahzranka_slam::HandleWipeThreat, EFFECT_1, SPELL_EFFECT_KNOCK_BACK); + } + +private: + bool _wipeThreat = false; +}; + void AddSC_boss_gahzranka() { new boss_gahzranka(); + RegisterSpellScript(spell_gahzranka_slam); }