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