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:
kaelima
2011-06-06 15:20:56 +02:00
parent fc11540c23
commit 726c260002
5 changed files with 102 additions and 27 deletions
@@ -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;
@@ -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))
@@ -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>