diff --git a/data/sql/updates/pending_db_world/rev_1721315048505216800.sql b/data/sql/updates/pending_db_world/rev_1721315048505216800.sql new file mode 100644 index 000000000..aa1c2c311 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1721315048505216800.sql @@ -0,0 +1,14 @@ +-- +DELETE FROM `creature_template_spell` WHERE (`CreatureID` = 23109); +INSERT INTO `creature_template_spell` (`CreatureID`, `Index`, `Spell`, `VerifiedBuild`) VALUES +(23109, 0, 40325, 0), +(23109, 2, 40157, 0), +(23109, 3, 40175, 0), +(23109, 4, 40314, 0), +(23109, 6, 40322, 0); + +UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_vengeful_spirit' WHERE (`entry` = 23109); + +DELETE FROM `spell_script_names` WHERE `spell_id` = 41999 AND `ScriptName` = 'spell_teron_gorefiend_shadow_of_death_remove'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(41999, 'spell_teron_gorefiend_shadow_of_death_remove'); diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp index 8c0e5d9cb..7a0f4a48f 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp @@ -77,7 +77,7 @@ struct boss_teron_gorefiend : public BossAI void Reset() override { BossAI::Reset(); - me->CastSpell(me, SPELL_SHADOW_OF_DEATH_REMOVE, true); + DoCastSelf(SPELL_SHADOW_OF_DEATH_REMOVE, true); } void JustEngagedWith(Unit* who) override @@ -155,7 +155,7 @@ struct boss_teron_gorefiend : public BossAI { BossAI::JustDied(killer); Talk(SAY_DEATH); - me->CastSpell(me, SPELL_SHADOW_OF_DEATH_REMOVE, true); + DoCastSelf(SPELL_SHADOW_OF_DEATH_REMOVE, true); } void UpdateAI(uint32 diff) override @@ -172,6 +172,17 @@ struct boss_teron_gorefiend : public BossAI bool _intro; }; +struct npc_vengeful_spirit : public NullCreatureAI +{ + npc_vengeful_spirit(Creature* creature) : NullCreatureAI(creature) { } + + void OnCharmed(bool apply) + { + if (!apply) + me->DespawnOnEvade(); + } +}; + class spell_teron_gorefiend_shadow_of_death : public AuraScript { PrepareAuraScript(spell_teron_gorefiend_shadow_of_death); @@ -231,7 +242,7 @@ class spell_teron_gorefiend_spiritual_vengeance : public AuraScript { PrepareAuraScript(spell_teron_gorefiend_spiritual_vengeance); - void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { Unit::Kill(nullptr, GetTarget()); } @@ -276,12 +287,44 @@ class spell_teron_gorefiend_shadowy_construct : public AuraScript } }; +class spell_teron_gorefiend_shadow_of_death_remove : public SpellScript +{ + PrepareSpellScript(spell_teron_gorefiend_shadow_of_death_remove); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_SHADOW_OF_DEATH, + SPELL_POSSESS_SPIRIT_IMMUNE, + SPELL_SPIRITUAL_VENGEANCE + }); + } + + void HandleOnHit() + { + if (Unit* target = GetHitUnit()) + { + target->RemoveAurasDueToSpell(SPELL_POSSESS_SPIRIT_IMMUNE); + target->RemoveAurasDueToSpell(SPELL_SPIRITUAL_VENGEANCE); + target->RemoveAurasDueToSpell(SPELL_SHADOW_OF_DEATH); + } + } + + void Register() override + { + OnHit += SpellHitFn(spell_teron_gorefiend_shadow_of_death_remove::HandleOnHit); + } +}; + void AddSC_boss_teron_gorefiend() { RegisterBlackTempleCreatureAI(boss_teron_gorefiend); + RegisterBlackTempleCreatureAI(npc_vengeful_spirit); RegisterSpellScript(spell_teron_gorefiend_shadow_of_death); RegisterSpellScript(spell_teron_gorefiend_spirit_lance); RegisterSpellScript(spell_teron_gorefiend_spiritual_vengeance); RegisterSpellScript(spell_teron_gorefiend_shadowy_construct); + RegisterSpellScript(spell_teron_gorefiend_shadow_of_death_remove); } diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp index a7c6d7011..c6c519d94 100644 --- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp @@ -104,7 +104,6 @@ public: { switch (creature->GetEntry()) { - case NPC_VENGEFUL_SPIRIT: case NPC_SHADOWY_CONSTRUCT: if (Creature* teron = GetCreature(DATA_TERON_GOREFIEND)) teron->AI()->JustSummoned(creature);