From a04920122a0f1e05dedfd68ee88e785dca711a68 Mon Sep 17 00:00:00 2001 From: ModoX Date: Wed, 12 Mar 2025 19:04:05 +0100 Subject: [PATCH] Spells/Generic: Implemented generic feign death spell with UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_UNINTERACTIBLE --- src/server/scripts/Spells/spell_generic.cpp | 33 +++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 76d1785407..162d110eba 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1747,6 +1747,7 @@ There are only 3 possible flags Feign Death auras can apply: UNIT_DYNFLAG_DEAD, and UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT. Some auras can apply only 2 flags spell_gen_feign_death_all_flags applies all 3 flags +spell_gen_feign_death_all_flags_uninteractible applies all 3 flags and additionally sets UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_UNINTERACTIBLE spell_gen_feign_death_no_dyn_flag applies no UNIT_DYNFLAG_DEAD (does not make the creature appear dead) spell_gen_feign_death_no_prevent_emotes applies no UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT @@ -1786,6 +1787,37 @@ class spell_gen_feign_death_all_flags : public AuraScript } }; +class spell_gen_feign_death_all_flags_uninteractible : public AuraScript +{ + void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); + target->SetImmuneToAll(true); + target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE); + + if (Creature* creature = target->ToCreature()) + creature->SetReactState(REACT_PASSIVE); + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); + target->SetImmuneToAll(false); + target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT| UNIT_FLAG_NOT_SELECTABLE); + + if (Creature* creature = target->ToCreature()) + creature->InitializeReactState(); + } + + void Register() override + { + OnEffectApply.Register(&spell_gen_feign_death_all_flags_uninteractible::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove.Register(&spell_gen_feign_death_all_flags_uninteractible::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + // 35357 - Spawn Feign Death // 51329 - Feign Death class spell_gen_feign_death_no_dyn_flag : public AuraScript @@ -5302,6 +5334,7 @@ void AddSC_generic_spell_scripts() new spell_gen_elune_candle(); RegisterSpellScript(spell_gen_flurry_of_claws); RegisterSpellScript(spell_gen_feign_death_all_flags); + RegisterSpellScript(spell_gen_feign_death_all_flags_uninteractible); RegisterSpellScript(spell_gen_feign_death_no_dyn_flag); RegisterSpellScript(spell_gen_feign_death_no_prevent_emotes); new spell_gen_gadgetzan_transporter_backfire();