From 9f7227e7b5977ce0c481cfa5c998bef77cc67bc9 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 26 Dec 2022 11:39:40 +0100 Subject: [PATCH] Core/OutdoorPvP: Move Halaa spawns to db using worldstate conditions --- .../world/4.3.4/2022_12_26_00_world.sql | 186 ++++++++ .../game/Grids/Notifiers/GridNotifiers.h | 15 + src/server/game/Maps/Map.cpp | 2 +- src/server/game/OutdoorPvP/OutdoorPvP.cpp | 30 +- src/server/game/OutdoorPvP/OutdoorPvP.h | 1 + .../scripts/OutdoorPvP/OutdoorPvPNA.cpp | 406 +++++------------- src/server/scripts/OutdoorPvP/OutdoorPvPNA.h | 50 +-- 7 files changed, 335 insertions(+), 355 deletions(-) create mode 100644 sql/updates/world/4.3.4/2022_12_26_00_world.sql diff --git a/sql/updates/world/4.3.4/2022_12_26_00_world.sql b/sql/updates/world/4.3.4/2022_12_26_00_world.sql new file mode 100644 index 0000000000..cebdcfbc46 --- /dev/null +++ b/sql/updates/world/4.3.4/2022_12_26_00_world.sql @@ -0,0 +1,186 @@ +DELETE FROM `spawn_group_template` WHERE `groupId` BETWEEN 105 AND 124; +INSERT INTO `spawn_group_template` (`groupId`,`groupName`,`groupFlags`) VALUES +(105,'Nagrand - Halaa - Horde Controlled',32), +(106,'Nagrand - Halaa - Alliance Controlled',32), +(107,'Nagrand - Halaa - Wyvern Camp (East) - Horde Uncontrolled',32), +(108,'Nagrand - Halaa - Wyvern Camp (East) - Alliance Uncontrolled',32), +(109,'Nagrand - Halaa - Wyvern Camp (East) - Horde Controlled',32), +(110,'Nagrand - Halaa - Wyvern Camp (East) - Alliance Controlled',32), +(111,'Nagrand - Halaa - Wyvern Camp (North) - Horde Uncontrolled',32), +(112,'Nagrand - Halaa - Wyvern Camp (North) - Alliance Uncontrolled',32), +(113,'Nagrand - Halaa - Wyvern Camp (North) - Horde Controlled',32), +(114,'Nagrand - Halaa - Wyvern Camp (North) - Alliance Controlled',32), +(115,'Nagrand - Halaa - Wyvern Camp (West) - Horde Uncontrolled',32), +(116,'Nagrand - Halaa - Wyvern Camp (West) - Alliance Uncontrolled',32), +(117,'Nagrand - Halaa - Wyvern Camp (West) - Horde Controlled',32), +(118,'Nagrand - Halaa - Wyvern Camp (West) - Alliance Controlled',32), +(119,'Nagrand - Halaa - Wyvern Camp (South) - Horde Uncontrolled',32), +(120,'Nagrand - Halaa - Wyvern Camp (South) - Alliance Uncontrolled',32), +(121,'Nagrand - Halaa - Wyvern Camp (South) - Horde Controlled',32), +(122,'Nagrand - Halaa - Wyvern Camp (South) - Alliance Controlled',32), +(123,'Nagrand - Halaa - Horde Guards',32), +(124,'Nagrand - Halaa - Alliance Guards',32); + +DELETE FROM `creature` WHERE `guid` BETWEEN 145427 AND 145466; +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseUseFlags`, `PhaseId`, `PhaseGroup`, `terrainSwapMap`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES +(145427, 18816, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1523.92, 7951.76, -17.6942, 3.51172, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, '', 0), +(145428, 18821, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1527.75, 7952.46, -17.6948, 3.99317, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, '', 0), +(145429, 21474, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1520.14, 7927.11, -20.2527, 3.39389, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, '', 0), +(145430, 21484, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1524.84, 7930.34, -20.182, 3.6405, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, '', 0), +(145431, 21483, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1570.01, 7993.8, -22.4505, 5.02655, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, '', 0), +(145432, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1654.06, 8000.46, -26.59, 3.37, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145433, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1487.18, 7899.1, -19.53, 0.954, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145434, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1480.88, 7908.79, -19.19, 4.485, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145435, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1540.56, 7995.44, -20.45, 0.947, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145436, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1546.95, 8000.85, -20.72, 6.035, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145437, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1595.31, 7860.53, -21.51, 3.747, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145438, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1642.31, 7995.59, -25.8, 3.317, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145439, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1545.46, 7995.35, -20.63, 1.094, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145440, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1487.58, 7907.99, -19.27, 5.567, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145441, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1651.54, 7988.56, -26.5289, 2.98451, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145442, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1602.46, 7866.43, -22.1177, 4.74729, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145443, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1591.22, 7875.29, -22.3536, 4.34587, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145444, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1550.6, 7944.45, -21.63, 3.559, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145445, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1545.57, 7935.83, -21.13, 3.448, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145446, 18192, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1550.86, 7937.56, -21.7, 3.801, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145447, 18817, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1591.18, 8020.39, -22.2042, 4.59022, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, '', 0), +(145448, 18822, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1588, 8019, -22.2042, 4.06662, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, '', 0), +(145449, 21485, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1521.93, 7927.37, -20.2299, 3.24631, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, '', 0), +(145450, 21487, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1540.33, 7971.95, -20.7186, 3.07178, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, '', 0), +(145451, 21488, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1570.01, 7993.8, -22.4505, 5.02655, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, '', 0), +(145452, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1654.06, 8000.46, -26.59, 3.37, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145453, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1487.18, 7899.1, -19.53, 0.954, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145454, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1480.88, 7908.79, -19.19, 4.485, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145455, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1540.56, 7995.44, -20.45, 0.947, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145456, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1546.95, 8000.85, -20.72, 6.035, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145457, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1595.31, 7860.53, -21.51, 3.747, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145458, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1642.31, 7995.59, -25.8, 3.317, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145459, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1545.46, 7995.35, -20.63, 1.094, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145460, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1487.58, 7907.99, -19.27, 5.567, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145461, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1651.54, 7988.56, -26.5289, 2.98451, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145462, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1602.46, 7866.43, -22.1177, 4.74729, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145463, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1591.22, 7875.29, -22.3536, 4.34587, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145464, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1603.75, 8000.36, -24.18, 4.516, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145465, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1585.73, 7994.68, -23.29, 4.439, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0), +(145466, 18256, 530, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1595.5, 7991.27, -23.53, 4.738, 1000000, 0, 0, 10000000, 0, 0, 0, 0, 0, '', 0); + +DELETE FROM `gameobject` WHERE `guid` BETWEEN 23273 AND 23297; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseUseFlags`, `PhaseId`, `PhaseGroup`, `terrainSwapMap`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`) VALUES +(23273, 182210, 530, 0, 0, 0, 0, 0, 0, -1, -1572.57, 7945.3, -22.475, 2.05949, 0, 0, 0.857167, 0.515038, 0, 0, 1, '', 0), +(23274, 182267, 530, 0, 0, 0, 0, 0, 0, -1, -1815.8, 8036.51, -26.2354, -2.89725, 0, 0, 0.992546, -0.121869, 0, 0, 1, '', 0), -- NA_ROOST_S +(23275, 182280, 530, 0, 0, 0, 0, 0, 0, -1, -1507.95, 8132.1, -19.5585, -1.3439, 0, 0, 0.622515, -0.782608, 0, 0, 1, '', 0), -- NA_ROOST_W +(23276, 182281, 530, 0, 0, 0, 0, 0, 0, -1, -1384.52, 7779.33, -11.1663, -0.575959, 0, 0, 0.284015, -0.95882, 0, 0, 1, '', 0), -- NA_ROOST_N +(23277, 182282, 530, 0, 0, 0, 0, 0, 0, -1, -1650.11, 7732.56, -15.4505, -2.80998, 0, 0, 0.986286, -0.165048, 0, 0, 1, '', 0), -- NA_ROOST_E +(23278, 182222, 530, 0, 0, 0, 0, 0, 0, -1, -1825.4, 8039.26, -26.08, -2.89725, 0, 0, 0.992546, -0.121869, 0, 0, 1, '', 0), -- NA_BOMB_WAGON_S +(23279, 182272, 530, 0, 0, 0, 0, 0, 0, -1, -1515.37, 8136.91, -20.42, -1.3439, 0, 0, 0.622515, -0.782608, 0, 0, 1, '', 0), -- NA_BOMB_WAGON_W +(23280, 182273, 530, 0, 0, 0, 0, 0, 0, -1, -1377.95, 7773.44, -10.31, -0.575959, 0, 0, 0.284015, -0.95882, 0, 0, 1, '', 0), -- NA_BOMB_WAGON_N +(23281, 182274, 530, 0, 0, 0, 0, 0, 0, -1, -1659.87, 7733.15, -15.75, -2.80998, 0, 0, 0.986286, -0.165048, 0, 0, 1, '', 0), -- NA_BOMB_WAGON_E +(23282, 182266, 530, 0, 0, 0, 0, 0, 0, -1, -1815.8, 8036.51, -26.2354, -2.89725, 0, 0, 0.992546, -0.121869, 0, 0, 1, '', 0), -- NA_DESTROYED_ROOST_S +(23283, 182275, 530, 0, 0, 0, 0, 0, 0, -1, -1507.95, 8132.1, -19.5585, -1.3439, 0, 0, 0.622515, -0.782608, 0, 0, 1, '', 0), -- NA_DESTROYED_ROOST_W +(23284, 182276, 530, 0, 0, 0, 0, 0, 0, -1, -1384.52, 7779.33, -11.1663, -0.575959, 0, 0, 0.284015, -0.95882, 0, 0, 1, '', 0), -- NA_DESTROYED_ROOST_N +(23285, 182277, 530, 0, 0, 0, 0, 0, 0, -1, -1650.11, 7732.56, -15.4505, -2.80998, 0, 0, 0.986286, -0.165048, 0, 0, 1, '', 0), -- NA_DESTROYED_ROOST_E +(23286, 182301, 530, 0, 0, 0, 0, 0, 0, -1, -1815.8, 8036.51, -26.2354, -2.89725, 0, 0, 0.992546, -0.121869, 0, 0, 1, '', 0), -- NA_ROOST_S +(23287, 182302, 530, 0, 0, 0, 0, 0, 0, -1, -1507.95, 8132.1, -19.5585, -1.3439, 0, 0, 0.622515, -0.782608, 0, 0, 1, '', 0), -- NA_ROOST_W +(23288, 182303, 530, 0, 0, 0, 0, 0, 0, -1, -1384.52, 7779.33, -11.1663, -0.575959, 0, 0, 0.284015, -0.95882, 0, 0, 1, '', 0), -- NA_ROOST_N +(23289, 182304, 530, 0, 0, 0, 0, 0, 0, -1, -1650.11, 7732.56, -15.4505, -2.80998, 0, 0, 0.986286, -0.165048, 0, 0, 1, '', 0), -- NA_ROOST_E +(23290, 182305, 530, 0, 0, 0, 0, 0, 0, -1, -1825.4, 8039.26, -26.08, -2.89725, 0, 0, 0.992546, -0.121869, 0, 0, 1, '', 0), -- NA_BOMB_WAGON_S +(23291, 182306, 530, 0, 0, 0, 0, 0, 0, -1, -1515.37, 8136.91, -20.42, -1.3439, 0, 0, 0.622515, -0.782608, 0, 0, 1, '', 0), -- NA_BOMB_WAGON_W +(23292, 182307, 530, 0, 0, 0, 0, 0, 0, -1, -1377.95, 7773.44, -10.31, -0.575959, 0, 0, 0.284015, -0.95882, 0, 0, 1, '', 0), -- NA_BOMB_WAGON_N +(23293, 182308, 530, 0, 0, 0, 0, 0, 0, -1, -1659.87, 7733.15, -15.75, -2.80998, 0, 0, 0.986286, -0.165048, 0, 0, 1, '', 0), -- NA_BOMB_WAGON_E +(23294, 182297, 530, 0, 0, 0, 0, 0, 0, -1, -1815.8, 8036.51, -26.2354, -2.89725, 0, 0, 0.992546, -0.121869, 0, 0, 1, '', 0), -- NA_DESTROYED_ROOST_S +(23295, 182298, 530, 0, 0, 0, 0, 0, 0, -1, -1507.95, 8132.1, -19.5585, -1.3439, 0, 0, 0.622515, -0.782608, 0, 0, 1, '', 0), -- NA_DESTROYED_ROOST_W +(23296, 182299, 530, 0, 0, 0, 0, 0, 0, -1, -1384.52, 7779.33, -11.1663, -0.575959, 0, 0, 0.284015, -0.95882, 0, 0, 1, '', 0), -- NA_DESTROYED_ROOST_N +(23297, 182300, 530, 0, 0, 0, 0, 0, 0, -1, -1650.11, 7732.56, -15.4505, -2.80998, 0, 0, 0.986286, -0.165048, 0, 0, 1, '', 0); -- NA_DESTROYED_ROOST_E + +UPDATE `gameobject_template_addon` SET `flags`=0x20 WHERE `entry` IN (182266,182275,182276,182277,182297,182298,182299,182300,182222,182272,182273,182274,182305,182306,182307,182308); + +DELETE FROM `spawn_group` WHERE `spawnId` BETWEEN 145427 AND 145466 AND `spawnType`=0; +DELETE FROM `spawn_group` WHERE `spawnId` BETWEEN 23273 AND 23297 AND `spawnType`=1; +INSERT INTO `spawn_group` (`groupId`,`spawnType`,`spawnId`) VALUES +(105,0,145427), +(105,0,145428), +(105,0,145429), +(105,0,145430), +(105,0,145431), +(123,0,145432), +(123,0,145433), +(123,0,145434), +(123,0,145435), +(123,0,145436), +(123,0,145437), +(123,0,145438), +(123,0,145439), +(123,0,145440), +(123,0,145441), +(123,0,145442), +(123,0,145443), +(123,0,145444), +(123,0,145445), +(123,0,145446), +(106,0,145447), +(106,0,145448), +(106,0,145449), +(106,0,145450), +(106,0,145451), +(124,0,145452), +(124,0,145453), +(124,0,145454), +(124,0,145455), +(124,0,145456), +(124,0,145457), +(124,0,145458), +(124,0,145459), +(124,0,145460), +(124,0,145461), +(124,0,145462), +(124,0,145463), +(124,0,145464), +(124,0,145465), +(124,0,145466), +(122,1,23274), +(118,1,23275), +(114,1,23276), +(110,1,23277), +(122,1,23278), +(118,1,23279), +(114,1,23280), +(110,1,23281), +(120,1,23282), +(116,1,23283), +(112,1,23284), +(108,1,23285), +(121,1,23286), +(117,1,23287), +(113,1,23288), +(109,1,23289), +(121,1,23290), +(117,1,23291), +(113,1,23292), +(109,1,23293), +(119,1,23294), +(115,1,23295), +(111,1,23296), +(107,1,23297); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=33 AND `SourceEntry` BETWEEN 105 AND 124; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(33, 0, 105, 0, 0, 11, 0, 2672, 1, 0, 0, 0, 0, '', 'Halaa - Spawn Horde NPCs when Horde controls it'), +(33, 0, 106, 0, 0, 11, 0, 2673, 1, 0, 0, 0, 0, '', 'Halaa - Spawn Alliance NPCs when Alliance controls it'), +(33, 0, 107, 0, 0, 11, 0, 2763, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (East) - Horde Uncontrolled'), +(33, 0, 108, 0, 0, 11, 0, 2659, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (East) - Alliance Uncontrolled'), +(33, 0, 109, 0, 0, 11, 0, 2660, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (East) - Horde Controlled'), +(33, 0, 110, 0, 0, 11, 0, 2661, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (East) - Alliance Controlled'), +(33, 0, 111, 0, 0, 11, 0, 2762, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (North) - Horde Uncontrolled'), +(33, 0, 112, 0, 0, 11, 0, 2662, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (North) - Alliance Uncontrolled'), +(33, 0, 113, 0, 0, 11, 0, 2663, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (North) - Horde Controlled'), +(33, 0, 114, 0, 0, 11, 0, 2664, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (North) - Alliance Controlled'), +(33, 0, 115, 0, 0, 11, 0, 2761, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (West) - Horde Uncontrolled'), +(33, 0, 116, 0, 0, 11, 0, 2667, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (West) - Alliance Uncontrolled'), +(33, 0, 117, 0, 0, 11, 0, 2665, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (West) - Horde Controlled'), +(33, 0, 118, 0, 0, 11, 0, 2666, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (West) - Alliance Controlled'), +(33, 0, 119, 0, 0, 11, 0, 2760, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (South) - Horde Uncontrolled'), +(33, 0, 120, 0, 0, 11, 0, 2670, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (South) - Alliance Uncontrolled'), +(33, 0, 121, 0, 0, 11, 0, 2668, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (South) - Horde Controlled'), +(33, 0, 122, 0, 0, 11, 0, 2669, 1, 0, 0, 0, 0, '', 'Halaa - Wyvern Camp (South) - Alliance Controlled'), +(33, 0, 123, 0, 0, 11, 0, 2672, 1, 0, 0, 0, 0, '', 'Halaa - Spawn Horde guards when Horde controls it'), +(33, 0, 124, 0, 0, 11, 0, 2673, 1, 0, 0, 0, 0, '', 'Halaa - Spawn Alliance guards when Alliance controls it'); diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index a7b9bc5a69..972b3d58a8 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -1571,6 +1571,21 @@ namespace Trinity ObjectGuid _casterGUID; }; + class ObjectEntryAndPrivateOwnerIfExistsCheck + { + public: + ObjectEntryAndPrivateOwnerIfExistsCheck(ObjectGuid ownerGUID, uint32 entry) : _ownerGUID(ownerGUID), _entry(entry) { } + + bool operator()(WorldObject* object) const + { + return object->GetEntry() == _entry && (!object->IsPrivateObject() || object->GetPrivateObjectOwner() == _ownerGUID); + } + + private: + ObjectGuid _ownerGUID; + uint32 _entry; + }; + // Player checks and do // Prepare using Builder localized packets with caching and send to player diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index fcd4bca008..a81e14223e 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2208,7 +2208,7 @@ void Map::UpdateSpawnGroupConditions() if (shouldBeActive) SpawnGroupSpawn(spawnGroupId); else if (ASSERT_NOTNULL(GetSpawnGroupData(spawnGroupId))->flags & SPAWNGROUP_FLAG_DESPAWN_ON_CONDITION_FAILURE) - SpawnGroupDespawn(spawnGroupId); + SpawnGroupDespawn(spawnGroupId, true); else SetSpawnGroupInactive(spawnGroupId); } diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp index 1b2fe24fb7..f737bd3c66 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp @@ -138,6 +138,26 @@ bool OPvPCapturePoint::AddCreature(uint32 type, uint32 entry, uint32 map, Positi return false; } +bool OPvPCapturePoint::SetCapturePointData(uint32 entry) +{ + TC_LOG_DEBUG("outdoorpvp", "Creating capture point %u", entry); + + // check info existence + GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(entry); + if (!goinfo || goinfo->type != GAMEOBJECT_TYPE_CAPTURE_POINT) + { + TC_LOG_ERROR("outdoorpvp", "OutdoorPvP: GO %u is not capture point!", entry); + return false; + } + + // get the needed values from goinfo + m_maxValue = (float)goinfo->capturePoint.maxTime; + m_maxSpeed = m_maxValue / (goinfo->capturePoint.minTime ? goinfo->capturePoint.minTime : 60); + m_neutralValuePct = goinfo->capturePoint.neutralPercent; + m_minValue = CalculatePct(m_maxValue, m_neutralValuePct); + return true;; +} + bool OPvPCapturePoint::SetCapturePointData(uint32 entry, uint32 map, Position const& pos, QuaternionData const& rot) { TC_LOG_DEBUG("outdoorpvp", "Creating capture point %u", entry); @@ -151,16 +171,10 @@ bool OPvPCapturePoint::SetCapturePointData(uint32 entry, uint32 map, Position co } m_capturePointSpawnId = sObjectMgr->AddGameObjectData(entry, map, pos, rot, 0); - - if (m_capturePointSpawnId == 0) + if (!m_capturePointSpawnId) return false; - // get the needed values from goinfo - m_maxValue = (float)goinfo->capturePoint.maxTime; - m_maxSpeed = m_maxValue / (goinfo->capturePoint.minTime ? goinfo->capturePoint.minTime : 60); - m_neutralValuePct = goinfo->capturePoint.neutralPercent; - m_minValue = CalculatePct(m_maxValue, m_neutralValuePct); - + SetCapturePointData(entry); return true; } diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h index e1f622ce0d..0d332d703e 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.h +++ b/src/server/game/OutdoorPvP/OutdoorPvP.h @@ -131,6 +131,7 @@ class TC_GAME_API OPvPCapturePoint void AddGO(uint32 type, ObjectGuid::LowType guid, uint32 entry = 0); void AddCre(uint32 type, ObjectGuid::LowType guid, uint32 entry = 0); + bool SetCapturePointData(uint32 entry); bool SetCapturePointData(uint32 entry, uint32 map, Position const& pos, QuaternionData const& rot); protected: diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp index c9ab23de0d..7daf063004 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp @@ -15,129 +15,50 @@ * with this program. If not, see . */ -#include "ScriptMgr.h" +#include "OutdoorPvPNA.h" +#include "CellImpl.h" #include "Creature.h" #include "GameObject.h" +#include "GridNotifiersImpl.h" #include "MapManager.h" #include "ObjectMgr.h" #include "OutdoorPvPMgr.h" -#include "OutdoorPvPNA.h" #include "Player.h" +#include "ScriptMgr.h" #include "WorldPacket.h" #include "WorldStatePackets.h" // kill credit for pks uint32 const NA_CREDIT_MARKER = 24867; - uint32 const NA_GUARDS_MAX = 15; - uint32 const NA_BUFF_ZONE = 3518; - uint32 const NA_HALAA_GRAVEYARD = 993; - uint32 const NA_HALAA_GRAVEYARD_ZONE = 3518; // need to add zone id, not area id - uint32 const NA_RESPAWN_TIME = 3600000; // one hour to capture after defeating all guards - uint32 const NA_GUARD_CHECK_TIME = 500; // every half second - uint32 const FLIGHT_NODES_NUM = 4; - uint32 const FlightPathStartNodes[FLIGHT_NODES_NUM] = { 103, 105, 107, 109 }; uint32 const FlightPathEndNodes[FLIGHT_NODES_NUM] = { 104, 106, 108, 110 }; -// spawned when the alliance is attacking, horde is in control -go_type const HordeControlGOs[NA_CONTROL_GO_NUM] = -{ - { 182267, 530, { -1815.8000f, 8036.5100f, -26.2354f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //ALLY_ROOST_SOUTH - { 182280, 530, { -1507.9500f, 8132.1000f, -19.5585f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //ALLY_ROOST_WEST - { 182281, 530, { -1384.5200f, 7779.3300f, -11.1663f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //ALLY_ROOST_NORTH - { 182282, 530, { -1650.1100f, 7732.5600f, -15.4505f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } }, //ALLY_ROOST_EAST - - { 182222, 530, { -1825.4022f, 8039.2602f, -26.0800f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //HORDE_BOMB_WAGON_SOUTH - { 182272, 530, { -1515.3700f, 8136.9100f, -20.4200f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //HORDE_BOMB_WAGON_WEST - { 182273, 530, { -1377.9500f, 7773.4400f, -10.3100f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //HORDE_BOMB_WAGON_NORTH - { 182274, 530, { -1659.8700f, 7733.1500f, -15.7500f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } }, //HORDE_BOMB_WAGON_EAST - - { 182266, 530, { -1815.8000f, 8036.5100f, -26.2354f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //DESTROYED_ALLY_ROOST_SOUTH - { 182275, 530, { -1507.9500f, 8132.1000f, -19.5585f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //DESTROYED_ALLY_ROOST_WEST - { 182276, 530, { -1384.5200f, 7779.3300f, -11.1663f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //DESTROYED_ALLY_ROOST_NORTH - { 182277, 530, { -1650.1100f, 7732.5600f, -15.4505f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } } //DESTROYED_ALLY_ROOST_EAST -}; - -// spawned when the horde is attacking, alliance is in control -go_type const AllianceControlGOs[NA_CONTROL_GO_NUM] = -{ - { 182301, 530, { -1815.8000f, 8036.5100f, -26.2354f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //HORDE_ROOST_SOUTH - { 182302, 530, { -1507.9500f, 8132.1000f, -19.5585f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //HORDE_ROOST_WEST - { 182303, 530, { -1384.5200f, 7779.3300f, -11.1663f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //HORDE_ROOST_NORTH - { 182304, 530, { -1650.1100f, 7732.5600f, -15.4505f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } }, //HORDE_ROOST_EAST - - { 182305, 530, { -1825.4022f, 8039.2602f, -26.0800f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //ALLY_BOMB_WAGON_SOUTH - { 182306, 530, { -1515.3700f, 8136.9100f, -20.4200f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //ALLY_BOMB_WAGON_WEST - { 182307, 530, { -1377.9500f, 7773.4400f, -10.3100f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //ALLY_BOMB_WAGON_NORTH - { 182308, 530, { -1659.8700f, 7733.1500f, -15.7500f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } }, //ALLY_BOMB_WAGON_EAST - - { 182297, 530, { -1815.8000f, 8036.5100f, -26.2354f, -2.897250f }, { 0.0f, 0.0f, 0.992546f, -0.121869f } }, //DESTROYED_HORDE_ROOST_SOUTH - { 182298, 530, { -1507.9500f, 8132.1000f, -19.5585f, -1.343900f }, { 0.0f, 0.0f, 0.622515f, -0.782608f } }, //DESTROYED_HORDE_ROOST_WEST - { 182299, 530, { -1384.5200f, 7779.3300f, -11.1663f, -0.575959f }, { 0.0f, 0.0f, 0.284015f, -0.958820f } }, //DESTROYED_HORDE_ROOST_NORTH - { 182300, 530, { -1650.1100f, 7732.5600f, -15.4505f, -2.809980f }, { 0.0f, 0.0f, 0.986286f, -0.165048f } } //DESTROYED_HORDE_ROOST_EAST -}; - -creature_type const HordeControlNPCs[NA_CONTROL_NPC_NUM] = -{ - { 18816, 530, { -1523.92f, 7951.76f, -17.6942f, 3.51172f } }, - { 18821, 530, { -1527.75f, 7952.46f, -17.6948f, 3.99317f } }, - { 21474, 530, { -1520.14f, 7927.11f, -20.2527f, 3.39389f } }, - { 21484, 530, { -1524.84f, 7930.34f, -20.1820f, 3.64050f } }, - { 21483, 530, { -1570.01f, 7993.80f, -22.4505f, 5.02655f } }, - { 18192, 530, { -1654.06f, 8000.46f, -26.5900f, 3.37000f } }, - { 18192, 530, { -1487.18f, 7899.10f, -19.5300f, 0.95400f } }, - { 18192, 530, { -1480.88f, 7908.79f, -19.1900f, 4.48500f } }, - { 18192, 530, { -1540.56f, 7995.44f, -20.4500f, 0.94700f } }, - { 18192, 530, { -1546.95f, 8000.85f, -20.7200f, 6.03500f } }, - { 18192, 530, { -1595.31f, 7860.53f, -21.5100f, 3.74700f } }, - { 18192, 530, { -1642.31f, 7995.59f, -25.8000f, 3.31700f } }, - { 18192, 530, { -1545.46f, 7995.35f, -20.6300f, 1.09400f } }, - { 18192, 530, { -1487.58f, 7907.99f, -19.2700f, 5.56700f } }, - { 18192, 530, { -1651.54f, 7988.56f, -26.5289f, 2.98451f } }, - { 18192, 530, { -1602.46f, 7866.43f, -22.1177f, 4.74729f } }, - { 18192, 530, { -1591.22f, 7875.29f, -22.3536f, 4.34587f } }, - { 18192, 530, { -1550.60f, 7944.45f, -21.6300f, 3.55900f } }, - { 18192, 530, { -1545.57f, 7935.83f, -21.1300f, 3.44800f } }, - { 18192, 530, { -1550.86f, 7937.56f, -21.7000f, 3.80100f } } -}; - -creature_type const AllianceControlNPCs[NA_CONTROL_NPC_NUM] = -{ - { 18817, 530, { -1591.18f, 8020.39f, -22.2042f, 4.59022f } }, - { 18822, 530, { -1588.00f, 8019.00f, -22.2042f, 4.06662f } }, - { 21485, 530, { -1521.93f, 7927.37f, -20.2299f, 3.24631f } }, - { 21487, 530, { -1540.33f, 7971.95f, -20.7186f, 3.07178f } }, - { 21488, 530, { -1570.01f, 7993.80f, -22.4505f, 5.02655f } }, - { 18256, 530, { -1654.06f, 8000.46f, -26.5900f, 3.37000f } }, - { 18256, 530, { -1487.18f, 7899.10f, -19.5300f, 0.95400f } }, - { 18256, 530, { -1480.88f, 7908.79f, -19.1900f, 4.48500f } }, - { 18256, 530, { -1540.56f, 7995.44f, -20.4500f, 0.94700f } }, - { 18256, 530, { -1546.95f, 8000.85f, -20.7200f, 6.03500f } }, - { 18256, 530, { -1595.31f, 7860.53f, -21.5100f, 3.74700f } }, - { 18256, 530, { -1642.31f, 7995.59f, -25.8000f, 3.31700f } }, - { 18256, 530, { -1545.46f, 7995.35f, -20.6300f, 1.09400f } }, - { 18256, 530, { -1487.58f, 7907.99f, -19.2700f, 5.56700f } }, - { 18256, 530, { -1651.54f, 7988.56f, -26.5289f, 2.98451f } }, - { 18256, 530, { -1602.46f, 7866.43f, -22.1177f, 4.74729f } }, - { 18256, 530, { -1591.22f, 7875.29f, -22.3536f, 4.34587f } }, - { 18256, 530, { -1603.75f, 8000.36f, -24.1800f, 4.51600f } }, - { 18256, 530, { -1585.73f, 7994.68f, -23.2900f, 4.43900f } }, - { 18256, 530, { -1595.50f, 7991.27f, -23.5300f, 4.73800f } } -}; - OutdoorPvPNA::OutdoorPvPNA() { m_TypeId = OUTDOOR_PVP_NA; m_obj = nullptr; } +void OutdoorPvPNA::OnGameObjectCreate(GameObject* go) +{ + switch (go->GetEntry()) + { + case 182210: + m_obj->m_capturePointSpawnId = go->GetSpawnId(); + AddCapturePoint(m_obj); + break; + } + + OutdoorPvP::OnGameObjectCreate(go); +} + void OutdoorPvPNA::HandleKillImpl(Player* player, Unit* killed) { if (killed->GetTypeId() == TYPEID_PLAYER && player->GetTeam() != killed->ToPlayer()->GetTeam()) @@ -150,40 +71,16 @@ void OutdoorPvPNA::HandleKillImpl(Player* player, Unit* killed) } } -uint32 OPvPCapturePointNA::GetAliveGuardsCount() +uint32 OPvPCapturePointNA::GetAliveGuardsCount() const { - uint32 cnt = 0; - for (std::map::iterator itr = m_Creatures.begin(); itr != m_Creatures.end(); ++itr) - { - switch (itr->first) - { - case NA_NPC_GUARD_01: - case NA_NPC_GUARD_02: - case NA_NPC_GUARD_03: - case NA_NPC_GUARD_04: - case NA_NPC_GUARD_05: - case NA_NPC_GUARD_06: - case NA_NPC_GUARD_07: - case NA_NPC_GUARD_08: - case NA_NPC_GUARD_09: - case NA_NPC_GUARD_10: - case NA_NPC_GUARD_11: - case NA_NPC_GUARD_12: - case NA_NPC_GUARD_13: - case NA_NPC_GUARD_14: - case NA_NPC_GUARD_15: - { - auto bounds = m_PvP->GetMap()->GetCreatureBySpawnIdStore().equal_range(itr->second); - for (auto it = bounds.first; it != bounds.second; ++it) - if (it->second->IsAlive()) - ++cnt; - break; - } - default: - break; - } - } - return cnt; + Position searchCenter = { -1572.57f, 7945.3f, -22.475f, 2.05949f }; + + std::vector guards; + Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck check(ObjectGuid::Empty, GetControllingFaction() == HORDE ? 18192 : 18256); + Trinity::WorldObjectListSearcher searcher(nullptr, guards, check, GRID_MAP_TYPE_MASK_CREATURE); + Cell::VisitGridObjects(searchCenter.GetPositionX(), searchCenter.GetPositionY(), m_PvP->GetMap(), searcher, SIZE_OF_GRIDS); + + return std::count_if(guards.begin(), guards.end(), [](WorldObject* guard) { return guard->IsUnit() && guard->ToUnit()->IsAlive(); }); } uint32 OPvPCapturePointNA::GetControllingFaction() const @@ -191,56 +88,6 @@ uint32 OPvPCapturePointNA::GetControllingFaction() const return m_ControllingFaction; } -void OPvPCapturePointNA::SpawnNPCsForTeam(uint32 team) -{ - creature_type const* creatures = nullptr; - if (team == ALLIANCE) - creatures = AllianceControlNPCs; - else if (team == HORDE) - creatures = HordeControlNPCs; - else - return; - for (int i = 0; i < NA_CONTROL_NPC_NUM; ++i) - AddCreature(i, creatures[i].entry, creatures[i].map, creatures[i].pos, OutdoorPvP::GetTeamIdByTeam(team), 1000000); -} - -void OPvPCapturePointNA::DeSpawnNPCs() -{ - for (int i = 0; i < NA_CONTROL_NPC_NUM; ++i) - DelCreature(i); -} - -void OPvPCapturePointNA::SpawnGOsForTeam(uint32 team) -{ - go_type const* gos = nullptr; - if (team == ALLIANCE) - gos = AllianceControlGOs; - else if (team == HORDE) - gos = HordeControlGOs; - else - return; - - // roosts and bomb wagons are spawned when someone uses the matching destroyed roost - static ControlGOTypes const GoTypes[] = - { - NA_DESTROYED_ROOST_S, - NA_DESTROYED_ROOST_W, - NA_DESTROYED_ROOST_N, - NA_DESTROYED_ROOST_E - }; - - for (ControlGOTypes goType : GoTypes) - AddObject(goType, gos[goType].entry, gos[goType].map, gos[goType].pos, gos[goType].rot); -} - -void OPvPCapturePointNA::DeSpawnGOs() -{ - for (int i = 0; i < NA_CONTROL_GO_NUM; ++i) - { - DelObject(i); - } -} - void OPvPCapturePointNA::FactionTakeOver(uint32 team) { if (m_ControllingFaction) @@ -249,13 +96,9 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team) m_ControllingFaction = team; if (m_ControllingFaction) sObjectMgr->AddGraveyardLink(NA_HALAA_GRAVEYARD, NA_HALAA_GRAVEYARD_ZONE, m_ControllingFaction, false); - DeSpawnGOs(); - DeSpawnNPCs(); - SpawnGOsForTeam(team); - SpawnNPCsForTeam(team); m_GuardsAlive = NA_GUARDS_MAX; m_capturable = false; - this->UpdateHalaaWorldState(); + UpdateHalaaWorldState(); if (team == ALLIANCE) { m_WyvernStateSouth = WYVERN_NEU_HORDE; @@ -291,7 +134,7 @@ OPvPCapturePoint(pvp), m_capturable(true), m_GuardsAlive(0), m_ControllingFactio m_WyvernStateNorth(0), m_WyvernStateSouth(0), m_WyvernStateEast(0), m_WyvernStateWest(0), m_HalaaState(HALAA_N), m_RespawnTimer(NA_RESPAWN_TIME), m_GuardCheckTimer(NA_GUARD_CHECK_TIME) { - SetCapturePointData(182210, 530, { -1572.57f, 7945.3f, -22.475f, 2.05949f }, { 0.0f, 0.0f, 0.857167f, 0.515038f }); + SetCapturePointData(182210); } bool OutdoorPvPNA::SetupOutdoorPvP() @@ -304,7 +147,6 @@ bool OutdoorPvPNA::SetupOutdoorPvP() // halaa m_obj = new OPvPCapturePointNA(this); - AddCapturePoint(m_obj); return true; } @@ -439,124 +281,77 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO int32 OPvPCapturePointNA::HandleOpenGo(Player* player, GameObject* go) { - int32 retval = OPvPCapturePoint::HandleOpenGo(player, go); - if (retval >= 0) + switch (go->GetEntry()) { - const go_type * gos = nullptr; - if (m_ControllingFaction == ALLIANCE) - gos=AllianceControlGOs; - else if (m_ControllingFaction == HORDE) - gos=HordeControlGOs; - else - return -1; - - int32 del = -1; - int32 del2 = -1; - int32 add = -1; - int32 add2 = -1; - - switch (retval) - { - case NA_DESTROYED_ROOST_S: - del = NA_DESTROYED_ROOST_S; - add = NA_ROOST_S; - add2 = NA_BOMB_WAGON_S; - if (m_ControllingFaction == HORDE) - m_WyvernStateSouth = WYVERN_ALLIANCE; - else - m_WyvernStateSouth = WYVERN_HORDE; + case 182222: + m_WyvernStateSouth = WYVERN_NEU_ALLIANCE; UpdateWyvernRoostWorldState(NA_ROOST_S); break; - case NA_DESTROYED_ROOST_N: - del = NA_DESTROYED_ROOST_N; - add = NA_ROOST_N; - add2 = NA_BOMB_WAGON_N; - if (m_ControllingFaction == HORDE) - m_WyvernStateNorth = WYVERN_ALLIANCE; - else - m_WyvernStateNorth = WYVERN_HORDE; - UpdateWyvernRoostWorldState(NA_ROOST_N); - break; - case NA_DESTROYED_ROOST_W: - del = NA_DESTROYED_ROOST_W; - add = NA_ROOST_W; - add2 = NA_BOMB_WAGON_W; - if (m_ControllingFaction == HORDE) - m_WyvernStateWest = WYVERN_ALLIANCE; - else - m_WyvernStateWest = WYVERN_HORDE; + case 182272: + m_WyvernStateWest = WYVERN_NEU_ALLIANCE; UpdateWyvernRoostWorldState(NA_ROOST_W); break; - case NA_DESTROYED_ROOST_E: - del = NA_DESTROYED_ROOST_E; - add = NA_ROOST_E; - add2 = NA_BOMB_WAGON_E; - if (m_ControllingFaction == HORDE) - m_WyvernStateEast = WYVERN_ALLIANCE; - else - m_WyvernStateEast = WYVERN_HORDE; + case 182273: + m_WyvernStateNorth = WYVERN_NEU_ALLIANCE; + UpdateWyvernRoostWorldState(NA_ROOST_N); + break; + case 182274: + m_WyvernStateEast = WYVERN_NEU_ALLIANCE; UpdateWyvernRoostWorldState(NA_ROOST_E); break; - case NA_BOMB_WAGON_S: - del = NA_BOMB_WAGON_S; - del2 = NA_ROOST_S; - add = NA_DESTROYED_ROOST_S; - if (m_ControllingFaction == HORDE) - m_WyvernStateSouth = WYVERN_NEU_ALLIANCE; - else - m_WyvernStateSouth = WYVERN_NEU_HORDE; + case 182266: + m_WyvernStateSouth = WYVERN_ALLIANCE; UpdateWyvernRoostWorldState(NA_ROOST_S); break; - case NA_BOMB_WAGON_N: - del = NA_BOMB_WAGON_N; - del2 = NA_ROOST_N; - add = NA_DESTROYED_ROOST_N; - if (m_ControllingFaction == HORDE) - m_WyvernStateNorth = WYVERN_NEU_ALLIANCE; - else - m_WyvernStateNorth = WYVERN_NEU_HORDE; - UpdateWyvernRoostWorldState(NA_ROOST_N); - break; - case NA_BOMB_WAGON_W: - del = NA_BOMB_WAGON_W; - del2 = NA_ROOST_W; - add = NA_DESTROYED_ROOST_W; - if (m_ControllingFaction == HORDE) - m_WyvernStateWest = WYVERN_NEU_ALLIANCE; - else - m_WyvernStateWest = WYVERN_NEU_HORDE; + case 182275: + m_WyvernStateWest = WYVERN_ALLIANCE; UpdateWyvernRoostWorldState(NA_ROOST_W); break; - case NA_BOMB_WAGON_E: - del = NA_BOMB_WAGON_E; - del2 = NA_ROOST_E; - add = NA_DESTROYED_ROOST_E; - if (m_ControllingFaction == HORDE) - m_WyvernStateEast = WYVERN_NEU_ALLIANCE; - else - m_WyvernStateEast = WYVERN_NEU_HORDE; + case 182276: + m_WyvernStateNorth = WYVERN_ALLIANCE; + UpdateWyvernRoostWorldState(NA_ROOST_N); + break; + case 182277: + m_WyvernStateEast = WYVERN_ALLIANCE; + UpdateWyvernRoostWorldState(NA_ROOST_E); + break; + case 182305: + m_WyvernStateSouth = WYVERN_NEU_HORDE; + UpdateWyvernRoostWorldState(NA_ROOST_S); + break; + case 182306: + m_WyvernStateWest = WYVERN_NEU_HORDE; + UpdateWyvernRoostWorldState(NA_ROOST_W); + break; + case 182307: + m_WyvernStateNorth = WYVERN_NEU_HORDE; + UpdateWyvernRoostWorldState(NA_ROOST_N); + break; + case 182308: + m_WyvernStateEast = WYVERN_NEU_HORDE; + UpdateWyvernRoostWorldState(NA_ROOST_E); + break; + case 182297: + m_WyvernStateSouth = WYVERN_HORDE; + UpdateWyvernRoostWorldState(NA_ROOST_S); + break; + case 182298: + m_WyvernStateWest = WYVERN_HORDE; + UpdateWyvernRoostWorldState(NA_ROOST_W); + break; + case 182299: + m_WyvernStateNorth = WYVERN_HORDE; + UpdateWyvernRoostWorldState(NA_ROOST_N); + break; + case 182300: + m_WyvernStateEast = WYVERN_HORDE; UpdateWyvernRoostWorldState(NA_ROOST_E); break; default: - return -1; - break; - } - - if (del>-1) - DelObject(del); - - if (del2>-1) - DelObject(del2); - - if (add>-1) - AddObject(add, gos[add].entry, gos[add].map, gos[add].pos, gos[add].rot); - - if (add2>-1) - AddObject(add2, gos[add2].entry, gos[add2].map, gos[add2].pos, gos[add2].rot); - - return retval; + return OPvPCapturePoint::HandleOpenGo(player, go); } - return -1; + + return 0; } bool OPvPCapturePointNA::Update(uint32 diff) @@ -571,30 +366,37 @@ bool OPvPCapturePointNA::Update(uint32 diff) if (m_GuardCheckTimer < diff) { m_GuardCheckTimer = NA_GUARD_CHECK_TIME; - uint32 cnt = GetAliveGuardsCount(); - if (cnt != m_GuardsAlive) + m_GuardsAlive = GetAliveGuardsCount(); + if (m_GuardsAlive == 0) { - m_GuardsAlive = cnt; - if (m_GuardsAlive == 0) - m_capturable = true; - // update the guard count for the players in zone - m_PvP->SetWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive); + m_capturable = true; + m_RespawnTimer = NA_RESPAWN_TIME; } - } else m_GuardCheckTimer -= diff; + // update the guard count for the players in zone + m_PvP->SetWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive); + } + else + m_GuardCheckTimer -= diff; - if (m_capturable || capturable) + if (m_capturable) { if (m_RespawnTimer < diff) { // if the guards have been killed, then the challenger has one hour to take over halaa. // in case they fail to do it, the guards are respawned, and they have to start again. if (m_ControllingFaction) + { FactionTakeOver(m_ControllingFaction); - m_RespawnTimer = NA_RESPAWN_TIME; - } else m_RespawnTimer -= diff; - - return OPvPCapturePoint::Update(diff); + m_PvP->GetMap()->SpawnGroupSpawn(m_ControllingFaction == HORDE ? SPAWN_GROUP_HORDE_GUARDS : SPAWN_GROUP_ALLIANCE_GUARDS, true); + } + } + else + m_RespawnTimer -= diff; } + + if (m_capturable || capturable) + return OPvPCapturePoint::Update(diff); + return false; } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h index ef8d5bd089..0c1557d268 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h @@ -88,18 +88,6 @@ enum ControlGOTypes NA_ROOST_W = 1, NA_ROOST_N = 2, NA_ROOST_E = 3, - - NA_BOMB_WAGON_S = 4, - NA_BOMB_WAGON_W = 5, - NA_BOMB_WAGON_N = 6, - NA_BOMB_WAGON_E = 7, - - NA_DESTROYED_ROOST_S = 8, - NA_DESTROYED_ROOST_W = 9, - NA_DESTROYED_ROOST_N = 10, - NA_DESTROYED_ROOST_E = 11, - - NA_CONTROL_GO_NUM = 12 }; enum FlightSpellsNA @@ -110,31 +98,10 @@ enum FlightSpellsNA NA_SPELL_FLY_EAST = 32081 }; -enum ControlNPCTypes +enum HalaaSpawnGroupIds { - NA_NPC_RESEARCHER = 0, - NA_NPC_QUARTERMASTER, - NA_NPC_BLADE_MERCHANT, - NA_NPC_FOOD_MERCHANT, - NA_NPC_AMMO, - - NA_NPC_GUARD_01, - NA_NPC_GUARD_02, - NA_NPC_GUARD_03, - NA_NPC_GUARD_04, - NA_NPC_GUARD_05, - NA_NPC_GUARD_06, - NA_NPC_GUARD_07, - NA_NPC_GUARD_08, - NA_NPC_GUARD_09, - NA_NPC_GUARD_10, - NA_NPC_GUARD_11, - NA_NPC_GUARD_12, - NA_NPC_GUARD_13, - NA_NPC_GUARD_14, - NA_NPC_GUARD_15, - - NA_CONTROL_NPC_NUM + SPAWN_GROUP_HORDE_GUARDS = 123, + SPAWN_GROUP_ALLIANCE_GUARDS = 124, }; enum WyvernStates @@ -171,19 +138,12 @@ class OPvPCapturePointNA : public OPvPCapturePoint int32 HandleOpenGo(Player* player, GameObject* go) override; - uint32 GetAliveGuardsCount(); + uint32 GetAliveGuardsCount() const; uint32 GetControllingFaction() const; protected: // called when a faction takes control void FactionTakeOver(uint32 team); - - void DeSpawnNPCs(); - void DeSpawnGOs(); - - void SpawnNPCsForTeam(uint32 team); - void SpawnGOsForTeam(uint32 team); - void UpdateWyvernRoostWorldState(uint32 roost); void UpdateHalaaWorldState(); @@ -211,6 +171,8 @@ class OutdoorPvPNA : public OutdoorPvP public: OutdoorPvPNA(); + void OnGameObjectCreate(GameObject* go) override; + bool SetupOutdoorPvP() override; void HandlePlayerEnterZone(Player* player, uint32 zone) override;