aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp135
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h11
2 files changed, 75 insertions, 71 deletions
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
index dac3f118ec1..345089030b8 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
@@ -29,7 +29,7 @@ enum Texts
SAY_AGGRO = 1, // Ah, the entertainment has arrived.
SAY_KILL = 2, // Baltharus leaves no survivors! - This world has enough heroes.
SAY_CLONE = 3, // Twice the pain and half the fun.
- SAY_DEATH = 4, // I... didn't see that coming....
+ SAY_DEATH = 4 // I... didn't see that coming....
};
enum Spells
@@ -42,28 +42,28 @@ enum Spells
SPELL_CLONE = 74511,
SPELL_REPELLING_WAVE = 74509,
SPELL_CLEAR_DEBUFFS = 34098,
- SPELL_SPAWN_EFFECT = 64195,
+ SPELL_SPAWN_EFFECT = 64195
};
enum Events
{
- EVENT_BLADE_TEMPEST = 1,
- EVENT_CLEAVE = 2,
- EVENT_ENERVATING_BRAND = 3,
- EVENT_INTRO_TALK = 4,
- EVENT_OOC_CHANNEL = 5,
+ EVENT_BLADE_TEMPEST = 1,
+ EVENT_CLEAVE,
+ EVENT_ENERVATING_BRAND,
+ EVENT_INTRO_TALK,
+ EVENT_SUMMONS_ATTACK
};
enum Actions
{
- ACTION_CLONE = 1,
+ ACTION_CLONE = 1
};
enum Phases
{
- PHASE_ALL = 0,
- PHASE_INTRO = 1,
- PHASE_COMBAT = 2
+ PHASE_ALL = 0,
+ PHASE_INTRO,
+ PHASE_COMBAT
};
class boss_baltharus_the_warborn : public CreatureScript
@@ -73,13 +73,7 @@ class boss_baltharus_the_warborn : public CreatureScript
struct boss_baltharus_the_warbornAI : public BossAI
{
- boss_baltharus_the_warbornAI(Creature* creature) : BossAI(creature, DATA_BALTHARUS_THE_WARBORN)
- {
- Initialize();
- _introDone = false;
- }
-
- void Initialize()
+ boss_baltharus_the_warbornAI(Creature* creature) : BossAI(creature, DATA_BALTHARUS_THE_WARBORN), _introDone(false)
{
_cloneCount = RAID_MODE<uint8>(1, 2, 2, 2);
}
@@ -88,9 +82,9 @@ class boss_baltharus_the_warborn : public CreatureScript
{
_Reset();
events.SetPhase(PHASE_INTRO);
- events.ScheduleEvent(EVENT_OOC_CHANNEL, 0, 0, PHASE_INTRO);
- Initialize();
instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetMaxHealth());
+ if (Creature* channelTarget = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_CRYSTAL_CHANNEL_TARGET)))
+ DoCast(channelTarget, SPELL_BARRIER_CHANNEL);
}
void DoAction(int32 action) override
@@ -102,13 +96,13 @@ class boss_baltharus_the_warborn : public CreatureScript
return;
_introDone = true;
me->setActive(true);
- events.ScheduleEvent(EVENT_INTRO_TALK, 7000, 0, PHASE_INTRO);
+ events.ScheduleEvent(EVENT_INTRO_TALK, Seconds(7), 0, PHASE_INTRO);
break;
case ACTION_CLONE:
{
- DoCast(me, SPELL_CLEAR_DEBUFFS);
- DoCast(me, SPELL_CLONE);
- DoCast(me, SPELL_REPELLING_WAVE);
+ DoCastSelf(SPELL_CLEAR_DEBUFFS);
+ DoCastSelf(SPELL_CLONE);
+ DoCastSelf(SPELL_REPELLING_WAVE);
Talk(SAY_CLONE);
--_cloneCount;
break;
@@ -124,9 +118,9 @@ class boss_baltharus_the_warborn : public CreatureScript
_EnterCombat();
events.Reset();
events.SetPhase(PHASE_COMBAT);
- events.ScheduleEvent(EVENT_CLEAVE, 11000, 0, PHASE_COMBAT);
- events.ScheduleEvent(EVENT_ENERVATING_BRAND, 13000, 0, PHASE_COMBAT);
- events.ScheduleEvent(EVENT_BLADE_TEMPEST, 15000, 0, PHASE_COMBAT);
+ events.ScheduleEvent(EVENT_CLEAVE, Seconds(13), 0, PHASE_COMBAT);
+ events.ScheduleEvent(EVENT_ENERVATING_BRAND, Seconds(13), 0, PHASE_COMBAT);
+ events.ScheduleEvent(EVENT_BLADE_TEMPEST, Seconds(18), 0, PHASE_COMBAT);
Talk(SAY_AGGRO);
}
@@ -148,7 +142,7 @@ class boss_baltharus_the_warborn : public CreatureScript
{
summons.Summon(summon);
summon->SetHealth(me->GetHealth());
- summon->CastSpell(summon, SPELL_SPAWN_EFFECT, true);
+ events.ScheduleEvent(EVENT_SUMMONS_ATTACK, Seconds(2));
}
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
@@ -170,10 +164,18 @@ class boss_baltharus_the_warborn : public CreatureScript
instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetHealth() - damage);
}
+ void EnterEvadeMode(EvadeReason /*why*/) override
+ {
+ summons.DespawnAll();
+ events.Reset();
+ _DespawnAtEvade();
+ }
+
void UpdateAI(uint32 diff) override
{
bool introPhase = events.IsInPhase(PHASE_INTRO);
- if (!UpdateVictim() && !introPhase)
+
+ if (!introPhase && !UpdateVictim())
return;
if (!introPhase)
@@ -181,7 +183,7 @@ class boss_baltharus_the_warborn : public CreatureScript
events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING) && !introPhase)
+ if (!introPhase && me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
@@ -191,30 +193,28 @@ class boss_baltharus_the_warborn : public CreatureScript
case EVENT_INTRO_TALK:
Talk(SAY_BALTHARUS_INTRO);
break;
- case EVENT_OOC_CHANNEL:
- if (Creature* channelTarget = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_CRYSTAL_CHANNEL_TARGET)))
- DoCast(channelTarget, SPELL_BARRIER_CHANNEL);
- events.ScheduleEvent(EVENT_OOC_CHANNEL, 7000, 0, PHASE_INTRO);
- break;
case EVENT_CLEAVE:
DoCastVictim(SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 24000, 0, PHASE_COMBAT);
+ events.Repeat(Seconds(20), Seconds(24));
break;
case EVENT_BLADE_TEMPEST:
- DoCast(me, SPELL_BLADE_TEMPEST);
- events.ScheduleEvent(EVENT_BLADE_TEMPEST, 24000, 0, PHASE_COMBAT);
+ DoCastSelf(SPELL_BLADE_TEMPEST);
+ events.Repeat(Seconds(24));
break;
case EVENT_ENERVATING_BRAND:
for (uint8 i = 0; i < RAID_MODE<uint8>(4, 8, 8, 10); i++)
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
DoCast(target, SPELL_ENERVATING_BRAND);
- events.ScheduleEvent(EVENT_ENERVATING_BRAND, 26000, 0, PHASE_COMBAT);
+ events.Repeat(Seconds(26));
+ break;
+ case EVENT_SUMMONS_ATTACK:
+ summons.DoZoneInCombat(NPC_BALTHARUS_THE_WARBORN_CLONE);
break;
default:
break;
}
- if (me->HasUnitState(UNIT_STATE_CASTING) && !introPhase)
+ if (me->HasUnitState(UNIT_STATE_CASTING))
return;
}
@@ -237,33 +237,38 @@ class npc_baltharus_the_warborn_clone : public CreatureScript
public:
npc_baltharus_the_warborn_clone() : CreatureScript("npc_baltharus_the_warborn_clone") { }
- struct npc_baltharus_the_warborn_cloneAI : public ScriptedAI
+ struct npc_baltharus_the_warborn_cloneAI : public BossAI
{
- npc_baltharus_the_warborn_cloneAI(Creature* creature) : ScriptedAI(creature),
- _instance(creature->GetInstanceScript())
+ npc_baltharus_the_warborn_cloneAI(Creature* creature) : BossAI(creature, DATA_BALTHARUS_CLONE) { }
+
+ void Reset() override
{
+ DoCastSelf(SPELL_SPAWN_EFFECT);
+ me->SetReactState(REACT_DEFENSIVE);
}
void EnterCombat(Unit* /*who*/) override
{
DoZoneInCombat();
- _events.Reset();
- _events.ScheduleEvent(EVENT_CLEAVE, urand(5000, 10000));
- _events.ScheduleEvent(EVENT_BLADE_TEMPEST, urand(18000, 25000));
- _events.ScheduleEvent(EVENT_ENERVATING_BRAND, urand(10000, 15000));
+ events.Reset();
+ events.ScheduleEvent(EVENT_CLEAVE, Seconds(11));
+ events.ScheduleEvent(EVENT_BLADE_TEMPEST, Seconds(15));
+ events.ScheduleEvent(EVENT_ENERVATING_BRAND, Seconds(10));
}
+ void EnterEvadeMode(EvadeReason /*why*/) override { }
+
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
{
// Setting DATA_BALTHARUS_SHARED_HEALTH to 0 when killed would bug the boss.
if (me->GetHealth() > damage)
- _instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetHealth() - damage);
+ instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetHealth() - damage);
}
void JustDied(Unit* killer) override
{
// This is here because DamageTaken wont trigger if the damage is deadly.
- if (Creature* baltharus = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_BALTHARUS_THE_WARBORN)))
+ if (Creature* baltharus = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BALTHARUS_THE_WARBORN)))
killer->Kill(baltharus);
}
@@ -272,42 +277,41 @@ class npc_baltharus_the_warborn_clone : public CreatureScript
if (!UpdateVictim())
return;
- me->SetHealth(_instance->GetData(DATA_BALTHARUS_SHARED_HEALTH));
+ me->SetHealth(instance->GetData(DATA_BALTHARUS_SHARED_HEALTH));
- _events.Update(diff);
+ events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- while (uint32 eventId = _events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_CLEAVE:
DoCastVictim(SPELL_CLEAVE);
- _events.ScheduleEvent(EVENT_CLEAVE, 24000);
+ events.Repeat(Seconds(20), Seconds(24));
break;
case EVENT_BLADE_TEMPEST:
DoCastVictim(SPELL_BLADE_TEMPEST);
- _events.ScheduleEvent(EVENT_BLADE_TEMPEST, 24000);
- break;
+ events.Repeat(Seconds(24));
+ break;
case EVENT_ENERVATING_BRAND:
for (uint8 i = 0; i < RAID_MODE<uint8>(4, 8, 8, 10); i++)
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
DoCast(target, SPELL_ENERVATING_BRAND);
- _events.ScheduleEvent(EVENT_ENERVATING_BRAND, 26000);
+ events.Repeat(Seconds(26));
break;
default:
break;
}
- }
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
DoMeleeAttackIfReady();
}
-
- private:
- EventMap _events;
- InstanceScript* _instance;
};
CreatureAI* GetAI(Creature* creature) const override
@@ -316,6 +320,7 @@ class npc_baltharus_the_warborn_clone : public CreatureScript
}
};
+// 74505 - Enervating Brand
class spell_baltharus_enervating_brand_trigger : public SpellScriptLoader
{
public:
@@ -327,11 +332,9 @@ class spell_baltharus_enervating_brand_trigger : public SpellScriptLoader
void CheckDistance()
{
- if (Unit* caster = GetOriginalCaster())
- {
- if (Unit* target = GetHitUnit())
- target->CastSpell(caster, SPELL_SIPHONED_MIGHT, true);
- }
+ Unit* caster = GetCaster();
+ Unit* target = GetHitUnit();
+ target->CastSpell(caster, SPELL_SIPHONED_MIGHT, true);
}
void Register() override
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
index 849a9642a31..2d45deff9b7 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
@@ -49,6 +49,7 @@ enum RSDataTypes
DATA_BURNING_TREE_4 = 16,
DATA_FLAME_RING = 17,
DATA_TWILIGHT_FLAME_RING = 18,
+ DATA_BALTHARUS_CLONE = 19
};
enum RSSharedActions
@@ -56,7 +57,7 @@ enum RSSharedActions
ACTION_INTRO_BALTHARUS = -3975101,
ACTION_BALTHARUS_DEATH = -3975102,
ACTION_INTRO_HALION = -4014601,
- ACTION_INTRO_HALION_2 = -4014602,
+ ACTION_INTRO_HALION_2 = -4014602
};
enum RSCreaturesIds
@@ -97,7 +98,7 @@ enum RSCreaturesIds
NPC_COMBAT_STALKER = 40151, // Seen in sniffs but not used, so no wonder.
// Xerestrasza
- NPC_XERESTRASZA = 40429,
+ NPC_XERESTRASZA = 40429
};
enum RSGameObjectsIds
@@ -112,19 +113,19 @@ enum RSGameObjectsIds
GO_BURNING_TREE_1 = 203034,
GO_BURNING_TREE_2 = 203035,
GO_BURNING_TREE_3 = 203036,
- GO_BURNING_TREE_4 = 203037,
+ GO_BURNING_TREE_4 = 203037
};
enum RSWorldStates
{
WORLDSTATE_CORPOREALITY_MATERIAL = 5049,
WORLDSTATE_CORPOREALITY_TWILIGHT = 5050,
- WORLDSTATE_CORPOREALITY_TOGGLE = 5051,
+ WORLDSTATE_CORPOREALITY_TOGGLE = 5051
};
enum RSInstanceSpell
{
- SPELL_BERSERK = 26662,
+ SPELL_BERSERK = 26662
};
template<typename AI, typename T>