aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp12
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp49
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h17
3 files changed, 41 insertions, 37 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
index 3e9f95591ad..f3cad27f043 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
@@ -250,6 +250,7 @@ public:
void Reset()
{
_Reset();
+ uiShutdown = 0;
me->SetReactState(REACT_DEFENSIVE);
if (me->GetVehicleKit())
{
@@ -356,8 +357,10 @@ public:
void UpdateAI(const uint32 diff)
{
- if (!me->getVictim())
- UpdateVictim();
+ if (!UpdateVictim() || !CheckInRoom())
+ return;
+
+ events.Update(diff);
if (uiShutdown == RAID_MODE(2,4))
{
@@ -382,10 +385,7 @@ public:
}
if (me->HasUnitState(UNIT_STAT_CASTING))
- return;
-
-
- events.Update(diff);
+ return;
uint32 eventId = events.GetEvent();
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp
index 808bdab3815..f866bd3b746 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp
@@ -18,21 +18,10 @@
#include "ScriptPCH.h"
#include "ulduar.h"
-enum eGameObjects
+static const DoorData doorData[] =
{
- GO_KOLOGARN_CHEST_HERO = 195047,
- GO_KOLOGARN_CHEST = 195046,
- GO_KOLOGARN_BRIDGE = 194232,
- GO_KOLOGARN_DOOR = 194553,
- GO_THORIM_CHEST_HERO = 194315,
- GO_THORIM_CHEST = 194314,
- GO_HODIR_CHEST_HERO = 194308,
- GO_HODIR_CHEST = 194307,
- GO_FREYA_CHEST_HERO = 194325,
- GO_FREYA_CHEST = 194324,
- GO_LEVIATHAN_DOOR = 194905,
- GO_LEVIATHAN_GATE = 194630,
- GO_VEZAX_DOOR = 194750,
+ {GO_LEVIATHAN_DOOR, TYPE_LEVIATHAN, DOOR_TYPE_ROOM, BOUNDARY_S},
+ {0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE}
};
class instance_ulduar : public InstanceMapScript
@@ -47,7 +36,7 @@ public:
struct instance_ulduar_InstanceMapScript : public InstanceScript
{
- instance_ulduar_InstanceMapScript(Map* pMap) : InstanceScript(pMap) { Initialize(); };
+ instance_ulduar_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { Initialize(); };
uint32 uiEncounter[MAX_ENCOUNTER];
std::string m_strInstData;
@@ -70,7 +59,6 @@ public:
uint64 uiVezaxGUID;
uint64 uiYoggSaronGUID;
uint64 uiAlgalonGUID;
- uint64 uiLeviathanDoor[7];
uint64 uiLeviathanGateGUID;
uint64 uiVezaxDoorGUID;
@@ -86,6 +74,7 @@ public:
void Initialize()
{
SetBossNumber(MAX_ENCOUNTER);
+ LoadDoorData(doorData);
uiIgnisGUID = 0;
uiRazorscaleGUID = 0;
uiExpCommanderGUID = 0;
@@ -113,7 +102,6 @@ public:
memset(&uiEncounter, 0, sizeof(uiEncounter));
memset(&uiAssemblyGUIDs, 0, sizeof(uiAssemblyGUIDs));
- memset(&uiLeviathanDoor, 0, sizeof(uiLeviathanDoor));
}
bool IsEncounterInProgress() const
@@ -236,18 +224,12 @@ public:
uiFreyaChestGUID = go->GetGUID();
break;
case GO_LEVIATHAN_DOOR:
- uiLeviathanDoor[flag] = go->GetGUID();
- HandleGameObject(NULL, true, go);
- flag++;
- if (flag == 7)
- flag =0;
+ AddDoor(go, true);
break;
case GO_LEVIATHAN_GATE:
uiLeviathanGateGUID = go->GetGUID();
if (GetBossState(TYPE_LEVIATHAN) == DONE)
go->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
- else
- HandleGameObject(NULL, false, go);
break;
case GO_VEZAX_DOOR:
uiVezaxDoorGUID = go->GetGUID();
@@ -256,6 +238,18 @@ public:
}
}
+ void OnGameObjectRemove(GameObject* go)
+ {
+ switch (go->GetEntry())
+ {
+ case GO_LEVIATHAN_DOOR:
+ AddDoor(go, false);
+ break;
+ default:
+ break;
+ }
+ }
+
void ProcessEvent(GameObject* /*go*/, uint32 eventId)
{
// Flame Leviathan's Tower Event triggers
@@ -291,13 +285,6 @@ public:
switch (type)
{
case TYPE_LEVIATHAN:
- if (state == IN_PROGRESS)
- for (uint8 uiI = 0; uiI < 7; ++uiI)
- HandleGameObject(uiLeviathanDoor[uiI],false);
- else
- for (uint8 uiI = 0; uiI < 7; ++uiI)
- HandleGameObject(uiLeviathanDoor[uiI],true);
- break;
case TYPE_IGNIS:
case TYPE_RAZORSCALE:
case TYPE_XT002:
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h
index fdaa8545fa0..15276562197 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h
@@ -77,6 +77,23 @@ enum eNPCs
NPC_ALGALON = 32871,
};
+enum eGameObjects
+{
+ GO_KOLOGARN_CHEST_HERO = 195047,
+ GO_KOLOGARN_CHEST = 195046,
+ GO_KOLOGARN_BRIDGE = 194232,
+ GO_KOLOGARN_DOOR = 194553,
+ GO_THORIM_CHEST_HERO = 194315,
+ GO_THORIM_CHEST = 194314,
+ GO_HODIR_CHEST_HERO = 194308,
+ GO_HODIR_CHEST = 194307,
+ GO_FREYA_CHEST_HERO = 194325,
+ GO_FREYA_CHEST = 194324,
+ GO_LEVIATHAN_DOOR = 194905,
+ GO_LEVIATHAN_GATE = 194630,
+ GO_VEZAX_DOOR = 194750,
+};
+
enum eTowerEvents
{
EVENT_TOWER_OF_STORM_DESTROYED = 21031,