fix(Scripts/Mechanar): Few updates to Sepethrea (#15500)

---------

Co-authored-by: offl <offl@users.noreply.github.com>
Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com>
This commit is contained in:
Skjalf
2023-03-20 02:07:37 -03:00
committed by GitHub
parent 29fba5fe38
commit 05fb5cace2
2 changed files with 78 additions and 40 deletions

View File

@@ -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;

View File

@@ -30,10 +30,18 @@ enum Says
enum Spells enum Spells
{ {
SPELL_SUMMON_RAGIN_FLAMES = 35275, SPELL_FROST_ATTACK = 45196, // This is definitely spell added in TBC but did it replaced both 35264 and 39086 or only normal version?
SPELL_FROST_ATTACK = 35263, SPELL_SUMMON_RAGING_FLAMES = 35275,
SPELL_QUELL_RAGING_FLAMES = 35277,
SPELL_ARCANE_BLAST = 35314, SPELL_ARCANE_BLAST = 35314,
SPELL_DRAGONS_BREATH = 35250, 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 struct boss_nethermancer_sepethrea : public BossAI
@@ -54,14 +62,18 @@ struct boss_nethermancer_sepethrea : public BossAI
{ {
DoCastVictim(SPELL_FROST_ATTACK); DoCastVictim(SPELL_FROST_ATTACK);
context.Repeat(8s); context.Repeat(8s);
}).Schedule(14s, [this](TaskContext context) }).Schedule(15s, 25s, [this](TaskContext context)
{ {
DoCastVictim(SPELL_ARCANE_BLAST); DoCastVictim(SPELL_ARCANE_BLAST);
context.Repeat(12s); if (me->GetVictim())
}).Schedule(18s, [this](TaskContext context) {
DoModifyThreatByPercent(me->GetVictim(), -50);
}
context.Repeat();
}).Schedule(20s, 30s, [this](TaskContext context)
{ {
DoCastVictim(SPELL_DRAGONS_BREATH); DoCastVictim(SPELL_DRAGONS_BREATH);
context.Repeat(16s); context.Repeat(25s, 35s);
if (roll_chance_i(50)) if (roll_chance_i(50))
{ {
Talk(SAY_DRAGONS_BREATH); Talk(SAY_DRAGONS_BREATH);
@@ -69,7 +81,14 @@ struct boss_nethermancer_sepethrea : public BossAI
}); });
Talk(SAY_AGGRO); 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 void JustSummoned(Creature* summon) override
@@ -95,34 +114,56 @@ struct boss_nethermancer_sepethrea : public BossAI
{ {
_JustDied(); _JustDied();
Talk(SAY_DEATH); Talk(SAY_DEATH);
DoCastSelf(SPELL_QUELL_RAGING_FLAMES, true);
} }
}; };
enum raginFlames struct npc_raging_flames : public ScriptedAI
{ {
SPELL_INFERNO = 35268, npc_raging_flames(Creature* creature) : ScriptedAI(creature) { }
SPELL_FIRE_TAIL = 35278,
SPELL_INFERNO_DAMAGE = 35283,
EVENT_SPELL_FIRE_TAIL = 1, void InitializeAI() override
EVENT_SPELL_INFERNO = 2 {
}; me->SetCorpseDelay(20);
}
struct npc_ragin_flames : public ScriptedAI // It's more tricky actually
{ void FixateRandomTarget()
npc_ragin_flames(Creature* creature) : ScriptedAI(creature) { } {
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 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); me->KillSelf();
events.ScheduleEvent(EVENT_SPELL_INFERNO, urand(10000, 20000));
} }
void UpdateAI(uint32 diff) override void UpdateAI(uint32 diff) override
@@ -130,26 +171,13 @@ struct npc_ragin_flames : public ScriptedAI
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
events.Update(diff); _scheduler.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;
}
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
private:
TaskScheduler _scheduler;
}; };
class spell_ragin_flames_inferno : public AuraScript class spell_ragin_flames_inferno : public AuraScript
@@ -170,6 +198,6 @@ class spell_ragin_flames_inferno : public AuraScript
void AddSC_boss_nethermancer_sepethrea() void AddSC_boss_nethermancer_sepethrea()
{ {
RegisterMechanarCreatureAI(boss_nethermancer_sepethrea); RegisterMechanarCreatureAI(boss_nethermancer_sepethrea);
RegisterMechanarCreatureAI(npc_ragin_flames); RegisterMechanarCreatureAI(npc_raging_flames);
RegisterSpellScript(spell_ragin_flames_inferno); RegisterSpellScript(spell_ragin_flames_inferno);
} }