mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 08:55:32 +01:00
Scripts/Mana Tombs: Update scripts (#31024)
This commit is contained in:
3
sql/updates/world/3.3.5/2025_06_10_01_world.sql
Normal file
3
sql/updates/world/3.3.5/2025_06_10_01_world.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
--
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` = 185522 AND `source_type` = 1 AND `id` = 1;
|
||||
UPDATE `smart_scripts` SET `link` = 0 WHERE `entryorguid` = 185522 AND `source_type` = 1 AND `id` = 0;
|
||||
@@ -15,80 +15,74 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Boss_NexusPrince_Shaffar
|
||||
SD%Complete: 80
|
||||
SDComment: Need more tuning of spell timers, it should not be as linear fight as current. Also should possibly find a better way to deal with his three initial beacons to make sure all aggro.
|
||||
SDCategory: Auchindoun, Mana Tombs
|
||||
EndScriptData */
|
||||
/*
|
||||
* Timers requires to be revisited
|
||||
* Find a better way to deal with his three initial beacons to make sure all aggro
|
||||
* His caster mode requires rechecks
|
||||
* Move away after succesful Frost Nova cast (seems like doesn't always triggered)
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellInfo.h"
|
||||
#include "mana_tombs.h"
|
||||
#include "MotionMaster.h"
|
||||
#include "ScriptedCreature.h"
|
||||
|
||||
enum Yells
|
||||
enum ShaffarTexts
|
||||
{
|
||||
SAY_INTRO = 0,
|
||||
SAY_AGGRO = 1,
|
||||
SAY_SLAY = 2,
|
||||
SAY_SUMMON = 3,
|
||||
SAY_DEAD = 4
|
||||
SAY_DEATH = 4
|
||||
};
|
||||
|
||||
enum Spells
|
||||
enum ShaffarSpells
|
||||
{
|
||||
// Shaffar
|
||||
SPELL_BLINK = 34605,
|
||||
SPELL_FROSTBOLT = 32364,
|
||||
SPELL_FIREBALL = 32363,
|
||||
SPELL_FROSTBOLT = 32364,
|
||||
SPELL_FROSTNOVA = 32365,
|
||||
|
||||
SPELL_ETHEREAL_BEACON = 32371, // Summons NPC_BEACON
|
||||
SPELL_ETHEREAL_BEACON_VISUAL = 32368,
|
||||
SPELL_ETHEREAL_BEACON = 32371,
|
||||
|
||||
// Ethereal Beacon
|
||||
SPELL_ETHEREAL_BEACON_VISUAL = 32368,
|
||||
SPELL_ARCANE_BOLT = 15254,
|
||||
SPELL_ETHEREAL_APPRENTICE = 32372 // Summon 18430
|
||||
SPELL_ETHEREAL_APPRENTICE = 32372
|
||||
};
|
||||
|
||||
enum Creatures
|
||||
enum ShaffarEvents
|
||||
{
|
||||
EVENT_BLINK = 1,
|
||||
EVENT_BEACON,
|
||||
EVENT_MAIN_SPELL,
|
||||
EVENT_FROST_NOVA,
|
||||
|
||||
// Ethereal Beacon
|
||||
EVENT_SUMMON_APPRENTICE,
|
||||
EVENT_ARCANE_BOLT
|
||||
};
|
||||
|
||||
enum ShaffarCreatures
|
||||
{
|
||||
NPC_BEACON = 18431,
|
||||
NPC_SHAFFAR = 18344
|
||||
};
|
||||
|
||||
enum Misc
|
||||
{
|
||||
NR_INITIAL_BEACONS = 3
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_BLINK = 1,
|
||||
EVENT_BEACON,
|
||||
EVENT_FIREBALL,
|
||||
EVENT_FROSTBOLT,
|
||||
EVENT_FROST_NOVA
|
||||
};
|
||||
|
||||
// 18344 - Nexus-Prince Shaffar
|
||||
struct boss_nexusprince_shaffar : public BossAI
|
||||
{
|
||||
boss_nexusprince_shaffar(Creature* creature) : BossAI(creature, DATA_NEXUSPRINCE_SHAFFAR)
|
||||
{
|
||||
_hasTaunted = false;
|
||||
}
|
||||
boss_nexusprince_shaffar(Creature* creature) : BossAI(creature, DATA_NEXUSPRINCE_SHAFFAR), _hasTaunted(false) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
|
||||
float dist = 8.0f;
|
||||
float posX, posY, posZ, angle;
|
||||
me->GetHomePosition(posX, posY, posZ, angle);
|
||||
|
||||
me->SummonCreature(NPC_BEACON, posX - dist, posY - dist, posZ, angle, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2h);
|
||||
me->SummonCreature(NPC_BEACON, posX - dist, posY + dist, posZ, angle, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2h);
|
||||
me->SummonCreature(NPC_BEACON, posX + dist, posY, posZ, angle, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2h);
|
||||
me->SummonCreature(NPC_BEACON, -191.116f, 3.82914f, 16.7834f, 3.62003f, TEMPSUMMON_MANUAL_DESPAWN);
|
||||
me->SummonCreature(NPC_BEACON, -180.408f, 10.9629f, 16.7025f, 3.45070f, TEMPSUMMON_MANUAL_DESPAWN);
|
||||
me->SummonCreature(NPC_BEACON, -185.980f, 14.4201f, 16.7234f, 1.31540f, TEMPSUMMON_MANUAL_DESPAWN);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who) override
|
||||
@@ -105,25 +99,33 @@ struct boss_nexusprince_shaffar : public BossAI
|
||||
Talk(SAY_AGGRO);
|
||||
BossAI::JustEngagedWith(who);
|
||||
|
||||
events.ScheduleEvent(EVENT_BEACON, 10s);
|
||||
events.ScheduleEvent(EVENT_FIREBALL, 8s);
|
||||
events.ScheduleEvent(EVENT_FROSTBOLT, 4s);
|
||||
events.ScheduleEvent(EVENT_FROST_NOVA, 15s);
|
||||
events.ScheduleEvent(EVENT_BLINK, 20s, 30s);
|
||||
events.ScheduleEvent(EVENT_BEACON, 10s, 30s);
|
||||
events.ScheduleEvent(EVENT_MAIN_SPELL, 0s, 6s);
|
||||
events.ScheduleEvent(EVENT_FROST_NOVA, 15s, 35s);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summoned) override
|
||||
{
|
||||
if (summoned->GetEntry() == NPC_BEACON)
|
||||
{
|
||||
summoned->CastSpell(summoned, SPELL_ETHEREAL_BEACON_VISUAL, false);
|
||||
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||
summoned->AI()->AttackStart(target);
|
||||
|
||||
if (!me->IsInCombat())
|
||||
summoned->GetMotionMaster()->MoveRandom(5.0f);
|
||||
}
|
||||
|
||||
summons.Summon(summoned);
|
||||
}
|
||||
|
||||
void OnSpellCast(SpellInfo const* spell) override
|
||||
{
|
||||
if (spell->Id == SPELL_ETHEREAL_BEACON)
|
||||
if (roll_chance_i(50))
|
||||
Talk(SAY_SUMMON);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim) override
|
||||
{
|
||||
if (victim->GetTypeId() == TYPEID_PLAYER)
|
||||
@@ -132,7 +134,7 @@ struct boss_nexusprince_shaffar : public BossAI
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_DEAD);
|
||||
Talk(SAY_DEATH);
|
||||
_JustDied();
|
||||
}
|
||||
|
||||
@@ -141,34 +143,25 @@ struct boss_nexusprince_shaffar : public BossAI
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_BLINK:
|
||||
if (me->IsNonMeleeSpellCast(false))
|
||||
me->InterruptNonMeleeSpells(true);
|
||||
|
||||
// expire movement, will prevent from running right back to victim after cast
|
||||
// (but should MoveChase be used again at a certain time or should he not move?)
|
||||
me->GetMotionMaster()->Clear(MOTION_PRIORITY_NORMAL);
|
||||
|
||||
DoCast(me, SPELL_BLINK);
|
||||
DoCastSelf(SPELL_BLINK);
|
||||
events.Repeat(40s, 60s);
|
||||
events.RescheduleEvent(EVENT_MAIN_SPELL, 0s);
|
||||
break;
|
||||
case EVENT_BEACON:
|
||||
if (!urand(0, 3))
|
||||
Talk(SAY_SUMMON);
|
||||
DoCastSelf(SPELL_ETHEREAL_BEACON);
|
||||
events.Repeat(20s);
|
||||
break;
|
||||
case EVENT_MAIN_SPELL:
|
||||
DoCastVictim(RAND(SPELL_FIREBALL, SPELL_FROSTBOLT));
|
||||
|
||||
DoCast(me, SPELL_ETHEREAL_BEACON, true);
|
||||
events.ScheduleEvent(EVENT_BEACON, 10s);
|
||||
break;
|
||||
case EVENT_FIREBALL:
|
||||
DoCastVictim(SPELL_FROSTBOLT);
|
||||
events.ScheduleEvent(EVENT_FIREBALL, 4500ms, 6s);
|
||||
break;
|
||||
case EVENT_FROSTBOLT:
|
||||
DoCastVictim(SPELL_FROSTBOLT);
|
||||
events.ScheduleEvent(EVENT_FROSTBOLT, 4500ms, 6s);
|
||||
if (me->IsWithinMeleeRange(me->GetVictim()))
|
||||
events.Repeat(1s, 6s);
|
||||
else
|
||||
events.Repeat(1s);
|
||||
break;
|
||||
case EVENT_FROST_NOVA:
|
||||
DoCast(me, SPELL_FROSTNOVA);
|
||||
events.ScheduleEvent(EVENT_FROST_NOVA, 17500ms, 25s);
|
||||
events.ScheduleEvent(EVENT_BLINK, 1500ms);
|
||||
DoCastSelf(SPELL_FROSTNOVA);
|
||||
events.Repeat(15s, 25s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -179,16 +172,16 @@ private:
|
||||
bool _hasTaunted;
|
||||
};
|
||||
|
||||
enum EtherealBeacon
|
||||
{
|
||||
EVENT_APPRENTICE = 1,
|
||||
EVENT_ARCANE_BOLT
|
||||
};
|
||||
|
||||
// 18431 - Ethereal Beacon
|
||||
struct npc_ethereal_beacon : public ScriptedAI
|
||||
{
|
||||
npc_ethereal_beacon(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
DoCastSelf(SPELL_ETHEREAL_BEACON_VISUAL);
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_events.Reset();
|
||||
@@ -200,8 +193,8 @@ struct npc_ethereal_beacon : public ScriptedAI
|
||||
if (!shaffar->IsInCombat())
|
||||
shaffar->AI()->AttackStart(who);
|
||||
|
||||
_events.ScheduleEvent(EVENT_APPRENTICE, DUNGEON_MODE(20s, 10s));
|
||||
_events.ScheduleEvent(EVENT_ARCANE_BOLT, 1s);
|
||||
_events.ScheduleEvent(EVENT_SUMMON_APPRENTICE, DUNGEON_MODE(20s, 10s));
|
||||
_events.ScheduleEvent(EVENT_ARCANE_BOLT, 3s, 10s);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summoned) override
|
||||
@@ -223,13 +216,17 @@ struct npc_ethereal_beacon : public ScriptedAI
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_APPRENTICE:
|
||||
DoCast(me, SPELL_ETHEREAL_APPRENTICE, true);
|
||||
me->DespawnOrUnsummon();
|
||||
case EVENT_SUMMON_APPRENTICE:
|
||||
DoCastSelf(SPELL_ETHEREAL_APPRENTICE);
|
||||
me->AttackStop();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetImmuneToPC(true);
|
||||
me->SetUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
|
||||
me->DespawnOrUnsummon(2s);
|
||||
break;
|
||||
case EVENT_ARCANE_BOLT:
|
||||
DoCastVictim(SPELL_ARCANE_BOLT);
|
||||
_events.ScheduleEvent(EVENT_ARCANE_BOLT, 2s, 4500ms);
|
||||
_events.Repeat(3s, 10s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -243,16 +240,23 @@ private:
|
||||
|
||||
enum EtherealApprentice
|
||||
{
|
||||
SPELL_SIMPLE_TELEPORT = 12980,
|
||||
SPELL_ETHEREAL_APPRENTICE_FIREBOLT = 32369,
|
||||
SPELL_ETHEREAL_APPRENTICE_FROSTBOLT = 32370,
|
||||
EVENT_ETHEREAL_APPRENTICE_FIREBOLT = 1,
|
||||
EVENT_ETHEREAL_APPRENTICE_FROSTBOLT
|
||||
};
|
||||
|
||||
// 18430 - Ethereal Apprentice
|
||||
struct npc_ethereal_apprentice : public ScriptedAI
|
||||
{
|
||||
npc_ethereal_apprentice(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
DoCastSelf(SPELL_SIMPLE_TELEPORT);
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_events.Reset();
|
||||
@@ -260,7 +264,7 @@ struct npc_ethereal_apprentice : public ScriptedAI
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_ETHEREAL_APPRENTICE_FIREBOLT, 3s);
|
||||
_events.ScheduleEvent(RAND(EVENT_ETHEREAL_APPRENTICE_FIREBOLT, EVENT_ETHEREAL_APPRENTICE_FROSTBOLT), 0s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -278,11 +282,11 @@ struct npc_ethereal_apprentice : public ScriptedAI
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_ETHEREAL_APPRENTICE_FIREBOLT:
|
||||
DoCastVictim(SPELL_ETHEREAL_APPRENTICE_FIREBOLT, true);
|
||||
DoCastVictim(SPELL_ETHEREAL_APPRENTICE_FIREBOLT);
|
||||
_events.ScheduleEvent(EVENT_ETHEREAL_APPRENTICE_FROSTBOLT, 3s);
|
||||
break;
|
||||
case EVENT_ETHEREAL_APPRENTICE_FROSTBOLT:
|
||||
DoCastVictim(SPELL_ETHEREAL_APPRENTICE_FROSTBOLT, true);
|
||||
DoCastVictim(SPELL_ETHEREAL_APPRENTICE_FROSTBOLT);
|
||||
_events.ScheduleEvent(EVENT_ETHEREAL_APPRENTICE_FIREBOLT, 3s);
|
||||
break;
|
||||
default:
|
||||
@@ -295,55 +299,9 @@ private:
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
enum Yor
|
||||
{
|
||||
SPELL_DOUBLE_BREATH = 38361,
|
||||
EVENT_DOUBLE_BREATH = 1
|
||||
};
|
||||
|
||||
struct npc_yor : public ScriptedAI
|
||||
{
|
||||
npc_yor(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void Reset() override { }
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_DOUBLE_BREATH, 6s, 9s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_DOUBLE_BREATH:
|
||||
if (me->IsWithinDist(me->GetVictim(), ATTACK_DISTANCE))
|
||||
DoCastVictim(SPELL_DOUBLE_BREATH);
|
||||
_events.ScheduleEvent(EVENT_DOUBLE_BREATH, 6s, 9s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
void AddSC_boss_nexusprince_shaffar()
|
||||
{
|
||||
RegisterManaTombsCreatureAI(boss_nexusprince_shaffar);
|
||||
RegisterManaTombsCreatureAI(npc_ethereal_beacon);
|
||||
RegisterManaTombsCreatureAI(npc_ethereal_apprentice);
|
||||
RegisterManaTombsCreatureAI(npc_yor);
|
||||
}
|
||||
|
||||
@@ -15,53 +15,49 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Timers requires to be revisited
|
||||
* Is Dark Shell cast really delayed?
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellInfo.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "mana_tombs.h"
|
||||
|
||||
enum Texts
|
||||
enum PandemoniusTexts
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_KILL = 1,
|
||||
SAY_DEATH = 2,
|
||||
EMOTE_DARK_SHELL = 3
|
||||
SAY_AGGRO = 0,
|
||||
SAY_SLAY = 1,
|
||||
SAY_DEATH = 2,
|
||||
EMOTE_DARK_SHELL = 3
|
||||
};
|
||||
|
||||
enum Spells
|
||||
enum PandemoniusSpells
|
||||
{
|
||||
SPELL_VOID_BLAST = 32325,
|
||||
SPELL_DARK_SHELL = 32358
|
||||
SPELL_VOID_BLAST = 32325,
|
||||
SPELL_VOID_BLAST_SCRIPT = 32326, // NYI. Is it used? What it does?
|
||||
SPELL_DARK_SHELL = 32358
|
||||
};
|
||||
|
||||
enum Events
|
||||
enum PandemoniusEvents
|
||||
{
|
||||
EVENT_VOID_BLAST = 1,
|
||||
EVENT_VOID_BLAST = 1,
|
||||
EVENT_DARK_SHELL
|
||||
};
|
||||
|
||||
uint32 constexpr DARK_SHELL_EVENT_GROUP = 1;
|
||||
|
||||
// 18341 - Pandemonius
|
||||
struct boss_pandemonius : public BossAI
|
||||
{
|
||||
boss_pandemonius(Creature* creature) : BossAI(creature, DATA_PANDEMONIUS)
|
||||
{
|
||||
VoidBlastCounter = 0;
|
||||
}
|
||||
boss_pandemonius(Creature* creature) : BossAI(creature, DATA_PANDEMONIUS), _voidBlastCounter(0) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
VoidBlastCounter = 0;
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override
|
||||
{
|
||||
Talk(SAY_KILL);
|
||||
_voidBlastCounter = 0;
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
@@ -72,6 +68,23 @@ struct boss_pandemonius : public BossAI
|
||||
events.ScheduleEvent(EVENT_VOID_BLAST, 8s, 23s);
|
||||
}
|
||||
|
||||
void OnSpellStart(SpellInfo const* spell) override
|
||||
{
|
||||
if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_DARK_SHELL, me))
|
||||
Talk(EMOTE_DARK_SHELL);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override
|
||||
{
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
_JustDied();
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
@@ -80,12 +93,12 @@ struct boss_pandemonius : public BossAI
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
|
||||
{
|
||||
DoCast(target, SPELL_VOID_BLAST);
|
||||
++VoidBlastCounter;
|
||||
++_voidBlastCounter;
|
||||
}
|
||||
|
||||
if (VoidBlastCounter == 5)
|
||||
if (_voidBlastCounter == 5)
|
||||
{
|
||||
VoidBlastCounter = 0;
|
||||
_voidBlastCounter = 0;
|
||||
events.ScheduleEvent(EVENT_VOID_BLAST, 15s, 25s);
|
||||
}
|
||||
else
|
||||
@@ -95,10 +108,7 @@ struct boss_pandemonius : public BossAI
|
||||
}
|
||||
break;
|
||||
case EVENT_DARK_SHELL:
|
||||
if (me->IsNonMeleeSpellCast(false))
|
||||
me->InterruptNonMeleeSpells(true);
|
||||
Talk(EMOTE_DARK_SHELL);
|
||||
DoCast(me, SPELL_DARK_SHELL);
|
||||
DoCastSelf(SPELL_DARK_SHELL);
|
||||
events.ScheduleEvent(EVENT_DARK_SHELL, 20s, DARK_SHELL_EVENT_GROUP);
|
||||
break;
|
||||
default:
|
||||
@@ -106,8 +116,8 @@ struct boss_pandemonius : public BossAI
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 VoidBlastCounter;
|
||||
private:
|
||||
uint32 _voidBlastCounter;
|
||||
};
|
||||
|
||||
void AddSC_boss_pandemonius()
|
||||
|
||||
@@ -16,10 +16,58 @@
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellScript.h"
|
||||
#include "Unit.h"
|
||||
#include "mana_tombs.h"
|
||||
|
||||
enum
|
||||
enum YorSpells
|
||||
{
|
||||
SPELL_DOUBLE_BREATH = 38361
|
||||
};
|
||||
|
||||
// 22930 - Yor
|
||||
struct npc_yor : public ScriptedAI
|
||||
{
|
||||
npc_yor(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void JustAppeared() override
|
||||
{
|
||||
_scheduler.Schedule(1500ms, [this](TaskContext /*task*/)
|
||||
{
|
||||
me->SetFaction(FACTION_MONSTER_2);
|
||||
});
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
_scheduler.Schedule(6s, 14s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_DOUBLE_BREATH);
|
||||
task.Repeat(8s, 14s);
|
||||
});
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
_scheduler.CancelAll();
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
_scheduler.Update(diff);
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
TaskScheduler _scheduler;
|
||||
};
|
||||
|
||||
enum SummonArcaneFiends
|
||||
{
|
||||
SPELL_SUMMON_ARCANE_FIEND_1 = 32349,
|
||||
SPELL_SUMMON_ARCANE_FIEND_2 = 32353
|
||||
@@ -54,5 +102,6 @@ class spell_mana_tombs_summon_arcane_fiends : public SpellScript
|
||||
|
||||
void AddSC_mana_tombs()
|
||||
{
|
||||
RegisterManaTombsCreatureAI(npc_yor);
|
||||
RegisterSpellScript(spell_mana_tombs_summon_arcane_fiends);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user