From 05fb5cace2d2291b6ffbad2c0c7de250ca684e2a Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 20 Mar 2023 02:07:37 -0300 Subject: [PATCH] fix(Scripts/Mechanar): Few updates to Sepethrea (#15500) --------- Co-authored-by: offl Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> --- .../rev_1679277561975731600.sql | 10 ++ .../Mechanar/boss_nethermancer_sepethrea.cpp | 108 +++++++++++------- 2 files changed, 78 insertions(+), 40 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1679277561975731600.sql diff --git a/data/sql/updates/pending_db_world/rev_1679277561975731600.sql b/data/sql/updates/pending_db_world/rev_1679277561975731600.sql new file mode 100644 index 000000000..b3be72f43 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1679277561975731600.sql @@ -0,0 +1,10 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 13 AND `SourceEntry` = 35277; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,35277,0,0,31,0,3,20481,0,0,0,0,'','Group 0: Spell \'Quell Raging Flames\' (Effect 0) targets creature \'Raging Flames\''); + +-- They're not immune even to fire, only to all mechanics +UPDATE `creature_template` SET `ScriptName` = 'npc_raging_flames' WHERE `entry` = 20481; +UPDATE `creature_template` SET `mechanic_immune_mask` = 617299803, `spell_school_immune_mask` = 0 WHERE `entry` IN (20481,21538); + +UPDATE `spell_dbc` SET `ProcTypeMask` = 20, `ProcChance` = 100, `BaseLevel` = 70, `SpellLevel` = 70, `Effect_1` = 6, `ImplicitTargetA_1` = 1, `EffectAura_1` = 42, `EffectTriggerSpell_1` = 45195 WHERE `Id` = 45196; diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp index 49b44ec23..4a6fed919 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp @@ -30,10 +30,18 @@ enum Says enum Spells { - SPELL_SUMMON_RAGIN_FLAMES = 35275, - SPELL_FROST_ATTACK = 35263, + SPELL_FROST_ATTACK = 45196, // This is definitely spell added in TBC but did it replaced both 35264 and 39086 or only normal version? + SPELL_SUMMON_RAGING_FLAMES = 35275, + SPELL_QUELL_RAGING_FLAMES = 35277, SPELL_ARCANE_BLAST = 35314, SPELL_DRAGONS_BREATH = 35250, + + // Raging Flames + SPELL_RAGING_FLAMES_DUMMY = 35274, // NYI, no clue what it can do + SPELL_RAGING_FLAMES_AREA_AURA = 35281, + SPELL_INVIS_STEALTH_DETECTION = 18950, + SPELL_INFERNO = 35268, + SPELL_INFERNO_DAMAGE = 35283 }; struct boss_nethermancer_sepethrea : public BossAI @@ -54,14 +62,18 @@ struct boss_nethermancer_sepethrea : public BossAI { DoCastVictim(SPELL_FROST_ATTACK); context.Repeat(8s); - }).Schedule(14s, [this](TaskContext context) + }).Schedule(15s, 25s, [this](TaskContext context) { DoCastVictim(SPELL_ARCANE_BLAST); - context.Repeat(12s); - }).Schedule(18s, [this](TaskContext context) + if (me->GetVictim()) + { + DoModifyThreatByPercent(me->GetVictim(), -50); + } + context.Repeat(); + }).Schedule(20s, 30s, [this](TaskContext context) { DoCastVictim(SPELL_DRAGONS_BREATH); - context.Repeat(16s); + context.Repeat(25s, 35s); if (roll_chance_i(50)) { Talk(SAY_DRAGONS_BREATH); @@ -69,7 +81,14 @@ struct boss_nethermancer_sepethrea : public BossAI }); Talk(SAY_AGGRO); - DoCastSelf(SPELL_SUMMON_RAGIN_FLAMES, true); + DoCastSelf(SPELL_SUMMON_RAGING_FLAMES, true); + } + + void EnterEvadeMode(EvadeReason why) override + { + // Fails probably because target is in evade mode (yes, she kills them on evade too). We'll kill them directly in their script for now + DoCastSelf(SPELL_QUELL_RAGING_FLAMES, true); + ScriptedAI::EnterEvadeMode(why); } void JustSummoned(Creature* summon) override @@ -95,34 +114,56 @@ struct boss_nethermancer_sepethrea : public BossAI { _JustDied(); Talk(SAY_DEATH); + DoCastSelf(SPELL_QUELL_RAGING_FLAMES, true); } }; -enum raginFlames +struct npc_raging_flames : public ScriptedAI { - SPELL_INFERNO = 35268, - SPELL_FIRE_TAIL = 35278, - SPELL_INFERNO_DAMAGE = 35283, + npc_raging_flames(Creature* creature) : ScriptedAI(creature) { } - EVENT_SPELL_FIRE_TAIL = 1, - EVENT_SPELL_INFERNO = 2 -}; + void InitializeAI() override + { + me->SetCorpseDelay(20); + } -struct npc_ragin_flames : public ScriptedAI -{ - npc_ragin_flames(Creature* creature) : ScriptedAI(creature) { } + // It's more tricky actually + void FixateRandomTarget() + { + me->GetThreatMgr().ClearAllThreat(); - EventMap events; + if (TempSummon* summon = me->ToTempSummon()) + if (Creature* summoner = summon->GetSummonerCreatureBase()) + if (summoner->IsAIEnabled) + if (Unit* target = summoner->AI()->SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true, false)) + me->AddThreat(target, 1000000.0f); + } + + void IsSummonedBy(WorldObject* /*summoner*/) override + { + DoZoneInCombat(); + DoCastSelf(SPELL_RAGING_FLAMES_AREA_AURA); + DoCastSelf(SPELL_INVIS_STEALTH_DETECTION); + + FixateRandomTarget(); + + _scheduler.Schedule(15s, 25s, [this](TaskContext task) + { + DoCastSelf(SPELL_INFERNO); + FixateRandomTarget(); + + task.Repeat(20s, 30s); + }); + } void Reset() override { - me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_ALL, true); + _scheduler.CancelAll(); } - void JustEngagedWith(Unit*) override + void EnterEvadeMode(EvadeReason /*why*/) override { - events.ScheduleEvent(EVENT_SPELL_FIRE_TAIL, 500); - events.ScheduleEvent(EVENT_SPELL_INFERNO, urand(10000, 20000)); + me->KillSelf(); } void UpdateAI(uint32 diff) override @@ -130,26 +171,13 @@ struct npc_ragin_flames : public ScriptedAI if (!UpdateVictim()) return; - events.Update(diff); - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_INFERNO: - if (me->IsWithinCombatRange(me->GetVictim(), 5.0f)) - { - me->CastSpell(me, SPELL_INFERNO, true); - events.ScheduleEvent(EVENT_SPELL_INFERNO, 20000); - } - else - events.ScheduleEvent(EVENT_SPELL_INFERNO, 1000); - break; - case EVENT_SPELL_FIRE_TAIL: - me->CastSpell(me, SPELL_FIRE_TAIL, true); - events.ScheduleEvent(EVENT_SPELL_FIRE_TAIL, 500); - break; - } + _scheduler.Update(diff); DoMeleeAttackIfReady(); } + +private: + TaskScheduler _scheduler; }; class spell_ragin_flames_inferno : public AuraScript @@ -170,6 +198,6 @@ class spell_ragin_flames_inferno : public AuraScript void AddSC_boss_nethermancer_sepethrea() { RegisterMechanarCreatureAI(boss_nethermancer_sepethrea); - RegisterMechanarCreatureAI(npc_ragin_flames); + RegisterMechanarCreatureAI(npc_raging_flames); RegisterSpellScript(spell_ragin_flames_inferno); }