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
{
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);
}