aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2014_12_26_00_world.sql9
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp55
-rw-r--r--src/server/scripts/Northrend/Naxxramas/naxxramas.h13
3 files changed, 74 insertions, 3 deletions
diff --git a/sql/updates/world/2014_12_26_00_world.sql b/sql/updates/world/2014_12_26_00_world.sql
new file mode 100644
index 00000000000..101ed3c08be
--- /dev/null
+++ b/sql/updates/world/2014_12_26_00_world.sql
@@ -0,0 +1,9 @@
+SET @OGUID := 6166;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+2;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@OGUID+0, 181575, 533, 3, 1, 3465.175, -3940.402, 308.79, 2.443457, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 181575 (Area: 3456)
+(@OGUID+1, 181578, 533, 3, 1, 2493.018, -2921.778, 241.1933, 3.141593, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 181578 (Area: -1)
+(@OGUID+2, 181576, 533, 3, 1, 3539.016, -2936.821, 302.4756, 3.141593, 0, 0, 1, -4.371139E-08, 7200, 255, 1); -- 181576 (Area: 3456)
+
+-- These gameobjects have wrong flags at tdb 335, it's fine at 6.x. As seen on sniffs, they should have flags 16. Previous value was 6553616.
+UPDATE `gameobject_template` SET `flags` = 16 WHERE `entry` IN (181575, 181576);
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 100668979e8..e5895d78ab3 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -69,6 +69,15 @@ MinionData const minionData[] =
{ 0, 0, }
};
+ObjectData const objectData[] =
+{
+ { GO_NAXX_PORTAL_ARACHNID, DATA_NAXX_PORTAL_ARACHNID },
+ { GO_NAXX_PORTAL_CONSTRUCT, DATA_NAXX_PORTAL_CONSTRUCT },
+ { GO_NAXX_PORTAL_PLAGUE, DATA_NAXX_PORTAL_PLAGUE },
+ { GO_NAXX_PORTAL_MILITARY, DATA_NAXX_PORTAL_MILITARY },
+ { 0, 0, }
+};
+
float const HeiganPos[2] = { 2796.0f, -3707.0f };
float const HeiganEruptionSlope[3] =
{
@@ -111,6 +120,7 @@ class instance_naxxramas : public InstanceMapScript
SetBossNumber(EncounterCount);
LoadDoorData(doorData);
LoadMinionData(minionData);
+ LoadObjectData(nullptr, objectData);
minHorsemenDiedTime = 0;
maxHorsemenDiedTime = 0;
@@ -208,11 +218,27 @@ class instance_naxxramas : public InstanceMapScript
case GO_ROOM_KELTHUZAD:
KelthuzadDoorGUID = go->GetGUID();
break;
+ case GO_NAXX_PORTAL_ARACHNID:
+ if (GetBossState(BOSS_MAEXXNA) == DONE)
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ break;
+ case GO_NAXX_PORTAL_CONSTRUCT:
+ if (GetBossState(BOSS_THADDIUS) == DONE)
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ break;
+ case GO_NAXX_PORTAL_PLAGUE:
+ if (GetBossState(BOSS_LOATHEB) == DONE)
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ break;
+ case GO_NAXX_PORTAL_MILITARY:
+ if (GetBossState(BOSS_HORSEMEN) == DONE)
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ break;
default:
break;
}
- AddDoor(go, true);
+ InstanceScript::OnGameObjectCreate(go);
}
void OnGameObjectRemove(GameObject* go) override
@@ -239,7 +265,7 @@ class instance_naxxramas : public InstanceMapScript
break;
}
- AddDoor(go, false);
+ InstanceScript::OnGameObjectRemove(go);
}
void OnUnitDeath(Unit* unit) override
@@ -358,10 +384,31 @@ class instance_naxxramas : public InstanceMapScript
switch (id)
{
case BOSS_MAEXXNA:
+ if (state == DONE)
+ {
+ if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_ARACHNID))
+ teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+
+ events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6000);
+ }
+ break;
case BOSS_LOATHEB:
+ if (state == DONE)
+ {
+ if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_PLAGUE))
+ teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+
+ events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6000);
+ }
+ break;
case BOSS_THADDIUS:
if (state == DONE)
+ {
+ if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_CONSTRUCT))
+ teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+
events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6000);
+ }
break;
case BOSS_GOTHIK:
if (state == DONE)
@@ -375,6 +422,10 @@ class instance_naxxramas : public InstanceMapScript
horsemenChest->SetRespawnTime(horsemenChest->GetRespawnDelay());
horsemenChest->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
}
+
+ if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_MILITARY))
+ teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+
events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6000);
}
break;
diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
index eb77980f3ba..0f710a66bbe 100644
--- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h
+++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
@@ -52,6 +52,11 @@ enum Data
DATA_HORSEMEN2,
DATA_HORSEMEN3,
DATA_ABOMINATION_KILLED,
+
+ DATA_NAXX_PORTAL_ARACHNID,
+ DATA_NAXX_PORTAL_CONSTRUCT,
+ DATA_NAXX_PORTAL_PLAGUE,
+ DATA_NAXX_PORTAL_MILITARY
};
enum Data64
@@ -137,7 +142,13 @@ enum GameObjectsIds
GO_CONS_EYE_RAMP_BOSS = 181232,
GO_CONS_NOX_TESLA_FEUGEN = 181477,
GO_CONS_NOX_TESLA_STALAGG = 181478,
- GO_BIRTH = 181356
+ GO_BIRTH = 181356,
+
+ // Teleporting pads spawned by the end of every quarter.
+ GO_NAXX_PORTAL_ARACHNID = 181575,
+ GO_NAXX_PORTAL_CONSTRUCT = 181576,
+ GO_NAXX_PORTAL_PLAGUE = 181577,
+ GO_NAXX_PORTAL_MILITARY = 181578
};
enum SpellIds