mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 18:15:31 +01:00
Scripts/Violet Hold: Modernize scripts (#30990)
This commit is contained in:
@@ -21,28 +21,29 @@
|
||||
#include "ScriptedCreature.h"
|
||||
#include "violet_hold.h"
|
||||
|
||||
enum Spells
|
||||
enum CyanigosaTexts
|
||||
{
|
||||
SPELL_SUMMON_PLAYER = 21150,
|
||||
SPELL_ARCANE_VACUUM = 58694,
|
||||
SPELL_BLIZZARD = 58693,
|
||||
SPELL_MANA_DESTRUCTION = 59374,
|
||||
SPELL_TAIL_SWEEP = 58690,
|
||||
SPELL_UNCONTROLLABLE_ENERGY = 58688,
|
||||
SPELL_TRANSFORM = 58668
|
||||
SAY_AGGRO = 0,
|
||||
SAY_SLAY = 1,
|
||||
SAY_DEATH = 2,
|
||||
SAY_SPAWN = 3,
|
||||
SAY_DISRUPTION = 4,
|
||||
SAY_BREATH_ATTACK = 5,
|
||||
SAY_SPECIAL_ATTACK = 6
|
||||
};
|
||||
|
||||
enum Yells
|
||||
enum CyanigosaSpells
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_SLAY = 1,
|
||||
SAY_DEATH = 2,
|
||||
SAY_SPAWN = 3,
|
||||
SAY_DISRUPTION = 4,
|
||||
SAY_BREATH_ATTACK = 5,
|
||||
SAY_SPECIAL_ATTACK = 6
|
||||
SPELL_SUMMON_PLAYER = 21150,
|
||||
SPELL_ARCANE_VACUUM = 58694,
|
||||
SPELL_BLIZZARD = 58693,
|
||||
SPELL_MANA_DESTRUCTION = 59374,
|
||||
SPELL_TAIL_SWEEP = 58690,
|
||||
SPELL_UNCONTROLLABLE_ENERGY = 58688,
|
||||
SPELL_TRANSFORM = 58668
|
||||
};
|
||||
|
||||
// 31134 - Cyanigosa
|
||||
struct boss_cyanigosa : public BossAI
|
||||
{
|
||||
boss_cyanigosa(Creature* creature) : BossAI(creature, DATA_CYANIGOSA) { }
|
||||
@@ -78,26 +79,26 @@ struct boss_cyanigosa : public BossAI
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
scheduler.Schedule(Seconds(10), [this](TaskContext task)
|
||||
scheduler.Schedule(10s, [this](TaskContext task)
|
||||
{
|
||||
DoCastAOE(SPELL_ARCANE_VACUUM);
|
||||
task.Repeat();
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(15), [this](TaskContext task)
|
||||
scheduler.Schedule(15s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true))
|
||||
DoCast(target, SPELL_BLIZZARD);
|
||||
task.Repeat();
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(20), [this](TaskContext task)
|
||||
scheduler.Schedule(20s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_TAIL_SWEEP);
|
||||
task.Repeat();
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(25), [this](TaskContext task)
|
||||
scheduler.Schedule(25s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_UNCONTROLLABLE_ENERGY);
|
||||
task.Repeat();
|
||||
@@ -105,7 +106,7 @@ struct boss_cyanigosa : public BossAI
|
||||
|
||||
if (IsHeroic())
|
||||
{
|
||||
scheduler.Schedule(Seconds(30), [this](TaskContext task)
|
||||
scheduler.Schedule(30s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
|
||||
DoCast(target, SPELL_MANA_DESTRUCTION);
|
||||
@@ -115,24 +116,6 @@ struct boss_cyanigosa : public BossAI
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_defenseless : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_defenseless() : AchievementCriteriaScript("achievement_defenseless") { }
|
||||
|
||||
bool OnCheck(Player* /*player*/, Unit* target) override
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
InstanceScript* instance = target->GetInstanceScript();
|
||||
if (!instance)
|
||||
return false;
|
||||
|
||||
return instance->GetData(DATA_DEFENSELESS) != 0;
|
||||
}
|
||||
};
|
||||
|
||||
// 58694 - Arcane Vacuum
|
||||
class spell_cyanigosa_arcane_vacuum : public SpellScript
|
||||
{
|
||||
@@ -154,9 +137,27 @@ class spell_cyanigosa_arcane_vacuum : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_defenseless : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_defenseless() : AchievementCriteriaScript("achievement_defenseless") { }
|
||||
|
||||
bool OnCheck(Player* /*player*/, Unit* target) override
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
InstanceScript* instance = target->GetInstanceScript();
|
||||
if (!instance)
|
||||
return false;
|
||||
|
||||
return instance->GetData(DATA_DEFENSELESS) != 0;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_cyanigosa()
|
||||
{
|
||||
RegisterVioletHoldCreatureAI(boss_cyanigosa);
|
||||
new achievement_defenseless();
|
||||
RegisterSpellScript(spell_cyanigosa_arcane_vacuum);
|
||||
new achievement_defenseless();
|
||||
}
|
||||
|
||||
@@ -22,28 +22,30 @@
|
||||
#include "ScriptedCreature.h"
|
||||
#include "violet_hold.h"
|
||||
|
||||
enum Spells
|
||||
enum ErekemTexts
|
||||
{
|
||||
SPELL_BLOODLUST = 54516,
|
||||
SPELL_BREAK_BONDS = 59463,
|
||||
SPELL_CHAIN_HEAL = 54481,
|
||||
SPELL_EARTH_SHIELD = 54479,
|
||||
SPELL_EARTH_SHOCK = 54511,
|
||||
SPELL_LIGHTNING_BOLT = 53044,
|
||||
SPELL_STORMSTRIKE = 51876,
|
||||
SPELL_WINDFURY = 54493
|
||||
SAY_AGGRO = 0,
|
||||
SAY_SLAY = 1,
|
||||
SAY_DEATH = 2,
|
||||
SAY_SPAWN = 3,
|
||||
SAY_ADD_KILLED = 4,
|
||||
SAY_BOTH_ADDS_KILLED = 5
|
||||
};
|
||||
|
||||
enum Yells
|
||||
enum ErekemSpells
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_SLAY = 1,
|
||||
SAY_DEATH = 2,
|
||||
SAY_SPAWN = 3,
|
||||
SAY_ADD_KILLED = 4,
|
||||
SAY_BOTH_ADDS_KILLED = 5
|
||||
SPELL_BLOODLUST = 54516,
|
||||
SPELL_BREAK_BONDS = 59463,
|
||||
SPELL_CHAIN_HEAL = 54481,
|
||||
SPELL_EARTH_SHIELD = 54479,
|
||||
SPELL_EARTH_SHOCK = 54511,
|
||||
SPELL_LIGHTNING_BOLT = 53044,
|
||||
SPELL_STORMSTRIKE = 51876,
|
||||
SPELL_WINDFURY = 54493
|
||||
};
|
||||
|
||||
// 29315 - Erekem
|
||||
// 32226 - Arakkoa Windwalker
|
||||
struct boss_erekem : public BossAI
|
||||
{
|
||||
boss_erekem(Creature* creature) : BossAI(creature, DATA_EREKEM)
|
||||
@@ -179,43 +181,43 @@ struct boss_erekem : public BossAI
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
scheduler.Schedule(Seconds(20), [this](TaskContext task)
|
||||
scheduler.Schedule(20s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* ally = DoSelectLowestHpFriendly(30.0f))
|
||||
DoCast(ally, SPELL_EARTH_SHIELD);
|
||||
|
||||
task.Repeat(Seconds(20));
|
||||
task.Repeat(20s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(2), [this](TaskContext task)
|
||||
scheduler.Schedule(2s, [this](TaskContext task)
|
||||
{
|
||||
DoCast(SPELL_BLOODLUST);
|
||||
task.Repeat(Seconds(35), Seconds(45));
|
||||
task.Repeat(35s, 45s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(2), [this](TaskContext task)
|
||||
scheduler.Schedule(2s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f))
|
||||
DoCast(target, SPELL_LIGHTNING_BOLT);
|
||||
|
||||
task.Repeat(Milliseconds(2500));
|
||||
task.Repeat(2500ms);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(10), [this](TaskContext task)
|
||||
scheduler.Schedule(10s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* ally = DoSelectLowestHpFriendly(40.0f))
|
||||
DoCast(ally, SPELL_CHAIN_HEAL);
|
||||
|
||||
if (!CheckGuardAlive())
|
||||
task.Repeat(Seconds(3));
|
||||
task.Repeat(3s);
|
||||
else
|
||||
task.Repeat(Seconds(8), Seconds(11));
|
||||
task.Repeat(8s, 11s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(2), Seconds(8), [this](TaskContext task)
|
||||
scheduler.Schedule(2s, 8s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_EARTH_SHOCK);
|
||||
task.Repeat(Seconds(8), Seconds(13));
|
||||
task.Repeat(8s, 13s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(0s, [this](TaskContext task)
|
||||
@@ -227,11 +229,11 @@ struct boss_erekem : public BossAI
|
||||
if (guard && guard->IsAlive() && CheckGuardAuras(guard))
|
||||
{
|
||||
DoCastAOE(SPELL_BREAK_BONDS);
|
||||
task.Repeat(Seconds(10));
|
||||
task.Repeat(10s);
|
||||
return;
|
||||
}
|
||||
}
|
||||
task.Repeat(Milliseconds(500));
|
||||
task.Repeat(500ms);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -246,6 +248,8 @@ enum GuardSpells
|
||||
SPELL_STRIKE = 14516
|
||||
};
|
||||
|
||||
// 29395 - Erekem Guard
|
||||
// 32228 - Arakkoa Talon Guard
|
||||
struct npc_erekem_guard : public ScriptedAI
|
||||
{
|
||||
npc_erekem_guard(Creature* creature) : ScriptedAI(creature) { }
|
||||
@@ -271,22 +275,22 @@ struct npc_erekem_guard : public ScriptedAI
|
||||
|
||||
void ScheduledTasks()
|
||||
{
|
||||
scheduler.Schedule(Seconds(4), Seconds(8), [this](TaskContext task)
|
||||
scheduler.Schedule(4s, 8s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_STRIKE);
|
||||
task.Repeat(Seconds(4), Seconds(8));
|
||||
task.Repeat(4s, 8s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(8), Seconds(13), [this](TaskContext task)
|
||||
scheduler.Schedule(8s, 13s, [this](TaskContext task)
|
||||
{
|
||||
DoCastAOE(SPELL_HOWLING_SCREECH);
|
||||
task.Repeat(Seconds(8), Seconds(13));
|
||||
task.Repeat(8s, 13s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(1), Seconds(3), [this](TaskContext task)
|
||||
scheduler.Schedule(1s, 3s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_GUSHING_WOUND);
|
||||
task.Repeat(Seconds(7), Seconds(12));
|
||||
task.Repeat(7s, 12s);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,19 @@
|
||||
#include "SpellScript.h"
|
||||
#include "violet_hold.h"
|
||||
|
||||
enum Spells
|
||||
enum IchoronTexts
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_SLAY = 1,
|
||||
SAY_DEATH = 2,
|
||||
SAY_SPAWN = 3,
|
||||
SAY_ENRAGE = 4,
|
||||
SAY_SHATTER = 5,
|
||||
SAY_BUBBLE = 6,
|
||||
EMOTE_SHATTER = 7
|
||||
};
|
||||
|
||||
enum IchoronSpells
|
||||
{
|
||||
SPELL_WATER_BLAST = 54237,
|
||||
SPELL_WATER_BOLT_VOLLEY = 54241,
|
||||
@@ -47,30 +59,20 @@ enum Spells
|
||||
SPELL_SPLASH = 59516
|
||||
};
|
||||
|
||||
enum Yells
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_SLAY = 1,
|
||||
SAY_DEATH = 2,
|
||||
SAY_SPAWN = 3,
|
||||
SAY_ENRAGE = 4,
|
||||
SAY_SHATTER = 5,
|
||||
SAY_BUBBLE = 6,
|
||||
EMOTE_SHATTER = 7
|
||||
};
|
||||
|
||||
enum Actions
|
||||
enum IchoronActions
|
||||
{
|
||||
ACTION_WATER_GLOBULE_HIT = 1,
|
||||
ACTION_PROTECTIVE_BUBBLE_SHATTERED = 2,
|
||||
ACTION_DRAINED = 3
|
||||
};
|
||||
|
||||
enum Misc
|
||||
enum IchoronMisc
|
||||
{
|
||||
DATA_DEHYDRATION = 1
|
||||
};
|
||||
|
||||
// 29313 - Ichoron
|
||||
// 32234 - Swirling Water Revenant
|
||||
struct boss_ichoron : public BossAI
|
||||
{
|
||||
boss_ichoron(Creature* creature) : BossAI(creature, DATA_ICHORON)
|
||||
@@ -131,7 +133,7 @@ struct boss_ichoron : public BossAI
|
||||
me->LowerPlayerDamageReq(damage);
|
||||
me->ModifyHealth(-std::min<int32>(damage, me->GetHealth() - 1));
|
||||
|
||||
scheduler.DelayAll(Seconds(15));
|
||||
scheduler.DelayAll(15s);
|
||||
break;
|
||||
}
|
||||
case ACTION_DRAINED:
|
||||
@@ -205,17 +207,17 @@ struct boss_ichoron : public BossAI
|
||||
DoCast(me, SPELL_PROTECTIVE_BUBBLE);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(10), Seconds(15), [this](TaskContext task)
|
||||
scheduler.Schedule(10s, 15s, [this](TaskContext task)
|
||||
{
|
||||
DoCastAOE(SPELL_WATER_BOLT_VOLLEY);
|
||||
task.Repeat(Seconds(10), Seconds(15));
|
||||
task.Repeat(10s, 15s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(6), Seconds(9), [this](TaskContext task)
|
||||
scheduler.Schedule(6s, 9s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f))
|
||||
DoCast(target, SPELL_WATER_BLAST);
|
||||
task.Repeat(Seconds(6), Seconds(9));
|
||||
task.Repeat(6s, 9s);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -224,6 +226,7 @@ private:
|
||||
bool _dehydration;
|
||||
};
|
||||
|
||||
// 29321 - Ichor Globule
|
||||
struct npc_ichor_globule : public ScriptedAI
|
||||
{
|
||||
npc_ichor_globule(Creature* creature) : ScriptedAI(creature), _splashTriggered(false)
|
||||
|
||||
@@ -20,14 +20,16 @@
|
||||
#include "ScriptedCreature.h"
|
||||
#include "violet_hold.h"
|
||||
|
||||
enum Spells
|
||||
enum LavanthorSpells
|
||||
{
|
||||
SPELL_CAUTERIZING_FLAMES = 59466, // Only in heroic
|
||||
SPELL_FIREBOLT = 54235,
|
||||
SPELL_FLAME_BREATH = 54282,
|
||||
SPELL_LAVA_BURN = 54249
|
||||
SPELL_CAUTERIZING_FLAMES = 59466, // Only in heroic
|
||||
SPELL_FIREBOLT = 54235,
|
||||
SPELL_FLAME_BREATH = 54282,
|
||||
SPELL_LAVA_BURN = 54249
|
||||
};
|
||||
|
||||
// 29312 - Lavanthor
|
||||
// 32237 - Lava Hound
|
||||
struct boss_lavanthor : public BossAI
|
||||
{
|
||||
boss_lavanthor(Creature* creature) : BossAI(creature, DATA_LAVANTHOR) { }
|
||||
@@ -59,24 +61,24 @@ struct boss_lavanthor : public BossAI
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
scheduler.Schedule(Seconds(1), [this](TaskContext task)
|
||||
scheduler.Schedule(1s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
|
||||
DoCast(target, SPELL_FIREBOLT);
|
||||
task.Repeat(Seconds(5), Seconds(13));
|
||||
task.Repeat(5s, 13s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_FLAME_BREATH);
|
||||
task.Repeat(Seconds(10), Seconds(15));
|
||||
task.Repeat(10s, 15s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(10), [this](TaskContext task)
|
||||
scheduler.Schedule(10s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f))
|
||||
DoCast(target, SPELL_LAVA_BURN);
|
||||
task.Repeat(Seconds(15), Seconds(23));
|
||||
task.Repeat(15s, 23s);
|
||||
});
|
||||
|
||||
if (IsHeroic())
|
||||
@@ -84,7 +86,7 @@ struct boss_lavanthor : public BossAI
|
||||
scheduler.Schedule(Seconds(3), [this](TaskContext task)
|
||||
{
|
||||
DoCastAOE(SPELL_CAUTERIZING_FLAMES);
|
||||
task.Repeat(Seconds(10), Seconds(16));
|
||||
task.Repeat(10s, 16s);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,19 +22,21 @@
|
||||
#include "SpellScript.h"
|
||||
#include "violet_hold.h"
|
||||
|
||||
enum Spells
|
||||
enum MoraggSpells
|
||||
{
|
||||
SPELL_CORROSIVE_SALIVA = 54527,
|
||||
SPELL_OPTIC_LINK = 54396,
|
||||
SPELL_RAY_OF_PAIN = 54438,
|
||||
SPELL_RAY_OF_SUFFERING = 54442,
|
||||
SPELL_CORROSIVE_SALIVA = 54527,
|
||||
SPELL_OPTIC_LINK = 54396,
|
||||
SPELL_RAY_OF_PAIN = 54438,
|
||||
SPELL_RAY_OF_SUFFERING = 54442,
|
||||
|
||||
// Visual
|
||||
SPELL_OPTIC_LINK_LEVEL_1 = 54393,
|
||||
SPELL_OPTIC_LINK_LEVEL_2 = 54394,
|
||||
SPELL_OPTIC_LINK_LEVEL_3 = 54395
|
||||
SPELL_OPTIC_LINK_LEVEL_1 = 54393,
|
||||
SPELL_OPTIC_LINK_LEVEL_2 = 54394,
|
||||
SPELL_OPTIC_LINK_LEVEL_3 = 54395
|
||||
};
|
||||
|
||||
// 29316 - Moragg
|
||||
// 32235 - Chaos Watcher
|
||||
struct boss_moragg : public BossAI
|
||||
{
|
||||
boss_moragg(Creature* creature) : BossAI(creature, DATA_MORAGG) { }
|
||||
@@ -72,17 +74,17 @@ struct boss_moragg : public BossAI
|
||||
DoCast(me, SPELL_RAY_OF_SUFFERING);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(15), [this](TaskContext task)
|
||||
scheduler.Schedule(15s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
|
||||
DoCast(target, SPELL_OPTIC_LINK);
|
||||
task.Repeat(Seconds(25));
|
||||
task.Repeat(25s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_CORROSIVE_SALIVA);
|
||||
task.Repeat(Seconds(10));
|
||||
task.Repeat(10s);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -30,35 +30,7 @@
|
||||
* - Implement Ethereal Summon Target
|
||||
*/
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_ARCANE_BARRAGE_VOLLEY = 54202,
|
||||
SPELL_ARCANE_BUFFET = 54226,
|
||||
SPELL_SUMMON_TARGET_VISUAL = 54111
|
||||
};
|
||||
|
||||
static uint32 const EtherealSphereCount = 3;
|
||||
static uint32 const EtherealSphereSummonSpells[EtherealSphereCount] = { 54102, 54137, 54138 };
|
||||
static uint32 const EtherealSphereHeroicSummonSpells[EtherealSphereCount] = { 54102, 54137, 54138 };
|
||||
|
||||
enum NPCs
|
||||
{
|
||||
NPC_ETHEREAL_SPHERE = 29271,
|
||||
NPC_ETHEREAL_SPHERE2 = 32582,
|
||||
NPC_ETHEREAL_SUMMON_TARGET = 29276
|
||||
};
|
||||
|
||||
enum CreatureSpells
|
||||
{
|
||||
SPELL_ARCANE_POWER = 54160,
|
||||
H_SPELL_ARCANE_POWER = 59474,
|
||||
SPELL_MAGIC_PULL = 50770,
|
||||
SPELL_SUMMON_PLAYERS = 54164,
|
||||
SPELL_POWER_BALL_VISUAL = 54141,
|
||||
SPELL_POWER_BALL_DAMAGE_TRIGGER = 54207
|
||||
};
|
||||
|
||||
enum Yells
|
||||
enum XevozzTexts
|
||||
{
|
||||
// Xevozz
|
||||
SAY_AGGRO = 0,
|
||||
@@ -73,11 +45,41 @@ enum Yells
|
||||
SAY_ETHEREAL_SPHERE_SUMMON = 0
|
||||
};
|
||||
|
||||
enum SphereActions
|
||||
enum XevozzSpells
|
||||
{
|
||||
ACTION_SUMMON = 1,
|
||||
SPELL_ARCANE_BARRAGE_VOLLEY = 54202,
|
||||
SPELL_ARCANE_BUFFET = 54226,
|
||||
SPELL_SUMMON_TARGET_VISUAL = 54111
|
||||
};
|
||||
|
||||
static uint32 const EtherealSphereCount = 3;
|
||||
static uint32 const EtherealSphereSummonSpells[EtherealSphereCount] = { 54102, 54137, 54138 };
|
||||
static uint32 const EtherealSphereHeroicSummonSpells[EtherealSphereCount] = { 54102, 54137, 54138 };
|
||||
|
||||
enum XevozzCreatures
|
||||
{
|
||||
NPC_ETHEREAL_SPHERE = 29271,
|
||||
NPC_ETHEREAL_SPHERE2 = 32582,
|
||||
NPC_ETHEREAL_SUMMON_TARGET = 29276
|
||||
};
|
||||
|
||||
enum XevozzCreatureSpells
|
||||
{
|
||||
SPELL_ARCANE_POWER = 54160,
|
||||
H_SPELL_ARCANE_POWER = 59474,
|
||||
SPELL_MAGIC_PULL = 50770,
|
||||
SPELL_SUMMON_PLAYERS = 54164,
|
||||
SPELL_POWER_BALL_VISUAL = 54141,
|
||||
SPELL_POWER_BALL_DAMAGE_TRIGGER = 54207
|
||||
};
|
||||
|
||||
enum XevozzActions
|
||||
{
|
||||
ACTION_SUMMON = 1
|
||||
};
|
||||
|
||||
// 29266 - Xevozz
|
||||
// 32231 - Ethereal Wind Trader
|
||||
struct boss_xevozz : public BossAI
|
||||
{
|
||||
boss_xevozz(Creature* creature) : BossAI(creature, DATA_XEVOZZ) { }
|
||||
@@ -134,20 +136,20 @@ struct boss_xevozz : public BossAI
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
scheduler.Schedule(Seconds(8), Seconds(10), [this](TaskContext task)
|
||||
scheduler.Schedule(8s, 10s, [this](TaskContext task)
|
||||
{
|
||||
DoCastAOE(SPELL_ARCANE_BARRAGE_VOLLEY);
|
||||
task.Repeat(Seconds(8), Seconds(10));
|
||||
task.Repeat(8s, 10s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(10), Seconds(11), [this](TaskContext task)
|
||||
scheduler.Schedule(10s, 11s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true))
|
||||
DoCast(target, SPELL_ARCANE_BUFFET);
|
||||
task.Repeat(Seconds(15), Seconds(20));
|
||||
task.Repeat(15s, 20s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
Talk(SAY_REPEAT_SUMMON);
|
||||
|
||||
@@ -166,17 +168,19 @@ struct boss_xevozz : public BossAI
|
||||
});
|
||||
}
|
||||
|
||||
task.Schedule(Seconds(33), Seconds(35), [this](TaskContext /*task*/)
|
||||
task.Schedule(33s, 35s, [this](TaskContext /*task*/)
|
||||
{
|
||||
DummyEntryCheckPredicate pred;
|
||||
summons.DoAction(ACTION_SUMMON, pred);
|
||||
});
|
||||
|
||||
task.Repeat(Seconds(45), Seconds(47));
|
||||
task.Repeat(45s, 47s);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 29271 - Ethereal Sphere
|
||||
// 32582 - Ethereal Sphere
|
||||
struct npc_ethereal_sphere : public ScriptedAI
|
||||
{
|
||||
npc_ethereal_sphere(Creature* creature) : ScriptedAI(creature)
|
||||
@@ -211,7 +215,7 @@ struct npc_ethereal_sphere : public ScriptedAI
|
||||
|
||||
void ScheduledTasks()
|
||||
{
|
||||
scheduler.Schedule(Seconds(1), [this](TaskContext task)
|
||||
scheduler.Schedule(1s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* xevozz = instance->GetCreature(DATA_XEVOZZ))
|
||||
{
|
||||
|
||||
@@ -20,7 +20,17 @@
|
||||
#include "ScriptedCreature.h"
|
||||
#include "violet_hold.h"
|
||||
|
||||
enum Spells
|
||||
enum ZuramatTexts
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_SLAY = 1,
|
||||
SAY_DEATH = 2,
|
||||
SAY_SPAWN = 3,
|
||||
SAY_SHIELD = 4,
|
||||
SAY_WHISPER = 5
|
||||
};
|
||||
|
||||
enum ZuramatSpells
|
||||
{
|
||||
SPELL_SHROUD_OF_DARKNESS = 54524,
|
||||
SPELL_SUMMON_VOID_SENTRY = 54369,
|
||||
@@ -32,22 +42,14 @@ enum Spells
|
||||
SPELL_SUMMON_VOID_SENTRY_BALL = 58650
|
||||
};
|
||||
|
||||
enum Yells
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_SLAY = 1,
|
||||
SAY_DEATH = 2,
|
||||
SAY_SPAWN = 3,
|
||||
SAY_SHIELD = 4,
|
||||
SAY_WHISPER = 5
|
||||
};
|
||||
|
||||
enum Misc
|
||||
enum ZuramatMisc
|
||||
{
|
||||
ACTION_DESPAWN_VOID_SENTRY_BALL = 1,
|
||||
DATA_VOID_DANCE = 2153
|
||||
};
|
||||
|
||||
// 29314 - Zuramat the Obliterator
|
||||
// 32230 - Void Lord
|
||||
struct boss_zuramat : public BossAI
|
||||
{
|
||||
boss_zuramat(Creature* creature) : BossAI(creature, DATA_ZURAMAT)
|
||||
@@ -122,23 +124,23 @@ struct boss_zuramat : public BossAI
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
scheduler.Schedule(Seconds(4), [this](TaskContext task)
|
||||
scheduler.Schedule(4s, [this](TaskContext task)
|
||||
{
|
||||
DoCast(me, SPELL_SUMMON_VOID_SENTRY);
|
||||
task.Repeat(Seconds(7), Seconds(10));
|
||||
task.Repeat(7s, 10s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(9), [this](TaskContext task)
|
||||
scheduler.Schedule(9s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true))
|
||||
DoCast(target, SPELL_VOID_SHIFT);
|
||||
task.Repeat(Seconds(15));
|
||||
task.Repeat(15s);
|
||||
});
|
||||
|
||||
scheduler.Schedule(Seconds(18), Seconds(20), [this](TaskContext task)
|
||||
scheduler.Schedule(18s, 20s, [this](TaskContext task)
|
||||
{
|
||||
DoCast(me, SPELL_SHROUD_OF_DARKNESS);
|
||||
task.Repeat(Seconds(18), Seconds(20));
|
||||
task.Repeat(18s, 20s);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -146,6 +148,7 @@ private:
|
||||
bool _voidDance;
|
||||
};
|
||||
|
||||
// 29364 - Void Sentry
|
||||
struct npc_void_sentry : public ScriptedAI
|
||||
{
|
||||
npc_void_sentry(Creature* creature) : ScriptedAI(creature), _summons(creature)
|
||||
|
||||
@@ -134,7 +134,7 @@ Position const ZuramatPath[ZuramatPathSize] = // sniff
|
||||
{ 1923.226f, 847.3297f, 47.15541f }
|
||||
};
|
||||
|
||||
enum Yells
|
||||
enum VioletHoldTexts
|
||||
{
|
||||
SAY_CYANIGOSA_SPAWN = 3,
|
||||
SAY_XEVOZZ_SPAWN = 3,
|
||||
@@ -145,7 +145,7 @@ enum Yells
|
||||
SOUND_MORAGG_SPAWN = 10112
|
||||
};
|
||||
|
||||
enum Spells
|
||||
enum VioletHoldSpells
|
||||
{
|
||||
SPELL_CYANIGOSA_TRANSFORM = 58668,
|
||||
SPELL_CYANIGOSA_ARCANE_POWER_STATE = 49411,
|
||||
@@ -411,10 +411,10 @@ class instance_violet_hold : public InstanceMapScript
|
||||
if (GameObject* crystal = instance->GetGameObject(ActivationCrystalGUIDs[i]))
|
||||
crystal->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
|
||||
|
||||
Scheduler.Schedule(Seconds(3), [this](TaskContext task)
|
||||
Scheduler.Schedule(3s, [this](TaskContext task)
|
||||
{
|
||||
CheckEventState();
|
||||
task.Repeat(Seconds(3));
|
||||
task.Repeat(3s);
|
||||
});
|
||||
}
|
||||
else if (data == NOT_STARTED)
|
||||
@@ -546,7 +546,7 @@ class instance_violet_hold : public InstanceMapScript
|
||||
switch (bossId)
|
||||
{
|
||||
case DATA_MORAGG:
|
||||
Scheduler.Schedule(Seconds(2), [this](TaskContext task)
|
||||
Scheduler.Schedule(2s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* moragg = GetCreature(DATA_MORAGG))
|
||||
{
|
||||
@@ -554,12 +554,12 @@ class instance_violet_hold : public InstanceMapScript
|
||||
moragg->CastSpell(moragg, SPELL_MORAGG_EMOTE_ROAR);
|
||||
}
|
||||
|
||||
task.Schedule(Seconds(3), [this](TaskContext task)
|
||||
task.Schedule(3s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* moragg = GetCreature(DATA_MORAGG))
|
||||
moragg->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, MoraggPath, MoraggPathSize, true);
|
||||
|
||||
task.Schedule(Seconds(8), [this](TaskContext /*task*/)
|
||||
task.Schedule(8s, [this](TaskContext /*task*/)
|
||||
{
|
||||
if (Creature* moragg = GetCreature(DATA_MORAGG))
|
||||
{
|
||||
@@ -571,12 +571,12 @@ class instance_violet_hold : public InstanceMapScript
|
||||
});
|
||||
break;
|
||||
case DATA_EREKEM:
|
||||
Scheduler.Schedule(Seconds(3), [this](TaskContext task)
|
||||
Scheduler.Schedule(3s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* erekem = GetCreature(DATA_EREKEM))
|
||||
erekem->AI()->Talk(SAY_EREKEM_SPAWN);
|
||||
|
||||
task.Schedule(Seconds(5), [this](TaskContext task)
|
||||
task.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* erekem = GetCreature(DATA_EREKEM))
|
||||
erekem->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, ErekemPath, ErekemPathSize, true);
|
||||
@@ -586,12 +586,12 @@ class instance_violet_hold : public InstanceMapScript
|
||||
if (Creature* guard = instance->GetCreature(GetGuidData(DATA_EREKEM_GUARD_2)))
|
||||
guard->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, ErekemGuardRightPath, ErekemGuardRightPathSize, true);
|
||||
|
||||
task.Schedule(Seconds(6), [this](TaskContext task)
|
||||
task.Schedule(6s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* erekem = GetCreature(DATA_EREKEM))
|
||||
erekem->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
|
||||
|
||||
task.Schedule(Seconds(1), [this](TaskContext /*task*/)
|
||||
task.Schedule(1s, [this](TaskContext /*task*/)
|
||||
{
|
||||
for (uint32 i = DATA_EREKEM_GUARD_1; i <= DATA_EREKEM_GUARD_2; ++i)
|
||||
{
|
||||
@@ -610,17 +610,17 @@ class instance_violet_hold : public InstanceMapScript
|
||||
});
|
||||
break;
|
||||
case DATA_ICHORON:
|
||||
Scheduler.Schedule(Seconds(2), [this](TaskContext task)
|
||||
Scheduler.Schedule(2s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* ichoron = GetCreature(DATA_ICHORON))
|
||||
ichoron->AI()->Talk(SAY_ICHORON_SPAWN);
|
||||
|
||||
task.Schedule(Seconds(3), [this](TaskContext task)
|
||||
task.Schedule(3s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* ichoron = GetCreature(DATA_ICHORON))
|
||||
ichoron->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, IchoronPath, IchoronPathSize, true);
|
||||
|
||||
task.Schedule(Seconds(14), [this](TaskContext /*task*/)
|
||||
task.Schedule(14s, [this](TaskContext /*task*/)
|
||||
{
|
||||
if (Creature* ichoron = GetCreature(DATA_ICHORON))
|
||||
{
|
||||
@@ -632,17 +632,17 @@ class instance_violet_hold : public InstanceMapScript
|
||||
});
|
||||
break;
|
||||
case DATA_LAVANTHOR:
|
||||
Scheduler.Schedule(Seconds(1), [this](TaskContext task)
|
||||
Scheduler.Schedule(1s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* lavanthor = GetCreature(DATA_LAVANTHOR))
|
||||
lavanthor->CastSpell(lavanthor, SPELL_LAVANTHOR_SPECIAL_UNARMED);
|
||||
|
||||
task.Schedule(Seconds(3), [this](TaskContext task)
|
||||
task.Schedule(3s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* lavanthor = GetCreature(DATA_LAVANTHOR))
|
||||
lavanthor->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, LavanthorPath, LavanthorPathSize, true);
|
||||
|
||||
task.Schedule(Seconds(8), [this](TaskContext /*task*/)
|
||||
task.Schedule(8s, [this](TaskContext /*task*/)
|
||||
{
|
||||
if (Creature* lavanthor = GetCreature(DATA_LAVANTHOR))
|
||||
{
|
||||
@@ -654,22 +654,22 @@ class instance_violet_hold : public InstanceMapScript
|
||||
});
|
||||
break;
|
||||
case DATA_XEVOZZ:
|
||||
Scheduler.Schedule(Seconds(2), [this](TaskContext task)
|
||||
Scheduler.Schedule(2s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* xevozz = GetCreature(DATA_XEVOZZ))
|
||||
xevozz->AI()->Talk(SAY_XEVOZZ_SPAWN);
|
||||
|
||||
task.Schedule(Seconds(3), [this](TaskContext task)
|
||||
task.Schedule(3s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* xevozz = GetCreature(DATA_XEVOZZ))
|
||||
xevozz->HandleEmoteCommand(EMOTE_ONESHOT_TALK_NO_SHEATHE);
|
||||
|
||||
task.Schedule(Seconds(4), [this](TaskContext task)
|
||||
task.Schedule(4s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* xevozz = GetCreature(DATA_XEVOZZ))
|
||||
xevozz->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, XevozzPath, XevozzPathSize, true);
|
||||
|
||||
task.Schedule(Seconds(4), [this](TaskContext /*task*/)
|
||||
task.Schedule(4s, [this](TaskContext /*task*/)
|
||||
{
|
||||
if (Creature* xevozz = GetCreature(DATA_XEVOZZ))
|
||||
{
|
||||
@@ -682,7 +682,7 @@ class instance_violet_hold : public InstanceMapScript
|
||||
});
|
||||
break;
|
||||
case DATA_ZURAMAT:
|
||||
Scheduler.Schedule(Seconds(2), [this](TaskContext task)
|
||||
Scheduler.Schedule(2s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* zuramat = GetCreature(DATA_ZURAMAT))
|
||||
{
|
||||
@@ -690,12 +690,12 @@ class instance_violet_hold : public InstanceMapScript
|
||||
zuramat->AI()->Talk(SAY_ZURAMAT_SPAWN);
|
||||
}
|
||||
|
||||
task.Schedule(Seconds(6), [this](TaskContext task)
|
||||
task.Schedule(6s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* zuramat = GetCreature(DATA_ZURAMAT))
|
||||
zuramat->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, ZuramatPath, ZuramatPathSize, true);
|
||||
|
||||
task.Schedule(Seconds(4), [this](TaskContext /*task*/)
|
||||
task.Schedule(4s, [this](TaskContext /*task*/)
|
||||
{
|
||||
if (Creature* zuramat = GetCreature(DATA_ZURAMAT))
|
||||
{
|
||||
@@ -902,17 +902,17 @@ class instance_violet_hold : public InstanceMapScript
|
||||
|
||||
void ScheduleCyanigosaIntro()
|
||||
{
|
||||
Scheduler.Schedule(Seconds(2), [this](TaskContext task)
|
||||
Scheduler.Schedule(2s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* cyanigosa = GetCreature(DATA_CYANIGOSA))
|
||||
cyanigosa->AI()->Talk(SAY_CYANIGOSA_SPAWN);
|
||||
|
||||
task.Schedule(Seconds(6), [this](TaskContext task)
|
||||
task.Schedule(6s, [this](TaskContext task)
|
||||
{
|
||||
if (Creature* cyanigosa = GetCreature(DATA_CYANIGOSA))
|
||||
cyanigosa->GetMotionMaster()->MoveJump(CyanigosaJumpLocation, 10.0f, 27.44744f);
|
||||
|
||||
task.Schedule(Seconds(7), [this](TaskContext /*task*/)
|
||||
task.Schedule(7s, [this](TaskContext /*task*/)
|
||||
{
|
||||
if (Creature* cyanigosa = GetCreature(DATA_CYANIGOSA))
|
||||
{
|
||||
|
||||
@@ -355,6 +355,7 @@ Position const SinclariPositions[] = // sniff
|
||||
|
||||
Position const GuardsMovePosition = { 1802.099f, 803.7724f, 44.36466f, 0.0f }; // sniff
|
||||
|
||||
// 30658 - Lieutenant Sinclari
|
||||
struct npc_sinclari_vh : public ScriptedAI
|
||||
{
|
||||
npc_sinclari_vh(Creature* creature) : ScriptedAI(creature), _summons(creature)
|
||||
@@ -438,25 +439,25 @@ struct npc_sinclari_vh : public ScriptedAI
|
||||
|
||||
void ScheduleIntro()
|
||||
{
|
||||
_scheduler.Schedule(Seconds(1), [this](TaskContext task)
|
||||
_scheduler.Schedule(1s, [this](TaskContext task)
|
||||
{
|
||||
switch (task.GetRepeatCounter())
|
||||
{
|
||||
case 0:
|
||||
me->SetWalk(true);
|
||||
me->GetMotionMaster()->MovePoint(0, SinclariPositions[0]);
|
||||
task.Repeat(Seconds(1));
|
||||
task.Repeat(1s);
|
||||
break;
|
||||
case 1:
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_USE_STANDING);
|
||||
me->GetMap()->SummonCreature(NPC_DEFENSE_SYSTEM, DefenseSystemLocation);
|
||||
task.Repeat(Seconds(3));
|
||||
task.Repeat(3s);
|
||||
break;
|
||||
case 2:
|
||||
me->SetFacingTo(SinclariPositions[0].GetOrientation());
|
||||
Talk(SAY_SINCLARI_INTRO_1);
|
||||
|
||||
task.Schedule(Seconds(1), [this](TaskContext /*task*/)
|
||||
task.Schedule(1s, [this](TaskContext /*task*/)
|
||||
{
|
||||
std::list<Creature*> guardList;
|
||||
me->GetCreatureListWithEntryInGrid(guardList, NPC_VIOLET_HOLD_GUARD, 100.0f);
|
||||
@@ -470,17 +471,17 @@ struct npc_sinclari_vh : public ScriptedAI
|
||||
}
|
||||
});
|
||||
|
||||
task.Repeat(Seconds(2));
|
||||
task.Repeat(2s);
|
||||
break;
|
||||
case 3:
|
||||
me->GetMotionMaster()->MovePoint(0, SinclariPositions[1]);
|
||||
_summons.DespawnAll();
|
||||
task.Repeat(Seconds(5));
|
||||
task.Repeat(5s);
|
||||
break;
|
||||
case 4:
|
||||
me->SetFacingTo(SinclariPositions[1].GetOrientation());
|
||||
|
||||
task.Schedule(Seconds(1), [this](TaskContext /*task*/)
|
||||
task.Schedule(1s, [this](TaskContext /*task*/)
|
||||
{
|
||||
std::list<Creature*> guardList;
|
||||
me->GetCreatureListWithEntryInGrid(guardList, NPC_VIOLET_HOLD_GUARD, 100.0f);
|
||||
@@ -488,15 +489,15 @@ struct npc_sinclari_vh : public ScriptedAI
|
||||
guard->SetVisible(false);
|
||||
});
|
||||
|
||||
task.Repeat(Seconds(6));
|
||||
task.Repeat(6s);
|
||||
break;
|
||||
case 5:
|
||||
Talk(SAY_SINCLARI_INTRO_2);
|
||||
task.Repeat(Seconds(4));
|
||||
task.Repeat(4s);
|
||||
break;
|
||||
case 6:
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_TALK_NO_SHEATHE);
|
||||
task.Repeat(Seconds(1));
|
||||
task.Repeat(1s);
|
||||
break;
|
||||
case 7:
|
||||
if (GameObject* mainDoor = _instance->GetGameObject(DATA_MAIN_DOOR))
|
||||
@@ -504,11 +505,11 @@ struct npc_sinclari_vh : public ScriptedAI
|
||||
mainDoor->SetGoState(GO_STATE_READY);
|
||||
mainDoor->SetFlag(GO_FLAG_LOCKED);
|
||||
}
|
||||
task.Repeat(Seconds(5));
|
||||
task.Repeat(5s);
|
||||
break;
|
||||
case 8:
|
||||
_instance->SetData(DATA_MAIN_EVENT_STATE, IN_PROGRESS);
|
||||
task.Repeat(Seconds(1));
|
||||
task.Repeat(1s);
|
||||
break;
|
||||
case 9:
|
||||
// We should teleport inside if event is in progress with GOSSIP_MENU_SEND_ME_IN
|
||||
@@ -522,12 +523,12 @@ struct npc_sinclari_vh : public ScriptedAI
|
||||
|
||||
void ScheduleOutro()
|
||||
{
|
||||
_scheduler.Schedule(Seconds(4), [this](TaskContext task)
|
||||
_scheduler.Schedule(4s, [this](TaskContext task)
|
||||
{
|
||||
Talk(SAY_SINCLARI_OUTRO);
|
||||
me->GetMotionMaster()->MovePoint(0, SinclariPositions[3]);
|
||||
|
||||
task.Schedule(Seconds(10), [this](TaskContext /*task*/)
|
||||
task.Schedule(10s, [this](TaskContext /*task*/)
|
||||
{
|
||||
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||
});
|
||||
@@ -553,6 +554,7 @@ private:
|
||||
SummonList _summons;
|
||||
};
|
||||
|
||||
// 31079 - Azure Saboteur
|
||||
struct npc_azure_saboteur : public ScriptedAI
|
||||
{
|
||||
npc_azure_saboteur(Creature* creature) : ScriptedAI(creature)
|
||||
@@ -599,7 +601,7 @@ struct npc_azure_saboteur : public ScriptedAI
|
||||
void Reset() override
|
||||
{
|
||||
_scheduler.CancelAll();
|
||||
_scheduler.Schedule(Seconds(2), [this](TaskContext /*task*/)
|
||||
_scheduler.Schedule(2s, [this](TaskContext /*task*/)
|
||||
{
|
||||
StartMovement();
|
||||
});
|
||||
@@ -614,10 +616,10 @@ struct npc_azure_saboteur : public ScriptedAI
|
||||
me->CastSpell(me, SPELL_SHIELD_DISRUPTION, false);
|
||||
|
||||
if (task.GetRepeatCounter() < 2)
|
||||
task.Repeat(Seconds(1));
|
||||
task.Repeat(1s);
|
||||
else
|
||||
{
|
||||
task.Schedule(Seconds(2), [this](TaskContext /*task*/)
|
||||
task.Schedule(2s, [this](TaskContext /*task*/)
|
||||
{
|
||||
_instance->SetData(DATA_START_BOSS_ENCOUNTER, 1);
|
||||
me->CastSpell(me, SPELL_TELEPORT_VISUAL, false);
|
||||
@@ -689,6 +691,7 @@ protected:
|
||||
uint8 _portalLocation;
|
||||
};
|
||||
|
||||
// 30679 - Teleportation Portal
|
||||
struct npc_violet_hold_teleportation_portal : public npc_violet_hold_teleportation_portal_commonAI
|
||||
{
|
||||
npc_violet_hold_teleportation_portal(Creature* creature) : npc_violet_hold_teleportation_portal_commonAI(creature)
|
||||
@@ -745,6 +748,7 @@ struct npc_violet_hold_teleportation_portal : public npc_violet_hold_teleportati
|
||||
}
|
||||
};
|
||||
|
||||
// 32174 - Teleportation Portal (Elite)
|
||||
struct npc_violet_hold_teleportation_portal_elite : public npc_violet_hold_teleportation_portal_commonAI
|
||||
{
|
||||
npc_violet_hold_teleportation_portal_elite(Creature* creature) : npc_violet_hold_teleportation_portal_commonAI(creature)
|
||||
@@ -765,7 +769,7 @@ struct npc_violet_hold_teleportation_portal_elite : public npc_violet_hold_telep
|
||||
if (Creature* sinclariTrigger = _instance->GetCreature(DATA_SINCLARI_TRIGGER))
|
||||
sinclariTrigger->AI()->Talk(SAY_SINCLARI_ELITE_SQUAD);
|
||||
|
||||
task.Schedule(Seconds(1), [this](TaskContext /*task*/)
|
||||
task.Schedule(1s, [this](TaskContext /*task*/)
|
||||
{
|
||||
me->SetVisible(false);
|
||||
});
|
||||
@@ -784,6 +788,7 @@ struct npc_violet_hold_teleportation_portal_elite : public npc_violet_hold_telep
|
||||
}
|
||||
};
|
||||
|
||||
// 31011 - Teleportation Portal (Intro)
|
||||
struct npc_violet_hold_teleportation_portal_intro : public npc_violet_hold_teleportation_portal_commonAI
|
||||
{
|
||||
npc_violet_hold_teleportation_portal_intro(Creature* creature) : npc_violet_hold_teleportation_portal_commonAI(creature)
|
||||
@@ -795,7 +800,7 @@ struct npc_violet_hold_teleportation_portal_intro : public npc_violet_hold_telep
|
||||
if (_instance->GetData(DATA_MAIN_EVENT_STATE) != NOT_STARTED)
|
||||
return;
|
||||
|
||||
_scheduler.Schedule(Seconds(15), [this](TaskContext task)
|
||||
_scheduler.Schedule(15s, [this](TaskContext task)
|
||||
{
|
||||
// Limit the number of current summons
|
||||
if (_summons.size() < 3)
|
||||
@@ -894,7 +899,7 @@ struct violet_hold_trashAI : public EscortAI
|
||||
{
|
||||
me->SetReactState(REACT_DEFENSIVE);
|
||||
DoCastAOE(SPELL_DESTROY_DOOR_SEAL);
|
||||
_scheduler.Schedule(Seconds(2), [this](TaskContext destroyDoorCheck)
|
||||
_scheduler.Schedule(2s, [this](TaskContext destroyDoorCheck)
|
||||
{
|
||||
if (!me->HasAura(SPELL_DESTROY_DOOR_SEAL))
|
||||
DoCastAOE(SPELL_DESTROY_DOOR_SEAL);
|
||||
@@ -933,6 +938,8 @@ protected:
|
||||
uint32 _lastWaypointId;
|
||||
};
|
||||
|
||||
// 30661 - Azure Invader
|
||||
// 30961 - Azure Invader
|
||||
struct npc_azure_invader : public violet_hold_trashAI
|
||||
{
|
||||
npc_azure_invader(Creature* creature) : violet_hold_trashAI(creature) { }
|
||||
@@ -941,13 +948,13 @@ struct npc_azure_invader : public violet_hold_trashAI
|
||||
{
|
||||
if (me->GetEntry() == NPC_AZURE_INVADER_1)
|
||||
{
|
||||
_scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
_scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_CLEAVE);
|
||||
task.Repeat();
|
||||
});
|
||||
|
||||
_scheduler.Schedule(Seconds(4), [this](TaskContext task)
|
||||
_scheduler.Schedule(4s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_IMPALE);
|
||||
task.Repeat();
|
||||
@@ -955,21 +962,23 @@ struct npc_azure_invader : public violet_hold_trashAI
|
||||
}
|
||||
else if (me->GetEntry() == NPC_AZURE_INVADER_2)
|
||||
{
|
||||
_scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
_scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_BRUTAL_STRIKE);
|
||||
task.Repeat();
|
||||
});
|
||||
|
||||
_scheduler.Schedule(Seconds(4), [this](TaskContext task)
|
||||
_scheduler.Schedule(4s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_SUNDER_ARMOR);
|
||||
task.Repeat(Seconds(8), Seconds(10));
|
||||
task.Repeat(8s, 10s);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 30663 - Azure Binder
|
||||
// 30918 - Azure Binder
|
||||
struct npc_azure_binder : public violet_hold_trashAI
|
||||
{
|
||||
npc_azure_binder(Creature* creature) : violet_hold_trashAI(creature) { }
|
||||
@@ -978,37 +987,39 @@ struct npc_azure_binder : public violet_hold_trashAI
|
||||
{
|
||||
if (me->GetEntry() == NPC_AZURE_BINDER_1)
|
||||
{
|
||||
_scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
_scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
DoCastAOE(SPELL_ARCANE_EXPLOSION);
|
||||
task.Repeat();
|
||||
});
|
||||
|
||||
_scheduler.Schedule(Seconds(4), [this](TaskContext task)
|
||||
_scheduler.Schedule(4s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f))
|
||||
DoCast(target, SPELL_ARCANE_BARRAGE);
|
||||
task.Repeat(Seconds(6));
|
||||
task.Repeat(6s);
|
||||
});
|
||||
}
|
||||
else if (me->GetEntry() == NPC_AZURE_BINDER_2)
|
||||
{
|
||||
_scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
_scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
DoCastAOE(SPELL_FROST_NOVA);
|
||||
task.Repeat();
|
||||
});
|
||||
|
||||
_scheduler.Schedule(Seconds(4), [this](TaskContext task)
|
||||
_scheduler.Schedule(4s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f))
|
||||
DoCast(target, SPELL_FROSTBOLT);
|
||||
task.Repeat(Seconds(6));
|
||||
task.Repeat(6s);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 30664 - Azure Mage Slayer
|
||||
// 30963 - Azure Mage Slayer
|
||||
struct npc_azure_mage_slayer : public violet_hold_trashAI
|
||||
{
|
||||
npc_azure_mage_slayer(Creature* creature) : violet_hold_trashAI(creature) { }
|
||||
@@ -1017,57 +1028,59 @@ struct npc_azure_mage_slayer : public violet_hold_trashAI
|
||||
{
|
||||
if (me->GetEntry() == NPC_AZURE_MAGE_SLAYER_1)
|
||||
{
|
||||
_scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
_scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
DoCast(me, SPELL_ARCANE_EMPOWERMENT);
|
||||
task.Repeat(Seconds(14));
|
||||
task.Repeat(14s);
|
||||
});
|
||||
}
|
||||
else if (me->GetEntry() == NPC_AZURE_MAGE_SLAYER_2)
|
||||
{
|
||||
_scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
_scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
// wrong spellid?
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f))
|
||||
DoCast(target, SPELL_SPELL_LOCK);
|
||||
task.Repeat(Seconds(9));
|
||||
task.Repeat(9s);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 30668 - Azure Raider
|
||||
struct npc_azure_raider : public violet_hold_trashAI
|
||||
{
|
||||
npc_azure_raider(Creature* creature) : violet_hold_trashAI(creature) { }
|
||||
|
||||
void ScheduledTasks() override
|
||||
{
|
||||
_scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
_scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_CONCUSSION_BLOW);
|
||||
task.Repeat();
|
||||
});
|
||||
|
||||
_scheduler.Schedule(Seconds(8), [this](TaskContext task)
|
||||
_scheduler.Schedule(8s, [this](TaskContext task)
|
||||
{
|
||||
DoCast(me, SPELL_MAGIC_REFLECTION);
|
||||
task.Repeat(Seconds(10), Seconds(15));
|
||||
task.Repeat(10s, 15s);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 32191 - Azure Stalker
|
||||
struct npc_azure_stalker : public violet_hold_trashAI
|
||||
{
|
||||
npc_azure_stalker(Creature* creature) : violet_hold_trashAI(creature) { }
|
||||
|
||||
void ScheduledTasks() override
|
||||
{
|
||||
_scheduler.Schedule(Seconds(8), [this](TaskContext task)
|
||||
_scheduler.Schedule(8s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f))
|
||||
DoCast(target, SPELL_TACTICAL_BLINK);
|
||||
|
||||
task.Schedule(Milliseconds(1300), [this](TaskContext /*task*/)
|
||||
task.Schedule(1300ms, [this](TaskContext /*task*/)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 5.0f))
|
||||
DoCast(target, SPELL_BACKSTAB);
|
||||
@@ -1078,6 +1091,8 @@ struct npc_azure_stalker : public violet_hold_trashAI
|
||||
}
|
||||
};
|
||||
|
||||
// 30662 - Azure Spellbreaker
|
||||
// 30962 - Azure Spellbreaker
|
||||
struct npc_azure_spellbreaker : public violet_hold_trashAI
|
||||
{
|
||||
npc_azure_spellbreaker(Creature* creature) : violet_hold_trashAI(creature) { }
|
||||
@@ -1086,51 +1101,52 @@ struct npc_azure_spellbreaker : public violet_hold_trashAI
|
||||
{
|
||||
if (me->GetEntry() == NPC_AZURE_SPELLBREAKER_1)
|
||||
{
|
||||
_scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
_scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f))
|
||||
DoCast(target, SPELL_ARCANE_BLAST);
|
||||
task.Repeat(Seconds(6));
|
||||
task.Repeat(6s);
|
||||
});
|
||||
|
||||
_scheduler.Schedule(Seconds(4), [this](TaskContext task)
|
||||
_scheduler.Schedule(4s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f))
|
||||
DoCast(target, SPELL_SLOW);
|
||||
task.Repeat(Seconds(5));
|
||||
task.Repeat(5s);
|
||||
});
|
||||
}
|
||||
else if (me->GetEntry() == NPC_AZURE_SPELLBREAKER_2)
|
||||
{
|
||||
_scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
_scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f))
|
||||
DoCast(target, SPELL_CHAINS_OF_ICE);
|
||||
task.Repeat(Seconds(7));
|
||||
task.Repeat(7s);
|
||||
});
|
||||
|
||||
_scheduler.Schedule(Seconds(4), [this](TaskContext task)
|
||||
_scheduler.Schedule(4s, [this](TaskContext task)
|
||||
{
|
||||
DoCast(me, SPELL_CONE_OF_COLD);
|
||||
task.Repeat(Seconds(5));
|
||||
task.Repeat(5s);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 30666 - Azure Captain
|
||||
struct npc_azure_captain : public violet_hold_trashAI
|
||||
{
|
||||
npc_azure_captain(Creature* creature) : violet_hold_trashAI(creature) { }
|
||||
|
||||
void ScheduledTasks() override
|
||||
{
|
||||
_scheduler.Schedule(Seconds(5), [this](TaskContext task)
|
||||
_scheduler.Schedule(5s, [this](TaskContext task)
|
||||
{
|
||||
DoCastVictim(SPELL_MORTAL_STRIKE);
|
||||
task.Repeat();
|
||||
});
|
||||
|
||||
_scheduler.Schedule(Seconds(8), [this](TaskContext task)
|
||||
_scheduler.Schedule(8s, [this](TaskContext task)
|
||||
{
|
||||
DoCast(me, SPELL_WHIRLWIND_OF_STEEL);
|
||||
task.Repeat();
|
||||
@@ -1138,27 +1154,29 @@ struct npc_azure_captain : public violet_hold_trashAI
|
||||
}
|
||||
};
|
||||
|
||||
// 30667 - Azure Sorceror
|
||||
struct npc_azure_sorceror : public violet_hold_trashAI
|
||||
{
|
||||
npc_azure_sorceror(Creature* creature) : violet_hold_trashAI(creature) { }
|
||||
|
||||
void ScheduledTasks() override
|
||||
{
|
||||
_scheduler.Schedule(Seconds(4), [this](TaskContext task)
|
||||
_scheduler.Schedule(4s, [this](TaskContext task)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 35.0f))
|
||||
DoCast(target, SPELL_ARCANE_STREAM);
|
||||
task.Repeat(Seconds(5), Seconds(10));
|
||||
task.Repeat(5s, 10s);
|
||||
});
|
||||
|
||||
_scheduler.Schedule(Seconds(), Seconds(), [this](TaskContext task)
|
||||
_scheduler.Schedule(0s, [this](TaskContext task)
|
||||
{
|
||||
DoCastAOE(SPELL_MANA_DETONATION);
|
||||
task.Repeat(Seconds(2), Seconds(6));
|
||||
task.Repeat(2s, 6s);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 30837 - Defense System
|
||||
struct npc_violet_hold_defense_system : public ScriptedAI
|
||||
{
|
||||
npc_violet_hold_defense_system(Creature* creature) : ScriptedAI(creature) { }
|
||||
@@ -1171,14 +1189,14 @@ struct npc_violet_hold_defense_system : public ScriptedAI
|
||||
|
||||
void ScheduledTasks()
|
||||
{
|
||||
_scheduler.Schedule(Seconds(4), [this](TaskContext task)
|
||||
_scheduler.Schedule(4s, [this](TaskContext task)
|
||||
{
|
||||
DoCastAOE(SPELL_ARCANE_LIGHTNING_DAMAGE);
|
||||
DoCastAOE(SPELL_ARCANE_LIGHTNING_DUMMY);
|
||||
if (task.GetRepeatCounter() == 2)
|
||||
DoCastAOE(SPELL_ARCANE_LIGHTNING_INSTAKILL);
|
||||
else
|
||||
task.Repeat(Seconds(1));
|
||||
task.Repeat(1s);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1191,6 +1209,7 @@ private:
|
||||
TaskScheduler _scheduler;
|
||||
};
|
||||
|
||||
// 193611 - Activation Crystal
|
||||
struct go_activation_crystal : public GameObjectAI
|
||||
{
|
||||
go_activation_crystal(GameObject* go) : GameObjectAI(go) { }
|
||||
|
||||
Reference in New Issue
Block a user