Scripts/Ruby Sanctum:
- Fix removal of UNIT_FLAG_OOC_NOT_ATTACKABLE when Zarithrian resets. - Let Zarithrian evade when passing 3060.0 positionX (thanks vcrx6 for hint) Added some enums for Halion.
This commit is contained in:
+1
-1
@@ -91,7 +91,7 @@ class boss_baltharus_the_warborn : public CreatureScript
|
||||
{
|
||||
switch(action)
|
||||
{
|
||||
case ACTION_INTRO_TRIGGER:
|
||||
case ACTION_INTRO_BALTHARUS:
|
||||
if (_introDone)
|
||||
return;
|
||||
_introDone = true;
|
||||
|
||||
+16
-2
@@ -93,10 +93,18 @@ class boss_general_zarithrian : public CreatureScript
|
||||
{
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
_Reset();
|
||||
if (instance->GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && instance->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
_EnterCombat();
|
||||
Talk(SAY_AGGRO);
|
||||
events.Reset();
|
||||
events.ScheduleEvent(EVENT_CLEAVE, 15000);
|
||||
events.ScheduleEvent(EVENT_INTIDMDATING_ROAR, 42000);
|
||||
events.ScheduleEvent(EVENT_SUMMON_ADDS, 40000);
|
||||
@@ -128,10 +136,16 @@ class boss_general_zarithrian : public CreatureScript
|
||||
|
||||
void UpdateAI(uint32 const diff)
|
||||
{
|
||||
// Cant use room boundary, the gameobject is spawned on same position as the boss.
|
||||
if (!UpdateVictim() || me->GetPositionX() > 3060.0f)
|
||||
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)
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STAT_CASTING))
|
||||
|
||||
+61
-17
@@ -40,11 +40,14 @@ class instance_ruby_sanctum : public InstanceMapScript
|
||||
GeneralZarithrianGUID = 0;
|
||||
SavianaRagefireGUID = 0;
|
||||
HalionGUID = 0;
|
||||
HalionControllerGUID = 0;
|
||||
CrystalChannelTargetGUID = 0;
|
||||
XerestraszaGUID = 0;
|
||||
BaltharusSharedHealth = 0;
|
||||
FlameWallsGUID = 0;
|
||||
FlameRingGUID = 0;
|
||||
memset(ZarithianSpawnStalkerGUID, 0, 2*sizeof(uint64));
|
||||
memset(BurningTreeGUID, 0, 4*sizeof(uint64));
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature)
|
||||
@@ -63,6 +66,8 @@ class instance_ruby_sanctum : public InstanceMapScript
|
||||
case NPC_HALION:
|
||||
HalionGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_HALION_CONTROLLER:
|
||||
HalionControllerGUID = creature->GetGUID();
|
||||
case NPC_BALTHARUS_TARGET:
|
||||
CrystalChannelTargetGUID = creature->GetGUID();
|
||||
break;
|
||||
@@ -89,6 +94,31 @@ class instance_ruby_sanctum : public InstanceMapScript
|
||||
break;
|
||||
case GO_FLAME_WALLS:
|
||||
FlameWallsGUID = go->GetGUID();
|
||||
if (GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
|
||||
HandleGameObject(FlameWallsGUID, true, go);
|
||||
break;
|
||||
case GO_FLAME_RING:
|
||||
FlameRingGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_BURNING_TREE_1:
|
||||
BurningTreeGUID[0] = go->GetGUID();
|
||||
if (GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE)
|
||||
HandleGameObject(BurningTreeGUID[0], true);
|
||||
break;
|
||||
case GO_BURNING_TREE_2:
|
||||
BurningTreeGUID[1] = go->GetGUID();
|
||||
if (GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE)
|
||||
HandleGameObject(BurningTreeGUID[1], true);
|
||||
break;
|
||||
case GO_BURNING_TREE_3:
|
||||
BurningTreeGUID[2] = go->GetGUID();
|
||||
if (GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE)
|
||||
HandleGameObject(BurningTreeGUID[2], true);
|
||||
break;
|
||||
case GO_BURNING_TREE_4:
|
||||
BurningTreeGUID[3] = go->GetGUID();
|
||||
if (GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE)
|
||||
HandleGameObject(BurningTreeGUID[3], true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -113,20 +143,32 @@ class instance_ruby_sanctum : public InstanceMapScript
|
||||
{
|
||||
case DATA_BALTHARUS_THE_WARBORN:
|
||||
return BaltharusTheWarbornGUID;
|
||||
case DATA_GENERAL_ZARITHRIAN:
|
||||
return GeneralZarithrianGUID;
|
||||
case DATA_SAVIANA_RAGEFIRE:
|
||||
return SavianaRagefireGUID;
|
||||
case DATA_HALION:
|
||||
return HalionGUID;
|
||||
case DATA_CRYSTAL_CHANNEL_TARGET:
|
||||
return CrystalChannelTargetGUID;
|
||||
case DATA_XERESTRASZA:
|
||||
return XerestraszaGUID;
|
||||
case DATA_SAVIANA_RAGEFIRE:
|
||||
return SavianaRagefireGUID;
|
||||
case DATA_GENERAL_ZARITHRIAN:
|
||||
return GeneralZarithrianGUID;
|
||||
case DATA_ZARITHIAN_SPAWN_STALKER_1:
|
||||
return ZarithianSpawnStalkerGUID[0];
|
||||
case DATA_ZARITHIAN_SPAWN_STALKER_2:
|
||||
return ZarithianSpawnStalkerGUID[1];
|
||||
case DATA_HALION:
|
||||
return HalionGUID;
|
||||
case DATA_HALION_CONTROLLER:
|
||||
return HalionControllerGUID;
|
||||
case DATA_BURNING_TREE_1:
|
||||
return BurningTreeGUID[0];
|
||||
case DATA_BURNING_TREE_2:
|
||||
return BurningTreeGUID[1];
|
||||
case DATA_BURNING_TREE_3:
|
||||
return BurningTreeGUID[2];
|
||||
case DATA_BURNING_TREE_4:
|
||||
return BurningTreeGUID[3];
|
||||
case DATA_FLAME_RING:
|
||||
return FlameRingGUID;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -145,11 +187,9 @@ class instance_ruby_sanctum : public InstanceMapScript
|
||||
{
|
||||
if (state == DONE && GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE)
|
||||
{
|
||||
if (GameObject* flameWalls = instance->GetGameObject(FlameWallsGUID))
|
||||
HandleGameObject(FlameWallsGUID, true, flameWalls);
|
||||
|
||||
HandleGameObject(FlameWallsGUID, true);
|
||||
if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID))
|
||||
zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||
zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -157,17 +197,18 @@ class instance_ruby_sanctum : public InstanceMapScript
|
||||
{
|
||||
if (state == DONE && GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
|
||||
{
|
||||
if (GameObject* flameWalls = instance->GetGameObject(FlameWallsGUID))
|
||||
HandleGameObject(FlameWallsGUID, true, flameWalls);
|
||||
|
||||
HandleGameObject(FlameWallsGUID, true);
|
||||
if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID))
|
||||
zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||
zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DATA_GENERAL_ZARITHRIAN:
|
||||
if (GameObject* flameWalls = instance->GetGameObject(FlameWallsGUID))
|
||||
HandleGameObject(FlameWallsGUID, state != IN_PROGRESS, flameWalls);
|
||||
if (GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
|
||||
HandleGameObject(FlameWallsGUID, state != IN_PROGRESS);
|
||||
if (state == DONE)
|
||||
if (Creature* halionController = instance->SummonCreature(NPC_HALION_CONTROLLER, HalionControllerSpawnPos))
|
||||
halionController->AI()->DoAction(ACTION_INTRO_HALION);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -248,11 +289,14 @@ class instance_ruby_sanctum : public InstanceMapScript
|
||||
uint64 GeneralZarithrianGUID;
|
||||
uint64 SavianaRagefireGUID;
|
||||
uint64 HalionGUID;
|
||||
uint64 HalionControllerGUID;
|
||||
uint64 CrystalChannelTargetGUID;
|
||||
uint64 XerestraszaGUID;
|
||||
uint64 FlameWallsGUID;
|
||||
uint32 BaltharusSharedHealth;
|
||||
uint64 ZarithianSpawnStalkerGUID[2];
|
||||
uint64 BurningTreeGUID[4];
|
||||
uint64 FlameRingGUID;
|
||||
uint32 BaltharusSharedHealth;
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const
|
||||
|
||||
@@ -82,7 +82,7 @@ class npc_xerestrasza : public CreatureScript
|
||||
_events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_6, 61000);
|
||||
_events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_7, 69000);
|
||||
}
|
||||
else if (action == ACTION_INTRO_TRIGGER && !_introDone)
|
||||
else if (action == ACTION_INTRO_BALTHARUS && !_introDone)
|
||||
{
|
||||
_introDone = true;
|
||||
Talk(SAY_XERESTRASZA_INTRO);
|
||||
@@ -152,10 +152,10 @@ class at_baltharus_plateau : public AreaTriggerScript
|
||||
if (InstanceScript* instance = player->GetInstanceScript())
|
||||
{
|
||||
if (Creature* xerestrasza = ObjectAccessor::GetCreature(*player, instance->GetData64(DATA_XERESTRASZA)))
|
||||
xerestrasza->AI()->DoAction(ACTION_INTRO_TRIGGER);
|
||||
xerestrasza->AI()->DoAction(ACTION_INTRO_BALTHARUS);
|
||||
|
||||
if (Creature* baltharus = ObjectAccessor::GetCreature(*player, instance->GetData64(DATA_BALTHARUS_THE_WARBORN)))
|
||||
baltharus->AI()->DoAction(ACTION_INTRO_TRIGGER);
|
||||
baltharus->AI()->DoAction(ACTION_INTRO_BALTHARUS);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
#define RSScriptName "instance_ruby_sanctum"
|
||||
uint32 const EncounterCount = 4;
|
||||
|
||||
Position const HalionControllerSpawnPos = {3156.037f, 533.2656f, 72.97205f, 0.0f};
|
||||
|
||||
enum DataTypes
|
||||
{
|
||||
// Encounter States/Boss GUIDs
|
||||
@@ -39,12 +41,18 @@ enum DataTypes
|
||||
DATA_BALTHARUS_SHARED_HEALTH = 6,
|
||||
DATA_ZARITHIAN_SPAWN_STALKER_1 = 7,
|
||||
DATA_ZARITHIAN_SPAWN_STALKER_2 = 8,
|
||||
DATA_HALION_CONTROLLER = 9,
|
||||
DATA_BURNING_TREE_1 = 10,
|
||||
DATA_BURNING_TREE_2 = 11,
|
||||
DATA_BURNING_TREE_3 = 12,
|
||||
DATA_BURNING_TREE_4 = 13,
|
||||
};
|
||||
|
||||
enum SharedActions
|
||||
{
|
||||
ACTION_INTRO_TRIGGER = -3975101,
|
||||
ACTION_INTRO_BALTHARUS = -3975101,
|
||||
ACTION_BALTHARUS_DEATH = -3975102,
|
||||
ACTION_INTRO_HALION = -4014601,
|
||||
};
|
||||
|
||||
enum CreaturesIds
|
||||
@@ -72,6 +80,11 @@ enum CreaturesIds
|
||||
NPC_ORB_ROTATION_FOCUS = 40091,
|
||||
NPC_SHADOW_ORB_N = 40083,
|
||||
NPC_SHADOW_ORB_S = 40100,
|
||||
NPC_METEOR_STRIKE_NORTH = 40041,
|
||||
NPC_METEOR_STRIKE_EAST = 40042,
|
||||
NPC_METEOR_STRIKE_WEST = 40043,
|
||||
NPC_METEOR_STRIKE_SOUTH = 40044,
|
||||
NPC_METEOR_STRIKE_FLAME = 40055,
|
||||
|
||||
// Xerestrasza
|
||||
NPC_XERESTRASZA = 40429,
|
||||
@@ -85,13 +98,17 @@ enum GameObjectsIds
|
||||
GO_FIRE_FIELD = 203005,
|
||||
GO_FLAME_WALLS = 203006,
|
||||
GO_FLAME_RING = 203007,
|
||||
GO_BURNING_TREE_1 = 203034,
|
||||
GO_BURNING_TREE_2 = 203035,
|
||||
GO_BURNING_TREE_3 = 203036,
|
||||
GO_BURNING_TREE_4 = 203037,
|
||||
};
|
||||
|
||||
enum WorldStatesRS
|
||||
{
|
||||
WORLDSTATE_UNK_1 = 5049, // Halion corporeality amount - normal phase
|
||||
WORLDSTATE_UNK_2 = 5050, // Halion corporeality amount - twilight phase
|
||||
WORLDSTATE_UNK_3 = 5051, // Halion corporeality toggle show
|
||||
WORLDSTATE_CORPOREALITY_MATERIAL = 5049,
|
||||
WORLDSTATE_CORPOREALITY_TWILIGHT = 5050,
|
||||
WORLDSTATE_CORPOREALITY_TOGGLE = 5051,
|
||||
};
|
||||
|
||||
template<class AI>
|
||||
|
||||
Reference in New Issue
Block a user