aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkaelima <kaelima@live.se>2013-01-14 02:40:24 +0100
committerkaelima <kaelima@live.se>2013-01-14 02:40:24 +0100
commita05e78bb18226a16f049e6b01e35597d8a2d30d9 (patch)
tree249b52409323433ca92d83a5a6f238c4e5439034 /src
parentc6f5bef468900c7b6b6b9a934732464d4faa8512 (diff)
Script/Ruby Sanctum: Some cleanup and minor fixes
Solves #8573 Closes #8490
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp17
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp23
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp22
3 files changed, 42 insertions, 20 deletions
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
index ab53351cd6b..94325ca015b 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
@@ -135,13 +135,18 @@ class boss_general_zarithrian : public CreatureScript
Talk(SAY_KILL);
}
+ bool CanAIAttack(Unit const* /*target*/) const
+ {
+ return (instance->GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && instance->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE);
+ }
+
void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
return;
// Can't use room boundary here, the gameobject is spawned at the same position as the boss. This is just as good anyway.
- if (me->GetPositionX() > 3060.0f)
+ if (me->GetPositionX() > 3058.0f)
{
EnterEvadeMode();
return;
@@ -159,9 +164,11 @@ class boss_general_zarithrian : public CreatureScript
case EVENT_SUMMON_ADDS:
{
if (Creature* stalker1 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ZARITHRIAN_SPAWN_STALKER_1)))
- stalker1->AI()->DoCast(stalker1, SPELL_SUMMON_FLAMECALLER);
+ stalker1->CastSpell(stalker1, SPELL_SUMMON_FLAMECALLER, false);
+
if (Creature* stalker2 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ZARITHRIAN_SPAWN_STALKER_2)))
- stalker2->AI()->DoCast(stalker2, SPELL_SUMMON_FLAMECALLER);
+ stalker2->CastSpell(stalker2, SPELL_SUMMON_FLAMECALLER, false);
+
Talk(SAY_ADDS);
events.ScheduleEvent(EVENT_SUMMON_ADDS, 42000);
break;
@@ -195,9 +202,8 @@ class npc_onyx_flamecaller : public CreatureScript
struct npc_onyx_flamecallerAI : public npc_escortAI
{
- npc_onyx_flamecallerAI(Creature* creature) : npc_escortAI(creature)
+ npc_onyx_flamecallerAI(Creature* creature) : npc_escortAI(creature), _instance(creature->GetInstanceScript())
{
- _instance = creature->GetInstanceScript();
npc_escortAI::SetDespawnAtEnd(false);
}
@@ -289,7 +295,6 @@ class npc_onyx_flamecaller : public CreatureScript
}
private:
EventMap _events;
- bool _movementComplete;
InstanceScript* _instance;
uint8 _lavaGoutCount;
};
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index 781dd86cb86..d849e21f01f 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -226,9 +226,9 @@ struct generic_halionAI : public BossAI
{
generic_halionAI(Creature* creature, uint32 bossId) : BossAI(creature, bossId), _canEvade(false) { }
- void EnterCombat(Unit* who)
+ void EnterCombat(Unit* /*who*/)
{
- BossAI::EnterCombat(who);
+ _EnterCombat();
me->AddAura(SPELL_TWILIGHT_PRECISION, me);
_canEvade = false;
events.ScheduleEvent(EVENT_CLEAVE, urand(8000, 10000));
@@ -239,12 +239,12 @@ struct generic_halionAI : public BossAI
void Reset()
{
_canEvade = false;
- BossAI::Reset();
+ _Reset();
}
void EnterEvadeMode()
{
- BossAI::EnterEvadeMode();
+ _EnterEvadeMode();
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
}
@@ -349,15 +349,20 @@ class boss_halion : public CreatureScript
controller->AI()->SetData(DATA_FIGHT_PHASE, PHASE_ONE);
}
- void JustDied(Unit* killer)
+ void JustDied(Unit* /*killer*/)
{
- BossAI::JustDied(killer);
+ _JustDied();
Talk(SAY_DEATH);
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
+ if (Creature* twilightHalion = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TWILIGHT_HALION)))
+ if (twilightHalion->isAlive())
+ twilightHalion->Kill(twilightHalion);
+
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION_CONTROLLER)))
- me->Kill(controller);
+ if (controller->isAlive())
+ controller->Kill(controller);
}
Position const* GetMeteorStrikePosition() const { return &_meteorStrikePos; }
@@ -515,7 +520,8 @@ class boss_twilight_halion : public CreatureScript
}
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION_CONTROLLER)))
- controller->Kill(controller);
+ if (controller->isAlive())
+ controller->Kill(controller);
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
}
@@ -592,7 +598,6 @@ class npc_halion_controller : public CreatureScript
_instance(creature->GetInstanceScript()), _summons(me)
{
me->SetPhaseMask(me->GetPhaseMask() | 0x20, true);
- _events.SetPhase(PHASE_INTRO);
}
void Reset()
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
index c373c2340ff..abfa2df5c97 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
@@ -60,8 +60,11 @@ class instance_ruby_sanctum : public InstanceMapScript
void OnPlayerEnter(Player* /*player*/)
{
if (!GetData64(DATA_HALION_CONTROLLER) && GetBossState(DATA_HALION) != DONE && GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE)
+ {
+ instance->LoadGrid(HalionControllerSpawnPos.GetPositionX(), HalionControllerSpawnPos.GetPositionY());
if (Creature* halionController = instance->SummonCreature(NPC_HALION_CONTROLLER, HalionControllerSpawnPos))
halionController->AI()->DoAction(ACTION_INTRO_HALION);
+ }
}
void OnCreatureCreate(Creature* creature)
@@ -164,6 +167,20 @@ class instance_ruby_sanctum : public InstanceMapScript
}
}
+ void OnUnitDeath(Unit* unit)
+ {
+ Creature* creature = unit->ToCreature();
+ if (!creature)
+ return;
+
+ if (creature->GetEntry() == NPC_GENERAL_ZARITHRIAN && GetBossState(DATA_HALION) != DONE)
+ {
+ instance->LoadGrid(HalionControllerSpawnPos.GetPositionX(), HalionControllerSpawnPos.GetPositionY());
+ if (Creature* halionController = instance->SummonCreature(NPC_HALION_CONTROLLER, HalionControllerSpawnPos))
+ halionController->AI()->DoAction(ACTION_INTRO_HALION);
+ }
+ }
+
uint64 GetData64(uint32 type) const
{
switch (type)
@@ -238,11 +255,6 @@ class instance_ruby_sanctum : public InstanceMapScript
{
if (GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
HandleGameObject(FlameWallsGUID, state != IN_PROGRESS);
-
- // Not called at instance loading, no big deal.
- if (state == DONE && GetBossState(DATA_HALION) != DONE)
- if (Creature* halionController = instance->SummonCreature(NPC_HALION_CONTROLLER, HalionControllerSpawnPos))
- halionController->AI()->DoAction(ACTION_INTRO_HALION);
break;
}
case DATA_HALION: