mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-03-16 14:05:28 +00:00
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:
@@ -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;
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user