diff options
-rw-r--r-- | sql/updates/world/2014_12_26_00_world.sql | 9 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp | 55 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Naxxramas/naxxramas.h | 13 |
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 |