From 2b7f29fef2ded8d5859b9d69028143ab84e595dc Mon Sep 17 00:00:00 2001 From: Elron103 Date: Thu, 3 Oct 2013 16:57:25 +0200 Subject: [PATCH 01/56] Core/Tickets: Fix crash in TicketMgr::ResetTickets() --- src/server/game/Tickets/TicketMgr.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index ccfeb35e5b8..4cb7a8ffc18 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -257,9 +257,17 @@ void TicketMgr::Initialize() void TicketMgr::ResetTickets() { - for (GmTicketList::const_iterator itr = _ticketList.begin(); itr != _ticketList.end(); ++itr) + for (GmTicketList::const_iterator itr = _ticketList.begin(); itr != _ticketList.end();) + { if (itr->second->IsClosed()) - sTicketMgr->RemoveTicket(itr->second->GetId()); + { + uint32 ticketId = itr->second->GetId(); + ++itr; + sTicketMgr->RemoveTicket(ticketId); + } + else + ++itr; + } _lastTicketId = 0; From ce55647c415b710c6b440d96c2f26ebbc06c1d6e Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 16 Oct 2013 18:37:29 +0200 Subject: [PATCH 02/56] Core/Transports * Rewritten path generation, now uses splines - timers are a lot more accurate now * Implemented stopping transports * Implemented spawning transports in instances * Implemented spawning gameobjects as transport passengers * Transport passengers are now stored in creature/gameobject table using gameobject_template.data6 from transport's template as map id --- sql/updates/auth/2013_10_16_00_auth_misc.sql | 11 + .../world/2013_10_16_00_world_command.sql | 4 + ...2013_10_16_00_world_creature_transport.sql | 276 +++++ .../world/2013_10_16_00_world_transports.sql | 1 + .../game/AI/SmartScripts/SmartScript.cpp | 13 +- .../game/AI/SmartScripts/SmartScriptMgr.h | 1 + src/server/game/Accounts/RBAC.h | 2 +- .../Battlegrounds/Zones/BattlegroundIC.cpp | 83 +- .../game/Battlegrounds/Zones/BattlegroundIC.h | 2 - src/server/game/DataStores/DBCStores.cpp | 22 + src/server/game/DataStores/DBCStructure.h | 22 + src/server/game/DataStores/DBCfmt.h | 2 + .../game/Entities/Creature/Creature.cpp | 26 +- src/server/game/Entities/Creature/Creature.h | 31 +- .../game/Entities/GameObject/GameObject.cpp | 94 +- .../game/Entities/GameObject/GameObject.h | 25 +- src/server/game/Entities/Object/Object.cpp | 20 +- src/server/game/Entities/Object/Object.h | 48 +- src/server/game/Entities/Player/Player.cpp | 24 +- .../game/Entities/Transport/Transport.cpp | 1011 +++++++---------- .../game/Entities/Transport/Transport.h | 106 +- src/server/game/Entities/Unit/Unit.cpp | 7 +- src/server/game/Entities/Unit/Unit.h | 6 - src/server/game/Globals/ObjectAccessor.cpp | 9 + src/server/game/Globals/ObjectAccessor.h | 2 + src/server/game/Globals/ObjectMgr.h | 5 + .../game/Grids/Notifiers/GridNotifiers.cpp | 27 +- src/server/game/Grids/ObjectGridLoader.cpp | 19 + src/server/game/Grids/ObjectGridLoader.h | 1 + src/server/game/Handlers/MovementHandler.cpp | 23 +- src/server/game/Maps/Map.cpp | 389 ++++++- src/server/game/Maps/Map.h | 39 +- src/server/game/Maps/MapManager.cpp | 8 - src/server/game/Maps/MapManager.h | 9 - src/server/game/Maps/TransportMgr.cpp | 453 ++++++++ src/server/game/Maps/TransportMgr.h | 159 +++ src/server/game/Miscellaneous/SharedDefines.h | 3 +- .../WaypointMovementGenerator.cpp | 40 +- src/server/game/Scripting/MapScripts.cpp | 20 +- src/server/game/Server/WorldSession.cpp | 4 - src/server/game/World/World.cpp | 9 +- src/server/scripts/Commands/cs_debug.cpp | 26 + src/server/scripts/Commands/cs_npc.cpp | 29 +- 43 files changed, 2165 insertions(+), 946 deletions(-) create mode 100644 sql/updates/auth/2013_10_16_00_auth_misc.sql create mode 100644 sql/updates/world/2013_10_16_00_world_command.sql create mode 100644 sql/updates/world/2013_10_16_00_world_creature_transport.sql create mode 100644 sql/updates/world/2013_10_16_00_world_transports.sql create mode 100644 src/server/game/Maps/TransportMgr.cpp create mode 100644 src/server/game/Maps/TransportMgr.h diff --git a/sql/updates/auth/2013_10_16_00_auth_misc.sql b/sql/updates/auth/2013_10_16_00_auth_misc.sql new file mode 100644 index 00000000000..cd7e8b3ae40 --- /dev/null +++ b/sql/updates/auth/2013_10_16_00_auth_misc.sql @@ -0,0 +1,11 @@ +SET @id = 400; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id`=@id; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id, 'debug transport'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId`=@id; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(3, @id); diff --git a/sql/updates/world/2013_10_16_00_world_command.sql b/sql/updates/world/2013_10_16_00_world_command.sql new file mode 100644 index 00000000000..cabaad05920 --- /dev/null +++ b/sql/updates/world/2013_10_16_00_world_command.sql @@ -0,0 +1,4 @@ +DELETE FROM `command` WHERE `name` = 'debug transport'; + +INSERT INTO `command` (`name`, `permission`, `help`) VALUES +('debug transport', 400, 'Syntax: .debug transport [start/stop]\r\n\r\n Allows to stop a transport at its nearest wait point and start movement of a stopped one. Not all transports can be started or stopped.'), diff --git a/sql/updates/world/2013_10_16_00_world_creature_transport.sql b/sql/updates/world/2013_10_16_00_world_creature_transport.sql new file mode 100644 index 00000000000..da91f976f8f --- /dev/null +++ b/sql/updates/world/2013_10_16_00_world_creature_transport.sql @@ -0,0 +1,276 @@ +DROP TABLE IF EXISTS `creature_transport`; + +SET @GUID := 142717; + +DELETE FROM `creature` WHERE `guid` BETWEEN @GUID+0 AND @GUID+269; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@GUID+0, 24456, 582, 1, 1, 29.5627, 0.150031, 16.6147, 3.18002, 120, 0, 0), +(@GUID+1, 24993, 582, 1, 1, 13.1874, 7.71381, 6.07001, 3.09834, 120, 0, 0), +(@GUID+2, 24995, 582, 1, 1, 13.3456, -7.63689, 6.09325, 3.06064, 120, 0, 0), +(@GUID+3, 24996, 582, 1, 1, -0.258897, -7.62734, 4.80823, 5.66423, 120, 0, 0), +(@GUID+4, 24997, 582, 1, 1, -0.416482, 4.39825, 4.79739, 5.10346, 120, 0, 0), +(@GUID+5, 25007, 582, 1, 1, 21.2462, 1.87803, 11.7334, 3.19572, 120, 0, 0), +(@GUID+6, 25050, 586, 1, 1, 29.8662, -0.374622, 16.6206, 3.09382, 120, 0, 0), +(@GUID+7, 25051, 586, 1, 1, 13.4899, -7.71638, 6.11067, 3.11424, 120, 0, 0), +(@GUID+8, 25052, 586, 1, 1, 13.5093, 7.8287, 6.11039, 3.12838, 120, 0, 0), +(@GUID+9, 25054, 586, 1, 1, -21.8863, -2.61623, 4.33103, 6.14509, 120, 0, 0), +(@GUID+10, 25055, 586, 1, 1, -21.4646, 2.87105, 4.31055, 6.26055, 120, 0, 0), +(@GUID+11, 25056, 586, 1, 1, 20.3045, 1.2971, 11.7088, 3.06319, 120, 0, 0), +(@GUID+12, 3681, 587, 1, 1, -38.6477, -0.071194, 6.08577, 0.0698132, 120, 0, 0), +(@GUID+13, 3681, 587, 1, 1, 29.5623, 0.119925, 24.4539, 0.0872665, 120, 0, 0), +(@GUID+14, 25019, 587, 1, 1, 12.805, -7.60196, 6.10507, 2.9147, 120, 0, 0), +(@GUID+15, 25020, 587, 1, 1, 12.9539, 7.33394, 6.13112, 3.28122, 120, 0, 0), +(@GUID+16, 25021, 587, 1, 1, -21.4174, -2.8336, 4.39169, 6.24828, 120, 0, 0), +(@GUID+17, 25022, 587, 1, 1, 20.8633, -1.28591, 11.809, 2.94961, 120, 0, 0), +(@GUID+18, 25023, 587, 1, 1, -36.7691, 0.169367, 5.97592, 3.1765, 120, 0, 0), +(@GUID+19, 25024, 587, 1, 1, -21.6595, 3.22012, 4.40273, 0.139626, 120, 0, 0), +(@GUID+20, 25025, 587, 1, 1, 31.131, -0.454317, 16.7328, 2.96706, 120, 0, 0), +(@GUID+21, 25009, 588, 1, 1, 25.2165, 6.9111, 16.1459, 3.94958, 120, 0, 0), +(@GUID+22, 25010, 588, 1, 1, 13.2057, -2.817, 6.09989, 3.88733, 120, 0, 0), +(@GUID+23, 25011, 588, 1, 1, 19.2178, -8.20848, 12.1102, 4.81518, 120, 0, 0), +(@GUID+24, 25012, 588, 1, 1, 18.1475, -7.41572, 6.09809, 1.88535, 120, 0, 0), +(@GUID+25, 25013, 588, 1, 1, 0.194107, 9.84585, 6.09941, 3.08731, 120, 0, 0), +(@GUID+26, 25014, 588, 1, 1, -0.532552, -8.68575, 6.09815, 3.19019, 120, 0, 0), +(@GUID+27, 25015, 588, 1, 1, 34.0669, 0.119702, 18.287, 3.17832, 120, 0, 0), +(@GUID+28, 25016, 588, 1, 1, -11.1276, 6.60326, 6.09852, 3.05167, 120, 0, 0), +(@GUID+29, 25017, 588, 1, 1, 6.22581, 9.13103, 11.4836, 1.53614, 120, 0, 0), +(@GUID+30, 25018, 588, 1, 1, 10.2474, 2.78122, 11.803, 3.46823, 120, 0, 0), +(@GUID+31, 24924, 589, 1, 1, -1.2076, -9.94886, -23.6749, 0.15708, 120, 0, 0), +(@GUID+32, 24926, 589, 1, 1, -10.3057, -12.1052, -16.9691, 5.92724, 120, 0, 0), +(@GUID+33, 24927, 589, 1, 1, -1.87417, -7.84711, -23.6872, 3.38594, 120, 0, 0), +(@GUID+34, 24929, 589, 1, 1, 9.08301, -4.96411, -23.5921, 1.59406, 120, 0, 0), +(@GUID+35, 24930, 589, 1, 1, -17.0083, -7.87488, -15.1878, 3.14159, 120, 0, 0), +(@GUID+36, 24931, 589, 1, 1, 7.88492, -11.1513, -17.7623, 4.90483, 120, 0, 0), +(@GUID+37, 24934, 589, 1, 1, 9.20919, -3.50392, -23.5121, 3.12414, 120, 0, 0), +(@GUID+38, 24935, 589, 1, 1, 9.55492, -12.0229, -23.5059, 3.12414, 120, 0, 0), +(@GUID+39, 25075, 589, 1, 1, -2.70556, -7.84588, -23.6967, 0.0349066, 120, 0, 0), +(@GUID+40, 25080, 589, 1, 1, -4.91002, -4.74236, -17.6153, 1.6057, 120, 0, 0), +(@GUID+41, 25081, 589, 1, 1, -4.93939, -10.8049, -17.6109, 4.71239, 120, 0, 0), +(@GUID+42, 24934, 590, 1, 1, 9.63549, -3.67192, -23.588, 6.25904, 120, 0, 0), +(@GUID+43, 24935, 590, 1, 1, 9.79838, -11.8681, -23.5848, 6.25118, 120, 0, 0), +(@GUID+44, 25075, 590, 1, 1, -3.59133, -7.84061, -23.7802, 6.1969, 120, 0, 0), +(@GUID+45, 25100, 590, 1, 1, -0.411733, -5.7239, -23.7457, 3.70414, 120, 0, 0), +(@GUID+46, 25101, 590, 1, 1, 7.56919, -4.02088, -17.7543, 4.77071, 120, 0, 0), +(@GUID+47, 25102, 590, 1, 1, -11.0882, -3.47446, -16.7988, 2.00924, 120, 0, 0), +(@GUID+48, 25103, 590, 1, 1, 7.59398, -11.5166, -17.7745, 1.62204, 120, 0, 0), +(@GUID+49, 25104, 590, 1, 1, -0.898213, -7.76559, -23.7548, 3.11116, 120, 0, 0), +(@GUID+50, 25105, 590, 1, 1, -9.54405, -7.94072, -17.2053, 3.17242, 120, 0, 0), +(@GUID+51, 25106, 590, 1, 1, -4.93938, -10.9634, -17.6988, 4.76285, 120, 0, 0), +(@GUID+52, 25107, 590, 1, 1, -4.98215, -4.67863, -17.696, 1.59455, 120, 0, 0), +(@GUID+53, 15214, 591, 1, 1, 7.0053, -7.64791, -16.1126, 2.89725, 120, 0, 0), +(@GUID+54, 24934, 591, 1, 1, -4.5165, -13.1125, -22.5947, 1.53589, 120, 0, 0), +(@GUID+55, 24935, 591, 1, 1, -6.37827, -13.1838, -22.5939, 4.71239, 120, 0, 0), +(@GUID+56, 25070, 591, 1, 1, -9.40787, -8.02398, -17.1578, 3.1765, 120, 0, 0), +(@GUID+57, 25071, 591, 1, 1, 7.24887, -5.48033, -17.6859, 4.81711, 120, 0, 0), +(@GUID+58, 25072, 591, 1, 1, 8.00807, -10.7134, -17.6737, 1.16937, 120, 0, 0), +(@GUID+59, 25074, 591, 1, 1, 5.02375, -7.69781, -17.7888, 5.98648, 120, 0, 0), +(@GUID+60, 25075, 591, 1, 1, -4.16189, -7.68752, -23.6975, 0, 120, 0, 0), +(@GUID+61, 25075, 591, 1, 1, 4.36215, -2.25417, -23.59, 4.71239, 120, 0, 0), +(@GUID+62, 25075, 591, 1, 1, -3.31418, -6.12881, -23.6984, 4.67748, 120, 0, 0), +(@GUID+63, 25075, 591, 1, 1, 4.48208, -13.4008, -23.59, 1.62316, 120, 0, 0), +(@GUID+64, 25075, 591, 1, 1, -3.30777, -9.47416, -23.6959, 1.55334, 120, 0, 0), +(@GUID+65, 25075, 591, 1, 1, 10.7034, -3.50542, -23.49, 3.24631, 120, 0, 0), +(@GUID+66, 25075, 591, 1, 1, -8.87581, -11.4028, -22.5883, 6.24828, 120, 0, 0), +(@GUID+67, 25075, 591, 1, 1, 10.8261, -12.1854, -23.4895, 3.1765, 120, 0, 0), +(@GUID+68, 25075, 591, 1, 1, 11.7436, -10.4452, -24.2189, 6.16101, 120, 0, 0), +(@GUID+69, 25076, 591, 1, 1, -2.72723, -7.77286, -23.6968, 1.55334, 120, 0, 0), +(@GUID+70, 25077, 591, 1, 1, -19.6886, -8.17058, -14.3765, 3.1765, 120, 0, 0), +(@GUID+71, 25079, 591, 1, 1, -5.1094, -11.1466, -17.606, 4.4855, 120, 0, 0), +(@GUID+72, 25083, 591, 1, 1, -5.2125, -4.92702, -17.5966, 1.43117, 120, 0, 0), +(@GUID+73, 25171, 591, 1, 1, -8.70329, -11.4079, -22.5887, 0.0349066, 120, 0, 0), +(@GUID+74, 25078, 593, 1, 1, 34.095, 3.54049, 17.8892, 5.50987, 120, 0, 0), +(@GUID+75, 25082, 593, 1, 1, 15.6121, 1.09944, 6.09764, 2.52482, 120, 0, 0), +(@GUID+76, 25089, 593, 1, 1, 17.8437, -7.84575, 6.09877, 1.64493, 120, 0, 0), +(@GUID+77, 25093, 593, 1, 1, 15.8067, -5.80051, 11.9732, 1.86484, 120, 0, 0), +(@GUID+78, 25094, 593, 1, 1, 34.0585, -0.04162, 18.2865, 3.17017, 120, 0, 0), +(@GUID+79, 25095, 593, 1, 1, 9.39981, 9.17899, 11.5941, 1.52083, 120, 0, 0), +(@GUID+80, 25097, 593, 1, 1, -11.4014, 6.67999, 6.09785, 2.93715, 120, 0, 0), +(@GUID+81, 25111, 593, 1, 1, 6.20811, 0.005208, 14.0554, 2.54813, 120, 0, 0), +(@GUID+82, 24910, 594, 1, 1, 34.6962, -0.27625, 20.9157, 3.44936, 120, 0, 0), +(@GUID+83, 24911, 594, 1, 1, -3.08712, 11.1947, 8.6042, 1.59543, 120, 0, 0), +(@GUID+84, 24911, 594, 1, 1, -3.00336, -1.39497, 8.72655, 0.455023, 120, 0, 0), +(@GUID+85, 24911, 594, 1, 1, 29.079, 6.02911, 19.504, 1.29931, 120, 0, 0), +(@GUID+86, 24911, 594, 1, 1, -11.92, 6.82298, 8.72743, 2.64628, 120, 0, 0), +(@GUID+87, 24911, 594, 1, 1, 19.1465, -9.70741, 14.7601, 4.79434, 120, 0, 0), +(@GUID+88, 24911, 594, 1, 1, 5.55254, 10.6903, 14.0795, 1.41713, 120, 0, 0), +(@GUID+89, 24911, 594, 1, 1, 5.53691, -10.9158, 14.0808, 4.59956, 120, 0, 0), +(@GUID+90, 24911, 594, 1, 1, 19.1591, 9.74589, 14.7625, 1.55457, 120, 0, 0), +(@GUID+91, 24911, 594, 1, 1, -10.8992, 6.36276, 20.589, 1.29146, 120, 0, 0), +(@GUID+92, 24911, 594, 1, 1, -1.47544, 9.97225, 8.72811, 1.47291, 120, 0, 0), +(@GUID+93, 24911, 594, 1, 1, -15.0531, 6.78103, 21.0344, 1.54279, 120, 0, 0), +(@GUID+94, 24911, 594, 1, 1, 0.568386, 10.818, 8.68709, 1.24593, 120, 0, 0), +(@GUID+95, 24911, 594, 1, 1, -16.544, 7.01147, 21.3668, 1.52708, 120, 0, 0), +(@GUID+96, 24992, 594, 1, 1, -13.669, 5.23144, 19.2894, 1.4721, 120, 0, 0), +(@GUID+97, 25026, 594, 1, 1, 5.50506, 5.17797, 1.39596, 1.53711, 120, 0, 0), +(@GUID+98, 25026, 594, 1, 1, -3.34169, -4.92735, 1.39595, 4.70933, 120, 0, 0), +(@GUID+99, 25026, 594, 1, 1, -2.64281, 5.46732, 1.39595, 0.520802, 120, 0, 0), +(@GUID+100, 25026, 594, 1, 1, 6.52141, 0.490373, 1.39693, 6.00288, 120, 0, 0), +(@GUID+101, 25026, 594, 1, 1, 23.0708, -2.7187, 1.39595, 5.37378, 120, 0, 0), +(@GUID+102, 25026, 594, 1, 1, 15.3122, 6.40496, 1.39596, 4.24673, 120, 0, 0), +(@GUID+103, 25026, 594, 1, 1, 24.9381, 4.10155, 1.44058, 1.07922, 120, 0, 0), +(@GUID+104, 25026, 594, 1, 1, 14.4097, -6.40611, 1.39596, 1.86383, 120, 0, 0), +(@GUID+105, 25026, 594, 1, 1, 5.51407, -5.26758, 1.39596, 4.38889, 120, 0, 0), +(@GUID+106, 25075, 610, 1, 1, 4.36215, -2.25417, -23.59, 4.71239, 120, 0, 0), +(@GUID+107, 31704, 610, 1, 1, 5.21605, -2.36685, -17.8223, 1.04622, 120, 0, 0), +(@GUID+108, 31705, 610, 1, 1, 5.07824, -13.1188, -17.8135, 5.24182, 120, 0, 0), +(@GUID+109, 31706, 610, 1, 1, -16.8964, -10.8497, -15.9745, 4.64346, 120, 0, 0), +(@GUID+110, 31708, 610, 1, 1, -2.74581, -1.47146, -17.7765, 4.67712, 120, 0, 0), +(@GUID+111, 31715, 610, 1, 1, -3.54276, -13.8752, -17.684, 1.53946, 120, 0, 0), +(@GUID+112, 31716, 610, 1, 1, 11.5731, -7.65137, -16.6839, 3.20372, 120, 0, 0), +(@GUID+113, 31759, 612, 1, 1, -9.17065, -9.22241, 9.44523, 4.33964, 120, 0, 0), +(@GUID+114, 31760, 612, 1, 1, -24.342, -1.4956, 11.7907, 4.53119, 120, 0, 0), +(@GUID+115, 31761, 612, 1, 1, 17.25, 3.98267, 9.8274, 1.12707, 120, 0, 0), +(@GUID+116, 31762, 612, 1, 1, 34.0835, -0.002845, 19.7971, 3.12414, 120, 0, 0), +(@GUID+117, 31763, 612, 1, 1, 30.1151, -5.08848, 19.3282, 3.08923, 120, 0, 0), +(@GUID+118, 31764, 612, 1, 1, 26.0707, 2.05775, 19.328, 3.00197, 120, 0, 0), +(@GUID+119, 25075, 613, 1, 1, 9.44542, -7.84947, -16.6006, 0.0523599, 120, 0, 0), +(@GUID+120, 31720, 613, 1, 1, -16.5685, -5.08333, -15.9421, 1.98968, 120, 0, 0), +(@GUID+121, 31723, 613, 1, 1, -10.7552, -12.8129, -16.7745, 4.53786, 120, 0, 0), +(@GUID+122, 31724, 613, 1, 1, 5.77627, -2.00469, -17.7218, 1.64061, 120, 0, 0), +(@GUID+123, 31725, 613, 1, 1, 10.6984, -7.82192, -16.6006, 3.28122, 120, 0, 0), +(@GUID+124, 31726, 613, 1, 1, -3.45307, -13.7896, -17.6111, 1.16964, 120, 0, 0), +(@GUID+125, 31727, 613, 1, 1, -3.38308, -1.91393, -17.6198, 5.47991, 120, 0, 0), +(@GUID+126, 31788, 614, 1, 1, 27.5951, -2.34424, 19.3281, 3.22886, 120, 0, 0), +(@GUID+127, 31789, 614, 1, 1, 28.0998, 5.9939, 19.328, 3.64774, 120, 0, 0), +(@GUID+128, 31790, 614, 1, 1, 34.2236, 0.067648, 19.7627, 3.07178, 120, 0, 0), +(@GUID+129, 31791, 614, 1, 1, 0.919363, 8.75723, 9.43661, 1.25664, 120, 0, 0), +(@GUID+130, 31792, 614, 1, 1, -4.76611, 0.0998535, 9.36669, 4.83456, 120, 0, 0), +(@GUID+131, 31793, 614, 1, 1, 17.146, -3.92139, 9.81305, 5.49708, 120, 0, 0), +(@GUID+132, 29795, 622, 1, 1, 45.6197, 7.29317, 30.0955, 4.67642, 120, 0, 0), +(@GUID+133, 30752, 622, 1, 1, 15.4321, 28.6642, 9.92277, 1.54012, 120, 0, 0), +(@GUID+134, 30752, 622, 1, 1, 2.01988, 28.7211, 9.33565, 1.58332, 120, 0, 0), +(@GUID+135, 30752, 622, 1, 1, -11.241, 28.5576, 9.91826, 1.5519, 120, 0, 0), +(@GUID+136, 30752, 622, 1, 1, 8.25547, -21.6199, 34.8875, 1.73515, 120, 0, 0), +(@GUID+137, 30752, 622, 1, 1, 7.30473, 24.2619, 34.9491, 4.43536, 120, 0, 0), +(@GUID+138, 30753, 622, 1, 1, -26.8391, -10.402, 35.5991, 1.29366, 120, 0, 0), +(@GUID+139, 30753, 622, 1, 1, 2.15579, 17.0338, 9.16353, 1.54405, 120, 0, 0), +(@GUID+140, 30753, 622, 1, 1, -7.63407, 0.007234, 86.0904, 6.2728, 120, 0, 0), +(@GUID+141, 30753, 622, 1, 1, 46.382, 7.89944, 10.4129, 3.96271, 120, 0, 0), +(@GUID+142, 30753, 622, 1, 1, 45.981, -6.55312, 10.3636, 2.23091, 120, 0, 0), +(@GUID+143, 30753, 622, 1, 1, 15.254, -0.009458, 86.0904, 3.14299, 120, 0, 0), +(@GUID+144, 30753, 622, 1, 1, -34.939, -11.6484, 11.4697, 5.50858, 120, 0, 0), +(@GUID+145, 30753, 622, 1, 1, -34.785, 11.9312, 11.4869, 0.836243, 120, 0, 0), +(@GUID+146, 30753, 622, 1, 1, -26.9812, 10.5208, 35.5936, 4.74156, 120, 0, 0), +(@GUID+147, 30753, 622, 1, 1, 1.98831, -18.0873, 9.16057, 4.66993, 120, 0, 0), +(@GUID+148, 30754, 622, 1, 1, -19.0109, 27.0177, 89.9667, 6.22411, 120, 0, 0), +(@GUID+149, 30754, 622, 1, 1, -54.639, -15.3254, 34.3972, 3.83128, 120, 0, 0), +(@GUID+150, 30754, 622, 1, 1, -54.7182, 15.5861, 34.3897, 2.50086, 120, 0, 0), +(@GUID+151, 30754, 622, 1, 1, -18.9215, -26.8371, 89.9664, 0.087792, 120, 0, 0), +(@GUID+152, 30755, 622, 1, 1, -3.46042, 28.0231, 34.2784, 4.66548, 120, 0, 0), +(@GUID+153, 30755, 622, 1, 1, 7.21494, -6.31021, 34.4191, 3.11118, 120, 0, 0), +(@GUID+154, 30755, 622, 1, 1, 24.5852, 6.86575, 7.06382, 3.11055, 120, 0, 0), +(@GUID+155, 30755, 622, 1, 1, 8.85995, 18.8224, 8.7027, 4.69035, 120, 0, 0), +(@GUID+156, 30755, 622, 1, 1, 24.3302, -6.97827, 7.08356, 3.34184, 120, 0, 0), +(@GUID+157, 30755, 622, 1, 1, -4.43012, 18.742, 8.62646, 4.66286, 120, 0, 0), +(@GUID+158, 30755, 622, 1, 1, -5.59682, -28.2501, 34.1226, 1.55058, 120, 0, 0), +(@GUID+159, 30755, 622, 1, 1, -4.46811, -18.5567, 8.62604, 1.53698, 120, 0, 0), +(@GUID+160, 30755, 622, 1, 1, 29.8693, -29.5825, 89.7663, 3.05267, 120, 0, 0), +(@GUID+161, 30755, 622, 1, 1, 8.83021, -4.6978, 84.7137, 2.34582, 120, 0, 0), +(@GUID+162, 30755, 622, 1, 1, 37.6428, -9.00797, 30.0954, 0.004917, 120, 0, 0), +(@GUID+163, 30755, 622, 1, 1, -26.188, -6.1712, 9.33333, 3.14217, 120, 0, 0), +(@GUID+164, 30755, 622, 1, 1, 9.06884, -18.7113, 8.70787, 1.56054, 120, 0, 0), +(@GUID+165, 30755, 622, 1, 1, 8.67689, 4.88796, 84.7137, 3.90012, 120, 0, 0), +(@GUID+166, 30755, 622, 1, 1, 7.49121, 6.05275, 34.4239, 3.16615, 120, 0, 0), +(@GUID+167, 30755, 622, 1, 1, 37.6401, 8.9586, 30.0954, 0.012771, 120, 0, 0), +(@GUID+168, 30755, 622, 1, 1, -26.1511, 6.90449, 9.405, 3.12647, 120, 0, 0), +(@GUID+169, 30755, 622, 1, 1, 29.4588, 29.8761, 89.7684, 3.15321, 120, 0, 0), +(@GUID+170, 30824, 622, 1, 1, 55.5028, 0.080449, 30.5268, 3.15669, 120, 0, 0), +(@GUID+171, 30825, 622, 1, 1, 38.4745, 0.038424, 10.1868, 3.15788, 120, 0, 0), +(@GUID+172, 30826, 622, 1, 1, 55.0542, -3.74557, 30.0955, 2.77577, 120, 0, 0), +(@GUID+173, 30827, 622, 1, 1, 45.884, -8.99976, 30.0955, 1.52942, 120, 0, 0), +(@GUID+174, 30866, 622, 1, 1, -36.528, 23.9373, 33.9184, 1.89617, 120, 0, 0), +(@GUID+175, 30866, 622, 1, 1, 15.9225, 26.2539, 35.4586, 1.60085, 120, 0, 0), +(@GUID+176, 30866, 622, 1, 1, -36.1494, -23.2606, 33.9568, 4.2232, 120, 0, 0), +(@GUID+177, 30866, 622, 1, 1, 17.7216, -26.2695, 35.5686, 5.06367, 120, 0, 0), +(@GUID+178, 31243, 622, 1, 1, -11.2408, 33.2155, 10.5949, 1.58668, 120, 0, 0), +(@GUID+179, 31243, 622, 1, 1, 1.99373, 33.0756, 10.0105, 1.53853, 120, 0, 0), +(@GUID+180, 31243, 622, 1, 1, 15.239, 32.5832, 10.5826, 1.52441, 120, 0, 0), +(@GUID+181, 31243, 622, 1, 1, 15.2483, -33.3678, 10.5837, 4.72649, 120, 0, 0), +(@GUID+182, 31243, 622, 1, 1, 1.91814, -32.9286, 10.0097, 4.6891, 120, 0, 0), +(@GUID+183, 31243, 622, 1, 1, -11.0915, -32.8872, 10.5819, 4.68507, 120, 0, 0), +(@GUID+184, 31261, 622, 1, 1, -24.084, -22.2178, 24.3778, 1.43738, 120, 0, 0), +(@GUID+185, 32301, 622, 1, 1, -3.37706, 0.007499, 34.0151, 4.65055, 120, 0, 0), +(@GUID+186, 29799, 623, 1, 1, 34.5332, -38.5618, 25.0323, 3.15234, 120, 0, 0), +(@GUID+187, 30344, 623, 1, 1, 43.6738, 0.121325, 25.1341, 3.10227, 120, 0, 0), +(@GUID+188, 30345, 623, 1, 1, -48.0654, -0.185737, -4.98898, 3.11436, 120, 0, 0), +(@GUID+189, 30346, 623, 1, 1, 25.0778, -0.047958, 9.59893, 3.13291, 120, 0, 0), +(@GUID+190, 30347, 623, 1, 1, 28.6378, -7.55243, 23.2873, 0.157027, 120, 0, 0), +(@GUID+191, 30350, 623, 1, 1, 16.4056, -2.2827, 20.4235, 3.11453, 120, 0, 0), +(@GUID+192, 30351, 623, 1, 1, 2.42088, -23.0053, 22.5625, 0.046087, 120, 0, 0), +(@GUID+193, 30351, 623, 1, 1, 1.29162, -9.37181, 20.458, 3.17295, 120, 0, 0), +(@GUID+194, 30351, 623, 1, 1, 0.773476, 22.5004, 22.5503, 3.2248, 120, 0, 0), +(@GUID+195, 30351, 623, 1, 1, 39.976, 44.3876, 25.0331, 3.16019, 120, 0, 0), +(@GUID+196, 30351, 623, 1, 1, -36.4471, 6.81573, 20.4485, 4.73177, 120, 0, 0), +(@GUID+197, 30351, 623, 1, 1, -36.1811, -6.90251, 20.4501, 1.6483, 120, 0, 0), +(@GUID+198, 30351, 623, 1, 1, 1.44228, 9.63379, 20.4566, 3.15096, 120, 0, 0), +(@GUID+199, 30352, 623, 1, 1, 48.8649, -8.72834, 40.0818, 3.12642, 120, 0, 0), +(@GUID+200, 30352, 623, 1, 1, -17.337, 3.98796, 20.7652, 3.1541, 120, 0, 0), +(@GUID+201, 30352, 623, 1, 1, 16.5684, 2.46962, 20.4252, 3.1329, 120, 0, 0), +(@GUID+202, 30352, 623, 1, 1, 43.7981, 13.0009, -2.07474, 4.61776, 120, 0, 0), +(@GUID+203, 30352, 623, 1, 1, -67.4841, 3.50927, 9.60209, 5.83577, 120, 0, 0), +(@GUID+204, 30352, 623, 1, 1, -17.2379, -3.94242, 20.7667, 3.1541, 120, 0, 0), +(@GUID+205, 30352, 623, 1, 1, -67.1723, -3.73439, 9.60211, 0.318344, 120, 0, 0), +(@GUID+206, 30352, 623, 1, 1, 36.4909, 6.11523, 9.60666, 3.01117, 120, 0, 0), +(@GUID+207, 30352, 623, 1, 1, -49.1048, 0.044213, 20.6694, 0.029782, 120, 0, 0), +(@GUID+208, 30352, 623, 1, 1, 36.436, -6.06257, 9.60687, 3.09364, 120, 0, 0), +(@GUID+209, 30352, 623, 1, 1, 48.8813, 8.78624, 40.0817, 3.1426, 120, 0, 0), +(@GUID+210, 30352, 623, 1, 1, -60.5592, 0.055898, -5.27774, 0.004184, 120, 0, 0), +(@GUID+211, 30380, 623, 1, 1, -6.13984, 21.6533, 9.991, 1.48436, 120, 0, 0), +(@GUID+212, 30380, 623, 1, 1, 3.99105, -21.2539, 9.67311, 4.9577, 120, 0, 0), +(@GUID+213, 30380, 623, 1, 1, -41.0289, 25.7685, 1.20385, 1.49696, 120, 0, 0), +(@GUID+214, 30380, 623, 1, 1, -17.4619, 22.2092, 9.60018, 1.58254, 120, 0, 0), +(@GUID+215, 30380, 623, 1, 1, -8.79147, 30.0334, -0.157799, 0.471494, 120, 0, 0), +(@GUID+216, 30380, 623, 1, 1, -26.5726, 29.6008, -0.15773, 0.856857, 120, 0, 0), +(@GUID+217, 30380, 623, 1, 1, 45.5093, 6.67955, 30.1788, 5.44543, 120, 0, 0), +(@GUID+218, 30380, 623, 1, 1, 1.92073, 28.7498, 0.101361, 0.232732, 120, 0, 0), +(@GUID+219, 30380, 623, 1, 1, -37.3836, 19.9617, 9.59771, 1.87549, 120, 0, 0), +(@GUID+220, 30380, 623, 1, 1, -37.1975, -20.2765, 9.65711, 4.32467, 120, 0, 0), +(@GUID+221, 30380, 623, 1, 1, -7.54172, -30.0747, 0.101348, 4.17752, 120, 0, 0), +(@GUID+222, 30380, 623, 1, 1, -30.1731, -21.9358, 9.59686, 4.72914, 120, 0, 0), +(@GUID+223, 30380, 623, 1, 1, 3.45962, -28.1289, 0.101388, 4.29376, 120, 0, 0), +(@GUID+224, 30380, 623, 1, 1, -18.0212, -22.0926, 9.60068, 4.66788, 120, 0, 0), +(@GUID+225, 30380, 623, 1, 1, -24.7068, -29.9771, 0.101334, 3.66623, 120, 0, 0), +(@GUID+226, 30380, 623, 1, 1, 3.92454, 20.827, 9.67354, 1.30372, 120, 0, 0), +(@GUID+227, 30380, 623, 1, 1, -6.33308, -21.7722, 9.99575, 4.85167, 120, 0, 0), +(@GUID+228, 30380, 623, 1, 1, -39.6946, -26.8419, 0.82802, 2.93659, 120, 0, 0), +(@GUID+229, 30392, 623, 1, 1, 28.7566, 7.6217, 23.2872, 6.08285, 120, 0, 0), +(@GUID+230, 30394, 623, 1, 1, -14.1505, 23.0373, -5.24869, 0.027745, 120, 0, 0), +(@GUID+231, 30394, 623, 1, 1, -11.7295, -24.7904, 9.58663, 1.63703, 120, 0, 0), +(@GUID+232, 30394, 623, 1, 1, -11.9688, 25.5424, 9.58513, 4.66945, 120, 0, 0), +(@GUID+233, 30394, 623, 1, 1, -57.9337, 6.01148, 23.5029, 1.54855, 120, 0, 0), +(@GUID+234, 30394, 623, 1, 1, -14.3898, -23.2398, -5.25039, 6.16013, 120, 0, 0), +(@GUID+235, 30394, 623, 1, 1, -48.1449, -3.10366, -5.21617, 3.11436, 120, 0, 0), +(@GUID+236, 30833, 623, 1, 1, 6.18656, -0.008156, 20.5756, 6.28313, 120, 0, 0), +(@GUID+237, 30867, 623, 1, 1, -11.0475, -22.7053, 22.5096, 4.51265, 120, 0, 0), +(@GUID+238, 30867, 623, 1, 1, -32.9158, -22.1469, 22.5861, 4.59982, 120, 0, 0), +(@GUID+239, 30867, 623, 1, 1, -10.0824, 23.2226, 22.5129, 1.54405, 120, 0, 0), +(@GUID+240, 30867, 623, 1, 1, 36.8757, 45.226, 25.0331, 2.16509, 120, 0, 0), +(@GUID+241, 30867, 623, 1, 1, -33.4747, 22.2096, 22.5895, 1.56211, 120, 0, 0), +(@GUID+242, 30867, 623, 1, 1, 36.9277, -44.9241, 25.0318, 4.11052, 120, 0, 0), +(@GUID+243, 31259, 623, 1, 1, 16.8761, -17.8635, 20.4597, 2.02864, 120, 0, 0), +(@GUID+244, 32193, 623, 1, 1, -21.6978, 0.127903, -18.1897, 3.12341, 120, 0, 0), +(@GUID+245, 32302, 623, 1, 1, 54.6648, -6.9431, 40.0874, 3.0302, 120, 0, 0), +(@GUID+246, 32566, 623, 1, 1, 34.6465, -41.7087, 25.0325, 3.20731, 120, 0, 0), +(@GUID+247, 32777, 623, 1, 1, 42.9517, 4.20903, 25.1088, 3.47298, 120, 0, 0), +(@GUID+248, 34929, 641, 1, 1, -31.0354, 25.1286, 21.6921, 1.60659, 120, 0, 0), +(@GUID+249, 34929, 641, 1, 1, -21.4492, 25.8326, 21.6309, 1.60659, 120, 0, 0), +(@GUID+250, 34929, 641, 1, 1, -12.4734, 26.321, 21.6237, 1.60659, 120, 0, 0), +(@GUID+251, 34929, 641, 1, 1, -2.81125, 26.2077, 21.6566, 1.60659, 120, 0, 0), +(@GUID+252, 34929, 641, 1, 1, -41.7122, 23.1838, 22.5605, 1.60659, 120, 0, 0), +(@GUID+253, 34935, 642, 1, 1, -21.401, -31.343, 34.173, 4.62057, 120, 0, 0), +(@GUID+254, 34935, 642, 1, 1, -12.1064, -31.9697, 34.3807, 4.62057, 120, 0, 0), +(@GUID+255, 34935, 642, 1, 1, -2.4877, -31.9885, 34.8384, 4.62057, 120, 0, 0), +(@GUID+256, 34935, 642, 1, 1, 10.2664, -32.0713, 35.7357, 4.62057, 120, 0, 0), +(@GUID+257, 34935, 642, 1, 1, 19.4636, -30.794, 36.2254, 4.83106, 120, 0, 0), +(@GUID+258, 3084, 647, 1, 1, -5.20674, -11.3432, -17.6101, 4.71239, 120, 0, 0), +(@GUID+259, 3084, 647, 1, 1, -4.83257, -4.31233, -17.6322, 1.62316, 120, 0, 0), +(@GUID+260, 24934, 647, 1, 1, 10.321, -3.57351, -23.4941, 3.1765, 120, 0, 0), +(@GUID+261, 24935, 647, 1, 1, 10.2871, -12.0272, -23.4942, 3.10669, 120, 0, 0), +(@GUID+262, 25075, 647, 1, 1, -3.3964, -7.90545, -23.6967, 6.24828, 120, 0, 0), +(@GUID+263, 34715, 647, 1, 1, -9.18316, -7.77573, -17.217, 3.28122, 120, 0, 0), +(@GUID+264, 34717, 647, 1, 1, -13.6702, -12.4018, -15.9876, 4.59022, 120, 0, 0), +(@GUID+265, 34718, 647, 1, 1, 13.7451, -5.12846, -24.0452, 0.139626, 120, 0, 0), +(@GUID+266, 34719, 647, 1, 1, 7.62309, -5.02532, -17.6702, 4.92183, 120, 0, 0), +(@GUID+267, 34721, 647, 1, 1, -0.919197, -6.16422, -23.6729, 3.57792, 120, 0, 0), +(@GUID+268, 34723, 647, 1, 1, -17.4797, -5.60698, -14.9281, 3.22886, 120, 0, 0), +(@GUID+269, 34730, 647, 1, 1, -2.16687, -7.85422, -23.6919, 3.38594, 120, 0, 0); diff --git a/sql/updates/world/2013_10_16_00_world_transports.sql b/sql/updates/world/2013_10_16_00_world_transports.sql new file mode 100644 index 00000000000..1173d381abc --- /dev/null +++ b/sql/updates/world/2013_10_16_00_world_transports.sql @@ -0,0 +1 @@ +ALTER TABLE `transports` DROP `period`; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index d228a441893..f01d0d1ab03 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -34,6 +34,7 @@ #include "SmartScript.h" #include "SpellMgr.h" #include "Vehicle.h" +#include "MoveSplineInit.h" #include "GameEventMgr.h" class TrinityStringTextBuilder @@ -1353,7 +1354,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; if (e.GetTargetType() == SMART_TARGET_SELF) - me->SetFacingTo(me->GetHomePosition().GetOrientation()); + me->SetFacingTo((me->HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) && me->GetTransGUID() ? + me->GetTransportHomePosition() : me->GetHomePosition()).GetOrientation()); else if (e.GetTargetType() == SMART_TARGET_POSITION) me->SetFacingTo(e.target.o); else if (ObjectList* targets = GetTargets(e, unit)) @@ -1406,7 +1408,14 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } if (!target) - me->GetMotionMaster()->MovePoint(e.action.MoveToPos.pointId, e.target.x, e.target.y, e.target.z); + { + G3D::Vector3 dest(e.target.x, e.target.y, e.target.z); + if (e.action.MoveToPos.transport) + if (TransportBase* trans = me->GetDirectTransport()) + trans->CalculatePassengerPosition(dest.x, dest.y, dest.z); + + me->GetMotionMaster()->MovePoint(e.action.MoveToPos.pointId, dest.x, dest.y, dest.z); + } else me->GetMotionMaster()->MovePoint(e.action.MoveToPos.pointId, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()); break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 56fa7ed1275..f12f2ab69c0 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -907,6 +907,7 @@ struct SmartAction struct { uint32 pointId; + uint32 transport; } MoveToPos; struct diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index e12e6835cb8..bcc4122ea5b 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -303,7 +303,7 @@ enum RBACPermissions RBAC_PERM_COMMAND_GOBJECT_SET_STATE = 397, RBAC_PERM_COMMAND_GOBJECT_TARGET = 398, RBAC_PERM_COMMAND_GOBJECT_TURN = 399, - // 400 - reuse + RBAC_PERM_COMMAND_DEBUG_TRANSPORT = 400, RBAC_PERM_COMMAND_GUILD = 401, RBAC_PERM_COMMAND_GUILD_CREATE = 402, RBAC_PERM_COMMAND_GUILD_DELETE = 403, diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index 29d4e4124c0..7cb4c07ba1e 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -71,22 +71,6 @@ void BattlegroundIC::HandlePlayerResurrect(Player* player) player->CastSpell(player, SPELL_OIL_REFINERY, true); } -void BattlegroundIC::SendTransportInit(Player* player) -{ - if (!gunshipAlliance || !gunshipHorde) - return; - - UpdateData transData; - - gunshipAlliance->BuildCreateUpdateBlockForPlayer(&transData, player); - gunshipHorde->BuildCreateUpdateBlockForPlayer(&transData, player); - - WorldPacket packet; - - transData.BuildPacket(&packet); - player->SendDirectMessage(&packet); -} - void BattlegroundIC::DoAction(uint32 action, uint64 var) { if (action != ACTION_TELEPORT_PLAYER_TO_TRANSPORT) @@ -300,8 +284,6 @@ void BattlegroundIC::AddPlayer(Player* player) if (nodePoint[NODE_TYPE_REFINERY].nodeState == (player->GetTeamId() == TEAM_ALLIANCE ? NODE_STATE_CONTROLLED_A : NODE_STATE_CONTROLLED_H)) player->CastSpell(player, SPELL_OIL_REFINERY, true); - - SendTransportInit(player); } void BattlegroundIC::RemovePlayer(Player* player, uint64 /*guid*/, uint32 /*team*/) @@ -409,8 +391,8 @@ bool BattlegroundIC::SetupBattleground() return false; } - gunshipHorde = CreateTransport(GO_HORDE_GUNSHIP, TRANSPORT_PERIOD_TIME); - gunshipAlliance = CreateTransport(GO_ALLIANCE_GUNSHIP, TRANSPORT_PERIOD_TIME); + gunshipHorde = sTransportMgr->CreateTransport(GO_HORDE_GUNSHIP, 0, GetBgMap()); + gunshipAlliance = sTransportMgr->CreateTransport(GO_ALLIANCE_GUNSHIP, 0, GetBgMap()); if (!gunshipAlliance || !gunshipHorde) { @@ -420,10 +402,8 @@ bool BattlegroundIC::SetupBattleground() //Send transport init packet to all player in map for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) - { if (Player* player = ObjectAccessor::FindPlayer(itr->first)) - SendTransportInit(player); - } + GetBgMap()->SendInitTransports(player); // setting correct factions for Keep Cannons for (uint8 i = BG_IC_NPC_KEEP_CANNON_1; i < BG_IC_NPC_KEEP_CANNON_12; ++i) @@ -616,8 +596,8 @@ void BattlegroundIC::HandleContestedNodes(ICNodePoint* nodePoint) { if (nodePoint->nodeType == NODE_TYPE_HANGAR) { - if (gunshipAlliance && gunshipHorde) - (nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->BuildStopMovePacket(GetBgMap()); + if (gunshipAlliance && gunshipHorde) + (nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->EnableMovement(false); for (uint8 u = BG_IC_GO_HANGAR_TELEPORTER_1; u < BG_IC_GO_HANGAR_TELEPORTER_3; ++u) DelObject(u); @@ -656,8 +636,8 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) //TC_LOG_ERROR(LOG_FILTER_BATTLEGROUND, "BG_IC_GO_HANGAR_BANNER CAPTURED Faction: %u", nodePoint->faction); - (nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->BuildStartMovePacket(GetBgMap()); - (nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->BuildStopMovePacket(GetBgMap()); + (nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->EnableMovement(true); + (nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->EnableMovement(false); // we should spawn teleporters break; case BG_IC_GO_QUARRY_BANNER: @@ -865,7 +845,6 @@ void BattlegroundIC::DestroyGate(Player* player, GameObject* go) void BattlegroundIC::EventPlayerDamagedGO(Player* /*player*/, GameObject* /*go*/, uint32 /*eventType*/) { - } WorldSafeLocsEntry const* BattlegroundIC::GetClosestGraveYard(Player* player) @@ -907,52 +886,6 @@ WorldSafeLocsEntry const* BattlegroundIC::GetClosestGraveYard(Player* player) return good_entry; } -Transport* BattlegroundIC::CreateTransport(uint32 goEntry, uint32 period) -{ - Transport* t = new Transport(period, 0); - - GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(goEntry); - - if (!goinfo) - { - TC_LOG_ERROR(LOG_FILTER_SQL, "Transport ID: %u will not be loaded, gameobject_template missing", goEntry); - delete t; - return NULL; - } - - std::set mapsUsed; - - if (!t->GenerateWaypoints(goinfo->moTransport.taxiPathId, mapsUsed)) - // skip transports with empty waypoints list - { - TC_LOG_ERROR(LOG_FILTER_SQL, "Transport (path id %u) path size = 0. Transport ignored, check DBC files or transport GO data0 field.", goinfo->moTransport.taxiPathId); - delete t; - return NULL; - } - - uint32 mapid = t->m_WayPoints[0].mapid; - - float x = t->m_WayPoints[0].x; - float y = t->m_WayPoints[0].y; - float z = t->m_WayPoints[0].z; - float o = 1; - - // creates the Gameobject - if (!t->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_MO_TRANSPORT), goEntry, mapid, x, y, z, o, 255, 0)) - { - delete t; - return NULL; - } - - //If we someday decide to use the grid to track transports, here: - t->SetMap(GetBgMap()); - - for (uint8 i = 0; i < 5; ++i) - t->AddNPCPassenger(0, (goEntry == GO_HORDE_GUNSHIP ? NPC_HORDE_GUNSHIP_CANNON : NPC_ALLIANCE_GUNSHIP_CANNON), (goEntry == GO_HORDE_GUNSHIP ? hordeGunshipPassengers[i].GetPositionX() : allianceGunshipPassengers[i].GetPositionX()), (goEntry == GO_HORDE_GUNSHIP ? hordeGunshipPassengers[i].GetPositionY() : allianceGunshipPassengers[i].GetPositionY()), (goEntry == GO_HORDE_GUNSHIP ? hordeGunshipPassengers[i].GetPositionZ() : allianceGunshipPassengers[i].GetPositionZ()), (goEntry == GO_HORDE_GUNSHIP ? hordeGunshipPassengers[i].GetOrientation() : allianceGunshipPassengers[i].GetOrientation())); - - return t; -} - bool BattlegroundIC::IsAllNodesControlledByTeam(uint32 team) const { uint32 count = 0; @@ -983,4 +916,4 @@ bool BattlegroundIC::IsSpellAllowed(uint32 spellId, Player const* player) const } return true; -} \ No newline at end of file +} diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h index 6fdc97f25c5..acb5046444c 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h @@ -956,8 +956,6 @@ class BattlegroundIC : public Battleground void UpdateNodeWorldState(ICNodePoint* nodePoint); void HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture); void HandleContestedNodes(ICNodePoint* nodePoint); - Transport* CreateTransport(uint32 goEntry, uint32 period); - void SendTransportInit(Player* player); }; #endif diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 71fbf1c62b2..95592cd87d9 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -20,6 +20,7 @@ #include "Log.h" #include "SharedDefines.h" #include "SpellMgr.h" +#include "TransportMgr.h" #include "DBCfmt.h" #include "Timer.h" #include "ObjectDefines.h" @@ -190,6 +191,8 @@ static DBCStorage sTaxiPathNodeStore(TaxiPathNodeEntryfmt); DBCStorage sTeamContributionPointsStore(TeamContributionPointsfmt); DBCStorage sTotemCategoryStore(TotemCategoryEntryfmt); +DBCStorage sTransportAnimationStore(TransportAnimationfmt); +DBCStorage sTransportRotationStore(TransportRotationfmt); DBCStorage sVehicleStore(VehicleEntryfmt); DBCStorage sVehicleSeatStore(VehicleSeatEntryfmt); DBCStorage sWMOAreaTableStore(WMOAreaTableEntryfmt); @@ -604,6 +607,25 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales, bad_dbc_files, sTeamContributionPointsStore, dbcPath, "TeamContributionPoints.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sTotemCategoryStore, dbcPath, "TotemCategory.dbc"); + LoadDBC(availableDbcLocales, bad_dbc_files, sTransportAnimationStore, dbcPath, "TransportAnimation.dbc"); + for (uint32 i = 0; i < sTransportAnimationStore.GetNumRows(); ++i) + { + TransportAnimationEntry const* anim = sTransportAnimationStore.LookupEntry(i); + if (!anim) + continue; + + sTransportMgr->AddPathNodeToTransport(anim->TransportEntry, anim->TimeSeg, anim); + } + + LoadDBC(availableDbcLocales, bad_dbc_files, sTransportRotationStore, dbcPath, "TransportRotation.dbc"); + for (uint32 i = 0; i < sTransportRotationStore.GetNumRows(); ++i) + { + TransportRotationEntry const* rot = sTransportRotationStore.LookupEntry(i); + if (!rot) + continue; + + sTransportMgr->AddPathRotationToTransport(rot->TransportEntry, rot->TimeSeg, rot); + } LoadDBC(availableDbcLocales, bad_dbc_files, sVehicleStore, dbcPath, "Vehicle.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sVehicleSeatStore, dbcPath, "VehicleSeat.dbc"); diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index e12f70baa41..aff54f75a40 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1875,6 +1875,28 @@ struct TotemCategoryEntry uint32 categoryMask; // 19 (compatibility mask for same type: different for totems, compatible from high to low for rods) }; +struct TransportAnimationEntry +{ + //uint32 Id; + uint32 TransportEntry; + uint32 TimeSeg; + float X; + float Y; + float Z; + //uint32 MovementId; +}; + +struct TransportRotationEntry +{ + //uint32 Id; + uint32 TransportEntry; + uint32 TimeSeg; + float X; + float Y; + float Z; + float W; +}; + #define MAX_VEHICLE_SEATS 8 struct VehicleEntry diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index a81eec51338..5326ab70fa3 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -120,6 +120,8 @@ char const TaxiPathEntryfmt[] = "niii"; char const TaxiPathNodeEntryfmt[] = "diiifffiiii"; char const TeamContributionPointsfmt[] = "df"; char const TotemCategoryEntryfmt[] = "nxxxxxxxxxxxxxxxxxii"; +char const TransportAnimationfmt[] = "diifffx"; +char const TransportRotationfmt[] = "diiffff"; char const VehicleEntryfmt[] = "niffffiiiiiiiifffffffffffffffssssfifiixx"; char const VehicleSeatEntryfmt[] = "niiffffffffffiiiiiifffffffiiifffiiiiiiiffiiiiixxxxxxxxxxxx"; char const WMOAreaTableEntryfmt[] = "niiixxxxxiixxxxxxxxxxxxxxxxx"; diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 4efd78d5932..f68d87de2f4 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -52,7 +52,7 @@ #include "World.h" #include "WorldPacket.h" -// apply implementation of the singletons +#include "Transport.h" TrainerSpell const* TrainerSpellData::Find(uint32 spell_id) const { @@ -141,7 +141,7 @@ bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) return true; } -Creature::Creature(bool isWorldObject): Unit(isWorldObject), MapCreature(), +Creature::Creature(bool isWorldObject): Unit(isWorldObject), MapObject(), lootForPickPocketed(false), lootForBody(false), m_groupLootTimer(0), lootingGroupLowGUID(0), m_PlayerDamageReq(0), m_lootRecipient(0), m_lootRecipientGroup(0), m_corpseRemoveTime(0), m_respawnTime(0), m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_reactState(REACT_AGGRESSIVE), @@ -934,7 +934,8 @@ void Creature::SaveToDB() return; } - SaveToDB(GetMapId(), data->spawnMask, GetPhaseMask()); + uint32 mapId = GetTransport() ? GetTransport()->GetGOInfo()->moTransport.mapID : GetMapId(); + SaveToDB(mapId, data->spawnMask, GetPhaseMask()); } void Creature::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask) @@ -973,10 +974,21 @@ void Creature::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask) data.phaseMask = phaseMask; data.displayid = displayId; data.equipmentId = GetCurrentEquipmentId(); - data.posX = GetPositionX(); - data.posY = GetPositionY(); - data.posZ = GetPositionZMinusOffset(); - data.orientation = GetOrientation(); + if (!GetTransport()) + { + data.posX = GetPositionX(); + data.posY = GetPositionY(); + data.posZ = GetPositionZMinusOffset(); + data.orientation = GetOrientation(); + } + else + { + data.posX = GetTransOffsetX(); + data.posY = GetTransOffsetY(); + data.posZ = GetTransOffsetZ(); + data.orientation = GetTransOffsetO(); + } + data.spawntimesecs = m_respawnDelay; // prevent add data integrity problems data.spawndist = GetDefaultMovementType() == IDLE_MOTION_TYPE ? 0.0f : m_respawnradius; diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 3a07d9c101b..a555469da63 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -415,36 +415,7 @@ typedef std::map CreatureSpellCooldowns; #define MAX_VENDOR_ITEMS 150 // Limitation in 3.x.x item count in SMSG_LIST_INVENTORY -enum CreatureCellMoveState -{ - CREATURE_CELL_MOVE_NONE, // not in move list - CREATURE_CELL_MOVE_ACTIVE, // in move list - CREATURE_CELL_MOVE_INACTIVE // in move list but should not move -}; - -class MapCreature -{ - friend class Map; // map for moving creatures - friend class ObjectGridLoader; // grid loader for loading creatures - -protected: - MapCreature() : _moveState(CREATURE_CELL_MOVE_NONE) {} - -private: - Cell _currentCell; - Cell const& GetCurrentCell() const { return _currentCell; } - void SetCurrentCell(Cell const& cell) { _currentCell = cell; } - - CreatureCellMoveState _moveState; - Position _newPosition; - void SetNewCellPosition(float x, float y, float z, float o) - { - _moveState = CREATURE_CELL_MOVE_ACTIVE; - _newPosition.Relocate(x, y, z, o); - } -}; - -class Creature : public Unit, public GridObject, public MapCreature +class Creature : public Unit, public GridObject, public MapObject { public: diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index eef416b339d..9829b6019de 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -16,6 +16,7 @@ * with this program. If not, see . */ +#include #include "GameObjectAI.h" #include "Battleground.h" #include "CellImpl.h" @@ -32,8 +33,10 @@ #include "SpellMgr.h" #include "UpdateFieldFlags.h" #include "World.h" +#include "Transport.h" -GameObject::GameObject(): WorldObject(false), m_model(NULL), m_goValue(), m_AI(NULL) +GameObject::GameObject() : WorldObject(false), MapObject(), + m_model(NULL), m_goValue(), m_AI(NULL) { m_objectType |= TYPEMASK_GAMEOBJECT; m_objectTypeId = TYPEID_GAMEOBJECT; @@ -100,6 +103,9 @@ void GameObject::CleanupsBeforeDelete(bool /*finalCleanup*/) if (m_uint32Values) // field array can be not exist if GameOBject not loaded RemoveFromOwner(); + + if (GetTransport() && !ToTransport()) + GetTransport()->RemovePassenger(this); } void GameObject::RemoveFromOwner() @@ -169,6 +175,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa SetMap(map); Relocate(x, y, z, ang); + m_stationaryPosition.Relocate(x, y, z, ang); if (!IsPositionValid()) { TC_LOG_ERROR(LOG_FILTER_GENERAL, "Gameobject (GUID: %u Entry: %u) not created. Suggested coordinates isn't valid (X: %f Y: %f)", guidlow, name_id, x, y); @@ -192,6 +199,9 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa return false; } + if (goinfo->type == GAMEOBJECT_TYPE_TRANSPORT) + m_updateFlag = (m_updateFlag | UPDATEFLAG_TRANSPORT) & ~UPDATEFLAG_POSITION; + Object::_Create(guidlow, goinfo->entry, HIGHGUID_GAMEOBJECT); m_goInfo = goinfo; @@ -238,9 +248,11 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa break; case GAMEOBJECT_TYPE_TRANSPORT: SetUInt32Value(GAMEOBJECT_LEVEL, goinfo->transport.pause); - if (goinfo->transport.startOpen) - SetGoState(GO_STATE_ACTIVE); + SetGoState(goinfo->transport.startOpen ? GO_STATE_ACTIVE : GO_STATE_READY); SetGoAnimProgress(animprogress); + m_goValue.Transport.PathProgress = 0; + m_goValue.Transport.AnimationInfo = sTransportMgr->GetTransportAnimInfo(goinfo->entry); + m_goValue.Transport.CurrentSeg = 0; break; case GAMEOBJECT_TYPE_FISHINGNODE: SetGoAnimProgress(0); @@ -274,18 +286,10 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa void GameObject::Update(uint32 diff) { - if (!AI()) - { - if (!AIM_Initialize()) - TC_LOG_ERROR(LOG_FILTER_GENERAL, "Could not initialize GameObjectAI"); - } else + if (AI()) AI()->UpdateAI(diff); - - if (IS_MO_TRANSPORT_GUID(GetGUID())) - { - //((Transport*)this)->Update(p_time); - return; - } + else if (!AIM_Initialize()) + TC_LOG_ERROR(LOG_FILTER_GENERAL, "Could not initialize GameObjectAI"); switch (m_lootState) { @@ -308,6 +312,38 @@ void GameObject::Update(uint32 diff) m_lootState = GO_READY; break; } + /* TODO: Fix movement in unloaded grid - currently GO will just disappear + case GAMEOBJECT_TYPE_TRANSPORT: + { + if (!m_goValue.Transport.AnimationInfo) + break; + + if (GetGoState() == GO_STATE_READY) + { + m_goValue.Transport.PathProgress += diff; + uint32 timer = m_goValue.Transport.PathProgress % m_goValue.Transport.AnimationInfo->TotalTime; + TransportAnimationEntry const* node = m_goValue.Transport.AnimationInfo->GetAnimNode(timer); + if (node && m_goValue.Transport.CurrentSeg != node->TimeSeg) + { + m_goValue.Transport.CurrentSeg = node->TimeSeg; + + G3D::Quat rotation = m_goValue.Transport.AnimationInfo->GetAnimRotation(timer); + G3D::Vector3 pos = rotation.toRotationMatrix() + * G3D::Matrix3::fromEulerAnglesZYX(GetOrientation(), 0.0f, 0.0f) + * G3D::Vector3(node->X, node->Y, node->Z); + + pos += G3D::Vector3(GetStationaryX(), GetStationaryY(), GetStationaryZ()); + + G3D::Vector3 src(GetPositionX(), GetPositionY(), GetPositionZ()); + + sLog->outInfo(LOG_FILTER_GENERAL, "Src: %s Dest: %s", src.toString().c_str(), pos.toString().c_str()); + + GetMap()->GameObjectRelocation(this, pos.x, pos.y, pos.z, GetOrientation()); + } + } + break; + } + */ case GAMEOBJECT_TYPE_FISHINGNODE: { // fishing code (bobber ready) @@ -1182,10 +1218,12 @@ void GameObject::Use(Unit* user) if (itr->second) { if (Player* ChairUser = ObjectAccessor::FindPlayer(itr->second)) + { if (ChairUser->IsSitState() && ChairUser->getStandState() != UNIT_STAND_STATE_SIT && ChairUser->GetExactDist2d(x_i, y_i) < 0.1f) continue; // This seat is already occupied by ChairUser. NOTE: Not sure if the ChairUser->getStandState() != UNIT_STAND_STATE_SIT check is required. else itr->second = 0; // This seat is unoccupied. + } else itr->second = 0; // The seat may of had an occupant, but they're offline. } @@ -2102,6 +2140,7 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t if (index == GAMEOBJECT_DYNAMIC) { uint16 dynFlags = 0; + int16 pathProgress = -1; switch (GetGoType()) { case GAMEOBJECT_TYPE_CHEST: @@ -2115,12 +2154,13 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t if (ActivateToQuest(target)) dynFlags |= GO_DYNFLAG_LO_SPARKLE; break; - default: + case GAMEOBJECT_TYPE_MO_TRANSPORT: + pathProgress = int16(float(m_goValue.Transport.PathProgress) / float(GetUInt32Value(GAMEOBJECT_LEVEL)) * 65535.0f); break; } fieldBuffer << uint16(dynFlags); - fieldBuffer << uint16(-1); + fieldBuffer << int16(pathProgress); } else if (index == GAMEOBJECT_FLAGS) { @@ -2140,3 +2180,25 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t updateMask.AppendToPacket(data); data->append(fieldBuffer); } + +void GameObject::GetRespawnPosition(float &x, float &y, float &z, float* ori /* = NULL*/) const +{ + if (m_DBTableGuid) + { + if (GameObjectData const* data = sObjectMgr->GetGOData(GetDBTableGUIDLow())) + { + x = data->posX; + y = data->posY; + z = data->posZ; + if (ori) + *ori = data->orientation; + return; + } + } + + x = GetPositionX(); + y = GetPositionY(); + z = GetPositionZ(); + if (ori) + *ori = GetOrientation(); +} diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 3bddac81ee9..de92257893b 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -28,6 +28,7 @@ class GameObjectAI; class Group; +class Transport; #define MAX_GAMEOBJECT_QUEST_ITEMS 6 @@ -229,6 +230,7 @@ struct GameObjectTemplate uint32 transportPhysics; //5 uint32 mapID; //6 uint32 worldState1; //7 + uint32 canBeStopped; //8 } moTransport; //16 GAMEOBJECT_TYPE_DUELFLAG - empty //17 GAMEOBJECT_TYPE_FISHINGNODE - empty @@ -539,9 +541,17 @@ struct GameObjectTemplate typedef UNORDERED_MAP GameObjectTemplateContainer; class OPvPCapturePoint; +struct TransportAnimation; union GameObjectValue { + //11 GAMEOBJECT_TYPE_TRANSPORT + struct + { + uint32 PathProgress; + TransportAnimation const* AnimationInfo; + uint32 CurrentSeg; + } Transport; //25 GAMEOBJECT_TYPE_FISHINGHOLE struct { @@ -617,7 +627,7 @@ class GameObjectModel; // 5 sec for bobber catch #define FISHING_BOBBER_READY_TIME 5 -class GameObject : public WorldObject, public GridObject +class GameObject : public WorldObject, public GridObject, public MapObject { public: explicit GameObject(); @@ -811,8 +821,19 @@ class GameObject : public WorldObject, public GridObject uint32 GetDisplayId() const { return GetUInt32Value(GAMEOBJECT_DISPLAYID); } GameObjectModel* m_model; + void GetRespawnPosition(float &x, float &y, float &z, float* ori = NULL) const; + + Transport* ToTransport() { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT) return reinterpret_cast(this); else return NULL; } + Transport const* ToTransport() const { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT) return reinterpret_cast(this); else return NULL; } + + float GetStationaryX() const { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionX(); return GetPositionX(); } + float GetStationaryY() const { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionY(); return GetPositionY(); } + float GetStationaryZ() const { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionZ(); return GetPositionZ(); } + float GetStationaryO() const { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetOrientation(); return GetOrientation(); } + protected: bool AIM_Initialize(); + void UpdateModel(); // updates model in case displayId were changed uint32 m_spellId; time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()), uint32 m_respawnDelayTime; // (secs) if 0 then current GO state no dependent from timer @@ -835,6 +856,7 @@ class GameObject : public WorldObject, public GridObject GameObjectValue m_goValue; uint64 m_rotation; + Position m_stationaryPosition; uint64 m_lootRecipient; uint32 m_lootRecipientGroup; @@ -842,7 +864,6 @@ class GameObject : public WorldObject, public GridObject private: void RemoveFromOwner(); void SwitchDoorOrButton(bool activate, bool alternative = false); - void UpdateModel(); // updates model in case displayId were changed //! Object distance/size - overridden from Object::_IsWithinDist. Needs to take in account proper GO size. bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/) const diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 9d77e144c0b..2eb0fd65149 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -219,9 +219,6 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c case GAMEOBJECT_TYPE_FLAGDROP: updateType = UPDATETYPE_CREATE_OBJECT2; break; - case GAMEOBJECT_TYPE_TRANSPORT: - flags |= UPDATEFLAG_TRANSPORT; - break; default: break; } @@ -414,13 +411,10 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const // 0x40 if (flags & UPDATEFLAG_STATIONARY_POSITION) { - *data << object->GetPositionX(); - *data << object->GetPositionY(); - if (isType(TYPEMASK_UNIT)) - *data << unit->GetPositionZMinusOffset(); - else - *data << object->GetPositionZ(); - *data << object->GetOrientation(); + *data << object->GetStationaryX(); + *data << object->GetStationaryY(); + *data << object->GetStationaryZ(); + *data << object->GetStationaryO(); } } } @@ -473,7 +467,11 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const // 0x2 if (flags & UPDATEFLAG_TRANSPORT) { - *data << uint32(getMSTime()); // Unknown - getMSTime is wrong. + GameObject const* go = ToGameObject(); + if (go && go->IsTransport()) + *data << uint32(go->GetGOValue()->Transport.PathProgress); + else + *data << uint32(getMSTime()); } // 0x80 diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 66b3a737e0c..3e010fa98a2 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -523,6 +523,35 @@ class FlaggedValuesArray32 T_FLAGS m_flags; }; +enum MapObjectCellMoveState +{ + MAP_OBJECT_CELL_MOVE_NONE, //not in move list + MAP_OBJECT_CELL_MOVE_ACTIVE, //in move list + MAP_OBJECT_CELL_MOVE_INACTIVE, //in move list but should not move +}; + +class MapObject +{ + friend class Map; //map for moving creatures + friend class ObjectGridLoader; //grid loader for loading creatures + + protected: + MapObject() : _moveState(MAP_OBJECT_CELL_MOVE_NONE) {} + + private: + Cell _currentCell; + Cell const& GetCurrentCell() const { return _currentCell; } + void SetCurrentCell(Cell const& cell) { _currentCell = cell; } + + MapObjectCellMoveState _moveState; + Position _newPosition; + void SetNewCellPosition(float x, float y, float z, float o) + { + _moveState = MAP_OBJECT_CELL_MOVE_ACTIVE; + _newPosition.Relocate(x, y, z, o); + } +}; + class WorldObject : public Object, public WorldLocation { protected: @@ -700,16 +729,22 @@ class WorldObject : public Object, public WorldLocation // Transports Transport* GetTransport() const { return m_transport; } - virtual float GetTransOffsetX() const { return 0; } - virtual float GetTransOffsetY() const { return 0; } - virtual float GetTransOffsetZ() const { return 0; } - virtual float GetTransOffsetO() const { return 0; } - virtual uint32 GetTransTime() const { return 0; } - virtual int8 GetTransSeat() const { return -1; } + float GetTransOffsetX() const { return m_movementInfo.transport.pos.GetPositionX(); } + float GetTransOffsetY() const { return m_movementInfo.transport.pos.GetPositionY(); } + float GetTransOffsetZ() const { return m_movementInfo.transport.pos.GetPositionZ(); } + float GetTransOffsetO() const { return m_movementInfo.transport.pos.GetOrientation(); } + uint32 GetTransTime() const { return m_movementInfo.transport.time; } + int8 GetTransSeat() const { return m_movementInfo.transport.seat; } virtual uint64 GetTransGUID() const; void SetTransport(Transport* t) { m_transport = t; } MovementInfo m_movementInfo; + + virtual float GetStationaryX() const { return GetPositionX(); } + virtual float GetStationaryY() const { return GetPositionY(); } + virtual float GetStationaryZ() const { return GetPositionZ(); } + virtual float GetStationaryO() const { return GetOrientation(); } + protected: std::string m_name; bool m_isActive; @@ -739,7 +774,6 @@ class WorldObject : public Object, public WorldLocation uint16 m_notifyflags; uint16 m_executed_notifies; - virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) const; bool CanNeverSee(WorldObject const* obj) const; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 9ada25b1c81..40dbe6c2fe7 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17182,17 +17182,15 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder) } else { - for (MapManager::TransportSet::iterator iter = sMapMgr->m_Transports.begin(); iter != sMapMgr->m_Transports.end(); ++iter) + if (GameObject* go = HashMapHolder::Find(m_movementInfo.transport.guid)) + m_transport = go->ToTransport(); + + if (m_transport) { - if ((*iter)->GetGUIDLow() == transGUID) - { - m_transport = *iter; - m_transport->AddPassenger(this); - mapId = (m_transport->GetMapId()); - break; - } + m_transport->AddPassenger(this); + mapId = m_transport->GetMapId(); } - if (!m_transport) + else { TC_LOG_ERROR(LOG_FILTER_PLAYER, "Player (guidlow %d) have problems with transport guid (%u). Teleport to bind location.", guid, transGUID); @@ -22165,7 +22163,7 @@ inline void UpdateVisibilityOf_helper(std::set& s64, T* target, std::set template<> inline void UpdateVisibilityOf_helper(std::set& s64, GameObject* target, std::set& /*v*/) { - // Don't update only GAMEOBJECT_TYPE_TRANSPORT (or all transports and destructible buildings?) + // @HACK: This is to prevent objects like deeprun tram from disappearing when player moves far from its spawn point while riding it if ((target->GetGOInfo()->type != GAMEOBJECT_TYPE_TRANSPORT)) s64.insert(target->GetGUID()); } @@ -22217,9 +22215,6 @@ void Player::UpdateVisibilityOf(WorldObject* target) { if (CanSeeOrDetect(target, false, true)) { - //if (target->isType(TYPEMASK_UNIT) && ((Unit*)target)->m_Vehicle) - // UpdateVisibilityOf(((Unit*)target)->m_Vehicle); - target->SendUpdateToPlayer(this); m_clientGUIDs.insert(target->GetGUID()); @@ -22308,9 +22303,6 @@ void Player::UpdateVisibilityOf(T* target, UpdateData& data, std::set& vi { if (CanSeeOrDetect(target, false, true)) { - //if (target->isType(TYPEMASK_UNIT) && ((Unit*)target)->m_Vehicle) - // UpdateVisibilityOf(((Unit*)target)->m_Vehicle, data, visibleNow); - target->BuildCreateUpdateBlockForPlayer(&data, this); UpdateVisibilityOf_helper(m_clientGUIDs, target, visibleNow); diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 23197b40ad0..e6ca93307e7 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -26,166 +26,23 @@ #include "DBCStores.h" #include "World.h" #include "GameObjectAI.h" +#include "Vehicle.h" +#include "MapReference.h" #include "Player.h" -void MapManager::LoadTransports() +Transport::Transport() : GameObject(), + _transportInfo(NULL), _isMoving(true), _pendingStop(false) { - uint32 oldMSTime = getMSTime(); - - QueryResult result = WorldDatabase.Query("SELECT guid, entry, name, period, ScriptName FROM transports"); - - if (!result) - { - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 transports. DB table `transports` is empty!"); - return; - } - - uint32 count = 0; - - do - { - - Field* fields = result->Fetch(); - uint32 lowguid = fields[0].GetUInt32(); - uint32 entry = fields[1].GetUInt32(); - std::string name = fields[2].GetString(); - uint32 period = fields[3].GetUInt32(); - uint32 scriptId = sObjectMgr->GetScriptId(fields[4].GetCString()); - - GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(entry); - - if (!goinfo) - { - TC_LOG_ERROR(LOG_FILTER_SQL, "Transport ID:%u, Name: %s, will not be loaded, gameobject_template missing", entry, name.c_str()); - continue; - } - - if (goinfo->type != GAMEOBJECT_TYPE_MO_TRANSPORT) - { - TC_LOG_ERROR(LOG_FILTER_SQL, "Transport ID:%u, Name: %s, will not be loaded, gameobject_template type wrong", entry, name.c_str()); - continue; - } - - // TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, "Loading transport %d between %s, %s", entry, name.c_str(), goinfo->name); - - std::set mapsUsed; - - Transport* t = new Transport(period, scriptId); - if (!t->GenerateWaypoints(goinfo->moTransport.taxiPathId, mapsUsed)) - // skip transports with empty waypoints list - { - TC_LOG_ERROR(LOG_FILTER_SQL, "Transport (path id %u) path size = 0. Transport ignored, check DBC files or transport GO data0 field.", goinfo->moTransport.taxiPathId); - delete t; - continue; - } - - float x = t->m_WayPoints[0].x; - float y = t->m_WayPoints[0].y; - float z = t->m_WayPoints[0].z; - uint32 mapid = t->m_WayPoints[0].mapid; - float o = 1.0f; - - // creates the Gameobject - if (!t->Create(lowguid, entry, mapid, x, y, z, o, 255, 0)) - { - delete t; - continue; - } - - m_Transports.insert(t); - - for (std::set::const_iterator i = mapsUsed.begin(); i != mapsUsed.end(); ++i) - m_TransportsByMap[*i].insert(t); - - //If we someday decide to use the grid to track transports, here: - t->SetMap(sMapMgr->CreateBaseMap(mapid)); - t->AddToWorld(); - - ++count; - } - while (result->NextRow()); - - // check transport data DB integrity - result = WorldDatabase.Query("SELECT gameobject.guid, gameobject.id, transports.name FROM gameobject, transports WHERE gameobject.id = transports.entry"); - if (result) // wrong data found - { - do - { - Field* fields = result->Fetch(); - - uint32 guid = fields[0].GetUInt32(); - uint32 entry = fields[1].GetUInt32(); - std::string name = fields[2].GetString(); - TC_LOG_ERROR(LOG_FILTER_SQL, "Transport %u '%s' have record (GUID: %u) in `gameobject`. Transports must not have any records in `gameobject` or its behavior will be unpredictable/bugged.", entry, name.c_str(), guid); - } - while (result->NextRow()); - } - - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u transports in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); -} - -void MapManager::LoadTransportNPCs() -{ - uint32 oldMSTime = getMSTime(); - - // 0 1 2 3 4 5 6 7 - QueryResult result = WorldDatabase.Query("SELECT guid, npc_entry, transport_entry, TransOffsetX, TransOffsetY, TransOffsetZ, TransOffsetO, emote FROM creature_transport"); - - if (!result) - { - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 transport NPCs. DB table `creature_transport` is empty!"); - return; - } - - uint32 count = 0; - - do - { - Field* fields = result->Fetch(); - uint32 guid = fields[0].GetInt32(); - uint32 entry = fields[1].GetInt32(); - uint32 transportEntry = fields[2].GetInt32(); - float tX = fields[3].GetFloat(); - float tY = fields[4].GetFloat(); - float tZ = fields[5].GetFloat(); - float tO = fields[6].GetFloat(); - uint32 anim = fields[7].GetInt32(); - - for (MapManager::TransportSet::iterator itr = m_Transports.begin(); itr != m_Transports.end(); ++itr) - { - if ((*itr)->GetEntry() == transportEntry) - { - (*itr)->AddNPCPassenger(guid, entry, tX, tY, tZ, tO, anim); - break; - } - } - - ++count; - } - while (result->NextRow()); - - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u transport npcs in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); -} - -Transport::Transport(uint32 period, uint32 script) : GameObject(), m_pathTime(0), m_timer(0), -currenttguid(0), m_period(period), ScriptId(script), m_nextNodeTime(0) -{ - m_updateFlag = (UPDATEFLAG_TRANSPORT | UPDATEFLAG_LOWGUID | UPDATEFLAG_STATIONARY_POSITION | UPDATEFLAG_ROTATION); + m_updateFlag = UPDATEFLAG_TRANSPORT | UPDATEFLAG_LOWGUID | UPDATEFLAG_STATIONARY_POSITION | UPDATEFLAG_ROTATION; } Transport::~Transport() { - for (CreatureSet::iterator itr = m_NPCPassengerSet.begin(); itr != m_NPCPassengerSet.end(); ++itr) - { - (*itr)->SetTransport(NULL); - GetMap()->AddObjectToRemoveList(*itr); - } } -bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress, uint32 dynflags) +bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress) { Relocate(x, y, z, ang); - // instance id and phaseMask isn't set to values different from std. if (!IsPositionValid()) { @@ -206,498 +63,221 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa m_goInfo = goinfo; - SetObjectScale(goinfo->size); + TransportTemplate const* tInfo = sTransportMgr->GetTransportTemplate(entry); + if (!tInfo) + { + TC_LOG_ERROR(LOG_FILTER_SQL, "Transport %u (name: %s) will not be created, missing `transport_template` entry.", entry, goinfo->name); + return false; + } + _transportInfo = tInfo; + + // initialize waypoints + _nextFrame = tInfo->keyFrames.begin(); + _currentFrame = _nextFrame++; + _triggeredArrivalEvent = false; + _triggeredDepartureEvent = false; + + m_goValue.Transport.PathProgress = 0; + SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size); SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction); SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags); - SetUInt32Value(GAMEOBJECT_LEVEL, m_period); + SetPeriod(tInfo->pathTime); SetEntry(goinfo->entry); - SetDisplayId(goinfo->displayId); - SetGoState(GO_STATE_READY); - SetGoType(GameobjectTypes(goinfo->type)); - + _pendingStop = goinfo->moTransport.canBeStopped != 0; + SetGoType(GAMEOBJECT_TYPE_MO_TRANSPORT); SetGoAnimProgress(animprogress); - if (dynflags) - SetUInt32Value(GAMEOBJECT_DYNAMIC, MAKE_PAIR32(0, dynflags)); - SetName(goinfo->name); - - SetZoneScript(); - + UpdateRotationFields(0.0f, 1.0f); return true; } -struct keyFrame +void Transport::Update(uint32 diff) { - explicit keyFrame(TaxiPathNodeEntry const& _node) : node(&_node), - distSinceStop(-1.0f), distUntilStop(-1.0f), distFromPrev(-1.0f), tFrom(0.0f), tTo(0.0f) - { - } + uint32 const positionUpdateDelay = 200; - TaxiPathNodeEntry const* node; + if (AI()) + AI()->UpdateAI(diff); + else if (!AIM_Initialize()) + TC_LOG_ERROR(LOG_FILTER_TRANSPORTS, "Could not initialize GameObjectAI for Transport"); - float distSinceStop; - float distUntilStop; - float distFromPrev; - float tFrom, tTo; -}; - -bool Transport::GenerateWaypoints(uint32 pathid, std::set &mapids) -{ - if (pathid >= sTaxiPathNodesByPath.size()) - return false; - - TaxiPathNodeList const& path = sTaxiPathNodesByPath[pathid]; - - std::vector keyFrames; - int mapChange = 0; - mapids.clear(); - for (size_t i = 1; i < path.size() - 1; ++i) - { - if (mapChange == 0) - { - TaxiPathNodeEntry const& node_i = path[i]; - if (node_i.mapid == path[i+1].mapid) - { - keyFrame k(node_i); - keyFrames.push_back(k); - mapids.insert(k.node->mapid); - } - else - { - mapChange = 1; - } - } - else - { - --mapChange; - } - } - - int lastStop = -1; - int firstStop = -1; - - // first cell is arrived at by teleportation :S - keyFrames[0].distFromPrev = 0; - if (keyFrames[0].node->actionFlag == 2) - { - lastStop = 0; - } - - // find the rest of the distances between key points - for (size_t i = 1; i < keyFrames.size(); ++i) - { - if ((keyFrames[i].node->actionFlag == 1) || (keyFrames[i].node->mapid != keyFrames[i-1].node->mapid)) - { - keyFrames[i].distFromPrev = 0; - } - else - { - keyFrames[i].distFromPrev = - sqrt(pow(keyFrames[i].node->x - keyFrames[i - 1].node->x, 2) + - pow(keyFrames[i].node->y - keyFrames[i - 1].node->y, 2) + - pow(keyFrames[i].node->z - keyFrames[i - 1].node->z, 2)); - } - if (keyFrames[i].node->actionFlag == 2) - { - // remember first stop frame - if (firstStop == -1) - firstStop = i; - lastStop = i; - } - } - - float tmpDist = 0; - for (size_t i = 0; i < keyFrames.size(); ++i) - { - int j = (i + lastStop) % keyFrames.size(); - if (keyFrames[j].node->actionFlag == 2) - tmpDist = 0; - else - tmpDist += keyFrames[j].distFromPrev; - keyFrames[j].distSinceStop = tmpDist; - } - - for (int i = int(keyFrames.size()) - 1; i >= 0; i--) - { - int j = (i + (firstStop+1)) % keyFrames.size(); - tmpDist += keyFrames[(j + 1) % keyFrames.size()].distFromPrev; - keyFrames[j].distUntilStop = tmpDist; - if (keyFrames[j].node->actionFlag == 2) - tmpDist = 0; - } - - for (size_t i = 0; i < keyFrames.size(); ++i) - { - if (keyFrames[i].distSinceStop < (30 * 30 * 0.5f)) - keyFrames[i].tFrom = sqrt(2 * keyFrames[i].distSinceStop); - else - keyFrames[i].tFrom = ((keyFrames[i].distSinceStop - (30 * 30 * 0.5f)) / 30) + 30; - - if (keyFrames[i].distUntilStop < (30 * 30 * 0.5f)) - keyFrames[i].tTo = sqrt(2 * keyFrames[i].distUntilStop); - else - keyFrames[i].tTo = ((keyFrames[i].distUntilStop - (30 * 30 * 0.5f)) / 30) + 30; - - keyFrames[i].tFrom *= 1000; - keyFrames[i].tTo *= 1000; - } - - // for (int i = 0; i < keyFrames.size(); ++i) { - // TC_LOG_INFO(LOG_FILTER_TRANSPORTS, "%f, %f, %f, %f, %f, %f, %f", keyFrames[i].x, keyFrames[i].y, keyFrames[i].distUntilStop, keyFrames[i].distSinceStop, keyFrames[i].distFromPrev, keyFrames[i].tFrom, keyFrames[i].tTo); - // } - - // Now we're completely set up; we can move along the length of each waypoint at 100 ms intervals - // speed = max(30, t) (remember x = 0.5s^2, and when accelerating, a = 1 unit/s^2 - int t = 0; - bool teleport = false; - if (keyFrames[keyFrames.size() - 1].node->mapid != keyFrames[0].node->mapid) - teleport = true; - - m_WayPoints[0] = WayPoint(keyFrames[0].node->mapid, keyFrames[0].node->x, keyFrames[0].node->y, keyFrames[0].node->z, teleport, 0, - keyFrames[0].node->arrivalEventID, keyFrames[0].node->departureEventID); - - t += keyFrames[0].node->delay * 1000; - - uint32 cM = keyFrames[0].node->mapid; - for (size_t i = 0; i < keyFrames.size() - 1; ++i) - { - float d = 0; - float tFrom = keyFrames[i].tFrom; - float tTo = keyFrames[i].tTo; - - // keep the generation of all these points; we use only a few now, but may need the others later - if (((d < keyFrames[i + 1].distFromPrev) && (tTo > 0))) - { - while ((d < keyFrames[i + 1].distFromPrev) && (tTo > 0)) - { - tFrom += 100; - tTo -= 100; - - if (d > 0) - { - float newX = keyFrames[i].node->x + (keyFrames[i + 1].node->x - keyFrames[i].node->x) * d / keyFrames[i + 1].distFromPrev; - float newY = keyFrames[i].node->y + (keyFrames[i + 1].node->y - keyFrames[i].node->y) * d / keyFrames[i + 1].distFromPrev; - float newZ = keyFrames[i].node->z + (keyFrames[i + 1].node->z - keyFrames[i].node->z) * d / keyFrames[i + 1].distFromPrev; - - teleport = false; - if (keyFrames[i].node->mapid != cM) - { - teleport = true; - cM = keyFrames[i].node->mapid; - } - - // TC_LOG_INFO(LOG_FILTER_TRANSPORTS, "T: %d, D: %f, x: %f, y: %f, z: %f", t, d, newX, newY, newZ); - if (teleport) - m_WayPoints[t] = WayPoint(keyFrames[i].node->mapid, newX, newY, newZ, teleport, 0); - } - - if (tFrom < tTo) // caught in tFrom dock's "gravitational pull" - { - if (tFrom <= 30000) - { - d = 0.5f * (tFrom / 1000) * (tFrom / 1000); - } - else - { - d = 0.5f * 30 * 30 + 30 * ((tFrom - 30000) / 1000); - } - d = d - keyFrames[i].distSinceStop; - } - else - { - if (tTo <= 30000) - { - d = 0.5f * (tTo / 1000) * (tTo / 1000); - } - else - { - d = 0.5f * 30 * 30 + 30 * ((tTo - 30000) / 1000); - } - d = keyFrames[i].distUntilStop - d; - } - t += 100; - } - t -= 100; - } - - if (keyFrames[i + 1].tFrom > keyFrames[i + 1].tTo) - t += 100 - ((long)keyFrames[i + 1].tTo % 100); - else - t += (long)keyFrames[i + 1].tTo % 100; - - teleport = false; - if ((keyFrames[i + 1].node->actionFlag == 1) || (keyFrames[i + 1].node->mapid != keyFrames[i].node->mapid)) - { - teleport = true; - cM = keyFrames[i + 1].node->mapid; - } - - m_WayPoints[t] = WayPoint(keyFrames[i + 1].node->mapid, keyFrames[i + 1].node->x, keyFrames[i + 1].node->y, keyFrames[i + 1].node->z, teleport, - 0, keyFrames[i + 1].node->arrivalEventID, keyFrames[i + 1].node->departureEventID); - // TC_LOG_INFO(LOG_FILTER_TRANSPORTS, "T: %d, x: %f, y: %f, z: %f, t:%d", t, pos.x, pos.y, pos.z, teleport); - - t += keyFrames[i + 1].node->delay * 1000; - } - - uint32 timer = t; - - // TC_LOG_INFO(LOG_FILTER_TRANSPORTS, " Generated %lu waypoints, total time %u.", (unsigned long)m_WayPoints.size(), timer); - - m_curr = m_WayPoints.begin(); - m_next = GetNextWayPoint(); - m_pathTime = timer; - - m_nextNodeTime = m_curr->first; - - return true; -} - -Transport::WayPointMap::const_iterator Transport::GetNextWayPoint() -{ - WayPointMap::const_iterator iter = m_curr; - ++iter; - if (iter == m_WayPoints.end()) - iter = m_WayPoints.begin(); - return iter; -} - -void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z) -{ - Map const* oldMap = GetMap(); - Relocate(x, y, z); - - for (PlayerSet::const_iterator itr = m_passengers.begin(); itr != m_passengers.end();) - { - Player* player = *itr; - ++itr; - - if (player->isDead() && !player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) - player->ResurrectPlayer(1.0f); - - player->TeleportTo(newMapid, x, y, z, GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT); - } - - //we need to create and save new Map object with 'newMapid' because if not done -> lead to invalid Map object reference... - //player far teleport would try to create same instance, but we need it NOW for transport... - - RemoveFromWorld(); - ResetMap(); - Map* newMap = sMapMgr->CreateBaseMap(newMapid); - SetMap(newMap); - ASSERT(GetMap()); - AddToWorld(); - - if (oldMap != newMap) - { - UpdateForMap(oldMap); - UpdateForMap(newMap); - } - - for (CreatureSet::iterator itr = m_NPCPassengerSet.begin(); itr != m_NPCPassengerSet.end(); ++itr) - (*itr)->FarTeleportTo(newMap, x, y, z, (*itr)->GetOrientation()); -} - -bool Transport::AddPassenger(Player* passenger) -{ - if (m_passengers.insert(passenger).second) - TC_LOG_INFO(LOG_FILTER_TRANSPORTS, "Player %s boarded transport %s.", passenger->GetName().c_str(), GetName().c_str()); - - sScriptMgr->OnAddPassenger(this, passenger); - return true; -} - -bool Transport::RemovePassenger(Player* passenger) -{ - if (m_passengers.erase(passenger)) - TC_LOG_INFO(LOG_FILTER_TRANSPORTS, "Player %s removed from transport %s.", passenger->GetName().c_str(), GetName().c_str()); - - sScriptMgr->OnRemovePassenger(this, passenger); - return true; -} - -void Transport::Update(uint32 p_diff) -{ - if (!AI()) - { - if (!AIM_Initialize()) - TC_LOG_ERROR(LOG_FILTER_TRANSPORTS, "Could not initialize GameObjectAI for Transport"); - } else - AI()->UpdateAI(p_diff); - - if (m_WayPoints.size() <= 1) + if (GetKeyFrames().size() <= 1) return; - m_timer = getMSTime() % m_period; - while (((m_timer - m_curr->first) % m_pathTime) > ((m_next->first - m_curr->first) % m_pathTime)) + m_goValue.Transport.PathProgress += diff; + + uint32 timer = m_goValue.Transport.PathProgress % GetPeriod(); + + // Set current waypoint + // Desired outcome: _currentFrame->DepartureTime < timer < _nextFrame->ArriveTime + // ... arrive | ... delay ... | departure + // event / event / + for (;;) { - DoEventIfAny(*m_curr, true); - - m_curr = GetNextWayPoint(); - m_next = GetNextWayPoint(); - - DoEventIfAny(*m_curr, false); - - // first check help in case client-server transport coordinates de-synchronization - if (m_curr->second.mapid != GetMapId() || m_curr->second.teleport) + if (timer >= _currentFrame->ArriveTime) { - TeleportTransport(m_curr->second.mapid, m_curr->second.x, m_curr->second.y, m_curr->second.z); - } - else - { - Relocate(m_curr->second.x, m_curr->second.y, m_curr->second.z, GetAngle(m_next->second.x, m_next->second.y) + float(M_PI)); - UpdatePassengerPositions(); // COME BACK MARKER - } - - sScriptMgr->OnRelocate(this, m_curr->first, m_curr->second.mapid, m_curr->second.x, m_curr->second.y, m_curr->second.z); - - m_nextNodeTime = m_curr->first; - - if (m_curr == m_WayPoints.begin()) - TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, " ************ BEGIN ************** %s", m_name.c_str()); - - TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "%s moved to %d %f %f %f %d", m_name.c_str(), m_curr->second.id, m_curr->second.x, m_curr->second.y, m_curr->second.z, m_curr->second.mapid); - } - - sScriptMgr->OnTransportUpdate(this, p_diff); -} - -void Transport::UpdateForMap(Map const* targetMap) -{ - Map::PlayerList const& player = targetMap->GetPlayers(); - if (player.isEmpty()) - return; - - if (GetMapId() == targetMap->GetId()) - { - for (Map::PlayerList::const_iterator itr = player.begin(); itr != player.end(); ++itr) - { - if (this != itr->GetSource()->GetTransport()) + if (!_triggeredArrivalEvent) { - UpdateData transData; - BuildCreateUpdateBlockForPlayer(&transData, itr->GetSource()); - WorldPacket packet; - transData.BuildPacket(&packet); - itr->GetSource()->SendDirectMessage(&packet); + DoEventIfAny(*_currentFrame, false); + _triggeredArrivalEvent = true; + } + + if (timer < _currentFrame->DepartureTime) + { + SetMoving(false); + if (_pendingStop) + SetGoState(GO_STATE_READY); + break; // its a stop frame and we are waiting } } + + if (_pendingStop && timer >= _currentFrame->DepartureTime && GetGoState() == GO_STATE_READY) + { + m_goValue.Transport.PathProgress = (m_goValue.Transport.PathProgress / GetPeriod()); + m_goValue.Transport.PathProgress *= GetPeriod(); + m_goValue.Transport.PathProgress += _currentFrame->ArriveTime; + break; + } + + if (timer >= _currentFrame->DepartureTime && !_triggeredDepartureEvent) + { + DoEventIfAny(*_currentFrame, true); // departure event + _triggeredDepartureEvent = true; + } + + if (timer >= _currentFrame->DepartureTime && timer < _currentFrame->NextArriveTime) + break; // found current waypoint + + MoveToNextWaypoint(); + + // not waiting anymore + SetMoving(true); + + // Enable movement + if (GetGOInfo()->moTransport.canBeStopped) + SetGoState(GO_STATE_ACTIVE); + + // Departure event + if (_currentFrame->IsTeleportFrame()) + TeleportTransport(_nextFrame->Node->mapid, _nextFrame->Node->x, _nextFrame->Node->y, _nextFrame->Node->z); + + sScriptMgr->OnRelocate(this, _currentFrame->Node->index, _currentFrame->Node->mapid, _currentFrame->Node->x, _currentFrame->Node->y, _currentFrame->Node->z); + + TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "Transport %u (%s) moved to node %u %u %f %f %f", GetEntry(), GetName(), _currentFrame->Node->index, _currentFrame->Node->mapid, _currentFrame->Node->x, _currentFrame->Node->y, _currentFrame->Node->z); } - else + + // Set position + _positionChangeTimer.Update(diff); + if (_positionChangeTimer.Passed()) { - UpdateData transData; - BuildOutOfRangeUpdateBlock(&transData); - WorldPacket out_packet; - transData.BuildPacket(&out_packet); - - for (Map::PlayerList::const_iterator itr = player.begin(); itr != player.end(); ++itr) - if (this != itr->GetSource()->GetTransport()) - itr->GetSource()->SendDirectMessage(&out_packet); + _positionChangeTimer.Reset(positionUpdateDelay); + if (IsMoving()) + { + float t = CalculateSegmentPos(float(timer) * 0.001f); + G3D::Vector3 pos, dir; + _currentFrame->Spline->evaluate_percent(_currentFrame->Index, t, pos); + //_currentFrame->Spline->evaluate_derivative(_currentFrame->Index, t, dir); + UpdatePosition(pos.x, pos.y, pos.z, 0.0f/*atan2(dir.x, dir.y)*/); + } } + + sScriptMgr->OnTransportUpdate(this, diff); } -void Transport::DoEventIfAny(WayPointMap::value_type const& node, bool departure) +void Transport::AddPassenger(WorldObject* passenger) { - if (uint32 eventid = departure ? node.second.departureEventID : node.second.arrivalEventID) - { - TC_LOG_DEBUG(LOG_FILTER_MAPSCRIPTS, "Taxi %s event %u of node %u of %s path", departure ? "departure" : "arrival", eventid, node.first, GetName().c_str()); - GetMap()->ScriptsStart(sEventScripts, eventid, this, this); - EventInform(eventid); - } + if (_passengers.insert(passenger).second) + TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "Object %s boarded transport %s.", passenger->GetName(), GetName()); + + if (Player* plr = passenger->ToPlayer()) + sScriptMgr->OnAddPassenger(this, plr); } -void Transport::BuildStartMovePacket(Map const* targetMap) +void Transport::RemovePassenger(WorldObject* passenger) { - SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); - SetGoState(GO_STATE_ACTIVE); - UpdateForMap(targetMap); + if (_passengers.erase(passenger) || _staticPassengers.erase(passenger)) // static passenger can remove itself in case of grid unload + TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "Object %s removed from transport %s.", passenger->GetName(), GetName()); + + + if (Player* plr = passenger->ToPlayer()) + sScriptMgr->OnRemovePassenger(this, plr); } -void Transport::BuildStopMovePacket(Map const* targetMap) -{ - RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); - SetGoState(GO_STATE_READY); - UpdateForMap(targetMap); -} - -uint32 Transport::AddNPCPassenger(uint32 tguid, uint32 entry, float x, float y, float z, float o, uint32 anim) +Creature* Transport::CreateNPCPassenger(uint32 guid, CreatureData const* data) { Map* map = GetMap(); - //make it world object so it will not be unloaded with grid - Creature* creature = new Creature(true); + Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, GetPhaseMask(), entry, 0, GetGOInfo()->faction, 0, 0, 0, 0)) + if (!creature->LoadCreatureFromDB(guid, map, false)) { delete creature; - return 0; + return NULL; } + float x = data->posX; + float y = data->posY; + float z = data->posZ; + float o = data->orientation; + creature->SetTransport(this); creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); - creature->m_movementInfo.guid = GetGUID(); + creature->m_movementInfo.transport.guid = GetGUID(); creature->m_movementInfo.transport.pos.Relocate(x, y, z, o); - - if (anim) - creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, anim); - - creature->Relocate( - GetPositionX() + (x * std::cos(GetOrientation()) + y * std::sin(GetOrientation() + float(M_PI))), - GetPositionY() + (y * std::cos(GetOrientation()) + x * std::sin(GetOrientation())), - z + GetPositionZ(), - o + GetOrientation()); - + CalculatePassengerPosition(x, y, z, &o); + creature->Relocate(x, y, z, o); creature->SetHomePosition(creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ(), creature->GetOrientation()); creature->SetTransportHomePosition(creature->m_movementInfo.transport.pos); if (!creature->IsPositionValid()) { - TC_LOG_ERROR(LOG_FILTER_TRANSPORTS, "Creature (guidlow %d, entry %d) not created. Suggested coordinates isn't valid (X: %f Y: %f)", creature->GetGUIDLow(), creature->GetEntry(), creature->GetPositionX(), creature->GetPositionY()); + TC_LOG_ERROR(LOG_FILTER_TRANSPORTS, "Creature (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)",creature->GetGUIDLow(),creature->GetEntry(),creature->GetPositionX(),creature->GetPositionY()); delete creature; - return 0; + return NULL; } map->AddToMap(creature); - m_NPCPassengerSet.insert(creature); + _staticPassengers.insert(creature); - if (tguid == 0) - { - ++currenttguid; - tguid = currenttguid; - } - else - currenttguid = std::max(tguid, currenttguid); - - creature->SetGUIDTransport(tguid); sScriptMgr->OnAddCreaturePassenger(this, creature); - return tguid; + return creature; } -void Transport::UpdatePosition(MovementInfo* mi) +GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data) { - float transport_o = mi->pos.GetOrientation() - mi->transport.pos.GetOrientation(); - float transport_x = mi->pos.m_positionX - (mi->transport.pos.m_positionX * std::cos(transport_o) - mi->transport.pos.m_positionY * std::sin(transport_o)); - float transport_y = mi->pos.m_positionY - (mi->transport.pos.m_positionY * std::cos(transport_o) + mi->transport.pos.m_positionX * std::sin(transport_o)); - float transport_z = mi->pos.m_positionZ - mi->transport.pos.m_positionZ; + Map* map = GetMap(); + GameObject* go = new GameObject(); - Relocate(transport_x, transport_y, transport_z, transport_o); - UpdatePassengerPositions(); -} - -void Transport::UpdatePassengerPositions() -{ - for (CreatureSet::iterator itr = m_NPCPassengerSet.begin(); itr != m_NPCPassengerSet.end(); ++itr) + if (!go->LoadGameObjectFromDB(guid, map, false)) { - Creature* npc = *itr; - - float x, y, z, o; - npc->m_movementInfo.transport.pos.GetPosition(x, y, z, o); - CalculatePassengerPosition(x, y, z, &o); - GetMap()->CreatureRelocation(npc, x, y, z, o, false); - npc->GetTransportHomePosition(x, y, z, o); - CalculatePassengerPosition(x, y, z, &o); - npc->SetHomePosition(x, y, z, o); + delete go; + return NULL; } + + float x = data->posX; + float y = data->posY; + float z = data->posZ; + float o = data->orientation; + + go->SetTransport(this); + go->m_movementInfo.transport.guid = GetGUID(); + go->m_movementInfo.transport.pos.Relocate(x, y, z, o); + CalculatePassengerPosition(x, y, z, &o); + go->Relocate(x, y, z, o); + + if (!go->IsPositionValid()) + { + TC_LOG_ERROR(LOG_FILTER_TRANSPORTS, "GameObject (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)", go->GetGUIDLow(), go->GetEntry(), go->GetPositionX(), go->GetPositionY()); + delete go; + return NULL; + } + + map->AddToMap(go); + _staticPassengers.insert(go); + + //sScriptMgr->OnAddCreaturePassenger(this, go); + return go; } void Transport::CalculatePassengerPosition(float& x, float& y, float& z, float* o /*= NULL*/) const @@ -723,3 +303,270 @@ void Transport::CalculatePassengerOffset(float& x, float& y, float& z, float* o y = (iny - inx * std::tan(GetOrientation())) / (std::cos(GetOrientation()) + std::sin(GetOrientation()) * std::tan(GetOrientation())); x = (inx + iny * std::tan(GetOrientation())) / (std::cos(GetOrientation()) + std::sin(GetOrientation()) * std::tan(GetOrientation())); } + +void Transport::UpdatePosition(float x, float y, float z, float o) +{ + bool newActive = GetMap()->IsGridLoaded(x, y); + + Relocate(x, y, z, o); + + UpdatePassengerPositions(_passengers); + + /* There are four possible scenarios that trigger loading/unloading passengers: + 1. transport moves from inactive to active grid + 2. the grid that transport is currently in becomes active + 3. transport moves from active to inactive grid + 4. the grid that transport is currently in unloads + */ + if (_staticPassengers.empty() && newActive) // 1. and 2. + LoadStaticPassengers(); + else if (!_staticPassengers.empty() && !newActive && Cell(x, y).DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3. + UnloadStaticPassengers(); + else + UpdatePassengerPositions(_staticPassengers); + // 4. is handed by grid unload +} + +void Transport::LoadStaticPassengers() +{ + if (uint32 mapId = GetGOInfo()->moTransport.mapID) + { + CellObjectGuidsMap const& cells = sObjectMgr->GetMapObjectGuids(mapId, GetMap()->GetSpawnMode()); + CellGuidSet::const_iterator guidEnd; + for (CellObjectGuidsMap::const_iterator cellItr = cells.begin(); cellItr != cells.end(); ++cellItr) + { + // Creatures on transport + guidEnd = cellItr->second.creatures.end(); + for (CellGuidSet::const_iterator guidItr = cellItr->second.creatures.begin(); guidItr != guidEnd; ++guidItr) + CreateNPCPassenger(*guidItr, sObjectMgr->GetCreatureData(*guidItr)); + + // GameObjects on transport + guidEnd = cellItr->second.gameobjects.end(); + for (CellGuidSet::const_iterator guidItr = cellItr->second.gameobjects.begin(); guidItr != guidEnd; ++guidItr) + CreateGOPassenger(*guidItr, sObjectMgr->GetGOData(*guidItr)); + } + } +} + +void Transport::UnloadStaticPassengers() +{ + while (!_staticPassengers.empty()) + { + WorldObject* obj = *_staticPassengers.begin(); + obj->AddObjectToRemoveList(); // also removes from _staticPassengers + } +} + +void Transport::EnableMovement(bool enabled) +{ + if (!GetGOInfo()->moTransport.canBeStopped) + return; + + _pendingStop = !enabled; +} + +void Transport::MoveToNextWaypoint() +{ + // Clear events flagging + _triggeredArrivalEvent = false; + _triggeredDepartureEvent = false; + + // Set frames + _currentFrame = _nextFrame++; + if (_nextFrame == GetKeyFrames().end()) + _nextFrame = GetKeyFrames().begin(); +} + +float Transport::CalculateSegmentPos(float now) +{ + KeyFrame const& frame = *_currentFrame; + const float speed = float(m_goInfo->moTransport.moveSpeed); + const float accel = float(m_goInfo->moTransport.accelRate); + float timeSinceStop = frame.TimeFrom + (now - (1.0f/IN_MILLISECONDS) * frame.DepartureTime); + float timeUntilStop = frame.TimeTo - (now - (1.0f/IN_MILLISECONDS) * frame.DepartureTime); + float segmentPos, dist; + float accelTime = _transportInfo->accelTime; + float accelDist = _transportInfo->accelDist; + // calculate from nearest stop, less confusing calculation... + if (timeSinceStop < timeUntilStop) + { + if (timeSinceStop < accelTime) + dist = 0.5f * accel * timeSinceStop * timeSinceStop; + else + dist = accelDist + (timeSinceStop - accelTime) * speed; + segmentPos = dist - frame.DistSinceStop; + } + else + { + if (timeUntilStop < _transportInfo->accelTime) + dist = 0.5f * accel * timeUntilStop * timeUntilStop; + else + dist = accelDist + (timeUntilStop - accelTime) * speed; + segmentPos = frame.DistUntilStop - dist; + } + + return segmentPos / frame.NextDistFromPrev; +} + +void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z) +{ + Map const* oldMap = GetMap(); + + if (oldMap->GetId() != newMapid) + { + Map* newMap = sMapMgr->CreateBaseMap(newMapid); + Map::PlayerList const& oldPlayers = GetMap()->GetPlayers(); + if (!oldPlayers.isEmpty()) + { + UpdateData data; + BuildOutOfRangeUpdateBlock(&data); + WorldPacket packet; + data.BuildPacket(&packet); + for (Map::PlayerList::const_iterator itr = oldPlayers.begin(); itr != oldPlayers.end(); ++itr) + if (itr->GetSource()->GetTransport() != this) + itr->GetSource()->SendDirectMessage(&packet); + } + + UnloadStaticPassengers(); + GetMap()->RemoveFromMap(this, false); + SetMap(newMap); + + Map::PlayerList const& newPlayers = GetMap()->GetPlayers(); + if (!newPlayers.isEmpty()) + { + for (Map::PlayerList::const_iterator itr = newPlayers.begin(); itr != newPlayers.end(); ++itr) + { + if (itr->GetSource()->GetTransport() != this) + { + UpdateData data; + BuildCreateUpdateBlockForPlayer(&data, itr->GetSource()); + WorldPacket packet; + data.BuildPacket(&packet); + itr->GetSource()->SendDirectMessage(&packet); + } + } + } + + // Teleport passengers after everyone on destination map are sent create packet + // but before transport itself is registered there and begins updating + for (std::set::iterator itr = _staticPassengers.begin(); itr != _staticPassengers.end(); ++itr) + { + switch ((*itr)->GetTypeId()) + { + case TYPEID_UNIT: + (*itr)->ToCreature()->FarTeleportTo(newMap, x, y, z, (*itr)->GetOrientation()); + break; + case TYPEID_GAMEOBJECT: + { + GameObject* go = (*itr)->ToGameObject(); + go->GetMap()->RemoveFromMap(go, false); + Relocate(x, y, z, go->GetOrientation()); + SetMap(newMap); + newMap->AddToMap(go); + break; + } + } + } + + for (std::set::iterator itr = _passengers.begin(); itr != _passengers.end(); ++itr) + { + switch ((*itr)->GetTypeId()) + { + case TYPEID_UNIT: + if (!IS_PLAYER_GUID((*itr)->ToUnit()->GetOwnerGUID())) // pets should be teleported with player + (*itr)->ToCreature()->FarTeleportTo(newMap, x, y, z, (*itr)->GetOrientation()); + break; + case TYPEID_GAMEOBJECT: + { + GameObject* go = (*itr)->ToGameObject(); + go->GetMap()->RemoveFromMap(go, false); + Relocate(x, y, z, go->GetOrientation()); + SetMap(newMap); + newMap->AddToMap(go); + break; + } + case TYPEID_PLAYER: + (*itr)->ToPlayer()->TeleportTo(newMapid, x, y, z, (*itr)->GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT); + break; + } + } + + GetMap()->AddToMap(this); + } + else + { + // Teleport players, they need to know it + for (std::set::iterator itr = _passengers.begin(); itr != _passengers.end(); ++itr) + if ((*itr)->GetTypeId() == TYPEID_PLAYER) + (*itr)->ToUnit()->NearTeleportTo(x, y, z, GetOrientation()); + } + + UpdatePosition(x, y, z, GetOrientation()); +} + +void Transport::UpdatePassengerPositions(std::set& passengers) +{ + for (std::set::iterator itr = passengers.begin(); itr != passengers.end(); ++itr) + { + WorldObject* passenger = *itr; + // transport teleported but passenger not yet (can happen for players) + if (passenger->GetMap() != GetMap()) + continue; + + // if passenger is on vehicle we have to assume the vehicle is also on transport + // and its the vehicle that will be updating its passengers + if (Unit* unit = passenger->ToUnit()) + if (unit->GetVehicle()) + continue; + + // Do not use Unit::UpdatePosition here, we don't want to remove auras + // as if regular movement occurred + float x, y, z, o; + passenger->m_movementInfo.transport.pos.GetPosition(x, y, z, o); + CalculatePassengerPosition(x, y, z, &o); + switch (passenger->GetTypeId()) + { + case TYPEID_UNIT: + { + Creature* creature = passenger->ToCreature(); + GetMap()->CreatureRelocation(creature, x, y, z, o, false); + creature->GetTransportHomePosition(x, y, z, o); + CalculatePassengerPosition(x, y, z, &o); + creature->SetHomePosition(x, y, z, o); + break; + } + case TYPEID_PLAYER: + GetMap()->PlayerRelocation(passenger->ToPlayer(), x, y, z, o); + break; + case TYPEID_GAMEOBJECT: + GetMap()->GameObjectRelocation(passenger->ToGameObject(), x, y, z, o, false); + break; + } + + if (Unit* unit = passenger->ToUnit()) + if (Vehicle* vehicle = unit->GetVehicleKit()) + vehicle->RelocatePassengers(); + } +} + +void Transport::DoEventIfAny(KeyFrame const& node, bool departure) +{ + if (uint32 eventid = departure ? node.Node->departureEventID : node.Node->arrivalEventID) + { + TC_LOG_DEBUG(LOG_FILTER_MAPSCRIPTS, "Taxi %s event %u of node %u of %s path", departure ? "departure" : "arrival", eventid, node.Node->index, GetName()); + GetMap()->ScriptsStart(sEventScripts, eventid, this, this); + EventInform(eventid); + } +} + +void Transport::BuildUpdate(UpdateDataMapType& data_map) +{ + Map::PlayerList const& players = GetMap()->GetPlayers(); + if (players.isEmpty()) + return; + + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + BuildFieldsUpdate(itr->GetSource(), data_map); + + ClearUpdateMask(true); +} diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h index 445bec456fd..22a54e8428d 100644 --- a/src/server/game/Entities/Transport/Transport.h +++ b/src/server/game/Entities/Transport/Transport.h @@ -20,34 +20,30 @@ #define TRANSPORTS_H #include "GameObject.h" +#include "TransportMgr.h" #include "VehicleDefines.h" -#include -#include -#include +struct CreatureData; class Transport : public GameObject, public TransportBase { + friend Transport* TransportMgr::CreateTransport(uint32, uint32, Map*); + + Transport(); public: - Transport(uint32 period, uint32 script); ~Transport(); - bool Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress, uint32 dynflags); - bool GenerateWaypoints(uint32 pathid, std::set &mapids); - void Update(uint32 p_time); - bool AddPassenger(Player* passenger); - bool RemovePassenger(Player* passenger); + bool Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress); + void Update(uint32 diff); - void RemovePassenger(Creature* passenger) { m_NPCPassengerSet.erase(passenger); } + void BuildUpdate(UpdateDataMapType& data_map); - typedef std::set PlayerSet; - PlayerSet const& GetPassengers() const { return m_passengers; } + void AddPassenger(WorldObject* passenger); + void RemovePassenger(WorldObject* passenger); + std::set const& GetPassengers() const { return _passengers; } - typedef std::set CreatureSet; - CreatureSet m_NPCPassengerSet; - uint32 AddNPCPassenger(uint32 tguid, uint32 entry, float x, float y, float z, float o, uint32 anim=0); - void UpdatePosition(MovementInfo* mi); - void UpdatePassengerPositions(); + Creature* CreateNPCPassenger(uint32 guid, CreatureData const* data); + GameObject* CreateGOPassenger(uint32 guid, GameObjectData const* data); /// This method transforms supplied transport offsets into global coordinates void CalculatePassengerPosition(float& x, float& y, float& z, float* o = NULL) const; @@ -55,50 +51,48 @@ class Transport : public GameObject, public TransportBase /// This method transforms supplied global coordinates into local offsets void CalculatePassengerOffset(float& x, float& y, float& z, float* o = NULL) const; - void BuildStartMovePacket(Map const* targetMap); - void BuildStopMovePacket(Map const* targetMap); - uint32 GetScriptId() const { return ScriptId; } - private: - struct WayPoint - { - WayPoint() : mapid(0), x(0), y(0), z(0), teleport(false), id(0) {} - WayPoint(uint32 _mapid, float _x, float _y, float _z, bool _teleport, uint32 _id = 0, - uint32 _arrivalEventID = 0, uint32 _departureEventID = 0) - : mapid(_mapid), x(_x), y(_y), z(_z), teleport(_teleport), id(_id), - arrivalEventID(_arrivalEventID), departureEventID(_departureEventID) - { - } - uint32 mapid; - float x; - float y; - float z; - bool teleport; - uint32 id; - uint32 arrivalEventID; - uint32 departureEventID; - }; + uint32 GetPeriod() const { return GetUInt32Value(GAMEOBJECT_LEVEL); } + void SetPeriod(uint32 period) { SetUInt32Value(GAMEOBJECT_LEVEL, period); } + uint32 GetTimer() const { return GetGOValue()->Transport.PathProgress; } - typedef std::map WayPointMap; + KeyFrameVec const& GetKeyFrames() const { return _transportInfo->keyFrames; } - WayPointMap::const_iterator m_curr; - WayPointMap::const_iterator m_next; - uint32 m_pathTime; - uint32 m_timer; + void UpdatePosition(float x, float y, float z, float o); - PlayerSet m_passengers; + //! Needed when transport moves from inactive to active grid + void LoadStaticPassengers(); - uint32 currenttguid; - uint32 m_period; - uint32 ScriptId; - public: - WayPointMap m_WayPoints; - uint32 m_nextNodeTime; + //! Needed when transport enters inactive grid + void UnloadStaticPassengers(); + + void EnableMovement(bool enabled); private: + void MoveToNextWaypoint(); + float CalculateSegmentPos(float perc); void TeleportTransport(uint32 newMapid, float x, float y, float z); - void UpdateForMap(Map const* map); - void DoEventIfAny(WayPointMap::value_type const& node, bool departure); - WayPointMap::const_iterator GetNextWayPoint(); -}; -#endif + void UpdatePassengerPositions(std::set& passengers); + void DoEventIfAny(KeyFrame const& node, bool departure); + //! Helpers to know if stop frame was reached + bool IsMoving() const { return _isMoving; } + void SetMoving(bool val) { _isMoving = val; } + + TransportTemplate const* _transportInfo; + + KeyFrameVec::const_iterator _currentFrame; + KeyFrameVec::const_iterator _nextFrame; + uint32 _moveTimer; + TimeTrackerSmall _positionChangeTimer; + bool _isMoving; + bool _pendingStop; + + //! These are needed to properly control events triggering only once for each frame + bool _triggeredArrivalEvent; + bool _triggeredDepartureEvent; + + std::set _passengers; + std::set _staticPassengers; +}; + +#endif diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 74c50145311..2fd1c500305 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -17329,6 +17329,8 @@ void Unit::SetFacingTo(float ori) { Movement::MoveSplineInit init(this); init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZMinusOffset(), false); + if (HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) && GetTransGUID()) + init.DisableTransportPathTransformations(); // It makes no sense to target global orientation init.SetFacing(ori); init.Launch(); } @@ -17340,7 +17342,10 @@ void Unit::SetFacingToObject(WorldObject* object) return; /// @todo figure out under what conditions creature will move towards object instead of facing it where it currently is. - SetFacingTo(GetAngle(object)); + Movement::MoveSplineInit init(this); + init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZMinusOffset()); + init.SetFacing(GetAngle(object)); // when on transport, GetAngle will still return global coordinates (and angle) that needs transforming + init.Launch(); } bool Unit::SetWalk(bool enable) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 13f8c8e781f..25352a924ef 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2078,12 +2078,6 @@ class Unit : public WorldObject bool IsOnVehicle(const Unit* vehicle) const; Unit* GetVehicleBase() const; Creature* GetVehicleCreatureBase() const; - float GetTransOffsetX() const { return m_movementInfo.transport.pos.GetPositionX(); } - float GetTransOffsetY() const { return m_movementInfo.transport.pos.GetPositionY(); } - float GetTransOffsetZ() const { return m_movementInfo.transport.pos.GetPositionZ(); } - float GetTransOffsetO() const { return m_movementInfo.transport.pos.GetOrientation(); } - uint32 GetTransTime() const { return m_movementInfo.transport.time; } - int8 GetTransSeat() const { return m_movementInfo.transport.seat; } uint64 GetTransGUID() const; /// Returns the transport this unit is on directly (if on vehicle and transport, return vehicle) TransportBase* GetDirectTransport() const; diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index afc27b74ecc..67474c1dca0 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -147,6 +147,15 @@ GameObject* ObjectAccessor::GetGameObject(WorldObject const& u, uint64 guid) return GetObjectInMap(guid, u.GetMap(), (GameObject*)NULL); } +Transport* ObjectAccessor::GetTransport(WorldObject const& u, uint64 guid) +{ + if (GUID_HIPART(guid) != HIGHGUID_MO_TRANSPORT) + return NULL; + + GameObject* go = GetGameObject(u, guid); + return go ? go->ToTransport() : NULL; +} + DynamicObject* ObjectAccessor::GetDynamicObject(WorldObject const& u, uint64 guid) { return GetObjectInMap(guid, u.GetMap(), (DynamicObject*)NULL); diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 1abe3550729..a2707920c63 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -40,6 +40,7 @@ class WorldObject; class Vehicle; class Map; class WorldRunnable; +class Transport; template class HashMapHolder @@ -145,6 +146,7 @@ class ObjectAccessor static Object* GetObjectByTypeMask(WorldObject const&, uint64, uint32 typemask); static Corpse* GetCorpse(WorldObject const& u, uint64 guid); static GameObject* GetGameObject(WorldObject const& u, uint64 guid); + static Transport* GetTransport(WorldObject const& u, uint64 guid); static DynamicObject* GetDynamicObject(WorldObject const& u, uint64 guid); static Unit* GetUnit(WorldObject const&, uint64 guid); static Creature* GetCreature(WorldObject const& u, uint64 guid); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index e44333c4a7a..752cc3b56ab 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -1019,6 +1019,11 @@ class ObjectMgr return _mapObjectGuidsStore[MAKE_PAIR32(mapid, spawnMode)][cell_id]; } + CellObjectGuidsMap const& GetMapObjectGuids(uint16 mapid, uint8 spawnMode) + { + return _mapObjectGuidsStore[MAKE_PAIR32(mapid, spawnMode)]; + } + /** * Gets temp summon data for all creatures of specified group. * diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp index b8ab75f213b..2d44f865c99 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp +++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp @@ -35,16 +35,26 @@ void VisibleNotifier::SendToSelf() // at this moment i_clientGUIDs have guids that not iterate at grid level checks // but exist one case when this possible and object not out of range: transports if (Transport* transport = i_player.GetTransport()) - for (Transport::PlayerSet::const_iterator itr = transport->GetPassengers().begin();itr != transport->GetPassengers().end();++itr) + for (std::set::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end();++itr) { if (vis_guids.find((*itr)->GetGUID()) != vis_guids.end()) { vis_guids.erase((*itr)->GetGUID()); - i_player.UpdateVisibilityOf((*itr), i_data, i_visibleNow); - - if (!(*itr)->isNeedNotify(NOTIFY_VISIBILITY_CHANGED)) - (*itr)->UpdateVisibilityOf(&i_player); + switch ((*itr)->GetTypeId()) + { + case TYPEID_GAMEOBJECT: + i_player.UpdateVisibilityOf((*itr)->ToGameObject(), i_data, i_visibleNow); + break; + case TYPEID_PLAYER: + i_player.UpdateVisibilityOf((*itr)->ToPlayer(), i_data, i_visibleNow); + if (!(*itr)->isNeedNotify(NOTIFY_VISIBILITY_CHANGED)) + (*itr)->ToPlayer()->UpdateVisibilityOf(&i_player); + break; + case TYPEID_UNIT: + i_player.UpdateVisibilityOf((*itr)->ToCreature(), i_data, i_visibleNow); + break; + } } } @@ -324,10 +334,8 @@ template void ObjectUpdater::Visit(GridRefManager &m) { for (typename GridRefManager::iterator iter = m.begin(); iter != m.end(); ++iter) - { if (iter->GetSource()->IsInWorld()) iter->GetSource()->Update(i_timeDiff); - } } bool AnyDeadUnitObjectInRangeCheck::operator()(Player* u) @@ -360,5 +368,6 @@ bool AnyDeadUnitSpellTargetInRangeCheck::operator()(Creature* u) return AnyDeadUnitObjectInRangeCheck::operator()(u) && i_check(u); } -template void ObjectUpdater::Visit(GameObjectMapType &); -template void ObjectUpdater::Visit(DynamicObjectMapType &); +template void ObjectUpdater::Visit(CreatureMapType&); +template void ObjectUpdater::Visit(GameObjectMapType&); +template void ObjectUpdater::Visit(DynamicObjectMapType&); diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index 58a5bbbff06..b2ddd6b8a4a 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -43,6 +43,20 @@ void ObjectGridEvacuator::Visit(CreatureMapType &m) } } +void ObjectGridEvacuator::Visit(GameObjectMapType &m) +{ + // gameobject in unloading grid can have respawn point in another grid + // if it will be unloaded then it will not respawn in original grid until unload/load original grid + // move to respawn point to prevent this case. For player view in respawn grid this will be normal respawn. + for (GameObjectMapType::iterator iter = m.begin(); iter != m.end();) + { + GameObject* go = iter->GetSource(); + ++iter; + + go->GetMap()->GameObjectRespawnRelocation(go, true); + } +} + // for loading world object at grid loading (Corpses) /// @todo to implement npc on transport, also need to load npcs at grid loading class ObjectWorldLoader @@ -70,7 +84,12 @@ template void ObjectGridLoader::SetObjectCell(T* /*obj*/, CellCoord con template<> void ObjectGridLoader::SetObjectCell(Creature* obj, CellCoord const& cellCoord) { Cell cell(cellCoord); + obj->SetCurrentCell(cell); +} +template<> void ObjectGridLoader::SetObjectCell(GameObject* obj, CellCoord const& cellCoord) +{ + Cell cell(cellCoord); obj->SetCurrentCell(cell); } diff --git a/src/server/game/Grids/ObjectGridLoader.h b/src/server/game/Grids/ObjectGridLoader.h index 11f91670a5f..b858b92da32 100644 --- a/src/server/game/Grids/ObjectGridLoader.h +++ b/src/server/game/Grids/ObjectGridLoader.h @@ -67,6 +67,7 @@ class ObjectGridEvacuator { public: void Visit(CreatureMapType &m); + void Visit(GameObjectMapType &m); template void Visit(GridRefManager &) {} }; diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 1faa68b6ea4..36d1e1cb1ea 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -303,30 +303,21 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) { if (!plrMover->GetTransport()) { - // elevators also cause the client to send MOVEMENTFLAG_ONTRANSPORT - just dismount if the guid can be found in the transport list - for (MapManager::TransportSet::const_iterator iter = sMapMgr->m_Transports.begin(); iter != sMapMgr->m_Transports.end(); ++iter) + if (Transport* transport = plrMover->GetMap()->GetTransport(movementInfo.transport.guid)) { - if ((*iter)->GetGUID() == movementInfo.transport.guid) - { - plrMover->m_transport = *iter; - (*iter)->AddPassenger(plrMover); - break; - } + plrMover->m_transport = transport; + transport->AddPassenger(plrMover); } } else if (plrMover->GetTransport()->GetGUID() != movementInfo.transport.guid) { bool foundNewTransport = false; plrMover->m_transport->RemovePassenger(plrMover); - for (MapManager::TransportSet::const_iterator iter = sMapMgr->m_Transports.begin(); iter != sMapMgr->m_Transports.end(); ++iter) + if (Transport* transport = plrMover->GetMap()->GetTransport(movementInfo.transport.guid)) { - if ((*iter)->GetGUID() == movementInfo.transport.guid) - { - foundNewTransport = true; - plrMover->m_transport = *iter; - (*iter)->AddPassenger(plrMover); - break; - } + foundNewTransport = true; + plrMover->m_transport = transport; + transport->AddPassenger(plrMover); } if (!foundNewTransport) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 4660489004d..46eee6613fe 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -217,10 +217,12 @@ void Map::DeleteStateMachine() } Map::Map(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode, Map* _parent): -_creatureToMoveLock(false), i_mapEntry (sMapStore.LookupEntry(id)), i_spawnMode(SpawnMode), i_InstanceId(InstanceId), +_creatureToMoveLock(false), _gameObjectsToMoveLock(false), +i_mapEntry(sMapStore.LookupEntry(id)), i_spawnMode(SpawnMode), i_InstanceId(InstanceId), m_unloadTimer(0), m_VisibleDistance(DEFAULT_VISIBILITY_DISTANCE), m_VisibilityNotifyPeriod(DEFAULT_VISIBILITY_NOTIFY_PERIOD), -m_activeNonPlayersIter(m_activeNonPlayers.end()), i_gridExpiry(expiry), +m_activeNonPlayersIter(m_activeNonPlayers.end()), _transportsUpdateIter(_transports.end()), +i_gridExpiry(expiry), i_scriptLock(false) { m_parentMap = (_parent ? _parent : this); @@ -270,6 +272,21 @@ void Map::AddToGrid(Creature* obj, Cell const& cell) obj->SetCurrentCell(cell); } +template<> +void Map::AddToGrid(GameObject* obj, Cell const& cell) +{ + NGridType* grid = getNGrid(cell.GridX(), cell.GridY()); + grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj); + + obj->SetCurrentCell(cell); +} + +template +void Map::SwitchGridContainers(T* /*obj*/, bool /*on*/) +{ +} + +template<> void Map::SwitchGridContainers(Creature* obj, bool on) { ASSERT(!obj->IsPermanentWorldObject()); @@ -291,6 +308,7 @@ void Map::SwitchGridContainers(Creature* obj, bool on) GridType &grid = ngrid->GetGridType(cell.CellX(), cell.CellY()); obj->RemoveFromGrid(); //This step is not really necessary but we want to do ASSERT in remove/add + if (on) { grid.AddWorldObject(obj); @@ -301,9 +319,45 @@ void Map::SwitchGridContainers(Creature* obj, bool on) grid.AddGridObject(obj); RemoveWorldObject(obj); } + obj->m_isTempWorldObject = on; } +template<> +void Map::SwitchGridContainers(GameObject* obj, bool on) +{ + ASSERT(!obj->IsPermanentWorldObject()); + CellCoord p = Trinity::ComputeCellCoord(obj->GetPositionX(), obj->GetPositionY()); + if (!p.IsCoordValid()) + { + TC_LOG_ERROR(LOG_FILTER_MAPS, "Map::SwitchGridContainers: Object " UI64FMTD " has invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUID(), obj->GetPositionX(), obj->GetPositionY(), p.x_coord, p.y_coord); + return; + } + + Cell cell(p); + if (!IsGridLoaded(GridCoord(cell.data.Part.grid_x, cell.data.Part.grid_y))) + return; + + TC_LOG_DEBUG(LOG_FILTER_MAPS, "Switch object " UI64FMTD " from grid[%u, %u] %u", obj->GetGUID(), cell.data.Part.grid_x, cell.data.Part.grid_y, on); + NGridType *ngrid = getNGrid(cell.GridX(), cell.GridY()); + ASSERT(ngrid != NULL); + + GridType &grid = ngrid->GetGridType(cell.CellX(), cell.CellY()); + + obj->RemoveFromGrid(); //This step is not really necessary but we want to do ASSERT in remove/add + + if (on) + { + grid.AddWorldObject(obj); + AddWorldObject(obj); + } + else + { + grid.AddGridObject(obj); + RemoveWorldObject(obj); + } +} + template void Map::DeleteFromWorld(T* obj) { @@ -432,11 +486,17 @@ void Map::InitializeObject(T* /*obj*/) template<> void Map::InitializeObject(Creature* obj) { - obj->_moveState = CREATURE_CELL_MOVE_NONE; + obj->_moveState = MAP_OBJECT_CELL_MOVE_NONE; +} + +template<> +void Map::InitializeObject(GameObject* obj) +{ + obj->_moveState = MAP_OBJECT_CELL_MOVE_NONE; } template -bool Map::AddToMap(T *obj) +bool Map::AddToMap(T* obj) { /// @todo Needs clean up. An object should not be added to map twice. if (obj->IsInWorld()) @@ -480,6 +540,26 @@ bool Map::AddToMap(T *obj) return true; } +template<> +bool Map::AddToMap(Transport* obj) +{ + //TODO: Needs clean up. An object should not be added to map twice. + if (obj->IsInWorld()) + return true; + + CellCoord cellCoord = Trinity::ComputeCellCoord(obj->GetPositionX(), obj->GetPositionY()); + if (!cellCoord.IsCoordValid()) + { + TC_LOG_ERROR(LOG_FILTER_MAPS, "Map::Add: Object " UI64FMTD " has invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUID(), obj->GetPositionX(), obj->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord); + return false; //Should delete object + } + + obj->AddToWorld(); + _transports.insert(obj); + + return true; +} + bool Map::IsGridLoaded(const GridCoord &p) const { return (getNGrid(p.x_coord, p.y_coord) && isGridObjectDataLoaded(p.x_coord, p.y_coord)); @@ -565,6 +645,17 @@ void Map::Update(const uint32 t_diff) VisitNearbyCellsOf(obj, grid_object_update, world_object_update); } + for (_transportsUpdateIter = _transports.begin(); _transportsUpdateIter != _transports.end();) + { + WorldObject* obj = *_transportsUpdateIter; + ++_transportsUpdateIter; + + if (!obj->IsInWorld()) + continue; + + obj->Update(t_diff); + } + ///- Process necessary scripts if (!m_scriptSchedule.empty()) { @@ -574,6 +665,7 @@ void Map::Update(const uint32 t_diff) } MoveAllCreaturesInMoveList(); + MoveAllGameObjectsInMoveList(); if (!m_mapRefManager.isEmpty() || !m_activeNonPlayers.empty()) ProcessRelocationNotifies(t_diff); @@ -708,6 +800,34 @@ void Map::RemoveFromMap(T *obj, bool remove) } } +template<> +void Map::RemoveFromMap(Transport* obj, bool remove) +{ + obj->RemoveFromWorld(); + + if (_transportsUpdateIter != _transports.end()) + { + TransportsContainer::iterator itr = _transports.find(obj); + if (itr == _transports.end()) + return; + if (itr == _transportsUpdateIter) + ++_transportsUpdateIter; + _transports.erase(itr); + } + else + _transports.erase(obj); + + obj->ResetMap(); + + if (remove) + { + // if option set then object already saved at this moment + if (!sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY)) + obj->SaveRespawnTime(); + DeleteFromWorld(obj); + } +} + void Map::PlayerRelocation(Player* player, float x, float y, float z, float orientation) { ASSERT(player); @@ -777,12 +897,44 @@ void Map::CreatureRelocation(Creature* creature, float x, float y, float z, floa ASSERT(CheckGridIntegrity(creature, true)); } +void Map::GameObjectRelocation(GameObject* go, float x, float y, float z, float orientation, bool respawnRelocationOnFail) +{ + Cell integrity_check(go->GetPositionX(), go->GetPositionY()); + Cell old_cell = go->GetCurrentCell(); + + ASSERT(integrity_check == old_cell); + Cell new_cell(x, y); + + if (!respawnRelocationOnFail && !getNGrid(new_cell.GridX(), new_cell.GridY())) + return; + + // delay creature move for grid/cell to grid/cell moves + if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell)) + { +#ifdef TRINITY_DEBUG + TC_LOG_DEBUG(LOG_FILTER_MAPS, "GameObject (GUID: %u Entry: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); +#endif + AddGameObjectToMoveList(go, x, y, z, orientation); + // in diffcell/diffgrid case notifiers called at finishing move go in Map::MoveAllGameObjectsInMoveList + } + else + { + go->Relocate(x, y, z, orientation); + go->UpdateObjectVisibility(false); + RemoveGameObjectFromMoveList(go); + } + + old_cell = go->GetCurrentCell(); + integrity_check = Cell(go->GetPositionX(), go->GetPositionY()); + ASSERT(integrity_check == old_cell); +} + void Map::AddCreatureToMoveList(Creature* c, float x, float y, float z, float ang) { if (_creatureToMoveLock) //can this happen? return; - if (c->_moveState == CREATURE_CELL_MOVE_NONE) + if (c->_moveState == MAP_OBJECT_CELL_MOVE_NONE) _creaturesToMove.push_back(c); c->SetNewCellPosition(x, y, z, ang); } @@ -792,8 +944,27 @@ void Map::RemoveCreatureFromMoveList(Creature* c) if (_creatureToMoveLock) //can this happen? return; - if (c->_moveState == CREATURE_CELL_MOVE_ACTIVE) - c->_moveState = CREATURE_CELL_MOVE_INACTIVE; + if (c->_moveState == MAP_OBJECT_CELL_MOVE_ACTIVE) + c->_moveState = MAP_OBJECT_CELL_MOVE_INACTIVE; +} + +void Map::AddGameObjectToMoveList(GameObject* go, float x, float y, float z, float ang) +{ + if (_gameObjectsToMoveLock) //can this happen? + return; + + if (go->_moveState == MAP_OBJECT_CELL_MOVE_NONE) + _gameObjectsToMove.push_back(go); + go->SetNewCellPosition(x, y, z, ang); +} + +void Map::RemoveGameObjectFromMoveList(GameObject* go) +{ + if (_gameObjectsToMoveLock) //can this happen? + return; + + if (go->_moveState == MAP_OBJECT_CELL_MOVE_ACTIVE) + go->_moveState = MAP_OBJECT_CELL_MOVE_INACTIVE; } void Map::MoveAllCreaturesInMoveList() @@ -805,13 +976,13 @@ void Map::MoveAllCreaturesInMoveList() if (c->FindMap() != this) //pet is teleported to another map continue; - if (c->_moveState != CREATURE_CELL_MOVE_ACTIVE) + if (c->_moveState != MAP_OBJECT_CELL_MOVE_ACTIVE) { - c->_moveState = CREATURE_CELL_MOVE_NONE; + c->_moveState = MAP_OBJECT_CELL_MOVE_NONE; continue; } - c->_moveState = CREATURE_CELL_MOVE_NONE; + c->_moveState = MAP_OBJECT_CELL_MOVE_NONE; if (!c->IsInWorld()) continue; @@ -852,6 +1023,50 @@ void Map::MoveAllCreaturesInMoveList() _creatureToMoveLock = false; } +void Map::MoveAllGameObjectsInMoveList() +{ + _gameObjectsToMoveLock = true; + for (std::vector::iterator itr = _gameObjectsToMove.begin(); itr != _gameObjectsToMove.end(); ++itr) + { + GameObject* go = *itr; + if (go->FindMap() != this) //transport is teleported to another map + continue; + + if (go->_moveState != MAP_OBJECT_CELL_MOVE_ACTIVE) + { + go->_moveState = MAP_OBJECT_CELL_MOVE_NONE; + continue; + } + + go->_moveState = MAP_OBJECT_CELL_MOVE_NONE; + if (!go->IsInWorld()) + continue; + + // do move or do move to respawn or remove creature if previous all fail + if (GameObjectCellRelocation(go, Cell(go->_newPosition.m_positionX, go->_newPosition.m_positionY))) + { + // update pos + go->Relocate(go->_newPosition); + go->UpdateObjectVisibility(false); + } + else + { + // if GameObject can't be move in new cell/grid (not loaded) move it to repawn cell/grid + // GameObject coordinates will be updated and notifiers send + if (!GameObjectRespawnRelocation(go, false)) + { + // ... or unload (if respawn grid also not loaded) +#ifdef TRINITY_DEBUG + sLog->outDebug(LOG_FILTER_MAPS, "GameObject (GUID: %u Entry: %u) cannot be move to unloaded respawn grid.", go->GetGUIDLow(), go->GetEntry()); +#endif + AddObjectToRemoveList(go); + } + } + } + _gameObjectsToMove.clear(); + _gameObjectsToMoveLock = false; +} + bool Map::CreatureCellRelocation(Creature* c, Cell new_cell) { Cell const& old_cell = c->GetCurrentCell(); @@ -913,6 +1128,67 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell) return false; } +bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell) +{ + Cell const& old_cell = go->GetCurrentCell(); + if (!old_cell.DiffGrid(new_cell)) // in same grid + { + // if in same cell then none do + if (old_cell.DiffCell(new_cell)) + { + #ifdef TRINITY_DEBUG + TC_LOG_DEBUG(LOG_FILTER_MAPS, "GameObject (GUID: %u Entry: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY()); + #endif + + go->RemoveFromGrid(); + AddToGrid(go, new_cell); + } + else + { + #ifdef TRINITY_DEBUG + TC_LOG_DEBUG(LOG_FILTER_MAPS, "GameObject (GUID: %u Entry: %u) moved in same grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY()); + #endif + } + + return true; + } + + // in diff. grids but active GameObject + if (go->isActiveObject()) + { + EnsureGridLoadedForActiveObject(new_cell, go); + + #ifdef TRINITY_DEBUG + TC_LOG_DEBUG(LOG_FILTER_MAPS, "Active GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + #endif + + go->RemoveFromGrid(); + AddToGrid(go, new_cell); + + return true; + } + + // in diff. loaded grid normal GameObject + if (IsGridLoaded(GridCoord(new_cell.GridX(), new_cell.GridY()))) + { + #ifdef TRINITY_DEBUG + TC_LOG_DEBUG(LOG_FILTER_MAPS, "GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + #endif + + go->RemoveFromGrid(); + EnsureGridCreated(GridCoord(new_cell.GridX(), new_cell.GridY())); + AddToGrid(go, new_cell); + + return true; + } + + // fail to move: normal GameObject attempt move to unloaded grid + #ifdef TRINITY_DEBUG + TC_LOG_DEBUG(LOG_FILTER_MAPS, "GameObject (GUID: %u Entry: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + #endif + return false; +} + bool Map::CreatureRespawnRelocation(Creature* c, bool diffGridOnly) { float resp_x, resp_y, resp_z, resp_o; @@ -943,6 +1219,31 @@ bool Map::CreatureRespawnRelocation(Creature* c, bool diffGridOnly) return false; } +bool Map::GameObjectRespawnRelocation(GameObject* go, bool diffGridOnly) +{ + float resp_x, resp_y, resp_z, resp_o; + go->GetRespawnPosition(resp_x, resp_y, resp_z, &resp_o); + Cell resp_cell(resp_x, resp_y); + + //GameObject will be unloaded with grid + if (diffGridOnly && !go->GetCurrentCell().DiffGrid(resp_cell)) + return true; + + #ifdef TRINITY_DEBUG + TC_LOG_DEBUG(LOG_FILTER_MAPS, "GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to respawn grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), go->GetCurrentCell().GridX(), go->GetCurrentCell().GridY(), go->GetCurrentCell().CellX(), go->GetCurrentCell().CellY(), resp_cell.GridX(), resp_cell.GridY(), resp_cell.CellX(), resp_cell.CellY()); + #endif + + // teleport it to respawn point (like normal respawn if player see) + if (GameObjectCellRelocation(go, resp_cell)) + { + go->Relocate(resp_x, resp_y, resp_z, resp_o); + go->UpdateObjectVisibility(false); + return true; + } + + return false; +} + bool Map::UnloadGrid(NGridType& ngrid, bool unloadAll) { const uint32 x = ngrid.getX(); @@ -966,6 +1267,7 @@ bool Map::UnloadGrid(NGridType& ngrid, bool unloadAll) // Finish creature moves, remove and delete all creatures with delayed remove before moving to respawn grids // Must know real mob position before move MoveAllCreaturesInMoveList(); + MoveAllGameObjectsInMoveList(); // move creatures to respawn grids if this is diff.grid or to remove list ObjectGridEvacuator worker; @@ -974,6 +1276,7 @@ bool Map::UnloadGrid(NGridType& ngrid, bool unloadAll) // Finish creature moves, remove and delete all creatures with delayed remove before unload MoveAllCreaturesInMoveList(); + MoveAllGameObjectsInMoveList(); } { @@ -1041,6 +1344,7 @@ void Map::UnloadAll() { // clear all delayed moves, useless anyway do this moves before map unload. _creaturesToMove.clear(); + _gameObjectsToMove.clear(); for (GridRefManager::iterator i = GridRefManager::begin(); i != GridRefManager::end();) { @@ -2008,7 +2312,7 @@ void Map::SendInitSelf(Player* player) // build other passengers at transport also (they always visible and marked as visible and will not send at visibility update at add to map if (Transport* transport = player->GetTransport()) { - for (Transport::PlayerSet::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr) + for (std::set::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr) { if (player != (*itr) && player->HaveAtClient(*itr)) { @@ -2025,24 +2329,10 @@ void Map::SendInitSelf(Player* player) void Map::SendInitTransports(Player* player) { // Hack to send out transports - MapManager::TransportMap& tmap = sMapMgr->m_TransportsByMap; - - // no transports at map - if (tmap.find(player->GetMapId()) == tmap.end()) - return; - UpdateData transData; - - MapManager::TransportSet& tset = tmap[player->GetMapId()]; - - for (MapManager::TransportSet::const_iterator i = tset.begin(); i != tset.end(); ++i) - { - // send data for current transport in other place - if ((*i) != player->GetTransport() && (*i)->GetMapId() == GetId()) - { + for (TransportsContainer::const_iterator i = _transports.begin(); i != _transports.end(); ++i) + if (*i != player->GetTransport()) (*i)->BuildCreateUpdateBlockForPlayer(&transData, player); - } - } WorldPacket packet; transData.BuildPacket(&packet); @@ -2052,19 +2342,9 @@ void Map::SendInitTransports(Player* player) void Map::SendRemoveTransports(Player* player) { // Hack to send out transports - MapManager::TransportMap& tmap = sMapMgr->m_TransportsByMap; - - // no transports at map - if (tmap.find(player->GetMapId()) == tmap.end()) - return; - UpdateData transData; - - MapManager::TransportSet& tset = tmap[player->GetMapId()]; - - // except used transport - for (MapManager::TransportSet::const_iterator i = tset.begin(); i != tset.end(); ++i) - if ((*i) != player->GetTransport() && (*i)->GetMapId() != GetId()) + for (TransportsContainer::const_iterator i = _transports.begin(); i != _transports.end(); ++i) + if (*i != player->GetTransport()) (*i)->BuildOutOfRangeUpdateBlock(&transData); WorldPacket packet; @@ -2137,8 +2417,8 @@ void Map::RemoveAllObjectsInRemoveList() bool on = itr->second; i_objectsToSwitch.erase(itr); - if (obj->GetTypeId() == TYPEID_UNIT && !obj->IsPermanentWorldObject()) - SwitchGridContainers(obj->ToCreature(), on); + if (obj->GetTypeId() == TYPEID_UNIT || obj->GetTypeId() == TYPEID_GAMEOBJECT && !obj->IsPermanentWorldObject()) + SwitchGridContainers(obj, on); } //TC_LOG_DEBUG(LOG_FILTER_MAPS, "Object remover 1 check."); @@ -2233,6 +2513,13 @@ bool Map::ActiveObjectsNearGrid(NGridType const& ngrid) const return false; } +template +void Map::AddToActive(T* obj) +{ + AddToActiveHelper(obj); +} + +template <> void Map::AddToActive(Creature* c) { AddToActiveHelper(c); @@ -2254,6 +2541,13 @@ void Map::AddToActive(Creature* c) } } +template +void Map::RemoveFromActive(T* obj) +{ + RemoveFromActiveHelper(obj); +} + +template <> void Map::RemoveFromActive(Creature* c) { RemoveFromActiveHelper(c); @@ -2285,6 +2579,10 @@ template void Map::RemoveFromMap(Creature*, bool); template void Map::RemoveFromMap(GameObject*, bool); template void Map::RemoveFromMap(DynamicObject*, bool); +template void Map::AddToActive(DynamicObject*); + +template void Map::RemoveFromActive(DynamicObject*); + /* ******* Dungeon Instance Maps ******* */ InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode, Map* _parent) @@ -2772,6 +3070,15 @@ GameObject* Map::GetGameObject(uint64 guid) return ObjectAccessor::GetObjectInMap(guid, this, (GameObject*)NULL); } +Transport* Map::GetTransport(uint64 guid) +{ + if (GUID_HIPART(guid) != HIGHGUID_MO_TRANSPORT) + return NULL; + + GameObject* go = GetGameObject(guid); + return go ? go->ToTransport() : NULL; +} + DynamicObject* Map::GetDynamicObject(uint64 guid) { return ObjectAccessor::GetObjectInMap(guid, this, (DynamicObject*)NULL); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 3deeb4e04b1..c57f7d36bc6 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -52,6 +52,7 @@ struct Position; class Battleground; class MapInstanced; class InstanceMap; +class Transport; namespace Trinity { struct ObjectUpdater; } struct ScriptAction @@ -278,6 +279,7 @@ class Map : public GridRefManager void PlayerRelocation(Player*, float x, float y, float z, float orientation); void CreatureRelocation(Creature* creature, float x, float y, float z, float ang, bool respawnRelocationOnFail = true); + void GameObjectRelocation(GameObject* go, float x, float y, float z, float orientation, bool respawnRelocationOnFail = true); template void Visit(const Cell& cell, TypeContainerVisitor &visitor); @@ -350,11 +352,13 @@ class Map : public GridRefManager } void MoveAllCreaturesInMoveList(); + void MoveAllGameObjectsInMoveList(); void RemoveAllObjectsInRemoveList(); virtual void RemoveAllPlayers(); // used only in MoveAllCreaturesInMoveList and ObjectGridUnloader bool CreatureRespawnRelocation(Creature* c, bool diffGridOnly); + bool GameObjectRespawnRelocation(GameObject* go, bool diffGridOnly); // assert print helper bool CheckGridIntegrity(Creature* c, bool moved) const; @@ -415,17 +419,13 @@ class Map : public GridRefManager // must called with AddToWorld template - void AddToActive(T* obj) { AddToActiveHelper(obj); } - - void AddToActive(Creature* obj); + void AddToActive(T* obj); // must called with RemoveFromWorld template - void RemoveFromActive(T* obj) { RemoveFromActiveHelper(obj); } + void RemoveFromActive(T* obj); - void RemoveFromActive(Creature* obj); - - void SwitchGridContainers(Creature* creature, bool toWorldContainer); + template void SwitchGridContainers(T* obj, bool on); template void VisitAll(const float &x, const float &y, float radius, NOTIFIER ¬ifier); template void VisitFirstFound(const float &x, const float &y, float radius, NOTIFIER ¬ifier); template void VisitWorld(const float &x, const float &y, float radius, NOTIFIER ¬ifier); @@ -438,6 +438,7 @@ class Map : public GridRefManager void SummonCreatureGroup(uint8 group, std::list* list = NULL); Creature* GetCreature(uint64 guid); GameObject* GetGameObject(uint64 guid); + Transport* GetTransport(uint64 guid); DynamicObject* GetDynamicObject(uint64 guid); MapInstanced* ToMapInstanced(){ if (Instanceable()) return reinterpret_cast(this); else return NULL; } @@ -485,6 +486,9 @@ class Map : public GridRefManager static void DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId); + void SendInitTransports(Player* player); + void SendRemoveTransports(Player* player); + private: void LoadMapAndVMap(int gx, int gy); void LoadVMap(int gx, int gy); @@ -496,18 +500,21 @@ class Map : public GridRefManager void SendInitSelf(Player* player); - void SendInitTransports(Player* player); - void SendRemoveTransports(Player* player); - bool CreatureCellRelocation(Creature* creature, Cell new_cell); + bool GameObjectCellRelocation(GameObject* go, Cell new_cell); template void InitializeObject(T* obj); void AddCreatureToMoveList(Creature* c, float x, float y, float z, float ang); void RemoveCreatureFromMoveList(Creature* c); + void AddGameObjectToMoveList(GameObject* go, float x, float y, float z, float ang); + void RemoveGameObjectFromMoveList(GameObject* go); bool _creatureToMoveLock; std::vector _creaturesToMove; + bool _gameObjectsToMoveLock; + std::vector _gameObjectsToMove; + bool IsGridLoaded(const GridCoord &) const; void EnsureGridCreated(const GridCoord &); void EnsureGridCreated_i(const GridCoord &); @@ -516,9 +523,6 @@ class Map : public GridRefManager void buildNGridLinkage(NGridType* pNGridType) { pNGridType->link(this); } - template void AddType(T *obj); - template void RemoveType(T *obj, bool); - NGridType* getNGrid(uint32 x, uint32 y) const { ASSERT(x < MAX_NUMBER_OF_GRIDS && y < MAX_NUMBER_OF_GRIDS); @@ -555,6 +559,11 @@ class Map : public GridRefManager ActiveNonPlayers m_activeNonPlayers; ActiveNonPlayers::iterator m_activeNonPlayersIter; + // Objects that must update even in inactive grids without activating them + typedef std::set TransportsContainer; + TransportsContainer _transports; + TransportsContainer::iterator _transportsUpdateIter; + private: Player* _GetScriptPlayerSourceOrTarget(Object* source, Object* target, const ScriptInfo* scriptInfo) const; Creature* _GetScriptCreatureSourceOrTarget(Object* source, Object* target, const ScriptInfo* scriptInfo, bool bReverse = false) const; @@ -589,10 +598,10 @@ class Map : public GridRefManager // Type specific code for add/remove to/from grid template - void AddToGrid(T* object, Cell const& cell); + void AddToGrid(T* object, Cell const& cell); template - void DeleteFromWorld(T*); + void DeleteFromWorld(T*); template void AddToActiveHelper(T* obj) diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index 60ebd3f8699..5aa8b85fbca 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -292,8 +292,6 @@ void MapManager::Update(uint32 diff) iter->second->DelayedUpdate(uint32(i_timer.GetCurrent())); sObjectAccessor->Update(uint32(i_timer.GetCurrent())); - for (TransportSet::iterator itr = m_Transports.begin(); itr != m_Transports.end(); ++itr) - (*itr)->Update(uint32(i_timer.GetCurrent())); i_timer.SetCurrent(0); } @@ -326,12 +324,6 @@ bool MapManager::IsValidMAP(uint32 mapid, bool startUp) void MapManager::UnloadAll() { - for (TransportSet::iterator i = m_Transports.begin(); i != m_Transports.end(); ++i) - { - (*i)->RemoveFromWorld(); - delete *i; - } - for (MapMapType::iterator iter = i_maps.begin(); iter != i_maps.end();) { iter->second->UnloadAll(); diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h index 8af609c61e2..230b4648f4a 100644 --- a/src/server/game/Maps/MapManager.h +++ b/src/server/game/Maps/MapManager.h @@ -107,15 +107,6 @@ class MapManager void DoDelayedMovesAndRemoves(); - void LoadTransports(); - void LoadTransportNPCs(); - - typedef std::set TransportSet; - TransportSet m_Transports; - - typedef std::map TransportMap; - TransportMap m_TransportsByMap; - bool CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck = false); void InitializeVisibilityDistanceInfo(); diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp new file mode 100644 index 00000000000..62995830c5d --- /dev/null +++ b/src/server/game/Maps/TransportMgr.cpp @@ -0,0 +1,453 @@ +/* + * Copyright (C) 2008-2012 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "TransportMgr.h" +#include "Transport.h" +#include "InstanceScript.h" +#include "MoveSpline.h" +#include "MapManager.h" + +TransportTemplate::~TransportTemplate() +{ + // Collect shared pointers into a set to avoid deleting the same memory more than once + std::set splines; + for (size_t i = 0; i < keyFrames.size(); ++i) + splines.insert(keyFrames[i].Spline); + + for (std::set::iterator itr = splines.begin(); itr != splines.end(); ++itr) + delete *itr; +} + +TransportMgr::TransportMgr() +{ +} + +TransportMgr::~TransportMgr() +{ +} + +void TransportMgr::Unload() +{ + _transportTemplates.clear(); +} + +void TransportMgr::LoadTransportTemplates() +{ + uint32 oldMSTime = getMSTime(); + + QueryResult result = WorldDatabase.Query("SELECT entry FROM gameobject_template WHERE type = 15 ORDER BY entry ASC"); + + if (!result) + { + TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 transport templates. DB table `gameobject_template` has no transports!"); + return; + } + + uint32 count = 0; + + do + { + Field* fields = result->Fetch(); + uint32 entry = fields[0].GetUInt32(); + GameObjectTemplate const* goInfo = sObjectMgr->GetGameObjectTemplate(entry); + if (goInfo->moTransport.taxiPathId >= sTaxiPathNodesByPath.size()) + { + TC_LOG_ERROR(LOG_FILTER_SQL, "Transport %u (name: %s) has an invalid path specified in `gameobject_template`.`data0` (%u) field, skipped.", entry, goInfo->name, goInfo->moTransport.taxiPathId); + continue; + } + + // paths are generated per template, saves us from generating it again in case of instanced transports + TransportTemplate& transport = _transportTemplates[entry]; + transport.entry = entry; + GeneratePath(goInfo, &transport); + + // transports in instance are only on one map + if (transport.inInstance) + _instanceTransports[*transport.mapsUsed.begin()].insert(entry); + + ++count; + } while (result->NextRow()); + + TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u transport templates in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); +} + +void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTemplate* transport) +{ + uint32 pathId = goInfo->moTransport.taxiPathId; + TaxiPathNodeList const& path = sTaxiPathNodesByPath[pathId]; + std::vector& keyFrames = transport->keyFrames; + Movement::PointsArray splinePath; + bool mapChange = false; + bool cyclic = true; + for (size_t i = 1; i < path.size() - 1; ++i) + { + if (!mapChange) + { + TaxiPathNodeEntry const& node_i = path[i]; + if (node_i.actionFlag == 1 || node_i.mapid != path[i + 1].mapid) + { + cyclic = false; + keyFrames.back().Teleport = true; + mapChange = true; + } + else + { + KeyFrame k(node_i); + keyFrames.push_back(k); + splinePath.push_back(G3D::Vector3(node_i.x, node_i.y, node_i.z)); + transport->mapsUsed.insert(k.Node->mapid); + } + } + else + mapChange = false; + } + + if (transport->mapsUsed.size() > 1) + { + for (std::set::const_iterator itr = transport->mapsUsed.begin(); itr != transport->mapsUsed.end(); ++itr) + ASSERT(!sMapStore.LookupEntry(*itr)->Instanceable()); + + transport->inInstance = false; + } + else + transport->inInstance = sMapStore.LookupEntry(*transport->mapsUsed.begin())->Instanceable(); + + // last to first is always "teleport", even for closed paths + keyFrames.back().Teleport = true; + + const float speed = float(goInfo->moTransport.moveSpeed); + const float accel = float(goInfo->moTransport.accelRate); + const float accel_dist = 0.5f * speed * speed / accel; + + transport->accelTime = speed / accel; + transport->accelDist = accel_dist; + + int32 firstStop = -1; + int32 lastStop = -1; + + // first cell is arrived at by teleportation :S + keyFrames[0].DistFromPrev = 0; + keyFrames[0].Index = 1; + if (keyFrames[0].IsStopFrame()) + { + firstStop = 0; + lastStop = 0; + } + + // find the rest of the distances between key points + // Every path segment has its own spline + if (cyclic) + { + TransportSpline* spline = new TransportSpline(); + spline->init_cyclic_spline(&splinePath[0], splinePath.size(), Movement::SplineBase::ModeCatmullrom, 0); + spline->initLengths(); + keyFrames[0].DistFromPrev = spline->length(spline->last() - 2, spline->last() - 1); + keyFrames[0].Spline = spline; + for (size_t i = 1; i < keyFrames.size(); ++i) + { + keyFrames[i].Index = i + 1; + keyFrames[i].DistFromPrev = spline->length(i, i + 1); + keyFrames[i - 1].NextDistFromPrev = keyFrames[i].DistFromPrev; + keyFrames[i].Spline = spline; + if (keyFrames[i].IsStopFrame()) + { + // remember first stop frame + if (firstStop == -1) + firstStop = i; + lastStop = i; + } + } + } + else + { + size_t start = 0; + for (size_t i = 1; i < keyFrames.size(); ++i) + { + if (keyFrames[i - 1].Teleport || i + 1 == keyFrames.size()) + { + size_t extra = !keyFrames[i - 1].Teleport ? 1 : 0; + TransportSpline* spline = new TransportSpline(); + spline->init_spline(&splinePath[start], i - start + extra, Movement::SplineBase::ModeCatmullrom); + spline->initLengths(); + for (size_t j = start; j < i + extra; ++j) + { + keyFrames[j].Index = j - start + 1; + keyFrames[j].DistFromPrev = spline->length(j - start, j + 1 - start); + if (j > 0) + keyFrames[j - 1].NextDistFromPrev = keyFrames[j].DistFromPrev; + keyFrames[j].Spline = spline; + } + + if (keyFrames[i - 1].Teleport) + { + keyFrames[i].Index = i - start + 1; + keyFrames[i].DistFromPrev = 0.0f; + keyFrames[i - 1].NextDistFromPrev = 0.0f; + keyFrames[i].Spline = spline; + } + + start = i; + } + + if (keyFrames[i].IsStopFrame()) + { + // remember first stop frame + if (firstStop == -1) + firstStop = i; + lastStop = i; + } + } + } + + keyFrames.back().NextDistFromPrev = keyFrames.front().DistFromPrev; + + // at stopping keyframes, we define distSinceStop == 0, + // and distUntilStop is to the next stopping keyframe. + // this is required to properly handle cases of two stopping frames in a row (yes they do exist) + float tmpDist = 0.0f; + for (size_t i = 0; i < keyFrames.size(); ++i) + { + int32 j = (i + lastStop) % keyFrames.size(); + if (keyFrames[j].IsStopFrame()) + tmpDist = 0.0f; + else + tmpDist += keyFrames[j].DistFromPrev; + keyFrames[j].DistSinceStop = tmpDist; + } + + tmpDist = 0.0f; + for (int32 i = int32(keyFrames.size()) - 1; i >= 0; i--) + { + int32 j = (i + firstStop) % keyFrames.size(); + tmpDist += keyFrames[(j + 1) % keyFrames.size()].DistFromPrev; + keyFrames[j].DistUntilStop = tmpDist; + if (keyFrames[j].IsStopFrame()) + tmpDist = 0.0f; + } + + for (size_t i = 0; i < keyFrames.size(); ++i) + { + float total_dist = keyFrames[i].DistSinceStop + keyFrames[i].DistUntilStop; + if (total_dist < 2 * accel_dist) // won't reach full speed + { + if (keyFrames[i].DistSinceStop < keyFrames[i].DistUntilStop) // is still accelerating + { + // calculate accel+brake time for this short segment + float segment_time = 2.0f * sqrt((keyFrames[i].DistUntilStop + keyFrames[i].DistSinceStop) / accel); + // substract acceleration time + keyFrames[i].TimeTo = segment_time - sqrt(2 * keyFrames[i].DistSinceStop / accel); + } + else // slowing down + keyFrames[i].TimeTo = sqrt(2 * keyFrames[i].DistUntilStop / accel); + } + else if (keyFrames[i].DistSinceStop < accel_dist) // still accelerating (but will reach full speed) + { + // calculate accel + cruise + brake time for this long segment + float segment_time = (keyFrames[i].DistUntilStop + keyFrames[i].DistSinceStop) / speed + (speed / accel); + // substract acceleration time + keyFrames[i].TimeTo = segment_time - sqrt(2 * keyFrames[i].DistSinceStop / accel); + } + else if (keyFrames[i].DistUntilStop < accel_dist) // already slowing down (but reached full speed) + keyFrames[i].TimeTo = sqrt(2 * keyFrames[i].DistUntilStop / accel); + else // at full speed + keyFrames[i].TimeTo = (keyFrames[i].DistUntilStop / speed) + (0.5f * speed / accel); + } + + // calculate tFrom times from tTo times + float segmentTime = 0.0f; + for (size_t i = 0; i < keyFrames.size(); ++i) + { + int32 j = (i + lastStop) % keyFrames.size(); + if (keyFrames[j].IsStopFrame()) + segmentTime = keyFrames[j].TimeTo; + keyFrames[j].TimeFrom = segmentTime - keyFrames[j].TimeTo; + } + + // calculate path times + keyFrames[0].ArriveTime = 0; + float curPathTime = 0.0f; + if (keyFrames[0].IsStopFrame()) + { + curPathTime = float(keyFrames[0].Node->delay); + keyFrames[0].DepartureTime = uint32(curPathTime * IN_MILLISECONDS); + } + + for (size_t i = 1; i < keyFrames.size(); ++i) + { + curPathTime += keyFrames[i-1].TimeTo; + if (keyFrames[i].IsStopFrame()) + { + keyFrames[i].ArriveTime = uint32(curPathTime * IN_MILLISECONDS); + keyFrames[i - 1].NextArriveTime = keyFrames[i].ArriveTime; + curPathTime += (float)keyFrames[i].Node->delay; + keyFrames[i].DepartureTime = uint32(curPathTime * IN_MILLISECONDS); + } + else + { + curPathTime -= keyFrames[i].TimeTo; + keyFrames[i].ArriveTime = uint32(curPathTime * IN_MILLISECONDS); + keyFrames[i - 1].NextArriveTime = keyFrames[i].ArriveTime; + keyFrames[i].DepartureTime = keyFrames[i].ArriveTime; + } + } + keyFrames.back().NextArriveTime = keyFrames.back().DepartureTime; + + transport->pathTime = keyFrames.back().DepartureTime; + //WorldDatabase.DirectPExecute("UPDATE `transports` SET `period_gen`=%u WHERE `entry`=%u", transport->pathTime, transport->entry); +} + +void TransportMgr::AddPathNodeToTransport(uint32 transportEntry, uint32 timeSeg, TransportAnimationEntry const* node) +{ + TransportAnimation& animNode = _transportAnimations[transportEntry]; + if (animNode.TotalTime < timeSeg) + animNode.TotalTime = timeSeg; + + animNode.Path[timeSeg] = node; +} + +Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map* map /*= NULL*/) +{ + // instance case, execute GetGameObjectEntry hook + if (map) + { + // SetZoneScript() is called after adding to map, so fetch the script using map + if (map->IsDungeon()) + if (InstanceScript* instance = static_cast(map)->GetInstanceScript()) + entry = instance->GetGameObjectEntry(0, entry); + + if (!entry) + return NULL; + } + + TransportTemplate const* tInfo = GetTransportTemplate(entry); + if (!tInfo) + { + TC_LOG_ERROR(LOG_FILTER_SQL, "Transport %u will not be loaded, `transport_template` missing", entry); + return NULL; + } + + // create transport... + Transport* trans = new Transport(); + + // ...at first waypoint + TaxiPathNodeEntry const* startNode = tInfo->keyFrames.begin()->Node; + uint32 mapId = startNode->mapid; + float x = startNode->x; + float y = startNode->y; + float z = startNode->z; + float o = 0.0f; + + // initialize the gameobject base + uint32 guidLow = guid ? guid : sObjectMgr->GenerateLowGuid(HIGHGUID_MO_TRANSPORT); + if (!trans->Create(guidLow, entry, mapId, x, y, z, o, 255)) + { + delete trans; + return NULL; + } + + if (MapEntry const* mapEntry = sMapStore.LookupEntry(mapId)) + { + if (uint32(mapEntry->Instanceable()) != tInfo->inInstance) + { + TC_LOG_ERROR(LOG_FILTER_TRANSPORTS, "Transport %u (name: %s) attempted creation in instance map (id: %u) but it is not an instanced transport!", entry, trans->GetName(), mapId); + delete trans; + return NULL; + } + } + + // use preset map for instances (need to know which instance) + trans->SetMap(map ? map : sMapMgr->CreateMap(mapId, NULL)); + if (map && map->IsDungeon()) + trans->m_zoneScript = map->ToInstanceMap()->GetInstanceScript(); + + // Passengers will be loaded once a player is near + + trans->GetMap()->AddToMap(trans); + return trans; +} + +void TransportMgr::SpawnContinentTransports() +{ + if (_transportTemplates.empty()) + return; + + uint32 oldMSTime = getMSTime(); + + QueryResult result = WorldDatabase.Query("SELECT guid, entry FROM transports"); + + uint32 count = 0; + if (result) + { + do + { + Field* fields = result->Fetch(); + uint32 guid = fields[0].GetUInt32(); + uint32 entry = fields[1].GetUInt32(); + + if (TransportTemplate const* tInfo = GetTransportTemplate(entry)) + if (!tInfo->inInstance) + if (CreateTransport(entry, guid)) + ++count; + + } while (result->NextRow()); + } + + TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Spawned %u continent transports in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); +} + +void TransportMgr::CreateInstanceTransports(Map* map) +{ + TransportInstanceMap::const_iterator mapTransports = _instanceTransports.find(map->GetId()); + + // no transports here + if (mapTransports == _instanceTransports.end() || mapTransports->second.empty()) + return; + + // create transports + for (std::set::const_iterator itr = mapTransports->second.begin(); itr != mapTransports->second.end(); ++itr) + CreateTransport(*itr, 0, map); +} + +TransportAnimationEntry const* TransportAnimation::GetAnimNode(uint32 time) const +{ + if (Path.empty()) + return NULL; + + for (TransportPathContainer::const_reverse_iterator itr2 = Path.rbegin(); itr2 != Path.rend(); ++itr2) + if (time >= itr2->first) + return itr2->second; + + return Path.begin()->second; +} + +G3D::Quat TransportAnimation::GetAnimRotation(uint32 time) const +{ + if (Rotations.empty()) + return G3D::Quat(0.0f, 0.0f, 0.0f, 1.0f); + + TransportRotationEntry const* rot = Rotations.begin()->second; + for (TransportPathRotationContainer::const_reverse_iterator itr2 = Rotations.rbegin(); itr2 != Rotations.rend(); ++itr2) + { + if (time >= itr2->first) + { + rot = itr2->second; + break; + } + } + + return G3D::Quat(rot->X, rot->Y, rot->Z, rot->W); +} diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h new file mode 100644 index 00000000000..250a2c50bb1 --- /dev/null +++ b/src/server/game/Maps/TransportMgr.h @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2008-2012 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef TRANSPORTMGR_H +#define TRANSPORTMGR_H + +#include +#include +#include "Spline.h" +#include "DBCStores.h" + +struct KeyFrame; +struct GameObjectTemplate; +struct TransportTemplate; +class Transport; +class Map; + +typedef Movement::Spline TransportSpline; +typedef std::vector KeyFrameVec; +typedef UNORDERED_MAP TransportTemplates; +typedef std::set TransportSet; +typedef UNORDERED_MAP TransportMap; +typedef UNORDERED_MAP > TransportInstanceMap; + +struct KeyFrame +{ + explicit KeyFrame(TaxiPathNodeEntry const& _node) : Node(&_node), + DistSinceStop(-1.0f), DistUntilStop(-1.0f), DistFromPrev(-1.0f), TimeFrom(0.0f), TimeTo(0.0f), + Teleport(false), ArriveTime(0), DepartureTime(0), Spline(NULL), NextDistFromPrev(0.0f), NextArriveTime(0) + { + } + + uint32 Index; + TaxiPathNodeEntry const* Node; + float DistSinceStop; + float DistUntilStop; + float DistFromPrev; + float TimeFrom; + float TimeTo; + bool Teleport; + uint32 ArriveTime; + uint32 DepartureTime; + TransportSpline* Spline; + + // Data needed for next frame + float NextDistFromPrev; + uint32 NextArriveTime; + + bool IsTeleportFrame() const { return Teleport; } + bool IsStopFrame() const { return Node->actionFlag == 2; } +}; + +struct TransportTemplate +{ + TransportTemplate() : pathTime(0), accelTime(0.0f), accelDist(0.0f) { } + ~TransportTemplate(); + + std::set mapsUsed; + bool inInstance; + uint32 pathTime; + KeyFrameVec keyFrames; + float accelTime; + float accelDist; + uint32 entry; +}; + +typedef std::map TransportPathContainer; +typedef std::map TransportPathRotationContainer; + +struct TransportAnimation +{ + TransportPathContainer Path; + TransportPathRotationContainer Rotations; + uint32 TotalTime; + + TransportAnimationEntry const* GetAnimNode(uint32 time) const; + G3D::Quat GetAnimRotation(uint32 time) const; +}; + +typedef std::map TransportAnimationContainer; + +class TransportMgr +{ + friend class ACE_Singleton; + friend void LoadDBCStores(std::string const&); + + public: + void Unload(); + + void LoadTransportTemplates(); + + // Creates a transport using given GameObject template entry + Transport* CreateTransport(uint32 entry, uint32 guid = 0, Map* map = NULL); + + // Spawns all continent transports, used at core startup + void SpawnContinentTransports(); + + // creates all transports for instance + void CreateInstanceTransports(Map* map); + + TransportTemplate const* GetTransportTemplate(uint32 entry) const + { + TransportTemplates::const_iterator itr = _transportTemplates.find(entry); + if (itr != _transportTemplates.end()) + return &itr->second; + return NULL; + } + + TransportAnimation const* GetTransportAnimInfo(uint32 entry) const + { + TransportAnimationContainer::const_iterator itr = _transportAnimations.find(entry); + if (itr != _transportAnimations.end()) + return &itr->second; + + return NULL; + } + + private: + TransportMgr(); + ~TransportMgr(); + TransportMgr(TransportMgr const&); + TransportMgr& operator=(TransportMgr const&); + + // Generates and precaches a path for transport to avoid generation each time transport instance is created + void GeneratePath(GameObjectTemplate const* goInfo, TransportTemplate* transport); + + void AddPathNodeToTransport(uint32 transportEntry, uint32 timeSeg, TransportAnimationEntry const* node); + + void AddPathRotationToTransport(uint32 transportEntry, uint32 timeSeg, TransportRotationEntry const* node) + { + _transportAnimations[transportEntry].Rotations[timeSeg] = node; + } + + // Container storing transport templates + TransportTemplates _transportTemplates; + + // Container storing transport entries to create for instanced maps + TransportInstanceMap _instanceTransports; + + TransportAnimationContainer _transportAnimations; +}; + +#define sTransportMgr ACE_Singleton::instance() + +#endif // TRANSPORTMGR_H diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index e561d37ed36..02f5965836f 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -1495,7 +1495,8 @@ enum GameObjectDynamicLowFlags GO_DYNFLAG_LO_ACTIVATE = 0x01, // enables interaction with GO GO_DYNFLAG_LO_ANIMATE = 0x02, // possibly more distinct animation of GO GO_DYNFLAG_LO_NO_INTERACT = 0x04, // appears to disable interaction (not fully verified) - GO_DYNFLAG_LO_SPARKLE = 0x08 // makes GO sparkle + GO_DYNFLAG_LO_SPARKLE = 0x08, // makes GO sparkle + GO_DYNFLAG_LO_STOPPED = 0x10 // Transport is stopped }; enum GameObjectDestructibleState diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 6311e629641..5506f74b221 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -20,6 +20,7 @@ //Extended headers #include "ObjectMgr.h" #include "World.h" +#include "Transport.h" //Flightmaster grid preloading #include "MapManager.h" //Creature-specific headers @@ -92,14 +93,37 @@ bool WaypointMovementGenerator::StartMove(Creature* creature) { if (!i_path || i_path->empty()) return false; + if (Stopped()) return true; + bool transportPath = creature->HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) && creature->GetTransGUID(); + if (m_isArrivalDone) { if ((i_currentNode == i_path->size() - 1) && !repeating) // If that's our last waypoint { - creature->SetHomePosition(i_path->at(i_currentNode)->x, i_path->at(i_currentNode)->y, i_path->at(i_currentNode)->z, creature->GetOrientation()); + float x = i_path->at(i_currentNode)->x; + float y = i_path->at(i_currentNode)->y; + float z = i_path->at(i_currentNode)->z; + float o = creature->GetOrientation(); + + if (!transportPath) + creature->SetHomePosition(x, y, z, o); + else + { + if (Transport* trans = creature->GetTransport()) + { + o -= trans->GetOrientation(); + creature->SetTransportHomePosition(x, y, z, o); + trans->CalculatePassengerPosition(x, y, z, &o); + creature->SetHomePosition(x, y, z, o); + } + else + transportPath = false; + // else if (vehicle) - this should never happen, vehicle offsets are const + } + creature->GetMotionMaster()->Initialize(); return false; } @@ -113,7 +137,19 @@ bool WaypointMovementGenerator::StartMove(Creature* creature) creature->AddUnitState(UNIT_STATE_ROAMING_MOVE); + Movement::Location formationDest(node->x, node->y, node->z, 0.0f); Movement::MoveSplineInit init(creature); + + //! If creature is on transport, we assume waypoints set in DB are already transport offsets + if (transportPath) + { + init.DisableTransportPathTransformations(); + if (TransportBase* trans = creature->GetDirectTransport()) + trans->CalculatePassengerPosition(formationDest.x, formationDest.y, formationDest.z, &formationDest.orientation); + } + + //! Do not use formationDest here, MoveTo requires transport offsets due to DisableTransportPathTransformations() call + //! but formationDest contains global coordinates init.MoveTo(node->x, node->y, node->z); //! Accepts angles such as 0.00001 and -0.00001, 0 must be ignored, default value in waypoint table @@ -125,7 +161,7 @@ bool WaypointMovementGenerator::StartMove(Creature* creature) //Call for creature group update if (creature->GetFormation() && creature->GetFormation()->getLeader() == creature) - creature->GetFormation()->LeaderMoveTo(node->x, node->y, node->z); + creature->GetFormation()->LeaderMoveTo(formationDest.x, formationDest.y, formationDest.z); return true; } diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index c37cdf80730..ff133272724 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -315,6 +315,7 @@ void Map::ScriptsProcess() case HIGHGUID_PLAYER: source = HashMapHolder::Find(step.sourceGUID); break; + case HIGHGUID_TRANSPORT: case HIGHGUID_GAMEOBJECT: source = HashMapHolder::Find(step.sourceGUID); break; @@ -322,15 +323,11 @@ void Map::ScriptsProcess() source = HashMapHolder::Find(step.sourceGUID); break; case HIGHGUID_MO_TRANSPORT: - for (MapManager::TransportSet::iterator itr2 = sMapMgr->m_Transports.begin(); itr2 != sMapMgr->m_Transports.end(); ++itr2) - { - if ((*itr2)->GetGUID() == step.sourceGUID) - { - source = *itr2; - break; - } - } + { + GameObject* go = HashMapHolder::Find(step.sourceGUID); + source = go ? go->ToTransport() : NULL; break; + } default: TC_LOG_ERROR(LOG_FILTER_TSCR, "%s source with unsupported high guid (GUID: " UI64FMTD ", high guid: %u).", step.script->GetDebugInfo().c_str(), step.sourceGUID, GUID_HIPART(step.sourceGUID)); @@ -353,12 +350,19 @@ void Map::ScriptsProcess() case HIGHGUID_PLAYER: // empty GUID case also target = HashMapHolder::Find(step.targetGUID); break; + case HIGHGUID_TRANSPORT: case HIGHGUID_GAMEOBJECT: target = HashMapHolder::Find(step.targetGUID); break; case HIGHGUID_CORPSE: target = HashMapHolder::Find(step.targetGUID); break; + case HIGHGUID_MO_TRANSPORT: + { + GameObject* go = HashMapHolder::Find(step.targetGUID); + target = go ? go->ToTransport() : NULL; + break; + } default: TC_LOG_ERROR(LOG_FILTER_TSCR, "%s target with unsupported high guid (GUID: " UI64FMTD ", high guid: %u).", step.script->GetDebugInfo().c_str(), step.targetGUID, GUID_HIPART(step.targetGUID)); diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index c60b09438c1..75da92158d1 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -786,10 +786,6 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) if (mi->HasExtraMovementFlag(MOVEMENTFLAG2_INTERPOLATED_MOVEMENT)) data >> mi->transport.time2; - - if (mi->pos.m_positionX != mi->transport.pos.m_positionX) - if (GetPlayer()->GetTransport()) - GetPlayer()->GetTransport()->UpdatePosition(mi); } if (mi->HasMovementFlag(MovementFlags(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || (mi->HasExtraMovementFlag(MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING))) diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 8ca2e1db56e..7ad7b68b210 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -80,6 +80,7 @@ #include "Warden.h" #include "CalendarMgr.h" #include "BattlefieldMgr.h" +#include "TransportMgr.h" ACE_Atomic_Op World::m_stopEvent = false; uint8 World::m_ExitCode = SHUTDOWN_EXIT_CODE; @@ -1374,6 +1375,9 @@ void World::SetInitialWorldSettings() TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, "Loading Game Object Templates..."); // must be after LoadPageTexts sObjectMgr->LoadGameObjectTemplate(); + TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, "Loading Transport templates..."); + sTransportMgr->LoadTransportTemplates(); + TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, "Loading Spell Rank Data..."); sSpellMgr->LoadSpellRanks(); @@ -1784,10 +1788,7 @@ void World::SetInitialWorldSettings() sBattlefieldMgr->InitBattlefield(); TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, "Loading Transports..."); - sMapMgr->LoadTransports(); - - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, "Loading Transport NPCs..."); - sMapMgr->LoadTransportNPCs(); + sTransportMgr->SpawnContinentTransports(); ///- Initialize Warden TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, "Loading Warden Checks..."); diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 199b1e43f6c..f33e583522e 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -31,6 +31,7 @@ EndScriptData */ #include "GridNotifiers.h" #include "GridNotifiersImpl.h" #include "GossipDef.h" +#include "Transport.h" #include "Language.h" #include @@ -91,6 +92,7 @@ public: { "areatriggers", rbac::RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS, false, &HandleDebugAreaTriggersCommand, "", NULL }, { "los", rbac::RBAC_PERM_COMMAND_DEBUG_LOS, false, &HandleDebugLoSCommand, "", NULL }, { "moveflags", rbac::RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS, false, &HandleDebugMoveflagsCommand, "", NULL }, + { "transport", rbac::RBAC_PERM_COMMAND_DEBUG_TRANSPORT, false, &HandleDebugTransportCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = @@ -1363,6 +1365,30 @@ public: handler->PSendSysMessage("Waypoint SQL written to SQL Developer log"); return true; } + + static bool HandleDebugTransportCommand(ChatHandler* handler, char const* args) + { + Transport* transport = handler->GetSession()->GetPlayer()->GetTransport(); + if (!transport) + return false; + + bool start = false; + if (!stricmp(args, "stop")) + transport->EnableMovement(false); + else if (!stricmp(args, "start")) + { + transport->EnableMovement(true); + start = true; + } + else + { + handler->PSendSysMessage("Transport %s is %s", transport->GetName().c_str(), transport->GetGoState() == GO_STATE_READY ? "stopped" : "moving"); + return true; + } + + handler->PSendSysMessage("Transport %s %s", transport->GetName().c_str(), start ? "started" : "stopped"); + return true; + } }; void AddSC_debug_commandscript() diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 1cedeb79c22..746904289be 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -245,24 +245,22 @@ public: float o = chr->GetOrientation(); Map* map = chr->GetMap(); - if (chr->GetTransport()) + if (Transport* trans = chr->GetTransport()) { - uint32 tguid = chr->GetTransport()->AddNPCPassenger(0, id, chr->GetTransOffsetX(), chr->GetTransOffsetY(), chr->GetTransOffsetZ(), chr->GetTransOffsetO()); - if (tguid > 0) - { - PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_CREATURE_TRANSPORT); + uint32 guid = sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT); + CreatureData& data = sObjectMgr->NewOrExistCreatureData(guid); + data.id = id; + data.phaseMask = chr->GetPhaseMaskForSpawn(); + data.posX = chr->GetTransOffsetX(); + data.posY = chr->GetTransOffsetY(); + data.posZ = chr->GetTransOffsetZ(); + data.orientation = chr->GetTransOffsetO(); - stmt->setInt32(0, int32(tguid)); - stmt->setInt32(1, int32(id)); - stmt->setInt32(2, int32(chr->GetTransport()->GetEntry())); - stmt->setFloat(3, chr->GetTransOffsetX()); - stmt->setFloat(4, chr->GetTransOffsetY()); - stmt->setFloat(5, chr->GetTransOffsetZ()); - stmt->setFloat(6, chr->GetTransOffsetO()); + Creature* creature = trans->CreateNPCPassenger(guid, &data); - WorldDatabase.Execute(stmt); - } + creature->SaveToDB(trans->GetGOInfo()->moTransport.mapID, 1 << map->GetSpawnMode(), chr->GetPhaseMaskForSpawn()); + sObjectMgr->AddCreatureToGrid(guid, &data); return true; } @@ -1337,7 +1335,8 @@ public: { if (!*args) return false; - char* charID = strtok((char*)args, " "); + + char* charID = handler->extractKeyFromLink((char*)args, "Hcreature_entry"); if (!charID) return false; From 81ec99c95e326ec1b98fff724f387dd077999368 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 16 Oct 2013 18:59:34 +0200 Subject: [PATCH 03/56] Build fix --- src/server/game/Entities/Transport/Transport.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index e6ca93307e7..9208cfda081 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -66,7 +66,7 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa TransportTemplate const* tInfo = sTransportMgr->GetTransportTemplate(entry); if (!tInfo) { - TC_LOG_ERROR(LOG_FILTER_SQL, "Transport %u (name: %s) will not be created, missing `transport_template` entry.", entry, goinfo->name); + TC_LOG_ERROR(LOG_FILTER_SQL, "Transport %u (name: %s) will not be created, missing `transport_template` entry.", entry, goinfo->name.c_str()); return false; } From 7f0f87d2433a17ca9f5fd7d5233fa0ed9bee012f Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 16 Oct 2013 19:14:00 +0200 Subject: [PATCH 04/56] Build fix --- src/server/game/Entities/GameObject/GameObject.cpp | 2 ++ src/server/game/Entities/Transport/Transport.cpp | 8 ++++---- src/server/game/Grids/Notifiers/GridNotifiers.cpp | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 9829b6019de..af92f0e9df4 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2157,6 +2157,8 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t case GAMEOBJECT_TYPE_MO_TRANSPORT: pathProgress = int16(float(m_goValue.Transport.PathProgress) / float(GetUInt32Value(GAMEOBJECT_LEVEL)) * 65535.0f); break; + default: + break; } fieldBuffer << uint16(dynFlags); diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 9208cfda081..9f227b13ee0 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -165,7 +165,7 @@ void Transport::Update(uint32 diff) sScriptMgr->OnRelocate(this, _currentFrame->Node->index, _currentFrame->Node->mapid, _currentFrame->Node->x, _currentFrame->Node->y, _currentFrame->Node->z); - TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "Transport %u (%s) moved to node %u %u %f %f %f", GetEntry(), GetName(), _currentFrame->Node->index, _currentFrame->Node->mapid, _currentFrame->Node->x, _currentFrame->Node->y, _currentFrame->Node->z); + TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "Transport %u (%s) moved to node %u %u %f %f %f", GetEntry(), GetName().c_str(), _currentFrame->Node->index, _currentFrame->Node->mapid, _currentFrame->Node->x, _currentFrame->Node->y, _currentFrame->Node->z); } // Set position @@ -189,7 +189,7 @@ void Transport::Update(uint32 diff) void Transport::AddPassenger(WorldObject* passenger) { if (_passengers.insert(passenger).second) - TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "Object %s boarded transport %s.", passenger->GetName(), GetName()); + TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "Object %s boarded transport %s.", passenger->GetName().c_str(), GetName().c_str()); if (Player* plr = passenger->ToPlayer()) sScriptMgr->OnAddPassenger(this, plr); @@ -198,7 +198,7 @@ void Transport::AddPassenger(WorldObject* passenger) void Transport::RemovePassenger(WorldObject* passenger) { if (_passengers.erase(passenger) || _staticPassengers.erase(passenger)) // static passenger can remove itself in case of grid unload - TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "Object %s removed from transport %s.", passenger->GetName(), GetName()); + TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "Object %s removed from transport %s.", passenger->GetName().c_str(), GetName().c_str()); if (Player* plr = passenger->ToPlayer()) @@ -553,7 +553,7 @@ void Transport::DoEventIfAny(KeyFrame const& node, bool departure) { if (uint32 eventid = departure ? node.Node->departureEventID : node.Node->arrivalEventID) { - TC_LOG_DEBUG(LOG_FILTER_MAPSCRIPTS, "Taxi %s event %u of node %u of %s path", departure ? "departure" : "arrival", eventid, node.Node->index, GetName()); + TC_LOG_DEBUG(LOG_FILTER_MAPSCRIPTS, "Taxi %s event %u of node %u of %s path", departure ? "departure" : "arrival", eventid, node.Node->index, GetName().c_str()); GetMap()->ScriptsStart(sEventScripts, eventid, this, this); EventInform(eventid); } diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp index 2d44f865c99..00b1e82a0ea 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp +++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp @@ -54,6 +54,8 @@ void VisibleNotifier::SendToSelf() case TYPEID_UNIT: i_player.UpdateVisibilityOf((*itr)->ToCreature(), i_data, i_visibleNow); break; + default: + break; } } } From e0cb49af9c505657a42b1580ce50ebc1bbc9b878 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 16 Oct 2013 19:30:29 +0200 Subject: [PATCH 05/56] Build fix --- src/server/game/Entities/Transport/Transport.cpp | 6 ++++++ src/server/game/Maps/TransportMgr.cpp | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 9f227b13ee0..29dc8fdcfad 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -465,6 +465,8 @@ void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z) newMap->AddToMap(go); break; } + default: + break; } } @@ -488,6 +490,8 @@ void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z) case TYPEID_PLAYER: (*itr)->ToPlayer()->TeleportTo(newMapid, x, y, z, (*itr)->GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT); break; + default: + break; } } @@ -541,6 +545,8 @@ void Transport::UpdatePassengerPositions(std::set& passengers) case TYPEID_GAMEOBJECT: GetMap()->GameObjectRelocation(passenger->ToGameObject(), x, y, z, o, false); break; + default: + break; } if (Unit* unit = passenger->ToUnit()) diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index 62995830c5d..b5469049cca 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -66,7 +66,7 @@ void TransportMgr::LoadTransportTemplates() GameObjectTemplate const* goInfo = sObjectMgr->GetGameObjectTemplate(entry); if (goInfo->moTransport.taxiPathId >= sTaxiPathNodesByPath.size()) { - TC_LOG_ERROR(LOG_FILTER_SQL, "Transport %u (name: %s) has an invalid path specified in `gameobject_template`.`data0` (%u) field, skipped.", entry, goInfo->name, goInfo->moTransport.taxiPathId); + TC_LOG_ERROR(LOG_FILTER_SQL, "Transport %u (name: %s) has an invalid path specified in `gameobject_template`.`data0` (%u) field, skipped.", entry, goInfo->name.c_str(), goInfo->moTransport.taxiPathId); continue; } @@ -363,7 +363,7 @@ Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map* { if (uint32(mapEntry->Instanceable()) != tInfo->inInstance) { - TC_LOG_ERROR(LOG_FILTER_TRANSPORTS, "Transport %u (name: %s) attempted creation in instance map (id: %u) but it is not an instanced transport!", entry, trans->GetName(), mapId); + TC_LOG_ERROR(LOG_FILTER_TRANSPORTS, "Transport %u (name: %s) attempted creation in instance map (id: %u) but it is not an instanced transport!", entry, trans->GetName().c_str(), mapId); delete trans; return NULL; } From 0f4fdb9bc44c14fcf6a8138250b82495eea23f76 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 16 Oct 2013 19:39:03 +0200 Subject: [PATCH 06/56] Fixed sql files for ce55647c415b710c6b440d96c2f26ebbc06c1d6e --- sql/updates/auth/2013_10_16_00_auth_misc.sql | 7 +++---- sql/updates/world/2013_10_16_00_world_command.sql | 4 ---- ...creature_transport.sql => 2013_10_16_00_world_misc.sql} | 6 ++++++ sql/updates/world/2013_10_16_00_world_transports.sql | 1 - 4 files changed, 9 insertions(+), 9 deletions(-) delete mode 100644 sql/updates/world/2013_10_16_00_world_command.sql rename sql/updates/world/{2013_10_16_00_world_creature_transport.sql => 2013_10_16_00_world_misc.sql} (98%) delete mode 100644 sql/updates/world/2013_10_16_00_world_transports.sql diff --git a/sql/updates/auth/2013_10_16_00_auth_misc.sql b/sql/updates/auth/2013_10_16_00_auth_misc.sql index cd7e8b3ae40..7b51d7a125f 100644 --- a/sql/updates/auth/2013_10_16_00_auth_misc.sql +++ b/sql/updates/auth/2013_10_16_00_auth_misc.sql @@ -5,7 +5,6 @@ DELETE FROM `rbac_permissions` WHERE `id`=@id; INSERT INTO `rbac_permissions` (`id`, `name`) VALUES (@id, 'debug transport'); --- Add permissions to "corresponding Commands Role" -DELETE FROM `rbac_role_permissions` WHERE `permissionId`=@id; -INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES -(3, @id); +DELETE FROM `rbac_linked_permissions` WHERE `linkedId`=@id; +INSERT INTO `rbac_linked_permissions` (`id`, `linkedId`) VALUES +(196, @id); diff --git a/sql/updates/world/2013_10_16_00_world_command.sql b/sql/updates/world/2013_10_16_00_world_command.sql deleted file mode 100644 index cabaad05920..00000000000 --- a/sql/updates/world/2013_10_16_00_world_command.sql +++ /dev/null @@ -1,4 +0,0 @@ -DELETE FROM `command` WHERE `name` = 'debug transport'; - -INSERT INTO `command` (`name`, `permission`, `help`) VALUES -('debug transport', 400, 'Syntax: .debug transport [start/stop]\r\n\r\n Allows to stop a transport at its nearest wait point and start movement of a stopped one. Not all transports can be started or stopped.'), diff --git a/sql/updates/world/2013_10_16_00_world_creature_transport.sql b/sql/updates/world/2013_10_16_00_world_misc.sql similarity index 98% rename from sql/updates/world/2013_10_16_00_world_creature_transport.sql rename to sql/updates/world/2013_10_16_00_world_misc.sql index da91f976f8f..ee2e7795f98 100644 --- a/sql/updates/world/2013_10_16_00_world_creature_transport.sql +++ b/sql/updates/world/2013_10_16_00_world_misc.sql @@ -1,3 +1,9 @@ +ALTER TABLE `transports` DROP `period`; + +DELETE FROM `command` WHERE `name` = 'debug transport'; +INSERT INTO `command` (`name`, `permission`, `help`) VALUES +('debug transport', 400, 'Syntax: .debug transport [start/stop]\r\n\r\n Allows to stop a transport at its nearest wait point and start movement of a stopped one. Not all transports can be started or stopped.'); + DROP TABLE IF EXISTS `creature_transport`; SET @GUID := 142717; diff --git a/sql/updates/world/2013_10_16_00_world_transports.sql b/sql/updates/world/2013_10_16_00_world_transports.sql deleted file mode 100644 index 1173d381abc..00000000000 --- a/sql/updates/world/2013_10_16_00_world_transports.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `transports` DROP `period`; From 574431721778223a14cc26f62229af06c82be0ee Mon Sep 17 00:00:00 2001 From: Filip Date: Wed, 16 Oct 2013 21:59:29 +0200 Subject: [PATCH 07/56] DB/SAI: Primordial Drake Egg/Hatchling Fixes #11051 by @dr-j and @untaught --- sql/updates/world/2013_10_16_01_world_sai.sql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sql/updates/world/2013_10_16_01_world_sai.sql diff --git a/sql/updates/world/2013_10_16_01_world_sai.sql b/sql/updates/world/2013_10_16_01_world_sai.sql new file mode 100644 index 00000000000..b387a428088 --- /dev/null +++ b/sql/updates/world/2013_10_16_01_world_sai.sql @@ -0,0 +1,15 @@ +UPDATE `creature_template` SET `AIname`='SmartAI' WHERE `entry`=28389; +DELETE FROM `smart_scripts` WHERE `entryorguid`=28389 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(28389,0,0,0,8,0,100,0,51592,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Primordial Hatchling - On Spel Hit(Pickup Primordial Hatchling) - Despawn'); +-- Creature_AI to Smart_AI Conversion for Primordial Drake Egg (ID 28408) and loot fix for Primordial Hatchling (ID 28389) +UPDATE `creature_template` SET `AIName`= 'SmartAI',`flags_extra`=`flags_extra`|2 WHERE `entry` =28408; +DELETE FROM `creature_ai_scripts` WHERE `creature_id` =28408; +-- Smart AI conversion for Primordial Egg creature ai scripts, also prevents these eggs from moving/auto attacking +DELETE FROM `smart_scripts` WHERE `entryorguid` =28408; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(28408,0,0,1,25,0,100,0,0,0, 0, 0, 21 ,0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "Primordial Drake Egg - On Spawn - Prevent Combat Movement"), +(28408,0,1,0,61,0,100,0,0,0, 0, 0, 20 ,0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "Primordial Drake Egg - Linked with Previous Event - Disable Combat"), +(28408,0,2,0,6 ,0,100,0,0,0, 0, 0, 11 ,51595, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, "Primordial Drake Egg - On Death - Cast Summon Primordial Hatchling"); +-- Remove Borean Leather, Icy Dragonscale and Book of Glyph Mastery from Primordial Hatchling as these are not meant to drop from these +DELETE FROM `creature_loot_template` WHERE `entry`=28389 AND `item` IN (33568,38557,45912); From e6440abc3f6de03a9be8d87e7054b73a48600852 Mon Sep 17 00:00:00 2001 From: Kinzcool Date: Wed, 16 Oct 2013 16:45:10 -0400 Subject: [PATCH 08/56] Corrected the graveyards for Onyxia's Lair instance. --- sql/updates/world/2013_10_16_02_world_game_graveyard_zone | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2013_10_16_02_world_game_graveyard_zone diff --git a/sql/updates/world/2013_10_16_02_world_game_graveyard_zone b/sql/updates/world/2013_10_16_02_world_game_graveyard_zone new file mode 100644 index 00000000000..882a8e68697 --- /dev/null +++ b/sql/updates/world/2013_10_16_02_world_game_graveyard_zone @@ -0,0 +1,2 @@ +DELETE FROM `game_graveyard_zone` WHERE `id`=631 AND `ghost_zone`=2159; +UPDATE `game_graveyard_zone` SET `id`=1265, `faction`=0 WHERE `ghost_zone`=2159; -- Dustwallow Marsh, Mudsprocket GY From c91a25f33960fd9b01092c09c14aeef48d46fa7e Mon Sep 17 00:00:00 2001 From: Kinzcool Date: Wed, 16 Oct 2013 16:50:34 -0400 Subject: [PATCH 09/56] Because Github commiting sucks. --- ...graveyard_zone => 2013_10_16_02_world_game_graveyard_zone.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2013_10_16_02_world_game_graveyard_zone => 2013_10_16_02_world_game_graveyard_zone.sql} (100%) diff --git a/sql/updates/world/2013_10_16_02_world_game_graveyard_zone b/sql/updates/world/2013_10_16_02_world_game_graveyard_zone.sql similarity index 100% rename from sql/updates/world/2013_10_16_02_world_game_graveyard_zone rename to sql/updates/world/2013_10_16_02_world_game_graveyard_zone.sql From 59fd2520fc3fd87a05857ba6a10bbfd0b10c36f1 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 17 Oct 2013 00:20:00 +0200 Subject: [PATCH 10/56] Core/Creatures: Removed remains of creature_transport table --- src/server/scripts/Commands/cs_npc.cpp | 11 ----------- .../shared/Database/Implementation/WorldDatabase.cpp | 2 -- .../shared/Database/Implementation/WorldDatabase.h | 2 -- 3 files changed, 15 deletions(-) diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 746904289be..a1b23fd5935 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -897,17 +897,6 @@ public: return false; } - if (target->GetTransport() && target->GetGUIDTransport()) - { - PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_TRANSPORT_EMOTE); - - stmt->setInt32(0, int32(emote)); - stmt->setInt32(1, target->GetTransport()->GetEntry()); - stmt->setInt32(2, target->GetGUIDTransport()); - - WorldDatabase.Execute(stmt); - } - target->SetUInt32Value(UNIT_NPC_EMOTESTATE, emote); return true; diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp index 41280471bd4..f27ee2b72e0 100644 --- a/src/server/shared/Database/Implementation/WorldDatabase.cpp +++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp @@ -75,8 +75,6 @@ void WorldDatabaseConnection::DoPrepareStatements() PrepareStatement(WORLD_UPD_WAYPOINT_SCRIPT_O, "UPDATE waypoint_scripts SET o = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID, "SELECT id FROM waypoint_scripts WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_DEL_CREATURE, "DELETE FROM creature WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(WORLD_INS_CREATURE_TRANSPORT, "INSERT INTO creature_transport (guid, npc_entry, transport_entry, TransOffsetX, TransOffsetY, TransOffsetZ, TransOffsetO) values (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); - PrepareStatement(WORLD_UPD_CREATURE_TRANSPORT_EMOTE, "UPDATE creature_transport SET emote = ? WHERE transport_entry = ? AND guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_SEL_COMMANDS, "SELECT name, permission, help FROM command", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction_A, faction_H, npcflag, speed_walk, speed_run, scale, rank, mindmg, maxdmg, dmgschool, attackpower, dmg_multiplier, baseattacktime, rangeattacktime, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, minrangedmg, maxrangedmg, rangedattackpower, type, type_flags, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, Health_mod, Mana_mod, Armor_mod, RacialLeader, questItem1, questItem2, questItem3, questItem4, questItem5, questItem6, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_BY_ID, "SELECT guid, delay, command, datalong, datalong2, dataint, x, y, z, o FROM waypoint_scripts WHERE id = ?", CONNECTION_SYNCH); diff --git a/src/server/shared/Database/Implementation/WorldDatabase.h b/src/server/shared/Database/Implementation/WorldDatabase.h index 171627bb83a..b17aa0dedbb 100644 --- a/src/server/shared/Database/Implementation/WorldDatabase.h +++ b/src/server/shared/Database/Implementation/WorldDatabase.h @@ -95,8 +95,6 @@ enum WorldDatabaseStatements WORLD_UPD_WAYPOINT_SCRIPT_O, WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID, WORLD_DEL_CREATURE, - WORLD_INS_CREATURE_TRANSPORT, - WORLD_UPD_CREATURE_TRANSPORT_EMOTE, WORLD_SEL_COMMANDS, WORLD_SEL_CREATURE_TEMPLATE, WORLD_SEL_WAYPOINT_SCRIPT_BY_ID, From 565dd4299cde1f878e3f9c72a72c7c2665d51a3f Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 17 Oct 2013 00:55:50 +0200 Subject: [PATCH 11/56] Build fix --- src/server/game/Grids/ObjectGridLoader.cpp | 9 +++++++++ src/server/game/Maps/Map.cpp | 17 ++++++++++++----- src/server/game/Maps/Map.h | 6 ++---- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index b2ddd6b8a4a..d124cd57276 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -95,6 +95,15 @@ template<> void ObjectGridLoader::SetObjectCell(GameObject* obj, CellCoord const template void AddObjectHelper(CellCoord &cell, GridRefManager &m, uint32 &count, Map* map, T *obj) +{ + obj->AddToGrid(m); + ObjectGridLoader::SetObjectCell(obj, cell); + obj->AddToWorld(); + ++count; +} + +template <> +void AddObjectHelper(CellCoord &cell, CreatureMapType &m, uint32 &count, Map* map, Creature *obj) { obj->AddToGrid(m); ObjectGridLoader::SetObjectCell(obj, cell); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 46eee6613fe..2f4194b3f5f 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2541,10 +2541,15 @@ void Map::AddToActive(Creature* c) } } +template<> +void Map::AddToActive(DynamicObject* d) +{ + AddToActiveHelper(d); +} + template void Map::RemoveFromActive(T* obj) { - RemoveFromActiveHelper(obj); } template <> @@ -2569,6 +2574,12 @@ void Map::RemoveFromActive(Creature* c) } } +template<> +void Map::RemoveFromActive(DynamicObject* obj) +{ + RemoveFromActiveHelper(obj); +} + template bool Map::AddToMap(Corpse*); template bool Map::AddToMap(Creature*); template bool Map::AddToMap(GameObject*); @@ -2579,10 +2590,6 @@ template void Map::RemoveFromMap(Creature*, bool); template void Map::RemoveFromMap(GameObject*, bool); template void Map::RemoveFromMap(DynamicObject*, bool); -template void Map::AddToActive(DynamicObject*); - -template void Map::RemoveFromActive(DynamicObject*); - /* ******* Dungeon Instance Maps ******* */ InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode, Map* _parent) diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index c57f7d36bc6..932f3e213ae 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -603,14 +603,12 @@ class Map : public GridRefManager template void DeleteFromWorld(T*); - template - void AddToActiveHelper(T* obj) + void AddToActiveHelper(WorldObject* obj) { m_activeNonPlayers.insert(obj); } - template - void RemoveFromActiveHelper(T* obj) + void RemoveFromActiveHelper(WorldObject* obj) { // Map::Update for active object in proccess if (m_activeNonPlayersIter != m_activeNonPlayers.end()) From a0b3863bd16789554eb080a0eaa02c5ae0d011b3 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Thu, 17 Oct 2013 12:17:47 +0200 Subject: [PATCH 12/56] SQL: Update auth base --- sql/base/auth_database.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index a52d4875314..003b91b6286 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -317,7 +317,7 @@ CREATE TABLE `rbac_linked_permissions` ( LOCK TABLES `rbac_linked_permissions` WRITE; /*!40000 ALTER TABLE `rbac_linked_permissions` DISABLE KEYS */; -INSERT INTO `rbac_linked_permissions` VALUES (192,21),(192,42),(192,43),(192,193),(192,196),(193,48),(193,194),(193,197),(194,1),(194,2),(194,11),(194,13),(194,14),(194,15),(194,16),(194,17),(194,18),(194,19),(194,20),(194,22),(194,23),(194,25),(194,26),(194,27),(194,28),(194,29),(194,30),(194,31),(194,32),(194,33),(194,34),(194,35),(194,36),(194,37),(194,38),(194,39),(194,40),(194,41),(194,44),(194,46),(194,47),(194,195),(194,198),(195,3),(195,4),(195,5),(195,6),(195,24),(195,49),(195,199),(196,200),(196,201),(196,226),(196,227),(196,230),(196,231),(196,233),(196,234),(196,235),(196,238),(196,239),(196,240),(196,241),(196,242),(196,243),(196,244),(196,245),(196,246),(196,247),(196,248),(196,249),(196,250),(196,251),(196,252),(196,253),(196,254),(196,255),(196,256),(196,257),(196,258),(196,259),(196,260),(196,261),(196,262),(196,264),(196,265),(196,266),(196,267),(196,268),(196,269),(196,270),(196,271),(196,272),(196,279),(196,280),(196,283),(196,287),(196,288),(196,289),(196,290),(196,291),(196,292),(196,293),(196,294),(196,295),(196,296),(196,297),(196,298),(196,299),(196,302),(196,303),(196,304),(196,305),(196,306),(196,307),(196,308),(196,309),(196,310),(196,313),(196,314),(196,319),(196,320),(196,321),(196,322),(196,323),(196,324),(196,325),(196,326),(196,327),(196,328),(196,329),(196,330),(196,331),(196,332),(196,333),(196,334),(196,335),(196,336),(196,337),(196,338),(196,339),(196,340),(196,341),(196,342),(196,343),(196,344),(196,345),(196,346),(196,347),(196,348),(196,349),(196,350),(196,351),(196,352),(196,353),(196,354),(196,355),(196,356),(196,357),(196,358),(196,359),(196,360),(196,361),(196,362),(196,363),(196,364),(196,365),(196,366),(196,373),(196,375),(196,401),(196,402),(196,403),(196,404),(196,405),(196,406),(196,407),(196,417),(196,418),(196,419),(196,420),(196,421),(196,422),(196,423),(196,424),(196,425),(196,426),(196,427),(196,428),(196,429),(196,434),(196,435),(196,436),(196,437),(196,438),(196,439),(196,440),(196,441),(196,442),(196,443),(196,444),(196,445),(196,446),(196,447),(196,448),(196,449),(196,450),(196,451),(196,452),(196,453),(196,454),(196,455),(196,456),(196,457),(196,458),(196,459),(196,461),(196,463),(196,464),(196,465),(196,472),(196,473),(196,474),(196,475),(196,476),(196,477),(196,478),(196,488),(196,489),(196,491),(196,492),(196,493),(196,495),(196,497),(196,498),(196,499),(196,500),(196,502),(196,503),(196,505),(196,508),(196,511),(196,513),(196,514),(196,516),(196,519),(196,522),(196,523),(196,526),(196,527),(196,529),(196,530),(196,533),(196,535),(196,536),(196,537),(196,538),(196,539),(196,540),(196,541),(196,556),(196,581),(196,582),(196,592),(196,593),(196,596),(196,602),(196,603),(196,604),(196,605),(196,606),(196,607),(196,608),(196,609),(196,610),(196,611),(196,612),(196,613),(196,614),(196,615),(196,616),(196,617),(196,618),(196,619),(196,620),(196,621),(196,622),(196,623),(196,624),(196,625),(196,626),(196,627),(196,628),(196,629),(196,630),(196,631),(196,632),(196,633),(196,634),(196,635),(196,636),(196,637),(196,638),(196,639),(196,640),(196,641),(196,642),(196,643),(196,644),(196,645),(196,646),(196,647),(196,648),(196,649),(196,650),(196,651),(196,652),(196,653),(196,654),(196,655),(196,656),(196,657),(196,658),(196,659),(196,660),(196,661),(196,662),(196,663),(196,664),(196,665),(196,666),(196,667),(196,668),(196,669),(196,670),(196,671),(196,672),(196,673),(196,674),(196,675),(196,676),(196,677),(196,678),(196,679),(196,680),(196,681),(196,682),(196,683),(196,684),(196,685),(196,686),(196,687),(196,688),(196,689),(196,690),(196,691),(196,692),(196,693),(196,694),(196,695),(196,696),(196,697),(196,698),(196,699),(196,700),(196,701),(196,702),(196,703),(196,704),(196,705),(196,706),(196,707),(196,708),(196,709),(196,710),(196,711),(196,712),(196,713),(196,714),(196,715),(196,716),(196,717),(196,718),(196,719),(196,721),(196,722),(196,723),(196,724),(196,725),(196,726),(196,727),(196,728),(196,729),(196,730),(196,733),(196,734),(196,735),(196,736),(196,738),(196,739),(196,748),(196,753),(196,757),(196,773),(197,232),(197,236),(197,237),(197,273),(197,274),(197,275),(197,276),(197,277),(197,284),(197,285),(197,286),(197,301),(197,311),(197,387),(197,388),(197,389),(197,390),(197,391),(197,392),(197,393),(197,394),(197,395),(197,396),(197,397),(197,398),(197,399),(197,479),(197,480),(197,481),(197,482),(197,485),(197,486),(197,487),(197,494),(197,506),(197,509),(197,510),(197,517),(197,518),(197,521),(197,542),(197,543),(197,550),(197,558),(197,568),(197,571),(197,572),(197,573),(197,574),(197,575),(197,576),(197,577),(197,578),(197,579),(197,580),(197,583),(197,584),(197,585),(197,586),(197,587),(197,588),(197,589),(197,590),(197,591),(197,594),(197,595),(197,601),(197,743),(197,750),(197,758),(197,761),(197,762),(197,763),(197,764),(197,765),(197,766),(197,767),(197,768),(197,769),(197,770),(197,771),(197,772),(197,774),(198,218),(198,300),(198,312),(198,315),(198,316),(198,317),(198,318),(198,367),(198,368),(198,369),(198,370),(198,371),(198,372),(198,374),(198,376),(198,377),(198,378),(198,379),(198,380),(198,381),(198,382),(198,383),(198,384),(198,385),(198,386),(198,408),(198,409),(198,410),(198,411),(198,412),(198,413),(198,414),(198,415),(198,416),(198,430),(198,431),(198,432),(198,433),(198,462),(198,466),(198,467),(198,468),(198,469),(198,470),(198,471),(198,483),(198,484),(198,490),(198,504),(198,512),(198,515),(198,520),(198,524),(198,528),(198,531),(198,532),(198,544),(198,545),(198,546),(198,547),(198,548),(198,549),(198,551),(198,552),(198,553),(198,554),(198,555),(198,557),(198,559),(198,560),(198,561),(198,562),(198,563),(198,564),(198,565),(198,566),(198,567),(198,569),(198,570),(198,597),(198,598),(198,599),(198,600),(198,737),(198,740),(198,741),(198,742),(198,744),(198,745),(198,746),(198,747),(198,749),(198,751),(198,752),(198,754),(198,755),(198,756),(198,759),(198,760),(199,217),(199,221),(199,222),(199,223),(199,225),(199,263),(199,496),(199,501),(199,507),(199,525),(199,534); +INSERT INTO `rbac_linked_permissions` VALUES (192,21),(192,42),(192,43),(192,193),(192,196),(193,48),(193,194),(193,197),(194,1),(194,2),(194,11),(194,13),(194,14),(194,15),(194,16),(194,17),(194,18),(194,19),(194,20),(194,22),(194,23),(194,25),(194,26),(194,27),(194,28),(194,29),(194,30),(194,31),(194,32),(194,33),(194,34),(194,35),(194,36),(194,37),(194,38),(194,39),(194,40),(194,41),(194,44),(194,46),(194,47),(194,195),(194,198),(195,3),(195,4),(195,5),(195,6),(195,24),(195,49),(195,199),(196,200),(196,201),(196,226),(196,227),(196,230),(196,231),(196,233),(196,234),(196,235),(196,238),(196,239),(196,240),(196,241),(196,242),(196,243),(196,244),(196,245),(196,246),(196,247),(196,248),(196,249),(196,250),(196,251),(196,252),(196,253),(196,254),(196,255),(196,256),(196,257),(196,258),(196,259),(196,260),(196,261),(196,262),(196,264),(196,265),(196,266),(196,267),(196,268),(196,269),(196,270),(196,271),(196,272),(196,279),(196,280),(196,283),(196,287),(196,288),(196,289),(196,290),(196,291),(196,292),(196,293),(196,294),(196,295),(196,296),(196,297),(196,298),(196,299),(196,302),(196,303),(196,304),(196,305),(196,306),(196,307),(196,308),(196,309),(196,310),(196,313),(196,314),(196,319),(196,320),(196,321),(196,322),(196,323),(196,324),(196,325),(196,326),(196,327),(196,328),(196,329),(196,330),(196,331),(196,332),(196,333),(196,334),(196,335),(196,336),(196,337),(196,338),(196,339),(196,340),(196,341),(196,342),(196,343),(196,344),(196,345),(196,346),(196,347),(196,348),(196,349),(196,350),(196,351),(196,352),(196,353),(196,354),(196,355),(196,356),(196,357),(196,358),(196,359),(196,360),(196,361),(196,362),(196,363),(196,364),(196,365),(196,366),(196,373),(196,375),(196,400),(196,401),(196,402),(196,403),(196,404),(196,405),(196,406),(196,407),(196,417),(196,418),(196,419),(196,420),(196,421),(196,422),(196,423),(196,424),(196,425),(196,426),(196,427),(196,428),(196,429),(196,434),(196,435),(196,436),(196,437),(196,438),(196,439),(196,440),(196,441),(196,442),(196,443),(196,444),(196,445),(196,446),(196,447),(196,448),(196,449),(196,450),(196,451),(196,452),(196,453),(196,454),(196,455),(196,456),(196,457),(196,458),(196,459),(196,461),(196,463),(196,464),(196,465),(196,472),(196,473),(196,474),(196,475),(196,476),(196,477),(196,478),(196,488),(196,489),(196,491),(196,492),(196,493),(196,495),(196,497),(196,498),(196,499),(196,500),(196,502),(196,503),(196,505),(196,508),(196,511),(196,513),(196,514),(196,516),(196,519),(196,522),(196,523),(196,526),(196,527),(196,529),(196,530),(196,533),(196,535),(196,536),(196,537),(196,538),(196,539),(196,540),(196,541),(196,556),(196,581),(196,582),(196,592),(196,593),(196,596),(196,602),(196,603),(196,604),(196,605),(196,606),(196,607),(196,608),(196,609),(196,610),(196,611),(196,612),(196,613),(196,614),(196,615),(196,616),(196,617),(196,618),(196,619),(196,620),(196,621),(196,622),(196,623),(196,624),(196,625),(196,626),(196,627),(196,628),(196,629),(196,630),(196,631),(196,632),(196,633),(196,634),(196,635),(196,636),(196,637),(196,638),(196,639),(196,640),(196,641),(196,642),(196,643),(196,644),(196,645),(196,646),(196,647),(196,648),(196,649),(196,650),(196,651),(196,652),(196,653),(196,654),(196,655),(196,656),(196,657),(196,658),(196,659),(196,660),(196,661),(196,662),(196,663),(196,664),(196,665),(196,666),(196,667),(196,668),(196,669),(196,670),(196,671),(196,672),(196,673),(196,674),(196,675),(196,676),(196,677),(196,678),(196,679),(196,680),(196,681),(196,682),(196,683),(196,684),(196,685),(196,686),(196,687),(196,688),(196,689),(196,690),(196,691),(196,692),(196,693),(196,694),(196,695),(196,696),(196,697),(196,698),(196,699),(196,700),(196,701),(196,702),(196,703),(196,704),(196,705),(196,706),(196,707),(196,708),(196,709),(196,710),(196,711),(196,712),(196,713),(196,714),(196,715),(196,716),(196,717),(196,718),(196,719),(196,721),(196,722),(196,723),(196,724),(196,725),(196,726),(196,727),(196,728),(196,729),(196,730),(196,733),(196,734),(196,735),(196,736),(196,738),(196,739),(196,748),(196,753),(196,757),(196,773),(197,232),(197,236),(197,237),(197,273),(197,274),(197,275),(197,276),(197,277),(197,284),(197,285),(197,286),(197,301),(197,311),(197,387),(197,388),(197,389),(197,390),(197,391),(197,392),(197,393),(197,394),(197,395),(197,396),(197,397),(197,398),(197,399),(197,479),(197,480),(197,481),(197,482),(197,485),(197,486),(197,487),(197,494),(197,506),(197,509),(197,510),(197,517),(197,518),(197,521),(197,542),(197,543),(197,550),(197,558),(197,568),(197,571),(197,572),(197,573),(197,574),(197,575),(197,576),(197,577),(197,578),(197,579),(197,580),(197,583),(197,584),(197,585),(197,586),(197,587),(197,588),(197,589),(197,590),(197,591),(197,594),(197,595),(197,601),(197,743),(197,750),(197,758),(197,761),(197,762),(197,763),(197,764),(197,765),(197,766),(197,767),(197,768),(197,769),(197,770),(197,771),(197,772),(197,774),(198,218),(198,300),(198,312),(198,315),(198,316),(198,317),(198,318),(198,367),(198,368),(198,369),(198,370),(198,371),(198,372),(198,374),(198,376),(198,377),(198,378),(198,379),(198,380),(198,381),(198,382),(198,383),(198,384),(198,385),(198,386),(198,408),(198,409),(198,410),(198,411),(198,412),(198,413),(198,414),(198,415),(198,416),(198,430),(198,431),(198,432),(198,433),(198,462),(198,466),(198,467),(198,468),(198,469),(198,470),(198,471),(198,483),(198,484),(198,490),(198,504),(198,512),(198,515),(198,520),(198,524),(198,528),(198,531),(198,532),(198,544),(198,545),(198,546),(198,547),(198,548),(198,549),(198,551),(198,552),(198,553),(198,554),(198,555),(198,557),(198,559),(198,560),(198,561),(198,562),(198,563),(198,564),(198,565),(198,566),(198,567),(198,569),(198,570),(198,597),(198,598),(198,599),(198,600),(198,737),(198,740),(198,741),(198,742),(198,744),(198,745),(198,746),(198,747),(198,749),(198,751),(198,752),(198,754),(198,755),(198,756),(198,759),(198,760),(199,217),(199,221),(199,222),(199,223),(199,225),(199,263),(199,496),(199,501),(199,507),(199,525),(199,534); /*!40000 ALTER TABLE `rbac_linked_permissions` ENABLE KEYS */; UNLOCK TABLES; @@ -341,7 +341,7 @@ CREATE TABLE `rbac_permissions` ( LOCK TABLES `rbac_permissions` WRITE; /*!40000 ALTER TABLE `rbac_permissions` DISABLE KEYS */; -INSERT INTO `rbac_permissions` VALUES (1,'Instant logout'),(2,'Skip Queue'),(3,'Join Normal Battleground'),(4,'Join Random Battleground'),(5,'Join Arenas'),(6,'Join Dungeon Finder'),(11,'Log GM trades'),(13,'Skip Instance required bosses check'),(14,'Skip character creation team mask check'),(15,'Skip character creation class mask check'),(16,'Skip character creation race mask check'),(17,'Skip character creation reserved name check'),(18,'Skip character creation heroic min level check'),(19,'Skip needed requirements to use channel check'),(20,'Skip disable map check'),(21,'Skip reset talents when used more than allowed check'),(22,'Skip spam chat check'),(23,'Skip over-speed ping check'),(24,'Two side faction characters on the same account'),(25,'Allow say chat between factions'),(26,'Allow channel chat between factions'),(27,'Two side mail interaction'),(28,'See two side who list'),(29,'Add friends of other faction'),(30,'Save character without delay with .save command'),(31,'Use params with .unstuck command'),(32,'Can be assigned tickets with .assign ticket command'),(33,'Notify if a command was not found'),(34,'Check if should appear in list using .gm ingame command'),(35,'See all security levels with who command'),(36,'Filter whispers'),(37,'Use staff badge in chat'),(38,'Resurrect with full Health Points'),(39,'Restore saved gm setting states'),(40,'Allows to add a gm to friend list'),(41,'Use Config option START_GM_LEVEL to assign new character level'),(42,'Allows to use CMSG_WORLD_TELEPORT opcode'),(43,'Allows to use CMSG_WHOIS opcode'),(44,'Receive global GM messages/texts'),(45,'Join channels without announce'),(46,'Change channel settings without being channel moderator'),(47,'Enables lower security than target check'),(48,'Enable IP, Last Login and EMail output in pinfo'),(49,'Forces to enter the email for confirmation on password change'),(50,'Allow user to check his own email with .account'),(192,'Role: Sec Level Administrator'),(193,'Role: Sec Level Gamemaster'),(194,'Role: Sec Level Moderator'),(195,'Role: Sec Level Player'),(196,'Role: Administrator Commands'),(197,'Role: Gamemaster Commands'),(198,'Role: Moderator Commands'),(199,'Role: Player Commands'),(200,'Command: rbac'),(201,'Command: rbac account'),(202,'Command: rbac account list'),(203,'Command: rbac account grant'),(204,'Command: rbac account deny'),(205,'Command: rbac account revoke'),(206,'Command: rbac list'),(217,'Command: account'),(218,'Command: account addon'),(219,'Command: account create'),(220,'Command: account delete'),(221,'Command: account lock'),(222,'Command: account lock country'),(223,'Command: account lock ip'),(224,'Command: account onlinelist'),(225,'Command: account password'),(226,'Command: account set'),(227,'Command: account set addon'),(228,'Command: account set gmlevel'),(229,'Command: account set password'),(230,'Command: achievement'),(231,'Command: achievement add'),(232,'Command: arena'),(233,'Command: arena captain'),(234,'Command: arena create'),(235,'Command: arena disband'),(236,'Command: arena info'),(237,'Command: arena lookup'),(238,'Command: arena rename'),(239,'Command: ban'),(240,'Command: ban account'),(241,'Command: ban character'),(242,'Command: ban ip'),(243,'Command: ban playeraccount'),(244,'Command: baninfo'),(245,'Command: baninfo account'),(246,'Command: baninfo character'),(247,'Command: baninfo ip'),(248,'Command: banlist'),(249,'Command: banlist account'),(250,'Command: banlist character'),(251,'Command: banlist ip'),(252,'Command: unban'),(253,'Command: unban account'),(254,'Command: unban character'),(255,'Command: unban ip'),(256,'Command: unban playeraccount'),(257,'Command: bf'),(258,'Command: bf start'),(259,'Command: bf stop'),(260,'Command: bf switch'),(261,'Command: bf timer'),(262,'Command: bf enable'),(263,'Command: account email'),(264,'Command: account set sec'),(265,'Command: account set sec email'),(266,'Command: account set sec regmail'),(267,'Command: cast'),(268,'Command: cast back'),(269,'Command: cast dist'),(270,'Command: cast self'),(271,'Command: cast target'),(272,'Command: cast dest'),(273,'Command: character'),(274,'Command: character customize'),(275,'Command: character changefaction'),(276,'Command: character changerace'),(277,'Command: character deleted'),(279,'Command: character deleted list'),(280,'Command: character deleted restore'),(283,'Command: character level'),(284,'Command: character rename'),(285,'Command: character reputation'),(286,'Command: character titles'),(287,'Command: levelup'),(288,'Command: pdump'),(289,'Command: pdump load'),(290,'Command: pdump write'),(291,'Command: cheat'),(292,'Command: cheat casttime'),(293,'Command: cheat cooldown'),(294,'Command: cheat explore'),(295,'Command: cheat god'),(296,'Command: cheat power'),(297,'Command: cheat status'),(298,'Command: cheat taxi'),(299,'Command: cheat waterwalk'),(300,'Command: debug'),(301,'Command: debug anim'),(302,'Command: debug areatriggers'),(303,'Command: debug arena'),(304,'Command: debug bg'),(305,'Command: debug entervehicle'),(306,'Command: debug getitemstate'),(307,'Command: debug getitemvalue'),(308,'Command: debug getvalue'),(309,'Command: debug hostil'),(310,'Command: debug itemexpire'),(311,'Command: debug lootrecipient'),(312,'Command: debug los'),(313,'Command: debug mod32value'),(314,'Command: debug moveflags'),(315,'Command: debug play'),(316,'Command: debug play cinematics'),(317,'Command: debug play movie'),(318,'Command: debug play sound'),(319,'Command: debug send'),(320,'Command: debug send buyerror'),(321,'Command: debug send channelnotify'),(322,'Command: debug send chatmessage'),(323,'Command: debug send equiperror'),(324,'Command: debug send largepacket'),(325,'Command: debug send opcode'),(326,'Command: debug send qinvalidmsg'),(327,'Command: debug send qpartymsg'),(328,'Command: debug send sellerror'),(329,'Command: debug send setphaseshift'),(330,'Command: debug send spellfail'),(331,'Command: debug setaurastate'),(332,'Command: debug setbit'),(333,'Command: debug setitemvalue'),(334,'Command: debug setvalue'),(335,'Command: debug setvid'),(336,'Command: debug spawnvehicle'),(337,'Command: debug threat'),(338,'Command: debug update'),(339,'Command: debug uws'),(340,'Command: wpgps'),(341,'Command: deserter'),(342,'Command: deserter bg'),(343,'Command: deserter bg add'),(344,'Command: deserter bg remove'),(345,'Command: deserter instance'),(346,'Command: deserter instance add'),(347,'Command: deserter instance remove'),(348,'Command: disable'),(349,'Command: disable add'),(350,'Command: disable add achievement_criteria'),(351,'Command: disable add battleground'),(352,'Command: disable add map'),(353,'Command: disable add mmap'),(354,'Command: disable add outdoorpvp'),(355,'Command: disable add quest'),(356,'Command: disable add spell'),(357,'Command: disable add vmap'),(358,'Command: disable remove'),(359,'Command: disable remove achievement_criteria'),(360,'Command: disable remove battleground'),(361,'Command: disable remove map'),(362,'Command: disable remove mmap'),(363,'Command: disable remove outdoorpvp'),(364,'Command: disable remove quest'),(365,'Command: disable remove spell'),(366,'Command: disable remove vmap'),(367,'Command: event'),(368,'Command: event activelist'),(369,'Command: event start'),(370,'Command: event stop'),(371,'Command: gm'),(372,'Command: gm chat'),(373,'Command: gm fly'),(374,'Command: gm ingame'),(375,'Command: gm list'),(376,'Command: gm visible'),(377,'Command: go'),(378,'Command: go creature'),(379,'Command: go graveyard'),(380,'Command: go grid'),(381,'Command: go object'),(382,'Command: go taxinode'),(383,'Command: go ticket'),(384,'Command: go trigger'),(385,'Command: go xyz'),(386,'Command: go zonexy'),(387,'Command: gobject'),(388,'Command: gobject activate'),(389,'Command: gobject add'),(390,'Command: gobject add temp'),(391,'Command: gobject delete'),(392,'Command: gobject info'),(393,'Command: gobject move'),(394,'Command: gobject near'),(395,'Command: gobject set'),(396,'Command: gobject set phase'),(397,'Command: gobject set state'),(398,'Command: gobject target'),(399,'Command: gobject turn'),(401,'Command: guild'),(402,'Command: guild create'),(403,'Command: guild delete'),(404,'Command: guild invite'),(405,'Command: guild uninvite'),(406,'Command: guild rank'),(407,'Command: guild rename'),(408,'Command: honor'),(409,'Command: honor add'),(410,'Command: honor add kill'),(411,'Command: honor update'),(412,'Command: instance'),(413,'Command: instance listbinds'),(414,'Command: instance unbind'),(415,'Command: instance stats'),(416,'Command: instance savedata'),(417,'Command: learn'),(418,'Command: learn all'),(419,'Command: learn all my'),(420,'Command: learn all my class'),(421,'Command: learn all my pettalents'),(422,'Command: learn all my spells'),(423,'Command: learn all my talents'),(424,'Command: learn all gm'),(425,'Command: learn all crafts'),(426,'Command: learn all default'),(427,'Command: learn all lang'),(428,'Command: learn all recipes'),(429,'Command: unlearn'),(430,'Command: lfg'),(431,'Command: lfg player'),(432,'Command: lfg group'),(433,'Command: lfg queue'),(434,'Command: lfg clean'),(435,'Command: lfg options'),(436,'Command: list'),(437,'Command: list creature'),(438,'Command: list item'),(439,'Command: list object'),(440,'Command: list auras'),(441,'Command: list mail'),(442,'Command: lookup'),(443,'Command: lookup area'),(444,'Command: lookup creature'),(445,'Command: lookup event'),(446,'Command: lookup faction'),(447,'Command: lookup item'),(448,'Command: lookup itemset'),(449,'Command: lookup object'),(450,'Command: lookup quest'),(451,'Command: lookup player'),(452,'Command: lookup player ip'),(453,'Command: lookup player account'),(454,'Command: lookup player email'),(455,'Command: lookup skill'),(456,'Command: lookup spell'),(457,'Command: lookup spell id'),(458,'Command: lookup taxinode'),(459,'Command: lookup tele'),(460,'Command: lookup title'),(461,'Command: lookup map'),(462,'Command: announce'),(463,'Command: channel'),(464,'Command: channel set'),(465,'Command: channel set ownership'),(466,'Command: gmannounce'),(467,'Command: gmnameannounce'),(468,'Command: gmnotify'),(469,'Command: nameannounce'),(470,'Command: notify'),(471,'Command: whispers'),(472,'Command: group'),(473,'Command: group leader'),(474,'Command: group disband'),(475,'Command: group remove'),(476,'Command: group join'),(477,'Command: group list'),(478,'Command: group summon'),(479,'Command: pet'),(480,'Command: pet create'),(481,'Command: pet learn'),(482,'Command: pet unlearn'),(483,'Command: send'),(484,'Command: send items'),(485,'Command: send mail'),(486,'Command: send message'),(487,'Command: send money'),(488,'Command: additem'),(489,'Command: additemset'),(490,'Command: appear'),(491,'Command: aura'),(492,'Command: bank'),(493,'Command: bindsight'),(494,'Command: combatstop'),(495,'Command: cometome'),(496,'Command: commands'),(497,'Command: cooldown'),(498,'Command: damage'),(499,'Command: dev'),(500,'Command: die'),(501,'Command: dismount'),(502,'Command: distance'),(503,'Command: flusharenapoints'),(504,'Command: freeze'),(505,'Command: gps'),(506,'Command: guid'),(507,'Command: help'),(508,'Command: hidearea'),(509,'Command: itemmove'),(510,'Command: kick'),(511,'Command: linkgrave'),(512,'Command: listfreeze'),(513,'Command: maxskill'),(514,'Command: movegens'),(515,'Command: mute'),(516,'Command: neargrave'),(517,'Command: pinfo'),(518,'Command: playall'),(519,'Command: possess'),(520,'Command: recall'),(521,'Command: repairitems'),(522,'Command: respawn'),(523,'Command: revive'),(524,'Command: saveall'),(525,'Command: save'),(526,'Command: setskill'),(527,'Command: showarea'),(528,'Command: summon'),(529,'Command: unaura'),(530,'Command: unbindsight'),(531,'Command: unfreeze'),(532,'Command: unmute'),(533,'Command: unpossess'),(534,'Command: unstuck'),(535,'Command: wchange'),(536,'Command: mmap'),(537,'Command: mmap loadedtiles'),(538,'Command: mmap loc'),(539,'Command: mmap path'),(540,'Command: mmap stats'),(541,'Command: mmap testarea'),(542,'Command: morph'),(543,'Command: demorph'),(544,'Command: modify'),(545,'Command: modify arenapoints'),(546,'Command: modify bit'),(547,'Command: modify drunk'),(548,'Command: modify energy'),(549,'Command: modify faction'),(550,'Command: modify gender'),(551,'Command: modify honor'),(552,'Command: modify hp'),(553,'Command: modify mana'),(554,'Command: modify money'),(555,'Command: modify mount'),(556,'Command: modify phase'),(557,'Command: modify rage'),(558,'Command: modify reputation'),(559,'Command: modify runicpower'),(560,'Command: modify scale'),(561,'Command: modify speed'),(562,'Command: modify speed all'),(563,'Command: modify speed backwalk'),(564,'Command: modify speed fly'),(565,'Command: modify speed walk'),(566,'Command: modify speed swim'),(567,'Command: modify spell'),(568,'Command: modify standstate'),(569,'Command: modify talentpoints'),(570,'Command: npc'),(571,'Command: npc add'),(572,'Command: npc add formation'),(573,'Command: npc add item'),(574,'Command: npc add move'),(575,'Command: npc add temp'),(576,'Command: npc add delete'),(577,'Command: npc add delete item'),(578,'Command: npc add follow'),(579,'Command: npc add follow stop'),(580,'Command: npc set'),(581,'Command: npc set allowmove'),(582,'Command: npc set entry'),(583,'Command: npc set factionid'),(584,'Command: npc set flag'),(585,'Command: npc set level'),(586,'Command: npc set link'),(587,'Command: npc set model'),(588,'Command: npc set movetype'),(589,'Command: npc set phase'),(590,'Command: npc set spawndist'),(591,'Command: npc set spawntime'),(592,'Command: npc set data'),(593,'Command: npc info'),(594,'Command: npc near'),(595,'Command: npc move'),(596,'Command: npc playemote'),(597,'Command: npc say'),(598,'Command: npc textemote'),(599,'Command: npc whisper'),(600,'Command: npc yell'),(601,'Command: npc tame'),(602,'Command: quest'),(603,'Command: quest add'),(604,'Command: quest complete'),(605,'Command: quest remove'),(606,'Command: quest reward'),(607,'Command: reload'),(608,'Command: reload access_requirement'),(609,'Command: reload achievement_criteria_data'),(610,'Command: reload achievement_reward'),(611,'Command: reload all'),(612,'Command: reload all achievement'),(613,'Command: reload all area'),(614,'Command: reload all eventai'),(615,'Command: reload all gossips'),(616,'Command: reload all item'),(617,'Command: reload all locales'),(618,'Command: reload all loot'),(619,'Command: reload all npc'),(620,'Command: reload all quest'),(621,'Command: reload all scripts'),(622,'Command: reload all spell'),(623,'Command: reload areatrigger_involvedrelation'),(624,'Command: reload areatrigger_tavern'),(625,'Command: reload areatrigger_teleport'),(626,'Command: reload auctions'),(627,'Command: reload autobroadcast'),(628,'Command: reload command'),(629,'Command: reload conditions'),(630,'Command: reload config'),(631,'Command: reload creature_text'),(632,'Command: reload creature_ai_scripts'),(633,'Command: reload creature_ai_texts'),(634,'Command: reload creature_questender'),(635,'Command: reload creature_linked_respawn'),(636,'Command: reload creature_loot_template'),(637,'Command: reload creature_onkill_reputation'),(638,'Command: reload creature_queststarter'),(639,'Command: reload creature_summon_groups'),(640,'Command: reload creature_template'),(641,'Command: reload disables'),(642,'Command: reload disenchant_loot_template'),(643,'Command: reload event_scripts'),(644,'Command: reload fishing_loot_template'),(645,'Command: reload game_graveyard_zone'),(646,'Command: reload game_tele'),(647,'Command: reload gameobject_questender'),(648,'Command: reload gameobject_loot_template'),(649,'Command: reload gameobject_queststarter'),(650,'Command: reload gm_tickets'),(651,'Command: reload gossip_menu'),(652,'Command: reload gossip_menu_option'),(653,'Command: reload item_enchantment_template'),(654,'Command: reload item_loot_template'),(655,'Command: reload item_set_names'),(656,'Command: reload lfg_dungeon_rewards'),(657,'Command: reload locales_achievement_reward'),(658,'Command: reload locales_creature'),(659,'Command: reload locales_creature_text'),(660,'Command: reload locales_gameobject'),(661,'Command: reload locales_gossip_menu_option'),(662,'Command: reload locales_item'),(663,'Command: reload locales_item_set_name'),(664,'Command: reload locales_npc_text'),(665,'Command: reload locales_page_text'),(666,'Command: reload locales_points_of_interest'),(667,'Command: reload locales_quest'),(668,'Command: reload mail_level_reward'),(669,'Command: reload mail_loot_template'),(670,'Command: reload milling_loot_template'),(671,'Command: reload npc_spellclick_spells'),(672,'Command: reload npc_trainer'),(673,'Command: reload npc_vendor'),(674,'Command: reload page_text'),(675,'Command: reload pickpocketing_loot_template'),(676,'Command: reload points_of_interest'),(677,'Command: reload prospecting_loot_template'),(678,'Command: reload quest_poi'),(679,'Command: reload quest_template'),(680,'Command: reload rbac'),(681,'Command: reload reference_loot_template'),(682,'Command: reload reserved_name'),(683,'Command: reload reputation_reward_rate'),(684,'Command: reload reputation_spillover_template'),(685,'Command: reload skill_discovery_template'),(686,'Command: reload skill_extra_item_template'),(687,'Command: reload skill_fishing_base_level'),(688,'Command: reload skinning_loot_template'),(689,'Command: reload smart_scripts'),(690,'Command: reload spell_required'),(691,'Command: reload spell_area'),(692,'Command: reload spell_bonus_data'),(693,'Command: reload spell_group'),(694,'Command: reload spell_learn_spell'),(695,'Command: reload spell_loot_template'),(696,'Command: reload spell_linked_spell'),(697,'Command: reload spell_pet_auras'),(698,'Command: reload spell_proc_event'),(699,'Command: reload spell_proc'),(700,'Command: reload spell_scripts'),(701,'Command: reload spell_target_position'),(702,'Command: reload spell_threats'),(703,'Command: reload spell_group_stack_rules'),(704,'Command: reload trinity_string'),(705,'Command: reload warden_action'),(706,'Command: reload waypoint_scripts'),(707,'Command: reload waypoint_data'),(708,'Command: reload vehicle_accessory'),(709,'Command: reload vehicle_template_accessory'),(710,'Command: reset'),(711,'Command: reset achievements'),(712,'Command: reset honor'),(713,'Command: reset level'),(714,'Command: reset spells'),(715,'Command: reset stats'),(716,'Command: reset talents'),(717,'Command: reset all'),(718,'Command: server'),(719,'Command: server corpses'),(720,'Command: server exit'),(721,'Command: server idlerestart'),(722,'Command: server idlerestart cancel'),(723,'Command: server idleshutdown'),(724,'Command: server idleshutdown cancel'),(725,'Command: server info'),(726,'Command: server plimit'),(727,'Command: server restart'),(728,'Command: server restart cancel'),(729,'Command: server set'),(730,'Command: server set closed'),(731,'Command: server set difftime'),(732,'Command: server set loglevel'),(733,'Command: server set motd'),(734,'Command: server shutdown'),(735,'Command: server shutdown cancel'),(736,'Command: server motd'),(737,'Command: tele'),(738,'Command: tele add'),(739,'Command: tele del'),(740,'Command: tele name'),(741,'Command: tele group'),(742,'Command: ticket'),(743,'Command: ticket assign'),(744,'Command: ticket close'),(745,'Command: ticket closedlist'),(746,'Command: ticket comment'),(747,'Command: ticket complete'),(748,'Command: ticket delete'),(749,'Command: ticket escalate'),(750,'Command: ticket escalatedlist'),(751,'Command: ticket list'),(752,'Command: ticket onlinelist'),(753,'Command: ticket reset'),(754,'Command: ticket response'),(755,'Command: ticket response append'),(756,'Command: ticket response appendln'),(757,'Command: ticket togglesystem'),(758,'Command: ticket unassign'),(759,'Command: ticket viewid'),(760,'Command: ticket viewname'),(761,'Command: titles'),(762,'Command: titles add'),(763,'Command: titles current'),(764,'Command: titles remove'),(765,'Command: titles set'),(766,'Command: titles set mask'),(767,'Command: wp'),(768,'Command: wp add'),(769,'Command: wp event'),(770,'Command: wp load'),(771,'Command: wp modify'),(772,'Command: wp unload'),(773,'Command: wp reload'),(774,'Command: wp show'); +INSERT INTO `rbac_permissions` VALUES (1,'Instant logout'),(2,'Skip Queue'),(3,'Join Normal Battleground'),(4,'Join Random Battleground'),(5,'Join Arenas'),(6,'Join Dungeon Finder'),(11,'Log GM trades'),(13,'Skip Instance required bosses check'),(14,'Skip character creation team mask check'),(15,'Skip character creation class mask check'),(16,'Skip character creation race mask check'),(17,'Skip character creation reserved name check'),(18,'Skip character creation heroic min level check'),(19,'Skip needed requirements to use channel check'),(20,'Skip disable map check'),(21,'Skip reset talents when used more than allowed check'),(22,'Skip spam chat check'),(23,'Skip over-speed ping check'),(24,'Two side faction characters on the same account'),(25,'Allow say chat between factions'),(26,'Allow channel chat between factions'),(27,'Two side mail interaction'),(28,'See two side who list'),(29,'Add friends of other faction'),(30,'Save character without delay with .save command'),(31,'Use params with .unstuck command'),(32,'Can be assigned tickets with .assign ticket command'),(33,'Notify if a command was not found'),(34,'Check if should appear in list using .gm ingame command'),(35,'See all security levels with who command'),(36,'Filter whispers'),(37,'Use staff badge in chat'),(38,'Resurrect with full Health Points'),(39,'Restore saved gm setting states'),(40,'Allows to add a gm to friend list'),(41,'Use Config option START_GM_LEVEL to assign new character level'),(42,'Allows to use CMSG_WORLD_TELEPORT opcode'),(43,'Allows to use CMSG_WHOIS opcode'),(44,'Receive global GM messages/texts'),(45,'Join channels without announce'),(46,'Change channel settings without being channel moderator'),(47,'Enables lower security than target check'),(48,'Enable IP, Last Login and EMail output in pinfo'),(49,'Forces to enter the email for confirmation on password change'),(50,'Allow user to check his own email with .account'),(192,'Role: Sec Level Administrator'),(193,'Role: Sec Level Gamemaster'),(194,'Role: Sec Level Moderator'),(195,'Role: Sec Level Player'),(196,'Role: Administrator Commands'),(197,'Role: Gamemaster Commands'),(198,'Role: Moderator Commands'),(199,'Role: Player Commands'),(200,'Command: rbac'),(201,'Command: rbac account'),(202,'Command: rbac account list'),(203,'Command: rbac account grant'),(204,'Command: rbac account deny'),(205,'Command: rbac account revoke'),(206,'Command: rbac list'),(217,'Command: account'),(218,'Command: account addon'),(219,'Command: account create'),(220,'Command: account delete'),(221,'Command: account lock'),(222,'Command: account lock country'),(223,'Command: account lock ip'),(224,'Command: account onlinelist'),(225,'Command: account password'),(226,'Command: account set'),(227,'Command: account set addon'),(228,'Command: account set gmlevel'),(229,'Command: account set password'),(230,'Command: achievement'),(231,'Command: achievement add'),(232,'Command: arena'),(233,'Command: arena captain'),(234,'Command: arena create'),(235,'Command: arena disband'),(236,'Command: arena info'),(237,'Command: arena lookup'),(238,'Command: arena rename'),(239,'Command: ban'),(240,'Command: ban account'),(241,'Command: ban character'),(242,'Command: ban ip'),(243,'Command: ban playeraccount'),(244,'Command: baninfo'),(245,'Command: baninfo account'),(246,'Command: baninfo character'),(247,'Command: baninfo ip'),(248,'Command: banlist'),(249,'Command: banlist account'),(250,'Command: banlist character'),(251,'Command: banlist ip'),(252,'Command: unban'),(253,'Command: unban account'),(254,'Command: unban character'),(255,'Command: unban ip'),(256,'Command: unban playeraccount'),(257,'Command: bf'),(258,'Command: bf start'),(259,'Command: bf stop'),(260,'Command: bf switch'),(261,'Command: bf timer'),(262,'Command: bf enable'),(263,'Command: account email'),(264,'Command: account set sec'),(265,'Command: account set sec email'),(266,'Command: account set sec regmail'),(267,'Command: cast'),(268,'Command: cast back'),(269,'Command: cast dist'),(270,'Command: cast self'),(271,'Command: cast target'),(272,'Command: cast dest'),(273,'Command: character'),(274,'Command: character customize'),(275,'Command: character changefaction'),(276,'Command: character changerace'),(277,'Command: character deleted'),(279,'Command: character deleted list'),(280,'Command: character deleted restore'),(283,'Command: character level'),(284,'Command: character rename'),(285,'Command: character reputation'),(286,'Command: character titles'),(287,'Command: levelup'),(288,'Command: pdump'),(289,'Command: pdump load'),(290,'Command: pdump write'),(291,'Command: cheat'),(292,'Command: cheat casttime'),(293,'Command: cheat cooldown'),(294,'Command: cheat explore'),(295,'Command: cheat god'),(296,'Command: cheat power'),(297,'Command: cheat status'),(298,'Command: cheat taxi'),(299,'Command: cheat waterwalk'),(300,'Command: debug'),(301,'Command: debug anim'),(302,'Command: debug areatriggers'),(303,'Command: debug arena'),(304,'Command: debug bg'),(305,'Command: debug entervehicle'),(306,'Command: debug getitemstate'),(307,'Command: debug getitemvalue'),(308,'Command: debug getvalue'),(309,'Command: debug hostil'),(310,'Command: debug itemexpire'),(311,'Command: debug lootrecipient'),(312,'Command: debug los'),(313,'Command: debug mod32value'),(314,'Command: debug moveflags'),(315,'Command: debug play'),(316,'Command: debug play cinematics'),(317,'Command: debug play movie'),(318,'Command: debug play sound'),(319,'Command: debug send'),(320,'Command: debug send buyerror'),(321,'Command: debug send channelnotify'),(322,'Command: debug send chatmessage'),(323,'Command: debug send equiperror'),(324,'Command: debug send largepacket'),(325,'Command: debug send opcode'),(326,'Command: debug send qinvalidmsg'),(327,'Command: debug send qpartymsg'),(328,'Command: debug send sellerror'),(329,'Command: debug send setphaseshift'),(330,'Command: debug send spellfail'),(331,'Command: debug setaurastate'),(332,'Command: debug setbit'),(333,'Command: debug setitemvalue'),(334,'Command: debug setvalue'),(335,'Command: debug setvid'),(336,'Command: debug spawnvehicle'),(337,'Command: debug threat'),(338,'Command: debug update'),(339,'Command: debug uws'),(340,'Command: wpgps'),(341,'Command: deserter'),(342,'Command: deserter bg'),(343,'Command: deserter bg add'),(344,'Command: deserter bg remove'),(345,'Command: deserter instance'),(346,'Command: deserter instance add'),(347,'Command: deserter instance remove'),(348,'Command: disable'),(349,'Command: disable add'),(350,'Command: disable add achievement_criteria'),(351,'Command: disable add battleground'),(352,'Command: disable add map'),(353,'Command: disable add mmap'),(354,'Command: disable add outdoorpvp'),(355,'Command: disable add quest'),(356,'Command: disable add spell'),(357,'Command: disable add vmap'),(358,'Command: disable remove'),(359,'Command: disable remove achievement_criteria'),(360,'Command: disable remove battleground'),(361,'Command: disable remove map'),(362,'Command: disable remove mmap'),(363,'Command: disable remove outdoorpvp'),(364,'Command: disable remove quest'),(365,'Command: disable remove spell'),(366,'Command: disable remove vmap'),(367,'Command: event'),(368,'Command: event activelist'),(369,'Command: event start'),(370,'Command: event stop'),(371,'Command: gm'),(372,'Command: gm chat'),(373,'Command: gm fly'),(374,'Command: gm ingame'),(375,'Command: gm list'),(376,'Command: gm visible'),(377,'Command: go'),(378,'Command: go creature'),(379,'Command: go graveyard'),(380,'Command: go grid'),(381,'Command: go object'),(382,'Command: go taxinode'),(383,'Command: go ticket'),(384,'Command: go trigger'),(385,'Command: go xyz'),(386,'Command: go zonexy'),(387,'Command: gobject'),(388,'Command: gobject activate'),(389,'Command: gobject add'),(390,'Command: gobject add temp'),(391,'Command: gobject delete'),(392,'Command: gobject info'),(393,'Command: gobject move'),(394,'Command: gobject near'),(395,'Command: gobject set'),(396,'Command: gobject set phase'),(397,'Command: gobject set state'),(398,'Command: gobject target'),(399,'Command: gobject turn'),(400,'debug transport'),(401,'Command: guild'),(402,'Command: guild create'),(403,'Command: guild delete'),(404,'Command: guild invite'),(405,'Command: guild uninvite'),(406,'Command: guild rank'),(407,'Command: guild rename'),(408,'Command: honor'),(409,'Command: honor add'),(410,'Command: honor add kill'),(411,'Command: honor update'),(412,'Command: instance'),(413,'Command: instance listbinds'),(414,'Command: instance unbind'),(415,'Command: instance stats'),(416,'Command: instance savedata'),(417,'Command: learn'),(418,'Command: learn all'),(419,'Command: learn all my'),(420,'Command: learn all my class'),(421,'Command: learn all my pettalents'),(422,'Command: learn all my spells'),(423,'Command: learn all my talents'),(424,'Command: learn all gm'),(425,'Command: learn all crafts'),(426,'Command: learn all default'),(427,'Command: learn all lang'),(428,'Command: learn all recipes'),(429,'Command: unlearn'),(430,'Command: lfg'),(431,'Command: lfg player'),(432,'Command: lfg group'),(433,'Command: lfg queue'),(434,'Command: lfg clean'),(435,'Command: lfg options'),(436,'Command: list'),(437,'Command: list creature'),(438,'Command: list item'),(439,'Command: list object'),(440,'Command: list auras'),(441,'Command: list mail'),(442,'Command: lookup'),(443,'Command: lookup area'),(444,'Command: lookup creature'),(445,'Command: lookup event'),(446,'Command: lookup faction'),(447,'Command: lookup item'),(448,'Command: lookup itemset'),(449,'Command: lookup object'),(450,'Command: lookup quest'),(451,'Command: lookup player'),(452,'Command: lookup player ip'),(453,'Command: lookup player account'),(454,'Command: lookup player email'),(455,'Command: lookup skill'),(456,'Command: lookup spell'),(457,'Command: lookup spell id'),(458,'Command: lookup taxinode'),(459,'Command: lookup tele'),(460,'Command: lookup title'),(461,'Command: lookup map'),(462,'Command: announce'),(463,'Command: channel'),(464,'Command: channel set'),(465,'Command: channel set ownership'),(466,'Command: gmannounce'),(467,'Command: gmnameannounce'),(468,'Command: gmnotify'),(469,'Command: nameannounce'),(470,'Command: notify'),(471,'Command: whispers'),(472,'Command: group'),(473,'Command: group leader'),(474,'Command: group disband'),(475,'Command: group remove'),(476,'Command: group join'),(477,'Command: group list'),(478,'Command: group summon'),(479,'Command: pet'),(480,'Command: pet create'),(481,'Command: pet learn'),(482,'Command: pet unlearn'),(483,'Command: send'),(484,'Command: send items'),(485,'Command: send mail'),(486,'Command: send message'),(487,'Command: send money'),(488,'Command: additem'),(489,'Command: additemset'),(490,'Command: appear'),(491,'Command: aura'),(492,'Command: bank'),(493,'Command: bindsight'),(494,'Command: combatstop'),(495,'Command: cometome'),(496,'Command: commands'),(497,'Command: cooldown'),(498,'Command: damage'),(499,'Command: dev'),(500,'Command: die'),(501,'Command: dismount'),(502,'Command: distance'),(503,'Command: flusharenapoints'),(504,'Command: freeze'),(505,'Command: gps'),(506,'Command: guid'),(507,'Command: help'),(508,'Command: hidearea'),(509,'Command: itemmove'),(510,'Command: kick'),(511,'Command: linkgrave'),(512,'Command: listfreeze'),(513,'Command: maxskill'),(514,'Command: movegens'),(515,'Command: mute'),(516,'Command: neargrave'),(517,'Command: pinfo'),(518,'Command: playall'),(519,'Command: possess'),(520,'Command: recall'),(521,'Command: repairitems'),(522,'Command: respawn'),(523,'Command: revive'),(524,'Command: saveall'),(525,'Command: save'),(526,'Command: setskill'),(527,'Command: showarea'),(528,'Command: summon'),(529,'Command: unaura'),(530,'Command: unbindsight'),(531,'Command: unfreeze'),(532,'Command: unmute'),(533,'Command: unpossess'),(534,'Command: unstuck'),(535,'Command: wchange'),(536,'Command: mmap'),(537,'Command: mmap loadedtiles'),(538,'Command: mmap loc'),(539,'Command: mmap path'),(540,'Command: mmap stats'),(541,'Command: mmap testarea'),(542,'Command: morph'),(543,'Command: demorph'),(544,'Command: modify'),(545,'Command: modify arenapoints'),(546,'Command: modify bit'),(547,'Command: modify drunk'),(548,'Command: modify energy'),(549,'Command: modify faction'),(550,'Command: modify gender'),(551,'Command: modify honor'),(552,'Command: modify hp'),(553,'Command: modify mana'),(554,'Command: modify money'),(555,'Command: modify mount'),(556,'Command: modify phase'),(557,'Command: modify rage'),(558,'Command: modify reputation'),(559,'Command: modify runicpower'),(560,'Command: modify scale'),(561,'Command: modify speed'),(562,'Command: modify speed all'),(563,'Command: modify speed backwalk'),(564,'Command: modify speed fly'),(565,'Command: modify speed walk'),(566,'Command: modify speed swim'),(567,'Command: modify spell'),(568,'Command: modify standstate'),(569,'Command: modify talentpoints'),(570,'Command: npc'),(571,'Command: npc add'),(572,'Command: npc add formation'),(573,'Command: npc add item'),(574,'Command: npc add move'),(575,'Command: npc add temp'),(576,'Command: npc add delete'),(577,'Command: npc add delete item'),(578,'Command: npc add follow'),(579,'Command: npc add follow stop'),(580,'Command: npc set'),(581,'Command: npc set allowmove'),(582,'Command: npc set entry'),(583,'Command: npc set factionid'),(584,'Command: npc set flag'),(585,'Command: npc set level'),(586,'Command: npc set link'),(587,'Command: npc set model'),(588,'Command: npc set movetype'),(589,'Command: npc set phase'),(590,'Command: npc set spawndist'),(591,'Command: npc set spawntime'),(592,'Command: npc set data'),(593,'Command: npc info'),(594,'Command: npc near'),(595,'Command: npc move'),(596,'Command: npc playemote'),(597,'Command: npc say'),(598,'Command: npc textemote'),(599,'Command: npc whisper'),(600,'Command: npc yell'),(601,'Command: npc tame'),(602,'Command: quest'),(603,'Command: quest add'),(604,'Command: quest complete'),(605,'Command: quest remove'),(606,'Command: quest reward'),(607,'Command: reload'),(608,'Command: reload access_requirement'),(609,'Command: reload achievement_criteria_data'),(610,'Command: reload achievement_reward'),(611,'Command: reload all'),(612,'Command: reload all achievement'),(613,'Command: reload all area'),(614,'Command: reload all eventai'),(615,'Command: reload all gossips'),(616,'Command: reload all item'),(617,'Command: reload all locales'),(618,'Command: reload all loot'),(619,'Command: reload all npc'),(620,'Command: reload all quest'),(621,'Command: reload all scripts'),(622,'Command: reload all spell'),(623,'Command: reload areatrigger_involvedrelation'),(624,'Command: reload areatrigger_tavern'),(625,'Command: reload areatrigger_teleport'),(626,'Command: reload auctions'),(627,'Command: reload autobroadcast'),(628,'Command: reload command'),(629,'Command: reload conditions'),(630,'Command: reload config'),(631,'Command: reload creature_text'),(632,'Command: reload creature_ai_scripts'),(633,'Command: reload creature_ai_texts'),(634,'Command: reload creature_questender'),(635,'Command: reload creature_linked_respawn'),(636,'Command: reload creature_loot_template'),(637,'Command: reload creature_onkill_reputation'),(638,'Command: reload creature_queststarter'),(639,'Command: reload creature_summon_groups'),(640,'Command: reload creature_template'),(641,'Command: reload disables'),(642,'Command: reload disenchant_loot_template'),(643,'Command: reload event_scripts'),(644,'Command: reload fishing_loot_template'),(645,'Command: reload game_graveyard_zone'),(646,'Command: reload game_tele'),(647,'Command: reload gameobject_questender'),(648,'Command: reload gameobject_loot_template'),(649,'Command: reload gameobject_queststarter'),(650,'Command: reload gm_tickets'),(651,'Command: reload gossip_menu'),(652,'Command: reload gossip_menu_option'),(653,'Command: reload item_enchantment_template'),(654,'Command: reload item_loot_template'),(655,'Command: reload item_set_names'),(656,'Command: reload lfg_dungeon_rewards'),(657,'Command: reload locales_achievement_reward'),(658,'Command: reload locales_creature'),(659,'Command: reload locales_creature_text'),(660,'Command: reload locales_gameobject'),(661,'Command: reload locales_gossip_menu_option'),(662,'Command: reload locales_item'),(663,'Command: reload locales_item_set_name'),(664,'Command: reload locales_npc_text'),(665,'Command: reload locales_page_text'),(666,'Command: reload locales_points_of_interest'),(667,'Command: reload locales_quest'),(668,'Command: reload mail_level_reward'),(669,'Command: reload mail_loot_template'),(670,'Command: reload milling_loot_template'),(671,'Command: reload npc_spellclick_spells'),(672,'Command: reload npc_trainer'),(673,'Command: reload npc_vendor'),(674,'Command: reload page_text'),(675,'Command: reload pickpocketing_loot_template'),(676,'Command: reload points_of_interest'),(677,'Command: reload prospecting_loot_template'),(678,'Command: reload quest_poi'),(679,'Command: reload quest_template'),(680,'Command: reload rbac'),(681,'Command: reload reference_loot_template'),(682,'Command: reload reserved_name'),(683,'Command: reload reputation_reward_rate'),(684,'Command: reload reputation_spillover_template'),(685,'Command: reload skill_discovery_template'),(686,'Command: reload skill_extra_item_template'),(687,'Command: reload skill_fishing_base_level'),(688,'Command: reload skinning_loot_template'),(689,'Command: reload smart_scripts'),(690,'Command: reload spell_required'),(691,'Command: reload spell_area'),(692,'Command: reload spell_bonus_data'),(693,'Command: reload spell_group'),(694,'Command: reload spell_learn_spell'),(695,'Command: reload spell_loot_template'),(696,'Command: reload spell_linked_spell'),(697,'Command: reload spell_pet_auras'),(698,'Command: reload spell_proc_event'),(699,'Command: reload spell_proc'),(700,'Command: reload spell_scripts'),(701,'Command: reload spell_target_position'),(702,'Command: reload spell_threats'),(703,'Command: reload spell_group_stack_rules'),(704,'Command: reload trinity_string'),(705,'Command: reload warden_action'),(706,'Command: reload waypoint_scripts'),(707,'Command: reload waypoint_data'),(708,'Command: reload vehicle_accessory'),(709,'Command: reload vehicle_template_accessory'),(710,'Command: reset'),(711,'Command: reset achievements'),(712,'Command: reset honor'),(713,'Command: reset level'),(714,'Command: reset spells'),(715,'Command: reset stats'),(716,'Command: reset talents'),(717,'Command: reset all'),(718,'Command: server'),(719,'Command: server corpses'),(720,'Command: server exit'),(721,'Command: server idlerestart'),(722,'Command: server idlerestart cancel'),(723,'Command: server idleshutdown'),(724,'Command: server idleshutdown cancel'),(725,'Command: server info'),(726,'Command: server plimit'),(727,'Command: server restart'),(728,'Command: server restart cancel'),(729,'Command: server set'),(730,'Command: server set closed'),(731,'Command: server set difftime'),(732,'Command: server set loglevel'),(733,'Command: server set motd'),(734,'Command: server shutdown'),(735,'Command: server shutdown cancel'),(736,'Command: server motd'),(737,'Command: tele'),(738,'Command: tele add'),(739,'Command: tele del'),(740,'Command: tele name'),(741,'Command: tele group'),(742,'Command: ticket'),(743,'Command: ticket assign'),(744,'Command: ticket close'),(745,'Command: ticket closedlist'),(746,'Command: ticket comment'),(747,'Command: ticket complete'),(748,'Command: ticket delete'),(749,'Command: ticket escalate'),(750,'Command: ticket escalatedlist'),(751,'Command: ticket list'),(752,'Command: ticket onlinelist'),(753,'Command: ticket reset'),(754,'Command: ticket response'),(755,'Command: ticket response append'),(756,'Command: ticket response appendln'),(757,'Command: ticket togglesystem'),(758,'Command: ticket unassign'),(759,'Command: ticket viewid'),(760,'Command: ticket viewname'),(761,'Command: titles'),(762,'Command: titles add'),(763,'Command: titles current'),(764,'Command: titles remove'),(765,'Command: titles set'),(766,'Command: titles set mask'),(767,'Command: wp'),(768,'Command: wp add'),(769,'Command: wp event'),(770,'Command: wp load'),(771,'Command: wp modify'),(772,'Command: wp unload'),(773,'Command: wp reload'),(774,'Command: wp show'); /*!40000 ALTER TABLE `rbac_permissions` ENABLE KEYS */; UNLOCK TABLES; From 193f4ed868c5278f5f1e572800486f7bc6bf085b Mon Sep 17 00:00:00 2001 From: Ascathor Date: Tue, 15 Oct 2013 23:13:49 +0200 Subject: [PATCH 13/56] Core/Command: Improve .group list to feature several notes and features to improve handling. --- .../2013_10_16_00_world_trinity_string.sql | 4 ++ src/server/scripts/Commands/cs_group.cpp | 52 +++++++++++++++++-- 2 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 sql/updates/world/2013_10_16_00_world_trinity_string.sql diff --git a/sql/updates/world/2013_10_16_00_world_trinity_string.sql b/sql/updates/world/2013_10_16_00_world_trinity_string.sql new file mode 100644 index 00000000000..be77dd1b01c --- /dev/null +++ b/sql/updates/world/2013_10_16_00_world_trinity_string.sql @@ -0,0 +1,4 @@ +DELETE FROM `trinity_string` WHERE entry IN (1149, 1150); +INSERT INTO `trinity_string` (entry, content_default, content_loc1, content_loc2, content_loc3, content_loc4, content_loc5, content_loc6, content_loc7, content_loc8) VALUES +(1149, 'Group type: %s and consists of %u players.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), +(1150, 'Name: %s (%s), Zone: %s, Phase: %u, GUID: %u, Flags: %s, Roles: %s', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp index 8c38d954203..1c0949398b9 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -260,24 +260,36 @@ public: static bool HandleGroupListCommand(ChatHandler* handler, char const* args) { + // Get ALL the variables! Player* playerTarget; + uint32 phase = 0; + uint32 groupCounter = 0; uint64 guidTarget; std::string nameTarget; + std::string zoneName; + const char* onlineState = ""; + // Parse the guid to uint32... uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER); + // ... and try to extract a player out of it. if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget)) { playerTarget = sObjectMgr->GetPlayerByLowGUID(parseGUID); guidTarget = parseGUID; } + // If not, we return false and end right away. else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget)) return false; + // Next, we need a group. So we define a group variable. Group* groupTarget = NULL; + + // We try to extract a group from an online player. if (playerTarget) groupTarget = playerTarget->GetGroup(); + // If not, we extract it from the SQL. if (!groupTarget) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER); @@ -287,6 +299,7 @@ public: groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32()); } + // If both fails, players simply has no party. Return false. if (!groupTarget) { handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, nameTarget.c_str()); @@ -294,12 +307,20 @@ public: return false; } - handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party")); + // We get the group members after successfully detecting a group. Group::MemberSlotList const& members = groupTarget->GetMemberSlots(); + + // To avoid a cluster fuck, namely trying multiple queries to simply get a group member count... + handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party"), members.size()); + // ... we simply move the group type and member count print after retrieving the slots and simply output it's size. + + // While rather dirty codestyle-wise, it saves space (if only a little). For each member, we look several informations up. for (Group::MemberSlotList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { + // Define temporary variable slot to iterator. Group::MemberSlot const& slot = *itr; + // Check for given flag and assign it to that iterator std::string flags; if (slot.flags & MEMBER_FLAG_ASSISTANT) flags = "Assistant"; @@ -321,13 +342,38 @@ public: if (flags.empty()) flags = "None"; + // Check if iterator is online. If is... Player* p = ObjectAccessor::FindPlayer((*itr).guid); - const char* onlineState = (p && p->IsInWorld()) ? "online" : "offline"; + if (p && p->IsInWorld()) + { + // ... than, it prints information like "is online", where he is, etc... + onlineState = "online"; + phase = (!p->IsGameMaster() ? p->GetPhaseMask() : -1); + uint32 locale = handler->GetSessionDbcLocale(); + AreaTableEntry const* area = GetAreaEntryByAreaID(p->GetAreaId()); + if (area) + { + AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone); + if (zone) + zoneName = zone->area_name[locale]; + } + } + else + { + // ... else, everything is set to offline or neutral values. + zoneName = ""; + onlineState = "Offline"; + phase = 0; + } + + // Now we can print those informations for every single member of each group! handler->PSendSysMessage(LANG_GROUP_PLAYER_NAME_GUID, slot.name.c_str(), onlineState, - GUID_LOPART(slot.guid), flags.c_str(), lfg::GetRolesString(slot.roles).c_str()); + zoneName.c_str(), phase, GUID_LOPART(slot.guid), flags.c_str(), + lfg::GetRolesString(slot.roles).c_str()); } + // And finish after every iterator is done. return true; } }; From 4aee86627e001314ec80655615676e9593a06462 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Thu, 17 Oct 2013 22:03:51 +0200 Subject: [PATCH 14/56] Core/WorldSession: Mitigate DoS attacks Mitigate DoS attacks like one explained in #10555 by processing a limited number of packets at each WorldSession::Update() call, allowing other WorldSessions to be processed. 100 packets in a single update sound like a reasonable amount. --- src/server/game/Server/WorldSession.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 75da92158d1..c33c12ae5d4 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -272,6 +272,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) //! delayed packets that were re-enqueued due to improper timing. To prevent an infinite //! loop caused by re-enqueueing the same packets over and over again, we stop updating this session //! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session. + uint32 processedPackets = 0; + while (m_Socket && !m_Socket->IsClosed() && !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket && _recvQueue.next(packet, updater)) @@ -383,6 +385,14 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) delete packet; deletePacket = true; + +#define MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE 100 + processedPackets++; + + //process only a max amout of packets in 1 Update() call. + //Any leftover will be processed in next update + if (processedPackets > MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE) + break; } if (m_Socket && !m_Socket->IsClosed() && _warden) From b1bef5b0c6e72ef7ae0470bb7009305280bf4845 Mon Sep 17 00:00:00 2001 From: Kinzcool Date: Thu, 17 Oct 2013 19:44:59 -0400 Subject: [PATCH 15/56] Updated all values of `gender` column in `creature_model_info`. --- sql/updates/world/2013_10_17_00_world_creature_model_info.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2013_10_17_00_world_creature_model_info.sql diff --git a/sql/updates/world/2013_10_17_00_world_creature_model_info.sql b/sql/updates/world/2013_10_17_00_world_creature_model_info.sql new file mode 100644 index 00000000000..43906e24135 --- /dev/null +++ b/sql/updates/world/2013_10_17_00_world_creature_model_info.sql @@ -0,0 +1,3 @@ +UPDATE `creature_model_info` SET `gender`=0 WHERE `modelid` IN (16, 17, 18, 19, 20, 23, 26, 31, 33, 40, 42, 49, 51, 53, 55, 57, 59, 68, 74, 79, 86, 87, 88, 89, 101, 102, 103, 104, 105, 106, 107, 108, 112, 113, 115, 125, 126, 127, 128, 129, 130, 138, 139, 143, 149, 150, 152, 160, 163, 164, 166, 167, 170, 172, 173, 177, 182, 184, 188, 190, 191, 194, 195, 196, 197, 198, 202, 203, 208, 210, 211, 212, 214, 218, 221, 226, 227, 231, 240, 242, 243, 244, 251, 262, 263, 267, 275, 277, 280, 282, 286, 298, 299, 300, 301, 308, 309, 310, 312, 314, 316, 317, 326, 337, 338, 341, 346, 348, 351, 355, 363, 365, 369, 371, 373, 374, 385, 386, 390, 391, 415, 416, 428, 429, 430, 433, 441, 448, 456, 459, 467, 478, 486, 487, 495, 496, 504, 506, 508, 511, 515, 516, 517, 522, 523, 524, 527, 529, 531, 534, 536, 540, 553, 555, 556, 563, 564, 565, 567, 574, 575, 576, 578, 584, 585, 586, 588, 590, 591, 592, 593, 597, 605, 606, 610, 611, 616, 617, 627, 628, 634, 636, 637, 638, 652, 655, 656, 657, 658, 661, 664, 665, 679, 680, 691, 692, 693, 716, 721, 722, 723, 726, 729, 730, 736, 742, 743, 757, 763, 764, 765, 774, 790, 791, 792, 793, 794, 795, 796, 797, 803, 809, 810, 816, 820, 824, 825, 830, 832, 837, 838, 839, 840, 841, 842, 843, 844, 845, 852, 853, 924, 927, 929, 931, 933, 934, 947, 950, 976, 983, 990, 991, 1005, 1010, 1013, 1014, 1027, 1031, 1032, 1045, 1050, 1051, 1052, 1054, 1057, 1067, 1076, 1077, 1078, 1079, 1094, 1098, 1099, 1101, 1107, 1110, 1114, 1115, 1120, 1122, 1125, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1142, 1143, 1144, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1163, 1193, 1194, 1214, 1218, 1226, 1233, 1252, 1253, 1254, 1258, 1260, 1262, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1282, 1285, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1298, 1299, 1302, 1304, 1305, 1310, 1311, 1313, 1314, 1315, 1316, 1317, 1318, 1320, 1321, 1323, 1324, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1334, 1335, 1341, 1342, 1343, 1344, 1345, 1346, 1348, 1349, 1354, 1355, 1356, 1357, 1359, 1362, 1363, 1364, 1366, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1379, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1398, 1399, 1400, 1402, 1403, 1406, 1408, 1409, 1410, 1411, 1412, 1413, 1416, 1417, 1420, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1466, 1468, 1478, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1524, 1525, 1527, 1528, 1541, 1542, 1550, 1552, 1558, 1559, 1562, 1563, 1565, 1567, 1568, 1569, 1570, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1595, 1596, 1597, 1598, 1599, 1600, 1602, 1604, 1605, 1606, 1610, 1611, 1613, 1616, 1617, 1618, 1619, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1635, 1638, 1641, 1644, 1646, 1647, 1648, 1649, 1650, 1652, 1653, 1654, 1655, 1656, 1657, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1680, 1683, 1684, 1685, 1688, 1689, 1690, 1694, 1695, 1696, 1698, 1699, 1701, 1703, 1704, 1706, 1709, 1711, 1712, 1713, 1715, 1718, 1720, 1722, 1724, 1725, 1729, 1731, 1732, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1748, 1753, 1755, 1756, 1757, 1758, 1759, 1762, 1763, 1764, 1765, 1767, 1769, 1770, 1771, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1787, 1788, 1789, 1790, 1792, 1794, 1795, 1796, 1797, 1798, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1813, 1820, 1821, 1822, 1823, 1826, 1827, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1844, 1845, 1846, 1847, 1848, 1849, 1851, 1854, 1858, 1859, 1860, 1861, 1863, 1864, 1865, 1866, 1867, 1869, 1870, 1871, 1872, 1876, 1877, 1880, 1881, 1883, 1884, 1885, 1886, 1889, 1891, 1892, 1893, 1894, 1895, 1896, 1898, 1899, 1901, 1902, 1903, 1904, 1906, 1909, 1912, 1917, 1925, 1926, 1928, 1929, 1930, 1931, 1934, 1935, 1941, 1943, 1944, 1945, 1947, 1948, 1956, 1963, 1964, 1965, 1967, 1968, 1970, 1971, 1972, 1973, 1976, 1977, 1979, 1983, 1984, 1985, 1991, 1992, 1994, 1995, 2002, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2025, 2026, 2027, 2029, 2032, 2039, 2040, 2041, 2042, 2044, 2045, 2046, 2048, 2051, 2052, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2070, 2071, 2072, 2073, 2074, 2080, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2128, 2129, 2130, 2131, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2160, 2161, 2180, 2181, 2184, 2192, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2283, 2284, 2285, 2286, 2287, 2288, 2290, 2292, 2293, 2299, 2311, 2312, 2313, 2314, 2316, 2318, 2322, 2323, 2324, 2329, 2332, 2335, 2337, 2338, 2340, 2342, 2343, 2345, 2346, 2347, 2350, 2353, 2354, 2357, 2360, 2361, 2363, 2364, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2377, 2380, 2381, 2382, 2383, 2384, 2387, 2388, 2389, 2390, 2392, 2393, 2395, 2397, 2403, 2411, 2416, 2417, 2427, 2432, 2434, 2435, 2436, 2438, 2439, 2440, 2441, 2442, 2444, 2445, 2447, 2449, 2454, 2455, 2456, 2457, 2458, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2484, 2492, 2493, 2495, 2498, 2499, 2502, 2504, 2506, 2507, 2510, 2511, 2513, 2514, 2517, 2519, 2520, 2522, 2524, 2526, 2528, 2530, 2531, 2532, 2534, 2535, 2554, 2557, 2561, 2562, 2563, 2564, 2565, 2572, 2576, 2578, 2581, 2584, 2586, 2588, 2593, 2594, 2595, 2596, 2597, 2603, 2604, 2605, 2607, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2675, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2704, 2725, 2727, 2733, 2735, 2736, 2738, 2739, 2740, 2784, 2785, 2786, 2787, 2789, 2790, 2810, 2830, 2831, 2852, 2853, 2854, 2855, 2856, 2857, 2859, 2860, 2862, 2870, 2871, 2872, 2873, 2875, 2876, 2877, 2878, 2879, 2880, 2882, 2887, 2888, 2890, 2891, 2892, 2894, 2895, 2897, 2898, 2899, 2900, 2903, 2910, 2930, 2950, 2951, 2952, 2953, 2960, 2961, 2962, 2963, 2964, 2965, 2967, 2968, 2969, 2971, 2972, 2974, 2976, 2977, 2978, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2994, 2997, 2998, 3002, 3007, 3010, 3011, 3014, 3015, 3016, 3017, 3036, 3037, 3038, 3040, 3042, 3043, 3044, 3045, 3046, 3047, 3052, 3053, 3054, 3055, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3107, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3122, 3129, 3131, 3132, 3134, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3144, 3166, 3167, 3186, 3187, 3188, 3189, 3190, 3192, 3193, 3206, 3207, 3208, 3209, 3216, 3217, 3219, 3220, 3222, 3223, 3224, 3225, 3226, 3228, 3229, 3231, 3232, 3236, 3237, 3238, 3246, 3249, 3250, 3251, 3252, 3253, 3254, 3256, 3258, 3259, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3298, 3299, 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3314, 3315, 3316, 3317, 3319, 3324, 3325, 3326, 3327, 3328, 3331, 3332, 3333, 3334, 3336, 3337, 3338, 3340, 3341, 3342, 3343, 3346, 3347, 3348, 3350, 3351, 3352, 3353, 3354, 3355, 3357, 3358, 3359, 3360, 3361, 3362, 3365, 3370, 3372, 3373, 3374, 3376, 3380, 3381, 3382, 3383, 3384, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3403, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3446, 3447, 3449, 3451, 3452, 3453, 3454, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3464, 3465, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3487, 3488, 3490, 3491, 3492, 3493, 3494, 3505, 3506, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3516, 3518, 3519, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3541, 3542, 3545, 3546, 3548, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3558, 3559, 3561, 3563, 3565, 3566, 3568, 3570, 3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3581, 3583, 3585, 3587, 3589, 3592, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3642, 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3652, 3653, 3655, 3656, 3658, 3660, 3661, 3662, 3664, 3665, 3666, 3667, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3697, 3698, 3699, 3701, 3702, 3703, 3704, 3705, 3706, 3708, 3709, 3711, 3712, 3714, 3716, 3719, 3720, 3721, 3723, 3725, 3727, 3729, 3732, 3733, 3734, 3736, 3737, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3763, 3765, 3767, 3769, 3771, 3773, 3774, 3775, 3776, 3777, 3778, 3782, 3783, 3785, 3787, 3789, 3790, 3792, 3793, 3794, 3795, 3796, 3799, 3800, 3801, 3802, 3803, 3804, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3821, 3822, 3823, 3824, 3826, 3827, 3829, 3832, 3833, 3835, 3837, 3839, 3842, 3843, 3844, 3845, 3846, 3847, 3849, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3862, 3863, 3864, 3865, 3866, 3868, 3869, 3870, 3872, 3873, 3874, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3884, 3885, 3887, 3888, 3889, 3890, 3894, 3895, 3898, 3899, 3902, 3903, 3905, 3906, 3907, 3908, 3909, 3910, 3911, 3912, 3913, 3914, 3917, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3933, 3934, 3936, 3937, 3939, 3940, 3941, 3946, 3947, 3948, 3950, 3951, 3952, 3954, 3957, 3958, 3959, 3960, 3962, 3963, 3964, 3965, 3967, 3968, 3969, 3970, 3971, 3973, 3974, 3975, 3976, 3981, 3982, 3984, 3985, 3986, 3987, 3989, 3991, 3993, 3995, 3997, 4000, 4001, 4003, 4005, 4006, 4007, 4008, 4011, 4013, 4014, 4016, 4018, 4020, 4021, 4022, 4024, 4028, 4029, 4030, 4032, 4033, 4034, 4036, 4037, 4039, 4040, 4042, 4043, 4044, 4045, 4047, 4048, 4049, 4050, 4051, 4055, 4061, 4062, 4063, 4064, 4066, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4078, 4079, 4081, 4082, 4083, 4086, 4088, 4092, 4093, 4094, 4095, 4096, 4097, 4098, 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4107, 4110, 4111, 4116, 4117, 4118, 4119, 4120, 4121, 4125, 4127, 4130, 4132, 4134, 4136, 4137, 4139, 4141, 4143, 4145, 4148, 4150, 4152, 4154, 4155, 4156, 4157, 4159, 4160, 4161, 4163, 4164, 4165, 4166, 4169, 4170, 4171, 4172, 4173, 4178, 4180, 4183, 4186, 4188, 4190, 4192, 4194, 4197, 4199, 4201, 4202, 4204, 4205, 4206, 4207, 4208, 4209, 4211, 4212, 4213, 4214, 4215, 4216, 4218, 4220, 4222, 4224, 4225, 4226, 4227, 4228, 4229, 4232, 4237, 4238, 4239, 4242, 4243, 4244, 4246, 4248, 4249, 4252, 4253, 4255, 4259, 4261, 4262, 4265, 4271, 4272, 4275, 4276, 4279, 4281, 4283, 4285, 4286, 4287, 4288, 4289, 4291, 4292, 4293, 4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4303, 4304, 4306, 4307, 4308, 4309, 4310, 4311, 4315, 4316, 4318, 4319, 4320, 4321, 4324, 4325, 4326, 4327, 4328, 4329, 4331, 4332, 4333, 4335, 4336, 4338, 4339, 4341, 4342, 4347, 4349, 4353, 4354, 4359, 4360, 4361, 4363, 4364, 4365, 4366, 4367, 4368, 4370, 4371, 4372, 4373, 4374, 4376, 4380, 4381, 4382, 4384, 4386, 4387, 4388, 4389, 4390, 4391, 4392, 4395, 4396, 4397, 4398, 4400, 4401, 4404, 4405, 4407, 4408, 4413, 4414, 4415, 4416, 4417, 4418, 4420, 4422, 4423, 4424, 4426, 4427, 4428, 4429, 4430, 4431, 4432, 4436, 4437, 4438, 4439, 4441, 4443, 4444, 4446, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4459, 4460, 4461, 4463, 4464, 4469, 4470, 4471, 4474, 4475, 4476, 4477, 4478, 4479, 4482, 4483, 4484, 4485, 4489, 4491, 4492, 4493, 4494, 4495, 4497, 4499, 4501, 4503, 4506, 4508, 4511, 4512, 4514, 4515, 4516, 4517, 4518, 4519, 4520, 4521, 4525, 4527, 4530, 4531, 4532, 4534, 4537, 4539, 4540, 4542, 4543, 4544, 4545, 4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4579, 4580, 4581, 4582, 4583, 4584, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, 4602, 4604, 4608, 4609, 4610, 4611, 4612, 4616, 4617, 4620, 4621, 4622, 4623, 4624, 4625, 4627, 4628, 4632, 4633, 4634, 4635, 4637, 4638, 4639, 4640, 4641, 4644, 4645, 4646, 4648, 4649, 4652, 4653, 4656, 4657, 4658, 4660, 4661, 4663, 4664, 4666, 4667, 4668, 4671, 4672, 4676, 4678, 4679, 4680, 4684, 4685, 4686, 4688, 4690, 4692, 4693, 4694, 4696, 4697, 4699, 4701, 4703, 4705, 4707, 4709, 4711, 4715, 4717, 4720, 4721, 4725, 4726, 4727, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4755, 4757, 4758, 4762, 4763, 4764, 4765, 4769, 4771, 4773, 4775, 4776, 4778, 4779, 4781, 4785, 4805, 4806, 4807, 4825, 4826, 4827, 4828, 4830, 4831, 4832, 4833, 4834, 4835, 4836, 4837, 4838, 4839, 4840, 4860, 4864, 4865, 4866, 4867, 4873, 4874, 4885, 4886, 4887, 4889, 4890, 4891, 4893, 4895, 4896, 4898, 4899, 4900, 4901, 4902, 4903, 4905, 4908, 4910, 4911, 4916, 4917, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 4925, 4926, 4927, 4928, 4930, 4931, 4932, 4933, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 4942, 4944, 4945, 4946, 4947, 4949, 4950, 4952, 4953, 4954, 4955, 4956, 4957, 4961, 4962, 4963, 4964, 4965, 4969, 4970, 4971, 4986, 4987, 4988, 4989, 4990, 4992, 4993, 4995, 4996, 4997, 4998, 4999, 5000, 5001, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5012, 5013, 5014, 5015, 5016, 5019, 5020, 5021, 5023, 5025, 5028, 5032, 5034, 5035, 5037, 5038, 5039, 5041, 5044, 5047, 5049, 5065, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5087, 5088, 5089, 5090, 5105, 5106, 5107, 5108, 5128, 5131, 5146, 5166, 5167, 5190, 5205, 5206, 5207, 5225, 5226, 5227, 5230, 5232, 5236, 5237, 5243, 5244, 5245, 5266, 5286, 5293, 5294, 5295, 5296, 5306, 5307, 5325, 5326, 5345, 5346, 5368, 5370, 5372, 5373, 5374, 5376, 5377, 5385, 5405, 5406, 5409, 5410, 5426, 5427, 5428, 5433, 5434, 5436, 5437, 5438, 5440, 5443, 5445, 5447, 5449, 5451, 5465, 5485, 5486, 5507, 5508, 5509, 5525, 5526, 5528, 5529, 5530, 5532, 5534, 5535, 5547, 5548, 5549, 5550, 5551, 5553, 5566, 5567, 5568, 5570, 5571, 5573, 5575, 5576, 5577, 5605, 5606, 5607, 5608, 5609, 5610, 5611, 5612, 5613, 5625, 5626, 5646, 5647, 5648, 5665, 5685, 5705, 5707, 5708, 5709, 5710, 5711, 5726, 5727, 5728, 5729, 5730, 5748, 5749, 5751, 5752, 5753, 5754, 5766, 5767, 5768, 5769, 5770, 5771, 5772, 5775, 5776, 5778, 5779, 5782, 5784, 5785, 5786, 5805, 5806, 5808, 5810, 5812, 5813, 5814, 5816, 5818, 5820, 5821, 5822, 5824, 5826, 5828, 5830, 5831, 5832, 5845, 5846, 5865, 5866, 5885, 5907, 5908, 5945, 5986, 5988, 5991, 6006, 6007, 6009, 6010, 6025, 6026, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6059, 6060, 6062, 6063, 6065, 6066, 6067, 6071, 6072, 6074, 6075, 6077, 6078, 6079, 6080, 6084, 6094, 6097, 6103, 6104, 6105, 6106, 6108, 6109, 6114, 6115, 6117, 6118, 6119, 6123, 6124, 6127, 6168, 6170, 6171, 6189, 6190, 6191, 6192, 6194, 6198, 6208, 6228, 6230, 6231, 6232, 6233, 6301, 6308, 6353, 6380, 6388, 6389, 6390, 6393, 6395, 6397, 6399, 6401, 6403, 6405, 6407, 6409, 6410, 6411, 6413, 6415, 6417, 6419, 6421, 6423, 6425, 6427, 6429, 6432, 6433, 6434, 6436, 6439, 6440, 6441, 6442, 6443, 6444, 6446, 6447, 6448, 6449, 6468, 6469, 6470, 6471, 6472, 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480, 6483, 6485, 6487, 6489, 6491, 6493, 6495, 6497, 6510, 6512, 6514, 6528, 6529, 6530, 6531, 6532, 6533, 6535, 6538, 6540, 6542, 6545, 6546, 6549, 6550, 6552, 6568, 6570, 6571, 6572, 6573, 6574, 6575, 6589, 6590, 6608, 6610, 6628, 6630, 6632, 6649, 6668, 6669, 6670, 6672, 6675, 6678, 6680, 6682, 6686, 6687, 6690, 6692, 6693, 6694, 6695, 6696, 6697, 6698, 6699, 6700, 6701, 6702, 6704, 6705, 6707, 6708, 6709, 6710, 6711, 6713, 6715, 6717, 6719, 6721, 6723, 6725, 6727, 6729, 6731, 6733, 6738, 6740, 6741, 6743, 6744, 6747, 6748, 6751, 6752, 6754, 6760, 6762, 6763, 6764, 6765, 6767, 6769, 6770, 6772, 6775, 6776, 6777, 6778, 6779, 6780, 6784, 6785, 6787, 6789, 6791, 6793, 6795, 6832, 6834, 6836, 6837, 6839, 6843, 6844, 6845, 6846, 6847, 6848, 6849, 6850, 6853, 6854, 6855, 6856, 6857, 6858, 6868, 6869, 6870, 6871, 6872, 6873, 6874, 6875, 6876, 6877, 6878, 6879, 6882, 6883, 6892, 6893, 6894, 6913, 6914, 6916, 6917, 6918, 6920, 6921, 6922, 6923, 6924, 6925, 6926, 6927, 6928, 6929, 6930, 6931, 6932, 6933, 6934, 6935, 6936, 6937, 6938, 6939, 6940, 6944, 6946, 6947, 6949, 6950, 6952, 6953, 6954, 6955, 6957, 6959, 6961, 6962, 6963, 6965, 6966, 6967, 6968, 6973, 6974, 6978, 6979, 6980, 6981, 6983, 6984, 6988, 6989, 6990, 6991, 6994, 6995, 6996, 6997, 7001, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7011, 7016, 7019, 7021, 7022, 7024, 7026, 7027, 7028, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7038, 7041, 7042, 7043, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7073, 7074, 7093, 7094, 7095, 7096, 7097, 7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105, 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, 7115, 7117, 7120, 7124, 7125, 7126, 7127, 7128, 7129, 7130, 7131, 7132, 7133, 7134, 7135, 7136, 7137, 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161, 7162, 7163, 7164, 7165, 7166, 7167, 7168, 7169, 7170, 7171, 7172, 7173, 7174, 7176, 7177, 7178, 7179, 7180, 7181, 7182, 7183, 7184, 7185, 7186, 7187, 7188, 7189, 7190, 7191, 7192, 7193, 7194, 7195, 7196, 7197, 7198, 7199, 7200, 7201, 7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, 7210, 7211, 7212, 7213, 7214, 7215, 7216, 7217, 7218, 7219, 7220, 7221, 7222, 7223, 7224, 7225, 7226, 7227, 7228, 7229, 7230, 7231, 7232, 7233, 7234, 7235, 7236, 7237, 7238, 7239, 7240, 7241, 7242, 7243, 7244, 7245, 7246, 7247, 7249, 7250, 7269, 7272, 7273, 7308, 7310, 7328, 7329, 7331, 7332, 7333, 7334, 7335, 7336, 7337, 7338, 7340, 7341, 7342, 7343, 7346, 7351, 7353, 7354, 7355, 7356, 7357, 7360, 7361, 7362, 7364, 7366, 7367, 7368, 7370, 7372, 7373, 7374, 7377, 7379, 7380, 7381, 7383, 7384, 7389, 7390, 7429, 7509, 7529, 7530, 7531, 7535, 7537, 7538, 7552, 7570, 7591, 7593, 7594, 7595, 7597, 7598, 7600, 7601, 7604, 7606, 7607, 7609, 7612, 7613, 7614, 7618, 7620, 7622, 7623, 7624, 7626, 7629, 7631, 7632, 7633, 7649, 7670, 7673, 7689, 7709, 7749, 7750, 7751, 7753, 7758, 7759, 7760, 7761, 7762, 7764, 7765, 7766, 7769, 7789, 7790, 7791, 7792, 7793, 7794, 7795, 7796, 7797, 7798, 7799, 7800, 7801, 7803, 7805, 7807, 7809, 7810, 7811, 7813, 7814, 7815, 7816, 7817, 7819, 7820, 7822, 7824, 7826, 7827, 7831, 7832, 7835, 7838, 7841, 7842, 7844, 7846, 7849, 7851, 7852, 7859, 7860, 7861, 7862, 7865, 7866, 7867, 7868, 7871, 7873, 7874, 7875, 7889, 7901, 7902, 7904, 7907, 7910, 7912, 7914, 7915, 7916, 7919, 7921, 7929, 7930, 7931, 7932, 7935, 7951, 7952, 7971, 7990, 7991, 7992, 7993, 7996, 7997, 7998, 7999, 8000, 8001, 8009, 8010, 8012, 8013, 8029, 8054, 8055, 8069, 8089, 8129, 8169, 8170, 8176, 8186, 8229, 8310, 8311, 8313, 8315, 8329, 8331, 8333, 8334, 8335, 8349, 8350, 8351, 8352, 8353, 8354, 8355, 8390, 8413, 8430, 8449, 8474, 8477, 8569, 8575, 8590, 8591, 8592, 8593, 8594, 8595, 8596, 8597, 8598, 8609, 8610, 8611, 8612, 8629, 8631, 8633, 8634, 8649, 8652, 8653, 8654, 8655, 8656, 8658, 8661, 8662, 8663, 8664, 8666, 8667, 8668, 8669, 8670, 8673, 8674, 8677, 8678, 8679, 8681, 8682, 8685, 8686, 8687, 8688, 8689, 8692, 8694, 8696, 8697, 8698, 8699, 8700, 8701, 8702, 8703, 8704, 8706, 8707, 8708, 8709, 8710, 8711, 8717, 8718, 8729, 8749, 8750, 8751, 8752, 8753, 8754, 8755, 8756, 8757, 8758, 8759, 8760, 8762, 8764, 8766, 8767, 8772, 8773, 8777, 8778, 8780, 8781, 8790, 8791, 8792, 8793, 8794, 8798, 8799, 8803, 8804, 8805, 8806, 8807, 8812, 8813, 8814, 8815, 8820, 8821, 8822, 8823, 8825, 8826, 8827, 8828, 8829, 8830, 8832, 8839, 8844, 8845, 8846, 8847, 8848, 8849, 8872, 8891, 8893, 8894, 8895, 8898, 8899, 8900, 8901, 8929, 8989, 9023, 9024, 9026, 9027, 9049, 9051, 9052, 9053, 9054, 9069, 9072, 9073, 9089, 9130, 9133, 9134, 9135, 9149, 9151, 9169, 9211, 9212, 9213, 9230, 9232, 9233, 9234, 9235, 9236, 9250, 9252, 9256, 9258, 9259, 9261, 9265, 9266, 9267, 9268, 9271, 9272, 9274, 9275, 9279, 9281, 9283, 9284, 9285, 9286, 9288, 9289, 9291, 9292, 9293, 9309, 9329, 9332, 9333, 9334, 9335, 9336, 9337, 9340, 9341, 9348, 9349, 9351, 9352, 9353, 9391, 9409, 9410, 9411, 9413, 9414, 9415, 9417, 9418, 9419, 9420, 9421, 9422, 9425, 9426, 9427, 9428, 9430, 9432, 9433, 9434, 9435, 9436, 9437, 9439, 9441, 9442, 9444, 9445, 9446, 9447, 9448, 9470, 9472, 9477, 9489, 9532, 9533, 9549, 9550, 9552, 9554, 9561, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9596, 9599, 9602, 9603, 9604, 9605, 9606, 9609, 9610, 9613, 9614, 9615, 9616, 9617, 9618, 9619, 9620, 9621, 9623, 9625, 9626, 9627, 9628, 9629, 9630, 9633, 9634, 9635, 9636, 9637, 9638, 9641, 9642, 9643, 9644, 9645, 9648, 9649, 9652, 9653, 9656, 9657, 9660, 9661, 9664, 9665, 9668, 9669, 9670, 9671, 9672, 9673, 9674, 9675, 9678, 9679, 9680, 9681, 9682, 9683, 9686, 9687, 9688, 9689, 9690, 9691, 9692, 9693, 9694, 9695, 9696, 9697, 9698, 9699, 9709, 9710, 9714, 9715, 9716, 9719, 9720, 9724, 9725, 9728, 9729, 9733, 9734, 9735, 9736, 9737, 9738, 9739, 9740, 9741, 9742, 9751, 9752, 9753, 9757, 9761, 9762, 9764, 9766, 9768, 9769, 9770, 9771, 9772, 9773, 9776, 9777, 9778, 9779, 9781, 9792, 9794, 9797, 9798, 9799, 9802, 9803, 9807, 9809, 9814, 9815, 9816, 9817, 9819, 9820, 9824, 9825, 9826, 9898, 9899, 9900, 9901, 9902, 9911, 9912, 9935, 9936, 9939, 9940, 9943, 9944, 9946, 9947, 9952, 9969, 9991, 9999, 10009, 10010, 10032, 10035, 10036, 10038, 10039, 10043, 10049, 10050, 10055, 10057, 10069, 10071, 10089, 10094, 10109, 10110, 10111, 10114, 10115, 10116, 10130, 10131, 10132, 10133, 10135, 10136, 10137, 10139, 10141, 10143, 10146, 10148, 10150, 10151, 10152, 10169, 10170, 10171, 10172, 10173, 10176, 10177, 10181, 10182, 10184, 10186, 10187, 10188, 10189, 10190, 10192, 10193, 10194, 10195, 10196, 10197, 10198, 10210, 10213, 10215, 10216, 10217, 10218, 10219, 10222, 10225, 10226, 10229, 10230, 10231, 10235, 10236, 10237, 10240, 10241, 10242, 10243, 10245, 10246, 10247, 10248, 10251, 10252, 10254, 10269, 10275, 10277, 10279, 10285, 10286, 10287, 10290, 10291, 10292, 10295, 10296, 10299, 10300, 10303, 10304, 10307, 10308, 10311, 10312, 10316, 10318, 10319, 10320, 10321, 10324, 10325, 10328, 10329, 10332, 10333, 10336, 10338, 10339, 10340, 10341, 10342, 10343, 10344, 10345, 10348, 10349, 10350, 10351, 10354, 10355, 10356, 10357, 10358, 10359, 10362, 10363, 10364, 10365, 10366, 10367, 10370, 10371, 10374, 10375, 10376, 10377, 10379, 10382, 10383, 10384, 10387, 10388, 10391, 10392, 10395, 10398, 10399, 10403, 10404, 10408, 10409, 10413, 10414, 10417, 10418, 10421, 10422, 10425, 10426, 10427, 10428, 10433, 10434, 10435, 10438, 10441, 10442, 10443, 10444, 10448, 10449, 10450, 10451, 10452, 10453, 10454, 10456, 10457, 10458, 10460, 10461, 10462, 10463, 10464, 10466, 10468, 10469, 10470, 10471, 10472, 10473, 10474, 10475, 10476, 10478, 10479, 10482, 10483, 10484, 10488, 10489, 10492, 10493, 10496, 10497, 10500, 10501, 10504, 10505, 10508, 10509, 10512, 10513, 10516, 10517, 10529, 10530, 10535, 10536, 10539, 10540, 10543, 10544, 10545, 10546, 10547, 10548, 10551, 10552, 10554, 10558, 10560, 10561, 10566, 10567, 10570, 10572, 10576, 10577, 10578, 10579, 10580, 10586, 10587, 10588, 10589, 10590, 10611, 10614, 10616, 10617, 10618, 10619, 10622, 10625, 10629, 10631, 10632, 10635, 10636, 10637, 10638, 10641, 10642, 10643, 10644, 10645, 10647, 10649, 10650, 10653, 10655, 10656, 10658, 10660, 10668, 10669, 10674, 10689, 10691, 10693, 10694, 10695, 10696, 10697, 10704, 10705, 10706, 10707, 10708, 10709, 10710, 10714, 10724, 10726, 10727, 10729, 10730, 10735, 10736, 10738, 10739, 10740, 10741, 10742, 10743, 10747, 10748, 10754, 10790, 10791, 10795, 10797, 10811, 10812, 10813, 10815, 10817, 10820, 10821, 10834, 10858, 10878, 10896, 10901, 10907, 10908, 10911, 10912, 10913, 10920, 10921, 10930, 10931, 10935, 10936, 10937, 10938, 10939, 10940, 10943, 10944, 10945, 10946, 10949, 10953, 10954, 10957, 10958, 10969, 10980, 10981, 10982, 10989, 11013, 11014, 11017, 11018, 11021, 11022, 11025, 11027, 11028, 11033, 11035, 11036, 11037, 11038, 11040, 11042, 11049, 11051, 11052, 11053, 11054, 11055, 11056, 11060, 11063, 11070, 11072, 11074, 11075, 11080, 11081, 11100, 11101, 11109, 11110, 11113, 11114, 11117, 11119, 11121, 11123, 11124, 11126, 11127, 11129, 11130, 11132, 11133, 11135, 11136, 11146, 11147, 11149, 11150, 11152, 11153, 11155, 11156, 11158, 11159, 11165, 11166, 11167, 11168, 11179, 11180, 11181, 11182, 11183, 11189, 11190, 11193, 11194, 11197, 11198, 11201, 11202, 11205, 11207, 11209, 11211, 11213, 11215, 11217, 11218, 11221, 11222, 11225, 11226, 11229, 11230, 11233, 11234, 11237, 11238, 11241, 11243, 11245, 11246, 11249, 11251, 11253, 11254, 11255, 11256, 11257, 11258, 11264, 11265, 11267, 11269, 11271, 11272, 11274, 11275, 11276, 11277, 11278, 11279, 11283, 11284, 11286, 11287, 11288, 11289, 11293, 11296, 11297, 11298, 11299, 11301, 11302, 11303, 11305, 11306, 11307, 11309, 11310, 11311, 11312, 11313, 11314, 11320, 11321, 11322, 11325, 11326, 11327, 11328, 11331, 11332, 11333, 11334, 11335, 11336, 11337, 11338, 11339, 11340, 11341, 11342, 11343, 11344, 11345, 11346, 11347, 11349, 11350, 11351, 11353, 11354, 11355, 11357, 11358, 11359, 11360, 11361, 11369, 11370, 11372, 11375, 11376, 11377, 11379, 11380, 11382, 11383, 11384, 11385, 11386, 11387, 11390, 11391, 11394, 11395, 11406, 11409, 11416, 11424, 11425, 11426, 11427, 11428, 11429, 11430, 11431, 11434, 11435, 11438, 11439, 11443, 11456, 11459, 11460, 11461, 11464, 11465, 11466, 11467, 11468, 11469, 11470, 11474, 11475, 11476, 11479, 11509, 11510, 11511, 11513, 11532, 11533, 11534, 11536, 11537, 11538, 11539, 11542, 11543, 11544, 11545, 11546, 11548, 11549, 11550, 11551, 11552, 11553, 11554, 11555, 11556, 11557, 11558, 11559, 11560, 11561, 11562, 11563, 11564, 11565, 11566, 11567, 11568, 11569, 11570, 11571, 11572, 11573, 11574, 11576, 11577, 11578, 11579, 11581, 11582, 11583, 11584, 11585, 11586, 11590, 11591, 11592, 11595, 11609, 11610, 11611, 11629, 11630, 11631, 11632, 11638, 11639, 11640, 11650, 11651, 11652, 11653, 11655, 11656, 11658, 11660, 11661, 11664, 11666, 11667, 11669, 11671, 11674, 11679, 11680, 11685, 11688, 11690, 11693, 11694, 11733, 11736, 11738, 11740, 11743, 11745, 11749, 11751, 11753, 11754, 11755, 11756, 11757, 11758, 11759, 11762, 11763, 11768, 11769, 11772, 11773, 11774, 11776, 11790, 11791, 11792, 11793, 11794, 11795, 11797, 11798, 11799, 11801, 11803, 11804, 11805, 11806, 11809, 11811, 11812, 11814, 11816, 11817, 11818, 11820, 11822, 11825, 11826, 11830, 11831, 11832, 11833, 11834, 11836, 11849, 11851, 11852, 11855, 11856, 11859, 11860, 11863, 11864, 11866, 11868, 11870, 11872, 11874, 11876, 11878, 11880, 11882, 11884, 11886, 11887, 11892, 11893, 11894, 11895, 11896, 11899, 11900, 11902, 11905, 11906, 11907, 11911, 11913, 11930, 11949, 11953, 11955, 11956, 11957, 11961, 11962, 11963, 11965, 11967, 11969, 11972, 11973, 11976, 11977, 11979, 11981, 11984, 11987, 11990, 11991, 11994, 11995, 11996, 11997, 12000, 12001, 12002, 12003, 12005, 12007, 12008, 12010, 12012, 12015, 12016, 12020, 12024, 12025, 12026, 12028, 12029, 12030, 12031, 12032, 12033, 12034, 12036, 12039, 12041, 12044, 12045, 12046, 12047, 12048, 12050, 12052, 12053, 12055, 12057, 12058, 12060, 12061, 12065, 12068, 12075, 12076, 12078, 12080, 12081, 12083, 12089, 12161, 12165, 12167, 12168, 12170, 12171, 12189, 12190, 12230, 12249, 12269, 12272, 12289, 12290, 12329, 12330, 12331, 12332, 12334, 12350, 12369, 12370, 12371, 12372, 12373, 12374, 12390, 12391, 12431, 12435, 12449, 12470, 12471, 12472, 12473, 12474, 12475, 12609, 12610, 12629, 12669, 12671, 12672, 12673, 12676, 12678, 12679, 12709, 12729, 12790, 12809, 12810, 12812, 12813, 12822, 12829, 12832, 12849, 12890, 12891, 12893, 12909, 12910, 12911, 12915, 12917, 12918, 12919, 12920, 12921, 12925, 12926, 12928, 12930, 12932, 12934, 12938, 12942, 12943, 12944, 12945, 12949, 12951, 12953, 12954, 12956, 12957, 12959, 12960, 12961, 12965, 12967, 12969, 12971, 12975, 12977, 12989, 12990, 13029, 13030, 13031, 13032, 13049, 13050, 13089, 13090, 13091, 13093, 13099, 13129, 13130, 13132, 13149, 13151, 13152, 13171, 13249, 13252, 13253, 13254, 13257, 13258, 13260, 13262, 13264, 13266, 13269, 13270, 13273, 13274, 13276, 13278, 13280, 13281, 13282, 13284, 13285, 13286, 13288, 13294, 13296, 13298, 13300, 13301, 13303, 13306, 13308, 13311, 13312, 13315, 13316, 13319, 13320, 13321, 13322, 13325, 13326, 13330, 13334, 13335, 13336, 13338, 13341, 13342, 13343, 13346, 13348, 13349, 13351, 13353, 13356, 13361, 13363, 13364, 13365, 13367, 13369, 13370, 13371, 13374, 13375, 13377, 13379, 13382, 13383, 13384, 13385, 13386, 13388, 13390, 13392, 13394, 13398, 13400, 13409, 13411, 13414, 13415, 13429, 13430, 13432, 13434, 13436, 13438, 13439, 13440, 13442, 13445, 13446, 13449, 13450, 13453, 13454, 13455, 13456, 13457, 13458, 13459, 13460, 13461, 13462, 13463, 13464, 13465, 13466, 13467, 13468, 13469, 13470, 13471, 13472, 13475, 13476, 13532, 13533, 13538, 13540, 13541, 13543, 13544, 13547, 13548, 13552, 13554, 13556, 13558, 13560, 13563, 13565, 13567, 13569, 13571, 13573, 13590, 13592, 13594, 13596, 13598, 13600, 13630, 13632, 13634, 13636, 13638, 13640, 13642, 13644, 13645, 13647, 13650, 13652, 13654, 13656, 13658, 13660, 13662, 13671, 13709, 13711, 13713, 13714, 13715, 13729, 13769, 13771, 13773, 13775, 13777, 13779, 13781, 13783, 13785, 13786, 13789, 13790, 13793, 13795, 13797, 13799, 13801, 13803, 13805, 13807, 13808, 13809, 13811, 13813, 13815, 13817, 13818, 13821, 13822, 13825, 13827, 13828, 13831, 13833, 13835, 13837, 13839, 13841, 13842, 13849, 13850, 13852, 13853, 13854, 13889, 13891, 13893, 13895, 13950, 13952, 13954, 13969, 13989, 13990, 13991, 13992, 14013, 14014, 14017, 14018, 14021, 14022, 14026, 14027, 14030, 14031, 14034, 14035, 14052, 14053, 14056, 14057, 14061, 14063, 14064, 14072, 14092, 14093, 14132, 14172, 14193, 14212, 14216, 14232, 14233, 14234, 14235, 14236, 14292, 14293, 14296, 14304, 14307, 14308, 14309, 14310, 14317, 14320, 14322, 14323, 14326, 14329, 14330, 14332, 14333, 14339, 14340, 14341, 14342, 14343, 14344, 14347, 14352, 14355, 14356, 14357, 14358, 14359, 14360, 14361, 14369, 14371, 14380, 14381, 14384, 14386, 14387, 14388, 14394, 14395, 14396, 14397, 14398, 14401, 14402, 14403, 14404, 14405, 14406, 14407, 14408, 14409, 14412, 14413, 14415, 14416, 14420, 14422, 14423, 14424, 14427, 14429, 14431, 14452, 14453, 14472, 14492, 14493, 14494, 14495, 14496, 14498, 14519, 14526, 14529, 14530, 14531, 14532, 14533, 14534, 14537, 14538, 14544, 14554, 14555, 14556, 14561, 14563, 14564, 14565, 14566, 14576, 14577, 14580, 14586, 14587, 14589, 14591, 14612, 14632, 14634, 14652, 14653, 14654, 14655, 14662, 14664, 14665, 14666, 14668, 14669, 14670, 14671, 14672, 14673, 14694, 14697, 14718, 14719, 14732, 14733, 14752, 14753, 14755, 14756, 14758, 14760, 14761, 14764, 14765, 14766, 14769, 14770, 14772, 14773, 14774, 14775, 14777, 14785, 14786, 14792, 14793, 14794, 14797, 14798, 14812, 14832, 14854, 14855, 14856, 14872, 14875, 14877, 14878, 14879, 14881, 14883, 14885, 14886, 14887, 14888, 14889, 14890, 14894, 14913, 14945, 14948, 14949, 14953, 14954, 14972, 14993, 14994, 14995, 14997, 14998, 15000, 15003, 15004, 15012, 15032, 15093, 15095, 15096, 15097, 15099, 15102, 15113, 15114, 15115, 15134, 15139, 15141, 15142, 15144, 15146, 15147, 15148, 15149, 15152, 15153, 15172, 15173, 15174, 15175, 15176, 15178, 15183, 15184, 15185, 15186, 15187, 15189, 15192, 15193, 15194, 15195, 15196, 15198, 15201, 15202, 15203, 15205, 15206, 15207, 15210, 15211, 15214, 15215, 15216, 15217, 15222, 15224, 15228, 15230, 15233, 15235, 15237, 15238, 15239, 15240, 15243, 15245, 15247, 15248, 15251, 15252, 15259, 15260, 15263, 15265, 15267, 15268, 15269, 15271, 15273, 15274, 15276, 15277, 15278, 15279, 15280, 15281, 15284, 15285, 15289, 15290, 15302, 15303, 15304, 15305, 15309, 15310, 15311, 15313, 15314, 15315, 15318, 15319, 15320, 15322, 15324, 15326, 15329, 15331, 15342, 15350, 15352, 15363, 15365, 15366, 15367, 15370, 15371, 15387, 15389, 15399, 15401, 15403, 15408, 15409, 15411, 15414, 15415, 15416, 15418, 15419, 15421, 15424, 15426, 15427, 15428, 15435, 15441, 15442, 15444, 15445, 15447, 15448, 15451, 15456, 15457, 15460, 15461, 15462, 15473, 15476, 15478, 15479, 15481, 15502, 15504, 15511, 15513, 15515, 15517, 15519, 15521, 15524, 15528, 15532, 15536, 15537, 15540, 15543, 15544, 15548, 15550, 15552, 15553, 15557, 15558, 15559, 15560, 15561, 15562, 15563, 15565, 15566, 15567, 15568, 15569, 15571, 15572, 15573, 15574, 15575, 15577, 15578, 15579, 15581, 15596, 15597, 15600, 15601, 15603, 15604, 15606, 15609, 15610, 15611, 15612, 15613, 15614, 15615, 15616, 15617, 15621, 15622, 15624, 15625, 15626, 15627, 15630, 15632, 15634, 15635, 15636, 15637, 15638, 15641, 15642, 15643, 15644, 15646, 15648, 15649, 15650, 15651, 15660, 15661, 15662, 15665, 15667, 15668, 15684, 15685, 15687, 15688, 15689, 15690, 15691, 15692, 15698, 15701, 15707, 15711, 15714, 15716, 15718, 15720, 15722, 15726, 15728, 15729, 15731, 15732, 15733, 15734, 15735, 15736, 15737, 15744, 15745, 15746, 15747, 15748, 15749, 15750, 15752, 15753, 15755, 15756, 15757, 15758, 15759, 15760, 15761, 15762, 15763, 15766, 15767, 15770, 15771, 15775, 15776, 15778, 15779, 15780, 15782, 15784, 15803, 15804, 15805, 15806, 15807, 15808, 15809, 15811, 15813, 15814, 15815, 15816, 15817, 15818, 15819, 15820, 15821, 15823, 15825, 15827, 15829, 15831, 15833, 15835, 15837, 15838, 15840, 15843, 15844, 15845, 15847, 15849, 15851, 15853, 15855, 15856, 15858, 15860, 15862, 15863, 15864, 15867, 15869, 15870, 15872, 15875, 15879, 15883, 15884, 15887, 15889, 15891, 15893, 15895, 15896, 15901, 15902, 15903, 15904, 15906, 15909, 15912, 15914, 15915, 15916, 15925, 15926, 15927, 15931, 15935, 15936, 15945, 15949, 15951, 15953, 15954, 15955, 15956, 15960, 15966, 15968, 15970, 15971, 15972, 15975, 15976, 15977, 15979, 15981, 15982, 15985, 15986, 15987, 15988, 15989, 15990, 15992, 15993, 15994, 15995, 15996, 15997, 15998, 16003, 16004, 16005, 16006, 16007, 16008, 16012, 16013, 16015, 16020, 16022, 16023, 16024, 16025, 16026, 16027, 16028, 16029, 16037, 16040, 16042, 16047, 16048, 16055, 16057, 16058, 16060, 16063, 16066, 16067, 16068, 16070, 16071, 16072, 16076, 16077, 16079, 16082, 16083, 16088, 16091, 16093, 16096, 16099, 16100, 16102, 16103, 16105, 16106, 16108, 16112, 16118, 16123, 16125, 16127, 16128, 16129, 16130, 16131, 16132, 16134, 16137, 16139, 16144, 16147, 16149, 16151, 16154, 16155, 16157, 16158, 16160, 16163, 16164, 16165, 16166, 16172, 16175, 16176, 16179, 16180, 16182, 16184, 16192, 16195, 16197, 16199, 16201, 16203, 16204, 16207, 16208, 16209, 16212, 16219, 16220, 16224, 16225, 16226, 16228, 16229, 16233, 16234, 16235, 16236, 16237, 16242, 16246, 16248, 16250, 16252, 16253, 16258, 16260, 16262, 16263, 16264, 16265, 16267, 16268, 16269, 16270, 16275, 16276, 16278, 16279, 16280, 16282, 16283, 16284, 16285, 16286, 16287, 16292, 16293, 16294, 16295, 16297, 16300, 16301, 16302, 16303, 16304, 16305, 16306, 16307, 16308, 16309, 16310, 16311, 16312, 16316, 16317, 16319, 16320, 16323, 16324, 16325, 16326, 16328, 16329, 16331, 16332, 16333, 16335, 16336, 16339, 16340, 16341, 16342, 16343, 16354, 16355, 16362, 16364, 16366, 16368, 16369, 16370, 16371, 16373, 16374, 16375, 16376, 16377, 16378, 16379, 16380, 16382, 16383, 16384, 16385, 16386, 16387, 16389, 16391, 16393, 16396, 16397, 16398, 16401, 16402, 16403, 16404, 16405, 16406, 16409, 16411, 16413, 16414, 16416, 16417, 16418, 16419, 16421, 16422, 16423, 16425, 16426, 16427, 16430, 16432, 16433, 16435, 16437, 16438, 16442, 16444, 16446, 16448, 16449, 16451, 16453, 16454, 16455, 16458, 16459, 16464, 16465, 16468, 16469, 16470, 16471, 16472, 16473, 16474, 16475, 16478, 16479, 16480, 16481, 16482, 16483, 16484, 16485, 16486, 16489, 16490, 16491, 16494, 16495, 16498, 16500, 16502, 16503, 16505, 16506, 16508, 16509, 16510, 16513, 16514, 16515, 16519, 16521, 16522, 16523, 16524, 16525, 16528, 16529, 16530, 16533, 16534, 16535, 16536, 16539, 16540, 16555, 16556, 16559, 16560, 16563, 16564, 16567, 16568, 16577, 16578, 16579, 16580, 16581, 16582, 16583, 16584, 16586, 16589, 16590, 16591, 16593, 16594, 16595, 16598, 16599, 16602, 16603, 16605, 16607, 16608, 16609, 16611, 16612, 16614, 16615, 16616, 16617, 16618, 16620, 16621, 16623, 16624, 16625, 16626, 16628, 16629, 16632, 16637, 16638, 16641, 16642, 16643, 16645, 16646, 16648, 16651, 16652, 16655, 16656, 16657, 16658, 16659, 16660, 16661, 16662, 16664, 16665, 16666, 16667, 16669, 16670, 16673, 16674, 16692, 16693, 16697, 16699, 16700, 16701, 16702, 16703, 16704, 16705, 16706, 16707, 16708, 16710, 16712, 16714, 16715, 16717, 16719, 16720, 16721, 16727, 16728, 16729, 16734, 16735, 16737, 16738, 16742, 16743, 16746, 16747, 16755, 16756, 16757, 16758, 16759, 16761, 16762, 16766, 16767, 16768, 16769, 16770, 16771, 16772, 16773, 16774, 16783, 16786, 16787, 16788, 16789, 16790, 16793, 16794, 16806, 16807, 16808, 16809, 16810, 16811, 16813, 16814, 16815, 16816, 16817, 16818, 16819, 16821, 16822, 16823, 16824, 16825, 16826, 16827, 16828, 16829, 16830, 16831, 16832, 16835, 16836, 16837, 16839, 16842, 16843, 16847, 16848, 16849, 16851, 16852, 16854, 16855, 16858, 16860, 16862, 16863, 16868, 16872, 16873, 16903, 16906, 16908, 16912, 16913, 16917, 16918, 16920, 16921, 16922, 16927, 16928, 16929, 16930, 16931, 16933, 16934, 16935, 16941, 16942, 16947, 16950, 16951, 16952, 16954, 16955, 16956, 16957, 16960, 16961, 16962, 16964, 16966, 16967, 16968, 16969, 16971, 16973, 16974, 16978, 16981, 16982, 16983, 16996, 17008, 17013, 17014, 17015, 17016, 17017, 17018, 17020, 17021, 17023, 17024, 17028, 17030, 17032, 17033, 17035, 17036, 17038, 17039, 17040, 17041, 17042, 17043, 17044, 17046, 17048, 17049, 17050, 17051, 17052, 17053, 17064, 17066, 17067, 17077, 17083, 17084, 17085, 17086, 17087, 17088, 17110, 17111, 17112, 17113, 17115, 17117, 17118, 17119, 17122, 17123, 17137, 17141, 17143, 17144, 17145, 17146, 17147, 17148, 17149, 17150, 17151, 17152, 17153, 17154, 17155, 17156, 17158, 17159, 17161, 17162, 17163, 17164, 17166, 17167, 17168, 17169, 17171, 17173, 17175, 17176, 17177, 17181, 17182, 17183, 17184, 17185, 17186, 17187, 17189, 17190, 17193, 17194, 17195, 17196, 17198, 17199, 17201, 17202, 17203, 17206, 17207, 17208, 17209, 17210, 17212, 17213, 17216, 17217, 17218, 17219, 17221, 17222, 17224, 17225, 17227, 17229, 17232, 17233, 17235, 17243, 17244, 17246, 17247, 17248, 17249, 17250, 17252, 17257, 17258, 17259, 17261, 17263, 17264, 17267, 17272, 17273, 17274, 17276, 17277, 17278, 17279, 17280, 17281, 17285, 17287, 17289, 17290, 17291, 17292, 17295, 17296, 17300, 17301, 17302, 17303, 17304, 17305, 17307, 17309, 17314, 17316, 17317, 17318, 17319, 17320, 17322, 17324, 17329, 17330, 17331, 17332, 17333, 17335, 17336, 17337, 17338, 17342, 17343, 17344, 17345, 17348, 17349, 17352, 17353, 17356, 17357, 17360, 17361, 17364, 17365, 17367, 17370, 17371, 17372, 17373, 17376, 17380, 17384, 17385, 17386, 17387, 17402, 17404, 17405, 17406, 17407, 17409, 17410, 17411, 17413, 17414, 17415, 17416, 17417, 17418, 17422, 17425, 17426, 17429, 17430, 17431, 17432, 17433, 17434, 17437, 17438, 17443, 17444, 17446, 17452, 17453, 17454, 17456, 17459, 17460, 17462, 17463, 17464, 17466, 17467, 17468, 17469, 17470, 17473, 17474, 17477, 17478, 17479, 17481, 17485, 17488, 17490, 17494, 17498, 17502, 17503, 17504, 17505, 17507, 17510, 17511, 17512, 17513, 17516, 17518, 17520, 17521, 17523, 17524, 17527, 17530, 17532, 17536, 17537, 17538, 17539, 17540, 17541, 17542, 17544, 17552, 17553, 17554, 17555, 17556, 17557, 17560, 17565, 17568, 17570, 17572, 17575, 17576, 17578, 17580, 17581, 17583, 17584, 17585, 17586, 17587, 17588, 17589, 17590, 17591, 17592, 17593, 17594, 17595, 17597, 17598, 17599, 17600, 17601, 17602, 17603, 17604, 17605, 17606, 17609, 17610, 17611, 17613, 17615, 17616, 17617, 17619, 17620, 17621, 17622, 17626, 17627, 17628, 17630, 17631, 17632, 17633, 17634, 17635, 17637, 17638, 17639, 17644, 17645, 17648, 17650, 17658, 17659, 17661, 17662, 17663, 17664, 17665, 17668, 17672, 17673, 17675, 17677, 17678, 17679, 17680, 17681, 17682, 17688, 17691, 17699, 17700, 17701, 17702, 17705, 17715, 17719, 17720, 17721, 17722, 17724, 17725, 17726, 17727, 17728, 17730, 17731, 17732, 17733, 17735, 17736, 17737, 17741, 17745, 17747, 17748, 17749, 17750, 17755, 17756, 17757, 17760, 17761, 17762, 17763, 17766, 17767, 17768, 17769, 17771, 17773, 17774, 17777, 17778, 17782, 17783, 17787, 17788, 17789, 17792, 17793, 17801, 17802, 17803, 17804, 17807, 17811, 17816, 17817, 17818, 17821, 17822, 17823, 17824, 17825, 17826, 17827, 17829, 17831, 17833, 17835, 17836, 17837, 17838, 17844, 17845, 17847, 17848, 17851, 17852, 17853, 17854, 17855, 17874, 17875, 17880, 17881, 17883, 17886, 17887, 17891, 17892, 17893, 17896, 17897, 17899, 17900, 17901, 17902, 17903, 17904, 17906, 17908, 17909, 17910, 17911, 17913, 17914, 17915, 17918, 17920, 17921, 17924, 17925, 17928, 17929, 17932, 17933, 17936, 17938, 17939, 17942, 17943, 17949, 17950, 17951, 17954, 17955, 17956, 17957, 17958, 17961, 17962, 17965, 17966, 17970, 17971, 17973, 17974, 17976, 17977, 17978, 17982, 17983, 17985, 17988, 17990, 17991, 17992, 18001, 18002, 18004, 18005, 18006, 18007, 18010, 18011, 18013, 18014, 18015, 18016, 18017, 18020, 18023, 18024, 18025, 18026, 18027, 18031, 18032, 18033, 18034, 18037, 18039, 18040, 18045, 18046, 18047, 18048, 18051, 18053, 18054, 18055, 18056, 18058, 18059, 18064, 18070, 18071, 18072, 18074, 18077, 18078, 18085, 18087, 18091, 18092, 18093, 18096, 18099, 18102, 18103, 18104, 18105, 18107, 18109, 18111, 18114, 18118, 18120, 18122, 18124, 18127, 18128, 18130, 18134, 18136, 18141, 18142, 18144, 18145, 18146, 18150, 18157, 18158, 18159, 18160, 18162, 18165, 18172, 18174, 18175, 18176, 18177, 18179, 18181, 18182, 18183, 18186, 18187, 18188, 18189, 18190, 18192, 18195, 18198, 18199, 18202, 18203, 18204, 18207, 18208, 18210, 18211, 18213, 18214, 18215, 18216, 18218, 18219, 18221, 18222, 18231, 18232, 18235, 18236, 18240, 18241, 18242, 18243, 18246, 18249, 18250, 18251, 18253, 18254, 18255, 18258, 18261, 18263, 18264, 18267, 18268, 18270, 18277, 18278, 18280, 18281, 18282, 18284, 18285, 18286, 18289, 18290, 18291, 18292, 18295, 18296, 18297, 18300, 18301, 18302, 18304, 18306, 18307, 18308, 18311, 18320, 18321, 18322, 18323, 18324, 18325, 18326, 18327, 18328, 18329, 18330, 18333, 18334, 18336, 18338, 18339, 18340, 18341, 18343, 18349, 18350, 18354, 18355, 18356, 18357, 18358, 18368, 18369, 18370, 18371, 18384, 18387, 18388, 18389, 18390, 18393, 18394, 18397, 18398, 18399, 18400, 18401, 18405, 18407, 18408, 18409, 18415, 18418, 18420, 18421, 18422, 18423, 18424, 18425, 18426, 18427, 18428, 18429, 18432, 18435, 18437, 18439, 18443, 18444, 18445, 18446, 18448, 18450, 18454, 18456, 18457, 18459, 18460, 18461, 18462, 18463, 18464, 18473, 18474, 18475, 18476, 18477, 18479, 18481, 18483, 18484, 18487, 18492, 18493, 18495, 18497, 18498, 18500, 18501, 18506, 18507, 18511, 18512, 18513, 18514, 18520, 18522, 18523, 18525, 18526, 18527, 18528, 18529, 18530, 18531, 18532, 18535, 18536, 18538, 18539, 18540, 18542, 18543, 18544, 18545, 18546, 18547, 18549, 18551, 18552, 18553, 18554, 18556, 18557, 18558, 18560, 18561, 18562, 18563, 18566, 18567, 18568, 18569, 18570, 18571, 18572, 18573, 18576, 18577, 18578, 18579, 18580, 18581, 18582, 18583, 18584, 18589, 18590, 18591, 18592, 18593, 18594, 18595, 18599, 18600, 18601, 18602, 18603, 18604, 18607, 18609, 18610, 18611, 18616, 18617, 18620, 18622, 18623, 18626, 18627, 18637, 18638, 18639, 18640, 18641, 18642, 18644, 18646, 18647, 18648, 18649, 18650, 18651, 18653, 18655, 18656, 18658, 18659, 18660, 18661, 18664, 18666, 18667, 18668, 18669, 18670, 18672, 18673, 18674, 18675, 18676, 18679, 18681, 18682, 18683, 18686, 18687, 18688, 18689, 18690, 18691, 18692, 18693, 18694, 18695, 18702, 18703, 18704, 18709, 18712, 18714, 18715, 18717, 18718, 18720, 18722, 18725, 18731, 18732, 18733, 18734, 18735, 18738, 18739, 18740, 18741, 18742, 18743, 18744, 18745, 18746, 18747, 18748, 18749, 18750, 18751, 18752, 18754, 18755, 18756, 18759, 18760, 18761, 18762, 18764, 18765, 18766, 18769, 18771, 18772, 18773, 18776, 18779, 18780, 18783, 18784, 18787, 18788, 18789, 18790, 18792, 18793, 18795, 18797, 18799, 18801, 18803, 18805, 18807, 18809, 18811, 18812, 18814, 18815, 18816, 18822, 18824, 18825, 18826, 18828, 18829, 18835, 18836, 18838, 18841, 18843, 18845, 18847, 18849, 18850, 18851, 18852, 18853, 18854, 18855, 18856, 18857, 18859, 18860, 18861, 18862, 18863, 18864, 18865, 18866, 18868, 18870, 18872, 18874, 18876, 18880, 18881, 18882, 18888, 18889, 18890, 18891, 18892, 18893, 18894, 18895, 18896, 18898, 18899, 18900, 18904, 18906, 18908, 18909, 18911, 18912, 18913, 18914, 18915, 18916, 18921, 18924, 18925, 18927, 18928, 18938, 18940, 18941, 18942, 18943, 18948, 18949, 18950, 18952, 18956, 18959, 18960, 18961, 18962, 18963, 18964, 18965, 18966, 18967, 18970, 18971, 18972, 18973, 18980, 18982, 18984, 18992, 18994, 18995, 18999, 19000, 19001, 19005, 19008, 19013, 19015, 19016, 19017, 19022, 19028, 19035, 19037, 19038, 19041, 19043, 19044, 19045, 19046, 19047, 19049, 19051, 19052, 19053, 19054, 19055, 19056, 19057, 19058, 19059, 19060, 19062, 19064, 19065, 19066, 19069, 19076, 19077, 19078, 19079, 19080, 19081, 19082, 19083, 19084, 19087, 19088, 19089, 19092, 19094, 19095, 19099, 19102, 19103, 19104, 19105, 19108, 19111, 19117, 19118, 19123, 19124, 19127, 19128, 19129, 19130, 19131, 19132, 19134, 19135, 19136, 19141, 19142, 19143, 19144, 19145, 19148, 19149, 19150, 19151, 19152, 19153, 19154, 19156, 19157, 19158, 19159, 19160, 19162, 19167, 19168, 19170, 19172, 19174, 19176, 19178, 19180, 19182, 19184, 19186, 19188, 19192, 19194, 19197, 19198, 19202, 19203, 19205, 19206, 19208, 19209, 19211, 19212, 19213, 19214, 19216, 19222, 19224, 19226, 19228, 19231, 19232, 19233, 19234, 19235, 19236, 19237, 19238, 19239, 19244, 19246, 19247, 19248, 19253, 19254, 19255, 19256, 19261, 19262, 19263, 19264, 19265, 19266, 19267, 19273, 19274, 19275, 19276, 19277, 19279, 19284, 19294, 19296, 19297, 19305, 19308, 19309, 19312, 19313, 19314, 19317, 19319, 19320, 19321, 19322, 19323, 19326, 19328, 19336, 19337, 19342, 19343, 19344, 19345, 19346, 19349, 19350, 19351, 19353, 19354, 19356, 19358, 19359, 19360, 19361, 19362, 19363, 19364, 19368, 19372, 19374, 19382, 19384, 19385, 19386, 19388, 19390, 19392, 19394, 19396, 19398, 19402, 19409, 19411, 19412, 19415, 19417, 19418, 19419, 19423, 19426, 19427, 19429, 19430, 19432, 19433, 19434, 19437, 19439, 19440, 19445, 19446, 19447, 19448, 19449, 19452, 19453, 19459, 19460, 19463, 19468, 19469, 19470, 19472, 19474, 19476, 19481, 19485, 19486, 19489, 19490, 19492, 19495, 19496, 19497, 19499, 19502, 19503, 19505, 19507, 19509, 19513, 19514, 19515, 19516, 19520, 19521, 19522, 19523, 19524, 19532, 19533, 19536, 19538, 19539, 19541, 19542, 19543, 19544, 19546, 19547, 19548, 19549, 19550, 19551, 19552, 19553, 19555, 19556, 19557, 19558, 19559, 19560, 19561, 19562, 19563, 19564, 19565, 19566, 19567, 19568, 19569, 19575, 19576, 19577, 19578, 19579, 19580, 19581, 19582, 19583, 19584, 19585, 19591, 19595, 19597, 19599, 19601, 19602, 19612, 19614, 19615, 19617, 19619, 19620, 19622, 19623, 19624, 19625, 19626, 19627, 19628, 19629, 19630, 19631, 19632, 19633, 19635, 19636, 19637, 19638, 19639, 19641, 19642, 19643, 19644, 19645, 19646, 19647, 19648, 19649, 19650, 19651, 19652, 19653, 19654, 19655, 19656, 19657, 19661, 19666, 19668, 19671, 19675, 19676, 19679, 19680, 19683, 19684, 19686, 19692, 19693, 19697, 19698, 19699, 19703, 19706, 19707, 19708, 19710, 19711, 19712, 19715, 19720, 19721, 19722, 19723, 19725, 19737, 19738, 19739, 19740, 19744, 19745, 19746, 19747, 19748, 19749, 19750, 19751, 19752, 19753, 19755, 19756, 19762, 19765, 19772, 19773, 19774, 19778, 19780, 19782, 19787, 19789, 19791, 19795, 19797, 19798, 19799, 19800, 19801, 19802, 19805, 19807, 19808, 19813, 19814, 19815, 19817, 19821, 19822, 19824, 19825, 19827, 19829, 19831, 19833, 19835, 19837, 19840, 19841, 19842, 19843, 19845, 19847, 19848, 19849, 19851, 19854, 19871, 19872, 19873, 19877, 19878, 19885, 19886, 19889, 19890, 19894, 19895, 19896, 19899, 19900, 19903, 19904, 19905, 19906, 19907, 19908, 19909, 19914, 19915, 19918, 19920, 19921, 19922, 19923, 19924, 19925, 19926, 19927, 19928, 19929, 19930, 19931, 19932, 19933, 19934, 19935, 19936, 19937, 19938, 19939, 19940, 19941, 19942, 19945, 19946, 19949, 19950, 19953, 19954, 19955, 19956, 19957, 19958, 19959, 19960, 19964, 19965, 19966, 19970, 19977, 19978, 19981, 19982, 19983, 19989, 19990, 19991, 19993, 20000, 20002, 20003, 20004, 20005, 20016, 20017, 20018, 20019, 20020, 20023, 20028, 20031, 20032, 20033, 20036, 20040, 20041, 20043, 20044, 20045, 20046, 20047, 20050, 20051, 20052, 20054, 20055, 20056, 20057, 20060, 20063, 20065, 20068, 20070, 20071, 20072, 20073, 20074, 20075, 20077, 20078, 20081, 20082, 20085, 20086, 20091, 20092, 20095, 20096, 20100, 20105, 20106, 20110, 20111, 20113, 20114, 20117, 20121, 20122, 20124, 20125, 20127, 20128, 20129, 20130, 20131, 20132, 20133, 20134, 20136, 20140, 20141, 20145, 20147, 20150, 20155, 20156, 20157, 20158, 20160, 20161, 20163, 20164, 20165, 20166, 20167, 20168, 20171, 20172, 20173, 20174, 20175, 20177, 20178, 20179, 20182, 20185, 20186, 20187, 20188, 20191, 20192, 20193, 20194, 20195, 20196, 20197, 20198, 20199, 20200, 20201, 20203, 20204, 20205, 20207, 20208, 20209, 20216, 20217, 20218, 20219, 20221, 20225, 20228, 20233, 20234, 20235, 20236, 20240, 20241, 20243, 20244, 20251, 20252, 20254, 20255, 20258, 20262, 20266, 20268, 20269, 20275, 20277, 20279, 20280, 20283, 20284, 20285, 20287, 20288, 20289, 20290, 20291, 20295, 20296, 20301, 20302, 20303, 20304, 20310, 20311, 20312, 20313, 20315, 20317, 20318, 20319, 20321, 20325, 20326, 20328, 20330, 20331, 20333, 20334, 20335, 20336, 20337, 20338, 20339, 20340, 20341, 20342, 20343, 20350, 20351, 20352, 20353, 20354, 20355, 20356, 20357, 20358, 20360, 20361, 20362, 20363, 20367, 20368, 20369, 20372, 20373, 20374, 20377, 20380, 20381, 20382, 20383, 20386, 20388, 20393, 20394, 20395, 20397, 20398, 20416, 20418, 20419, 20421, 20422, 20423, 20425, 20426, 20427, 20428, 20429, 20434, 20435, 20436, 20437, 20438, 20439, 20440, 20441, 20442, 20443, 20444, 20447, 20448, 20449, 20450, 20451, 20453, 20455, 20457, 20458, 20459, 20461, 20462, 20463, 20464, 20465, 20466, 20467, 20468, 20470, 20472, 20474, 20475, 20478, 20479, 20480, 20481, 20483, 20484, 20487, 20488, 20489, 20490, 20493, 20494, 20499, 20500, 20501, 20502, 20507, 20508, 20509, 20510, 20511, 20512, 20513, 20514, 20515, 20518, 20523, 20524, 20525, 20526, 20527, 20528, 20529, 20532, 20533, 20534, 20536, 20537, 20543, 20545, 20548, 20550, 20551, 20557, 20559, 20561, 20562, 20564, 20565, 20566, 20567, 20568, 20569, 20578, 20580, 20582, 20585, 20590, 20597, 20607, 20610, 20612, 20613, 20615, 20618, 20619, 20620, 20621, 20623, 20624, 20625, 20626, 20627, 20631, 20633, 20635, 20636, 20637, 20638, 20639, 20640, 20643, 20644, 20646, 20647, 20648, 20649, 20651, 20654, 20655, 20657, 20660, 20661, 20662, 20663, 20665, 20666, 20668, 20670, 20671, 20674, 20676, 20677, 20678, 20679, 20680, 20681, 20692, 20694, 20695, 20699, 20703, 20704, 20707, 20708, 20711, 20712, 20713, 20716, 20717, 20720, 20721, 20726, 20731, 20732, 20733, 20734, 20735, 20736, 20737, 20739, 20741, 20742, 20743, 20744, 20751, 20752, 20753, 20756, 20757, 20758, 20759, 20761, 20762, 20765, 20767, 20772, 20773, 20774, 20776, 20777, 20778, 20779, 20780, 20781, 20783, 20784, 20785, 20786, 20787, 20788, 20789, 20791, 20792, 20793, 20794, 20795, 20798, 20799, 20800, 20802, 20803, 20805, 20807, 20813, 20822, 20823, 20824, 20825, 20836, 20852, 20856, 20865, 20867, 20868, 20871, 20876, 20878, 20879, 20890, 20891, 20892, 20893, 20895, 20896, 20897, 20898, 20899, 20904, 20906, 20907, 20913, 20915, 20916, 20918, 20921, 20924, 20925, 20926, 20927, 20928, 20929, 20930, 20933, 20935, 20936, 20938, 20939, 20940, 20941, 20943, 20945, 20946, 20949, 20950, 20952, 20953, 20954, 20958, 20961, 20962, 20965, 20966, 20967, 20968, 20969, 20970, 20972, 20975, 20976, 20978, 20983, 20984, 20985, 20986, 20987, 20988, 20989, 20990, 20991, 20993, 20995, 21002, 21004, 21005, 21007, 21008, 21009, 21010, 21011, 21015, 21016, 21017, 21018, 21019, 21020, 21021, 21023, 21024, 21025, 21026, 21027, 21028, 21029, 21030, 21031, 21033, 21034, 21035, 21036, 21037, 21038, 21039, 21044, 21045, 21046, 21051, 21053, 21054, 21055, 21056, 21057, 21058, 21059, 21060, 21061, 21065, 21066, 21067, 21069, 21078, 21080, 21081, 21082, 21083, 21086, 21088, 21090, 21092, 21093, 21094, 21096, 21097, 21098, 21099, 21101, 21102, 21103, 21105, 21106, 21107, 21108, 21109, 21110, 21111, 21112, 21113, 21115, 21116, 21117, 21118, 21120, 21121, 21122, 21123, 21127, 21129, 21132, 21134, 21135, 21137, 21139, 21142, 21143, 21144, 21151, 21153, 21154, 21159, 21160, 21161, 21165, 21166, 21169, 21174, 21176, 21177, 21179, 21182, 21184, 21185, 21188, 21189, 21191, 21194, 21195, 21196, 21197, 21198, 21199, 21200, 21201, 21202, 21203, 21204, 21205, 21206, 21212, 21215, 21217, 21220, 21221, 21227, 21228, 21229, 21230, 21233, 21236, 21239, 21245, 21253, 21254, 21256, 21259, 21262, 21264, 21265, 21266, 21267, 21269, 21272, 21273, 21274, 21275, 21276, 21277, 21278, 21279, 21280, 21281, 21283, 21284, 21285, 21286, 21287, 21288, 21289, 21290, 21291, 21292, 21294, 21295, 21299, 21302, 21308, 21309, 21312, 21313, 21316, 21318, 21322, 21323, 21327, 21329, 21331, 21333, 21334, 21337, 21341, 21342, 21344, 21345, 21346, 21347, 21348, 21350, 21351, 21353, 21354, 21357, 21358, 21359, 21361, 21363, 21364, 21365, 21366, 21367, 21368, 21369, 21370, 21372, 21373, 21374, 21375, 21376, 21377, 21378, 21379, 21380, 21383, 21384, 21385, 21386, 21387, 21388, 21389, 21393, 21395, 21398, 21400, 21402, 21403, 21404, 21405, 21406, 21407, 21408, 21409, 21410, 21411, 21413, 21414, 21416, 21417, 21418, 21421, 21422, 21424, 21426, 21428, 21432, 21433, 21438, 21440, 21441, 21442, 21443, 21445, 21447, 21448, 21459, 21461, 21462, 21463, 21466, 21467, 21468, 21469, 21471, 21472, 21475, 21476, 21478, 21483, 21484, 21488, 21489, 21490, 21491, 21493, 21496, 21497, 21499, 21500, 21501, 21504, 21505, 21506, 21507, 21509, 21513, 21515, 21516, 21519, 21526, 21528, 21529, 21530, 21531, 21532, 21535, 21536, 21537, 21538, 21539, 21543, 21544, 21546, 21547, 21549, 21550, 21551, 21552, 21553, 21554, 21555, 21556, 21557, 21560, 21561, 21562, 21563, 21564, 21565, 21568, 21569, 21572, 21573, 21574, 21575, 21576, 21586, 21588, 21589, 21591, 21592, 21593, 21594, 21595, 21596, 21597, 21598, 21599, 21600, 21601, 21602, 21605, 21606, 21607, 21608, 21609, 21610, 21611, 21612, 21613, 21614, 21615, 21617, 21618, 21620, 21622, 21623, 21624, 21625, 21626, 21627, 21630, 21631, 21632, 21633, 21634, 21637, 21638, 21639, 21640, 21641, 21642, 21643, 21644, 21646, 21648, 21649, 21651, 21652, 21653, 21654, 21657, 21658, 21659, 21661, 21662, 21663, 21664, 21665, 21666, 21668, 21670, 21672, 21673, 21675, 21677, 21679, 21682, 21684, 21685, 21687, 21688, 21689, 21690, 21692, 21693, 21694, 21695, 21696, 21697, 21698, 21699, 21700, 21702, 21703, 21706, 21707, 21708, 21709, 21711, 21713, 21715, 21716, 21718, 21719, 21723, 21724, 21725, 21726, 21727, 21728, 21729, 21737, 21738, 21739, 21742, 21744, 21748, 21749, 21750, 21752, 21753, 21754, 21755, 21756, 21757, 21758, 21759, 21760, 21762, 21764, 21767, 21768, 21769, 21770, 21774, 21777, 21779, 21780, 21782, 21784, 21785, 21786, 21787, 21794, 21795, 21797, 21798, 21801, 21802, 21805, 21806, 21807, 21810, 21811, 21814, 21816, 21820, 21823, 21824, 21826, 21827, 21833, 21835, 21839, 21841, 21844, 21845, 21846, 21847, 21851, 21853, 21854, 21855, 21859, 21861, 21863, 21865, 21867, 21869, 21870, 21872, 21875, 21877, 21879, 21881, 21882, 21885, 21886, 21889, 21891, 21892, 21893, 21894, 21897, 21898, 21899, 21902, 21903, 21911, 21913, 21914, 21915, 21916, 21917, 21918, 21919, 21920, 21921, 21922, 21926, 21927, 21929, 21931, 21932, 21933, 21934, 21935, 21937, 21938, 21940, 21941, 21943, 21945, 21947, 21948, 21951, 21952, 21953, 21954, 21956, 21957, 21958, 21959, 21961, 21963, 21965, 21966, 21967, 21968, 21970, 21976, 21982, 21983, 21984, 21985, 21986, 21987, 21988, 21989, 21990, 21991, 21992, 21993, 21994, 21995, 21997, 21998, 22002, 22003, 22004, 22005, 22006, 22007, 22010, 22012, 22013, 22015, 22018, 22021, 22022, 22023, 22024, 22025, 22026, 22027, 22030, 22032, 22033, 22034, 22036, 22038, 22040, 22041, 22042, 22043, 22044, 22046, 22048, 22049, 22050, 22051, 22053, 22054, 22055, 22056, 22059, 22060, 22061, 22062, 22063, 22064, 22065, 22066, 22068, 22069, 22070, 22071, 22072, 22073, 22074, 22075, 22076, 22077, 22078, 22079, 22080, 22081, 22082, 22083, 22084, 22085, 22086, 22087, 22088, 22089, 22090, 22091, 22094, 22096, 22098, 22100, 22103, 22105, 22107, 22108, 22109, 22111, 22113, 22114, 22115, 22116, 22117, 22118, 22126, 22128, 22133, 22134, 22136, 22137, 22138, 22139, 22140, 22143, 22144, 22145, 22146, 22147, 22148, 22149, 22150, 22154, 22155, 22156, 22157, 22158, 22159, 22160, 22161, 22162, 22163, 22164, 22166, 22169, 22170, 22171, 22172, 22174, 22176, 22177, 22178, 22179, 22180, 22182, 22183, 22184, 22186, 22189, 22191, 22192, 22193, 22194, 22195, 22196, 22197, 22199, 22200, 22201, 22202, 22203, 22205, 22207, 22208, 22209, 22211, 22212, 22213, 22214, 22215, 22216, 22217, 22218, 22219, 22221, 22223, 22225, 22227, 22228, 22229, 22232, 22233, 22234, 22235, 22238, 22239, 22240, 22241, 22243, 22244, 22247, 22248, 22251, 22258, 22259, 22260, 22261, 22262, 22263, 22264, 22265, 22266, 22267, 22268, 22269, 22270, 22271, 22272, 22273, 22274, 22275, 22276, 22277, 22278, 22279, 22280, 22281, 22282, 22283, 22284, 22285, 22286, 22287, 22288, 22289, 22290, 22291, 22292, 22293, 22294, 22295, 22296, 22297, 22298, 22299, 22301, 22302, 22303, 22304, 22305, 22306, 22307, 22308, 22309, 22310, 22311, 22312, 22313, 22314, 22315, 22316, 22322, 22323, 22324, 22325, 22326, 22327, 22329, 22330, 22332, 22333, 22334, 22337, 22338, 22339, 22340, 22342, 22343, 22344, 22345, 22346, 22347, 22348, 22350, 22351, 22352, 22353, 22354, 22355, 22357, 22358, 22361, 22363, 22365, 22367, 22369, 22371, 22373, 22375, 22377, 22379, 22381, 22384, 22386, 22387, 22390, 22391, 22392, 22394, 22395, 22396, 22397, 22398, 22399, 22400, 22401, 22404, 22405, 22406, 22410, 22411, 22412, 22413, 22417, 22419, 22420, 22423, 22424, 22425, 22426, 22430, 22433, 22435, 22436, 22437, 22440, 22441, 22442, 22443, 22444, 22445, 22446, 22447, 22449, 22450, 22451, 22453, 22454, 22455, 22461, 22462, 22463, 22464, 22465, 22466, 22467, 22475, 22479, 22480, 22486, 22487, 22488, 22489, 22490, 22491, 22492, 22493, 22494, 22495, 22497, 22498, 22501, 22502, 22505, 22507, 22508, 22509, 22510, 22513, 22514, 22516, 22520, 22521, 22525, 22526, 22527, 22528, 22530, 22531, 22532, 22533, 22534, 22535, 22536, 22537, 22538, 22539, 22540, 22541, 22542, 22543, 22544, 22545, 22547, 22549, 22550, 22551, 22553, 22554, 22556, 22566, 22567, 22568, 22569, 22570, 22571, 22572, 22573, 22574, 22575, 22576, 22577, 22578, 22580, 22581, 22582, 22583, 22584, 22585, 22586, 22592, 22593, 22595, 22598, 22599, 22603, 22604, 22605, 22607, 22610, 22611, 22614, 22617, 22622, 22623, 22624, 22626, 22627, 22628, 22629, 22630, 22631, 22632, 22634, 22635, 22638, 22642, 22645, 22647, 22648, 22649, 22650, 22651, 22652, 22657, 22659, 22661, 22662, 22663, 22664, 22667, 22668, 22676, 22677, 22678, 22680, 22682, 22684, 22686, 22688, 22690, 22692, 22694, 22696, 22698, 22703, 22704, 22705, 22706, 22708, 22709, 22710, 22711, 22713, 22714, 22716, 22718, 22722, 22723, 22724, 22725, 22727, 22732, 22735, 22736, 22739, 22743, 22744, 22745, 22746, 22747, 22749, 22752, 22753, 22754, 22757, 22758, 22759, 22760, 22761, 22762, 22763, 22764, 22765, 22770, 22771, 22772, 22774, 22782, 22783, 22784, 22785, 22786, 22787, 22788, 22789, 22792, 22793, 22794, 22795, 22796, 22797, 22798, 22799, 22800, 22801, 22802, 22803, 22805, 22806, 22808, 22811, 22812, 22816, 22817, 22818, 22819, 22820, 22824, 22825, 22832, 22833, 22834, 22837, 22839, 22843, 22844, 22845, 22846, 22848, 22849, 22852, 22856, 22857, 22858, 22859, 22861, 22874, 22875, 22876, 22877, 22879, 22880, 22882, 22883, 22884, 22885, 22886, 22887, 22888, 22889, 22891, 22892, 22893, 22894, 22895, 22896, 22899, 22902, 22905, 22906, 22907, 22908, 22909, 22911, 22912, 22913, 22914, 22919, 22920, 22921, 22922, 22923, 22924, 22925, 22928, 22929, 22930, 22931, 22932, 22933, 22934, 22942, 22943, 22944, 22945, 22946, 22947, 22948, 22949, 22950, 22951, 22952, 22953, 22956, 22958, 22960, 22961, 22962, 22963, 22964, 22967, 22968, 22969, 22970, 22972, 22974, 22976, 22977, 22978, 22979, 22982, 22983, 22984, 22985, 22994, 22995, 22996, 22997, 22998, 22999, 23003, 23004, 23005, 23006, 23007, 23008, 23009, 23010, 23011, 23012, 23013, 23014, 23015, 23017, 23019, 23022, 23023, 23024, 23026, 23027, 23028, 23029, 23030, 23031, 23032, 23033, 23034, 23037, 23038, 23039, 23040, 23041, 23042, 23043, 23044, 23045, 23046, 23047, 23048, 23049, 23052, 23054, 23055, 23056, 23059, 23061, 23063, 23064, 23066, 23068, 23069, 23072, 23073, 23074, 23076, 23077, 23078, 23081, 23082, 23084, 23087, 23090, 23091, 23094, 23097, 23103, 23104, 23105, 23106, 23107, 23108, 23113, 23115, 23116, 23117, 23118, 23119, 23120, 23123, 23124, 23125, 23127, 23128, 23131, 23132, 23133, 23134, 23145, 23147, 23149, 23150, 23151, 23153, 23154, 23156, 23157, 23158, 23159, 23161, 23164, 23167, 23170, 23171, 23172, 23173, 23176, 23179, 23180, 23181, 23182, 23185, 23187, 23188, 23189, 23190, 23191, 23192, 23193, 23194, 23195, 23197, 23198, 23200, 23201, 23202, 23203, 23206, 23208, 23209, 23210, 23212, 23213, 23214, 23215, 23216, 23217, 23218, 23219, 23221, 23222, 23223, 23224, 23227, 23228, 23230, 23231, 23232, 23233, 23235, 23236, 23238, 23242, 23245, 23246, 23247, 23249, 23250, 23252, 23253, 23254, 23256, 23262, 23263, 23264, 23266, 23267, 23270, 23273, 23275, 23276, 23277, 23279, 23280, 23283, 23284, 23285, 23286, 23287, 23288, 23290, 23291, 23294, 23297, 23301, 23305, 23309, 23312, 23317, 23318, 23319, 23320, 23321, 23322, 23323, 23324, 23326, 23331, 23332, 23335, 23336, 23337, 23338, 23339, 23340, 23341, 23342, 23344, 23345, 23346, 23347, 23350, 23351, 23352, 23353, 23356, 23357, 23359, 23360, 23362, 23364, 23366, 23367, 23373, 23374, 23378, 23381, 23383, 23384, 23385, 23386, 23387, 23389, 23390, 23392, 23394, 23397, 23400, 23402, 23405, 23409, 23410, 23412, 23414, 23415, 23416, 23417, 23418, 23419, 23420, 23421, 23424, 23425, 23426, 23427, 23429, 23430, 23432, 23433, 23434, 23435, 23436, 23437, 23438, 23439, 23440, 23441, 23442, 23443, 23444, 23445, 23447, 23449, 23450, 23451, 23453, 23454, 23455, 23456, 23457, 23459, 23460, 23461, 23462, 23463, 23464, 23465, 23466, 23467, 23468, 23471, 23477, 23478, 23479, 23487, 23488, 23489, 23490, 23491, 23492, 23493, 23494, 23496, 23497, 23498, 23499, 23500, 23502, 23508, 23509, 23510, 23511, 23512, 23525, 23526, 23529, 23530, 23533, 23536, 23539, 23542, 23545, 23548, 23549, 23551, 23553, 23554, 23555, 23557, 23558, 23559, 23561, 23562, 23563, 23564, 23565, 23566, 23567, 23568, 23571, 23572, 23573, 23577, 23578, 23587, 23590, 23592, 23593, 23596, 23597, 23642, 23643, 23645, 23648, 23649, 23650, 23653, 23655, 23659, 23662, 23663, 23665, 23667, 23668, 23671, 23672, 23677, 23678, 23682, 23683, 23685, 23687, 23688, 23690, 23691, 23694, 23695, 23701, 23703, 23704, 23705, 23706, 23712, 23714, 23715, 23716, 23721, 23723, 23724, 23726, 23727, 23731, 23733, 23734, 23735, 23740, 23743, 23749, 23757, 23759, 23762, 23763, 23764, 23766, 23768, 23769, 23770, 23772, 23773, 23774, 23775, 23776, 23777, 23779, 23782, 23783, 23784, 23788, 23789, 23790, 23791, 23792, 23793, 23795, 23796, 23797, 23798, 23799, 23800, 23806, 23807, 23808, 23809, 23810, 23812, 23813, 23815, 23816, 23819, 23820, 23824, 23825, 23826, 23827, 23828, 23831, 23832, 23834, 23836, 23837, 23838, 23839, 23840, 23844, 23845, 23846, 23855, 23857, 23859, 23862, 23864, 23865, 23866, 23867, 23869, 23871, 23872, 23874, 23875, 23876, 23877, 23878, 23880, 23881, 23882, 23883, 23885, 23887, 23889, 23892, 23893, 23894, 23896, 23898, 23900, 23903, 23904, 23905, 23906, 23907, 23908, 23911, 23919, 23920, 23922, 23923, 23924, 23925, 23926, 23927, 23928, 23932, 23933, 23937, 23942, 23943, 23951, 23952, 23953, 23957, 23961, 23963, 23965, 23966, 23968, 23969, 23971, 23972, 23974, 23977, 23978, 23979, 23982, 23984, 23987, 23988, 23989, 23994, 23995, 23996, 23999, 24003, 24007, 24008, 24010, 24011, 24012, 24015, 24016, 24017, 24020, 24022, 24023, 24025, 24027, 24028, 24029, 24032, 24035, 24036, 24037, 24038, 24039, 24040, 24041, 24042, 24044, 24045, 24046, 24047, 24048, 24051, 24052, 24053, 24054, 24055, 24056, 24057, 24059, 24061, 24063, 24065, 24068, 24069, 24070, 24073, 24074, 24079, 24080, 24081, 24084, 24085, 24086, 24087, 24088, 24090, 24091, 24092, 24094, 24096, 24097, 24098, 24099, 24100, 24101, 24102, 24110, 24124, 24125, 24126, 24128, 24129, 24130, 24131, 24132, 24133, 24134, 24136, 24145, 24146, 24147, 24148, 24150, 24152, 24153, 24154, 24155, 24156, 24157, 24158, 24161, 24162, 24163, 24164, 24170, 24171, 24172, 24178, 24180, 24181, 24182, 24183, 24184, 24185, 24186, 24188, 24189, 24191, 24195, 24197, 24200, 24201, 24206, 24207, 24208, 24209, 24213, 24214, 24217, 24218, 24219, 24220, 24221, 24222, 24223, 24224, 24225, 24228, 24229, 24231, 24235, 24238, 24239, 24241, 24243, 24244, 24245, 24246, 24247, 24248, 24252, 24254, 24255, 24257, 24259, 24262, 24264, 24265, 24266, 24267, 24268, 24269, 24272, 24275, 24277, 24278, 24279, 24280, 24281, 24282, 24284, 24287, 24288, 24289, 24291, 24293, 24295, 24297, 24301, 24302, 24303, 24305, 24306, 24309, 24311, 24312, 24314, 24316, 24319, 24320, 24322, 24325, 24328, 24329, 24330, 24332, 24333, 24334, 24335, 24336, 24337, 24338, 24339, 24344, 24345, 24346, 24347, 24348, 24350, 24351, 24352, 24353, 24354, 24356, 24358, 24359, 24360, 24361, 24362, 24364, 24365, 24366, 24367, 24369, 24370, 24373, 24374, 24375, 24376, 24379, 24380, 24381, 24382, 24383, 24384, 24385, 24386, 24387, 24388, 24389, 24390, 24391, 24394, 24395, 24396, 24399, 24400, 24401, 24402, 24408, 24409, 24410, 24411, 24412, 24415, 24416, 24417, 24418, 24419, 24420, 24421, 24422, 24423, 24424, 24425, 24426, 24427, 24428, 24429, 24430, 24431, 24432, 24433, 24434, 24435, 24436, 24437, 24438, 24439, 24440, 24441, 24443, 24444, 24445, 24446, 24447, 24448, 24449, 24450, 24451, 24452, 24454, 24458, 24459, 24460, 24463, 24464, 24475, 24476, 24480, 24481, 24482, 24483, 24484, 24487, 24488, 24489, 24491, 24492, 24496, 24498, 24500, 24502, 24503, 24505, 24508, 24509, 24510, 24511, 24512, 24513, 24514, 24515, 24516, 24517, 24518, 24530, 24531, 24532, 24534, 24535, 24536, 24537, 24538, 24541, 24543, 24544, 24545, 24549, 24551, 24553, 24556, 24560, 24561, 24562, 24563, 24568, 24570, 24571, 24572, 24573, 24574, 24575, 24577, 24578, 24580, 24583, 24584, 24585, 24587, 24588, 24589, 24591, 24592, 24593, 24596, 24597, 24598, 24599, 24600, 24601, 24602, 24603, 24604, 24605, 24606, 24607, 24609, 24610, 24611, 24617, 24618, 24619, 24621, 24623, 24624, 24625, 24626, 24631, 24632, 24633, 24636, 24639, 24640, 24641, 24642, 24643, 24644, 24645, 24646, 24647, 24648, 24649, 24650, 24652, 24654, 24655, 24656, 24657, 24658, 24659, 24660, 24661, 24662, 24663, 24666, 24667, 24669, 24670, 24671, 24672, 24673, 24675, 24676, 24677, 24679, 24680, 24681, 24682, 24685, 24686, 24687, 24689, 24690, 24691, 24692, 24695, 24696, 24700, 24701, 24703, 24704, 24706, 24708, 24713, 24716, 24717, 24718, 24726, 24728, 24730, 24731, 24732, 24735, 24738, 24746, 24747, 24748, 24754, 24755, 24759, 24760, 24761, 24763, 24764, 24766, 24767, 24768, 24769, 24771, 24773, 24775, 24777, 24779, 24783, 24785, 24787, 24789, 24791, 24793, 24797, 24799, 24800, 24801, 24802, 24804, 24805, 24806, 24809, 24810, 24811, 24817, 24818, 24819, 24820, 24823, 24830, 24834, 24835, 24836, 24837, 24838, 24839, 24840, 24841, 24842, 24843, 24844, 24845, 24846, 24847, 24848, 24849, 24850, 24851, 24852, 24853, 24854, 24855, 24856, 24857, 24858, 24859, 24863, 24867, 24870, 24871, 24872, 24873, 24874, 24875, 24878, 24879, 24880, 24881, 24885, 24887, 24888, 24891, 24893, 24894, 24899, 24900, 24903, 24904, 24911, 24912, 24913, 24917, 24924, 24937, 24938, 24941, 24942, 24949, 24951, 24953, 24954, 24957, 24958, 24959, 24967, 24968, 24969, 24970, 24971, 24972, 24973, 24974, 24976, 25002, 25006, 25010, 25011, 25012, 25016, 25020, 25021, 25022, 25023, 25025, 25027, 25029, 25032, 25033, 25034, 25035, 25036, 25037, 25038, 25039, 25040, 25041, 25042, 25055, 25057, 25058, 25059, 25061, 25062, 25063, 25064, 25065, 25066, 25067, 25068, 25069, 25070, 25072, 25073, 25074, 25077, 25078, 25079, 25080, 25088, 25095, 25096, 25097, 25098, 25102, 25113, 25114, 25117, 25118, 25122, 25123, 25124, 25125, 25128, 25131, 25132, 25133, 25134, 25135, 25137, 25140, 25141, 25145, 25149, 25150, 25151, 25155, 25157, 25158, 25160, 25165, 25166, 25168, 25169, 25171, 25172, 25173, 25175, 25180, 25181, 25182, 25183, 25184, 25187, 25188, 25189, 25190, 25191, 25192, 25195, 25196, 25197, 25198, 25200, 25204, 25205, 25207, 25212, 25213, 25216, 25217, 25218, 25219, 25222, 25225, 25226, 25229, 25230, 25231, 25232, 25237, 25239, 25240, 25241, 25242, 25243, 25244, 25245, 25246, 25248, 25251, 25252, 25253, 25254, 25255, 25257, 25259, 25260, 25261, 25262, 25263, 25269, 25270, 25272, 25273, 25275, 25276, 25293, 25295, 25297, 25299, 25300, 25302, 25303, 25304, 25308, 25310, 25316, 25319, 25320, 25321, 25322, 25325, 25335, 25336, 25337, 25338, 25339, 25342, 25344, 25345, 25346, 25348, 25349, 25350, 25351, 25354, 25356, 25357, 25358, 25359, 25364, 25365, 25366, 25367, 25373, 25374, 25375, 25395, 25400, 25413, 25414, 25415, 25416, 25417, 25418, 25419, 25420, 25421, 25422, 25423, 25424, 25425, 25426, 25427, 25428, 25429, 25430, 25442, 25444, 25446, 25447, 25448, 25454, 25455, 25459, 25461, 25464, 25465, 25468, 25469, 25470, 25471, 25474, 25476, 25477, 25479, 25481, 25482, 25483, 25484, 25485, 25486, 25487, 25489, 25490, 25491, 25493, 25494, 25495, 25496, 25497, 25498, 25500, 25502, 25503, 25504, 25507, 25508, 25510, 25513, 25514, 25515, 25516, 25519, 25520, 25521, 25522, 25524, 25525, 25529, 25530, 25531, 25532, 25533, 25534, 25535, 25536, 25541, 25545, 25546, 25558, 25559, 25560, 25561, 25566, 25567, 25568, 25569, 25575, 25576, 25577, 25578, 25580, 25582, 25584, 25586, 25588, 25589, 25590, 25595, 25596, 25597, 25601, 25604, 25606, 25609, 25610, 25611, 25612, 25613, 25614, 25615, 25617, 25618, 25623, 25624, 25631, 25632, 25633, 25641, 25642, 25643, 25644, 25646, 25650, 25651, 25652, 25653, 25656, 25659, 25660, 25661, 25662, 25663, 25665, 25667, 25668, 25670, 25671, 25673, 25677, 25684, 25686, 25689, 25690, 25691, 25694, 25698, 25699, 25700, 25701, 25702, 25705, 25706, 25709, 25712, 25714, 25715, 25716, 25719, 25722, 25725, 25726, 25729, 25732, 25734, 25738, 25739, 25740, 25741, 25743, 25746, 25747, 25748, 25750, 25751, 25752, 25754, 25755, 25756, 25757, 25758, 25759, 25760, 25761, 25762, 25765, 25767, 25768, 25769, 25770, 25772, 25773, 25774, 25775, 25781, 25782, 25783, 25784, 25786, 25787, 25788, 25789, 25790, 25792, 25793, 25794, 25795, 25802, 25806, 25808, 25837, 25838, 25839, 25841, 25842, 25843, 25844, 25845, 25846, 25847, 25848, 25850, 25851, 25863, 25865, 25876, 25877, 25882, 25885, 25886, 25890, 25891, 25892, 25893, 25894, 25895, 25897, 25899, 25900, 25901, 25902, 25903, 25905, 25906, 25907, 25908, 25909, 25910, 25911, 25912, 25916, 25917, 25919, 25920, 25921, 25923, 25924, 25926, 25927, 25928, 25932, 25934, 25936, 25940, 25943, 25950, 25951, 25952, 25953, 25954, 25956, 25957, 25961, 25962, 25963, 25964, 25965, 25966, 25967, 25968, 25969, 25970, 25972, 25973, 25974, 25975, 25976, 25977, 25978, 25979, 25980, 25981, 25986, 25987, 25988, 25989, 25990, 25991, 25992, 25993, 25994, 25995, 25997, 25998, 25999, 26000, 26001, 26054, 26057, 26058, 26059, 26060, 26061, 26062, 26065, 26066, 26067, 26068, 26071, 26072, 26075, 26078, 26090, 26091, 26092, 26093, 26094, 26098, 26099, 26100, 26104, 26105, 26106, 26107, 26108, 26109, 26110, 26111, 26112, 26115, 26116, 26117, 26118, 26119, 26121, 26122, 26126, 26127, 26138, 26166, 26167, 26170, 26171, 26178, 26179, 26185, 26187, 26189, 26190, 26193, 26194, 26195, 26197, 26200, 26201, 26202, 26203, 26209, 26210, 26212, 26213, 26218, 26220, 26222, 26224, 26225, 26226, 26228, 26229, 26230, 26232, 26233, 26234, 26235, 26236, 26237, 26239, 26241, 26242, 26244, 26246, 26247, 26248, 26251, 26253, 26254, 26256, 26257, 26258, 26261, 26271, 26272, 26290, 26291, 26292, 26300, 26301, 26303, 26305, 26307, 26308, 26309, 26310, 26312, 26313, 26316, 26318, 26321, 26323, 26325, 26326, 26328, 26331, 26336, 26337, 26338, 26343, 26344, 26345, 26346, 26349, 26350, 26351, 26352, 26353, 26356, 26357, 26358, 26360, 26361, 26362, 26363, 26364, 26366, 26367, 26371, 26372, 26373, 26374, 26376, 26387, 26388, 26391, 26392, 26394, 26395, 26399, 26400, 26401, 26402, 26407, 26408, 26409, 26410, 26411, 26413, 26417, 26421, 26422, 26426, 26427, 26428, 26431, 26432, 26434, 26435, 26437, 26443, 26444, 26445, 26446, 26447, 26449, 26450, 26451, 26452, 26453, 26454, 26455, 26456, 26457, 26458, 26459, 26460, 26461, 26462, 26463, 26465, 26480, 26481, 26497, 26498, 26507, 26508, 26543, 26546, 26549, 26550, 26551, 26555, 26560, 26561, 26562, 26564, 26567, 26568, 26569, 26571, 26574, 26575, 26580, 26581, 26582, 26583, 26590, 26591, 26593, 26596, 26597, 26598, 26599, 26602, 26603, 26606, 26607, 26608, 26613, 26614, 26616, 26618, 26623, 26626, 26627, 26628, 26629, 26630, 26633, 26634, 26635, 26637, 26638, 26641, 26642, 26643, 26644, 26646, 26652, 26653, 26656, 26658, 26659, 26660, 26662, 26663, 26664, 26665, 26666, 26667, 26668, 26669, 26670, 26673, 26674, 26675, 26676, 26677, 26678, 26679, 26680, 26682, 26683, 26684, 26686, 26688, 26691, 26695, 26696, 26699, 26700, 26701, 26702, 26703, 26708, 26709, 26710, 26711, 26712, 26713, 26714, 26715, 26726, 26727, 26728, 26729, 26730, 26731, 26732, 26733, 26734, 26735, 26736, 26737, 26738, 26739, 26740, 26741, 26744, 26745, 26746, 26747, 26748, 26749, 26750, 26752, 26761, 26765, 26766, 26767, 26770, 26772, 26778, 26779, 26781, 26782, 26783, 26784, 26785, 26786, 26798, 26802, 26803, 26804, 26808, 26809, 26810, 26811, 26812, 26813, 26814, 26815, 26820, 26823, 26824, 26827, 26829, 26830, 26832, 26834, 26836, 26838, 26839, 26840, 26842, 26843, 26845, 26847, 26848, 26849, 26851, 26852, 26853, 26854, 26855, 26856, 26857, 26858, 26859, 26860, 26861, 26862, 26863, 26864, 26865, 26866, 26867, 26868, 26869, 26870, 26871, 26873, 26877, 26878, 26885, 26886, 26889, 26891, 26893, 26894, 26895, 26899, 26901, 26902, 26903, 26904, 26908, 26909, 26910, 26911, 26912, 26913, 26914, 26920, 26921, 26922, 26923, 26924, 26933, 26934, 26938, 26945, 26947, 26949, 26950, 26951, 26952, 26953, 26954, 26955, 26956, 26957, 26958, 26959, 26960, 26961, 26962, 26963, 26964, 26966, 26967, 26971, 26972, 26974, 26975, 26976, 26977, 26978, 26979, 26980, 26982, 26983, 26984, 26985, 26987, 26988, 26989, 26990, 26993, 26994, 26996, 26997, 26998, 26999, 27000, 27002, 27003, 27004, 27007, 27008, 27009, 27012, 27013, 27018, 27019, 27020, 27021, 27022, 27023, 27025, 27027, 27030, 27031, 27032, 27033, 27039, 27042, 27043, 27044, 27045, 27046, 27047, 27048, 27049, 27050, 27051, 27056, 27057, 27058, 27059, 27060, 27061, 27062, 27068, 27069, 27070, 27071, 27075, 27076, 27077, 27078, 27079, 27080, 27081, 27083, 27084, 27085, 27086, 27087, 27088, 27089, 27090, 27092, 27093, 27094, 27095, 27096, 27097, 27098, 27099, 27100, 27102, 27104, 27108, 27109, 27110, 27111, 27112, 27118, 27122, 27123, 27124, 27126, 27127, 27130, 27131, 27132, 27134, 27135, 27136, 27138, 27139, 27140, 27145, 27148, 27149, 27150, 27153, 27154, 27155, 27157, 27158, 27159, 27160, 27161, 27163, 27165, 27166, 27170, 27171, 27172, 27173, 27174, 27175, 27176, 27177, 27178, 27179, 27180, 27181, 27182, 27183, 27184, 27185, 27186, 27187, 27188, 27190, 27191, 27192, 27193, 27194, 27195, 27200, 27201, 27202, 27203, 27204, 27206, 27207, 27209, 27213, 27215, 27216, 27217, 27218, 27219, 27220, 27221, 27225, 27226, 27228, 27229, 27230, 27231, 27249, 27250, 27251, 27252, 27253, 27254, 27255, 27256, 27257, 27258, 27262, 27263, 27264, 27284, 27288, 27290, 27291, 27292, 27293, 27294, 27295, 27298, 27300, 27303, 27304, 27307, 27308, 27309, 27310, 27313, 27314, 27318, 27319, 27320, 27322, 27324, 27325, 27328, 27329, 27330, 27332, 27334, 27335, 27336, 27337, 27338, 27339, 27342, 27343, 27347, 27349, 27350, 27352, 27353, 27354, 27358, 27359, 27361, 27364, 27365, 27367, 27369, 27370, 27373, 27374, 27375, 27376, 27378, 27381, 27382, 27383, 27386, 27388, 27394, 27395, 27397, 27398, 27400, 27402, 27404, 27406, 27407, 27409, 27410, 27412, 27414, 27417, 27418, 27419, 27420, 27421, 27422, 27423, 27424, 27425, 27427, 27428, 27430, 27431, 27433, 27436, 27437, 27438, 27439, 27444, 27445, 27446, 27447, 27449, 27453, 27455, 27457, 27459, 27461, 27464, 27465, 27466, 27467, 27468, 27474, 27475, 27481, 27485, 27486, 27490, 27492, 27494, 27496, 27498, 27500, 27502, 27504, 27505, 27506, 27509, 27511, 27512, 27516, 27518, 27521, 27522, 27523, 27526, 27527, 27530, 27531, 27532, 27539, 27540, 27544, 27545, 27546, 27550, 27551, 27552, 27553, 27554, 27555, 27558, 27559, 27560, 27562, 27564, 27565, 27567, 27570, 27571, 27573, 27576, 27577, 27578, 27579, 27580, 27582, 27583, 27584, 27585, 27586, 27587, 27588, 27589, 27590, 27591, 27592, 27595, 27601, 27603, 27605, 27607, 27610, 27611, 27612, 27615, 27629, 27630, 27631, 27632, 27633, 27636, 27638, 27639, 27641, 27642, 27646, 27649, 27650, 27651, 27656, 27657, 27659, 27660, 27662, 27663, 27664, 27671, 27672, 27673, 27674, 27675, 27676, 27684, 27685, 27686, 27687, 27689, 27693, 27696, 27697, 27702, 27708, 27709, 27714, 27716, 27717, 27723, 27724, 27725, 27728, 27729, 27730, 27731, 27732, 27734, 27736, 27737, 27738, 27739, 27740, 27741, 27744, 27746, 27747, 27748, 27749, 27750, 27751, 27752, 27757, 27759, 27762, 27764, 27765, 27766, 27768, 27771, 27772, 27773, 27774, 27775, 27776, 27778, 27779, 27780, 27788, 27791, 27794, 27795, 27799, 27800, 27801, 27805, 27807, 27808, 27813, 27814, 27816, 27817, 27818, 27819, 27820, 27821, 27825, 27826, 27827, 27828, 27829, 27830, 27831, 27832, 27833, 27835, 27837, 27838, 27839, 27840, 27841, 27842, 27843, 27844, 27845, 27846, 27847, 27850, 27851, 27852, 27853, 27854, 27856, 27857, 27858, 27862, 27863, 27864, 27865, 27866, 27867, 27868, 27869, 27870, 27871, 27872, 27873, 27874, 27875, 27876, 27877, 27878, 27884, 27886, 27887, 27888, 27894, 27895, 27897, 27898, 27899, 27900, 27901, 27902, 27903, 27905, 27906, 27910, 27911, 27914, 27915, 27918, 27919, 27920, 27925, 27926, 27927, 27929, 27930, 27934, 27935, 27938, 27939, 27942, 27945, 27948, 27949, 27953, 27955, 27957, 27958, 27978, 27979, 27980, 27984, 27988, 27990, 27994, 27996, 27998, 28000, 28001, 28006, 28013, 28018, 28019, 28021, 28022, 28023, 28025, 28027, 28028, 28030, 28031, 28034, 28035, 28038, 28054, 28055, 28056, 28057, 28066, 28068, 28069, 28070, 28071, 28072, 28078, 28079, 28085, 28086, 28087, 28088, 28090, 28091, 28092, 28093, 28097, 28098, 28099, 28102, 28104, 28105, 28108, 28109, 28111, 28119, 28120, 28121, 28122, 28123, 28124, 28126, 28127, 28129, 28131, 28132, 28135, 28137, 28140, 28143, 28144, 28145, 28148, 28149, 28151, 28154, 28156, 28157, 28158, 28159, 28161, 28162, 28164, 28167, 28169, 28170, 28172, 28173, 28174, 28179, 28180, 28181, 28182, 28183, 28184, 28186, 28188, 28193, 28194, 28196, 28198, 28199, 28201, 28203, 28204, 28205, 28206, 28207, 28216, 28217, 28218, 28219, 28220, 28221, 28223, 28224, 28225, 28226, 28228, 28229, 28230, 28231, 28232, 28233, 28234, 28236, 28237, 28238, 28239, 28240, 28241, 28242, 28243, 28244, 28245, 28246, 28247, 28248, 28249, 28250, 28251, 28252, 28253, 28254, 28255, 28256, 28257, 28258, 28259, 28260, 28261, 28262, 28263, 28264, 28265, 28266, 28267, 28268, 28269, 28270, 28271, 28272, 28273, 28274, 28275, 28276, 28277, 28278, 28279, 28280, 28281, 28285, 28300, 28301, 28303, 28304, 28306, 28308, 28311, 28313, 28315, 28316, 28320, 28324, 28344, 28345, 28349, 28350, 28351, 28352, 28353, 28358, 28364, 28368, 28370, 28371, 28393, 28395, 28396, 28398, 28399, 28400, 28405, 28406, 28407, 28410, 28411, 28412, 28413, 28420, 28421, 28428, 28439, 28440, 28456, 28464, 28466, 28483, 28516, 28517, 28532, 28533, 28534, 28535, 28545, 28549, 28559, 28560, 28561, 28563, 28565, 28580, 28581, 28586, 28587, 28588, 28589, 28597, 28600, 28606, 28612, 28617, 28618, 28621, 28622, 28626, 28629, 28632, 28633, 28636, 28638, 28639, 28641, 28643, 28644, 28645, 28654, 28662, 28663, 28664, 28669, 28670, 28671, 28672, 28673, 28674, 28676, 28677, 28678, 28679, 28680, 28688, 28690, 28691, 28697, 28698, 28699, 28700, 28701, 28703, 28704, 28706, 28707, 28708, 28709, 28710, 28712, 28717, 28730, 28733, 28735, 28736, 28739, 28740, 28743, 28745, 28746, 28748, 28752, 28753, 28754, 28755, 28757, 28760, 28761, 28765, 28767, 28770, 28771, 28780, 28781, 28786, 28788, 28789, 28793, 28795, 28796, 28797, 28799, 28800, 28804, 28806, 28807, 28808, 28818, 28821, 28822, 28834, 28835, 28836, 28837, 28838, 28840, 28842, 28843, 28848, 28849, 28850, 28851, 28854, 28855, 28858, 28860, 28861, 28862, 28863, 28864, 28865, 28878, 28879, 28885, 28891, 28892, 28893, 28896, 28897, 28898, 28899, 28900, 28901, 28902, 28903, 28904, 28905, 28908, 28909, 28913, 28914, 28920, 28921, 28922, 28924, 28925, 28926, 28927, 28928, 28929, 28932, 28933, 28934, 28937, 28941, 28942, 28946, 28947, 28948, 28965, 28967, 28969, 28970, 28971, 28975, 28976, 28977, 28984, 28985, 28986, 28987, 28993, 28994, 28995, 28996, 28997, 29005, 29007, 29008, 29010, 29011, 29012, 29013, 29015, 29019, 29020, 29021, 29022, 29023, 29025, 29026, 29030, 29031, 29033, 29034, 29036, 29037, 29039, 29044, 29047, 29048, 29050, 29051, 29052, 29053, 29054, 29055, 29059, 29072, 29076, 29077, 29078, 29079, 29085, 29087, 29088, 29089, 29090, 29091, 29092, 29093, 29098, 29099, 29102, 29103, 29110, 29111, 29114, 29121, 29132, 29145, 29146, 29147, 29148, 29154, 29161, 29178, 29185, 29203, 29227, 29228, 29229, 29230, 29231, 29232, 29233, 29234, 29243, 29250, 29255, 29256, 29258, 29261, 29265, 29268, 29325, 29337, 29338, 29339, 29344, 29366, 29368, 29369, 29371, 29375, 29378, 29379, 29391, 29392, 29395, 29398, 29403, 29404, 29426, 29428, 29429, 29435, 29444, 29477, 29478, 29480, 29484, 29491, 29493, 29496, 29497, 29499, 29500, 29502, 29504, 29506, 29507, 29508, 29510, 29512, 29514, 29516, 29518, 29522, 29524, 29526, 29529, 29530, 29531, 29532, 29535, 29536, 29537, 29541, 29542, 29543, 29546, 29547, 29551, 29553, 29556, 29557, 29558, 29562, 29568, 29569, 29570, 29571, 29573, 29574, 29575, 29576, 29577, 29578, 29579, 29580, 29581, 29582, 29583, 29588, 29589, 29591, 29592, 29599, 29601, 29602, 29603, 29604, 29609, 29614, 29615, 29616, 29623, 29624, 29634, 29635, 29636, 29637, 29639, 29640, 29643, 29645, 29646, 29648, 29649, 29650, 29651, 29652, 29653, 29654, 29659, 29660, 29673, 29679, 29682, 29683, 29684, 29685, 29686, 29687, 29690, 29691, 29697, 29699, 29701, 29704, 29706, 29708, 29710, 29712, 29714, 29716, 29717, 29719, 29720, 29723, 29724, 29728, 29729, 29733, 29738, 29755, 29758, 29759, 29762, 29765, 29767, 29768, 29772, 29773, 29774, 29775, 29779, 29782, 29783, 29784, 29787, 29788, 29789, 29791, 29792, 29793, 29795, 29796, 29812, 29813, 29814, 29817, 29818, 29820, 29824, 29825, 29829, 29830, 29833, 29835, 29836, 29837, 29842, 29843, 29844, 29845, 29846, 29852, 29853, 29855, 29856, 29858, 29859, 29860, 29862, 29864, 29866, 29867, 29870, 29871, 29881, 29882, 29888, 29893, 29894, 29895, 29896, 29898, 29899, 29900, 29901, 29903, 29904, 29915, 29970, 29984, 29989, 29990, 29991, 29995, 29996, 29997, 30000, 30005, 30007, 30008, 30019, 30020, 30021, 30022, 30041, 30048, 30065, 30066, 30069, 30075, 30120, 30141, 30148, 30149, 30151, 30156, 30163, 30178, 30193, 30196, 30197, 30199, 30226, 30259, 30260, 30268, 30269, 30270, 30271, 30272, 30277, 30283, 30285, 30300, 30310, 30324, 30326, 30331, 30340, 30341, 30342, 30350, 30357, 30358, 30359, 30360, 30363, 30364, 30365, 30368, 30369, 30372, 30374, 30376, 30377, 30380, 30381, 30384, 30386, 30388, 30390, 30401, 30414, 30416, 30417, 30439, 30450, 30453, 30454, 30455, 30457, 30459, 30468, 30469, 30472, 30473, 30475, 30476, 30481, 30484, 30485, 30488, 30489, 30507, 30508, 30509, 30511, 30528, 30530, 30534, 30570, 30571, 30576, 30577, 30582, 30583, 30591, 30592, 30597, 30598, 30599, 30600, 30602, 30603, 30604, 30606, 30607, 30608, 30611, 30616, 30617, 30618, 30619, 30620, 30621, 30630, 30631, 30633, 30635, 30636, 30637, 30638, 30640, 30652, 30657, 30659, 30663, 30665, 30667, 30668, 30671, 30672, 30673, 30674, 30676, 30678, 30680, 30681, 30683, 30685, 30688, 30690, 30693, 30694, 30696, 30697, 30708, 30709, 30712, 30716, 30721, 30725, 30728, 30731, 30739, 30740, 30741, 30742, 30745, 30746, 30747, 30748, 30750, 30751, 30768, 30769, 30770, 30772, 30773, 30775, 30790, 30793, 30797, 30798, 30800, 30801, 30802, 30804, 30807, 30809, 30810, 30815, 30816, 30821, 30826, 30838, 30840, 30841, 30842, 30843, 30850, 30851, 30856, 30857, 30858, 30859, 30860, 30862, 30868, 30869, 30878, 30879, 30880, 30881, 30883, 30893, 30895, 30897, 30900, 30901, 30907, 30908, 30909, 30910, 30911, 30912, 30965, 30967, 30972, 30973, 30975, 30978, 30979, 30980, 30981, 30982, 30983, 30987, 30991, 30993, 31005, 31006, 31008, 31011, 31012, 31014, 31015, 31016, 31020, 31021, 31022, 31025, 31026, 31028, 31029, 31030, 31031, 31033, 31034, 31037, 31039, 31040, 31050, 31082, 31089, 31095, 31097, 31103, 31112, 31117, 31124, 31127, 31128, 31133, 31134, 31135, 31166, 31167, 31168, 31170, 31175, 31176, 31182, 31187, 31194, 31195, 31197, 31201, 31286, 31299, 31300, 31301, 31302, 31306, 31346, 31347, 31410, 31413, 31414, 31428, 31465, 31472, 31474, 31522, 31526, 31548, 31564, 31565, 31574, 31578, 31613, 31614, 31616, 31647, 31648, 31649, 31650, 31651, 31652, 31653, 31654, 31656, 31657, 31658, 31659, 31661, 31662, 31663, 31676, 31677, 31678, 31679, 31680, 31682, 31683, 31684, 31703, 31706, 31707, 31709, 31713, 31726, 31730, 31736, 31737, 31749, 31751, 31752, 31753, 31761, 31762, 31778, 31788, 31812, 31813, 31819, 31821, 31823, 31833, 31839, 31840, 31842, 31847, 31848, 31851, 31852, 31892, 32104, 32105, 32179); +UPDATE `creature_model_info` SET `gender`=1 WHERE `modelid` IN (39, 50, 52, 54, 56, 58, 60, 80, 93, 94, 95, 96, 97, 98, 99, 100, 109, 140, 148, 159, 162, 186, 213, 215, 224, 225, 228, 232, 252, 257, 258, 278, 285, 302, 327, 330, 344, 375, 423, 424, 425, 427, 560, 660, 696, 751, 752, 753, 754, 876, 883, 900, 915, 964, 967, 968, 969, 970, 971, 972, 974, 1029, 1048, 1049, 1165, 1223, 1225, 1237, 1255, 1256, 1286, 1287, 1295, 1296, 1297, 1300, 1312, 1319, 1322, 1325, 1333, 1350, 1351, 1352, 1358, 1360, 1361, 1367, 1378, 1380, 1381, 1389, 1401, 1404, 1407, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1469, 1470, 1471, 1472, 1473, 1474, 1477, 1479, 1480, 1481, 1482, 1483, 1495, 1496, 1497, 1498, 1520, 1521, 1522, 1523, 1526, 1543, 1544, 1546, 1564, 1571, 1592, 1593, 1594, 1601, 1603, 1607, 1608, 1612, 1614, 1615, 1620, 1632, 1633, 1634, 1636, 1637, 1639, 1640, 1643, 1645, 1651, 1658, 1670, 1679, 1681, 1682, 1691, 1692, 1697, 1700, 1702, 1705, 1707, 1708, 1710, 1714, 1716, 1717, 1719, 1721, 1723, 1726, 1727, 1728, 1730, 1733, 1743, 1745, 1750, 1760, 1766, 1768, 1786, 1791, 1793, 1799, 1811, 1812, 1814, 1815, 1828, 1839, 1840, 1841, 1842, 1843, 1850, 1852, 1853, 1855, 1856, 1857, 1862, 1868, 1874, 1875, 1878, 1879, 1882, 1890, 1897, 1900, 1905, 1907, 1908, 1914, 1915, 1916, 1927, 1932, 1933, 1937, 1942, 1957, 1969, 1978, 1980, 1981, 1982, 2031, 2034, 2035, 2036, 2037, 2038, 2043, 2047, 2049, 2050, 2053, 2054, 2055, 2056, 2057, 2058, 2068, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2132, 2133, 2143, 2162, 2163, 2164, 2165, 2166, 2167, 2178, 2182, 2183, 2191, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2240, 2279, 2294, 2295, 2296, 2306, 2315, 2317, 2319, 2321, 2330, 2331, 2333, 2336, 2339, 2341, 2344, 2348, 2349, 2355, 2358, 2359, 2362, 2365, 2366, 2374, 2375, 2379, 2386, 2391, 2394, 2396, 2398, 2399, 2400, 2401, 2407, 2412, 2413, 2415, 2422, 2443, 2448, 2459, 2460, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2494, 2496, 2497, 2500, 2501, 2503, 2505, 2508, 2509, 2512, 2515, 2516, 2518, 2521, 2523, 2525, 2529, 2558, 2575, 2577, 2579, 2583, 2585, 2587, 2589, 2590, 2591, 2608, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2718, 2721, 2722, 2723, 2734, 2737, 2788, 2811, 2834, 2858, 2861, 2863, 2865, 2866, 2867, 2869, 2874, 2883, 2884, 2885, 2886, 2889, 2893, 2896, 2901, 2959, 2966, 2970, 2973, 2979, 2980, 2993, 2999, 3000, 3001, 3003, 3012, 3013, 3021, 3022, 3039, 3041, 3048, 3049, 3050, 3051, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3106, 3108, 3119, 3120, 3121, 3124, 3125, 3128, 3130, 3133, 3135, 3143, 3145, 3218, 3227, 3230, 3234, 3257, 3260, 3268, 3269, 3270, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3295, 3296, 3297, 3311, 3312, 3313, 3318, 3320, 3321, 3322, 3323, 3329, 3330, 3335, 3339, 3344, 3345, 3349, 3356, 3363, 3364, 3366, 3367, 3368, 3369, 3371, 3375, 3377, 3378, 3379, 3405, 3445, 3448, 3450, 3455, 3463, 3466, 3485, 3486, 3489, 3515, 3517, 3520, 3528, 3529, 3540, 3543, 3544, 3547, 3549, 3560, 3562, 3564, 3567, 3569, 3579, 3580, 3582, 3584, 3586, 3588, 3590, 3591, 3593, 3602, 3611, 3630, 3641, 3650, 3651, 3654, 3657, 3659, 3663, 3677, 3689, 3707, 3710, 3713, 3715, 3717, 3718, 3722, 3724, 3726, 3728, 3730, 3735, 3750, 3762, 3764, 3766, 3768, 3770, 3772, 3779, 3780, 3781, 3784, 3786, 3788, 3791, 3797, 3798, 3806, 3807, 3820, 3828, 3830, 3834, 3836, 3838, 3840, 3841, 3848, 3850, 3860, 3861, 3867, 3871, 3875, 3883, 3892, 3893, 3896, 3897, 3901, 3904, 3915, 3918, 3931, 3932, 3935, 3938, 3943, 3944, 3945, 3949, 3953, 3961, 3966, 3972, 3977, 3978, 3979, 3980, 3983, 3988, 3990, 3992, 3994, 3996, 3998, 3999, 4002, 4004, 4009, 4010, 4012, 4015, 4017, 4019, 4023, 4025, 4026, 4027, 4031, 4035, 4038, 4041, 4046, 4052, 4053, 4054, 4056, 4057, 4058, 4059, 4060, 4077, 4080, 4084, 4085, 4087, 4089, 4106, 4108, 4109, 4112, 4113, 4114, 4115, 4122, 4123, 4126, 4128, 4129, 4131, 4133, 4135, 4138, 4140, 4144, 4146, 4147, 4149, 4151, 4153, 4158, 4162, 4168, 4175, 4176, 4177, 4179, 4181, 4182, 4187, 4189, 4191, 4193, 4195, 4196, 4198, 4210, 4217, 4219, 4221, 4223, 4230, 4231, 4233, 4234, 4235, 4236, 4240, 4241, 4247, 4250, 4251, 4254, 4260, 4263, 4264, 4273, 4274, 4277, 4278, 4280, 4282, 4284, 4290, 4302, 4313, 4314, 4322, 4323, 4330, 4334, 4337, 4340, 4345, 4346, 4348, 4350, 4351, 4352, 4355, 4356, 4357, 4358, 4362, 4369, 4375, 4377, 4378, 4379, 4383, 4385, 4393, 4394, 4399, 4402, 4403, 4406, 4409, 4410, 4411, 4412, 4419, 4421, 4433, 4462, 4481, 4487, 4488, 4490, 4496, 4498, 4500, 4502, 4504, 4510, 4513, 4522, 4523, 4524, 4526, 4528, 4529, 4533, 4536, 4538, 4541, 4546, 4558, 4578, 4601, 4605, 4614, 4618, 4619, 4642, 4643, 4647, 4665, 4669, 4670, 4673, 4674, 4675, 4677, 4681, 4682, 4691, 4695, 4698, 4700, 4702, 4704, 4706, 4708, 4710, 4712, 4718, 4728, 4729, 4730, 4731, 4756, 4770, 4772, 4774, 4777, 4780, 4782, 4841, 4842, 4843, 4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 4852, 4853, 4854, 4855, 4856, 4857, 4858, 4859, 4861, 4862, 4871, 4875, 4888, 4892, 4894, 4897, 4909, 4912, 4913, 4914, 4915, 4929, 4941, 4943, 4948, 4951, 4958, 4966, 4967, 4968, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4985, 4991, 4994, 5017, 5018, 5022, 5029, 5033, 5036, 5040, 5042, 5043, 5086, 5091, 5092, 5093, 5129, 5130, 5165, 5186, 5233, 5235, 5365, 5366, 5367, 5371, 5375, 5378, 5407, 5408, 5425, 5429, 5435, 5439, 5441, 5442, 5444, 5446, 5487, 5499, 5506, 5527, 5531, 5533, 5545, 5546, 5552, 5565, 5569, 5572, 5574, 5706, 5725, 5745, 5765, 5774, 5777, 5783, 5807, 5809, 5811, 5815, 5817, 5819, 5823, 5825, 5827, 5829, 5847, 5909, 5910, 6005, 6058, 6061, 6064, 6088, 6089, 6090, 6091, 6092, 6093, 6095, 6096, 6098, 6099, 6100, 6101, 6102, 6110, 6111, 6112, 6113, 6116, 6120, 6128, 6210, 6213, 6214, 6229, 6234, 6248, 6328, 6348, 6349, 6391, 6392, 6394, 6396, 6398, 6400, 6402, 6404, 6406, 6408, 6412, 6414, 6416, 6418, 6420, 6422, 6424, 6426, 6428, 6430, 6435, 6437, 6438, 6481, 6482, 6484, 6486, 6488, 6490, 6492, 6494, 6496, 6498, 6508, 6509, 6511, 6513, 6515, 6536, 6539, 6541, 6543, 6547, 6548, 6551, 6553, 6554, 6588, 6609, 6611, 6629, 6631, 6671, 6673, 6676, 6677, 6679, 6681, 6684, 6685, 6703, 6712, 6714, 6716, 6718, 6720, 6722, 6724, 6726, 6728, 6730, 6732, 6734, 6739, 6742, 6749, 6750, 6753, 6755, 6761, 6766, 6768, 6771, 6773, 6781, 6782, 6783, 6786, 6788, 6790, 6792, 6794, 6796, 6797, 6812, 6813, 6814, 6815, 6831, 6833, 6835, 6840, 6880, 6881, 6895, 6919, 6941, 6945, 6948, 6951, 6956, 6958, 6960, 6964, 6975, 6976, 6982, 6985, 6986, 6987, 6992, 6993, 6998, 6999, 7000, 7002, 7012, 7013, 7014, 7015, 7017, 7018, 7020, 7023, 7025, 7030, 7039, 7040, 7044, 7045, 7116, 7118, 7119, 7121, 7122, 7123, 7138, 7175, 7248, 7268, 7270, 7274, 7275, 7309, 7311, 7330, 7358, 7359, 7363, 7365, 7369, 7371, 7375, 7376, 7378, 7382, 7532, 7536, 7589, 7590, 7592, 7596, 7599, 7602, 7603, 7605, 7608, 7610, 7611, 7615, 7621, 7625, 7627, 7628, 7669, 7729, 7730, 7754, 7756, 7802, 7808, 7812, 7818, 7821, 7823, 7825, 7828, 7830, 7833, 7834, 7850, 7863, 7870, 7872, 7876, 7895, 7905, 7909, 7911, 7913, 7917, 7918, 7922, 7923, 7934, 7936, 7969, 7974, 7989, 7994, 7995, 8171, 8185, 8190, 8191, 8249, 8309, 8312, 8314, 8316, 8330, 8332, 8356, 8429, 8476, 8478, 8479, 8489, 8570, 8572, 8630, 8632, 8650, 8651, 8657, 8659, 8660, 8665, 8671, 8672, 8675, 8676, 8680, 8683, 8684, 8690, 8691, 8693, 8695, 8705, 8761, 8763, 8765, 8768, 8769, 8774, 8776, 8779, 8789, 8795, 8796, 8800, 8801, 8809, 8831, 8889, 8890, 8892, 8896, 8897, 8949, 9025, 9055, 9070, 9071, 9109, 9131, 9132, 9136, 9150, 9249, 9251, 9253, 9254, 9255, 9257, 9260, 9262, 9263, 9264, 9269, 9270, 9273, 9282, 9290, 9294, 9295, 9330, 9331, 9338, 9339, 9342, 9343, 9344, 9346, 9347, 9350, 9392, 9412, 9416, 9423, 9424, 9429, 9431, 9438, 9440, 9443, 9529, 9530, 9531, 9534, 9551, 9553, 9676, 9677, 9684, 9685, 9711, 9712, 9717, 9718, 9721, 9722, 9726, 9727, 9730, 9731, 9732, 9754, 9763, 9765, 9767, 9774, 9775, 9780, 9791, 9795, 9796, 9800, 9801, 9804, 9805, 9808, 9810, 9811, 9812, 9813, 9818, 9821, 9822, 9823, 9849, 9850, 9851, 9852, 9853, 9854, 9855, 9856, 9857, 9858, 9859, 9860, 9861, 9862, 9863, 9864, 9865, 9866, 9867, 9868, 9869, 9870, 9871, 9872, 9873, 9874, 9875, 9876, 9877, 9878, 9879, 9880, 9881, 9882, 9883, 9884, 9885, 9886, 9887, 9888, 9889, 9890, 9891, 9892, 9893, 9894, 9895, 9896, 9897, 9937, 9938, 9941, 9942, 9949, 9950, 9951, 9953, 9954, 9955, 9956, 9957, 9958, 10004, 10008, 10034, 10051, 10052, 10054, 10070, 10092, 10093, 10113, 10129, 10134, 10138, 10140, 10142, 10144, 10145, 10147, 10149, 10153, 10174, 10175, 10178, 10179, 10180, 10185, 10191, 10199, 10211, 10212, 10214, 10220, 10221, 10223, 10224, 10227, 10228, 10232, 10233, 10234, 10238, 10239, 10249, 10250, 10253, 10280, 10281, 10282, 10288, 10289, 10293, 10294, 10297, 10298, 10301, 10302, 10305, 10306, 10309, 10310, 10313, 10314, 10322, 10323, 10326, 10327, 10330, 10331, 10334, 10335, 10337, 10346, 10347, 10352, 10353, 10360, 10361, 10368, 10369, 10372, 10373, 10378, 10380, 10381, 10385, 10386, 10389, 10390, 10393, 10394, 10396, 10397, 10400, 10401, 10402, 10405, 10406, 10407, 10410, 10411, 10412, 10415, 10416, 10419, 10420, 10423, 10424, 10429, 10430, 10431, 10432, 10436, 10437, 10439, 10440, 10445, 10446, 10447, 10455, 10459, 10465, 10477, 10480, 10481, 10485, 10486, 10490, 10491, 10494, 10495, 10498, 10499, 10502, 10503, 10506, 10507, 10510, 10511, 10514, 10515, 10518, 10519, 10531, 10532, 10533, 10534, 10537, 10538, 10541, 10542, 10549, 10550, 10557, 10559, 10562, 10563, 10564, 10565, 10569, 10571, 10573, 10574, 10575, 10581, 10582, 10591, 10592, 10609, 10610, 10615, 10620, 10623, 10624, 10633, 10634, 10639, 10640, 10646, 10651, 10652, 10654, 10657, 10659, 10663, 10665, 10690, 10692, 10702, 10722, 10723, 10725, 10731, 10732, 10733, 10734, 10737, 10744, 10745, 10746, 10749, 10750, 10751, 10752, 10822, 10823, 10857, 10869, 10870, 10871, 10872, 10873, 10874, 10875, 10876, 10877, 10895, 10909, 10910, 10923, 10924, 10925, 10926, 10927, 10928, 10929, 10941, 10942, 10948, 10955, 10956, 10994, 10995, 11015, 11016, 11019, 11020, 11023, 11024, 11026, 11039, 11041, 11043, 11044, 11045, 11046, 11047, 11048, 11050, 11057, 11058, 11059, 11061, 11062, 11069, 11073, 11076, 11077, 11082, 11083, 11102, 11103, 11111, 11112, 11115, 11116, 11118, 11120, 11122, 11125, 11128, 11131, 11134, 11145, 11148, 11151, 11154, 11157, 11160, 11161, 11162, 11163, 11164, 11169, 11170, 11173, 11175, 11176, 11177, 11184, 11185, 11191, 11192, 11195, 11196, 11199, 11200, 11203, 11204, 11206, 11208, 11210, 11212, 11214, 11216, 11219, 11220, 11223, 11224, 11227, 11228, 11231, 11232, 11235, 11236, 11239, 11240, 11242, 11244, 11247, 11248, 11250, 11252, 11259, 11260, 11261, 11262, 11263, 11266, 11268, 11270, 11273, 11280, 11281, 11282, 11285, 11290, 11291, 11292, 11294, 11295, 11300, 11304, 11308, 11323, 11324, 11329, 11330, 11352, 11356, 11381, 11388, 11389, 11392, 11393, 11407, 11408, 11423, 11432, 11433, 11436, 11437, 11440, 11441, 11442, 11444, 11445, 11446, 11457, 11458, 11462, 11463, 11477, 11478, 11512, 11589, 11593, 11594, 11596, 11637, 11654, 11657, 11662, 11663, 11665, 11668, 11670, 11672, 11673, 11675, 11676, 11681, 11682, 11683, 11684, 11687, 11689, 11691, 11692, 11714, 11729, 11734, 11735, 11737, 11739, 11741, 11742, 11744, 11746, 11747, 11748, 11750, 11752, 11760, 11761, 11764, 11765, 11766, 11767, 11770, 11771, 11775, 11777, 11789, 11796, 11800, 11802, 11810, 11813, 11815, 11819, 11821, 11823, 11824, 11827, 11835, 11850, 11853, 11854, 11857, 11858, 11861, 11862, 11865, 11867, 11869, 11871, 11873, 11875, 11877, 11879, 11881, 11883, 11885, 11888, 11889, 11890, 11898, 11901, 11903, 11904, 11929, 11950, 11951, 11952, 11954, 11958, 11959, 11960, 11964, 11966, 11968, 11970, 11971, 11974, 11975, 11978, 11980, 11983, 11985, 11988, 11989, 11992, 11993, 11998, 11999, 12004, 12006, 12009, 12011, 12013, 12014, 12017, 12019, 12021, 12022, 12023, 12027, 12035, 12037, 12038, 12040, 12042, 12043, 12049, 12054, 12056, 12059, 12062, 12063, 12064, 12066, 12067, 12069, 12070, 12071, 12072, 12077, 12079, 12082, 12084, 12166, 12169, 12229, 12270, 12271, 12291, 12292, 12337, 12392, 12409, 12430, 12469, 12476, 12477, 12549, 12569, 12649, 12670, 12674, 12675, 12677, 12680, 12681, 12689, 12749, 12789, 12811, 12823, 12824, 12830, 12831, 12889, 12892, 12894, 12912, 12913, 12914, 12916, 12922, 12923, 12924, 12927, 12931, 12933, 12935, 12936, 12940, 12941, 12946, 12948, 12950, 12952, 12955, 12958, 12964, 12968, 12970, 12972, 12973, 12974, 12976, 12991, 12992, 13169, 13189, 13190, 13229, 13230, 13231, 13232, 13250, 13251, 13255, 13256, 13259, 13261, 13263, 13265, 13267, 13268, 13271, 13272, 13275, 13277, 13279, 13283, 13287, 13289, 13290, 13291, 13292, 13293, 13295, 13297, 13299, 13302, 13304, 13305, 13307, 13309, 13313, 13314, 13317, 13318, 13323, 13328, 13331, 13337, 13339, 13344, 13345, 13347, 13350, 13352, 13354, 13355, 13357, 13358, 13359, 13360, 13362, 13366, 13368, 13372, 13373, 13376, 13378, 13380, 13381, 13387, 13389, 13391, 13393, 13395, 13399, 13401, 13402, 13403, 13410, 13412, 13413, 13431, 13433, 13435, 13437, 13441, 13443, 13451, 13452, 13473, 13474, 13477, 13478, 13529, 13531, 13534, 13536, 13537, 13539, 13542, 13545, 13546, 13549, 13550, 13551, 13553, 13555, 13557, 13559, 13561, 13562, 13564, 13566, 13568, 13570, 13572, 13574, 13591, 13593, 13595, 13597, 13599, 13601, 13631, 13633, 13635, 13637, 13639, 13641, 13643, 13646, 13648, 13651, 13653, 13655, 13657, 13659, 13661, 13669, 13670, 13672, 13673, 13674, 13675, 13676, 13677, 13678, 13679, 13680, 13681, 13682, 13683, 13684, 13685, 13686, 13687, 13688, 13689, 13710, 13712, 13770, 13772, 13774, 13776, 13778, 13780, 13782, 13784, 13787, 13788, 13791, 13792, 13794, 13796, 13798, 13800, 13802, 13804, 13806, 13810, 13812, 13814, 13816, 13819, 13820, 13823, 13824, 13826, 13829, 13830, 13832, 13834, 13836, 13838, 13840, 13843, 13851, 13855, 13856, 13890, 13892, 13894, 13896, 13909, 13949, 13951, 13953, 13970, 14015, 14016, 14019, 14020, 14023, 14024, 14028, 14029, 14032, 14033, 14036, 14037, 14054, 14055, 14058, 14059, 14060, 14062, 14192, 14215, 14294, 14295, 14298, 14299, 14300, 14301, 14302, 14303, 14305, 14306, 14314, 14321, 14324, 14325, 14327, 14353, 14362, 14363, 14364, 14370, 14378, 14393, 14399, 14400, 14410, 14411, 14414, 14417, 14418, 14419, 14421, 14425, 14426, 14454, 14499, 14500, 14535, 14536, 14539, 14540, 14545, 14588, 14613, 14614, 14615, 14616, 14656, 14663, 14709, 14712, 14713, 14714, 14715, 14716, 14717, 14754, 14757, 14759, 14762, 14763, 14767, 14768, 14771, 14781, 14784, 14795, 14796, 14799, 14800, 14813, 14873, 14874, 14876, 14880, 14882, 14912, 14914, 14943, 14944, 14946, 14947, 14973, 14974, 14975, 14976, 14977, 14978, 14979, 14980, 14981, 14982, 14983, 14984, 14996, 14999, 15001, 15002, 15013, 15033, 15094, 15098, 15100, 15112, 15116, 15140, 15143, 15154, 15155, 15177, 15179, 15188, 15190, 15191, 15197, 15199, 15208, 15209, 15212, 15213, 15218, 15219, 15220, 15223, 15225, 15226, 15229, 15232, 15236, 15241, 15242, 15244, 15246, 15249, 15250, 15253, 15254, 15255, 15256, 15257, 15258, 15262, 15264, 15266, 15272, 15282, 15283, 15286, 15287, 15300, 15306, 15307, 15308, 15312, 15316, 15317, 15321, 15323, 15325, 15328, 15330, 15332, 15341, 15349, 15353, 15358, 15368, 15372, 15373, 15377, 15388, 15390, 15391, 15407, 15410, 15420, 15425, 15429, 15430, 15443, 15446, 15449, 15450, 15453, 15454, 15455, 15458, 15459, 15466, 15472, 15475, 15477, 15480, 15482, 15503, 15505, 15508, 15510, 15514, 15516, 15518, 15520, 15522, 15523, 15525, 15526, 15527, 15529, 15530, 15531, 15535, 15539, 15541, 15542, 15549, 15551, 15564, 15570, 15580, 15585, 15594, 15598, 15599, 15602, 15605, 15607, 15608, 15618, 15619, 15620, 15623, 15628, 15629, 15631, 15633, 15639, 15640, 15645, 15647, 15652, 15653, 15663, 15664, 15666, 15669, 15670, 15702, 15708, 15712, 15715, 15717, 15719, 15721, 15723, 15724, 15725, 15727, 15730, 15751, 15754, 15764, 15765, 15768, 15769, 15772, 15773, 15777, 15781, 15783, 15795, 15796, 15797, 15798, 15799, 15800, 15801, 15802, 15810, 15812, 15822, 15824, 15826, 15828, 15830, 15832, 15834, 15836, 15839, 15841, 15842, 15846, 15848, 15850, 15852, 15854, 15857, 15859, 15861, 15865, 15871, 15873, 15874, 15876, 15877, 15885, 15886, 15888, 15890, 15892, 15894, 15897, 15898, 15899, 15907, 15908, 15910, 15911, 15913, 15917, 15919, 15924, 15928, 15930, 15933, 15940, 15947, 15950, 15952, 15957, 15959, 15965, 15967, 15974, 15980, 15999, 16000, 16009, 16010, 16014, 16016, 16018, 16019, 16030, 16031, 16036, 16038, 16046, 16059, 16062, 16065, 16069, 16073, 16078, 16080, 16084, 16085, 16086, 16087, 16090, 16092, 16094, 16095, 16104, 16107, 16113, 16115, 16116, 16117, 16119, 16120, 16121, 16122, 16124, 16126, 16133, 16148, 16150, 16152, 16153, 16161, 16171, 16183, 16185, 16186, 16187, 16193, 16196, 16198, 16200, 16202, 16210, 16211, 16218, 16221, 16222, 16223, 16227, 16230, 16231, 16232, 16238, 16239, 16240, 16247, 16249, 16281, 16288, 16289, 16290, 16291, 16296, 16298, 16299, 16315, 16318, 16321, 16322, 16327, 16334, 16337, 16338, 16344, 16345, 16363, 16365, 16367, 16372, 16381, 16388, 16390, 16392, 16394, 16399, 16400, 16410, 16412, 16420, 16424, 16429, 16431, 16434, 16436, 16440, 16441, 16443, 16445, 16447, 16450, 16456, 16457, 16460, 16461, 16462, 16466, 16467, 16477, 16487, 16488, 16492, 16493, 16496, 16497, 16499, 16501, 16504, 16507, 16511, 16512, 16516, 16517, 16518, 16520, 16526, 16527, 16531, 16532, 16537, 16538, 16541, 16543, 16544, 16545, 16546, 16547, 16548, 16549, 16550, 16551, 16552, 16553, 16554, 16557, 16558, 16561, 16562, 16565, 16566, 16569, 16585, 16588, 16592, 16596, 16597, 16600, 16601, 16604, 16606, 16610, 16613, 16627, 16636, 16639, 16640, 16644, 16647, 16649, 16650, 16653, 16654, 16663, 16668, 16671, 16672, 16675, 16676, 16677, 16678, 16679, 16680, 16681, 16682, 16683, 16684, 16685, 16686, 16687, 16688, 16689, 16690, 16691, 16694, 16695, 16696, 16698, 16709, 16713, 16716, 16718, 16722, 16725, 16726, 16732, 16733, 16736, 16739, 16740, 16744, 16745, 16748, 16749, 16750, 16751, 16752, 16753, 16754, 16760, 16763, 16764, 16765, 16775, 16776, 16777, 16778, 16779, 16780, 16781, 16782, 16785, 16791, 16792, 16795, 16796, 16797, 16798, 16799, 16800, 16801, 16802, 16803, 16804, 16805, 16812, 16820, 16833, 16834, 16845, 16846, 16850, 16853, 16856, 16857, 16859, 16864, 16865, 16867, 16869, 16905, 16907, 16911, 16914, 16923, 16924, 16926, 16932, 16936, 16945, 16948, 16949, 16959, 16963, 16965, 16976, 16979, 16980, 17001, 17004, 17007, 17022, 17025, 17026, 17027, 17031, 17037, 17047, 17068, 17069, 17082, 17090, 17114, 17116, 17120, 17121, 17124, 17136, 17138, 17160, 17165, 17172, 17174, 17178, 17179, 17180, 17197, 17211, 17214, 17215, 17220, 17223, 17226, 17230, 17231, 17234, 17236, 17241, 17242, 17245, 17251, 17260, 17265, 17266, 17268, 17269, 17271, 17275, 17282, 17284, 17293, 17294, 17297, 17306, 17311, 17313, 17315, 17325, 17326, 17327, 17334, 17339, 17340, 17341, 17346, 17350, 17351, 17354, 17355, 17358, 17359, 17362, 17363, 17366, 17368, 17369, 17374, 17375, 17377, 17381, 17388, 17403, 17412, 17419, 17420, 17421, 17424, 17427, 17428, 17435, 17436, 17439, 17440, 17441, 17442, 17448, 17449, 17458, 17465, 17471, 17475, 17476, 17480, 17482, 17483, 17484, 17486, 17487, 17489, 17491, 17492, 17493, 17495, 17496, 17497, 17499, 17500, 17501, 17506, 17508, 17509, 17514, 17515, 17517, 17529, 17531, 17534, 17543, 17548, 17550, 17551, 17564, 17566, 17567, 17571, 17577, 17579, 17582, 17614, 17623, 17624, 17629, 17636, 17640, 17641, 17651, 17652, 17660, 17666, 17667, 17669, 17670, 17671, 17676, 17683, 17684, 17690, 17723, 17734, 17742, 17744, 17770, 17775, 17776, 17779, 17780, 17785, 17790, 17791, 17810, 17813, 17814, 17815, 17819, 17820, 17828, 17830, 17842, 17843, 17849, 17850, 17873, 17878, 17882, 17884, 17894, 17895, 17898, 17905, 17907, 17912, 17916, 17917, 17919, 17922, 17923, 17926, 17927, 17930, 17931, 17934, 17935, 17937, 17940, 17941, 17944, 17945, 17947, 17948, 17952, 17953, 17959, 17960, 17963, 17964, 17967, 17968, 17969, 17979, 17980, 17981, 17987, 17999, 18000, 18003, 18008, 18009, 18018, 18019, 18021, 18022, 18041, 18043, 18044, 18049, 18052, 18057, 18060, 18061, 18067, 18073, 18079, 18080, 18086, 18090, 18095, 18097, 18100, 18106, 18108, 18110, 18112, 18113, 18119, 18121, 18123, 18125, 18126, 18129, 18132, 18133, 18137, 18148, 18149, 18151, 18153, 18161, 18171, 18173, 18180, 18184, 18185, 18191, 18196, 18197, 18200, 18201, 18205, 18206, 18212, 18217, 18220, 18233, 18234, 18239, 18247, 18248, 18252, 18256, 18257, 18259, 18260, 18262, 18265, 18266, 18276, 18293, 18298, 18299, 18305, 18309, 18318, 18319, 18331, 18332, 18335, 18337, 18344, 18346, 18348, 18386, 18391, 18392, 18395, 18396, 18419, 18433, 18436, 18438, 18440, 18441, 18442, 18447, 18451, 18452, 18453, 18455, 18458, 18465, 18466, 18468, 18469, 18472, 18478, 18482, 18486, 18488, 18491, 18496, 18499, 18508, 18521, 18524, 18537, 18541, 18548, 18550, 18555, 18559, 18564, 18565, 18574, 18575, 18585, 18586, 18587, 18588, 18596, 18597, 18598, 18605, 18606, 18608, 18612, 18613, 18614, 18618, 18619, 18625, 18629, 18630, 18663, 18665, 18677, 18678, 18680, 18699, 18705, 18706, 18707, 18708, 18711, 18716, 18729, 18730, 18737, 18757, 18758, 18763, 18767, 18768, 18770, 18774, 18775, 18777, 18778, 18781, 18782, 18785, 18791, 18794, 18796, 18798, 18800, 18802, 18804, 18806, 18808, 18810, 18827, 18830, 18831, 18840, 18842, 18844, 18846, 18858, 18867, 18869, 18871, 18873, 18875, 18883, 18884, 18897, 18903, 18905, 18907, 18910, 18917, 18918, 18923, 18926, 18929, 18931, 18932, 18939, 18968, 18969, 18978, 18979, 18981, 18983, 18985, 18986, 18991, 18993, 19002, 19004, 19019, 19048, 19050, 19061, 19063, 19086, 19091, 19100, 19101, 19106, 19107, 19115, 19116, 19119, 19120, 19121, 19122, 19125, 19126, 19137, 19138, 19140, 19147, 19155, 19161, 19166, 19169, 19171, 19173, 19175, 19177, 19179, 19181, 19183, 19185, 19187, 19193, 19195, 19199, 19204, 19207, 19210, 19217, 19225, 19229, 19242, 19243, 19245, 19250, 19268, 19271, 19278, 19280, 19281, 19282, 19306, 19307, 19310, 19311, 19315, 19316, 19318, 19327, 19333, 19334, 19335, 19339, 19340, 19341, 19348, 19355, 19365, 19366, 19379, 19380, 19381, 19387, 19391, 19393, 19397, 19399, 19413, 19420, 19421, 19424, 19425, 19428, 19431, 19441, 19442, 19443, 19444, 19450, 19451, 19461, 19462, 19464, 19465, 19466, 19467, 19471, 19473, 19475, 19477, 19487, 19488, 19491, 19493, 19494, 19498, 19500, 19504, 19506, 19508, 19510, 19511, 19512, 19517, 19518, 19519, 19525, 19526, 19534, 19535, 19545, 19570, 19571, 19572, 19573, 19574, 19586, 19587, 19588, 19589, 19596, 19598, 19613, 19640, 19660, 19664, 19665, 19713, 19714, 19716, 19717, 19724, 19729, 19730, 19785, 19790, 19792, 19794, 19803, 19804, 19806, 19809, 19810, 19811, 19812, 19816, 19818, 19819, 19820, 19823, 19826, 19828, 19830, 19832, 19834, 19836, 19846, 19881, 19887, 19888, 19912, 19919, 19947, 19948, 19967, 19968, 19975, 19984, 19992, 19994, 20006, 20022, 20034, 20035, 20038, 20053, 20058, 20059, 20061, 20079, 20080, 20083, 20084, 20087, 20088, 20097, 20099, 20102, 20107, 20108, 20109, 20112, 20115, 20116, 20118, 20119, 20120, 20123, 20126, 20143, 20149, 20169, 20170, 20176, 20181, 20183, 20184, 20189, 20190, 20202, 20206, 20210, 20212, 20214, 20215, 20220, 20222, 20232, 20237, 20253, 20256, 20257, 20267, 20270, 20286, 20305, 20314, 20316, 20320, 20322, 20323, 20332, 20365, 20370, 20371, 20378, 20379, 20384, 20385, 20387, 20391, 20392, 20396, 20420, 20430, 20445, 20446, 20452, 20454, 20460, 20482, 20485, 20486, 20491, 20492, 20495, 20496, 20497, 20498, 20503, 20504, 20505, 20506, 20520, 20535, 20542, 20546, 20552, 20553, 20558, 20563, 20579, 20581, 20583, 20584, 20614, 20616, 20622, 20628, 20632, 20641, 20642, 20650, 20652, 20653, 20656, 20659, 20664, 20669, 20672, 20693, 20696, 20700, 20702, 20705, 20706, 20709, 20710, 20714, 20715, 20718, 20719, 20722, 20723, 20740, 20748, 20754, 20755, 20768, 20771, 20796, 20797, 20804, 20806, 20811, 20840, 20855, 20861, 20866, 20869, 20873, 20875, 20877, 20880, 20884, 20886, 20887, 20888, 20889, 20905, 20920, 20942, 20947, 20948, 20951, 20955, 20956, 20981, 20982, 20992, 20994, 21000, 21001, 21006, 21012, 21013, 21014, 21022, 21041, 21042, 21043, 21047, 21050, 21052, 21062, 21064, 21068, 21084, 21085, 21089, 21091, 21095, 21100, 21104, 21128, 21136, 21162, 21163, 21164, 21167, 21172, 21175, 21178, 21180, 21181, 21183, 21186, 21187, 21190, 21207, 21208, 21216, 21218, 21219, 21222, 21223, 21231, 21232, 21237, 21252, 21255, 21258, 21270, 21271, 21293, 21310, 21311, 21314, 21315, 21332, 21335, 21336, 21338, 21339, 21340, 21349, 21390, 21399, 21401, 21415, 21419, 21420, 21436, 21449, 21450, 21451, 21452, 21453, 21454, 21455, 21456, 21458, 21464, 21465, 21470, 21480, 21485, 21494, 21495, 21498, 21502, 21503, 21508, 21510, 21511, 21512, 21514, 21517, 21518, 21527, 21533, 21534, 21540, 21541, 21542, 21558, 21559, 21566, 21567, 21570, 21571, 21590, 21604, 21619, 21621, 21629, 21645, 21647, 21650, 21655, 21656, 21660, 21667, 21669, 21671, 21674, 21676, 21678, 21680, 21681, 21683, 21686, 21701, 21704, 21710, 21712, 21714, 21720, 21740, 21741, 21743, 21745, 21746, 21751, 21761, 21766, 21771, 21772, 21775, 21776, 21778, 21781, 21783, 21799, 21800, 21803, 21804, 21808, 21809, 21812, 21813, 21815, 21817, 21818, 21819, 21821, 21828, 21829, 21836, 21837, 21838, 21840, 21842, 21843, 21848, 21849, 21850, 21852, 21856, 21857, 21858, 21860, 21862, 21864, 21866, 21868, 21871, 21873, 21874, 21876, 21878, 21880, 21883, 21884, 21887, 21904, 21905, 21923, 21924, 21928, 21930, 21942, 21944, 21946, 21949, 21964, 21972, 21996, 22001, 22008, 22009, 22011, 22014, 22016, 22017, 22020, 22028, 22029, 22031, 22035, 22037, 22039, 22045, 22047, 22052, 22057, 22058, 22092, 22093, 22095, 22097, 22099, 22102, 22110, 22112, 22119, 22120, 22121, 22127, 22129, 22141, 22142, 22151, 22152, 22153, 22165, 22187, 22188, 22210, 22220, 22222, 22224, 22226, 22230, 22231, 22242, 22245, 22246, 22250, 22252, 22328, 22331, 22360, 22362, 22364, 22366, 22368, 22370, 22372, 22374, 22376, 22378, 22380, 22385, 22393, 22402, 22403, 22408, 22414, 22422, 22427, 22434, 22438, 22439, 22456, 22476, 22481, 22482, 22483, 22484, 22485, 22499, 22504, 22515, 22518, 22519, 22529, 22555, 22557, 22558, 22559, 22560, 22561, 22562, 22563, 22564, 22565, 22590, 22594, 22596, 22600, 22602, 22608, 22609, 22612, 22613, 22615, 22616, 22618, 22619, 22636, 22660, 22665, 22666, 22671, 22679, 22681, 22683, 22685, 22687, 22689, 22691, 22693, 22695, 22697, 22699, 22717, 22730, 22737, 22738, 22740, 22741, 22755, 22766, 22767, 22768, 22775, 22780, 22781, 22804, 22807, 22815, 22821, 22822, 22826, 22827, 22828, 22829, 22830, 22831, 22835, 22836, 22838, 22842, 22847, 22850, 22851, 22853, 22854, 22863, 22864, 22865, 22866, 22867, 22868, 22869, 22870, 22871, 22872, 22881, 22890, 22897, 22898, 22900, 22904, 22910, 22915, 22916, 22917, 22918, 22926, 22927, 22935, 22936, 22937, 22939, 22940, 22941, 22954, 22955, 22957, 22959, 22965, 22971, 22973, 22975, 22980, 23001, 23016, 23018, 23020, 23021, 23025, 23035, 23050, 23053, 23062, 23065, 23067, 23070, 23071, 23075, 23079, 23080, 23083, 23085, 23086, 23088, 23089, 23092, 23093, 23095, 23096, 23098, 23099, 23100, 23109, 23110, 23111, 23112, 23121, 23126, 23129, 23130, 23152, 23162, 23163, 23166, 23168, 23169, 23174, 23175, 23177, 23178, 23183, 23184, 23186, 23196, 23204, 23205, 23220, 23225, 23226, 23239, 23248, 23251, 23255, 23260, 23261, 23271, 23272, 23274, 23281, 23282, 23292, 23293, 23295, 23296, 23307, 23327, 23330, 23334, 23354, 23368, 23369, 23375, 23376, 23380, 23388, 23391, 23393, 23395, 23398, 23399, 23401, 23423, 23446, 23448, 23452, 23469, 23470, 23472, 23473, 23474, 23475, 23476, 23480, 23503, 23527, 23528, 23531, 23532, 23534, 23535, 23537, 23538, 23540, 23541, 23543, 23544, 23546, 23547, 23550, 23552, 23556, 23560, 23588, 23589, 23591, 23594, 23595, 23644, 23651, 23652, 23661, 23664, 23666, 23669, 23670, 23673, 23674, 23675, 23676, 23686, 23689, 23692, 23696, 23697, 23713, 23717, 23722, 23728, 23729, 23737, 23738, 23742, 23746, 23750, 23758, 23760, 23761, 23765, 23771, 23778, 23780, 23781, 23794, 23801, 23802, 23803, 23804, 23805, 23811, 23814, 23830, 23833, 23841, 23843, 23847, 23849, 23850, 23851, 23852, 23853, 23858, 23860, 23863, 23886, 23888, 23891, 23899, 23901, 23909, 23910, 23912, 23918, 23921, 23931, 23934, 23935, 23936, 23938, 23939, 23949, 23955, 23956, 23967, 23970, 23973, 23975, 23976, 23983, 23986, 23991, 24000, 24004, 24005, 24006, 24014, 24018, 24024, 24026, 24030, 24031, 24033, 24034, 24043, 24049, 24050, 24058, 24060, 24062, 24064, 24066, 24067, 24072, 24075, 24076, 24078, 24089, 24093, 24095, 24135, 24143, 24144, 24149, 24151, 24159, 24160, 24168, 24169, 24179, 24187, 24190, 24192, 24194, 24196, 24198, 24199, 24202, 24203, 24204, 24205, 24210, 24211, 24212, 24215, 24216, 24230, 24232, 24233, 24234, 24236, 24237, 24242, 24249, 24250, 24251, 24253, 24258, 24260, 24261, 24263, 24270, 24271, 24276, 24283, 24285, 24286, 24290, 24292, 24294, 24296, 24298, 24299, 24300, 24307, 24308, 24310, 24313, 24315, 24317, 24318, 24321, 24323, 24326, 24327, 24331, 24340, 24341, 24342, 24343, 24349, 24355, 24357, 24363, 24368, 24371, 24372, 24397, 24398, 24403, 24404, 24405, 24406, 24407, 24413, 24414, 24442, 24462, 24469, 24473, 24474, 24479, 24485, 24486, 24501, 24504, 24507, 24519, 24520, 24521, 24522, 24523, 24524, 24525, 24526, 24527, 24528, 24529, 24533, 24539, 24540, 24542, 24546, 24547, 24548, 24550, 24552, 24554, 24557, 24558, 24559, 24565, 24566, 24567, 24576, 24581, 24582, 24586, 24595, 24612, 24613, 24615, 24616, 24638, 24651, 24664, 24668, 24674, 24678, 24683, 24694, 24697, 24702, 24705, 24709, 24715, 24727, 24729, 24739, 24740, 24742, 24744, 24749, 24750, 24756, 24765, 24770, 24772, 24774, 24776, 24778, 24786, 24790, 24794, 24796, 24808, 24814, 24815, 24816, 24821, 24822, 24824, 24864, 24865, 24866, 24877, 24886, 24901, 24902, 24915, 24916, 24918, 24919, 24920, 24921, 24930, 24935, 24936, 24940, 24945, 24952, 24955, 24956, 24965, 24966, 24979, 24980, 24981, 24982, 24983, 24984, 24985, 24986, 24987, 24988, 24989, 24990, 24991, 25005, 25019, 25024, 25028, 25043, 25044, 25045, 25046, 25047, 25048, 25049, 25050, 25051, 25052, 25053, 25054, 25056, 25060, 25075, 25076, 25082, 25083, 25084, 25085, 25086, 25087, 25099, 25100, 25105, 25110, 25111, 25116, 25142, 25143, 25161, 25162, 25185, 25186, 25193, 25208, 25210, 25211, 25233, 25234, 25235, 25236, 25247, 25249, 25250, 25264, 25271, 25274, 25291, 25294, 25305, 25306, 25307, 25311, 25312, 25313, 25314, 25323, 25324, 25343, 25352, 25355, 25360, 25361, 25362, 25363, 25368, 25369, 25370, 25371, 25372, 25377, 25393, 25403, 25404, 25405, 25406, 25407, 25408, 25409, 25410, 25411, 25412, 25431, 25432, 25433, 25434, 25435, 25436, 25437, 25438, 25439, 25440, 25452, 25458, 25462, 25463, 25472, 25473, 25475, 25478, 25480, 25488, 25492, 25505, 25506, 25509, 25512, 25517, 25518, 25523, 25544, 25547, 25548, 25554, 25555, 25556, 25557, 25562, 25563, 25564, 25565, 25581, 25583, 25591, 25594, 25598, 25599, 25600, 25602, 25603, 25605, 25607, 25608, 25616, 25619, 25620, 25621, 25622, 25634, 25635, 25636, 25637, 25645, 25647, 25648, 25649, 25655, 25657, 25658, 25666, 25674, 25681, 25685, 25687, 25688, 25693, 25695, 25696, 25697, 25704, 25707, 25711, 25713, 25717, 25718, 25735, 25736, 25737, 25745, 25763, 25764, 25766, 25771, 25777, 25778, 25779, 25780, 25791, 25796, 25797, 25798, 25799, 25800, 25801, 25805, 25807, 25810, 25811, 25812, 25813, 25814, 25815, 25816, 25817, 25818, 25819, 25820, 25821, 25822, 25823, 25824, 25825, 25826, 25827, 25828, 25829, 25830, 25875, 25878, 25879, 25880, 25881, 25883, 25884, 25887, 25888, 25896, 25898, 25904, 25913, 25914, 25922, 25935, 25939, 25941, 25944, 25945, 25946, 25947, 25948, 25949, 25955, 25959, 25960, 25971, 25983, 26063, 26069, 26070, 26073, 26074, 26077, 26096, 26097, 26101, 26103, 26113, 26114, 26123, 26168, 26169, 26172, 26173, 26180, 26181, 26186, 26188, 26191, 26192, 26206, 26217, 26227, 26231, 26238, 26243, 26245, 26249, 26250, 26260, 26293, 26299, 26306, 26311, 26317, 26330, 26335, 26339, 26342, 26347, 26354, 26355, 26365, 26369, 26375, 26377, 26378, 26386, 26390, 26396, 26397, 26398, 26404, 26405, 26406, 26412, 26414, 26438, 26439, 26440, 26441, 26448, 26464, 26471, 26482, 26493, 26516, 26525, 26542, 26544, 26548, 26552, 26553, 26554, 26600, 26601, 26604, 26605, 26631, 26632, 26636, 26639, 26640, 26654, 26657, 26671, 26672, 26697, 26716, 26725, 26743, 26762, 26769, 26771, 26777, 26799, 26800, 26801, 26806, 26807, 26821, 26825, 26835, 26837, 26841, 26844, 26850, 26872, 26874, 26875, 26879, 26880, 26887, 26888, 26890, 26892, 26896, 26897, 26898, 26900, 26906, 26907, 26939, 26943, 26986, 26991, 26992, 26995, 27001, 27010, 27015, 27016, 27017, 27024, 27026, 27052, 27053, 27054, 27055, 27063, 27067, 27074, 27082, 27113, 27114, 27115, 27116, 27117, 27119, 27120, 27128, 27129, 27133, 27141, 27142, 27143, 27144, 27146, 27147, 27151, 27156, 27162, 27164, 27168, 27189, 27208, 27212, 27214, 27222, 27224, 27227, 27259, 27260, 27261, 27274, 27285, 27286, 27287, 27289, 27296, 27297, 27299, 27302, 27305, 27306, 27315, 27317, 27321, 27326, 27327, 27331, 27333, 27340, 27344, 27345, 27348, 27351, 27360, 27362, 27363, 27366, 27368, 27371, 27372, 27377, 27379, 27380, 27384, 27385, 27387, 27389, 27401, 27403, 27411, 27413, 27415, 27416, 27432, 27434, 27435, 27440, 27441, 27442, 27448, 27452, 27463, 27473, 27476, 27489, 27491, 27493, 27495, 27497, 27499, 27501, 27503, 27508, 27519, 27524, 27528, 27533, 27534, 27541, 27547, 27548, 27549, 27556, 27557, 27566, 27568, 27569, 27572, 27593, 27594, 27596, 27597, 27598, 27599, 27600, 27602, 27604, 27606, 27608, 27609, 27613, 27614, 27616, 27628, 27634, 27644, 27647, 27652, 27654, 27661, 27688, 27694, 27695, 27698, 27704, 27710, 27711, 27712, 27713, 27715, 27742, 27756, 27758, 27760, 27763, 27777, 27782, 27792, 27793, 27809, 27822, 27824, 27834, 27836, 27848, 27889, 27890, 27891, 27892, 27893, 27904, 27908, 27909, 27912, 27916, 27917, 27921, 27922, 27923, 27924, 27928, 27931, 27933, 27936, 27937, 27940, 27941, 27944, 27946, 27947, 27952, 27954, 27956, 27959, 27960, 27961, 27962, 27963, 27965, 27970, 27971, 27983, 27995, 27997, 27999, 28008, 28009, 28017, 28024, 28026, 28029, 28032, 28033, 28036, 28037, 28039, 28050, 28058, 28059, 28094, 28095, 28096, 28100, 28118, 28125, 28128, 28130, 28136, 28138, 28139, 28142, 28146, 28147, 28150, 28152, 28153, 28155, 28160, 28163, 28165, 28166, 28168, 28171, 28175, 28176, 28177, 28178, 28185, 28187, 28189, 28190, 28191, 28192, 28195, 28197, 28200, 28202, 28208, 28213, 28222, 28227, 28302, 28305, 28307, 28309, 28312, 28314, 28317, 28362, 28363, 28365, 28366, 28369, 28372, 28403, 28404, 28408, 28409, 28429, 28430, 28431, 28432, 28433, 28441, 28488, 28503, 28536, 28537, 28538, 28546, 28562, 28564, 28570, 28630, 28631, 28637, 28640, 28651, 28655, 28659, 28660, 28661, 28689, 28692, 28693, 28694, 28695, 28696, 28702, 28705, 28711, 28713, 28714, 28715, 28716, 28720, 28721, 28722, 28723, 28724, 28744, 28747, 28749, 28750, 28751, 28756, 28759, 28762, 28766, 28768, 28769, 28772, 28777, 28787, 28790, 28791, 28792, 28794, 28798, 28801, 28802, 28803, 28805, 28809, 28826, 28839, 28852, 28853, 28856, 28857, 28859, 28884, 28886, 28894, 28906, 28907, 28910, 28923, 28930, 28935, 28936, 28939, 28940, 28944, 28949, 28952, 28955, 28956, 28957, 28958, 28959, 28960, 28961, 28962, 28963, 28964, 28966, 28968, 28972, 28973, 28974, 29006, 29009, 29014, 29016, 29017, 29018, 29032, 29035, 29045, 29046, 29049, 29083, 29101, 29109, 29112, 29116, 29117, 29131, 29182, 29201, 29204, 29226, 29235, 29236, 29240, 29249, 29267, 29324, 29329, 29330, 29340, 29341, 29342, 29353, 29354, 29365, 29367, 29370, 29388, 29393, 29394, 29396, 29397, 29399, 29400, 29401, 29427, 29430, 29442, 29475, 29479, 29481, 29483, 29487, 29490, 29492, 29494, 29501, 29503, 29509, 29511, 29513, 29515, 29517, 29519, 29520, 29521, 29527, 29528, 29533, 29534, 29545, 29549, 29572, 29590, 29598, 29600, 29608, 29610, 29611, 29625, 29626, 29638, 29641, 29644, 29647, 29655, 29658, 29688, 29689, 29692, 29693, 29698, 29700, 29702, 29703, 29705, 29707, 29709, 29711, 29713, 29715, 29718, 29721, 29725, 29726, 29730, 29731, 29732, 29735, 29739, 29760, 29761, 29763, 29769, 29770, 29776, 29777, 29778, 29785, 29786, 29790, 29831, 29832, 29834, 29850, 29851, 29854, 29857, 29861, 29865, 29868, 29869, 29872, 29873, 29883, 29884, 29897, 29902, 29921, 29988, 30006, 30042, 30049, 30050, 30063, 30064, 30071, 30072, 30073, 30150, 30152, 30168, 30169, 30190, 30191, 30194, 30198, 30200, 30201, 30202, 30240, 30242, 30311, 30323, 30327, 30362, 30370, 30371, 30373, 30375, 30378, 30379, 30382, 30383, 30385, 30387, 30389, 30391, 30403, 30438, 30452, 30463, 30465, 30467, 30470, 30471, 30474, 30477, 30478, 30479, 30480, 30482, 30486, 30487, 30490, 30521, 30529, 30531, 30532, 30535, 30536, 30578, 30579, 30581, 30590, 30601, 30605, 30609, 30610, 30628, 30629, 30632, 30634, 30662, 30664, 30666, 30669, 30670, 30675, 30677, 30679, 30682, 30684, 30686, 30687, 30689, 30691, 30692, 30711, 30713, 30743, 30744, 30749, 30752, 30764, 30766, 30767, 30771, 30774, 30776, 30794, 30806, 30817, 30818, 30848, 30849, 30861, 30863, 30864, 30865, 30866, 30867, 30882, 30884, 30894, 30896, 30898, 30899, 30976, 30977, 31013, 31023, 31024, 31035, 31036, 31038, 31041, 31093, 31125, 31165, 31169, 31181, 31192, 31312, 31391, 31415, 31416, 31521, 31525, 31568, 31569, 31577, 31580, 31609, 31610, 31624, 31645, 31646, 31655, 31681, 31704, 31708, 31719, 31734, 31735, 31738, 31754, 31765, 31822, 31824, 31834, 31841, 31849, 31850, 31881, 31953, 31962); +UPDATE `creature_model_info` SET `gender`=2 WHERE `modelid` IN (4, 13, 14, 15, 21, 22, 30, 38, 62, 64, 65, 69, 71, 73, 91, 92, 110, 123, 134, 137, 141, 145, 146, 151, 157, 158, 161, 165, 168, 169, 171, 174, 175, 176, 178, 179, 180, 181, 193, 200, 201, 204, 207, 229, 235, 236, 237, 238, 239, 245, 246, 247, 268, 269, 283, 295, 304, 320, 321, 322, 328, 332, 336, 342, 347, 352, 358, 360, 366, 367, 368, 370, 372, 376, 377, 378, 379, 380, 381, 382, 383, 384, 387, 388, 389, 397, 399, 400, 410, 413, 414, 418, 447, 453, 457, 470, 471, 473, 479, 480, 481, 482, 483, 488, 489, 490, 491, 492, 493, 494, 497, 498, 499, 500, 501, 502, 503, 505, 507, 512, 513, 514, 518, 519, 520, 525, 528, 533, 535, 538, 539, 543, 544, 545, 546, 547, 548, 549, 550, 551, 557, 558, 559, 561, 566, 568, 569, 570, 571, 580, 589, 598, 599, 601, 603, 604, 607, 609, 612, 613, 614, 615, 621, 622, 623, 624, 625, 631, 632, 633, 641, 643, 644, 646, 647, 648, 649, 651, 654, 659, 662, 666, 667, 668, 670, 671, 672, 673, 674, 675, 676, 677, 681, 682, 694, 695, 697, 698, 699, 703, 704, 705, 706, 707, 709, 711, 713, 714, 715, 719, 720, 732, 733, 734, 735, 741, 744, 748, 749, 755, 759, 760, 762, 767, 768, 775, 776, 780, 781, 782, 783, 784, 785, 787, 788, 798, 800, 801, 802, 806, 807, 814, 815, 821, 822, 827, 828, 829, 831, 833, 834, 835, 836, 846, 847, 848, 850, 855, 856, 857, 858, 859, 860, 862, 863, 864, 865, 867, 868, 869, 870, 892, 897, 901, 902, 903, 904, 907, 908, 909, 910, 911, 913, 917, 918, 925, 935, 936, 937, 945, 948, 949, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 965, 975, 979, 981, 982, 984, 985, 986, 987, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1004, 1006, 1007, 1008, 1011, 1012, 1015, 1016, 1017, 1018, 1019, 1021, 1023, 1025, 1030, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1055, 1056, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1068, 1070, 1072, 1073, 1074, 1075, 1080, 1081, 1082, 1083, 1084, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1095, 1097, 1100, 1102, 1103, 1104, 1105, 1106, 1108, 1109, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1141, 1145, 1146, 1147, 1148, 1149, 1157, 1159, 1160, 1161, 1162, 1164, 1166, 1167, 1170, 1176, 1185, 1192, 1196, 1197, 1198, 1200, 1201, 1202, 1204, 1206, 1207, 1208, 1210, 1213, 1216, 1217, 1219, 1220, 1221, 1222, 1228, 1229, 1230, 1231, 1232, 1236, 1241, 1244, 1245, 1246, 1247, 1248, 1250, 1251, 1259, 1261, 1267, 1269, 1281, 1283, 1284, 1303, 1306, 1307, 1308, 1309, 1336, 1337, 1338, 1339, 1340, 1397, 1405, 1415, 1418, 1421, 1451, 1452, 1453, 1454, 1455, 1460, 1461, 1467, 1529, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1545, 1547, 1548, 1549, 1551, 1555, 1556, 1557, 1560, 1561, 1566, 1609, 1686, 1687, 1693, 1742, 1744, 1746, 1747, 1749, 1751, 1752, 1754, 1761, 1772, 1816, 1817, 1818, 1819, 1824, 1825, 1873, 1887, 1888, 1910, 1911, 1913, 1918, 1921, 1923, 1924, 1936, 1938, 1939, 1940, 1950, 1951, 1952, 1954, 1955, 1958, 1959, 1960, 1961, 1962, 1974, 1975, 1986, 1987, 1988, 1989, 1990, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2022, 2023, 2024, 2028, 2030, 2033, 2069, 2075, 2076, 2077, 2078, 2079, 2154, 2155, 2156, 2157, 2158, 2168, 2169, 2170, 2172, 2173, 2174, 2175, 2176, 2177, 2179, 2185, 2186, 2187, 2188, 2189, 2190, 2193, 2194, 2195, 2234, 2236, 2237, 2238, 2239, 2278, 2281, 2289, 2297, 2298, 2300, 2301, 2302, 2303, 2305, 2307, 2308, 2309, 2320, 2325, 2326, 2327, 2328, 2352, 2378, 2402, 2404, 2405, 2408, 2409, 2410, 2414, 2418, 2419, 2420, 2421, 2423, 2424, 2425, 2426, 2428, 2429, 2433, 2437, 2446, 2450, 2451, 2452, 2453, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2533, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2548, 2549, 2550, 2552, 2567, 2568, 2569, 2570, 2571, 2573, 2574, 2582, 2592, 2598, 2599, 2600, 2601, 2602, 2606, 2609, 2676, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2702, 2703, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2719, 2720, 2726, 2728, 2729, 2730, 2731, 2732, 2741, 2742, 2743, 2764, 2765, 2766, 2767, 2768, 2832, 2835, 2836, 2837, 2838, 2850, 2851, 2864, 2902, 2954, 2955, 2956, 2957, 2958, 2975, 2995, 2996, 3004, 3005, 3006, 3018, 3019, 3020, 3023, 3024, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3123, 3126, 3127, 3146, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3210, 3211, 3212, 3213, 3214, 3215, 3233, 3235, 3247, 3248, 3255, 3386, 3507, 3668, 3731, 3886, 3900, 3916, 3942, 3956, 4065, 4067, 4090, 4091, 4124, 4167, 4185, 4200, 4203, 4256, 4266, 4267, 4268, 4269, 4270, 4305, 4312, 4317, 4343, 4434, 4435, 4440, 4442, 4445, 4447, 4448, 4456, 4457, 4458, 4465, 4466, 4467, 4468, 4472, 4473, 4480, 4486, 4535, 4566, 4585, 4587, 4588, 4589, 4590, 4591, 4603, 4606, 4607, 4613, 4615, 4626, 4629, 4631, 4636, 4683, 4689, 4713, 4714, 4716, 4732, 4733, 4734, 4735, 4754, 4759, 4761, 4766, 4767, 4768, 4829, 4868, 4869, 4870, 4872, 4877, 4878, 4906, 4907, 4959, 4960, 5026, 5027, 5030, 5048, 5050, 5051, 5052, 5066, 5067, 5068, 5069, 5125, 5126, 5127, 5145, 5187, 5228, 5229, 5231, 5234, 5238, 5239, 5240, 5241, 5242, 5246, 5265, 5285, 5287, 5288, 5289, 5290, 5291, 5292, 5297, 5299, 5305, 5327, 5369, 5379, 5386, 5430, 5431, 5432, 5448, 5450, 5488, 5489, 5490, 5491, 5492, 5493, 5494, 5497, 5498, 5505, 5510, 5554, 5555, 5556, 5557, 5558, 5559, 5560, 5561, 5562, 5563, 5564, 5585, 5586, 5645, 5712, 5746, 5747, 5773, 5780, 5781, 5848, 5849, 5850, 5851, 5905, 5906, 5925, 5926, 5927, 5965, 5966, 5985, 5987, 5989, 5990, 6028, 6068, 6069, 6070, 6073, 6076, 6081, 6082, 6083, 6085, 6086, 6087, 6121, 6122, 6126, 6148, 6172, 6173, 6193, 6195, 6196, 6197, 6209, 6211, 6212, 6268, 6269, 6270, 6271, 6288, 6290, 6291, 6292, 6293, 6294, 6295, 6296, 6297, 6298, 6299, 6300, 6302, 6303, 6350, 6351, 6352, 6368, 6369, 6370, 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378, 6379, 6431, 6534, 6537, 6544, 6569, 6633, 6674, 6688, 6735, 6736, 6737, 6745, 6746, 6756, 6757, 6758, 6759, 6774, 6798, 6799, 6800, 6801, 6802, 6803, 6804, 6805, 6806, 6807, 6808, 6809, 6810, 6811, 6817, 6818, 6819, 6820, 6821, 6822, 6823, 6824, 6825, 6826, 6827, 6828, 6829, 6830, 6838, 6841, 6842, 6851, 6852, 6884, 6888, 6889, 6890, 6891, 6908, 6909, 6910, 6912, 6915, 6942, 6943, 6977, 7029, 7046, 7114, 7271, 7288, 7289, 7339, 7344, 7345, 7347, 7348, 7349, 7350, 7352, 7409, 7449, 7469, 7470, 7489, 7510, 7511, 7533, 7534, 7549, 7550, 7553, 7554, 7555, 7569, 7571, 7572, 7616, 7617, 7619, 7671, 7672, 7690, 7691, 7752, 7755, 7757, 7763, 7804, 7806, 7829, 7836, 7837, 7839, 7840, 7845, 7847, 7848, 7853, 7854, 7855, 7856, 7857, 7858, 7864, 7869, 7890, 7891, 7892, 7893, 7894, 7896, 7897, 7898, 7899, 7900, 7903, 7906, 7908, 7920, 7933, 7937, 7949, 7950, 7970, 7972, 7975, 7976, 8011, 8014, 8015, 8049, 8050, 8053, 8109, 8149, 8150, 8151, 8152, 8172, 8173, 8174, 8175, 8177, 8178, 8179, 8180, 8181, 8182, 8183, 8184, 8189, 8209, 8269, 8270, 8271, 8289, 8317, 8318, 8369, 8389, 8391, 8392, 8395, 8409, 8410, 8411, 8412, 8469, 8470, 8471, 8472, 8473, 8475, 8509, 8510, 8511, 8512, 8529, 8549, 8550, 8571, 8573, 8574, 8589, 8712, 8713, 8714, 8715, 8716, 8782, 8783, 8797, 8802, 8808, 8810, 8811, 8816, 8817, 8818, 8819, 8824, 8833, 8834, 8837, 8838, 8840, 8841, 8842, 8843, 8869, 8870, 8871, 8909, 8910, 8969, 8970, 8971, 8972, 9009, 9010, 9011, 9012, 9013, 9014, 9015, 9016, 9017, 9018, 9019, 9020, 9021, 9022, 9028, 9029, 9030, 9031, 9032, 9033, 9050, 9074, 9129, 9189, 9209, 9210, 9229, 9231, 9276, 9277, 9278, 9280, 9287, 9345, 9354, 9369, 9370, 9371, 9372, 9389, 9390, 9449, 9469, 9471, 9473, 9474, 9475, 9476, 9490, 9491, 9492, 9509, 9510, 9511, 9535, 9555, 9556, 9557, 9558, 9560, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9582, 9583, 9584, 9585, 9586, 9587, 9588, 9589, 9590, 9591, 9592, 9593, 9594, 9595, 9723, 9749, 9750, 9755, 9756, 9758, 9760, 9782, 9783, 9784, 9785, 9786, 9787, 9788, 9789, 9790, 9793, 9806, 9829, 9832, 9903, 9904, 9905, 9906, 9909, 9910, 9913, 9929, 9934, 9989, 9990, 9992, 9993, 9994, 9995, 9996, 9997, 10000, 10001, 10002, 10003, 10005, 10006, 10007, 10015, 10029, 10030, 10031, 10033, 10037, 10040, 10041, 10042, 10044, 10045, 10046, 10056, 10090, 10091, 10095, 10183, 10209, 10244, 10255, 10256, 10270, 10271, 10273, 10274, 10278, 10283, 10284, 10315, 10317, 10487, 10553, 10583, 10584, 10585, 10612, 10613, 10621, 10626, 10627, 10628, 10630, 10648, 10661, 10662, 10664, 10666, 10667, 10670, 10671, 10672, 10673, 10698, 10699, 10700, 10701, 10703, 10718, 10719, 10720, 10721, 10728, 10753, 10771, 10772, 10789, 10792, 10793, 10794, 10796, 10798, 10799, 10800, 10801, 10802, 10803, 10804, 10805, 10806, 10807, 10808, 10809, 10810, 10814, 10816, 10818, 10819, 10824, 10825, 10826, 10827, 10828, 10829, 10830, 10831, 10832, 10833, 10849, 10850, 10851, 10852, 10853, 10854, 10855, 10856, 10889, 10890, 10891, 10892, 10893, 10894, 10897, 10898, 10899, 10900, 10902, 10903, 10904, 10905, 10906, 10914, 10915, 10916, 10917, 10918, 10919, 10922, 10932, 10933, 10934, 10947, 10950, 10951, 10952, 10970, 10971, 10972, 10973, 10974, 10975, 10976, 10977, 10978, 10979, 10983, 10984, 10985, 10986, 10987, 10988, 10990, 10991, 10992, 10993, 10996, 11009, 11010, 11011, 11012, 11029, 11031, 11032, 11034, 11071, 11078, 11079, 11084, 11085, 11086, 11087, 11088, 11089, 11090, 11091, 11092, 11093, 11094, 11095, 11096, 11097, 11098, 11099, 11104, 11105, 11106, 11107, 11108, 11137, 11138, 11139, 11140, 11141, 11142, 11143, 11144, 11171, 11172, 11174, 11178, 11315, 11316, 11317, 11318, 11319, 11348, 11362, 11363, 11371, 11373, 11374, 11396, 11397, 11398, 11399, 11400, 11401, 11402, 11403, 11404, 11405, 11410, 11411, 11412, 11413, 11414, 11415, 11417, 11418, 11419, 11420, 11421, 11422, 11447, 11448, 11449, 11450, 11451, 11452, 11453, 11454, 11455, 11471, 11472, 11473, 11489, 11490, 11491, 11492, 11633, 11634, 11635, 11636, 11641, 11649, 11659, 11686, 11709, 11710, 11711, 11712, 11713, 11730, 11731, 11828, 11829, 11908, 11909, 11910, 11912, 11914, 11986, 12051, 12073, 12074, 12109, 12110, 12129, 12149, 12150, 12151, 12152, 12153, 12154, 12155, 12156, 12157, 12158, 12159, 12160, 12162, 12163, 12164, 12191, 12192, 12193, 12194, 12195, 12196, 12197, 12198, 12199, 12200, 12201, 12202, 12203, 12204, 12205, 12206, 12207, 12208, 12209, 12210, 12231, 12232, 12233, 12234, 12235, 12236, 12237, 12238, 12239, 12240, 12241, 12242, 12243, 12244, 12245, 12246, 12247, 12293, 12309, 12310, 12333, 12335, 12336, 12338, 12339, 12340, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, 12349, 12389, 12429, 12432, 12433, 12434, 12436, 12489, 12509, 12529, 12530, 12589, 12682, 12683, 12750, 12769, 12814, 12815, 12816, 12817, 12818, 12819, 12820, 12821, 12869, 12929, 12962, 12963, 12966, 13009, 13069, 13095, 13096, 13097, 13098, 13109, 13110, 13111, 13170, 13172, 13173, 13174, 13209, 13210, 13211, 13212, 13310, 13340, 13444, 13489, 13490, 13509, 13530, 13589, 13609, 13610, 13629, 13649, 13730, 13731, 13732, 13749, 13869, 13929, 13971, 13972, 13993, 14012, 14025, 14112, 14152, 14173, 14213, 14214, 14252, 14253, 14254, 14255, 14256, 14257, 14272, 14273, 14312, 14313, 14315, 14316, 14318, 14319, 14328, 14331, 14334, 14335, 14336, 14337, 14338, 14345, 14346, 14348, 14349, 14350, 14354, 14365, 14366, 14367, 14368, 14372, 14373, 14374, 14375, 14376, 14377, 14379, 14382, 14383, 14385, 14389, 14390, 14391, 14392, 14428, 14430, 14473, 14497, 14501, 14502, 14503, 14504, 14505, 14506, 14507, 14508, 14509, 14510, 14511, 14512, 14513, 14514, 14515, 14516, 14517, 14518, 14520, 14521, 14522, 14523, 14524, 14525, 14527, 14528, 14541, 14542, 14546, 14547, 14548, 14549, 14550, 14551, 14552, 14553, 14557, 14558, 14559, 14560, 14562, 14567, 14572, 14573, 14574, 14575, 14578, 14579, 14581, 14582, 14583, 14584, 14585, 14590, 14592, 14593, 14594, 14633, 14657, 14658, 14659, 14660, 14661, 14674, 14675, 14692, 14693, 14695, 14696, 14698, 14699, 14700, 14701, 14702, 14703, 14704, 14705, 14706, 14707, 14708, 14710, 14720, 14776, 14778, 14779, 14780, 14782, 14783, 14852, 14853, 14884, 14932, 14933, 14934, 14935, 14936, 14937, 14938, 14939, 14940, 14941, 14942, 14950, 14951, 14952, 14985, 14992, 15072, 15092, 15101, 15132, 15133, 15135, 15136, 15137, 15138, 15145, 15150, 15151, 15180, 15181, 15182, 15200, 15204, 15221, 15227, 15231, 15234, 15275, 15288, 15291, 15292, 15293, 15294, 15295, 15296, 15297, 15298, 15301, 15327, 15333, 15334, 15335, 15336, 15337, 15338, 15339, 15340, 15343, 15344, 15345, 15346, 15347, 15351, 15354, 15355, 15356, 15357, 15359, 15360, 15361, 15362, 15364, 15369, 15374, 15375, 15376, 15378, 15379, 15380, 15381, 15382, 15383, 15384, 15385, 15386, 15392, 15393, 15394, 15395, 15396, 15397, 15398, 15400, 15402, 15404, 15405, 15406, 15412, 15413, 15417, 15422, 15423, 15431, 15432, 15433, 15434, 15436, 15437, 15438, 15439, 15452, 15463, 15464, 15465, 15467, 15468, 15469, 15470, 15471, 15474, 15483, 15484, 15485, 15486, 15487, 15488, 15489, 15490, 15491, 15492, 15493, 15494, 15495, 15496, 15497, 15498, 15499, 15500, 15501, 15506, 15507, 15509, 15512, 15533, 15534, 15538, 15545, 15546, 15547, 15554, 15555, 15556, 15576, 15582, 15583, 15584, 15586, 15587, 15588, 15589, 15590, 15591, 15592, 15593, 15595, 15654, 15655, 15656, 15657, 15658, 15659, 15671, 15672, 15673, 15674, 15675, 15676, 15677, 15678, 15679, 15680, 15681, 15682, 15683, 15686, 15693, 15694, 15695, 15696, 15697, 15699, 15700, 15703, 15704, 15705, 15706, 15709, 15710, 15738, 15739, 15740, 15741, 15742, 15743, 15774, 15785, 15786, 15787, 15788, 15789, 15790, 15791, 15792, 15793, 15794, 15866, 15868, 15878, 15880, 15881, 15882, 15900, 15905, 15918, 15920, 15921, 15922, 15923, 15929, 15932, 15934, 15937, 15938, 15939, 15941, 15942, 15946, 15948, 15958, 15961, 15962, 15963, 15964, 15969, 15978, 15983, 15984, 15991, 16011, 16017, 16021, 16032, 16033, 16034, 16035, 16039, 16041, 16043, 16044, 16045, 16049, 16050, 16051, 16052, 16053, 16054, 16064, 16074, 16075, 16081, 16109, 16110, 16111, 16135, 16136, 16138, 16143, 16145, 16146, 16156, 16159, 16162, 16167, 16168, 16169, 16170, 16173, 16174, 16177, 16178, 16181, 16188, 16189, 16191, 16205, 16206, 16213, 16214, 16215, 16216, 16217, 16241, 16243, 16244, 16245, 16251, 16254, 16255, 16256, 16257, 16259, 16266, 16271, 16272, 16273, 16274, 16277, 16313, 16314, 16346, 16347, 16348, 16349, 16350, 16351, 16352, 16353, 16356, 16357, 16358, 16359, 16360, 16361, 16395, 16407, 16408, 16415, 16428, 16452, 16463, 16476, 16571, 16572, 16573, 16574, 16575, 16576, 16587, 16622, 16630, 16631, 16633, 16634, 16635, 16711, 16723, 16724, 16730, 16731, 16741, 16784, 16838, 16840, 16841, 16861, 16866, 16870, 16871, 16874, 16875, 16876, 16877, 16878, 16879, 16880, 16881, 16882, 16883, 16884, 16885, 16886, 16887, 16888, 16889, 16890, 16891, 16892, 16893, 16894, 16895, 16896, 16897, 16898, 16899, 16900, 16901, 16902, 16910, 16915, 16916, 16919, 16925, 16937, 16938, 16939, 16940, 16943, 16944, 16946, 16953, 16958, 16970, 16972, 16975, 16977, 16984, 16985, 16986, 16987, 16988, 16989, 16990, 16992, 16993, 16995, 16997, 16998, 16999, 17000, 17002, 17003, 17005, 17006, 17009, 17010, 17011, 17012, 17019, 17029, 17034, 17045, 17054, 17055, 17056, 17057, 17058, 17059, 17060, 17061, 17062, 17063, 17065, 17070, 17071, 17072, 17073, 17074, 17075, 17076, 17078, 17079, 17080, 17081, 17089, 17091, 17092, 17093, 17094, 17095, 17096, 17097, 17098, 17099, 17100, 17101, 17102, 17103, 17104, 17105, 17106, 17107, 17108, 17109, 17142, 17170, 17188, 17191, 17192, 17200, 17204, 17205, 17228, 17237, 17238, 17239, 17240, 17253, 17254, 17255, 17256, 17262, 17270, 17283, 17286, 17288, 17298, 17308, 17310, 17312, 17321, 17323, 17328, 17378, 17389, 17408, 17423, 17445, 17447, 17450, 17455, 17457, 17461, 17472, 17519, 17522, 17525, 17526, 17528, 17533, 17535, 17545, 17546, 17547, 17549, 17558, 17559, 17562, 17563, 17569, 17573, 17574, 17596, 17607, 17608, 17612, 17618, 17625, 17642, 17643, 17646, 17647, 17653, 17654, 17655, 17656, 17657, 17674, 17685, 17686, 17687, 17689, 17693, 17694, 17695, 17696, 17697, 17698, 17703, 17704, 17707, 17709, 17711, 17712, 17713, 17714, 17716, 17717, 17718, 17729, 17739, 17740, 17743, 17746, 17751, 17752, 17753, 17754, 17758, 17759, 17764, 17765, 17772, 17781, 17784, 17794, 17795, 17796, 17797, 17798, 17800, 17805, 17806, 17808, 17809, 17812, 17832, 17834, 17839, 17840, 17841, 17846, 17856, 17857, 17858, 17859, 17860, 17864, 17865, 17866, 17867, 17868, 17869, 17870, 17871, 17872, 17876, 17877, 17879, 17888, 17889, 17890, 17946, 17972, 18012, 18028, 18029, 18030, 18036, 18038, 18042, 18050, 18062, 18063, 18065, 18066, 18069, 18075, 18081, 18082, 18083, 18084, 18088, 18089, 18094, 18115, 18116, 18117, 18135, 18138, 18139, 18140, 18143, 18147, 18154, 18155, 18156, 18163, 18164, 18166, 18167, 18168, 18169, 18170, 18178, 18193, 18194, 18209, 18223, 18224, 18227, 18228, 18229, 18237, 18238, 18244, 18245, 18269, 18271, 18272, 18273, 18274, 18275, 18279, 18287, 18288, 18303, 18310, 18312, 18313, 18314, 18315, 18316, 18317, 18342, 18345, 18347, 18351, 18352, 18353, 18359, 18360, 18361, 18362, 18363, 18364, 18365, 18366, 18372, 18373, 18374, 18375, 18376, 18377, 18378, 18379, 18380, 18381, 18382, 18383, 18402, 18403, 18404, 18406, 18410, 18411, 18412, 18413, 18414, 18416, 18417, 18430, 18431, 18434, 18449, 18467, 18470, 18471, 18480, 18485, 18489, 18494, 18502, 18503, 18504, 18505, 18509, 18510, 18515, 18516, 18517, 18518, 18519, 18533, 18534, 18615, 18621, 18624, 18628, 18631, 18632, 18633, 18634, 18635, 18636, 18643, 18645, 18652, 18654, 18657, 18662, 18671, 18684, 18685, 18696, 18697, 18698, 18700, 18701, 18713, 18719, 18721, 18723, 18724, 18726, 18728, 18736, 18753, 18786, 18813, 18817, 18818, 18819, 18820, 18821, 18823, 18832, 18833, 18834, 18837, 18839, 18848, 18877, 18878, 18879, 18885, 18886, 18887, 18901, 18902, 18919, 18920, 18922, 18930, 18933, 18944, 18945, 18946, 18947, 18951, 18953, 18954, 18955, 18957, 18958, 18987, 18988, 18989, 18990, 18996, 18997, 18998, 19003, 19006, 19007, 19009, 19010, 19011, 19012, 19014, 19018, 19020, 19021, 19023, 19024, 19025, 19026, 19027, 19029, 19030, 19031, 19033, 19034, 19036, 19039, 19040, 19042, 19067, 19070, 19071, 19072, 19073, 19074, 19075, 19085, 19090, 19093, 19096, 19097, 19098, 19109, 19110, 19112, 19113, 19114, 19139, 19163, 19164, 19165, 19189, 19190, 19191, 19196, 19200, 19201, 19215, 19218, 19219, 19220, 19221, 19223, 19227, 19230, 19240, 19241, 19249, 19251, 19252, 19257, 19258, 19259, 19260, 19269, 19270, 19272, 19283, 19285, 19286, 19287, 19288, 19289, 19290, 19291, 19292, 19293, 19295, 19298, 19299, 19300, 19301, 19302, 19303, 19304, 19324, 19325, 19329, 19330, 19331, 19332, 19338, 19347, 19357, 19367, 19369, 19370, 19371, 19373, 19375, 19376, 19377, 19378, 19383, 19400, 19401, 19403, 19404, 19405, 19406, 19407, 19408, 19410, 19414, 19416, 19422, 19435, 19436, 19438, 19454, 19455, 19456, 19458, 19478, 19479, 19480, 19482, 19483, 19484, 19501, 19527, 19528, 19529, 19530, 19531, 19537, 19540, 19554, 19590, 19592, 19593, 19594, 19600, 19603, 19604, 19605, 19606, 19607, 19608, 19609, 19610, 19611, 19616, 19618, 19621, 19634, 19658, 19659, 19662, 19663, 19667, 19669, 19670, 19672, 19673, 19674, 19677, 19678, 19681, 19682, 19685, 19687, 19688, 19689, 19690, 19691, 19694, 19695, 19696, 19701, 19702, 19704, 19705, 19709, 19718, 19719, 19726, 19727, 19728, 19732, 19733, 19734, 19735, 19736, 19742, 19743, 19754, 19757, 19758, 19759, 19760, 19763, 19764, 19766, 19767, 19768, 19770, 19771, 19775, 19776, 19777, 19779, 19781, 19783, 19784, 19786, 19788, 19793, 19796, 19838, 19839, 19844, 19850, 19852, 19853, 19855, 19856, 19857, 19858, 19859, 19860, 19861, 19862, 19863, 19864, 19865, 19866, 19867, 19868, 19869, 19870, 19874, 19875, 19876, 19879, 19880, 19882, 19883, 19884, 19891, 19892, 19893, 19897, 19898, 19901, 19902, 19910, 19911, 19913, 19916, 19917, 19943, 19944, 19951, 19952, 19961, 19962, 19963, 19971, 19972, 19973, 19974, 19976, 19979, 19980, 19985, 19986, 19987, 19988, 19995, 19996, 19997, 19998, 19999, 20001, 20007, 20008, 20009, 20010, 20011, 20012, 20013, 20014, 20015, 20021, 20024, 20025, 20026, 20027, 20029, 20030, 20037, 20039, 20042, 20048, 20049, 20062, 20064, 20066, 20067, 20069, 20076, 20089, 20090, 20093, 20094, 20098, 20101, 20103, 20104, 20135, 20137, 20138, 20139, 20142, 20144, 20146, 20148, 20151, 20152, 20153, 20154, 20162, 20180, 20211, 20213, 20223, 20224, 20226, 20227, 20229, 20230, 20231, 20238, 20239, 20242, 20245, 20247, 20249, 20250, 20259, 20260, 20261, 20263, 20264, 20265, 20271, 20272, 20273, 20274, 20276, 20278, 20281, 20282, 20292, 20293, 20294, 20297, 20298, 20299, 20300, 20306, 20307, 20308, 20309, 20324, 20327, 20329, 20344, 20345, 20346, 20347, 20348, 20349, 20359, 20364, 20366, 20375, 20376, 20389, 20390, 20399, 20400, 20401, 20402, 20403, 20404, 20405, 20406, 20407, 20408, 20409, 20410, 20411, 20412, 20413, 20414, 20415, 20417, 20424, 20431, 20432, 20433, 20456, 20469, 20471, 20473, 20476, 20477, 20516, 20517, 20519, 20521, 20522, 20530, 20531, 20538, 20539, 20540, 20541, 20544, 20547, 20554, 20555, 20556, 20560, 20570, 20571, 20572, 20573, 20574, 20575, 20576, 20577, 20586, 20587, 20588, 20589, 20591, 20592, 20593, 20594, 20595, 20596, 20598, 20599, 20600, 20601, 20602, 20603, 20604, 20605, 20606, 20608, 20609, 20611, 20617, 20630, 20634, 20645, 20658, 20673, 20675, 20682, 20683, 20684, 20685, 20686, 20687, 20689, 20691, 20701, 20724, 20725, 20727, 20728, 20729, 20730, 20738, 20745, 20746, 20747, 20749, 20750, 20760, 20763, 20764, 20766, 20769, 20775, 20782, 20790, 20801, 20808, 20809, 20810, 20812, 20814, 20815, 20816, 20817, 20818, 20819, 20820, 20821, 20826, 20827, 20828, 20829, 20830, 20831, 20832, 20833, 20834, 20835, 20837, 20838, 20839, 20841, 20842, 20843, 20844, 20845, 20846, 20847, 20848, 20849, 20850, 20851, 20853, 20854, 20857, 20858, 20860, 20862, 20863, 20864, 20872, 20874, 20881, 20882, 20883, 20885, 20894, 20900, 20901, 20903, 20908, 20909, 20910, 20911, 20912, 20914, 20917, 20919, 20922, 20923, 20931, 20932, 20934, 20937, 20944, 20957, 20959, 20960, 20963, 20964, 20971, 20973, 20974, 20977, 20979, 20996, 20997, 20998, 20999, 21003, 21032, 21040, 21048, 21049, 21063, 21070, 21072, 21073, 21074, 21075, 21076, 21077, 21079, 21087, 21114, 21119, 21124, 21125, 21126, 21130, 21131, 21133, 21138, 21140, 21141, 21145, 21146, 21147, 21150, 21152, 21155, 21156, 21157, 21158, 21168, 21170, 21171, 21173, 21192, 21193, 21209, 21210, 21211, 21213, 21214, 21224, 21225, 21226, 21234, 21235, 21238, 21240, 21241, 21242, 21243, 21244, 21246, 21247, 21257, 21260, 21261, 21268, 21282, 21296, 21297, 21298, 21300, 21301, 21303, 21304, 21305, 21306, 21307, 21317, 21319, 21320, 21321, 21324, 21325, 21326, 21328, 21330, 21343, 21352, 21355, 21356, 21360, 21362, 21371, 21381, 21382, 21391, 21392, 21394, 21396, 21397, 21412, 21423, 21425, 21427, 21429, 21430, 21431, 21434, 21435, 21437, 21439, 21444, 21446, 21457, 21460, 21473, 21474, 21479, 21481, 21482, 21486, 21487, 21492, 21520, 21521, 21522, 21523, 21524, 21525, 21545, 21548, 21582, 21583, 21584, 21585, 21587, 21603, 21616, 21628, 21635, 21636, 21691, 21717, 21721, 21722, 21732, 21733, 21734, 21735, 21736, 21747, 21763, 21773, 21788, 21793, 21796, 21822, 21825, 21830, 21831, 21832, 21834, 21888, 21895, 21896, 21900, 21901, 21906, 21907, 21908, 21910, 21912, 21925, 21936, 21939, 21950, 21955, 21960, 21962, 21971, 21973, 21974, 21975, 21977, 21978, 21979, 21980, 21981, 21999, 22000, 22067, 22101, 22104, 22106, 22122, 22123, 22124, 22125, 22130, 22131, 22132, 22167, 22168, 22173, 22175, 22181, 22185, 22190, 22198, 22204, 22206, 22236, 22237, 22249, 22253, 22254, 22255, 22256, 22257, 22317, 22318, 22319, 22320, 22321, 22335, 22336, 22349, 22356, 22359, 22382, 22383, 22388, 22389, 22409, 22415, 22416, 22418, 22421, 22428, 22429, 22431, 22432, 22448, 22452, 22457, 22458, 22459, 22460, 22468, 22469, 22470, 22471, 22472, 22473, 22474, 22496, 22500, 22503, 22506, 22517, 22522, 22523, 22524, 22546, 22548, 22552, 22579, 22587, 22588, 22589, 22591, 22597, 22601, 22606, 22620, 22621, 22625, 22633, 22637, 22639, 22640, 22641, 22643, 22644, 22646, 22653, 22654, 22655, 22656, 22658, 22669, 22670, 22673, 22674, 22675, 22700, 22701, 22702, 22707, 22712, 22719, 22720, 22721, 22726, 22728, 22729, 22731, 22733, 22734, 22742, 22748, 22750, 22751, 22756, 22769, 22773, 22776, 22777, 22778, 22779, 22790, 22791, 22809, 22810, 22814, 22823, 22840, 22841, 22855, 22860, 22862, 22873, 22878, 22901, 22903, 22938, 22966, 22981, 22986, 22987, 22988, 22989, 22990, 22991, 22992, 22993, 23000, 23002, 23036, 23051, 23057, 23058, 23060, 23102, 23114, 23135, 23136, 23137, 23138, 23139, 23140, 23141, 23142, 23143, 23144, 23146, 23148, 23155, 23165, 23199, 23207, 23211, 23229, 23234, 23237, 23240, 23241, 23243, 23244, 23257, 23258, 23259, 23265, 23268, 23269, 23278, 23289, 23298, 23299, 23300, 23302, 23303, 23304, 23306, 23308, 23310, 23311, 23313, 23315, 23316, 23325, 23328, 23329, 23333, 23343, 23348, 23349, 23355, 23358, 23361, 23363, 23365, 23370, 23371, 23372, 23377, 23379, 23382, 23396, 23403, 23404, 23406, 23407, 23408, 23411, 23413, 23422, 23428, 23431, 23458, 23481, 23482, 23483, 23484, 23485, 23486, 23495, 23501, 23504, 23505, 23506, 23507, 23513, 23514, 23515, 23516, 23517, 23518, 23519, 23520, 23521, 23522, 23523, 23524, 23569, 23570, 23574, 23575, 23579, 23580, 23581, 23646, 23647, 23656, 23657, 23658, 23679, 23680, 23681, 23684, 23693, 23698, 23699, 23700, 23702, 23707, 23708, 23709, 23710, 23711, 23718, 23719, 23720, 23725, 23730, 23732, 23739, 23744, 23745, 23747, 23748, 23751, 23752, 23753, 23754, 23755, 23756, 23767, 23785, 23786, 23787, 23817, 23818, 23821, 23822, 23823, 23829, 23835, 23842, 23848, 23856, 23861, 23868, 23870, 23873, 23879, 23884, 23890, 23895, 23902, 23913, 23914, 23915, 23916, 23917, 23930, 23940, 23941, 23944, 23945, 23946, 23947, 23948, 23950, 23954, 23958, 23959, 23960, 23962, 23964, 23980, 23981, 23985, 23990, 23992, 23993, 23997, 23998, 24001, 24002, 24009, 24013, 24019, 24021, 24071, 24082, 24083, 24103, 24104, 24105, 24106, 24107, 24108, 24109, 24111, 24112, 24113, 24114, 24115, 24116, 24117, 24118, 24119, 24120, 24121, 24122, 24123, 24127, 24137, 24139, 24140, 24141, 24142, 24165, 24166, 24167, 24173, 24174, 24175, 24176, 24177, 24193, 24227, 24240, 24256, 24273, 24274, 24324, 24377, 24378, 24392, 24393, 24453, 24455, 24456, 24457, 24461, 24465, 24466, 24467, 24468, 24470, 24471, 24472, 24477, 24478, 24490, 24493, 24494, 24495, 24497, 24499, 24506, 24555, 24564, 24569, 24579, 24590, 24594, 24608, 24614, 24620, 24622, 24627, 24628, 24629, 24630, 24635, 24637, 24653, 24665, 24684, 24688, 24693, 24698, 24699, 24707, 24710, 24711, 24712, 24714, 24719, 24720, 24721, 24722, 24723, 24724, 24725, 24733, 24734, 24736, 24737, 24741, 24743, 24745, 24751, 24752, 24753, 24757, 24758, 24762, 24780, 24781, 24782, 24784, 24788, 24792, 24795, 24798, 24803, 24807, 24812, 24813, 24825, 24826, 24827, 24828, 24829, 24831, 24832, 24833, 24860, 24861, 24862, 24868, 24869, 24876, 24882, 24889, 24890, 24892, 24895, 24896, 24897, 24898, 24905, 24906, 24907, 24908, 24909, 24910, 24914, 24922, 24923, 24925, 24926, 24927, 24928, 24929, 24931, 24932, 24933, 24934, 24939, 24943, 24944, 24946, 24947, 24948, 24950, 24960, 24961, 24962, 24963, 24964, 24975, 24977, 24978, 24992, 24993, 24994, 24995, 24996, 24997, 24998, 24999, 25000, 25001, 25003, 25004, 25007, 25008, 25009, 25013, 25014, 25015, 25017, 25026, 25030, 25031, 25071, 25081, 25089, 25090, 25091, 25092, 25093, 25101, 25103, 25104, 25106, 25107, 25108, 25109, 25112, 25119, 25120, 25121, 25126, 25127, 25129, 25130, 25136, 25138, 25139, 25144, 25146, 25147, 25148, 25152, 25153, 25154, 25156, 25159, 25163, 25164, 25167, 25170, 25174, 25176, 25177, 25178, 25179, 25194, 25199, 25201, 25202, 25203, 25206, 25209, 25214, 25215, 25221, 25224, 25228, 25238, 25256, 25258, 25265, 25266, 25267, 25268, 25277, 25278, 25279, 25280, 25281, 25282, 25283, 25284, 25285, 25286, 25287, 25288, 25289, 25290, 25292, 25296, 25298, 25301, 25315, 25317, 25318, 25326, 25327, 25328, 25329, 25330, 25331, 25332, 25333, 25334, 25340, 25341, 25347, 25353, 25376, 25378, 25379, 25380, 25381, 25382, 25383, 25384, 25385, 25386, 25387, 25388, 25389, 25390, 25391, 25392, 25394, 25396, 25397, 25398, 25399, 25401, 25402, 25441, 25443, 25445, 25449, 25450, 25451, 25453, 25457, 25460, 25466, 25467, 25499, 25501, 25511, 25526, 25527, 25528, 25537, 25538, 25539, 25540, 25542, 25543, 25549, 25550, 25551, 25552, 25553, 25570, 25571, 25572, 25573, 25574, 25579, 25585, 25587, 25592, 25593, 25625, 25626, 25627, 25628, 25629, 25630, 25638, 25639, 25640, 25654, 25664, 25669, 25672, 25675, 25676, 25678, 25679, 25680, 25682, 25683, 25692, 25703, 25708, 25710, 25720, 25721, 25723, 25724, 25727, 25728, 25730, 25731, 25733, 25742, 25744, 25749, 25753, 25785, 25803, 25809, 25831, 25832, 25833, 25834, 25835, 25836, 25840, 25849, 25852, 25853, 25854, 25855, 25856, 25857, 25858, 25859, 25860, 25861, 25862, 25864, 25866, 25867, 25868, 25869, 25870, 25871, 25872, 25873, 25874, 25889, 25915, 25918, 25925, 25929, 25930, 25931, 25933, 25937, 25938, 25942, 25958, 25982, 25984, 25985, 26002, 26003, 26053, 26055, 26056, 26064, 26076, 26079, 26080, 26081, 26082, 26083, 26084, 26085, 26086, 26087, 26088, 26089, 26102, 26120, 26125, 26128, 26129, 26130, 26131, 26132, 26133, 26134, 26135, 26136, 26137, 26139, 26140, 26141, 26142, 26143, 26144, 26145, 26146, 26147, 26148, 26149, 26150, 26151, 26152, 26153, 26154, 26155, 26156, 26157, 26158, 26159, 26160, 26161, 26162, 26163, 26164, 26165, 26174, 26175, 26176, 26177, 26182, 26183, 26184, 26196, 26198, 26199, 26204, 26205, 26207, 26208, 26211, 26214, 26215, 26216, 26219, 26221, 26223, 26240, 26252, 26255, 26259, 26262, 26263, 26264, 26265, 26266, 26267, 26268, 26269, 26270, 26273, 26274, 26275, 26276, 26277, 26278, 26279, 26280, 26281, 26282, 26283, 26284, 26285, 26286, 26287, 26288, 26289, 26294, 26295, 26296, 26297, 26298, 26302, 26304, 26314, 26315, 26319, 26320, 26324, 26327, 26329, 26332, 26333, 26334, 26340, 26341, 26348, 26359, 26379, 26380, 26381, 26382, 26383, 26384, 26385, 26389, 26393, 26403, 26415, 26416, 26418, 26419, 26420, 26423, 26424, 26425, 26429, 26430, 26433, 26436, 26442, 26466, 26472, 26473, 26474, 26475, 26476, 26477, 26478, 26479, 26483, 26484, 26485, 26486, 26487, 26488, 26489, 26490, 26491, 26494, 26495, 26496, 26499, 26500, 26501, 26502, 26503, 26504, 26505, 26506, 26509, 26510, 26511, 26512, 26513, 26514, 26515, 26517, 26518, 26519, 26521, 26522, 26523, 26524, 26526, 26527, 26528, 26529, 26530, 26531, 26532, 26533, 26534, 26535, 26536, 26537, 26538, 26539, 26540, 26541, 26547, 26556, 26557, 26558, 26559, 26563, 26565, 26566, 26570, 26572, 26573, 26576, 26577, 26578, 26579, 26584, 26585, 26586, 26587, 26588, 26589, 26592, 26594, 26595, 26609, 26610, 26611, 26612, 26615, 26617, 26619, 26620, 26621, 26622, 26624, 26625, 26645, 26647, 26648, 26649, 26650, 26651, 26655, 26661, 26681, 26685, 26687, 26689, 26690, 26692, 26693, 26694, 26698, 26704, 26705, 26706, 26707, 26717, 26718, 26719, 26720, 26721, 26722, 26723, 26724, 26742, 26751, 26753, 26754, 26755, 26756, 26757, 26758, 26759, 26760, 26763, 26764, 26768, 26773, 26774, 26775, 26776, 26787, 26788, 26789, 26790, 26791, 26792, 26793, 26794, 26795, 26796, 26797, 26805, 26816, 26818, 26819, 26822, 26828, 26831, 26833, 26846, 26876, 26881, 26882, 26883, 26884, 26905, 26915, 26916, 26917, 26918, 26919, 26926, 26927, 26928, 26929, 26930, 26931, 26932, 26935, 26936, 26937, 26940, 26941, 26942, 26944, 26946, 26948, 26965, 26968, 26969, 26970, 26973, 26981, 27005, 27006, 27011, 27014, 27028, 27029, 27034, 27035, 27036, 27037, 27038, 27040, 27041, 27064, 27065, 27066, 27072, 27073, 27101, 27103, 27105, 27106, 27107, 27121, 27125, 27137, 27152, 27167, 27196, 27197, 27198, 27199, 27205, 27210, 27211, 27232, 27233, 27234, 27235, 27236, 27237, 27238, 27239, 27240, 27241, 27242, 27243, 27244, 27245, 27246, 27247, 27248, 27265, 27266, 27267, 27268, 27269, 27270, 27271, 27272, 27273, 27275, 27276, 27277, 27278, 27279, 27280, 27281, 27282, 27283, 27301, 27311, 27312, 27316, 27323, 27341, 27346, 27355, 27356, 27357, 27390, 27391, 27392, 27393, 27396, 27399, 27405, 27408, 27426, 27443, 27450, 27451, 27454, 27462, 27469, 27470, 27471, 27472, 27477, 27478, 27479, 27480, 27482, 27483, 27484, 27487, 27488, 27507, 27510, 27514, 27515, 27517, 27520, 27525, 27529, 27535, 27536, 27537, 27538, 27542, 27543, 27561, 27563, 27581, 27617, 27619, 27620, 27624, 27625, 27626, 27627, 27635, 27637, 27640, 27643, 27645, 27648, 27653, 27655, 27658, 27665, 27666, 27667, 27668, 27669, 27670, 27677, 27678, 27679, 27680, 27681, 27682, 27683, 27690, 27692, 27700, 27701, 27703, 27705, 27706, 27707, 27718, 27719, 27720, 27721, 27722, 27726, 27727, 27735, 27743, 27745, 27753, 27754, 27755, 27761, 27767, 27769, 27770, 27781, 27783, 27784, 27785, 27786, 27787, 27789, 27790, 27796, 27797, 27798, 27802, 27803, 27804, 27806, 27810, 27811, 27812, 27815, 27823, 27849, 27855, 27861, 27879, 27880, 27881, 27882, 27883, 27885, 27896, 27907, 27913, 27932, 27943, 27950, 27951, 27964, 27966, 27967, 27968, 27969, 27972, 27973, 27974, 27975, 27976, 27977, 27981, 27982, 27985, 27986, 27987, 27989, 27991, 27992, 27993, 28002, 28003, 28004, 28007, 28010, 28011, 28012, 28014, 28015, 28016, 28040, 28041, 28042, 28043, 28044, 28045, 28046, 28047, 28048, 28049, 28051, 28052, 28053, 28060, 28061, 28063, 28064, 28065, 28067, 28073, 28074, 28075, 28076, 28077, 28080, 28081, 28082, 28083, 28084, 28089, 28103, 28106, 28107, 28110, 28112, 28113, 28114, 28115, 28116, 28117, 28133, 28134, 28141, 28209, 28210, 28211, 28212, 28214, 28215, 28235, 28282, 28283, 28284, 28286, 28287, 28288, 28289, 28290, 28291, 28292, 28293, 28294, 28295, 28296, 28297, 28298, 28299, 28310, 28318, 28319, 28354, 28355, 28359, 28360, 28361, 28375, 28376, 28379, 28381, 28397, 28401, 28402, 28417, 28418, 28419, 28434, 28435, 28442, 28449, 28450, 28457, 28460, 28463, 28465, 28467, 28468, 28469, 28470, 28471, 28475, 28476, 28482, 28489, 28493, 28499, 28501, 28502, 28505, 28506, 28507, 28508, 28509, 28524, 28525, 28526, 28531, 28539, 28547, 28548, 28550, 28551, 28556, 28571, 28572, 28573, 28574, 28575, 28577, 28578, 28579, 28583, 28585, 28598, 28599, 28605, 28607, 28611, 28619, 28620, 28623, 28624, 28625, 28634, 28646, 28647, 28648, 28649, 28650, 28652, 28656, 28657, 28658, 28665, 28666, 28667, 28675, 28681, 28682, 28683, 28684, 28685, 28686, 28687, 28718, 28719, 28725, 28726, 28727, 28728, 28729, 28731, 28732, 28734, 28737, 28738, 28741, 28758, 28763, 28764, 28782, 28783, 28784, 28785, 28810, 28811, 28813, 28814, 28815, 28816, 28817, 28819, 28820, 28827, 28828, 28829, 28830, 28831, 28833, 28841, 28844, 28845, 28846, 28847, 28866, 28867, 28868, 28869, 28870, 28871, 28872, 28874, 28875, 28876, 28880, 28883, 28887, 28888, 28889, 28890, 28911, 28912, 28916, 28917, 28918, 28919, 28931, 28938, 28943, 28945, 28951, 28953, 28954, 28978, 28979, 28980, 28982, 28983, 28988, 28989, 28991, 28992, 28998, 28999, 29000, 29001, 29002, 29004, 29024, 29038, 29040, 29041, 29042, 29043, 29056, 29057, 29058, 29060, 29062, 29064, 29065, 29066, 29070, 29071, 29073, 29074, 29075, 29080, 29081, 29082, 29094, 29096, 29100, 29104, 29113, 29115, 29118, 29120, 29122, 29123, 29129, 29130, 29133, 29150, 29151, 29152, 29153, 29155, 29156, 29157, 29158, 29159, 29160, 29164, 29168, 29169, 29170, 29171, 29174, 29175, 29176, 29183, 29205, 29251, 29257, 29259, 29260, 29262, 29270, 29274, 29275, 29276, 29279, 29280, 29281, 29283, 29284, 29286, 29308, 29309, 29331, 29348, 29352, 29362, 29363, 29372, 29409, 29412, 29419, 29421, 29424, 29438, 29440, 29441, 29485, 29486, 29488, 29489, 29525, 29540, 29552, 29605, 29627, 29628, 29629, 29642, 29695, 29696, 29734, 29736, 29740, 29742, 29743, 29744, 29754, 29756, 29764, 29766, 29771, 29780, 29781, 29794, 29802, 29803, 29805, 29806, 29807, 29808, 29809, 29810, 29815, 29816, 29819, 29828, 29878, 29879, 29880, 29886, 29890, 29937, 29938, 29971, 29972, 29974, 29975, 29976, 30039, 30045, 30046, 30047, 30059, 30060, 30070, 30076, 30080, 30157, 30166, 30171, 30172, 30173, 30233, 30243, 30297, 30318, 30343, 30346, 30347, 30352, 30356, 30402, 30404, 30405, 30409, 30412, 30413, 30415, 30462, 30483, 30491, 30503, 30516, 30518, 30520, 30547, 30615, 30641, 30643, 30644, 30645, 30646, 30647, 30648, 30649, 30650, 30651, 30653, 30654, 30656, 30695, 30707, 30736, 30753, 30754, 30755, 30756, 30757, 30758, 30759, 30760, 30761, 30762, 30763, 30792, 30799, 30803, 30805, 30808, 30822, 30844, 30846, 30852, 30874, 30877, 30885, 30886, 30890, 30902, 30903, 30906, 30966, 30968, 30986, 30989, 30995, 30996, 30998, 31004, 31007, 31043, 31044, 31047, 31048, 31049, 31073, 31088, 31092, 31094, 31096, 31107, 31119, 31126, 31154, 31156, 31163, 31164, 31174, 31196, 31248, 31373, 31471, 31515, 31553, 31583, 31627, 31664, 31670, 31687, 31692, 31720, 31721, 31722, 31723, 31725, 31727, 31756, 31803, 31831, 31836, 31837, 31853, 31878, 31952, 31956, 31957, 31958, 31992, 32031, 32106, 32670, 32754); From ddada2d18209cd076c19fcce86adc3239692105c Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Fri, 18 Oct 2013 12:24:08 +0200 Subject: [PATCH 16/56] Scripted/ScarletMonastery: Fix crash for headless horseman --- .../ScarletMonastery/boss_headless_horseman.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index fb2d8374c18..1b5d0a80eda 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -580,7 +580,11 @@ public: Map::PlayerList const& players = me->GetMap()->GetPlayers(); if (!players.isEmpty()) - sLFGMgr->FinishDungeon(players.begin()->GetSource()->GetGroup()->GetGUID(), 285); + { + if (Group* group = players.begin()->GetSource()->GetGroup()) + if (group->isLFGGroup()) + sLFGMgr->FinishDungeon(group->GetGUID(), 285); + } } void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE From 94161a8341a2e0674a265eebf7935e4153fe0d2e Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Fri, 18 Oct 2013 12:35:11 +0200 Subject: [PATCH 17/56] Core/Creature: Added log/change back to default speed for speed walk / run = 0 (Speed is never zero) --- src/server/game/Globals/ObjectMgr.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 2f309c07cce..86e6963b1de 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -804,6 +804,18 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) if ((cInfo->npcflag & UNIT_NPC_FLAG_TRAINER) && cInfo->trainer_type >= MAX_TRAINER_TYPE) TC_LOG_ERROR(LOG_FILTER_SQL, "Creature (Entry: %u) has wrong trainer type %u.", cInfo->Entry, cInfo->trainer_type); + if (cInfo->speed_walk == 0.0f) + { + TC_LOG_ERROR(LOG_FILTER_SQL, "Creature (Entry: %u) has wrong value (%f) in speed_walk, set to 1.", cInfo->Entry, cInfo->speed_walk); + const_cast(cInfo)->speed_walk = 1.0f; + } + + if (cInfo->speed_run == 0.0f) + { + TC_LOG_ERROR(LOG_FILTER_SQL, "Creature (Entry: %u) has wrong value (%f) in speed_run, set to 1.14286.", cInfo->Entry, cInfo->speed_run); + const_cast(cInfo)->speed_run = 1.14286f; + } + if (cInfo->type && !sCreatureTypeStore.LookupEntry(cInfo->type)) { TC_LOG_ERROR(LOG_FILTER_SQL, "Creature (Entry: %u) has invalid creature type (%u) in `type`.", cInfo->Entry, cInfo->type); From 47741f4fa647431d4bd045115c0a2452154384e1 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Fri, 18 Oct 2013 12:36:54 +0200 Subject: [PATCH 18/56] Core/Object: Added more information for MovePosition log --- src/server/game/Entities/Object/Object.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 2eb0fd65149..1471e966045 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2673,7 +2673,8 @@ void WorldObject::MovePosition(Position &pos, float dist, float angle) // Prevent invalid coordinates here, position is unchanged if (!Trinity::IsValidMapCoord(destx, desty, pos.m_positionZ)) { - TC_LOG_FATAL(LOG_FILTER_GENERAL, "WorldObject::MovePosition invalid coordinates X: %f and Y: %f were passed!", destx, desty); + TC_LOG_FATAL(LOG_FILTER_GENERAL, "WorldObject::MovePosition: Object (TypeId: %u Entry: %u GUID: %u) has invalid coordinates X: %f and Y: %f were passed!", + GetTypeId(), GetEntry(), GetGUIDLow(), destx, desty); return; } From 77013aa08128f84d7f08ba05151136cf9d050a98 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Fri, 18 Oct 2013 13:31:09 +0200 Subject: [PATCH 19/56] Core: Fix warnings --- src/server/game/Grids/ObjectGridLoader.cpp | 2 +- src/server/game/Maps/Map.cpp | 2 +- src/server/game/Maps/TransportMgr.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index d124cd57276..05dff6823be 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -94,7 +94,7 @@ template<> void ObjectGridLoader::SetObjectCell(GameObject* obj, CellCoord const } template -void AddObjectHelper(CellCoord &cell, GridRefManager &m, uint32 &count, Map* map, T *obj) +void AddObjectHelper(CellCoord &cell, GridRefManager &m, uint32 &count, Map* /*map*/, T *obj) { obj->AddToGrid(m); ObjectGridLoader::SetObjectCell(obj, cell); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 2f4194b3f5f..fab1b05cd59 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2548,7 +2548,7 @@ void Map::AddToActive(DynamicObject* d) } template -void Map::RemoveFromActive(T* obj) +void Map::RemoveFromActive(T* /*obj*/) { } diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index b5469049cca..bd79cd793d5 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -361,7 +361,7 @@ Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map* if (MapEntry const* mapEntry = sMapStore.LookupEntry(mapId)) { - if (uint32(mapEntry->Instanceable()) != tInfo->inInstance) + if (mapEntry->Instanceable() != tInfo->inInstance) { TC_LOG_ERROR(LOG_FILTER_TRANSPORTS, "Transport %u (name: %s) attempted creation in instance map (id: %u) but it is not an instanced transport!", entry, trans->GetName().c_str(), mapId); delete trans; From 38b682d7a81e5273d5ab2f139bc8ed403462657d Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 18 Oct 2013 20:12:36 +0200 Subject: [PATCH 20/56] Core/Maps: Added gameobject case for AddObjectToSwitchList and fixed logic in RemoveAllObjectsInRemoveList --- src/server/game/Maps/Map.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index fab1b05cd59..179a4cba878 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2396,7 +2396,7 @@ void Map::AddObjectToSwitchList(WorldObject* obj, bool on) ASSERT(obj->GetMapId() == GetId() && obj->GetInstanceId() == GetInstanceId()); // i_objectsToSwitch is iterated only in Map::RemoveAllObjectsInRemoveList() and it uses // the contained objects only if GetTypeId() == TYPEID_UNIT , so we can return in all other cases - if (obj->GetTypeId() != TYPEID_UNIT) + if (obj->GetTypeId() != TYPEID_UNIT && obj->GetTypeId() != TYPEID_GAMEOBJECT) return; std::map::iterator itr = i_objectsToSwitch.find(obj); @@ -2417,7 +2417,7 @@ void Map::RemoveAllObjectsInRemoveList() bool on = itr->second; i_objectsToSwitch.erase(itr); - if (obj->GetTypeId() == TYPEID_UNIT || obj->GetTypeId() == TYPEID_GAMEOBJECT && !obj->IsPermanentWorldObject()) + if ((obj->GetTypeId() == TYPEID_UNIT || obj->GetTypeId() == TYPEID_GAMEOBJECT) && !obj->IsPermanentWorldObject()) SwitchGridContainers(obj, on); } From e21eef5c4a3f6aadf2b2e92a4fc21d775b10705c Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 18 Oct 2013 20:16:27 +0200 Subject: [PATCH 21/56] Core/Transports: Added missing include --- src/server/game/Entities/Transport/Transport.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 29dc8fdcfad..f9a0a7bb5e7 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -29,6 +29,7 @@ #include "Vehicle.h" #include "MapReference.h" #include "Player.h" +#include "Cell.h" Transport::Transport() : GameObject(), _transportInfo(NULL), _isMoving(true), _pendingStop(false) From 5259539a5f950ab3937ccd920fba304545f5aebe Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 18 Oct 2013 21:17:58 +0200 Subject: [PATCH 22/56] Core/Transports: Fixed crashes when instance with transports unloads Closes #11056 --- .../game/Battlegrounds/Zones/BattlegroundIC.cpp | 13 +++++++++++-- src/server/game/Entities/Transport/Transport.cpp | 1 + src/server/game/Entities/Transport/Transport.h | 2 ++ src/server/game/Maps/Map.cpp | 11 +++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index 7cb4c07ba1e..82d7de0d9bf 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -58,8 +58,17 @@ BattlegroundIC::BattlegroundIC() BattlegroundIC::~BattlegroundIC() { - delete gunshipHorde; - delete gunshipAlliance; + if (gunshipHorde) + { + gunshipHorde->RemoveFromWorld(); + delete gunshipHorde; + } + + if (gunshipAlliance) + { + gunshipAlliance->RemoveFromWorld(); + delete gunshipAlliance; + } } void BattlegroundIC::HandlePlayerResurrect(Player* player) diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index f9a0a7bb5e7..59359e59fdc 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -39,6 +39,7 @@ Transport::Transport() : GameObject(), Transport::~Transport() { + UnloadStaticPassengers(); } bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress) diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h index 22a54e8428d..0d020fe2c34 100644 --- a/src/server/game/Entities/Transport/Transport.h +++ b/src/server/game/Entities/Transport/Transport.h @@ -67,6 +67,8 @@ class Transport : public GameObject, public TransportBase void EnableMovement(bool enabled); + TransportTemplate const* GetTransportTemplate() const { return _transportInfo; } + private: void MoveToNextWaypoint(); float CalculateSegmentPos(float perc); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 179a4cba878..9abb78187a9 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -63,6 +63,17 @@ Map::~Map() obj->ResetMap(); } + for (TransportsContainer::iterator itr = _transports.begin(); itr != _transports.end(); ++itr) + { + Transport* transport = *itr; + // Destroy local transports + if (transport->GetTransportTemplate()->inInstance) + { + transport->RemoveFromWorld(); + delete transport; + } + } + if (!m_scriptSchedule.empty()) sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size()); From 59caeb8b499840ed6ab3c698fa886e6e672f4658 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sat, 19 Oct 2013 03:23:53 +0200 Subject: [PATCH 23/56] DB/Gossip: Added some missing gossips (Source: 5.4.0 sniffs) --- sql/updates/world/2013_10_19_00_world_gossip.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 sql/updates/world/2013_10_19_00_world_gossip.sql diff --git a/sql/updates/world/2013_10_19_00_world_gossip.sql b/sql/updates/world/2013_10_19_00_world_gossip.sql new file mode 100644 index 00000000000..00559b3b9bb --- /dev/null +++ b/sql/updates/world/2013_10_19_00_world_gossip.sql @@ -0,0 +1,14 @@ +DELETE FROM `gossip_menu` WHERE (`entry`=9578 AND `text_id`=12926) OR (`entry`=4825 AND `text_id`=5881) OR (`entry`=8891 AND `text_id`=11645); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(9578, 12926), -- 27705 +(4825, 5881), -- 5957 +(8891, 11645); -- 186267 + +DELETE FROM `gossip_menu_option` WHERE (`menu_id`=9578 AND `id`=0) OR (`menu_id`=4825 AND `id`=0) OR (`menu_id`=8891 AND `id`=0); +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `box_coded`, `box_money`, `box_text`) VALUES +(9578, 0, 3, 'Please teach me.', 0, 0, ''), -- 27705 +(4825, 0, 3, 'Please teach me.', 0, 0, ''), -- 5957 +(8891, 0, 0, 'Call the Headless Horseman.', 0, 0, ''); -- 186267 + +UPDATE `creature_template` SET `gossip_menu_id`=9578 WHERE `entry`=27705; +UPDATE `creature_template` SET `gossip_menu_id`=4825 WHERE `entry`=5957; From 5915a220a51ccc118273fb5eccbe73e022530ab7 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sat, 19 Oct 2013 03:39:58 +0200 Subject: [PATCH 24/56] Misc: Removed some whitespace --- src/server/game/Accounts/AccountMgr.cpp | 2 +- src/server/game/Accounts/RBAC.cpp | 4 ++-- src/server/game/Entities/Transport/Transport.cpp | 1 + src/server/game/Guilds/Guild.cpp | 2 +- src/server/game/Miscellaneous/Language.h | 2 +- src/server/scripts/Northrend/zone_zuldrak.cpp | 4 ++-- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp index 6d79c6c77a1..1cff80ba10d 100644 --- a/src/server/game/Accounts/AccountMgr.cpp +++ b/src/server/game/Accounts/AccountMgr.cpp @@ -466,7 +466,7 @@ void AccountMgr::LoadRBAC() secId = newId; permissions = &_defaultPermissions[secId]; } - + permissions->insert(field[1].GetUInt32()); ++count3; } diff --git a/src/server/game/Accounts/RBAC.cpp b/src/server/game/Accounts/RBAC.cpp index 8cd70721976..f7c9444cdb0 100644 --- a/src/server/game/Accounts/RBAC.cpp +++ b/src/server/game/Accounts/RBAC.cpp @@ -231,13 +231,13 @@ void RBACData::ExpandPermissions(RBACPermissionContainer& permissions) { RBACPermissionContainer toCheck = permissions; permissions.clear(); - + while (!toCheck.empty()) { // remove the permission from original list uint32 permissionId = *toCheck.begin(); toCheck.erase(toCheck.begin()); - + RBACPermission const* permission = sAccountMgr->GetRBACPermission(permissionId); if (!permission) continue; diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 59359e59fdc..06af4244246 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -30,6 +30,7 @@ #include "MapReference.h" #include "Player.h" #include "Cell.h" +#include "CellImpl.h" Transport::Transport() : GameObject(), _transportInfo(NULL), _isMoving(true), _pendingStop(false) diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 031febc3806..1a3e48c8217 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -1764,7 +1764,7 @@ bool Guild::HandleMemberWithdrawMoney(WorldSession* session, uint32 amount, bool { //clamp amount to MAX_MONEY_AMOUNT, Players can't hold more than that anyway amount = std::min(amount, uint32(MAX_MONEY_AMOUNT)); - + if (m_bankMoney < amount) // Not enough money in bank return false; diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index c50db983845..327d7ed69fd 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -104,7 +104,7 @@ enum TrinityStrings LANG_RBAC_PERM_REVOKED = 78, LANG_RBAC_PERM_REVOKED_NOT_IN_LIST = 79, // Free 80 - 95 - + LANG_GUILD_RENAME_ALREADY_EXISTS = 96, LANG_GUILD_RENAME_DONE = 97, diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 532ede3f849..3a2d5c592fe 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -1815,7 +1815,7 @@ class spell_fetch_ingredient_aura : public SpellScriptLoader } }; -enum StormCloud +enum StormCloud { STORM_COULD = 29939, HEALING_WINDS = 55549, @@ -1842,7 +1842,7 @@ public: { Reset(); } - + void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE { if (spell->Id != GYMERS_GRAB) From 8ff52bf05d7bbbda430013be813e1f5e72ab645d Mon Sep 17 00:00:00 2001 From: Kinzcool Date: Fri, 18 Oct 2013 22:39:34 -0400 Subject: [PATCH 25/56] DB/Gameobjects: Added few missing gameobjects templates from 5.4.0 sniffs. --- .../world/2013_10_19_01_world_gameobject_template.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2013_10_19_01_world_gameobject_template.sql diff --git a/sql/updates/world/2013_10_19_01_world_gameobject_template.sql b/sql/updates/world/2013_10_19_01_world_gameobject_template.sql new file mode 100644 index 00000000000..bb0f518701b --- /dev/null +++ b/sql/updates/world/2013_10_19_01_world_gameobject_template.sql @@ -0,0 +1,6 @@ +DELETE FROM `gameobject_template` WHERE `entry` IN (180609, 180610, 180611, 184633); +INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `IconName`, `castBarCaption`, `unk1`, `data0`, `data1`, `data2`, `data3`, `data4`, `data5`, `data6`, `data7`, `data8`, `data9`, `data10`, `data11`, `data12`, `data13`, `data14`, `data15`, `data16`, `data17`, `data18`, `data19`, `data20`, `data21`, `data22`, `data23`, `size`, `WDBVerified`) VALUES +(180609, 7, 39, 'Doodad_GeneralChairLoEnd02', '', '', '', 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17359), -- -Unknown- +(180610, 7, 39, 'Doodad_GeneralChairLoEnd04', '', '', '', 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17359), -- -Unknown- +(180611, 7, 39, 'Doodad_GeneralChairLoEnd05', '', '', '', 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17359), -- -Unknown- +(184633, 8, 233, 'Forge', '', '', '', 3, 10, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17359); -- -Unknown- From 23fa9ec018ff81962cc2bdf8823adf9839b68cb8 Mon Sep 17 00:00:00 2001 From: Elron103 Date: Sun, 20 Oct 2013 04:08:11 +0200 Subject: [PATCH 26/56] DB/Conditions: Fix conditions for class trainer npcs, so gossip menus will show up correctly for every class --- .../world/2013_10_20_00_world_conditions.sql | 184 ++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 sql/updates/world/2013_10_20_00_world_conditions.sql diff --git a/sql/updates/world/2013_10_20_00_world_conditions.sql b/sql/updates/world/2013_10_20_00_world_conditions.sql new file mode 100644 index 00000000000..9d25ecd5064 --- /dev/null +++ b/sql/updates/world/2013_10_20_00_world_conditions.sql @@ -0,0 +1,184 @@ +-- DB/Conditions: Fix conditions for class trainer npcs, so gossip menus will show up correctly for every class +SET @ALLCLASMASK := 1535; +SET @CLASSMASK_PAL := 2; +SET @CLASSMASK_DK := 32; +SET @CLASSMASK_SHA := 64; + +SET @MENU := 4104; +SET @MENU1 := 4528; +SET @MENU2 := 4530; +SET @MENU3 := 4529; +SET @MENU4 := 4103; +SET @MENU5 := 4652; +SET @MENU6 := 4516; +SET @MENU7 := 5123; +SET @TEXTIDOK := 5005; +SET @TEXTIDERR := 5006; + +SET @MENU8 := 4515; +SET @TEXTIDOK8 := 5007; +SET @TEXTIDERR8 := 5008; + +SET @MENU9 := 6647; +SET @TEXTIDOK9 := 7904; +SET @TEXTIDERR9 := 9193; + +SET @MENU10 := 7522; +SET @TEXTIDOK10 := 9122; +SET @TEXTIDERR10 := 8785; + +SET @MENU11 := 7377; +SET @TEXTIDOK11 := 8829; +SET @TEXTIDERR11 := 8828; + +SET @MENU12 := 7467; +SET @TEXTIDOK12 := 9050; + +SET @MENU13 := 7357; +SET @TEXTIDOK13 := 8786; + +SET @MENU14 := 8110; +SET @TEXTIDOK14 := 10043; +SET @TEXTIDERR14 := 10040; + +SET @MENU15 := 9691; +SET @MENU16 := 9692; +SET @MENU17 := 9693; + +SET @TRAINEROPT := 0; +SET @TALENTOPT := 1; +SET @DUALOPT := 2; + +SET @TRAINEROPT11 := 0; +SET @TALENTOPT11 := 2; +SET @DUALOPT11 := 3; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 14 AND +( + (`SourceEntry` IN (@TEXTIDOK, @TEXTIDERR) AND `SourceGroup` IN (@MENU, @MENU1, @MENU2, @MENU3, @MENU4, @MENU5, @MENU6, @MENU7)) + OR (`SourceEntry` IN (@TEXTIDOK8, @TEXTIDERR8) AND `SourceGroup` = @MENU8) + OR (`SourceEntry` IN (@TEXTIDOK9, @TEXTIDERR9) AND `SourceGroup` = @MENU9) + OR (`SourceEntry` IN (@TEXTIDOK10, @TEXTIDERR10) AND `SourceGroup` = @MENU10) + OR (`SourceEntry` IN (@TEXTIDOK11, @TEXTIDERR11) AND `SourceGroup` = @MENU11) + OR (`SourceEntry` IN (@TEXTIDOK12, @TEXTIDERR10) AND `SourceGroup` = @MENU12) + OR (`SourceEntry` IN (@TEXTIDOK13, @TEXTIDERR10) AND `SourceGroup` = @MENU13) + OR (`SourceEntry` IN (@TEXTIDOK14, @TEXTIDERR14) AND `SourceGroup` = @MENU14) +); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceEntry` IN (@TRAINEROPT, @TALENTOPT, @DUALOPT) AND `SourceGroup` IN (@MENU, @MENU1, @MENU2, @MENU3, @MENU4, @MENU5, @MENU6, @MENU7, @MENU8, @MENU9, @MENU10, @MENU12, @MENU13, @MENU14, @MENU15, @MENU16, @MENU17); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceEntry` IN (@TRAINEROPT11, @TALENTOPT11, @DUALOPT11) AND `SourceGroup` = @MENU11; +INSERT INTO `conditions` (SourceTypeOrReferenceId, SourceGroup, SourceEntry, SourceId, ElseGroup, ConditionTypeOrReference, ConditionTarget, ConditionValue1, ConditionValue2, ConditionValue3, NegativeCondition, ErrorType, ErrorTextId, ScriptName, Comment) VALUES +-- NPC ID: 986, Name: Haromm, Menu-ID: 4104, Trainer-Classmask: 64, Text-ID1: 5005, Text-ID2: 5006, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 3173, Name: Swart, Menu-ID: 4104, Trainer-Classmask: 64, Text-ID1: 5005, Text-ID2: 5006, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU, @TEXTIDOK, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU, @TEXTIDERR, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 3030, Name: Siln Skychaser, Menu-ID: 4528, Trainer-Classmask: 64, Text-ID1: 5005, Text-ID2: 5006, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU1, @TEXTIDOK, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU1, @TEXTIDERR, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU1, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU1, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU1, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 3031, Name: Tigor Skychaser, Menu-ID: 4530, Trainer-Classmask: 64, Text-ID1: 5005, Text-ID2: 5006, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU2, @TEXTIDOK, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU2, @TEXTIDERR, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU2, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU2, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU2, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 3032, Name: Beram Skychaser, Menu-ID: 4529, Trainer-Classmask: 64, Text-ID1: 5005, Text-ID2: 5006, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU3, @TEXTIDOK, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU3, @TEXTIDERR, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU3, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU3, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU3, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 3062, Name: Meela Dawnstrider, Menu-ID: 4103, Trainer-Classmask: 64, Text-ID1: 5005, Text-ID2: 5006, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 3066, Name: Narm Skychaser, Menu-ID: 4103, Trainer-Classmask: 64, Text-ID1: 5005, Text-ID2: 5006, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU4, @TEXTIDOK, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU4, @TEXTIDERR, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU4, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU4, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU4, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 3157, Name: Shikrik, Menu-ID: 4652, Trainer-Classmask: 64, Text-ID1: 5005, Text-ID2: 5006, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU5, @TEXTIDOK, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU5, @TEXTIDERR, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU5, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU5, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU5, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 3344, Name: Kardris Dreamseeker, Menu-ID: 4516, Trainer-Classmask: 64, Text-ID1: 5005, Text-ID2: 5006, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU6, @TEXTIDOK, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU6, @TEXTIDERR, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU6, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU6, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU6, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 13417, Name: Sagorne Creststrider, Menu-ID: 5123, Trainer-Classmask: 64, Text-ID1: 5005, Text-ID2: 5006, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU7, @TEXTIDOK, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU7, @TEXTIDERR, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU7, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU7, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU7, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 3403, Name: Sian'tsu, Menu-ID: 4515, Trainer-Classmask: 64, Text-ID1: 5007, Text-ID2: 5008, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU8, @TEXTIDOK8, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU8, @TEXTIDERR8, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU8, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU8, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU8, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 15280, Name: Jesthenis Sunstriker, Menu-ID: 6647, Trainer-Classmask: 2, Text-ID1: 7904, Text-ID2: 9193, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 16275, Name: Noellene, Menu-ID: 6647, Trainer-Classmask: 2, Text-ID1: 7904, Text-ID2: 9193, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 16679, Name: Osselan, Menu-ID: 6647, Trainer-Classmask: 2, Text-ID1: 7904, Text-ID2: 9193, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 16680, Name: Ithelis, Menu-ID: 6647, Trainer-Classmask: 2, Text-ID1: 7904, Text-ID2: 9193, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 16681, Name: Champion Bachi, Menu-ID: 6647, Trainer-Classmask: 2, Text-ID1: 7904, Text-ID2: 9193, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 23128, Name: Master Pyreanor, Menu-ID: 6647, Trainer-Classmask: 2, Text-ID1: 7904, Text-ID2: 9193, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU9, @TEXTIDOK9, 0, 0, 15, 0, @CLASSMASK_PAL, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Paladin'), +(14, @MENU9, @TEXTIDERR9, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_PAL), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Paladin'), +(15, @MENU9, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_PAL, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Paladin'), +(15, @MENU9, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_PAL, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Paladin'), +(15, @MENU9, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_PAL, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Paladin'), +-- NPC ID: 17089, Name: Firmanvaar, Menu-ID: 7522, Trainer-Classmask: 64, Text-ID1: 8785, Text-ID2: 9122, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU10, @TEXTIDOK10, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU10, @TEXTIDERR10, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU10, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU10, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU10, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 17204, Name: Farseer Nobundo, Menu-ID: 7377, Trainer-Classmask: 64, Text-ID1: 8828, Text-ID2: 8829, Trainer-Option: 0, Talent-Option: 2, Dualspec-Option: 3 +(14, @MENU11, @TEXTIDOK11, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU11, @TEXTIDERR11, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU11, @TRAINEROPT11, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU11, @TALENTOPT11, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU11, @DUALOPT11, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 17212, Name: Tuluun, Menu-ID: 7467, Trainer-Classmask: 64, Text-ID1: 8785, Text-ID2: 9050, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU12, @TEXTIDOK12, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU12, @TEXTIDERR10, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU12, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU12, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU12, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 17219, Name: Sulaa, Menu-ID: 7357, Trainer-Classmask: 64, Text-ID1: 8785, Text-ID2: 8786, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 23127, Name: Farseer Javad, Menu-ID: 7357, Trainer-Classmask: 64, Text-ID1: 8785, Text-ID2: 8786, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 17519, Name: Hobahken, Menu-ID: 7357, Trainer-Classmask: 64, Text-ID1: 8785, Text-ID2: 8786, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 17520, Name: Gurrag, Menu-ID: 7357, Trainer-Classmask: 64, Text-ID1: 8785, Text-ID2: 8786, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU13, @TEXTIDOK13, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU13, @TEXTIDERR10, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU13, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU13, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU13, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 20407, Name: Farseer Umbrua, Menu-ID: 8110, Trainer-Classmask: 64, Text-ID1: 10040, Text-ID2: 10043, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(14, @MENU14, @TEXTIDOK14, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Shaman'), +(14, @MENU14, @TEXTIDERR14, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_SHA), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Shaman'), +(15, @MENU14, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU14, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +(15, @MENU14, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_SHA, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Shaman'), +-- NPC ID: 29195, Name: Lady Alistra, Menu-ID: 9691, Trainer-Classmask: 32, Text-ID1: 13172, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 28471, Name: Lady Alistra, Menu-ID: 9691, Trainer-Classmask: 32, Text-ID1: 13172, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(15, @MENU15, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'), +(15, @MENU15, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'), +(15, @MENU15, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'), +-- NPC ID: 29196, Name: Lord Thorval, Menu-ID: 9692, Trainer-Classmask: 32, Text-ID1: 13173, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 28472, Name: Lord Thorval, Menu-ID: 9692, Trainer-Classmask: 32, Text-ID1: 13173, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(15, @MENU16, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'), +(15, @MENU16, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'), +(15, @MENU16, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'), +-- NPC ID: 29194, Name: Amal'thazad, Menu-ID: 9693, Trainer-Classmask: 32, Text-ID1: 13174, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +-- NPC ID: 28474, Name: Amal'thazad, Menu-ID: 9693, Trainer-Classmask: 32, Text-ID1: 13174, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 +(15, @MENU17, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'), +(15, @MENU17, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'), +(15, @MENU17, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'); \ No newline at end of file From 7223adb0a0801ff46112ffd50826ee2fbef7cf69 Mon Sep 17 00:00:00 2001 From: gerripeach Date: Sun, 20 Oct 2013 06:17:11 +0200 Subject: [PATCH 27/56] Core/Pet: Allow all pets to swim closes: #9331 --- src/server/game/Entities/Creature/Creature.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index a555469da63..4f43305c54f 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -447,7 +447,7 @@ class Creature : public Unit, public GridObject, public MapObject bool IsTrigger() const { return GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER; } bool IsGuard() const { return GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GUARD; } bool CanWalk() const { return GetCreatureTemplate()->InhabitType & INHABIT_GROUND; } - bool CanSwim() const { return GetCreatureTemplate()->InhabitType & INHABIT_WATER; } + bool CanSwim() const { return GetCreatureTemplate()->InhabitType & INHABIT_WATER || IsPet(); } bool CanFly() const { return GetCreatureTemplate()->InhabitType & INHABIT_AIR; } void SetReactState(ReactStates st) { m_reactState = st; } From 93dbf2051396c67e3ac2615cf17d63b65c4410f0 Mon Sep 17 00:00:00 2001 From: gerripeach Date: Sun, 20 Oct 2013 06:26:29 +0200 Subject: [PATCH 28/56] Core/Group: Fix crash in "Group::GetMembersCount" closes: #9350 --- src/server/scripts/Kalimdor/zone_silithus.cpp | 2 +- src/server/scripts/Outland/zone_shadowmoon_valley.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp index fd8a1069ff7..79bd6f691e6 100644 --- a/src/server/scripts/Kalimdor/zone_silithus.cpp +++ b/src/server/scripts/Kalimdor/zone_silithus.cpp @@ -1014,7 +1014,7 @@ public: uint8 DeadMemberCount = 0; uint8 FailedMemberCount = 0; - Group::MemberSlotList const members = EventGroup->GetMemberSlots(); + Group::MemberSlotList const& members = EventGroup->GetMemberSlots(); for (Group::member_citerator itr = members.begin(); itr!= members.end(); ++itr) { diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index eac3dce43b0..24fbcf881b2 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -1467,7 +1467,7 @@ public: uint8 DeadMemberCount = 0; uint8 FailedMemberCount = 0; - const Group::MemberSlotList members = EventGroup->GetMemberSlots(); + Group::MemberSlotList const& members = EventGroup->GetMemberSlots(); for (Group::member_citerator itr = members.begin(); itr!= members.end(); ++itr) { From c1712c0b1493a7cf7b2d3570f2573e7a59606f7d Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sun, 20 Oct 2013 10:52:36 +0200 Subject: [PATCH 29/56] DB/Misc: Ormorok the Tree Shaper Spell Reflect Closes #10789 --- sql/updates/world/2013_10_20_00_world_spell_proc_event.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2013_10_20_00_world_spell_proc_event.sql diff --git a/sql/updates/world/2013_10_20_00_world_spell_proc_event.sql b/sql/updates/world/2013_10_20_00_world_spell_proc_event.sql new file mode 100644 index 00000000000..90bf4619de4 --- /dev/null +++ b/sql/updates/world/2013_10_20_00_world_spell_proc_event.sql @@ -0,0 +1,3 @@ +-- Fixes Ormorok the Tree Shaper Spell Reflect +DELETE FROM `spell_proc_event` WHERE (`entry` = '47981'); +INSERT INTO `spell_proc_event` (`entry`,`procEx`) VALUES ('47981','2048'); From cb89a42946e765d0b39a57536fe4eff083189faa Mon Sep 17 00:00:00 2001 From: gerripeach Date: Sun, 20 Oct 2013 12:30:22 +0200 Subject: [PATCH 30/56] Core/Spell: Earthbind totem should not have DR (Diminishing Returns) closes: #7037 --- src/server/game/Spells/SpellMgr.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index ff89cc61f6f..52ffb2ff525 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -191,6 +191,13 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, return DIMINISHING_FEAR; break; } + case SPELLFAMILY_SHAMAN: + { + // Storm, Earth and Fire - Earthgrab + if (spellproto->SpellFamilyFlags[2] & 0x4000) + return DIMINISHING_NONE; + break; + } case SPELLFAMILY_DEATHKNIGHT: { // Hungering Cold (no flags) From f8b1b264d11623eccfe5b125d1d3445f2b4aae1d Mon Sep 17 00:00:00 2001 From: gerripeach Date: Sun, 20 Oct 2013 12:47:54 +0200 Subject: [PATCH 31/56] Core/Spells: Fixed diminishing returns on creatures with CREATURE_FLAG_EXTRA_ALL_DIMINISH Closes #11073 --- src/server/game/Spells/Spell.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 2eee80924a4..aa629b46e28 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2680,7 +2680,9 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA m_diminishLevel = unit->GetDiminishing(m_diminishGroup); DiminishingReturnsType type = GetDiminishingReturnsGroupType(m_diminishGroup); // Increase Diminishing on unit, current informations for actually casts will use values above - if ((type == DRTYPE_PLAYER && unit->GetCharmerOrOwnerPlayerOrPlayerItself()) || type == DRTYPE_ALL) + if ((type == DRTYPE_PLAYER && + (unit->GetCharmerOrOwnerPlayerOrPlayerItself() || (unit->GetTypeId() == TYPEID_UNIT && unit->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH))) || + type == DRTYPE_ALL) unit->IncrDiminishing(m_diminishGroup); } From b6db622b52f5535683dbc2fd5a58647cb2668585 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 20 Oct 2013 14:27:17 +0200 Subject: [PATCH 32/56] Core/Transports: Fixed crashes happening when passenger is removed from transport during teleport Closes #11067 --- .../game/Entities/GameObject/GameObject.cpp | 4 +++ src/server/game/Entities/Player/Player.cpp | 14 ++++---- .../game/Entities/Transport/Transport.cpp | 36 +++++-------------- src/server/game/Entities/Unit/Unit.cpp | 9 +++-- 4 files changed, 25 insertions(+), 38 deletions(-) diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index af92f0e9df4..6d940623963 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -105,7 +105,11 @@ void GameObject::CleanupsBeforeDelete(bool /*finalCleanup*/) RemoveFromOwner(); if (GetTransport() && !ToTransport()) + { GetTransport()->RemovePassenger(this); + SetTransport(NULL); + m_movementInfo.transport.Reset(); + } } void GameObject::RemoveFromOwner() diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 40dbe6c2fe7..56719341855 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -923,9 +923,6 @@ void Player::CleanupsBeforeDelete(bool finalCleanup) Unit::CleanupsBeforeDelete(finalCleanup); - if (m_transport) - m_transport->RemovePassenger(this); - // clean up player-instance binds, may unload some instance saves for (uint8 i = 0; i < MAX_DIFFICULTY; ++i) for (BoundInstancesMap::iterator itr = m_boundInstances[i].begin(); itr != m_boundInstances[i].end(); ++itr) @@ -2297,10 +2294,13 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati if (m_transport) { - final_x += m_movementInfo.transport.pos.GetPositionX(); - final_y += m_movementInfo.transport.pos.GetPositionY(); - final_z += m_movementInfo.transport.pos.GetPositionZ(); - final_o += m_movementInfo.transport.pos.GetOrientation(); + float tx, ty, tz, to; + m_movementInfo.transport.pos.GetPosition(tx, ty, tz, to); + + final_x = x + tx * std::cos(orientation) - ty * std::sin(orientation); + final_y = y + ty * std::cos(orientation) + tx * std::sin(orientation); + final_z = z + tz; + final_o = Position::NormalizeOrientation(orientation + m_movementInfo.transport.pos.GetOrientation()); } m_teleport_dest = WorldLocation(mapid, final_x, final_y, final_z, final_o); diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 06af4244246..e7853964542 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -450,40 +450,19 @@ void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z) } } - // Teleport passengers after everyone on destination map are sent create packet - // but before transport itself is registered there and begins updating - for (std::set::iterator itr = _staticPassengers.begin(); itr != _staticPassengers.end(); ++itr) + for (std::set::iterator itr = _passengers.begin(); itr != _passengers.end();) { - switch ((*itr)->GetTypeId()) - { - case TYPEID_UNIT: - (*itr)->ToCreature()->FarTeleportTo(newMap, x, y, z, (*itr)->GetOrientation()); - break; - case TYPEID_GAMEOBJECT: - { - GameObject* go = (*itr)->ToGameObject(); - go->GetMap()->RemoveFromMap(go, false); - Relocate(x, y, z, go->GetOrientation()); - SetMap(newMap); - newMap->AddToMap(go); - break; - } - default: - break; - } - } + WorldObject* obj = (*itr++); - for (std::set::iterator itr = _passengers.begin(); itr != _passengers.end(); ++itr) - { - switch ((*itr)->GetTypeId()) + switch (obj->GetTypeId()) { case TYPEID_UNIT: - if (!IS_PLAYER_GUID((*itr)->ToUnit()->GetOwnerGUID())) // pets should be teleported with player - (*itr)->ToCreature()->FarTeleportTo(newMap, x, y, z, (*itr)->GetOrientation()); + if (!IS_PLAYER_GUID(obj->ToUnit()->GetOwnerGUID())) // pets should be teleported with player + obj->ToCreature()->FarTeleportTo(newMap, x, y, z, obj->GetOrientation()); break; case TYPEID_GAMEOBJECT: { - GameObject* go = (*itr)->ToGameObject(); + GameObject* go = obj->ToGameObject(); go->GetMap()->RemoveFromMap(go, false); Relocate(x, y, z, go->GetOrientation()); SetMap(newMap); @@ -491,7 +470,8 @@ void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z) break; } case TYPEID_PLAYER: - (*itr)->ToPlayer()->TeleportTo(newMapid, x, y, z, (*itr)->GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT); + if (!obj->ToPlayer()->TeleportTo(newMapid, x, y, z, GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT)) + _passengers.erase(obj); break; default: break; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2fd1c500305..1e417470335 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13499,9 +13499,12 @@ void Unit::CleanupsBeforeDelete(bool finalCleanup) { CleanupBeforeRemoveFromMap(finalCleanup); - if (Creature* thisCreature = ToCreature()) - if (GetTransport()) - GetTransport()->RemovePassenger(thisCreature); + if (GetTransport()) + { + GetTransport()->RemovePassenger(this); + SetTransport(NULL); + m_movementInfo.transport.Reset(); + } } void Unit::UpdateCharmAI() From 468425608a35ed58cd49a58d64a5fd5dde752205 Mon Sep 17 00:00:00 2001 From: Elron103 Date: Sun, 20 Oct 2013 16:40:39 +0200 Subject: [PATCH 33/56] DB/Gossip: Update some data for trainer NPCs from sniffs --- .../world/2013_10_20_02_world_gossip.sql | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 sql/updates/world/2013_10_20_02_world_gossip.sql diff --git a/sql/updates/world/2013_10_20_02_world_gossip.sql b/sql/updates/world/2013_10_20_02_world_gossip.sql new file mode 100644 index 00000000000..934334800d5 --- /dev/null +++ b/sql/updates/world/2013_10_20_02_world_gossip.sql @@ -0,0 +1,96 @@ +-- DB/Gossip: Update some data for trainer NPCs from sniffs +SET @ALLCLASMASK := 1535; +SET @CLASSMASK_PAL := 2; +SET @CLASSMASK_HUN := 4; +SET @CLASSMASK_MAGE := 128; +SET @CLASSMASK_DRU := 1024; + +SET @TRAINEROPT := 0; +SET @TALENTOPT := 1; + +-- NPCS: +-- Milstaff Stormeye, 2489, Mage trainer 15050_2012-01-29_21-59-26_aliance_pali_Trainers_with_mage.pkt +SET @MENU1 := 4823; +SET @TEXTOK1 := 5878; +SET @TEXTERR1 := 5877; + +-- Kal, 3602, Druid trainer, source https://gist.github.com/Kinzcool/a34dce9b128e6cc5ca6d +SET @MENU2 := 3923; +SET @TEXTOK2 := 4779; +SET @TEXTERR2 := 4780; + +-- Dargh Trueaim, 10930, Hunter trainer, source https://gist.github.com/Kinzcool/a34dce9b128e6cc5ca6d +SET @NPC3 := 10930; +SET @MENU3 := 4674; +SET @TEXT3 := 5000; + +-- Ysuria, 27703, Mage trainer, source https://gist.github.com/Kinzcool/a34dce9b128e6cc5ca6d +SET @MENU4 := 9581; + +-- Brother Wilhelm, 927, Paladin trainer, verified that only has training option with TDB434, UDB +SET @MENU5 := 4664; +SET @TEXTOK5 := 3976; +SET @TEXTERR5 := 3977; + +-- Gart Mistrunner, 3060, Druid trainer, verified that only has training option with TDB434 +SET @MENU6 := 4644; +SET @TEXTOK6 := 5716; +SET @TEXTERR6 := 5717; + +-- Archmage Celindra, 29156, Mage trainer, verified that only has training option with TDB434, UDB +SET @MENU7 := 9777; +SET @TEXTOK7 := 13456; +SET @TEXTERR7 := 13455; + +-- Deal with the new data +DELETE FROM `gossip_menu` WHERE +(`entry` = @MENU1 AND `text_id` = @TEXTOK1) +OR (`entry` = @MENU2 AND `text_id` = @TEXTOK2) +OR (`entry` = @MENU3 AND `text_id` = @TEXT3); + +DELETE FROM `gossip_menu_option` WHERE +(`menu_id` = @MENU1 AND `id` = @TRAINEROPT) +OR (`menu_id` = @MENU2 AND `id` IN (@TRAINEROPT, @TALENTOPT)); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 14 AND +( + (`SourceEntry` IN (@TEXTOK1, @TEXTERR1) AND `SourceGroup` = @MENU1) + OR (`SourceEntry` IN (@TEXTOK2, @TEXTERR2) AND `SourceGroup` = @MENU2) + OR (`SourceEntry` IN (@TEXTOK5, @TEXTERR5) AND `SourceGroup` = @MENU5) + OR (`SourceEntry` IN (@TEXTOK6, @TEXTERR6) AND `SourceGroup` = @MENU6) + OR (`SourceEntry` IN (@TEXTOK7, @TEXTERR7) AND `SourceGroup` = @MENU7) +); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceEntry` = @TRAINEROPT AND `SourceGroup` IN (@MENU1, @MENU4, @MENU5, @MENU6, @MENU7); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceEntry` IN (@TRAINEROPT, @TALENTOPT) AND `SourceGroup` = @MENU2; + +INSERT INTO `gossip_menu` (entry, text_id) VALUES +(@MENU1, @TEXTOK1), +(@MENU2, @TEXTOK2), +(@MENU3, @TEXT3); + +INSERT INTO `gossip_menu_option` (menu_id, id, option_icon, option_text, option_id, npc_option_npcflag, action_menu_id, action_poi_id, box_coded, box_money, box_text) VALUES +(@MENU1, @TRAINEROPT, 3, 'Please teach me.', 5, 16, 0, 0, 0, 0, ''), +(@MENU2, @TRAINEROPT, 3, 'I seek training as a druid.', 5, 16, 0, 0, 0, 0, ''), +(@MENU2, @TALENTOPT, 0, 'I wish to unlearn my talents.', 16, 16, 0, 0, 0, 0, ''); + +INSERT INTO `conditions` (SourceTypeOrReferenceId, SourceGroup, SourceEntry, SourceId, ElseGroup, ConditionTypeOrReference, ConditionTarget, ConditionValue1, ConditionValue2, ConditionValue3, NegativeCondition, ErrorType, ErrorTextId, ScriptName, Comment) VALUES +(14, @MENU1, @TEXTOK1, 0, 0, 15, 0, @CLASSMASK_MAGE, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Mage'), +(14, @MENU1, @TEXTERR1, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_MAGE), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Mage'), +(15, @MENU1, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_MAGE, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Mage'), +(14, @MENU2, @TEXTOK2, 0, 0, 15, 0, @CLASSMASK_DRU, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Druid'), +(14, @MENU2, @TEXTERR2, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_DRU), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Druid'), +(15, @MENU2, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_DRU, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Druid'), +(15, @MENU2, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_DRU, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Druid'), +(15, @MENU4, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_MAGE, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Mage'), +(14, @MENU5, @TEXTOK5, 0, 0, 15, 0, @CLASSMASK_PAL, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Paladin'), +(14, @MENU5, @TEXTERR5, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_PAL), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Paladin'), +(15, @MENU5, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_PAL, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Paladin'), +(14, @MENU6, @TEXTOK6, 0, 0, 15, 0, @CLASSMASK_PAL, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Druid'), +(14, @MENU6, @TEXTERR6, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_PAL), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Druid'), +(15, @MENU6, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_PAL, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Druid'), +(14, @MENU7, @TEXTOK7, 0, 0, 15, 0, @CLASSMASK_MAGE, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a Mage'), +(14, @MENU7, @TEXTERR7, 0, 0, 15, 0, (@ALLCLASMASK & ~@CLASSMASK_MAGE), 0, 0, 0, 0, 0, '', 'Show gossip text if player is not a Mage'), +(15, @MENU7, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_MAGE, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Mage'); + +UPDATE `creature_template` SET `gossip_menu_id` = @MENU3 WHERE `entry` = @NPC3; From 1a6157985c3ef1ffe60dd1c6b016c521d6e144f8 Mon Sep 17 00:00:00 2001 From: Discover- Date: Mon, 21 Oct 2013 09:15:17 +0200 Subject: [PATCH 34/56] Core/Misc: Get rid of some useless code --- .../game/AI/SmartScripts/SmartScript.cpp | 30 +++++++++---------- src/server/game/Entities/Unit/Unit.cpp | 4 +-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index f01d0d1ab03..870d7d94d07 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -252,7 +252,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (IsUnit(*itr)) { - (*itr)->SendPlaySound(e.action.sound.sound, e.action.sound.onlySelf > 0 ? true : false); + (*itr)->SendPlaySound(e.action.sound.sound, e.action.sound.onlySelf > 0); TC_LOG_DEBUG(LOG_FILTER_DATABASE_AI, "SmartScript::ProcessAction:: SMART_ACTION_SOUND: target: %s (GuidLow: %u), sound: %u, onlyself: %u", (*itr)->GetName().c_str(), (*itr)->GetGUIDLow(), e.action.sound.sound, e.action.sound.onlySelf); } @@ -516,7 +516,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (e.action.cast.flags & SMARTCAST_INTERRUPT_PREVIOUS) me->InterruptNonMeleeSpells(false); - me->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) ? true : false); + me->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED)); TC_LOG_DEBUG(LOG_FILTER_DATABASE_AI, "SmartScript::ProcessAction:: SMART_ACTION_CAST:: Creature %u casts spell %u on target %u with castflags %u", me->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags); } @@ -547,7 +547,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (e.action.cast.flags & SMARTCAST_INTERRUPT_PREVIOUS) tempLastInvoker->InterruptNonMeleeSpells(false); - tempLastInvoker->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) ? true : false); + tempLastInvoker->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED)); TC_LOG_DEBUG(LOG_FILTER_DATABASE_AI, "SmartScript::ProcessAction:: SMART_ACTION_INVOKER_CAST: Invoker %u casts spell %u on target %u with castflags %u", tempLastInvoker->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags); } @@ -697,7 +697,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!IsSmart()) break; - CAST_AI(SmartAI, me->AI())->SetAutoAttack(e.action.autoAttack.attack ? true : false); + CAST_AI(SmartAI, me->AI())->SetAutoAttack(e.action.autoAttack.attack); TC_LOG_DEBUG(LOG_FILTER_DATABASE_AI, "SmartScript::ProcessAction:: SMART_ACTION_AUTO_ATTACK: Creature: %u bool on = %u", me->GetGUIDLow(), e.action.autoAttack.attack); break; @@ -707,7 +707,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!IsSmart()) break; - bool move = e.action.combatMove.move ? true : false; + bool move = e.action.combatMove.move; CAST_AI(SmartAI, me->AI())->SetCombatMove(move); TC_LOG_DEBUG(LOG_FILTER_DATABASE_AI, "SmartScript::ProcessAction:: SMART_ACTION_ALLOW_COMBAT_MOVEMENT: Creature %u bool on = %u", me->GetGUIDLow(), e.action.combatMove.move); @@ -1282,7 +1282,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!IsSmart()) break; - CAST_AI(SmartAI, me->AI())->SetFly(e.action.setFly.fly ? true : false); + CAST_AI(SmartAI, me->AI())->SetFly(e.action.setFly.fly); break; } case SMART_ACTION_SET_RUN: @@ -1290,7 +1290,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!IsSmart()) break; - CAST_AI(SmartAI, me->AI())->SetRun(e.action.setRun.run ? true : false); + CAST_AI(SmartAI, me->AI())->SetRun(e.action.setRun.run); break; } case SMART_ACTION_SET_SWIM: @@ -1298,7 +1298,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!IsSmart()) break; - CAST_AI(SmartAI, me->AI())->SetSwim(e.action.setSwim.swim ? true : false); + CAST_AI(SmartAI, me->AI())->SetSwim(e.action.setSwim.swim); break; } case SMART_ACTION_WP_START: @@ -1306,9 +1306,9 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!IsSmart()) break; - bool run = e.action.wpStart.run ? true : false; + bool run = e.action.wpStart.run; uint32 entry = e.action.wpStart.pathID; - bool repeat = e.action.wpStart.repeat ? true : false; + bool repeat = e.action.wpStart.repeat; ObjectList* targets = GetTargets(e, unit); StoreTargetList(targets, SMART_ESCORT_TARGETS); me->SetReactState((ReactStates)e.action.wpStart.reactState); @@ -1336,7 +1336,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u uint32 DespawnTime = e.action.wpStop.despawnTime; uint32 quest = e.action.wpStop.quest; - bool fail = e.action.wpStop.fail ? true : false; + bool fail = e.action.wpStop.fail; CAST_AI(SmartAI, me->AI())->StopPath(DespawnTime, quest, fail); break; } @@ -1689,7 +1689,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u interruptedSpell = true; } - (*itr)->ToUnit()->CastSpell((*it)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) ? true : false); + (*itr)->ToUnit()->CastSpell((*it)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED)); } else TC_LOG_DEBUG(LOG_FILTER_DATABASE_AI, "Spell %u not casted because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (Guid: " UI64FMTD " Entry: %u Type: %u) already has the aura", e.action.cast.spell, (*it)->GetGUID(), (*it)->GetEntry(), uint32((*it)->GetTypeId())); @@ -2050,7 +2050,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) if (IsCreature(*itr)) - (*itr)->ToCreature()->setRegeneratingHealth(e.action.setHealthRegen.regenHealth ? true : false); + (*itr)->ToCreature()->setRegeneratingHealth(e.action.setHealthRegen.regenHealth); delete targets; break; @@ -2063,7 +2063,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) if (IsCreature(*itr)) - (*itr)->ToCreature()->SetControlled(e.action.setRoot.root ? true : false, UNIT_STATE_ROOT); + (*itr)->ToCreature()->SetControlled(e.action.setRoot.root, UNIT_STATE_ROOT); delete targets; break; @@ -2519,7 +2519,7 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /* } case SMART_TARGET_CLOSEST_CREATURE: { - Creature* target = GetClosestCreatureWithEntry(baseObject, e.target.closest.entry, (float)(e.target.closest.dist ? e.target.closest.dist : 100), e.target.closest.dead ? false : true); + Creature* target = GetClosestCreatureWithEntry(baseObject, e.target.closest.entry, (float)(e.target.closest.dist ? e.target.closest.dist : 100), !e.target.closest.dead); if (target) l->push_back(target); break; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 1e417470335..3b924a88feb 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -7575,7 +7575,7 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp CastSpell(this, 28682, true); - return (procEx & PROC_EX_CRITICAL_HIT) ? true : false; + return (procEx & PROC_EX_CRITICAL_HIT); } // Empowered Fire case 31656: @@ -13349,7 +13349,7 @@ void Unit::SetPower(Powers power, uint32 val) data.append(GetPackGUID()); data << uint8(power); data << uint32(val); - SendMessageToSet(&data, GetTypeId() == TYPEID_PLAYER ? true : false); + SendMessageToSet(&data, GetTypeId() == TYPEID_PLAYER); // group update if (Player* player = ToPlayer()) From 989cc35d8c9a7a7bcec588a59c8f8c38bf08e861 Mon Sep 17 00:00:00 2001 From: Filip Date: Mon, 21 Oct 2013 23:11:38 +0200 Subject: [PATCH 35/56] DB/SAI: Misc Fixes from IT By @dr-j and @untaught Fixes #11081 fixes #11080 fixes #11082 --- sql/updates/world/2013_10_21_00_world_sai.sql | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 sql/updates/world/2013_10_21_00_world_sai.sql diff --git a/sql/updates/world/2013_10_21_00_world_sai.sql b/sql/updates/world/2013_10_21_00_world_sai.sql new file mode 100644 index 00000000000..acd070675f1 --- /dev/null +++ b/sql/updates/world/2013_10_21_00_world_sai.sql @@ -0,0 +1,23 @@ +-- 12180 The Captive Prospectors +UPDATE `smart_scripts` SET `link`=1 WHERE `entryorguid`IN(27113,27114,27115) AND `source_type`=0 AND `id`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`IN(27113,27114,27115) AND `id`=1; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(27113,0,1,0,61,0,100,0,0,0,0,0,33,27113,0,0,0,0,0,7,0,0,0,0,0,0,0,'Prospector Gann - On Spell Hit - Give Kill Credit'), +(27114,0,1,0,61,0,100,0,0,0,0,0,33,27114,0,0,0,0,0,7,0,0,0,0,0,0,0,'Prospector Torgan - On Spell Hit - Give Kill Credit'), +(27115,0,1,0,61,0,100,0,0,0,0,0,33,27115,0,0,0,0,0,7,0,0,0,0,0,0,0,'Prospector Veranna - On Spell Hit - Give Kill Credit'); + +-- [11150] Raze Direhorn Post! +-- [11205] Raze Direhorn Post! +UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry` IN(23751,23752,23753); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (23751,23752,23753); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(23751, 0, 0, 0, 8, 0, 100, 0, 42356, 0, 0, 0, 33, 23751 , 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'North Tent - On Spellhit - Kill Credit'), +(23752, 0, 0, 0, 8, 0, 100, 0, 42356, 0, 0, 0, 33, 23752 , 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Northeast Tent - On Spellhit - Kill Credit'), +(23753, 0, 0, 0, 8, 0, 100, 0, 42356, 0, 0, 0, 33, 23753 , 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'East Tent - On Spellhit - Kill Credit'); +-- Know Your Ley Lines [11547] +UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry` IN (25156,25154,25157); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (25156,25154,25157) AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(25156,0,0,0,8,0,100,0,45191,0,0,0,33,25156,0,0,0,0,0,7,0,0,0,0,0,0,0,'Sunwell - Quest Bunny - Portal - On Spell Hit(Sample Ley Line Field) - Give Quest Credit'), +(25154,0,0,0,8,0,100,0,45191,0,0,0,33,25154,0,0,0,0,0,7,0,0,0,0,0,0,0,'Sunwell - Quest Bunny - Shrine - On Spell Hit(Sample Ley Line Field) - Give Quest Credit'), +(25157,0,0,0,8,0,100,0,45191,0,0,0,33,25157,0,0,0,0,0,7,0,0,0,0,0,0,0,'Sunwell - Quest Bunny - Sunwell - On Spell Hit(Sample Ley Line Field) - Give Quest Credit'); From fc947e2508f2ca0fb72f4d0ae204fd55b4c77e49 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Mon, 21 Oct 2013 23:41:31 +0200 Subject: [PATCH 36/56] Core/Quest: Remove assertion Remove assertion about Quest ExclusiveGroup since they are triggered even when adding valid quests to npcs. Fixes #8336 . How to reproduce steps: - .gm off - add quest 11335 in creature_queststarter - .reload creature_queststarter - get in range of that creature - .gm on - assertion triggered --- src/server/game/Entities/Player/Player.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 56719341855..71523c72842 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15459,9 +15459,6 @@ bool Player::SatisfyQuestPreviousQuest(Quest const* qInfo, bool msg) // can be start if only all quests in prev quest exclusive group completed and rewarded ObjectMgr::ExclusiveQuestGroupsBounds range(sObjectMgr->mExclusiveQuestGroups.equal_range(qPrevInfo->GetExclusiveGroup())); - // always must be found if qPrevInfo->ExclusiveGroup != 0 - ASSERT(range.first != range.second); - for (; range.first != range.second; ++range.first) { uint32 exclude_Id = range.first->second; @@ -15495,9 +15492,6 @@ bool Player::SatisfyQuestPreviousQuest(Quest const* qInfo, bool msg) // can be start if only all quests in prev quest exclusive group active ObjectMgr::ExclusiveQuestGroupsBounds range(sObjectMgr->mExclusiveQuestGroups.equal_range(qPrevInfo->GetExclusiveGroup())); - // always must be found if qPrevInfo->ExclusiveGroup != 0 - ASSERT(range.first != range.second); - for (; range.first != range.second; ++range.first) { uint32 exclude_Id = range.first->second; @@ -15665,9 +15659,6 @@ bool Player::SatisfyQuestExclusiveGroup(Quest const* qInfo, bool msg) ObjectMgr::ExclusiveQuestGroupsBounds range(sObjectMgr->mExclusiveQuestGroups.equal_range(qInfo->GetExclusiveGroup())); - // always must be found if qInfo->ExclusiveGroup != 0 - ASSERT(range.first != range.second); - for (; range.first != range.second; ++range.first) { uint32 exclude_Id = range.first->second; From 0cc32e28e3b101d9880753544cc97b6158eb24b4 Mon Sep 17 00:00:00 2001 From: Discover- Date: Tue, 22 Oct 2013 15:59:32 +0200 Subject: [PATCH 37/56] Core/SAI: Rename SMART_EVENT_TARGET_CASTING to SMART_EVENT_VICTIM_CASTING as that's what it actually does. It was often confused to use the target_type field instead of the victim. --- src/server/game/AI/SmartScripts/SmartScript.cpp | 4 ++-- src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 2 +- src/server/game/AI/SmartScripts/SmartScriptMgr.h | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 870d7d94d07..7ea6895d028 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2686,7 +2686,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax, me->GetVictim()); break; } - case SMART_EVENT_TARGET_CASTING: + case SMART_EVENT_VICTIM_CASTING: { if (!me || !me->IsInCombat()) return; @@ -3148,7 +3148,7 @@ void SmartScript::UpdateTimer(SmartScriptHolder& e, uint32 const diff) case SMART_EVENT_MANA_PCT: case SMART_EVENT_TARGET_MANA_PCT: case SMART_EVENT_RANGE: - case SMART_EVENT_TARGET_CASTING: + case SMART_EVENT_VICTIM_CASTING: case SMART_EVENT_FRIENDLY_HEALTH: case SMART_EVENT_FRIENDLY_IS_CC: case SMART_EVENT_FRIENDLY_MISSING_BUFF: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 361cf025647..87c35d59cc0 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -438,7 +438,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) if (e.event.kill.creature && !IsCreatureValid(e, e.event.kill.creature)) return false; break; - case SMART_EVENT_TARGET_CASTING: + case SMART_EVENT_VICTIM_CASTING: if (e.event.targetCasting.spellId > 0 && !sSpellMgr->GetSpellInfo(e.event.targetCasting.spellId)) { sLog->outError(LOG_FILTER_SQL, "SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses non-existent Spell entry %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.spellHit.spell); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index f12f2ab69c0..7ed8e60ed44 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -94,7 +94,7 @@ enum SMART_EVENT SMART_EVENT_OOC_LOS = 10, // NoHostile, MaxRnage, CooldownMin, CooldownMax SMART_EVENT_RESPAWN = 11, // type, MapId, ZoneId SMART_EVENT_TARGET_HEALTH_PCT = 12, // HPMin%, HPMax%, RepeatMin, RepeatMax - SMART_EVENT_TARGET_CASTING = 13, // RepeatMin, RepeatMax, spellid + SMART_EVENT_VICTIM_CASTING = 13, // RepeatMin, RepeatMax, spellid SMART_EVENT_FRIENDLY_HEALTH = 14, // HPDeficit, Radius, RepeatMin, RepeatMax SMART_EVENT_FRIENDLY_IS_CC = 15, // Radius, RepeatMin, RepeatMax SMART_EVENT_FRIENDLY_MISSING_BUFF = 16, // SpellId, Radius, RepeatMin, RepeatMax @@ -1196,7 +1196,7 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] = {SMART_EVENT_OOC_LOS, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_RESPAWN, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, {SMART_EVENT_TARGET_HEALTH_PCT, SMART_SCRIPT_TYPE_MASK_CREATURE }, - {SMART_EVENT_TARGET_CASTING, SMART_SCRIPT_TYPE_MASK_CREATURE }, + {SMART_EVENT_VICTIM_CASTING, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_FRIENDLY_HEALTH, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_FRIENDLY_IS_CC, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_FRIENDLY_MISSING_BUFF, SMART_SCRIPT_TYPE_MASK_CREATURE }, From 3e12fe84c860567b2a6097b99f202b56aaf51ccf Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 22 Oct 2013 17:02:01 +0200 Subject: [PATCH 38/56] Core/Transports: Fixed players taking fall damage when teleporting from transports Closes #11076 --- src/server/game/Entities/Player/Player.cpp | 25 ++++++++++++++++--- .../game/Entities/Transport/Transport.cpp | 4 +-- src/server/game/Spells/SpellEffects.cpp | 11 +++++--- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 71523c72842..eaee6dc090a 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2178,8 +2178,26 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati if (!(options & TELE_TO_NOT_LEAVE_COMBAT)) CombatStop(); + // new final coordinates + float final_x = x; + float final_y = y; + float final_z = z; + float final_o = orientation; + + // Calculate final positions if on transport + if (m_transport) + { + float tx, ty, tz, to; + m_movementInfo.transport.pos.GetPosition(tx, ty, tz, to); + + final_x = x + tx * std::cos(orientation) - ty * std::sin(orientation); + final_y = y + ty * std::cos(orientation) + tx * std::sin(orientation); + final_z = z + tz; + final_o = Position::NormalizeOrientation(orientation + m_movementInfo.transport.pos.GetOrientation()); + } + // this will be used instead of the current location in SaveToDB - m_teleport_dest = WorldLocation(mapid, x, y, z, orientation); + m_teleport_dest = WorldLocation(mapid, final_x, final_y, final_z, final_o); SetFallInformation(0, z); // code for finish transfer called in WorldSession::HandleMovementOpcodes() @@ -2190,7 +2208,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati { Position oldPos; GetPosition(&oldPos); - Relocate(x, y, z, orientation); + Relocate(final_x, final_y, final_z, final_o); SendTeleportAckPacket(); SendTeleportPacket(oldPos); // this automatically relocates to oldPos in order to broadcast the packet in the right place } @@ -2292,6 +2310,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati float final_z = z; float final_o = orientation; + // Calculate final positions if on transport if (m_transport) { float tx, ty, tz, to; @@ -2304,7 +2323,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati } m_teleport_dest = WorldLocation(mapid, final_x, final_y, final_z, final_o); - SetFallInformation(0, final_z); + SetFallInformation(0, z); // if the player is saved before worldportack (at logout for example) // this will be used instead of the current location in SaveToDB diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index e7853964542..30b7b61f574 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -181,8 +181,8 @@ void Transport::Update(uint32 diff) float t = CalculateSegmentPos(float(timer) * 0.001f); G3D::Vector3 pos, dir; _currentFrame->Spline->evaluate_percent(_currentFrame->Index, t, pos); - //_currentFrame->Spline->evaluate_derivative(_currentFrame->Index, t, dir); - UpdatePosition(pos.x, pos.y, pos.z, 0.0f/*atan2(dir.x, dir.y)*/); + _currentFrame->Spline->evaluate_derivative(_currentFrame->Index, t, dir); + UpdatePosition(pos.x, pos.y, pos.z, atan2(dir.x, dir.y)); } } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 562d7fee518..0732c389bfa 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1150,10 +1150,15 @@ void Spell::EffectTeleportUnits(SpellEffIndex /*effIndex*/) orientation = m_targets.GetUnitTarget()->GetOrientation(); TC_LOG_DEBUG(LOG_FILTER_SPELLS_AURAS, "Spell::EffectTeleportUnits - teleport unit to %u %f %f %f %f\n", mapid, x, y, z, orientation); - if (mapid == unitTarget->GetMapId()) - unitTarget->NearTeleportTo(x, y, z, orientation, unitTarget == m_caster); - else if (unitTarget->GetTypeId() == TYPEID_PLAYER) + if (unitTarget->GetTypeId() == TYPEID_PLAYER) unitTarget->ToPlayer()->TeleportTo(mapid, x, y, z, orientation, unitTarget == m_caster ? TELE_TO_SPELL : 0); + else if (mapid == unitTarget->GetMapId()) + unitTarget->NearTeleportTo(x, y, z, orientation, unitTarget == m_caster); + else + { + TC_LOG_ERROR(LOG_FILTER_SPELLS_AURAS, "Spell::EffectTeleportUnits - spellId %u attempted to teleport creature to a different map.", m_spellInfo->Id); + return; + } // post effects for TARGET_DEST_DB switch (m_spellInfo->Id) From 06f50110713feec2d6957e68ce2c5a5d2a997d6a Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 22 Oct 2013 17:09:41 +0200 Subject: [PATCH 39/56] Core/Auras: Added serverside checking for UNIT_FLAG_PACIFIED when attempting to start melee attack Closes #8623 --- src/server/game/Entities/Unit/Unit.cpp | 3 +++ src/server/game/Spells/Auras/SpellAuraEffects.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 3b924a88feb..c3a611c441f 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8914,6 +8914,9 @@ bool Unit::Attack(Unit* victim, bool meleeAttack) if (GetTypeId() == TYPEID_PLAYER && IsMounted()) return false; + if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED)) + return false; + // nobody can attack GM in GM-mode if (victim->GetTypeId() == TYPEID_PLAYER) { diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 4b73af1b681..630d2f28376 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -2301,7 +2301,10 @@ void AuraEffect::HandleAuraModPacify(AuraApplication const* aurApp, uint8 mode, Unit* target = aurApp->GetTarget(); if (apply) + { target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + target->AttackStop(); + } else { // do not remove unit flag if there are more than this auraEffect of that kind on unit on unit From d745e32f1c5918b86692efd322fbaecec4a3d29e Mon Sep 17 00:00:00 2001 From: gerripeach Date: Tue, 22 Oct 2013 17:24:59 +0200 Subject: [PATCH 40/56] Core: add missing comment --- src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 4b73af1b681..d6f96f79cc1 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -350,7 +350,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleAuraModCritPct, //290 SPELL_AURA_MOD_CRIT_PCT &AuraEffect::HandleNoImmediateEffect, //291 SPELL_AURA_MOD_XP_QUEST_PCT implemented in Player::RewardQuest &AuraEffect::HandleAuraOpenStable, //292 SPELL_AURA_OPEN_STABLE - &AuraEffect::HandleAuraOverrideSpells, //293 auras which probably add set of abilities to their target based on it's miscvalue + &AuraEffect::HandleAuraOverrideSpells, //293 SPELL_AURA_OVERRIDE_SPELLS auras which probably add set of abilities to their target based on it's miscvalue &AuraEffect::HandleNoImmediateEffect, //294 SPELL_AURA_PREVENT_REGENERATE_POWER implemented in Player::Regenerate(Powers power) &AuraEffect::HandleUnused, //295 0 spells in 3.3.5 &AuraEffect::HandleAuraSetVehicle, //296 SPELL_AURA_SET_VEHICLE_ID sets vehicle on target From 9802c7b89180c594da8eb2e2554d7836c5dfeb9b Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Tue, 22 Oct 2013 20:23:07 +0200 Subject: [PATCH 41/56] Scripts/Misc: Coding Style unification? (by Aokromes) --- .../world/2013_10_20_00_world_conditions.sql | 2 +- src/server/scripts/Commands/cs_group.cpp | 1 - .../AlteracValley/boss_balinda.cpp | 4 +-- .../AlteracValley/boss_drekthar.cpp | 2 +- .../AlteracValley/boss_galvangar.cpp | 2 +- .../AlteracValley/boss_vanndar.cpp | 2 +- .../BlackrockDepths/blackrock_depths.cpp | 6 ++-- .../boss_ambassador_flamelash.cpp | 2 +- .../BlackrockDepths/boss_anubshiah.cpp | 2 +- .../boss_general_angerforge.cpp | 2 +- .../boss_gorosh_the_dervish.cpp | 2 +- .../BlackrockDepths/boss_grizzle.cpp | 2 +- .../boss_high_interrogator_gerstahn.cpp | 2 +- .../BlackrockDepths/boss_magmus.cpp | 2 +- .../boss_moira_bronzebeard.cpp | 2 +- .../instance_blackrock_depths.cpp | 2 +- .../BlackrockSpire/boss_drakkisath.cpp | 2 +- .../boss_gizrul_the_slavener.cpp | 2 +- .../BlackrockSpire/boss_halycon.cpp | 2 +- .../BlackrockSpire/boss_highlord_omokk.cpp | 2 +- .../BlackrockSpire/boss_lord_valthalak.cpp | 2 +- .../BlackrockSpire/boss_mother_smolderweb.cpp | 2 +- .../boss_overlord_wyrmthalak.cpp | 2 +- .../boss_pyroguard_emberseer.cpp | 4 +-- .../boss_quartermaster_zigris.cpp | 2 +- .../boss_shadow_hunter_voshgajin.cpp | 2 +- .../BlackrockSpire/boss_the_beast.cpp | 2 +- .../BlackrockSpire/boss_urok_doomhowl.cpp | 2 +- .../BlackrockSpire/boss_warmaster_voone.cpp | 2 +- .../MoltenCore/boss_garr.cpp | 2 +- .../Deadmines/instance_deadmines.cpp | 2 +- .../EasternKingdoms/Karazhan/boss_curator.cpp | 2 +- .../Karazhan/boss_maiden_of_virtue.cpp | 2 +- .../Karazhan/boss_midnight.cpp | 2 +- .../EasternKingdoms/Karazhan/boss_moroes.cpp | 8 ++--- .../Karazhan/boss_prince_malchezaar.cpp | 2 +- .../Karazhan/boss_shade_of_aran.cpp | 2 +- .../Karazhan/boss_terestian_illhoof.cpp | 4 +-- .../EasternKingdoms/Karazhan/bosses_opera.cpp | 4 +-- .../Karazhan/instance_karazhan.cpp | 2 +- .../boss_felblood_kaelthas.cpp | 2 +- .../boss_priestess_delrissa.cpp | 14 ++++---- .../MagistersTerrace/boss_selin_fireheart.cpp | 2 +- .../instance_magisters_terrace.cpp | 2 +- .../MagistersTerrace/magisters_terrace.cpp | 2 +- .../ScarletEnclave/chapter1.cpp | 8 ++--- .../ScarletEnclave/chapter2.cpp | 8 ++--- .../ScarletEnclave/chapter5.cpp | 2 +- .../zone_the_scarlet_enclave.cpp | 2 +- .../ScarletMonastery/boss_arcanist_doan.cpp | 2 +- .../boss_azshir_the_sleepless.cpp | 2 +- .../boss_bloodmage_thalnos.cpp | 2 +- .../boss_headless_horseman.cpp | 4 +-- .../ScarletMonastery/boss_herod.cpp | 2 +- .../boss_high_inquisitor_fairbanks.cpp | 2 +- .../boss_houndmaster_loksey.cpp | 2 +- .../ScarletMonastery/boss_scorn.cpp | 2 +- .../instance_scarlet_monastery.cpp | 2 +- .../Scholomance/boss_darkmaster_gandling.cpp | 2 +- .../boss_death_knight_darkreaver.cpp | 2 +- .../boss_doctor_theolen_krastinov.cpp | 2 +- .../Scholomance/boss_illucia_barov.cpp | 2 +- .../Scholomance/boss_instructor_malicia.cpp | 2 +- .../Scholomance/boss_jandice_barov.cpp | 4 +-- .../Scholomance/boss_kormok.cpp | 2 +- .../Scholomance/boss_lord_alexei_barov.cpp | 2 +- .../Scholomance/boss_lorekeeper_polkelt.cpp | 2 +- .../Scholomance/boss_ras_frostwhisper.cpp | 2 +- .../Scholomance/boss_the_ravenian.cpp | 2 +- .../Scholomance/boss_vectus.cpp | 2 +- .../instance_shadowfang_keep.cpp | 2 +- .../Stratholme/boss_cannon_master_willey.cpp | 2 +- .../Stratholme/boss_dathrohan_balnazzar.cpp | 2 +- .../Stratholme/boss_magistrate_barthilas.cpp | 2 +- .../Stratholme/boss_postmaster_malown.cpp | 2 +- .../Stratholme/boss_timmy_the_cruel.cpp | 2 +- .../EasternKingdoms/Stratholme/stratholme.cpp | 6 ++-- .../SunwellPlateau/boss_eredar_twins.cpp | 2 +- .../SunwellPlateau/boss_kiljaeden.cpp | 4 +-- .../SunwellPlateau/boss_muru.cpp | 2 +- .../instance_sunwell_plateau.cpp | 2 +- .../TheStockade/instance_the_stockade.cpp | 2 +- .../EasternKingdoms/Uldaman/boss_ironaya.cpp | 2 +- .../Uldaman/instance_uldaman.cpp | 4 +-- .../EasternKingdoms/Uldaman/uldaman.cpp | 2 +- .../EasternKingdoms/ZulAman/boss_halazzi.cpp | 2 +- .../EasternKingdoms/ZulAman/boss_hexlord.cpp | 10 +++--- .../EasternKingdoms/ZulAman/boss_janalai.cpp | 2 +- .../EasternKingdoms/ZulAman/boss_zuljin.cpp | 2 +- .../ZulAman/instance_zulaman.cpp | 2 +- .../EasternKingdoms/ZulGurub/boss_arlokk.cpp | 6 ++-- .../ZulGurub/boss_gahzranka.cpp | 4 +-- .../EasternKingdoms/ZulGurub/boss_grilek.cpp | 4 +-- .../EasternKingdoms/ZulGurub/boss_hakkar.cpp | 4 +-- .../ZulGurub/boss_hazzarah.cpp | 4 +-- .../EasternKingdoms/ZulGurub/boss_jeklik.cpp | 4 +-- .../EasternKingdoms/ZulGurub/boss_jindo.cpp | 6 ++-- .../ZulGurub/boss_mandokir.cpp | 6 ++-- .../EasternKingdoms/ZulGurub/boss_marli.cpp | 8 ++--- .../ZulGurub/boss_renataki.cpp | 4 +-- .../EasternKingdoms/ZulGurub/boss_thekal.cpp | 6 ++-- .../EasternKingdoms/ZulGurub/boss_venoxis.cpp | 4 +-- .../ZulGurub/boss_wushoolay.cpp | 4 +-- .../ZulGurub/instance_zulgurub.cpp | 2 +- .../scripts/EasternKingdoms/boss_kruul.cpp | 2 +- .../EasternKingdoms/zone_arathi_highlands.cpp | 2 +- .../EasternKingdoms/zone_burning_steppes.cpp | 2 +- .../scripts/EasternKingdoms/zone_duskwood.cpp | 2 +- .../zone_eastern_plaguelands.cpp | 2 +- .../EasternKingdoms/zone_eversong_woods.cpp | 2 +- .../EasternKingdoms/zone_ghostlands.cpp | 2 +- .../zone_isle_of_queldanas.cpp | 4 +-- .../zone_redridge_mountains.cpp | 2 +- .../EasternKingdoms/zone_silvermoon_city.cpp | 2 +- .../zone_silverpine_forest.cpp | 2 +- .../EasternKingdoms/zone_stormwind_city.cpp | 2 +- .../EasternKingdoms/zone_undercity.cpp | 4 +-- .../zone_western_plaguelands.cpp | 2 +- .../scripts/EasternKingdoms/zone_westfall.cpp | 2 +- src/server/scripts/Events/childrens_week.cpp | 30 ++++++++--------- .../scripts/Examples/example_creature.cpp | 2 +- .../instance_blackfathom_deeps.cpp | 2 +- .../BattleForMountHyjal/boss_archimonde.cpp | 4 +-- .../BattleForMountHyjal/instance_hyjal.cpp | 2 +- .../boss_leutenant_drake.cpp | 2 +- .../instance_old_hillsbrad.cpp | 2 +- .../Kalimdor/DireMaul/instance_dire_maul.cpp | 2 +- .../Maraudon/boss_celebras_the_cursed.cpp | 2 +- .../Kalimdor/Maraudon/boss_landslide.cpp | 2 +- .../Kalimdor/Maraudon/boss_noxxion.cpp | 2 +- .../Maraudon/boss_princess_theradras.cpp | 2 +- .../Kalimdor/Maraudon/instance_maraudon.cpp | 2 +- .../OnyxiasLair/instance_onyxias_lair.cpp | 2 +- .../RagefireChasm/instance_ragefire_chasm.cpp | 2 +- .../boss_amnennar_the_coldbringer.cpp | 2 +- .../RazorfenKraul/instance_razorfen_kraul.cpp | 2 +- .../Kalimdor/RazorfenKraul/razorfen_kraul.cpp | 4 +-- .../instance_ruins_of_ahnqiraj.cpp | 2 +- .../TempleOfAhnQiraj/boss_fankriss.cpp | 2 +- .../TempleOfAhnQiraj/boss_huhuran.cpp | 2 +- .../Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp | 2 +- .../TempleOfAhnQiraj/boss_sartura.cpp | 4 +-- .../TempleOfAhnQiraj/boss_twinemperors.cpp | 4 +-- .../instance_temple_of_ahnqiraj.cpp | 2 +- .../instance_wailing_caverns.cpp | 2 +- .../Kalimdor/ZulFarrak/instance_zulfarrak.cpp | 2 +- src/server/scripts/Kalimdor/boss_azuregos.cpp | 2 +- .../scripts/Kalimdor/zone_ashenvale.cpp | 2 +- src/server/scripts/Kalimdor/zone_azshara.cpp | 6 ++-- .../scripts/Kalimdor/zone_azuremyst_isle.cpp | 10 +++--- .../scripts/Kalimdor/zone_bloodmyst_isle.cpp | 4 +-- .../scripts/Kalimdor/zone_darkshore.cpp | 2 +- src/server/scripts/Kalimdor/zone_desolace.cpp | 2 +- src/server/scripts/Kalimdor/zone_durotar.cpp | 10 +++--- .../scripts/Kalimdor/zone_moonglade.cpp | 2 +- src/server/scripts/Kalimdor/zone_mulgore.cpp | 4 +-- .../scripts/Kalimdor/zone_orgrimmar.cpp | 4 +-- src/server/scripts/Kalimdor/zone_silithus.cpp | 6 ++-- .../Kalimdor/zone_stonetalon_mountains.cpp | 2 +- src/server/scripts/Kalimdor/zone_tanaris.cpp | 6 ++-- .../scripts/Kalimdor/zone_the_barrens.cpp | 2 +- .../Kalimdor/zone_thousand_needles.cpp | 2 +- .../scripts/Kalimdor/zone_thunder_bluff.cpp | 2 +- .../scripts/Kalimdor/zone_ungoro_crater.cpp | 2 +- .../scripts/Kalimdor/zone_winterspring.cpp | 2 +- .../AzjolNerub/Ahnkahet/boss_amanitar.cpp | 2 +- .../AzjolNerub/Ahnkahet/boss_elder_nadox.cpp | 2 +- .../boss_krikthir_the_gatewatcher.cpp | 12 +++---- .../ObsidianSanctum/boss_sartharion.cpp | 6 ++-- .../instance_obsidian_sanctum.cpp | 2 +- .../RubySanctum/boss_halion.cpp | 2 +- .../boss_argent_challenge.cpp | 2 +- .../TrialOfTheChampion/boss_black_knight.cpp | 2 +- .../instance_trial_of_the_champion.cpp | 2 +- .../boss_faction_champions.cpp | 32 +++++++++---------- .../TrialOfTheCrusader/boss_lord_jaraxxus.cpp | 2 +- .../boss_northrend_beasts.cpp | 2 +- .../TrialOfTheCrusader/boss_twin_valkyr.cpp | 6 ++-- .../instance_trial_of_the_crusader.cpp | 2 +- .../Northrend/DraktharonKeep/boss_novos.cpp | 6 ++-- .../HallsOfReflection/boss_falric.cpp | 2 +- .../HallsOfReflection/boss_marwyn.cpp | 2 +- .../HallsOfReflection/halls_of_reflection.cpp | 6 ++-- .../instance_halls_of_reflection.cpp | 2 +- .../Northrend/Gundrak/boss_slad_ran.cpp | 4 +-- .../boss_blood_queen_lana_thel.cpp | 2 +- .../boss_lady_deathwhisper.cpp | 4 +-- .../boss_professor_putricide.cpp | 2 +- .../IcecrownCitadel/boss_the_lich_king.cpp | 2 +- .../IcecrownCitadel/icecrown_citadel.cpp | 4 +-- .../Northrend/Naxxramas/boss_anubrekhan.cpp | 2 +- .../Northrend/Naxxramas/boss_gothik.cpp | 4 +-- .../Northrend/Naxxramas/boss_heigan.cpp | 2 +- .../Northrend/Naxxramas/boss_kelthuzad.cpp | 2 +- .../Northrend/Naxxramas/boss_maexxna.cpp | 4 +-- .../scripts/Northrend/Naxxramas/boss_noth.cpp | 2 +- .../Northrend/Naxxramas/boss_patchwerk.cpp | 2 +- .../Northrend/Naxxramas/boss_razuvious.cpp | 2 +- .../Nexus/Nexus/boss_commander_kolurg.cpp | 2 +- .../Nexus/Nexus/boss_commander_stoutbeard.cpp | 2 +- .../Northrend/Nexus/Nexus/boss_ormorok.cpp | 6 ++-- .../Northrend/Nexus/Nexus/instance_nexus.cpp | 2 +- .../Northrend/Nexus/Oculus/boss_drakos.cpp | 4 +-- .../Northrend/Nexus/Oculus/boss_urom.cpp | 2 +- .../Northrend/Nexus/Oculus/boss_varos.cpp | 4 +-- .../Nexus/Oculus/instance_oculus.cpp | 2 +- .../Ulduar/boss_algalon_the_observer.cpp | 4 +-- .../Ulduar/Ulduar/boss_flame_leviathan.cpp | 10 +++--- .../Northrend/Ulduar/Ulduar/boss_kologarn.cpp | 2 +- .../Ulduar/Ulduar/boss_razorscale.cpp | 2 +- .../UtgardeKeep/UtgardeKeep/boss_keleseth.cpp | 4 +-- .../UtgardeKeep/boss_skarvald_dalronn.cpp | 2 +- .../instance_utgarde_pinnacle.cpp | 2 +- .../VaultOfArchavon/boss_toravon.cpp | 2 +- .../VioletHold/instance_violet_hold.cpp | 2 +- .../scripts/Northrend/isle_of_conquest.cpp | 2 +- .../scripts/Northrend/zone_borean_tundra.cpp | 30 ++++++++--------- .../scripts/Northrend/zone_grizzly_hills.cpp | 10 +++--- .../scripts/Northrend/zone_icecrown.cpp | 2 +- .../scripts/Northrend/zone_sholazar_basin.cpp | 4 +-- .../scripts/Northrend/zone_storm_peaks.cpp | 8 ++--- src/server/scripts/Northrend/zone_zuldrak.cpp | 18 +++++------ src/server/scripts/OutdoorPvP/OutdoorPvPZM.h | 2 +- .../AuchenaiCrypts/boss_exarch_maladaar.cpp | 4 +-- .../ManaTombs/boss_nexusprince_shaffar.cpp | 4 +-- .../Outland/BlackTemple/black_temple.cpp | 2 +- .../Outland/BlackTemple/boss_illidan.cpp | 10 +++--- .../BlackTemple/boss_reliquary_of_souls.cpp | 8 ++--- .../Outland/BlackTemple/boss_supremus.cpp | 2 +- .../BlackTemple/boss_teron_gorefiend.cpp | 4 +-- .../Outland/BlackTemple/illidari_council.cpp | 8 ++--- .../boss_leotheras_the_blind.cpp | 2 +- .../SerpentShrine/boss_lurker_below.cpp | 2 +- .../boss_morogrim_tidewalker.cpp | 2 +- .../SteamVault/boss_hydromancer_thespia.cpp | 2 +- .../TheSlavePens/instance_the_slave_pens.cpp | 2 +- .../TheUnderbog/boss_hungarfen.cpp | 2 +- .../TheUnderbog/instance_the_underbog.cpp | 2 +- .../BloodFurnace/boss_broggok.cpp | 2 +- .../BloodFurnace/boss_kelidan_the_breaker.cpp | 2 +- .../BloodFurnace/instance_blood_furnace.cpp | 4 +-- .../boss_vazruden_the_herald.cpp | 2 +- .../instance_hellfire_ramparts.cpp | 2 +- .../ShatteredHalls/boss_nethekurse.cpp | 2 +- .../Outland/TempestKeep/Eye/boss_alar.cpp | 2 +- .../Outland/TempestKeep/Eye/boss_kaelthas.cpp | 12 +++---- .../TempestKeep/Eye/instance_the_eye.cpp | 2 +- .../Outland/TempestKeep/Eye/the_eye.cpp | 2 +- .../Mechanar/boss_gatewatcher_gyrokill.cpp | 4 +-- .../Mechanar/boss_gatewatcher_ironhand.cpp | 4 +-- .../Mechanar/boss_nethermancer_sepethrea.cpp | 4 +-- .../boss_pathaleon_the_calculator.cpp | 4 +-- .../Outland/TempestKeep/arcatraz/arcatraz.cpp | 2 +- .../arcatraz/boss_harbinger_skyriss.cpp | 2 +- .../arcatraz/instance_arcatraz.cpp | 2 +- .../Outland/zone_blades_edge_mountains.cpp | 8 ++--- .../Outland/zone_hellfire_peninsula.cpp | 6 ++-- src/server/scripts/Outland/zone_nagrand.cpp | 4 +-- .../scripts/Outland/zone_netherstorm.cpp | 8 ++--- .../Outland/zone_shadowmoon_valley.cpp | 16 +++++----- .../scripts/Outland/zone_shattrath_city.cpp | 4 +-- .../scripts/Outland/zone_terokkar_forest.cpp | 14 ++++---- .../scripts/Outland/zone_zangarmarsh.cpp | 2 +- src/server/scripts/Spells/spell_dk.cpp | 2 +- src/server/scripts/Spells/spell_holiday.cpp | 2 +- src/server/scripts/Spells/spell_item.cpp | 10 +++--- .../scripts/World/achievement_scripts.cpp | 2 +- .../scripts/World/areatrigger_scripts.cpp | 2 +- src/server/scripts/World/go_scripts.cpp | 2 +- src/server/scripts/World/guards.cpp | 6 ++-- src/server/scripts/World/item_scripts.cpp | 2 +- .../scripts/World/mob_generic_creature.cpp | 4 +-- src/server/scripts/World/npcs_special.cpp | 20 ++++++------ 273 files changed, 494 insertions(+), 495 deletions(-) diff --git a/sql/updates/world/2013_10_20_00_world_conditions.sql b/sql/updates/world/2013_10_20_00_world_conditions.sql index 9d25ecd5064..cac106ade39 100644 --- a/sql/updates/world/2013_10_20_00_world_conditions.sql +++ b/sql/updates/world/2013_10_20_00_world_conditions.sql @@ -181,4 +181,4 @@ INSERT INTO `conditions` (SourceTypeOrReferenceId, SourceGroup, SourceEntry, Sou -- NPC ID: 28474, Name: Amal'thazad, Menu-ID: 9693, Trainer-Classmask: 32, Text-ID1: 13174, Trainer-Option: 0, Talent-Option: 1, Dualspec-Option: 2 (15, @MENU17, @TRAINEROPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'), (15, @MENU17, @TALENTOPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'), -(15, @MENU17, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'); \ No newline at end of file +(15, @MENU17, @DUALOPT, 0, 0, 15, 0, @CLASSMASK_DK, 0, 0, 0, 0, 0, '', 'Show gossip option if player is a Death Knight'); diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp index 1c0949398b9..fda34586f0c 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -263,7 +263,6 @@ public: // Get ALL the variables! Player* playerTarget; uint32 phase = 0; - uint32 groupCounter = 0; uint64 guidTarget; std::string nameTarget; std::string zoneName; diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp index 1b5a42a83ef..6dbcdffca72 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp @@ -50,7 +50,7 @@ public: struct npc_water_elementalAI : public ScriptedAI { - npc_water_elementalAI(Creature* creature) : ScriptedAI(creature) {} + npc_water_elementalAI(Creature* creature) : ScriptedAI(creature) { } uint32 waterBoltTimer; uint64 balindaGUID; @@ -99,7 +99,7 @@ public: struct boss_balindaAI : public ScriptedAI { - boss_balindaAI(Creature* creature) : ScriptedAI(creature), summons(me) {} + boss_balindaAI(Creature* creature) : ScriptedAI(creature), summons(me) { } uint32 arcaneExplosionTimer; uint32 coneOfColdTimer; diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp index 8bddff621fa..7559d71bf78 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp @@ -45,7 +45,7 @@ public: struct boss_drektharAI : public ScriptedAI { - boss_drektharAI(Creature* creature) : ScriptedAI(creature) {} + boss_drektharAI(Creature* creature) : ScriptedAI(creature) { } uint32 WhirlwindTimer; uint32 Whirlwind2Timer; diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp index 1dcf70d28b9..4f91e57be50 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp @@ -40,7 +40,7 @@ public: struct boss_galvangarAI : public ScriptedAI { - boss_galvangarAI(Creature* creature) : ScriptedAI(creature) {} + boss_galvangarAI(Creature* creature) : ScriptedAI(creature) { } uint32 CleaveTimer; uint32 FrighteningShoutTimer; diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp index f2ba479ac86..0e5370f0f07 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp @@ -42,7 +42,7 @@ public: struct boss_vanndarAI : public ScriptedAI { - boss_vanndarAI(Creature* creature) : ScriptedAI(creature) {} + boss_vanndarAI(Creature* creature) : ScriptedAI(creature) { } uint32 AvatarTimer; uint32 ThunderclapTimer; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index e9a6b15dcf8..89b4dc5324f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -359,7 +359,7 @@ public: struct npc_phalanxAI : public ScriptedAI { - npc_phalanxAI(Creature* creature) : ScriptedAI(creature) {} + npc_phalanxAI(Creature* creature) : ScriptedAI(creature) { } uint32 ThunderClap_Timer; uint32 FireballVolley_Timer; @@ -613,7 +613,7 @@ public: struct npc_dughal_stormwingAI : public npc_escortAI { - npc_dughal_stormwingAI(Creature* creature) : npc_escortAI(creature) {} + npc_dughal_stormwingAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -1125,7 +1125,7 @@ public: struct npc_tobias_seecherAI : public npc_escortAI { - npc_tobias_seecherAI(Creature* creature) : npc_escortAI(creature) {} + npc_tobias_seecherAI(Creature* creature) : npc_escortAI(creature) { } void EnterCombat(Unit* who) OVERRIDE {} void Reset() OVERRIDE {} diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp index 3a4f734429c..feadc006daf 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp @@ -36,7 +36,7 @@ public: struct boss_ambassador_flamelashAI : public ScriptedAI { - boss_ambassador_flamelashAI(Creature* creature) : ScriptedAI(creature) {} + boss_ambassador_flamelashAI(Creature* creature) : ScriptedAI(creature) { } uint32 FireBlast_Timer; uint32 Spirit_Timer; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp index 63a94ca616a..83869ddc631 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp @@ -40,7 +40,7 @@ public: struct boss_anubshiahAI : public ScriptedAI { - boss_anubshiahAI(Creature* creature) : ScriptedAI(creature) {} + boss_anubshiahAI(Creature* creature) : ScriptedAI(creature) { } uint32 ShadowBolt_Timer; uint32 CurseOfTongues_Timer; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp index 80bfa651301..40d176b574b 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp @@ -38,7 +38,7 @@ public: struct boss_general_angerforgeAI : public ScriptedAI { - boss_general_angerforgeAI(Creature* creature) : ScriptedAI(creature) {} + boss_general_angerforgeAI(Creature* creature) : ScriptedAI(creature) { } uint32 MightyBlow_Timer; uint32 HamString_Timer; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp index d79c4d191b6..f865a6f6742 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp @@ -37,7 +37,7 @@ public: struct boss_gorosh_the_dervishAI : public ScriptedAI { - boss_gorosh_the_dervishAI(Creature* creature) : ScriptedAI(creature) {} + boss_gorosh_the_dervishAI(Creature* creature) : ScriptedAI(creature) { } uint32 WhirlWind_Timer; uint32 MortalStrike_Timer; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp index 504fca44c4c..3ac15bfcab4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp @@ -38,7 +38,7 @@ public: struct boss_grizzleAI : public ScriptedAI { - boss_grizzleAI(Creature* creature) : ScriptedAI(creature) {} + boss_grizzleAI(Creature* creature) : ScriptedAI(creature) { } uint32 GroundTremor_Timer; uint32 Frenzy_Timer; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp index 7a98cc321dc..f381a1e2a9c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp @@ -39,7 +39,7 @@ public: struct boss_high_interrogator_gerstahnAI : public ScriptedAI { - boss_high_interrogator_gerstahnAI(Creature* creature) : ScriptedAI(creature) {} + boss_high_interrogator_gerstahnAI(Creature* creature) : ScriptedAI(creature) { } uint32 ShadowWordPain_Timer; uint32 ManaBurn_Timer; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp index 998e7b17897..2c1d078fd36 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp @@ -42,7 +42,7 @@ public: struct boss_magmusAI : public ScriptedAI { - boss_magmusAI(Creature* creature) : ScriptedAI(creature) {} + boss_magmusAI(Creature* creature) : ScriptedAI(creature) { } uint32 FieryBurst_Timer; uint32 WarStomp_Timer; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp index 9021649a61e..21c357d3b31 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp @@ -41,7 +41,7 @@ public: struct boss_moira_bronzebeardAI : public ScriptedAI { - boss_moira_bronzebeardAI(Creature* creature) : ScriptedAI(creature) {} + boss_moira_bronzebeardAI(Creature* creature) : ScriptedAI(creature) { } uint32 Heal_Timer; uint32 MindBlast_Timer; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp index a080e117583..fbec94887b2 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp @@ -76,7 +76,7 @@ public: struct instance_blackrock_depths_InstanceMapScript : public InstanceScript { - instance_blackrock_depths_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_blackrock_depths_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 encounter[MAX_ENCOUNTER]; std::string str_data; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp index 59581204b05..009c22e40b3 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp @@ -43,7 +43,7 @@ public: struct boss_drakkisathAI : public BossAI { - boss_drakkisathAI(Creature* creature) : BossAI(creature, DATA_GENERAL_DRAKKISATH) {} + boss_drakkisathAI(Creature* creature) : BossAI(creature, DATA_GENERAL_DRAKKISATH) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp index f1bd81f2e6a..9f22c2c1e85 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp @@ -46,7 +46,7 @@ public: struct boss_gizrul_the_slavenerAI : public BossAI { - boss_gizrul_the_slavenerAI(Creature* creature) : BossAI(creature, DATA_GIZRUL_THE_SLAVENER) {} + boss_gizrul_the_slavenerAI(Creature* creature) : BossAI(creature, DATA_GIZRUL_THE_SLAVENER) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp index 630d6ff2a0d..b79a6e4733e 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp @@ -45,7 +45,7 @@ public: struct boss_halyconAI : public BossAI { - boss_halyconAI(Creature* creature) : BossAI(creature, DATA_HALYCON) {} + boss_halyconAI(Creature* creature) : BossAI(creature, DATA_HALYCON) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp index 54ed5d44e34..5b5e9bc082a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp @@ -44,7 +44,7 @@ public: struct boss_highlordomokkAI : public BossAI { - boss_highlordomokkAI(Creature* creature) : BossAI(creature, DATA_HIGHLORD_OMOKK) {} + boss_highlordomokkAI(Creature* creature) : BossAI(creature, DATA_HIGHLORD_OMOKK) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp index b54c8f11f34..26540eb38a6 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp @@ -46,7 +46,7 @@ public: struct boss_lord_valthalakAI : public BossAI { - boss_lord_valthalakAI(Creature* creature) : BossAI(creature, DATA_LORD_VALTHALAK) {} + boss_lord_valthalakAI(Creature* creature) : BossAI(creature, DATA_LORD_VALTHALAK) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp index 608cb75bbb2..f9b0441af77 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp @@ -45,7 +45,7 @@ public: struct boss_mothersmolderwebAI : public BossAI { - boss_mothersmolderwebAI(Creature* creature) : BossAI(creature, DATA_MOTHER_SMOLDERWEB) {} + boss_mothersmolderwebAI(Creature* creature) : BossAI(creature, DATA_MOTHER_SMOLDERWEB) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp index 2b68b640720..2a448898813 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp @@ -57,7 +57,7 @@ public: struct boss_overlordwyrmthalakAI : public BossAI { - boss_overlordwyrmthalakAI(Creature* creature) : BossAI(creature, DATA_OVERLORD_WYRMTHALAK) {} + boss_overlordwyrmthalakAI(Creature* creature) : BossAI(creature, DATA_OVERLORD_WYRMTHALAK) { } bool Summoned; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp index 57c3dfac7ff..1c40385c0fd 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp @@ -75,7 +75,7 @@ public: struct boss_pyroguard_emberseerAI : public BossAI { - boss_pyroguard_emberseerAI(Creature* creature) : BossAI(creature, DATA_PYROGAURD_EMBERSEER) {} + boss_pyroguard_emberseerAI(Creature* creature) : BossAI(creature, DATA_PYROGAURD_EMBERSEER) { } void Reset() OVERRIDE { @@ -340,7 +340,7 @@ public: struct npc_blackhand_incarceratorAI : public ScriptedAI { - npc_blackhand_incarceratorAI(Creature* creature) : ScriptedAI(creature) {} + npc_blackhand_incarceratorAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp index a20822839e6..4dbade9e07b 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp @@ -40,7 +40,7 @@ public: struct boss_quatermasterzigrisAI : public BossAI { - boss_quatermasterzigrisAI(Creature* creature) : BossAI(creature, DATA_QUARTERMASTER_ZIGRIS) {} + boss_quatermasterzigrisAI(Creature* creature) : BossAI(creature, DATA_QUARTERMASTER_ZIGRIS) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp index 1936e5e72d0..7fcb201a5ad 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp @@ -46,7 +46,7 @@ public: struct boss_shadowvoshAI : public BossAI { - boss_shadowvoshAI(Creature* creature) : BossAI(creature, DATA_SHADOW_HUNTER_VOSHGAJIN) {} + boss_shadowvoshAI(Creature* creature) : BossAI(creature, DATA_SHADOW_HUNTER_VOSHGAJIN) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp index c4abaac158c..8cb0dfbce64 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp @@ -46,7 +46,7 @@ public: struct boss_thebeastAI : public BossAI { - boss_thebeastAI(Creature* creature) : BossAI(creature, DATA_THE_BEAST) {} + boss_thebeastAI(Creature* creature) : BossAI(creature, DATA_THE_BEAST) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp index afee357aad5..76b673eed06 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp @@ -46,7 +46,7 @@ public: struct boss_urok_doomhowlAI : public BossAI { - boss_urok_doomhowlAI(Creature* creature) : BossAI(creature, DATA_UROK_DOOMHOWL) {} + boss_urok_doomhowlAI(Creature* creature) : BossAI(creature, DATA_UROK_DOOMHOWL) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp index e3423fd02b6..ccd74b204ce 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp @@ -52,7 +52,7 @@ public: struct boss_warmastervooneAI : public BossAI { - boss_warmastervooneAI(Creature* creature) : BossAI(creature, DATA_WARMASTER_VOONE) {} + boss_warmastervooneAI(Creature* creature) : BossAI(creature, DATA_WARMASTER_VOONE) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp index 5eabc11618b..420c9fcc290 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp @@ -108,7 +108,7 @@ class npc_firesworn : public CreatureScript struct npc_fireswornAI : public ScriptedAI { - npc_fireswornAI(Creature* creature) : ScriptedAI(creature) {} + npc_fireswornAI(Creature* creature) : ScriptedAI(creature) { } uint32 immolateTimer; diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp index 7e7d1b72415..f029e8505d4 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp @@ -57,7 +57,7 @@ class instance_deadmines : public InstanceMapScript struct instance_deadmines_InstanceMapScript : public InstanceScript { - instance_deadmines_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_deadmines_InstanceMapScript(Map* map) : InstanceScript(map) { } uint64 FactoryDoorGUID; uint64 IronCladDoorGUID; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp index 6599af7c2aa..04b9ebffbf7 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp @@ -60,7 +60,7 @@ public: struct boss_curatorAI : public ScriptedAI { - boss_curatorAI(Creature* creature) : ScriptedAI(creature) {} + boss_curatorAI(Creature* creature) : ScriptedAI(creature) { } uint32 AddTimer; uint32 HatefulBoltTimer; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp index 0a9aee6269c..a04953cb3f5 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp @@ -52,7 +52,7 @@ public: struct boss_maiden_of_virtueAI : public ScriptedAI { - boss_maiden_of_virtueAI(Creature* creature) : ScriptedAI(creature) {} + boss_maiden_of_virtueAI(Creature* creature) : ScriptedAI(creature) { } uint32 Repentance_Timer; uint32 Holyfire_Timer; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index 0b11d425e85..48a6712c4ae 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -126,7 +126,7 @@ public: struct boss_midnightAI : public ScriptedAI { - boss_midnightAI(Creature* creature) : ScriptedAI(creature) {} + boss_midnightAI(Creature* creature) : ScriptedAI(creature) { } uint64 Attumen; uint8 Phase; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp index 780f781f58d..ff85c53de7a 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp @@ -399,7 +399,7 @@ public: struct boss_baroness_dorothea_millstipeAI : public boss_moroes_guestAI { //Shadow Priest - boss_baroness_dorothea_millstipeAI(Creature* creature) : boss_moroes_guestAI(creature) {} + boss_baroness_dorothea_millstipeAI(Creature* creature) : boss_moroes_guestAI(creature) { } uint32 ManaBurn_Timer; uint32 MindFlay_Timer; @@ -519,7 +519,7 @@ public: struct boss_lady_catriona_von_indiAI : public boss_moroes_guestAI { //Holy Priest - boss_lady_catriona_von_indiAI(Creature* creature) : boss_moroes_guestAI(creature) {} + boss_lady_catriona_von_indiAI(Creature* creature) : boss_moroes_guestAI(creature) { } uint32 DispelMagic_Timer; uint32 GreaterHeal_Timer; @@ -663,7 +663,7 @@ public: struct boss_lord_robin_darisAI : public boss_moroes_guestAI { //Arms Warr - boss_lord_robin_darisAI(Creature* creature) : boss_moroes_guestAI(creature) {} + boss_lord_robin_darisAI(Creature* creature) : boss_moroes_guestAI(creature) { } uint32 Hamstring_Timer; uint32 MortalStrike_Timer; @@ -719,7 +719,7 @@ public: struct boss_lord_crispin_ferenceAI : public boss_moroes_guestAI { //Arms Warr - boss_lord_crispin_ferenceAI(Creature* creature) : boss_moroes_guestAI(creature) {} + boss_lord_crispin_ferenceAI(Creature* creature) : boss_moroes_guestAI(creature) { } uint32 Disarm_Timer; uint32 HeroicStrike_Timer; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 8f292f2d008..762547e551c 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -110,7 +110,7 @@ public: struct netherspite_infernalAI : public ScriptedAI { netherspite_infernalAI(Creature* creature) : ScriptedAI(creature), - HellfireTimer(0), CleanupTimer(0), malchezaar(0), point(NULL) {} + HellfireTimer(0), CleanupTimer(0), malchezaar(0), point(NULL) { } uint32 HellfireTimer; uint32 CleanupTimer; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index 7999524f853..66489fb8840 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -520,7 +520,7 @@ public: struct water_elementalAI : public ScriptedAI { - water_elementalAI(Creature* creature) : ScriptedAI(creature) {} + water_elementalAI(Creature* creature) : ScriptedAI(creature) { } uint32 CastTimer; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp index f348cf95a82..8be6b8b5739 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp @@ -148,7 +148,7 @@ public: struct npc_demon_chainAI : public ScriptedAI { - npc_demon_chainAI(Creature* creature) : ScriptedAI(creature) {} + npc_demon_chainAI(Creature* creature) : ScriptedAI(creature) { } uint64 SacrificeGUID; @@ -220,7 +220,7 @@ public: struct npc_fiendish_impAI : public ScriptedAI { - npc_fiendish_impAI(Creature* creature) : ScriptedAI(creature) {} + npc_fiendish_impAI(Creature* creature) : ScriptedAI(creature) { } uint32 FireboltTimer; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index 29ae4890fdc..383cb9182c7 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -238,7 +238,7 @@ public: struct npc_titoAI : public ScriptedAI { - npc_titoAI(Creature* creature) : ScriptedAI(creature) {} + npc_titoAI(Creature* creature) : ScriptedAI(creature) { } uint64 DorotheeGUID; uint32 YipTimer; @@ -724,7 +724,7 @@ public: struct npc_cycloneAI : public ScriptedAI { - npc_cycloneAI(Creature* creature) : ScriptedAI(creature) {} + npc_cycloneAI(Creature* creature) : ScriptedAI(creature) { } uint32 MoveTimer; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index 82dc85861da..bf213e68f10 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -56,7 +56,7 @@ public: struct instance_karazhan_InstanceMapScript : public InstanceScript { - instance_karazhan_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_karazhan_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 m_auiEncounter[MAX_ENCOUNTER]; std::string strSaveData; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 74d65480611..dc8f8bb185a 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -600,7 +600,7 @@ public: struct npc_felkael_phoenix_eggAI : public ScriptedAI { - npc_felkael_phoenix_eggAI(Creature* creature) : ScriptedAI(creature) {} + npc_felkael_phoenix_eggAI(Creature* creature) : ScriptedAI(creature) { } uint32 HatchTimer; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp index 03c06664edf..c8ab4a147ff 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp @@ -510,7 +510,7 @@ public: struct boss_kagani_nightstrikeAI : public boss_priestess_lackey_commonAI { //Rogue - boss_kagani_nightstrikeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) {} + boss_kagani_nightstrikeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } uint32 Gouge_Timer; uint32 Kick_Timer; @@ -614,7 +614,7 @@ public: struct boss_ellris_duskhallowAI : public boss_priestess_lackey_commonAI { //Warlock - boss_ellris_duskhallowAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) {} + boss_ellris_duskhallowAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } uint32 Immolate_Timer; uint32 Shadow_Bolt_Timer; @@ -705,7 +705,7 @@ public: struct boss_eramas_brightblazeAI : public boss_priestess_lackey_commonAI { //Monk - boss_eramas_brightblazeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) {} + boss_eramas_brightblazeAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } uint32 Knockdown_Timer; uint32 Snap_Kick_Timer; @@ -766,7 +766,7 @@ public: struct boss_yazzaiAI : public boss_priestess_lackey_commonAI { //Mage - boss_yazzaiAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) {} + boss_yazzaiAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } bool HasIceBlocked; @@ -896,7 +896,7 @@ public: struct boss_warlord_salarisAI : public boss_priestess_lackey_commonAI { //Warrior - boss_warlord_salarisAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) {} + boss_warlord_salarisAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } uint32 Intercept_Stun_Timer; uint32 Disarm_Timer; @@ -1127,7 +1127,7 @@ public: struct boss_apokoAI : public boss_priestess_lackey_commonAI { //Shaman - boss_apokoAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) {} + boss_apokoAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } uint32 Totem_Timer; uint8 Totem_Amount; @@ -1225,7 +1225,7 @@ public: struct boss_zelfanAI : public boss_priestess_lackey_commonAI { //Engineer - boss_zelfanAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) {} + boss_zelfanAI(Creature* creature) : boss_priestess_lackey_commonAI(creature) { } uint32 Goblin_Dragon_Gun_Timer; uint32 Rocket_Launch_Timer; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp index 668f7ec58f4..a514f723900 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp @@ -332,7 +332,7 @@ public: struct npc_fel_crystalAI : public ScriptedAI { - npc_fel_crystalAI(Creature* creature) : ScriptedAI(creature) {} + npc_fel_crystalAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} void EnterCombat(Unit* /*who*/) OVERRIDE {} diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp index 54323b5c133..f7abb46b9b7 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp @@ -62,7 +62,7 @@ public: struct instance_magisters_terrace_InstanceMapScript : public InstanceScript { - instance_magisters_terrace_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_magisters_terrace_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 Encounter[MAX_ENCOUNTER]; uint32 DelrissaDeathCount; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp index 6fcc050a55e..c9e530bce56 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp @@ -115,7 +115,7 @@ public: struct npc_kalecgosAI : public ScriptedAI { - npc_kalecgosAI(Creature* creature) : ScriptedAI(creature) {} + npc_kalecgosAI(Creature* creature) : ScriptedAI(creature) { } uint32 m_uiTransformTimer; diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 7feb0e47926..65577d9e770 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -288,7 +288,7 @@ public: struct npc_unworthy_initiate_anchorAI : public PassiveAI { - npc_unworthy_initiate_anchorAI(Creature* creature) : PassiveAI(creature), prisonerGUID(0) {} + npc_unworthy_initiate_anchorAI(Creature* creature) : PassiveAI(creature), prisonerGUID(0) { } uint64 prisonerGUID; @@ -615,7 +615,7 @@ public: struct npc_salanar_the_horsemanAI : public ScriptedAI { - npc_salanar_the_horsemanAI(Creature* creature) : ScriptedAI(creature) {} + npc_salanar_the_horsemanAI(Creature* creature) : ScriptedAI(creature) { } void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE { @@ -687,7 +687,7 @@ public: struct npc_ros_dark_riderAI : public ScriptedAI { - npc_ros_dark_riderAI(Creature* creature) : ScriptedAI(creature) {} + npc_ros_dark_riderAI(Creature* creature) : ScriptedAI(creature) { } void EnterCombat(Unit* /*who*/) OVERRIDE { @@ -742,7 +742,7 @@ public: struct npc_dkc1_gothikAI : public ScriptedAI { - npc_dkc1_gothikAI(Creature* creature) : ScriptedAI(creature) {} + npc_dkc1_gothikAI(Creature* creature) : ScriptedAI(creature) { } void MoveInLineOfSight(Unit* who) OVERRIDE diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp index ba6f0f23656..20a7ccedb17 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp @@ -51,7 +51,7 @@ public: struct npc_crusade_persuadedAI : public ScriptedAI { - npc_crusade_persuadedAI(Creature* creature) : ScriptedAI(creature) {} + npc_crusade_persuadedAI(Creature* creature) : ScriptedAI(creature) { } uint32 speechTimer; uint32 speechCounter; @@ -375,7 +375,7 @@ public: struct npc_scarlet_courierAI : public ScriptedAI { - npc_scarlet_courierAI(Creature* creature) : ScriptedAI(creature) {} + npc_scarlet_courierAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiStage; uint32 uiStage_timer; @@ -467,7 +467,7 @@ public: struct npc_high_inquisitor_valrothAI : public ScriptedAI { - npc_high_inquisitor_valrothAI(Creature* creature) : ScriptedAI(creature) {} + npc_high_inquisitor_valrothAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiRenew_timer; uint32 uiInquisitor_Penance_timer; @@ -603,7 +603,7 @@ public: struct npc_a_special_surpriseAI : public ScriptedAI { - npc_a_special_surpriseAI(Creature* creature) : ScriptedAI(creature) {} + npc_a_special_surpriseAI(Creature* creature) : ScriptedAI(creature) { } uint32 ExecuteSpeech_Timer; uint32 ExecuteSpeech_Counter; diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index ab1367ed684..52c791a2fcb 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -1679,7 +1679,7 @@ public: { npc_the_lich_king_tirion_dawnAI(Creature* creature) : ScriptedAI(creature) { Reset(); } void Reset() OVERRIDE {} - void AttackStart(Unit* /*who*/) {} // very sample, just don't make them aggreesive OVERRIDE + void AttackStart(Unit* /*who*/) { } // very sample, just don't make them aggreesive OVERRIDE void UpdateAI(uint32 /*diff*/) OVERRIDE {} void JustDied(Unit* /*killer*/) OVERRIDE {} }; diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp index aa4be5d2523..2bb187692fa 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp @@ -46,7 +46,7 @@ public: struct npc_valkyr_battle_maidenAI : public PassiveAI { - npc_valkyr_battle_maidenAI(Creature* creature) : PassiveAI(creature) {} + npc_valkyr_battle_maidenAI(Creature* creature) : PassiveAI(creature) { } uint32 FlyBackTimer; float x, y, z; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp index 4cf6c069648..694fdf9d84e 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp @@ -53,7 +53,7 @@ public: struct boss_arcanist_doanAI : public ScriptedAI { - boss_arcanist_doanAI(Creature* creature) : ScriptedAI(creature) {} + boss_arcanist_doanAI(Creature* creature) : ScriptedAI(creature) { } uint32 Polymorph_Timer; uint32 AoESilence_Timer; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp index a88ff8b2977..83269f43f25 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp @@ -45,7 +45,7 @@ public: struct boss_azshir_the_sleeplessAI : public ScriptedAI { - boss_azshir_the_sleeplessAI(Creature* creature) : ScriptedAI(creature) {} + boss_azshir_the_sleeplessAI(Creature* creature) : ScriptedAI(creature) { } uint32 SoulSiphon_Timer; uint32 CallOftheGrave_Timer; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp index f10ac0b5ba2..b3375d9448f 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp @@ -53,7 +53,7 @@ public: struct boss_bloodmage_thalnosAI : public ScriptedAI { - boss_bloodmage_thalnosAI(Creature* creature) : ScriptedAI(creature) {} + boss_bloodmage_thalnosAI(Creature* creature) : ScriptedAI(creature) { } bool HpYell; uint32 FlameShock_Timer; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index 1b5d0a80eda..10c208aa1e3 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -233,7 +233,7 @@ public: struct npc_headAI : public ScriptedAI { - npc_headAI(Creature* creature) : ScriptedAI(creature) {} + npc_headAI(Creature* creature) : ScriptedAI(creature) { } uint64 bodyGUID; @@ -796,7 +796,7 @@ public: struct npc_pulsing_pumpkinAI : public ScriptedAI { - npc_pulsing_pumpkinAI(Creature* creature) : ScriptedAI(creature) {} + npc_pulsing_pumpkinAI(Creature* creature) : ScriptedAI(creature) { } bool sprouted; uint64 debuffGUID; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp index 3c662fae9f8..45ae86b252b 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp @@ -62,7 +62,7 @@ public: struct boss_herodAI : public ScriptedAI { - boss_herodAI(Creature* creature) : ScriptedAI(creature) {} + boss_herodAI(Creature* creature) : ScriptedAI(creature) { } bool Enrage; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp index 38fb663a073..46680730f7e 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp @@ -48,7 +48,7 @@ public: struct boss_high_inquisitor_fairbanksAI : public ScriptedAI { - boss_high_inquisitor_fairbanksAI(Creature* creature) : ScriptedAI(creature) {} + boss_high_inquisitor_fairbanksAI(Creature* creature) : ScriptedAI(creature) { } uint32 CurseOfBlood_Timer; uint32 DispelMagic_Timer; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp index 10d60eb15cd..4a0d8ff4796 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp @@ -49,7 +49,7 @@ public: struct boss_houndmaster_lokseyAI : public ScriptedAI { - boss_houndmaster_lokseyAI(Creature* creature) : ScriptedAI(creature) {} + boss_houndmaster_lokseyAI(Creature* creature) : ScriptedAI(creature) { } uint32 BloodLust_Timer; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp index fcd0975fbc0..8e267319054 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp @@ -46,7 +46,7 @@ public: struct boss_scornAI : public ScriptedAI { - boss_scornAI(Creature* creature) : ScriptedAI(creature) {} + boss_scornAI(Creature* creature) : ScriptedAI(creature) { } uint32 LichSlap_Timer; uint32 FrostboltVolley_Timer; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp index 05664a946ed..b91a54e5afc 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp @@ -49,7 +49,7 @@ public: struct instance_scarlet_monastery_InstanceMapScript : public InstanceScript { - instance_scarlet_monastery_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_scarlet_monastery_InstanceMapScript(Map* map) : InstanceScript(map) { } uint64 PumpkinShrineGUID; uint64 HorsemanGUID; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp index cb6da60bf28..2277c53ae6b 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp @@ -54,7 +54,7 @@ class boss_darkmaster_gandling : public CreatureScript struct boss_darkmaster_gandlingAI : public BossAI { - boss_darkmaster_gandlingAI(Creature* creature) : BossAI(creature, DATA_DARKMASTERGANDLING) {} + boss_darkmaster_gandlingAI(Creature* creature) : BossAI(creature, DATA_DARKMASTERGANDLING) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp index 8ca8f04f33a..108dcc92f22 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp @@ -38,7 +38,7 @@ public: struct boss_death_knight_darkreaverAI : public ScriptedAI { - boss_death_knight_darkreaverAI(Creature* creature) : ScriptedAI(creature) {} + boss_death_knight_darkreaverAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp index 3dae50ebf44..bcf5e82bc66 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp @@ -51,7 +51,7 @@ class boss_doctor_theolen_krastinov : public CreatureScript struct boss_theolenkrastinovAI : public BossAI { - boss_theolenkrastinovAI(Creature* creature) : BossAI(creature, DATA_DOCTORTHEOLENKRASTINOV) {} + boss_theolenkrastinovAI(Creature* creature) : BossAI(creature, DATA_DOCTORTHEOLENKRASTINOV) { } void EnterCombat(Unit* /*who*/) OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp index 5da1bf14c7d..c3255ba9c65 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp @@ -48,7 +48,7 @@ class boss_illucia_barov : public CreatureScript struct boss_illuciabarovAI : public BossAI { - boss_illuciabarovAI(Creature* creature) : BossAI(creature, DATA_LADYILLUCIABAROV) {} + boss_illuciabarovAI(Creature* creature) : BossAI(creature, DATA_LADYILLUCIABAROV) { } void EnterCombat(Unit* /*who*/) OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp index c3bd97c9a0b..88f95df69c4 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp @@ -50,7 +50,7 @@ class boss_instructor_malicia : public CreatureScript struct boss_instructormaliciaAI : public BossAI { - boss_instructormaliciaAI(Creature* creature) : BossAI(creature, DATA_INSTRUCTORMALICIA) {} + boss_instructormaliciaAI(Creature* creature) : BossAI(creature, DATA_INSTRUCTORMALICIA) { } uint32 FlashCounter; uint32 TouchCounter; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp index ab259680c07..2663146317a 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp @@ -47,7 +47,7 @@ public: struct boss_jandicebarovAI : public ScriptedAI { - boss_jandicebarovAI(Creature* creature) : ScriptedAI(creature) {} + boss_jandicebarovAI(Creature* creature) : ScriptedAI(creature) { } uint32 CurseOfBlood_Timer; uint32 Illusion_Timer; @@ -169,7 +169,7 @@ public: struct npc_illusionofjandicebarovAI : public ScriptedAI { - npc_illusionofjandicebarovAI(Creature* creature) : ScriptedAI(creature) {} + npc_illusionofjandicebarovAI(Creature* creature) : ScriptedAI(creature) { } uint32 Cleave_Timer; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp index 0ba0ab4cb92..57cfeb7dc33 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp @@ -44,7 +44,7 @@ public: struct boss_kormokAI : public ScriptedAI { - boss_kormokAI(Creature* creature) : ScriptedAI(creature) {} + boss_kormokAI(Creature* creature) : ScriptedAI(creature) { } uint32 ShadowVolley_Timer; uint32 BoneShield_Timer; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp index 26028590f5c..e06c0d6bfbb 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp @@ -44,7 +44,7 @@ class boss_lord_alexei_barov : public CreatureScript struct boss_lordalexeibarovAI : public BossAI { - boss_lordalexeibarovAI(Creature* creature) : BossAI(creature, DATA_LORDALEXEIBAROV) {} + boss_lordalexeibarovAI(Creature* creature) : BossAI(creature, DATA_LORDALEXEIBAROV) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp index bc6646be633..f41f456d24a 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp @@ -48,7 +48,7 @@ class boss_lorekeeper_polkelt : public CreatureScript struct boss_lorekeeperpolkeltAI : public BossAI { - boss_lorekeeperpolkeltAI(Creature* creature) : BossAI(creature, DATA_LOREKEEPERPOLKELT) {} + boss_lorekeeperpolkeltAI(Creature* creature) : BossAI(creature, DATA_LOREKEEPERPOLKELT) { } void EnterCombat(Unit* /*who*/) OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp index 62922289821..e468c435c8d 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp @@ -48,7 +48,7 @@ public: struct boss_rasfrostAI : public ScriptedAI { - boss_rasfrostAI(Creature* creature) : ScriptedAI(creature) {} + boss_rasfrostAI(Creature* creature) : ScriptedAI(creature) { } uint32 IceArmor_Timer; uint32 Frostbolt_Timer; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp index 1e2c38fc487..9af473d4b4c 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp @@ -48,7 +48,7 @@ class boss_the_ravenian : public CreatureScript struct boss_theravenianAI : public BossAI { - boss_theravenianAI(Creature* creature) : BossAI(creature, DATA_THERAVENIAN) {} + boss_theravenianAI(Creature* creature) : BossAI(creature, DATA_THERAVENIAN) { } void EnterCombat(Unit* /*who*/) OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp index e426fb4ec11..395581b3562 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp @@ -51,7 +51,7 @@ public: struct boss_vectusAI : public ScriptedAI { - boss_vectusAI(Creature* creature) : ScriptedAI(creature) {} + boss_vectusAI(Creature* creature) : ScriptedAI(creature) { } uint32 m_uiFireShield_Timer; uint32 m_uiBlastWave_Timer; diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp index fde5bffd07a..8c022c98ba7 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp @@ -78,7 +78,7 @@ public: struct instance_shadowfang_keep_InstanceMapScript : public InstanceScript { - instance_shadowfang_keep_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_shadowfang_keep_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 m_auiEncounter[MAX_ENCOUNTER]; std::string str_data; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp index 319afb3deb2..42714c3f12e 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp @@ -92,7 +92,7 @@ public: struct boss_cannon_master_willeyAI : public ScriptedAI { - boss_cannon_master_willeyAI(Creature* creature) : ScriptedAI(creature) {} + boss_cannon_master_willeyAI(Creature* creature) : ScriptedAI(creature) { } uint32 KnockAway_Timer; uint32 Pummel_Timer; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp index 21320ed738f..5847f7b132b 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp @@ -81,7 +81,7 @@ public: struct boss_dathrohan_balnazzarAI : public ScriptedAI { - boss_dathrohan_balnazzarAI(Creature* creature) : ScriptedAI(creature) {} + boss_dathrohan_balnazzarAI(Creature* creature) : ScriptedAI(creature) { } uint32 m_uiCrusadersHammer_Timer; uint32 m_uiCrusaderStrike_Timer; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp index 1c5f0c72153..150d134da07 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp @@ -53,7 +53,7 @@ public: struct boss_magistrate_barthilasAI : public ScriptedAI { - boss_magistrate_barthilasAI(Creature* creature) : ScriptedAI(creature) {} + boss_magistrate_barthilasAI(Creature* creature) : ScriptedAI(creature) { } uint32 DrainingBlow_Timer; uint32 CrowdPummel_Timer; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp index 5f169ece0d5..98f4d9f8e4d 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp @@ -59,7 +59,7 @@ class boss_postmaster_malown : public CreatureScript struct boss_postmaster_malownAI : public BossAI { - boss_postmaster_malownAI(Creature* creature) : BossAI(creature, TYPE_MALOWN) {} + boss_postmaster_malownAI(Creature* creature) : BossAI(creature, TYPE_MALOWN) { } void Reset() OVERRIDE {} diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp index 020b14f4823..6d4ba8a1631 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp @@ -48,7 +48,7 @@ public: struct boss_timmy_the_cruelAI : public ScriptedAI { - boss_timmy_the_cruelAI(Creature* creature) : ScriptedAI(creature) {} + boss_timmy_the_cruelAI(Creature* creature) : ScriptedAI(creature) { } uint32 RavenousClaw_Timer; bool HasYelled; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp index ff2bc1cb15c..34b79473fb7 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp @@ -100,7 +100,7 @@ public: struct npc_freed_soulAI : public ScriptedAI { - npc_freed_soulAI(Creature* creature) : ScriptedAI(creature) {} + npc_freed_soulAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -142,7 +142,7 @@ public: struct npc_restless_soulAI : public ScriptedAI { - npc_restless_soulAI(Creature* creature) : ScriptedAI(creature) {} + npc_restless_soulAI(Creature* creature) : ScriptedAI(creature) { } uint64 Tagger; uint32 Die_Timer; @@ -224,7 +224,7 @@ public: struct npc_spectral_ghostly_citizenAI : public ScriptedAI { - npc_spectral_ghostly_citizenAI(Creature* creature) : ScriptedAI(creature) {} + npc_spectral_ghostly_citizenAI(Creature* creature) : ScriptedAI(creature) { } uint32 Die_Timer; bool Tagged; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index d402eccedd4..a84e89d61a3 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -675,7 +675,7 @@ public: struct npc_shadow_imageAI : public ScriptedAI { - npc_shadow_imageAI(Creature* creature) : ScriptedAI(creature) {} + npc_shadow_imageAI(Creature* creature) : ScriptedAI(creature) { } uint32 ShadowfuryTimer; uint32 KillTimer; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index 855ed46e5cf..2730d308828 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -1055,7 +1055,7 @@ public: struct npc_volatile_felfire_fiendAI : public ScriptedAI { - npc_volatile_felfire_fiendAI(Creature* creature) : ScriptedAI(creature) {} + npc_volatile_felfire_fiendAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiExplodeTimer; @@ -1256,7 +1256,7 @@ public: struct npc_sinster_reflectionAI : public ScriptedAI { - npc_sinster_reflectionAI(Creature* creature) : ScriptedAI(creature) {} + npc_sinster_reflectionAI(Creature* creature) : ScriptedAI(creature) { } uint8 victimClass; uint32 uiTimer[3]; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index c3d00ddba53..1753cc8ca10 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -464,7 +464,7 @@ public: struct npc_dark_fiendAI : public ScriptedAI { - npc_dark_fiendAI(Creature* creature) : ScriptedAI(creature) {} + npc_dark_fiendAI(Creature* creature) : ScriptedAI(creature) { } uint32 WaitTimer; bool InAction; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp index f1febf07bb7..8a7944464a1 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp @@ -51,7 +51,7 @@ public: struct instance_sunwell_plateau_InstanceMapScript : public InstanceScript { - instance_sunwell_plateau_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_sunwell_plateau_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 m_auiEncounter[MAX_ENCOUNTER]; diff --git a/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp b/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp index 9550ac13208..50d4f0d1578 100644 --- a/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp +++ b/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp @@ -37,7 +37,7 @@ public: struct instance_the_stockade_InstanceMapScript : public InstanceScript { - instance_the_stockade_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_the_stockade_InstanceMapScript(Map* map) : InstanceScript(map) { } }; }; diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp index 1a41becfad5..830942ae2c3 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp @@ -45,7 +45,7 @@ class boss_ironaya : public CreatureScript struct boss_ironayaAI : public ScriptedAI { - boss_ironayaAI(Creature* creature) : ScriptedAI(creature) {} + boss_ironayaAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiArcingTimer; bool bHasCastedWstomp; diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp index 7d17a339d5f..f221355b1c8 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp @@ -41,11 +41,11 @@ enum Events class instance_uldaman : public InstanceMapScript { public: - instance_uldaman() : InstanceMapScript("instance_uldaman", 70) {} + instance_uldaman() : InstanceMapScript("instance_uldaman", 70) { } struct instance_uldaman_InstanceMapScript : public InstanceScript { - instance_uldaman_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_uldaman_InstanceMapScript(Map* map) : InstanceScript(map) { } void Initialize() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp index 4dcb6af2392..1dfb48f746f 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp @@ -54,7 +54,7 @@ class npc_jadespine_basilisk : public CreatureScript struct npc_jadespine_basiliskAI : public ScriptedAI { - npc_jadespine_basiliskAI(Creature* creature) : ScriptedAI(creature) {} + npc_jadespine_basiliskAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiCslumberTimer; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp index 8bfe45a7f17..a174b4833b4 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp @@ -359,7 +359,7 @@ class npc_halazzi_lynx : public CreatureScript struct npc_halazzi_lynxAI : public ScriptedAI { - npc_halazzi_lynxAI(Creature* creature) : ScriptedAI(creature) {} + npc_halazzi_lynxAI(Creature* creature) : ScriptedAI(creature) { } uint32 FrenzyTimer; uint32 shredder_timer; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index 8a13e072be8..17ad3da4f7e 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -526,7 +526,7 @@ class boss_thurg : public CreatureScript struct boss_thurgAI : public boss_hexlord_addAI { - boss_thurgAI(Creature* creature) : boss_hexlord_addAI(creature) {} + boss_thurgAI(Creature* creature) : boss_hexlord_addAI(creature) { } uint32 bloodlust_timer; uint32 cleave_timer; @@ -583,7 +583,7 @@ class boss_alyson_antille : public CreatureScript struct boss_alyson_antilleAI : public boss_hexlord_addAI { //Holy Priest - boss_alyson_antilleAI(Creature* creature) : boss_hexlord_addAI(creature) {} + boss_alyson_antilleAI(Creature* creature) : boss_hexlord_addAI(creature) { } uint32 flashheal_timer; uint32 dispelmagic_timer; @@ -814,7 +814,7 @@ class boss_slither : public CreatureScript struct boss_slitherAI : public boss_hexlord_addAI { - boss_slitherAI(Creature* creature) : boss_hexlord_addAI(creature) {} + boss_slitherAI(Creature* creature) : boss_hexlord_addAI(creature) { } uint32 venomspit_timer; @@ -872,7 +872,7 @@ class boss_fenstalker : public CreatureScript struct boss_fenstalkerAI : public boss_hexlord_addAI { - boss_fenstalkerAI(Creature* creature) : boss_hexlord_addAI(creature) {} + boss_fenstalkerAI(Creature* creature) : boss_hexlord_addAI(creature) { } uint32 volatileinf_timer; @@ -915,7 +915,7 @@ class boss_koragg : public CreatureScript struct boss_koraggAI : public boss_hexlord_addAI { - boss_koraggAI(Creature* creature) : boss_hexlord_addAI(creature) {} + boss_koraggAI(Creature* creature) : boss_hexlord_addAI(creature) { } uint32 coldstare_timer; uint32 mightyblow_timer; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp index 329034a7682..d4d845babdf 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp @@ -678,7 +678,7 @@ class npc_janalai_hatchling : public CreatureScript class npc_janalai_egg : public CreatureScript { public: - npc_janalai_egg(): CreatureScript("npc_janalai_egg") {} + npc_janalai_egg(): CreatureScript("npc_janalai_egg") { } CreatureAI* GetAI(Creature* creature) const OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp index 11b18e9e5cc..1413a81a825 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp @@ -570,7 +570,7 @@ class npc_zuljin_vortex : public CreatureScript struct npc_zuljin_vortexAI : public ScriptedAI { - npc_zuljin_vortexAI(Creature* creature) : ScriptedAI(creature) {} + npc_zuljin_vortexAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp index 5803f1b981c..4d567dbca32 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp @@ -66,7 +66,7 @@ class instance_zulaman : public InstanceMapScript struct instance_zulaman_InstanceMapScript : public InstanceScript { - instance_zulaman_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_zulaman_InstanceMapScript(Map* map) : InstanceScript(map) { } uint64 HarkorsSatchelGUID; uint64 TanzarsTrunkGUID; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 2c48d18d112..7fe80c12fd2 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -88,7 +88,7 @@ Position const PosMoveOnSpawn[1] = class boss_arlokk : public CreatureScript { - public: boss_arlokk() : CreatureScript("boss_arlokk") {} + public: boss_arlokk() : CreatureScript("boss_arlokk") { } struct boss_arlokkAI : public BossAI { @@ -338,7 +338,7 @@ Position const PosProwlerCenter[1] = class npc_zulian_prowler : public CreatureScript { - public: npc_zulian_prowler() : CreatureScript("npc_zulian_prowler") {} + public: npc_zulian_prowler() : CreatureScript("npc_zulian_prowler") { } struct npc_zulian_prowlerAI : public ScriptedAI { @@ -433,7 +433,7 @@ Position const PosSummonArlokk[1] = class go_gong_of_bethekk : public GameObjectScript { - public: go_gong_of_bethekk() : GameObjectScript("go_gong_of_bethekk") {} + public: go_gong_of_bethekk() : GameObjectScript("go_gong_of_bethekk") { } bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp index a6ed3b72146..017730f1186 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp @@ -43,11 +43,11 @@ enum Events class boss_gahzranka : public CreatureScript // gahzranka { - public: boss_gahzranka() : CreatureScript("boss_gahzranka") {} + public: boss_gahzranka() : CreatureScript("boss_gahzranka") { } struct boss_gahzrankaAI : public BossAI { - boss_gahzrankaAI(Creature* creature) : BossAI(creature, DATA_GAHZRANKA) {} + boss_gahzrankaAI(Creature* creature) : BossAI(creature, DATA_GAHZRANKA) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp index 3c472b1e6d5..6d21e6015fe 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp @@ -41,11 +41,11 @@ enum Events class boss_grilek : public CreatureScript // grilek { - public: boss_grilek() : CreatureScript("boss_grilek") {} + public: boss_grilek() : CreatureScript("boss_grilek") { } struct boss_grilekAI : public BossAI { - boss_grilekAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) {} + boss_grilekAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp index 7603e14ea2a..b25daf85a7c 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp @@ -66,11 +66,11 @@ enum Events class boss_hakkar : public CreatureScript { - public: boss_hakkar() : CreatureScript("boss_hakkar") {} + public: boss_hakkar() : CreatureScript("boss_hakkar") { } struct boss_hakkarAI : public BossAI { - boss_hakkarAI(Creature* creature) : BossAI(creature, DATA_HAKKAR) {} + boss_hakkarAI(Creature* creature) : BossAI(creature, DATA_HAKKAR) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp index 27159a700cb..f988a43f728 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp @@ -42,11 +42,11 @@ enum Events class boss_hazzarah : public CreatureScript { - public: boss_hazzarah() : CreatureScript("boss_hazzarah") {} + public: boss_hazzarah() : CreatureScript("boss_hazzarah") { } struct boss_hazzarahAI : public BossAI { - boss_hazzarahAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) {} + boss_hazzarahAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp index 2a04a03938d..1c10a1b9966 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp @@ -50,11 +50,11 @@ enum Spells class boss_jeklik : public CreatureScript //jeklik { - public: boss_jeklik() : CreatureScript("boss_jeklik") {} + public: boss_jeklik() : CreatureScript("boss_jeklik") { } struct boss_jeklikAI : public BossAI { - boss_jeklikAI(Creature* creature) : BossAI(creature, DATA_JEKLIK) {} + boss_jeklikAI(Creature* creature) : BossAI(creature, DATA_JEKLIK) { } uint32 Charge_Timer; uint32 SonicBurst_Timer; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp index 0bbfefc69fb..100562acda6 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp @@ -59,11 +59,11 @@ Position const TeleportLoc = {-11583.7783f, -1249.4278f, 77.5471f, 4.745f}; class boss_jindo : public CreatureScript { - public: boss_jindo() : CreatureScript("boss_jindo") {} + public: boss_jindo() : CreatureScript("boss_jindo") { } struct boss_jindoAI : public BossAI { - boss_jindoAI(Creature* creature) : BossAI(creature, DATA_JINDO) {} + boss_jindoAI(Creature* creature) : BossAI(creature, DATA_JINDO) { } void Reset() OVERRIDE { @@ -248,7 +248,7 @@ class npc_shade_of_jindo : public CreatureScript struct npc_shade_of_jindoAI : public ScriptedAI { - npc_shade_of_jindoAI(Creature* creature) : ScriptedAI(creature) {} + npc_shade_of_jindoAI(Creature* creature) : ScriptedAI(creature) { } uint32 ShadowShock_Timer; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp index ac65842fa44..0a52425d0a9 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp @@ -106,7 +106,7 @@ Position const PosMandokir[2] = class boss_mandokir : public CreatureScript { - public: boss_mandokir() : CreatureScript("boss_mandokir") {} + public: boss_mandokir() : CreatureScript("boss_mandokir") { } struct boss_mandokirAI : public BossAI { @@ -293,7 +293,7 @@ enum OhganSpells class npc_ohgan : public CreatureScript { - public: npc_ohgan() : CreatureScript("npc_ohgan") {} + public: npc_ohgan() : CreatureScript("npc_ohgan") { } struct npc_ohganAI : public ScriptedAI { @@ -345,7 +345,7 @@ enum VilebranchSpells class npc_vilebranch_speaker : public CreatureScript { - public: npc_vilebranch_speaker() : CreatureScript("npc_vilebranch_speaker") {} + public: npc_vilebranch_speaker() : CreatureScript("npc_vilebranch_speaker") { } struct npc_vilebranch_speakerAI : public ScriptedAI { diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp index c372cb0324d..3edbe6ff721 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp @@ -71,11 +71,11 @@ enum ModelId class boss_marli : public CreatureScript { - public: boss_marli() : CreatureScript("boss_marli") {} + public: boss_marli() : CreatureScript("boss_marli") { } struct boss_marliAI : public BossAI { - boss_marliAI(Creature* creature) : BossAI(creature, DATA_MARLI) {} + boss_marliAI(Creature* creature) : BossAI(creature, DATA_MARLI) { } void Reset() OVERRIDE { @@ -219,11 +219,11 @@ class boss_marli : public CreatureScript // Spawn of Marli class npc_spawn_of_marli : public CreatureScript { - public: npc_spawn_of_marli() : CreatureScript("npc_spawn_of_marli") {} + public: npc_spawn_of_marli() : CreatureScript("npc_spawn_of_marli") { } struct npc_spawn_of_marliAI : public ScriptedAI { - npc_spawn_of_marliAI(Creature* creature) : ScriptedAI(creature) {} + npc_spawn_of_marliAI(Creature* creature) : ScriptedAI(creature) { } uint32 LevelUp_Timer; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp index 4d9d446d823..581f1de5013 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp @@ -40,11 +40,11 @@ enum Misc class boss_renataki : public CreatureScript { - public: boss_renataki() : CreatureScript("boss_renataki") {} + public: boss_renataki() : CreatureScript("boss_renataki") { } struct boss_renatakiAI : public BossAI { - boss_renatakiAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) {} + boss_renatakiAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { } uint32 Invisible_Timer; uint32 Ambush_Timer; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp index 6a945c545a0..d20414705cf 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp @@ -78,11 +78,11 @@ enum Phases class boss_thekal : public CreatureScript { - public: boss_thekal() : CreatureScript("boss_thekal") {} + public: boss_thekal() : CreatureScript("boss_thekal") { } struct boss_thekalAI : public BossAI { - boss_thekalAI(Creature* creature) : BossAI(creature, DATA_THEKAL) {} + boss_thekalAI(Creature* creature) : BossAI(creature, DATA_THEKAL) { } bool Enraged; bool WasDead; @@ -258,7 +258,7 @@ class boss_thekal : public CreatureScript //Zealot Lor'Khan class npc_zealot_lorkhan : public CreatureScript { - public: npc_zealot_lorkhan() : CreatureScript("npc_zealot_lorkhan") {} + public: npc_zealot_lorkhan() : CreatureScript("npc_zealot_lorkhan") { } struct npc_zealot_lorkhanAI : public ScriptedAI { diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp index f57503fcac0..0d3548ae253 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp @@ -85,11 +85,11 @@ enum NPCs class boss_venoxis : public CreatureScript { - public: boss_venoxis() : CreatureScript("boss_venoxis") {} + public: boss_venoxis() : CreatureScript("boss_venoxis") { } struct boss_venoxisAI : public BossAI { - boss_venoxisAI(Creature* creature) : BossAI(creature, DATA_VENOXIS) {} + boss_venoxisAI(Creature* creature) : BossAI(creature, DATA_VENOXIS) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp index 0e492f57588..8778a306230 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp @@ -41,11 +41,11 @@ enum Events class boss_wushoolay : public CreatureScript { - public: boss_wushoolay() : CreatureScript("boss_wushoolay") {} + public: boss_wushoolay() : CreatureScript("boss_wushoolay") { } struct boss_wushoolayAI : public BossAI { - boss_wushoolayAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) {} + boss_wushoolayAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp index 797695a70f3..e9a2172040a 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp @@ -29,7 +29,7 @@ EndScriptData */ class instance_zulgurub : public InstanceMapScript { - public: instance_zulgurub(): InstanceMapScript(ZGScriptName, 309) {} + public: instance_zulgurub(): InstanceMapScript(ZGScriptName, 309) { } struct instance_zulgurub_InstanceMapScript : public InstanceScript { diff --git a/src/server/scripts/EasternKingdoms/boss_kruul.cpp b/src/server/scripts/EasternKingdoms/boss_kruul.cpp index 02fce8f3cf2..5ac197aa7db 100644 --- a/src/server/scripts/EasternKingdoms/boss_kruul.cpp +++ b/src/server/scripts/EasternKingdoms/boss_kruul.cpp @@ -49,7 +49,7 @@ public: struct boss_kruulAI : public ScriptedAI { - boss_kruulAI(Creature* creature) : ScriptedAI(creature) {} + boss_kruulAI(Creature* creature) : ScriptedAI(creature) { } uint32 ShadowVolley_Timer; uint32 Cleave_Timer; diff --git a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp index 55d3cc927a5..5c760a36e70 100644 --- a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp @@ -68,7 +68,7 @@ class npc_professor_phizzlethorpe : public CreatureScript struct npc_professor_phizzlethorpeAI : public npc_escortAI { - npc_professor_phizzlethorpeAI(Creature* creature) : npc_escortAI(creature) {} + npc_professor_phizzlethorpeAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp index 94f227a3de0..0acce881c23 100644 --- a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp +++ b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp @@ -130,7 +130,7 @@ public: struct npc_ragged_johnAI : public ScriptedAI { - npc_ragged_johnAI(Creature* creature) : ScriptedAI(creature) {} + npc_ragged_johnAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} diff --git a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp index 23b9d99935b..8f7865dbf71 100644 --- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp +++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp @@ -87,7 +87,7 @@ public: struct boss_twilight_corrupterAI : public ScriptedAI { - boss_twilight_corrupterAI(Creature* creature) : ScriptedAI(creature) {} + boss_twilight_corrupterAI(Creature* creature) : ScriptedAI(creature) { } uint32 SoulCorruption_Timer; uint32 CreatureOfNightmare_Timer; diff --git a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp index ea8f3cd056a..01305d923b1 100644 --- a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp @@ -121,7 +121,7 @@ public: struct npc_darrowshire_spiritAI : public ScriptedAI { - npc_darrowshire_spiritAI(Creature* creature) : ScriptedAI(creature) {} + npc_darrowshire_spiritAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp index 5381b19ebf3..1f9384c1db2 100644 --- a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp +++ b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp @@ -66,7 +66,7 @@ public: struct npc_apprentice_mirvedaAI : public ScriptedAI { - npc_apprentice_mirvedaAI(Creature* creature) : ScriptedAI(creature), Summons(me) {} + npc_apprentice_mirvedaAI(Creature* creature) : ScriptedAI(creature), Summons(me) { } uint32 KillCount; uint64 PlayerGUID; diff --git a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp index ebbf8ef9f5b..1b181581f5e 100644 --- a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp @@ -140,7 +140,7 @@ public: struct npc_ranger_lilathaAI : public npc_escortAI { - npc_ranger_lilathaAI(Creature* creature) : npc_escortAI(creature) {} + npc_ranger_lilathaAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp index 32a7feffa72..9ae00b9157e 100644 --- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp +++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp @@ -57,7 +57,7 @@ public: struct npc_converted_sentryAI : public ScriptedAI { - npc_converted_sentryAI(Creature* creature) : ScriptedAI(creature) {} + npc_converted_sentryAI(Creature* creature) : ScriptedAI(creature) { } bool Credit; uint32 Timer; @@ -111,7 +111,7 @@ public: struct npc_greengill_slaveAI : public ScriptedAI { - npc_greengill_slaveAI(Creature* creature) : ScriptedAI(creature) {} + npc_greengill_slaveAI(Creature* creature) : ScriptedAI(creature) { } void EnterCombat(Unit* /*who*/) OVERRIDE { } diff --git a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp index 6609f8a9d46..604d51f9d8f 100644 --- a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp +++ b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp @@ -63,7 +63,7 @@ public: struct npc_corporal_keeshanAI : public npc_escortAI { - npc_corporal_keeshanAI(Creature* creature) : npc_escortAI(creature) {} + npc_corporal_keeshanAI(Creature* creature) : npc_escortAI(creature) { } uint32 uiPhase; uint32 uiTimer; diff --git a/src/server/scripts/EasternKingdoms/zone_silvermoon_city.cpp b/src/server/scripts/EasternKingdoms/zone_silvermoon_city.cpp index b5f85d38105..36abdead399 100644 --- a/src/server/scripts/EasternKingdoms/zone_silvermoon_city.cpp +++ b/src/server/scripts/EasternKingdoms/zone_silvermoon_city.cpp @@ -56,7 +56,7 @@ public: struct npc_blood_knight_stillbladeAI : public ScriptedAI { - npc_blood_knight_stillbladeAI(Creature* creature) : ScriptedAI(creature) {} + npc_blood_knight_stillbladeAI(Creature* creature) : ScriptedAI(creature) { } uint32 lifeTimer; bool spellHit; diff --git a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp index 8ddd609da29..4fd7a276b04 100644 --- a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp +++ b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp @@ -65,7 +65,7 @@ public: struct npc_deathstalker_erlandAI : public npc_escortAI { - npc_deathstalker_erlandAI(Creature* creature) : npc_escortAI(creature) {} + npc_deathstalker_erlandAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp index 61c8e6aa28e..e4eca2c387f 100644 --- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp +++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp @@ -489,7 +489,7 @@ public: struct npc_tyrion_spybotAI : public npc_escortAI { - npc_tyrion_spybotAI(Creature* creature) : npc_escortAI(creature) {} + npc_tyrion_spybotAI(Creature* creature) : npc_escortAI(creature) { } uint32 uiTimer; uint32 uiPhase; diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp index 33f884408e2..f193a0cc95c 100644 --- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp +++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp @@ -99,7 +99,7 @@ public: struct npc_lady_sylvanas_windrunnerAI : public ScriptedAI { - npc_lady_sylvanas_windrunnerAI(Creature* creature) : ScriptedAI(creature) {} + npc_lady_sylvanas_windrunnerAI(Creature* creature) : ScriptedAI(creature) { } uint32 LamentEventTimer; bool LamentEvent; @@ -231,7 +231,7 @@ public: struct npc_highborne_lamenterAI : public ScriptedAI { - npc_highborne_lamenterAI(Creature* creature) : ScriptedAI(creature) {} + npc_highborne_lamenterAI(Creature* creature) : ScriptedAI(creature) { } uint32 EventMoveTimer; uint32 EventCastTimer; diff --git a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp index 8937e896faf..3247c194579 100644 --- a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp @@ -172,7 +172,7 @@ public: struct npc_the_scourge_cauldronAI : public ScriptedAI { - npc_the_scourge_cauldronAI(Creature* creature) : ScriptedAI(creature) {} + npc_the_scourge_cauldronAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} diff --git a/src/server/scripts/EasternKingdoms/zone_westfall.cpp b/src/server/scripts/EasternKingdoms/zone_westfall.cpp index 0ded937d5a8..311a82bdea8 100644 --- a/src/server/scripts/EasternKingdoms/zone_westfall.cpp +++ b/src/server/scripts/EasternKingdoms/zone_westfall.cpp @@ -84,7 +84,7 @@ public: struct npc_daphne_stilwellAI : public npc_escortAI { - npc_daphne_stilwellAI(Creature* creature) : npc_escortAI(creature) {} + npc_daphne_stilwellAI(Creature* creature) : npc_escortAI(creature) { } uint32 uiWPHolder; uint32 uiShootTimer; diff --git a/src/server/scripts/Events/childrens_week.cpp b/src/server/scripts/Events/childrens_week.cpp index ca9d4cbc49e..75c5ef797e1 100644 --- a/src/server/scripts/Events/childrens_week.cpp +++ b/src/server/scripts/Events/childrens_week.cpp @@ -146,11 +146,11 @@ uint64 getOrphanGUID(Player* player, uint32 orphan) class npc_winterfin_playmate : public CreatureScript { public: - npc_winterfin_playmate() : CreatureScript("npc_winterfin_playmate") {} + npc_winterfin_playmate() : CreatureScript("npc_winterfin_playmate") { } struct npc_winterfin_playmateAI : public ScriptedAI { - npc_winterfin_playmateAI(Creature* creature) : ScriptedAI(creature) {} + npc_winterfin_playmateAI(Creature* creature) : ScriptedAI(creature) { } void Reset() { @@ -245,11 +245,11 @@ class npc_winterfin_playmate : public CreatureScript class npc_snowfall_glade_playmate : public CreatureScript { public: - npc_snowfall_glade_playmate() : CreatureScript("npc_snowfall_glade_playmate") {} + npc_snowfall_glade_playmate() : CreatureScript("npc_snowfall_glade_playmate") { } struct npc_snowfall_glade_playmateAI : public ScriptedAI { - npc_snowfall_glade_playmateAI(Creature* creature) : ScriptedAI(creature) {} + npc_snowfall_glade_playmateAI(Creature* creature) : ScriptedAI(creature) { } void Reset() { @@ -343,7 +343,7 @@ class npc_snowfall_glade_playmate : public CreatureScript class npc_the_biggest_tree : public CreatureScript { public: - npc_the_biggest_tree() : CreatureScript("npc_the_biggest_tree") {} + npc_the_biggest_tree() : CreatureScript("npc_the_biggest_tree") { } struct npc_the_biggest_treeAI : public ScriptedAI { @@ -433,11 +433,11 @@ class npc_the_biggest_tree : public CreatureScript class npc_high_oracle_soo_roo : public CreatureScript { public: - npc_high_oracle_soo_roo() : CreatureScript("npc_high_oracle_soo_roo") {} + npc_high_oracle_soo_roo() : CreatureScript("npc_high_oracle_soo_roo") { } struct npc_high_oracle_soo_rooAI : public ScriptedAI { - npc_high_oracle_soo_rooAI(Creature* creature) : ScriptedAI(creature) {} + npc_high_oracle_soo_rooAI(Creature* creature) : ScriptedAI(creature) { } void Reset() { @@ -522,11 +522,11 @@ class npc_high_oracle_soo_roo : public CreatureScript class npc_elder_kekek : public CreatureScript { public: - npc_elder_kekek() : CreatureScript("npc_elder_kekek") {} + npc_elder_kekek() : CreatureScript("npc_elder_kekek") { } struct npc_elder_kekekAI : public ScriptedAI { - npc_elder_kekekAI(Creature* creature) : ScriptedAI(creature) {} + npc_elder_kekekAI(Creature* creature) : ScriptedAI(creature) { } void Reset() { @@ -611,11 +611,11 @@ class npc_elder_kekek : public CreatureScript class npc_the_etymidian : public CreatureScript { public: - npc_the_etymidian() : CreatureScript("npc_the_etymidian") {} + npc_the_etymidian() : CreatureScript("npc_the_etymidian") { } struct npc_the_etymidianAI : public ScriptedAI { - npc_the_etymidianAI(Creature* creature) : ScriptedAI(creature) {} + npc_the_etymidianAI(Creature* creature) : ScriptedAI(creature) { } void Reset() { @@ -707,11 +707,11 @@ class npc_the_etymidian : public CreatureScript class npc_alexstraza_the_lifebinder : public CreatureScript { public: - npc_alexstraza_the_lifebinder() : CreatureScript("npc_alexstraza_the_lifebinder") {} + npc_alexstraza_the_lifebinder() : CreatureScript("npc_alexstraza_the_lifebinder") { } struct npc_alexstraza_the_lifebinderAI : public ScriptedAI { - npc_alexstraza_the_lifebinderAI(Creature* creature) : ScriptedAI(creature) {} + npc_alexstraza_the_lifebinderAI(Creature* creature) : ScriptedAI(creature) { } void Reset() { @@ -924,7 +924,7 @@ class at_bring_your_orphan_to : public AreaTriggerScript class npc_cw_area_trigger : public CreatureScript { public: - npc_cw_area_trigger() : CreatureScript("npc_cw_area_trigger") {} + npc_cw_area_trigger() : CreatureScript("npc_cw_area_trigger") { } struct npc_cw_area_triggerAI : public ScriptedAI { @@ -1021,7 +1021,7 @@ class npc_cw_area_trigger : public CreatureScript class npc_grizzlemaw_cw_trigger : public CreatureScript { public: - npc_grizzlemaw_cw_trigger() : CreatureScript("npc_grizzlemaw_cw_trigger") {} + npc_grizzlemaw_cw_trigger() : CreatureScript("npc_grizzlemaw_cw_trigger") { } struct npc_grizzlemaw_cw_triggerAI : public ScriptedAI { diff --git a/src/server/scripts/Examples/example_creature.cpp b/src/server/scripts/Examples/example_creature.cpp index 92c248c1fc9..b13ec1e1503 100644 --- a/src/server/scripts/Examples/example_creature.cpp +++ b/src/server/scripts/Examples/example_creature.cpp @@ -94,7 +94,7 @@ class example_creature : public CreatureScript { // *** HANDLED FUNCTION *** //This is the constructor, called only once when the Creature is first created - example_creatureAI(Creature* creature) : ScriptedAI(creature) {} + example_creatureAI(Creature* creature) : ScriptedAI(creature) { } // *** CUSTOM VARIABLES **** //These variables are for use only by this individual script. diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp index 6aa12e8ce77..b1d3dba105e 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp @@ -64,7 +64,7 @@ public: struct instance_blackfathom_deeps_InstanceMapScript : public InstanceScript { - instance_blackfathom_deeps_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_blackfathom_deeps_InstanceMapScript(Map* map) : InstanceScript(map) { } uint64 twilightLordKelrisGUID; uint64 shrine1GUID; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp index 3623ad88a0a..b030c8b33a3 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp @@ -146,7 +146,7 @@ public: struct npc_doomfireAI : public ScriptedAI { - npc_doomfireAI(Creature* creature) : ScriptedAI(creature) {} + npc_doomfireAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} @@ -175,7 +175,7 @@ public: struct npc_doomfire_targettingAI : public ScriptedAI { - npc_doomfire_targettingAI(Creature* creature) : ScriptedAI(creature) {} + npc_doomfire_targettingAI(Creature* creature) : ScriptedAI(creature) { } uint64 TargetGUID; uint32 ChangeTargetTimer; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp index 5f425f780cb..6bfd04a7614 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp @@ -54,7 +54,7 @@ public: struct instance_mount_hyjal_InstanceMapScript : public InstanceScript { - instance_mount_hyjal_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_mount_hyjal_InstanceMapScript(Map* map) : InstanceScript(map) { } void Initialize() OVERRIDE { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp index 681ed8e447f..c623ff40a10 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp @@ -114,7 +114,7 @@ public: struct boss_lieutenant_drakeAI : public ScriptedAI { - boss_lieutenant_drakeAI(Creature* creature) : ScriptedAI(creature) {} + boss_lieutenant_drakeAI(Creature* creature) : ScriptedAI(creature) { } bool CanPatrol; uint32 wpId; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp index 0cb9c1e454d..e9edbb46537 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp @@ -52,7 +52,7 @@ public: struct instance_old_hillsbrad_InstanceMapScript : public InstanceScript { - instance_old_hillsbrad_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_old_hillsbrad_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 m_auiEncounter[MAX_ENCOUNTER]; uint32 mBarrelCount; diff --git a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp index a478d7aea25..e28e65b6911 100644 --- a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp +++ b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp @@ -37,7 +37,7 @@ public: struct instance_dire_maul_InstanceMapScript : public InstanceScript { - instance_dire_maul_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_dire_maul_InstanceMapScript(Map* map) : InstanceScript(map) { } }; }; diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp index b8c1b4746b2..39d3df823f6 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp @@ -45,7 +45,7 @@ public: struct celebras_the_cursedAI : public ScriptedAI { - celebras_the_cursedAI(Creature* creature) : ScriptedAI(creature) {} + celebras_the_cursedAI(Creature* creature) : ScriptedAI(creature) { } uint32 WrathTimer; uint32 EntanglingRootsTimer; diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp index 3cf6e3fab33..723070fd18d 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp @@ -45,7 +45,7 @@ public: struct boss_landslideAI : public ScriptedAI { - boss_landslideAI(Creature* creature) : ScriptedAI(creature) {} + boss_landslideAI(Creature* creature) : ScriptedAI(creature) { } uint32 KnockAwayTimer; uint32 TrampleTimer; diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp index d512478a229..1196c21b0dd 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp @@ -44,7 +44,7 @@ public: struct boss_noxxionAI : public ScriptedAI { - boss_noxxionAI(Creature* creature) : ScriptedAI(creature) {} + boss_noxxionAI(Creature* creature) : ScriptedAI(creature) { } uint32 ToxicVolleyTimer; uint32 UppercutTimer; diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp index 7098d0da3fb..95632edfe9b 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp @@ -47,7 +47,7 @@ public: struct boss_ptheradrasAI : public ScriptedAI { - boss_ptheradrasAI(Creature* creature) : ScriptedAI(creature) {} + boss_ptheradrasAI(Creature* creature) : ScriptedAI(creature) { } uint32 DustfieldTimer; uint32 BoulderTimer; diff --git a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp index a44f4078a9b..53b04c9b4e7 100644 --- a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp @@ -37,7 +37,7 @@ public: struct instance_maraudon_InstanceMapScript : public InstanceScript { - instance_maraudon_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_maraudon_InstanceMapScript(Map* map) : InstanceScript(map) { } }; }; diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp index aaf6b059c3a..fcb6a484a9b 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp @@ -43,7 +43,7 @@ public: struct instance_onyxias_lair_InstanceMapScript : public InstanceScript { - instance_onyxias_lair_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_onyxias_lair_InstanceMapScript(Map* map) : InstanceScript(map) { } //Eruption is a BFS graph problem //One map to remember all floor, one map to keep floor that still need to erupt and one queue to know what needs to be removed diff --git a/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp b/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp index 6b13fecb26a..2205845e6f8 100644 --- a/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp +++ b/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp @@ -37,7 +37,7 @@ public: struct instance_ragefire_chasm_InstanceMapScript : public InstanceScript { - instance_ragefire_chasm_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_ragefire_chasm_InstanceMapScript(Map* map) : InstanceScript(map) { } }; }; diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp index 15b1fa51548..4a4d7fe4b07 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp @@ -52,7 +52,7 @@ public: struct boss_amnennar_the_coldbringerAI : public ScriptedAI { - boss_amnennar_the_coldbringerAI(Creature* creature) : ScriptedAI(creature) {} + boss_amnennar_the_coldbringerAI(Creature* creature) : ScriptedAI(creature) { } uint32 AmnenarsWrath_Timer; uint32 FrostBolt_Timer; diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp index b40429af794..4bf2ed9d8bf 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp @@ -42,7 +42,7 @@ public: struct instance_razorfen_kraul_InstanceMapScript : public InstanceScript { - instance_razorfen_kraul_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_razorfen_kraul_InstanceMapScript(Map* map) : InstanceScript(map) { } uint64 DoorWardGUID; int WardKeeperDeath; diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp index 13ce8e8c964..33f825421bb 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp @@ -66,7 +66,7 @@ public: struct npc_willixAI : public npc_escortAI { - npc_willixAI(Creature* creature) : npc_escortAI(creature) {} + npc_willixAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -149,7 +149,7 @@ enum SnufflenoseGopher struct DistanceOrder : public std::binary_function { - DistanceOrder(Creature* me) : me(me) {} + DistanceOrder(Creature* me) : me(me) { } bool operator() (GameObject* first, GameObject* second) { diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp index 52ef2a5430b..0cf56df50e3 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp @@ -22,7 +22,7 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript { public: - instance_ruins_of_ahnqiraj() : InstanceMapScript("instance_ruins_of_ahnqiraj", 509) {} + instance_ruins_of_ahnqiraj() : InstanceMapScript("instance_ruins_of_ahnqiraj", 509) { } struct instance_ruins_of_ahnqiraj_InstanceMapScript : public InstanceScript { diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp index 59c7565d060..bc6f03517b8 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp @@ -53,7 +53,7 @@ public: struct boss_fankrissAI : public ScriptedAI { - boss_fankrissAI(Creature* creature) : ScriptedAI(creature) {} + boss_fankrissAI(Creature* creature) : ScriptedAI(creature) { } uint32 MortalWound_Timer; uint32 SpawnHatchlings_Timer; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp index 54da5a30802..2104d7f5837 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp @@ -51,7 +51,7 @@ public: struct boss_huhuranAI : public ScriptedAI { - boss_huhuranAI(Creature* creature) : ScriptedAI(creature) {} + boss_huhuranAI(Creature* creature) : ScriptedAI(creature) { } uint32 Frenzy_Timer; uint32 Wyvern_Timer; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp index 36dd93076e7..33c3f29b94e 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp @@ -48,7 +48,7 @@ public: struct boss_ouroAI : public ScriptedAI { - boss_ouroAI(Creature* creature) : ScriptedAI(creature) {} + boss_ouroAI(Creature* creature) : ScriptedAI(creature) { } uint32 Sweep_Timer; uint32 SandBlast_Timer; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp index a12da4fabd1..a3edd9ad83d 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp @@ -53,7 +53,7 @@ public: struct boss_sarturaAI : public ScriptedAI { - boss_sarturaAI(Creature* creature) : ScriptedAI(creature) {} + boss_sarturaAI(Creature* creature) : ScriptedAI(creature) { } uint32 WhirlWind_Timer; uint32 WhirlWindRandom_Timer; @@ -196,7 +196,7 @@ public: struct npc_sartura_royal_guardAI : public ScriptedAI { - npc_sartura_royal_guardAI(Creature* creature) : ScriptedAI(creature) {} + npc_sartura_royal_guardAI(Creature* creature) : ScriptedAI(creature) { } uint32 WhirlWind_Timer; uint32 WhirlWindRandom_Timer; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index e9cf887f22b..1d888f3ce8b 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -400,7 +400,7 @@ public: struct boss_veknilashAI : public boss_twinemperorsAI { bool IAmVeklor() {return false;} - boss_veknilashAI(Creature* creature) : boss_twinemperorsAI(creature) {} + boss_veknilashAI(Creature* creature) : boss_twinemperorsAI(creature) { } uint32 UpperCut_Timer; uint32 UnbalancingStrike_Timer; @@ -486,7 +486,7 @@ public: struct boss_veklorAI : public boss_twinemperorsAI { bool IAmVeklor() {return true;} - boss_veklorAI(Creature* creature) : boss_twinemperorsAI(creature) {} + boss_veklorAI(Creature* creature) : boss_twinemperorsAI(creature) { } uint32 ShadowBolt_Timer; uint32 Blizzard_Timer; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp index 54845c6b746..0a5733f1c7f 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp @@ -39,7 +39,7 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript struct instance_temple_of_ahnqiraj_InstanceMapScript : public InstanceScript { - instance_temple_of_ahnqiraj_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_temple_of_ahnqiraj_InstanceMapScript(Map* map) : InstanceScript(map) { } //If Vem is dead... bool IsBossDied[3]; diff --git a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp index 5c4fb7bbaba..522345c4fd4 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp +++ b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp @@ -41,7 +41,7 @@ public: struct instance_wailing_caverns_InstanceMapScript : public InstanceScript { - instance_wailing_caverns_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_wailing_caverns_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 m_auiEncounter[MAX_ENCOUNTER]; diff --git a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp index 8e2d393e6a6..8cb1cfebd15 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp @@ -108,7 +108,7 @@ public: struct instance_zulfarrak_InstanceMapScript : public InstanceScript { - instance_zulfarrak_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_zulfarrak_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 GahzRillaEncounter; uint64 ZumrahGUID; diff --git a/src/server/scripts/Kalimdor/boss_azuregos.cpp b/src/server/scripts/Kalimdor/boss_azuregos.cpp index 56d380b7b46..dbc7abe7bf7 100644 --- a/src/server/scripts/Kalimdor/boss_azuregos.cpp +++ b/src/server/scripts/Kalimdor/boss_azuregos.cpp @@ -54,7 +54,7 @@ public: struct boss_azuregosAI : public ScriptedAI { - boss_azuregosAI(Creature* creature) : ScriptedAI(creature) {} + boss_azuregosAI(Creature* creature) : ScriptedAI(creature) { } uint32 MarkOfFrostTimer; uint32 ManaStormTimer; diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp index bd4c2f893c5..b1c2566cdce 100644 --- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp +++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp @@ -72,7 +72,7 @@ class npc_torek : public CreatureScript struct npc_torekAI : public npc_escortAI { - npc_torekAI(Creature* creature) : npc_escortAI(creature) {} + npc_torekAI(Creature* creature) : npc_escortAI(creature) { } uint32 Rend_Timer; uint32 Thunderclap_Timer; diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp index f48bd1f9339..011aff1928f 100644 --- a/src/server/scripts/Kalimdor/zone_azshara.cpp +++ b/src/server/scripts/Kalimdor/zone_azshara.cpp @@ -52,7 +52,7 @@ public: struct npc_spitelashesAI : public ScriptedAI { - npc_spitelashesAI(Creature* creature) : ScriptedAI(creature) {} + npc_spitelashesAI(Creature* creature) : ScriptedAI(creature) { } uint32 morphtimer; bool spellhit; @@ -309,7 +309,7 @@ public: struct npc_rizzle_sprysprocketAI : public ScriptedAI { - npc_rizzle_sprysprocketAI(Creature* creature) : ScriptedAI(creature) {} + npc_rizzle_sprysprocketAI(Creature* creature) : ScriptedAI(creature) { } uint32 SpellEscapeTimer; uint32 TeleportTimer; @@ -477,7 +477,7 @@ public: struct npc_depth_chargeAI : public ScriptedAI { - npc_depth_chargeAI(Creature* creature) : ScriptedAI(creature) {} + npc_depth_chargeAI(Creature* creature) : ScriptedAI(creature) { } bool WeMustDie; uint32 WeMustDieTimer; diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index e0d181646e1..29b5249d2dd 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -68,7 +68,7 @@ public: struct npc_draenei_survivorAI : public ScriptedAI { - npc_draenei_survivorAI(Creature* creature) : ScriptedAI(creature) {} + npc_draenei_survivorAI(Creature* creature) : ScriptedAI(creature) { } uint64 pCaster; @@ -301,7 +301,7 @@ public: struct npc_injured_draeneiAI : public ScriptedAI { - npc_injured_draeneiAI(Creature* creature) : ScriptedAI(creature) {} + npc_injured_draeneiAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -368,7 +368,7 @@ public: struct npc_magwinAI : public npc_escortAI { - npc_magwinAI(Creature* creature) : npc_escortAI(creature) {} + npc_magwinAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -442,7 +442,7 @@ public: struct npc_geezleAI : public ScriptedAI { - npc_geezleAI(Creature* creature) : ScriptedAI(creature) {} + npc_geezleAI(Creature* creature) : ScriptedAI(creature) { } uint64 SparkGUID; @@ -677,7 +677,7 @@ class npc_stillpine_capitive : public CreatureScript struct npc_stillpine_capitiveAI : public ScriptedAI { - npc_stillpine_capitiveAI(Creature* creature) : ScriptedAI(creature) {} + npc_stillpine_capitiveAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index 8ee1de1c8d5..0f2c72eb298 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -52,7 +52,7 @@ public: struct npc_webbed_creatureAI : public ScriptedAI { - npc_webbed_creatureAI(Creature* creature) : ScriptedAI(creature) {} + npc_webbed_creatureAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} @@ -185,7 +185,7 @@ public: struct npc_princess_stillpineAI : public ScriptedAI { - npc_princess_stillpineAI(Creature* creature) : ScriptedAI(creature) {} + npc_princess_stillpineAI(Creature* creature) : ScriptedAI(creature) { } void MovementInform(uint32 type, uint32 id) OVERRIDE { diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp index 5350693471b..984d404f1ce 100644 --- a/src/server/scripts/Kalimdor/zone_darkshore.cpp +++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp @@ -223,7 +223,7 @@ public: struct npc_prospector_remtravelAI : public npc_escortAI { - npc_prospector_remtravelAI(Creature* creature) : npc_escortAI(creature) {} + npc_prospector_remtravelAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 05496c0fcda..f1aa4c0841a 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -75,7 +75,7 @@ public: struct npc_aged_dying_ancient_kodoAI : public ScriptedAI { - npc_aged_dying_ancient_kodoAI(Creature* creature) : ScriptedAI(creature) {} + npc_aged_dying_ancient_kodoAI(Creature* creature) : ScriptedAI(creature) { } void MoveInLineOfSight(Unit* who) OVERRIDE diff --git a/src/server/scripts/Kalimdor/zone_durotar.cpp b/src/server/scripts/Kalimdor/zone_durotar.cpp index 1eec2c826ea..ff96d5e8465 100644 --- a/src/server/scripts/Kalimdor/zone_durotar.cpp +++ b/src/server/scripts/Kalimdor/zone_durotar.cpp @@ -51,7 +51,7 @@ public: struct npc_lazy_peonAI : public ScriptedAI { - npc_lazy_peonAI(Creature* creature) : ScriptedAI(creature) {} + npc_lazy_peonAI(Creature* creature) : ScriptedAI(creature) { } uint64 PlayerGUID; @@ -230,7 +230,7 @@ class npc_tiger_matriarch_credit : public CreatureScript class npc_tiger_matriarch : public CreatureScript { public: - npc_tiger_matriarch() : CreatureScript("npc_tiger_matriarch") {} + npc_tiger_matriarch() : CreatureScript("npc_tiger_matriarch") { } struct npc_tiger_matriarchAI : public ScriptedAI { @@ -443,7 +443,7 @@ typedef npc_troll_volunteer::npc_troll_volunteerAI VolunteerAI; class spell_mount_check : public SpellScriptLoader { public: - spell_mount_check() : SpellScriptLoader("spell_mount_check") {} + spell_mount_check() : SpellScriptLoader("spell_mount_check") { } class spell_mount_check_AuraScript : public AuraScript { @@ -491,7 +491,7 @@ class spell_mount_check : public SpellScriptLoader class spell_voljin_war_drums : public SpellScriptLoader { public: - spell_voljin_war_drums() : SpellScriptLoader("spell_voljin_war_drums") {} + spell_voljin_war_drums() : SpellScriptLoader("spell_voljin_war_drums") { } class spell_voljin_war_drums_SpellScript : public SpellScript { @@ -548,7 +548,7 @@ enum VoodooSpells class spell_voodoo : public SpellScriptLoader { public: - spell_voodoo() : SpellScriptLoader("spell_voodoo") {} + spell_voodoo() : SpellScriptLoader("spell_voodoo") { } class spell_voodoo_SpellScript : public SpellScript { diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index 509adb566cd..7fb423f53ee 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -667,7 +667,7 @@ public: struct npc_giant_spotlightAI : public ScriptedAI { - npc_giant_spotlightAI(Creature* creature) : ScriptedAI(creature) {} + npc_giant_spotlightAI(Creature* creature) : ScriptedAI(creature) { } EventMap events; diff --git a/src/server/scripts/Kalimdor/zone_mulgore.cpp b/src/server/scripts/Kalimdor/zone_mulgore.cpp index 6b42b971531..5d582169560 100644 --- a/src/server/scripts/Kalimdor/zone_mulgore.cpp +++ b/src/server/scripts/Kalimdor/zone_mulgore.cpp @@ -98,7 +98,7 @@ public: struct npc_kyle_frenziedAI : public ScriptedAI { - npc_kyle_frenziedAI(Creature* creature) : ScriptedAI(creature) {} + npc_kyle_frenziedAI(Creature* creature) : ScriptedAI(creature) { } bool EventActive; bool IsMovingToLunch; @@ -271,7 +271,7 @@ public: struct npc_plains_visionAI : public ScriptedAI { - npc_plains_visionAI(Creature* creature) : ScriptedAI(creature) {} + npc_plains_visionAI(Creature* creature) : ScriptedAI(creature) { } bool newWaypoint; uint8 WayPointId; diff --git a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp index 7928ab10978..5c8327e99bd 100644 --- a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp +++ b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp @@ -64,7 +64,7 @@ public: struct npc_shenthulAI : public ScriptedAI { - npc_shenthulAI(Creature* creature) : ScriptedAI(creature) {} + npc_shenthulAI(Creature* creature) : ScriptedAI(creature) { } bool CanTalk; bool CanEmote; @@ -211,7 +211,7 @@ public: struct npc_thrall_warchiefAI : public ScriptedAI { - npc_thrall_warchiefAI(Creature* creature) : ScriptedAI(creature) {} + npc_thrall_warchiefAI(Creature* creature) : ScriptedAI(creature) { } uint32 ChainLightningTimer; uint32 ShockTimer; diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp index 79bd6f691e6..08459764ceb 100644 --- a/src/server/scripts/Kalimdor/zone_silithus.cpp +++ b/src/server/scripts/Kalimdor/zone_silithus.cpp @@ -496,7 +496,7 @@ public: struct npc_anachronos_the_ancientAI : public ScriptedAI { - npc_anachronos_the_ancientAI(Creature* creature) : ScriptedAI(creature) {} + npc_anachronos_the_ancientAI(Creature* creature) : ScriptedAI(creature) { } uint32 AnimationTimer; uint8 AnimationCount; @@ -824,7 +824,7 @@ public: struct npc_qiraj_war_spawnAI : public ScriptedAI { - npc_qiraj_war_spawnAI(Creature* creature) : ScriptedAI(creature) {} + npc_qiraj_war_spawnAI(Creature* creature) : ScriptedAI(creature) { } uint64 MobGUID; uint64 PlayerGUID; @@ -937,7 +937,7 @@ public: struct npc_anachronos_quest_triggerAI : public ScriptedAI { - npc_anachronos_quest_triggerAI(Creature* creature) : ScriptedAI(creature) {} + npc_anachronos_quest_triggerAI(Creature* creature) : ScriptedAI(creature) { } uint64 PlayerGUID; diff --git a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp index 058cd19e3b4..5ed335fa4d7 100644 --- a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp +++ b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp @@ -115,7 +115,7 @@ public: struct npc_kaya_flathoofAI : public npc_escortAI { - npc_kaya_flathoofAI(Creature* creature) : npc_escortAI(creature) {} + npc_kaya_flathoofAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { diff --git a/src/server/scripts/Kalimdor/zone_tanaris.cpp b/src/server/scripts/Kalimdor/zone_tanaris.cpp index 0b12e6bf48c..1513d1aecfa 100644 --- a/src/server/scripts/Kalimdor/zone_tanaris.cpp +++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp @@ -65,7 +65,7 @@ public: struct npc_aquementasAI : public ScriptedAI { - npc_aquementasAI(Creature* creature) : ScriptedAI(creature) {} + npc_aquementasAI(Creature* creature) : ScriptedAI(creature) { } uint32 SendItemTimer; uint32 SwitchFactionTimer; @@ -182,7 +182,7 @@ public: struct npc_custodian_of_timeAI : public npc_escortAI { - npc_custodian_of_timeAI(Creature* creature) : npc_escortAI(creature) {} + npc_custodian_of_timeAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -470,7 +470,7 @@ public: struct npc_OOX17AI : public npc_escortAI { - npc_OOX17AI(Creature* creature) : npc_escortAI(creature) {} + npc_OOX17AI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index 122ce84091b..b68f4c9e9a0 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -314,7 +314,7 @@ public: struct npc_twiggy_flatheadAI : public ScriptedAI { - npc_twiggy_flatheadAI(Creature* creature) : ScriptedAI(creature) {} + npc_twiggy_flatheadAI(Creature* creature) : ScriptedAI(creature) { } bool EventInProgress; bool EventGrate; diff --git a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp index 9afa825972f..3fd0d98a865 100644 --- a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp +++ b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp @@ -433,7 +433,7 @@ public: struct npc_enraged_pantherAI : public ScriptedAI { - npc_enraged_pantherAI(Creature* creature) : ScriptedAI(creature) {} + npc_enraged_pantherAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp b/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp index 7dda6ab027f..b0a9da774c5 100644 --- a/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp +++ b/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp @@ -79,7 +79,7 @@ public: struct npc_cairne_bloodhoofAI : public ScriptedAI { - npc_cairne_bloodhoofAI(Creature* creature) : ScriptedAI(creature) {} + npc_cairne_bloodhoofAI(Creature* creature) : ScriptedAI(creature) { } uint32 BerserkerChargeTimer; uint32 CleaveTimer; diff --git a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp index 3dc77e0cf04..5f19e838c8a 100644 --- a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp +++ b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp @@ -77,7 +77,7 @@ public: struct npc_ameAI : public npc_escortAI { - npc_ameAI(Creature* creature) : npc_escortAI(creature) {} + npc_ameAI(Creature* creature) : npc_escortAI(creature) { } uint32 DemoralizingShoutTimer; diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp index 92d15322f4c..f5976333ee6 100644 --- a/src/server/scripts/Kalimdor/zone_winterspring.cpp +++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp @@ -199,7 +199,7 @@ public: protected: /// Will be called when a dialogue step was done - virtual void JustDidDialogueStep(int32 /*entry*/) {} + virtual void JustDidDialogueStep(int32 /*entry*/) { } /// Will be called to get a speaker, MUST be implemented if not used in instances virtual Creature* GetSpeakerByEntry(int32 /*entry*/) { return NULL; } diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp index 7132ba825f1..a0f7fe23a8a 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp @@ -165,7 +165,7 @@ public: struct npc_amanitar_mushroomsAI : public ScriptedAI { - npc_amanitar_mushroomsAI(Creature* creature) : ScriptedAI(creature) {} + npc_amanitar_mushroomsAI(Creature* creature) : ScriptedAI(creature) { } EventMap events; diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp index c549de9dda1..627975ab0f1 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp @@ -291,7 +291,7 @@ public: class achievement_respect_your_elders : public AchievementCriteriaScript { public: - achievement_respect_your_elders() : AchievementCriteriaScript("achievement_respect_your_elders") {} + achievement_respect_your_elders() : AchievementCriteriaScript("achievement_respect_your_elders") { } bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE { diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp index c5e40052a9d..ab2c22455ba 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp @@ -206,7 +206,7 @@ public: struct npc_skittering_infectorAI : public ScriptedAI { - npc_skittering_infectorAI(Creature* creature) : ScriptedAI(creature) {} + npc_skittering_infectorAI(Creature* creature) : ScriptedAI(creature) { } void JustDied(Unit* /*killer*/) OVERRIDE { @@ -228,7 +228,7 @@ public: struct npc_anub_ar_skirmisherAI : public ScriptedAI { - npc_anub_ar_skirmisherAI(Creature* creature) : ScriptedAI(creature) {} + npc_anub_ar_skirmisherAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiChargeTimer; uint32 uiBackstabTimer; @@ -279,7 +279,7 @@ public: struct npc_anub_ar_shadowcasterAI : public ScriptedAI { - npc_anub_ar_shadowcasterAI(Creature* creature) : ScriptedAI(creature) {} + npc_anub_ar_shadowcasterAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiShadowBoltTimer; uint32 uiShadowNovaTimer; @@ -370,7 +370,7 @@ public: struct npc_watcher_gashraAI : public ScriptedAI { - npc_watcher_gashraAI(Creature* creature) : ScriptedAI(creature) {} + npc_watcher_gashraAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiWebWrapTimer; uint32 uiInfectedBiteTimer; @@ -421,7 +421,7 @@ public: struct npc_watcher_narjilAI : public ScriptedAI { - npc_watcher_narjilAI(Creature* creature) : ScriptedAI(creature) {} + npc_watcher_narjilAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiWebWrapTimer; uint32 uiInfectedBiteTimer; @@ -475,7 +475,7 @@ public: struct npc_watcher_silthikAI : public ScriptedAI { - npc_watcher_silthikAI(Creature* creature) : ScriptedAI(creature) {} + npc_watcher_silthikAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiWebWrapTimer; uint32 uiInfectedBiteTimer; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index 1c1cdbdac53..3056ec90807 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -991,7 +991,7 @@ public: struct npc_tenebronAI : public dummy_dragonAI { - npc_tenebronAI(Creature* creature) : dummy_dragonAI(creature) {} + npc_tenebronAI(Creature* creature) : dummy_dragonAI(creature) { } uint32 m_uiShadowBreathTimer; uint32 m_uiShadowFissureTimer; @@ -1082,7 +1082,7 @@ public: struct npc_shadronAI : public dummy_dragonAI { - npc_shadronAI(Creature* creature) : dummy_dragonAI(creature) {} + npc_shadronAI(Creature* creature) : dummy_dragonAI(creature) { } uint32 m_uiShadowBreathTimer; uint32 m_uiShadowFissureTimer; @@ -1188,7 +1188,7 @@ public: struct npc_vesperonAI : public dummy_dragonAI { - npc_vesperonAI(Creature* creature) : dummy_dragonAI(creature) {} + npc_vesperonAI(Creature* creature) : dummy_dragonAI(creature) { } uint32 m_uiShadowBreathTimer; uint32 m_uiShadowFissureTimer; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp index f5ef0f7cab3..ace2258ac9f 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp @@ -37,7 +37,7 @@ public: struct instance_obsidian_sanctum_InstanceMapScript : public InstanceScript { - instance_obsidian_sanctum_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_obsidian_sanctum_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 m_auiEncounter[MAX_ENCOUNTER]; uint64 m_uiSartharionGUID; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 7561d1c4991..62a0e6c0271 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -1620,7 +1620,7 @@ class spell_halion_clear_debuffs : public SpellScriptLoader class TwilightCutterSelector { public: - TwilightCutterSelector(Unit* caster, Unit* target) : _caster(caster), _channelTarget(target) {} + TwilightCutterSelector(Unit* caster, Unit* target) : _caster(caster), _channelTarget(target) { } bool operator()(WorldObject* unit) { diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index 9d7a3c17b1b..f6fd1c14a9b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -417,7 +417,7 @@ public: struct npc_memoryAI : public ScriptedAI { - npc_memoryAI(Creature* creature) : ScriptedAI(creature) {} + npc_memoryAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiOldWoundsTimer; uint32 uiShadowPastTimer; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index 970c53e56ee..1922ad26060 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -311,7 +311,7 @@ public: struct npc_risen_ghoulAI : public ScriptedAI { - npc_risen_ghoulAI(Creature* creature) : ScriptedAI(creature) {} + npc_risen_ghoulAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiAttackTimer; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp index 78ee6ba1c6b..2a203b49764 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp @@ -41,7 +41,7 @@ public: struct instance_trial_of_the_champion_InstanceMapScript : public InstanceScript { - instance_trial_of_the_champion_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_trial_of_the_champion_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 m_auiEncounter[MAX_ENCOUNTER]; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index ce0f8e4778c..4c73d1a5f55 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp @@ -757,7 +757,7 @@ class npc_toc_druid : public CreatureScript struct npc_toc_druidAI : public boss_faction_championsAI { - npc_toc_druidAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) {} + npc_toc_druidAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { } void Reset() OVERRIDE { @@ -850,7 +850,7 @@ class npc_toc_shaman : public CreatureScript struct npc_toc_shamanAI : public boss_faction_championsAI { - npc_toc_shamanAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) {} + npc_toc_shamanAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { } void Reset() OVERRIDE { @@ -943,7 +943,7 @@ class npc_toc_paladin : public CreatureScript struct npc_toc_paladinAI : public boss_faction_championsAI { - npc_toc_paladinAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) {} + npc_toc_paladinAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { } void Reset() OVERRIDE { @@ -1047,7 +1047,7 @@ class npc_toc_priest : public CreatureScript struct npc_toc_priestAI : public boss_faction_championsAI { - npc_toc_priestAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) {} + npc_toc_priestAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { } void Reset() OVERRIDE { @@ -1135,7 +1135,7 @@ class npc_toc_shadow_priest : public CreatureScript struct npc_toc_shadow_priestAI : public boss_faction_championsAI { - npc_toc_shadow_priestAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) {} + npc_toc_shadow_priestAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { } void Reset() OVERRIDE { @@ -1230,7 +1230,7 @@ class npc_toc_warlock : public CreatureScript struct npc_toc_warlockAI : public boss_faction_championsAI { - npc_toc_warlockAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) {} + npc_toc_warlockAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { } void Reset() OVERRIDE { @@ -1321,7 +1321,7 @@ class npc_toc_mage : public CreatureScript struct npc_toc_mageAI : public boss_faction_championsAI { - npc_toc_mageAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) {} + npc_toc_mageAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { } void Reset() OVERRIDE { @@ -1415,7 +1415,7 @@ class npc_toc_hunter : public CreatureScript struct npc_toc_hunterAI : public boss_faction_championsAI { - npc_toc_hunterAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) {} + npc_toc_hunterAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { } void Reset() OVERRIDE { @@ -1517,7 +1517,7 @@ class npc_toc_boomkin : public CreatureScript struct npc_toc_boomkinAI : public boss_faction_championsAI { - npc_toc_boomkinAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) {} + npc_toc_boomkinAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { } void Reset() OVERRIDE { @@ -1612,7 +1612,7 @@ class npc_toc_warrior : public CreatureScript struct npc_toc_warriorAI : public boss_faction_championsAI { - npc_toc_warriorAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) {} + npc_toc_warriorAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { } void Reset() OVERRIDE { @@ -1713,7 +1713,7 @@ class npc_toc_dk : public CreatureScript struct npc_toc_dkAI : public boss_faction_championsAI { - npc_toc_dkAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) {} + npc_toc_dkAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { } void Reset() OVERRIDE { @@ -1809,7 +1809,7 @@ class npc_toc_rogue : public CreatureScript struct npc_toc_rogueAI : public boss_faction_championsAI { - npc_toc_rogueAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) {} + npc_toc_rogueAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { } void Reset() OVERRIDE { @@ -1914,7 +1914,7 @@ class npc_toc_enh_shaman : public CreatureScript struct npc_toc_enh_shamanAI : public boss_faction_championsAI { - npc_toc_enh_shamanAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) {} + npc_toc_enh_shamanAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { } void Reset() OVERRIDE { @@ -2040,7 +2040,7 @@ class npc_toc_retro_paladin : public CreatureScript struct npc_toc_retro_paladinAI : public boss_faction_championsAI { - npc_toc_retro_paladinAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) {} + npc_toc_retro_paladinAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { } void Reset() OVERRIDE { @@ -2146,7 +2146,7 @@ class npc_toc_pet_warlock : public CreatureScript struct npc_toc_pet_warlockAI : public boss_faction_championsAI { - npc_toc_pet_warlockAI(Creature* creature) : boss_faction_championsAI(creature, AI_PET) {} + npc_toc_pet_warlockAI(Creature* creature) : boss_faction_championsAI(creature, AI_PET) { } void Reset() OVERRIDE { @@ -2198,7 +2198,7 @@ class npc_toc_pet_hunter : public CreatureScript struct npc_toc_pet_hunterAI : public boss_faction_championsAI { - npc_toc_pet_hunterAI(Creature* creature) : boss_faction_championsAI(creature, AI_PET) {} + npc_toc_pet_hunterAI(Creature* creature) : boss_faction_championsAI(creature, AI_PET) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp index 7b0867b771c..6fd8811b270 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp @@ -553,7 +553,7 @@ class MistressKissTargetSelector class spell_mistress_kiss_area : public SpellScriptLoader { public: - spell_mistress_kiss_area() : SpellScriptLoader("spell_mistress_kiss_area") {} + spell_mistress_kiss_area() : SpellScriptLoader("spell_mistress_kiss_area") { } class spell_mistress_kiss_area_SpellScript : public SpellScript { diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index 18cc45657f0..8f6b951d524 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -830,7 +830,7 @@ class npc_slime_pool : public CreatureScript class spell_gormok_fire_bomb : public SpellScriptLoader { public: - spell_gormok_fire_bomb() : SpellScriptLoader("spell_gormok_fire_bomb") {} + spell_gormok_fire_bomb() : SpellScriptLoader("spell_gormok_fire_bomb") { } class spell_gormok_fire_bomb_SpellScript : public SpellScript { diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index eb36c35d895..0674696a033 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -462,7 +462,7 @@ class boss_eydis : public CreatureScript struct boss_eydisAI : public boss_twin_baseAI { - boss_eydisAI(Creature* creature) : boss_twin_baseAI(creature) {} + boss_eydisAI(Creature* creature) : boss_twin_baseAI(creature) { } void Reset() OVERRIDE { @@ -592,7 +592,7 @@ class npc_unleashed_dark : public CreatureScript struct npc_unleashed_darkAI : public npc_unleashed_ballAI { - npc_unleashed_darkAI(Creature* creature) : npc_unleashed_ballAI(creature) {} + npc_unleashed_darkAI(Creature* creature) : npc_unleashed_ballAI(creature) { } void UpdateAI(uint32 diff) OVERRIDE { @@ -624,7 +624,7 @@ class npc_unleashed_light : public CreatureScript struct npc_unleashed_lightAI : public npc_unleashed_ballAI { - npc_unleashed_lightAI(Creature* creature) : npc_unleashed_ballAI(creature) {} + npc_unleashed_lightAI(Creature* creature) : npc_unleashed_ballAI(creature) { } void UpdateAI(uint32 diff) OVERRIDE { diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp index 43e696f3b3c..9e401c4f962 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp @@ -29,7 +29,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript struct instance_trial_of_the_crusader_InstanceMapScript : public InstanceScript { - instance_trial_of_the_crusader_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_trial_of_the_crusader_InstanceMapScript(Map* map) : InstanceScript(map) { } void Initialize() OVERRIDE { diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp index 0160359f0f2..71386167d5d 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp @@ -276,11 +276,11 @@ public: class npc_crystal_channel_target : public CreatureScript { public: - npc_crystal_channel_target() : CreatureScript("npc_crystal_channel_target") {} + npc_crystal_channel_target() : CreatureScript("npc_crystal_channel_target") { } struct npc_crystal_channel_targetAI : public ScriptedAI { - npc_crystal_channel_targetAI(Creature* creature) : ScriptedAI(creature) {} + npc_crystal_channel_targetAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -339,7 +339,7 @@ public: class achievement_oh_novos : public AchievementCriteriaScript { public: - achievement_oh_novos() : AchievementCriteriaScript("achievement_oh_novos") {} + achievement_oh_novos() : AchievementCriteriaScript("achievement_oh_novos") { } bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE { diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index 530741ea710..e2d285f7306 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -57,7 +57,7 @@ public: struct boss_falricAI : public boss_horAI { - boss_falricAI(Creature* creature) : boss_horAI(creature) {} + boss_falricAI(Creature* creature) : boss_horAI(creature) { } uint8 uiHopelessnessCount; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp index 49fd7481dde..a87b7b6d93d 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp @@ -56,7 +56,7 @@ public: struct boss_marwynAI : public boss_horAI { - boss_marwynAI(Creature* creature) : boss_horAI(creature) {} + boss_marwynAI(Creature* creature) : boss_horAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 04145b8784e..1b82de35f54 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -1363,7 +1363,7 @@ public: struct npc_phantom_hallucinationAI : public npc_phantom_mage::npc_phantom_mageAI { - npc_phantom_hallucinationAI(Creature* creature) : npc_phantom_mage::npc_phantom_mageAI(creature) {} + npc_phantom_hallucinationAI(Creature* creature) : npc_phantom_mage::npc_phantom_mageAI(creature) { } void JustDied(Unit* /*killer*/) OVERRIDE { @@ -1728,7 +1728,7 @@ public: class at_hor_intro_start : public AreaTriggerScript { public: - at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") {} + at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") { } bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE { @@ -1747,7 +1747,7 @@ public: class at_hor_waves_restarter : public AreaTriggerScript { public: - at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") {} + at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") { } bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE { diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index 50600453368..0599596fc0a 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -73,7 +73,7 @@ public: struct instance_halls_of_reflection_InstanceMapScript : public InstanceScript { - instance_halls_of_reflection_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_halls_of_reflection_InstanceMapScript(Map* map) : InstanceScript(map) { } void Initialize() OVERRIDE { diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp index 0097fe8c4d7..441149c6dd8 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp @@ -221,7 +221,7 @@ public: struct npc_slad_ran_constrictorAI : public ScriptedAI { - npc_slad_ran_constrictorAI(Creature* creature) : ScriptedAI(creature) {} + npc_slad_ran_constrictorAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiGripOfSladRanTimer; @@ -272,7 +272,7 @@ public: struct npc_slad_ran_viperAI : public ScriptedAI { - npc_slad_ran_viperAI(Creature* creature) : ScriptedAI(creature) {} + npc_slad_ran_viperAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiVenomousBiteTimer; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index bdab8f3fce6..1e5919536f3 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -636,7 +636,7 @@ class spell_blood_queen_frenzied_bloodthirst : public SpellScriptLoader class BloodboltHitCheck { public: - explicit BloodboltHitCheck(LanaThelAI* ai) : _ai(ai) {} + explicit BloodboltHitCheck(LanaThelAI* ai) : _ai(ai) { } bool operator()(WorldObject* object) const { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index 0367a29bb30..027c8823af8 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -633,7 +633,7 @@ class npc_cult_fanatic : public CreatureScript struct npc_cult_fanaticAI : public ScriptedAI { - npc_cult_fanaticAI(Creature* creature) : ScriptedAI(creature) {} + npc_cult_fanaticAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -710,7 +710,7 @@ class npc_cult_adherent : public CreatureScript struct npc_cult_adherentAI : public ScriptedAI { - npc_cult_adherentAI(Creature* creature) : ScriptedAI(creature) {} + npc_cult_adherentAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 96627548848..cdcd8ed796a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -924,7 +924,7 @@ class spell_putricide_ooze_channel : public SpellScriptLoader class ExactDistanceCheck { public: - ExactDistanceCheck(Unit* source, float dist) : _source(source), _dist(dist) {} + ExactDistanceCheck(Unit* source, float dist) : _source(source), _dist(dist) { } bool operator()(WorldObject* unit) const { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index fba64a89d83..d8a95d5c1fb 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -2422,7 +2422,7 @@ class spell_the_lich_king_raging_spirit : public SpellScriptLoader class ExactDistanceCheck { public: - ExactDistanceCheck(Unit* source, float dist) : _source(source), _dist(dist) {} + ExactDistanceCheck(Unit* source, float dist) : _source(source), _dist(dist) { } bool operator()(WorldObject* unit) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index e3e1bfedc44..9116222a4e0 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -288,7 +288,7 @@ enum MovementPoints class FrostwingVrykulSearcher { public: - FrostwingVrykulSearcher(Creature const* source, float range) : _source(source), _range(range) {} + FrostwingVrykulSearcher(Creature const* source, float range) : _source(source), _range(range) { } bool operator()(Unit* unit) { @@ -1833,7 +1833,7 @@ class spell_icc_sprit_alarm : public SpellScriptLoader class DeathPlagueTargetSelector { public: - explicit DeathPlagueTargetSelector(Unit* caster) : _caster(caster) {} + explicit DeathPlagueTargetSelector(Unit* caster) : _caster(caster) { } bool operator()(WorldObject* object) const { diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index 928ffd14dea..b873b3ee15c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -64,7 +64,7 @@ public: struct boss_anubrekhanAI : public BossAI { - boss_anubrekhanAI(Creature* creature) : BossAI(creature, BOSS_ANUBREKHAN) {} + boss_anubrekhanAI(Creature* creature) : BossAI(creature, BOSS_ANUBREKHAN) { } bool hasTaunted; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 90f14bf43e4..a5c35650032 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -145,7 +145,7 @@ float const PosPlatform[4] = {2640.5f, -3360.6f, 285.26f, 0.0f}; // Predicate function to check that the r efzr unit is NOT on the same side as the source. struct NotOnSameSide : public std::unary_function { - NotOnSameSide(Unit* source) : _onLiveSide(IN_LIVE_SIDE(source)) {} + NotOnSameSide(Unit* source) : _onLiveSide(IN_LIVE_SIDE(source)) { } bool operator() (Unit const* target) { @@ -163,7 +163,7 @@ class boss_gothik : public CreatureScript struct boss_gothikAI : public BossAI { - boss_gothikAI(Creature* creature) : BossAI(creature, BOSS_GOTHIK) {} + boss_gothikAI(Creature* creature) : BossAI(creature, BOSS_GOTHIK) { } uint32 waveCount; typedef std::vector TriggerVct; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp index 14a7a03bd70..a8e2783602f 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp @@ -66,7 +66,7 @@ public: struct boss_heiganAI : public BossAI { - boss_heiganAI(Creature* creature) : BossAI(creature, BOSS_HEIGAN) {} + boss_heiganAI(Creature* creature) : BossAI(creature, BOSS_HEIGAN) { } uint32 eruptSection; bool eruptDirection; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index a77b21a900b..f9efdfce28b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -248,7 +248,7 @@ const Position PosWeavers[MAX_WEAVERS] = // predicate function to select not charmed target struct NotCharmedTargetSelector : public std::unary_function { - NotCharmedTargetSelector() {} + NotCharmedTargetSelector() { } bool operator()(Unit const* target) const { diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index 468739894f6..588d58c1436 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -70,7 +70,7 @@ public: struct boss_maexxnaAI : public BossAI { - boss_maexxnaAI(Creature* creature) : BossAI(creature, BOSS_MAEXXNA) {} + boss_maexxnaAI(Creature* creature) : BossAI(creature, BOSS_MAEXXNA) { } bool enraged; @@ -161,7 +161,7 @@ public: struct npc_webwrapAI : public NullCreatureAI { - npc_webwrapAI(Creature* creature) : NullCreatureAI(creature), victimGUID(0) {} + npc_webwrapAI(Creature* creature) : NullCreatureAI(creature), victimGUID(0) { } uint64 victimGUID; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index e01417574bb..d90db5e077e 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -80,7 +80,7 @@ public: struct boss_nothAI : public BossAI { - boss_nothAI(Creature* creature) : BossAI(creature, BOSS_NOTH) {} + boss_nothAI(Creature* creature) : BossAI(creature, BOSS_NOTH) { } uint32 waveCount, balconyCount; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp index bf3e7706f4d..96f2d743cac 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp @@ -62,7 +62,7 @@ public: struct boss_patchwerkAI : public BossAI { - boss_patchwerkAI(Creature* creature) : BossAI(creature, BOSS_PATCHWERK) {} + boss_patchwerkAI(Creature* creature) : BossAI(creature, BOSS_PATCHWERK) { } bool Enraged; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 5505b83d411..3ac20df24d6 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -68,7 +68,7 @@ public: struct boss_razuviousAI : public BossAI { - boss_razuviousAI(Creature* creature) : BossAI(creature, BOSS_RAZUVIOUS) {} + boss_razuviousAI(Creature* creature) : BossAI(creature, BOSS_RAZUVIOUS) { } void KilledUnit(Unit* /*victim*/) OVERRIDE { diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp index 175816e3ae7..26a090f6bcf 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp @@ -54,7 +54,7 @@ public: struct boss_commander_kolurgAI : public ScriptedAI { - boss_commander_kolurgAI(Creature* creature) : ScriptedAI(creature) {} + boss_commander_kolurgAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} void EnterCombat(Unit* /*who*/) OVERRIDE {} diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp index 2f73c85a9cd..7e81b300773 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp @@ -48,7 +48,7 @@ public: struct boss_commander_stoutbeardAI : public ScriptedAI { - boss_commander_stoutbeardAI(Creature* creature) : ScriptedAI(creature) {} + boss_commander_stoutbeardAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} void AttackStart(Unit* /*who*/) OVERRIDE {} diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp index f26e70d6838..423937303b5 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp @@ -49,7 +49,7 @@ enum Events class OrmorokTanglerPredicate { public: - OrmorokTanglerPredicate(Unit* unit) : me(unit) {} + OrmorokTanglerPredicate(Unit* unit) : me(unit) { } bool operator() (WorldObject* object) const { @@ -67,7 +67,7 @@ public: struct boss_ormorokAI : public BossAI { - boss_ormorokAI(Creature* creature) : BossAI(creature, DATA_ORMOROK_EVENT) {} + boss_ormorokAI(Creature* creature) : BossAI(creature, DATA_ORMOROK_EVENT) { } void EnterCombat(Unit* /*who*/) OVERRIDE { @@ -188,7 +188,7 @@ public: struct npc_crystal_spike_triggerAI : public ScriptedAI { - npc_crystal_spike_triggerAI(Creature* creature) : ScriptedAI(creature) {} + npc_crystal_spike_triggerAI(Creature* creature) : ScriptedAI(creature) { } void IsSummonedBy(Unit* owner) OVERRIDE { diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp index 4df7109c16c..109106d4d59 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp @@ -40,7 +40,7 @@ public: struct instance_nexus_InstanceMapScript : public InstanceScript { - instance_nexus_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_nexus_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 m_auiEncounter[NUMBER_OF_ENCOUNTERS]; diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp index 59652a7d4a1..25091a457f2 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp @@ -62,7 +62,7 @@ public: struct boss_drakosAI : public BossAI { - boss_drakosAI(Creature* creature) : BossAI(creature, DATA_DRAKOS_EVENT) {} + boss_drakosAI(Creature* creature) : BossAI(creature, DATA_DRAKOS_EVENT) { } void Reset() OVERRIDE { @@ -156,7 +156,7 @@ public: struct npc_unstable_sphereAI : public ScriptedAI { - npc_unstable_sphereAI(Creature* creature) : ScriptedAI(creature) {} + npc_unstable_sphereAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index 436a978d15e..678748b1f01 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -99,7 +99,7 @@ public: struct boss_uromAI : public BossAI { - boss_uromAI(Creature* creature) : BossAI(creature, DATA_UROM_EVENT) {} + boss_uromAI(Creature* creature) : BossAI(creature, DATA_UROM_EVENT) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp index fbf39a705ee..bc72c808a6f 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp @@ -293,7 +293,7 @@ class spell_varos_centrifuge_shield : public SpellScriptLoader class spell_varos_energize_core_area_enemy : public SpellScriptLoader { public: - spell_varos_energize_core_area_enemy() : SpellScriptLoader("spell_varos_energize_core_area_enemy") {} + spell_varos_energize_core_area_enemy() : SpellScriptLoader("spell_varos_energize_core_area_enemy") { } class spell_varos_energize_core_area_enemySpellScript : public SpellScript { @@ -340,7 +340,7 @@ class spell_varos_energize_core_area_enemy : public SpellScriptLoader class spell_varos_energize_core_area_entry : public SpellScriptLoader { public: - spell_varos_energize_core_area_entry() : SpellScriptLoader("spell_varos_energize_core_area_entry") {} + spell_varos_energize_core_area_entry() : SpellScriptLoader("spell_varos_energize_core_area_entry") { } class spell_varos_energize_core_area_entrySpellScript : public SpellScript { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp index 428d24a38ea..70424119a0a 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp @@ -41,7 +41,7 @@ public: struct instance_oculus_InstanceMapScript : public InstanceScript { - instance_oculus_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_oculus_InstanceMapScript(Map* map) : InstanceScript(map) { } void Initialize() OVERRIDE { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 8f69d905d6f..aa3c034da6e 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -295,7 +295,7 @@ class SummonUnleashedDarkMatter : public BasicEvent class boss_algalon_the_observer : public CreatureScript { public: - boss_algalon_the_observer() : CreatureScript("boss_algalon_the_observer") {} + boss_algalon_the_observer() : CreatureScript("boss_algalon_the_observer") { } struct boss_algalon_the_observerAI : public BossAI { @@ -957,7 +957,7 @@ class npc_brann_bronzebeard_algalon : public CreatureScript class go_celestial_planetarium_access : public GameObjectScript { public: - go_celestial_planetarium_access() : GameObjectScript("go_celestial_planetarium_access") {} + go_celestial_planetarium_access() : GameObjectScript("go_celestial_planetarium_access") { } struct go_celestial_planetarium_accessAI : public GameObjectAI { 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 dec27808321..01559c37cfd 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -680,7 +680,7 @@ class boss_flame_leviathan_defense_turret : public CreatureScript struct boss_flame_leviathan_defense_turretAI : public TurretAI { - boss_flame_leviathan_defense_turretAI(Creature* creature) : TurretAI(creature) {} + boss_flame_leviathan_defense_turretAI(Creature* creature) : TurretAI(creature) { } void DamageTaken(Unit* who, uint32 &damage) OVERRIDE { @@ -1498,7 +1498,7 @@ class spell_auto_repair : public SpellScriptLoader }; public: - spell_auto_repair() : SpellScriptLoader("spell_auto_repair") {} + spell_auto_repair() : SpellScriptLoader("spell_auto_repair") { } class spell_auto_repair_SpellScript : public SpellScript { @@ -1607,7 +1607,7 @@ class FlameLeviathanPursuedTargetSelector }; public: - explicit FlameLeviathanPursuedTargetSelector(Unit* unit) : _me(unit) {}; + explicit FlameLeviathanPursuedTargetSelector(Unit* unit) : _me(unit) { }; bool operator()(WorldObject* target) const { @@ -1645,7 +1645,7 @@ class FlameLeviathanPursuedTargetSelector class spell_pursue : public SpellScriptLoader { public: - spell_pursue() : SpellScriptLoader("spell_pursue") {} + spell_pursue() : SpellScriptLoader("spell_pursue") { } class spell_pursue_SpellScript : public SpellScript { @@ -1717,7 +1717,7 @@ class spell_pursue : public SpellScriptLoader class spell_vehicle_throw_passenger : public SpellScriptLoader { public: - spell_vehicle_throw_passenger() : SpellScriptLoader("spell_vehicle_throw_passenger") {} + spell_vehicle_throw_passenger() : SpellScriptLoader("spell_vehicle_throw_passenger") { } class spell_vehicle_throw_passenger_SpellScript : public SpellScript { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index dfeeebaae99..ec2cf36822d 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -361,7 +361,7 @@ class spell_ulduar_rubble_summon : public SpellScriptLoader class StoneGripTargetSelector : public std::unary_function { public: - StoneGripTargetSelector(Creature* me, Unit const* victim) : _me(me), _victim(victim) {} + StoneGripTargetSelector(Creature* me, Unit const* victim) : _me(me), _victim(victim) { } bool operator()(WorldObject* target) { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index fb835b5a4d9..e28e86ade96 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -307,7 +307,7 @@ class boss_razorscale_controller : public CreatureScript class go_razorscale_harpoon : public GameObjectScript { public: - go_razorscale_harpoon() : GameObjectScript("go_razorscale_harpoon") {} + go_razorscale_harpoon() : GameObjectScript("go_razorscale_harpoon") { } bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE { diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp index b46a41af678..75aa2994dbc 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp @@ -321,7 +321,7 @@ class npc_vrykul_skeleton : public CreatureScript class spell_frost_tomb : public SpellScriptLoader { public: - spell_frost_tomb() : SpellScriptLoader("spell_frost_tomb") {} + spell_frost_tomb() : SpellScriptLoader("spell_frost_tomb") { } class spell_frost_tomb_AuraScript : public AuraScript { @@ -352,7 +352,7 @@ class spell_frost_tomb : public SpellScriptLoader class achievement_on_the_rocks : public AchievementCriteriaScript { public: - achievement_on_the_rocks() : AchievementCriteriaScript("achievement_on_the_rocks") {} + achievement_on_the_rocks() : AchievementCriteriaScript("achievement_on_the_rocks") { } bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE { diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp index ffdd8fe232f..5247f9019da 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp @@ -61,7 +61,7 @@ enum Spells class SkarvaldChargePredicate { public: - SkarvaldChargePredicate(Unit* unit) : me(unit) {} + SkarvaldChargePredicate(Unit* unit) : me(unit) { } bool operator() (WorldObject* object) const { diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp index 0277c21cb83..4959b3a6b58 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp @@ -47,7 +47,7 @@ public: struct instance_pinnacle : public InstanceScript { - instance_pinnacle(Map* map) : InstanceScript(map) {} + instance_pinnacle(Map* map) : InstanceScript(map) { } uint64 uiSvalaSorrowgrave; uint64 uiGortokPalehoof; diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp index 22174ea2528..e8e54184cb3 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp @@ -128,7 +128,7 @@ class npc_frost_warder : public CreatureScript struct npc_frost_warderAI : public ScriptedAI { - npc_frost_warderAI(Creature* creature) : ScriptedAI(creature) {} + npc_frost_warderAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index 60d7570b96f..4ff0f2d36e9 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -112,7 +112,7 @@ public: struct instance_violet_hold_InstanceMapScript : public InstanceScript { - instance_violet_hold_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_violet_hold_InstanceMapScript(Map* map) : InstanceScript(map) { } uint64 uiMoragg; uint64 uiErekem; diff --git a/src/server/scripts/Northrend/isle_of_conquest.cpp b/src/server/scripts/Northrend/isle_of_conquest.cpp index 9efcd8406d7..62173bb2145 100644 --- a/src/server/scripts/Northrend/isle_of_conquest.cpp +++ b/src/server/scripts/Northrend/isle_of_conquest.cpp @@ -27,7 +27,7 @@ class npc_four_car_garage : public CreatureScript { public: - npc_four_car_garage() : CreatureScript("npc_four_car_garage") {} + npc_four_car_garage() : CreatureScript("npc_four_car_garage") { } struct npc_four_car_garageAI : public NullCreatureAI { diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 2b5508272d9..935860a6b0c 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -175,7 +175,7 @@ public: struct npc_khunok_the_behemothAI : public ScriptedAI { - npc_khunok_the_behemothAI(Creature* creature) : ScriptedAI(creature) {} + npc_khunok_the_behemothAI(Creature* creature) : ScriptedAI(creature) { } void MoveInLineOfSight(Unit* who) OVERRIDE @@ -355,7 +355,7 @@ public: struct npc_nerubar_victimAI : public ScriptedAI { - npc_nerubar_victimAI(Creature* creature) : ScriptedAI(creature) {} + npc_nerubar_victimAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} void EnterCombat(Unit* /*who*/) OVERRIDE {} @@ -411,7 +411,7 @@ public: struct npc_jennyAI : public ScriptedAI { - npc_jennyAI(Creature* creature) : ScriptedAI(creature) {} + npc_jennyAI(Creature* creature) : ScriptedAI(creature) { } bool setCrateNumber; @@ -472,7 +472,7 @@ public: struct npc_fezzix_geartwistAI : public ScriptedAI { - npc_fezzix_geartwistAI(Creature* creature) : ScriptedAI(creature) {} + npc_fezzix_geartwistAI(Creature* creature) : ScriptedAI(creature) { } void MoveInLineOfSight(Unit* who) OVERRIDE @@ -959,7 +959,7 @@ public: struct npc_thassarianAI : public npc_escortAI { - npc_thassarianAI(Creature* creature) : npc_escortAI(creature) {} + npc_thassarianAI(Creature* creature) : npc_escortAI(creature) { } uint64 arthasGUID; uint64 talbotGUID; @@ -1263,7 +1263,7 @@ public: struct npc_image_lich_kingAI : public ScriptedAI { - npc_image_lich_kingAI(Creature* creature) : ScriptedAI(creature) {} + npc_image_lich_kingAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -1298,7 +1298,7 @@ public: struct npc_general_arlosAI : public ScriptedAI { - npc_general_arlosAI(Creature* creature) : ScriptedAI(creature) {} + npc_general_arlosAI(Creature* creature) : ScriptedAI(creature) { } void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE { @@ -1587,7 +1587,7 @@ public: struct npc_beryl_sorcererAI : public FollowerAI { - npc_beryl_sorcererAI(Creature* creature) : FollowerAI(creature) {} + npc_beryl_sorcererAI(Creature* creature) : FollowerAI(creature) { } bool bEnslaved; @@ -1672,7 +1672,7 @@ public: struct npc_imprisoned_beryl_sorcererAI : public ScriptedAI { - npc_imprisoned_beryl_sorcererAI(Creature* creature) : ScriptedAI(creature) {} + npc_imprisoned_beryl_sorcererAI(Creature* creature) : ScriptedAI(creature) { } uint32 rebuff; @@ -1799,7 +1799,7 @@ public: struct npc_mootoo_the_youngerAI : public npc_escortAI { - npc_mootoo_the_youngerAI(Creature* creature) : npc_escortAI(creature) {} + npc_mootoo_the_youngerAI(Creature* creature) : npc_escortAI(creature) { } void Reset() OVERRIDE { @@ -1880,7 +1880,7 @@ public: struct npc_bonker_togglevoltAI : public npc_escortAI { - npc_bonker_togglevoltAI(Creature* creature) : npc_escortAI(creature) {} + npc_bonker_togglevoltAI(Creature* creature) : npc_escortAI(creature) { } uint32 Bonker_agro; void Reset() OVERRIDE @@ -1978,7 +1978,7 @@ public: struct npc_trapped_mammoth_calfAI : public ScriptedAI { - npc_trapped_mammoth_calfAI(Creature* creature) : ScriptedAI(creature) {} + npc_trapped_mammoth_calfAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiTimer; bool bStarted; @@ -2067,7 +2067,7 @@ public: struct npc_magmoth_crusherAI : public ScriptedAI { - npc_magmoth_crusherAI(Creature* creature) : ScriptedAI(creature) {} + npc_magmoth_crusherAI(Creature* creature) : ScriptedAI(creature) { } void JustDied(Unit* killer) OVERRIDE { @@ -2168,7 +2168,7 @@ public: struct npc_valiance_keep_cannoneerAI : public ScriptedAI { - npc_valiance_keep_cannoneerAI(Creature* creature) : ScriptedAI(creature) {} + npc_valiance_keep_cannoneerAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiTimer; @@ -2226,7 +2226,7 @@ public: struct npc_warmage_coldarraAI : public ScriptedAI { - npc_warmage_coldarraAI(Creature* creature) : ScriptedAI(creature) {} + npc_warmage_coldarraAI(Creature* creature) : ScriptedAI(creature) { } uint32 m_uiTimer; //Timer until recast diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 1a080824136..d942f05e5b0 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -217,7 +217,7 @@ public: struct npc_mrfloppyAI : public ScriptedAI { - npc_mrfloppyAI(Creature* creature) : ScriptedAI(creature) {} + npc_mrfloppyAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} @@ -279,7 +279,7 @@ public: struct npc_outhouse_bunnyAI : public ScriptedAI { - npc_outhouse_bunnyAI(Creature* creature) : ScriptedAI(creature) {} + npc_outhouse_bunnyAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -341,7 +341,7 @@ public: struct npc_tallhorn_stagAI : public ScriptedAI { - npc_tallhorn_stagAI(Creature* creature) : ScriptedAI(creature) {} + npc_tallhorn_stagAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -393,7 +393,7 @@ public: struct npc_amberpine_woodsmanAI : public ScriptedAI { - npc_amberpine_woodsmanAI(Creature* creature) : ScriptedAI(creature) {} + npc_amberpine_woodsmanAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -459,7 +459,7 @@ public: struct npc_wounded_skirmisherAI : public ScriptedAI { - npc_wounded_skirmisherAI(Creature* creature) : ScriptedAI(creature) {} + npc_wounded_skirmisherAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index 24452a5fb5f..814503498f0 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -306,7 +306,7 @@ public: struct npc_vereth_the_cunningAI : public ScriptedAI { - npc_vereth_the_cunningAI(Creature* creature) : ScriptedAI(creature) {} + npc_vereth_the_cunningAI(Creature* creature) : ScriptedAI(creature) { } void MoveInLineOfSight(Unit* who) OVERRIDE diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index bf284c5138b..a9998d1a708 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -502,7 +502,7 @@ public: struct npc_jungle_punch_targetAI : public ScriptedAI { - npc_jungle_punch_targetAI(Creature* creature) : ScriptedAI(creature) {} + npc_jungle_punch_targetAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -1016,7 +1016,7 @@ public: struct npc_vics_flying_machineAI : public VehicleAI { - npc_vics_flying_machineAI(Creature* creature) : VehicleAI(creature) {} + npc_vics_flying_machineAI(Creature* creature) : VehicleAI(creature) { } void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) OVERRIDE { diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 1fc0cce51b4..9d37087e505 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -178,7 +178,7 @@ public: struct npc_brunnhildar_prisonerAI : public ScriptedAI { - npc_brunnhildar_prisonerAI(Creature* creature) : ScriptedAI(creature) {} + npc_brunnhildar_prisonerAI(Creature* creature) : ScriptedAI(creature) { } bool freed; @@ -250,7 +250,7 @@ public: struct npc_freed_protodrakeAI : public VehicleAI { - npc_freed_protodrakeAI(Creature* creature) : VehicleAI(creature) {} + npc_freed_protodrakeAI(Creature* creature) : VehicleAI(creature) { } EventMap events; @@ -323,7 +323,7 @@ public: struct npc_icefangAI : public npc_escortAI { - npc_icefangAI(Creature* creature) : npc_escortAI(creature) {} + npc_icefangAI(Creature* creature) : npc_escortAI(creature) { } void AttackStart(Unit* /*who*/) OVERRIDE {} void EnterCombat(Unit* /*who*/) OVERRIDE {} @@ -378,7 +378,7 @@ class npc_hyldsmeet_protodrake : public CreatureScript class npc_hyldsmeet_protodrakeAI : public CreatureAI { public: - npc_hyldsmeet_protodrakeAI(Creature* creature) : CreatureAI(creature), _accessoryRespawnTimer(0), _vehicleKit(creature->GetVehicleKit()) {} + npc_hyldsmeet_protodrakeAI(Creature* creature) : CreatureAI(creature), _accessoryRespawnTimer(0), _vehicleKit(creature->GetVehicleKit()) { } void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) OVERRIDE { diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 3a2d5c592fe..d43ec59f817 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -47,7 +47,7 @@ public: struct npc_drakuru_shacklesAI : public ScriptedAI { - npc_drakuru_shacklesAI(Creature* creature) : ScriptedAI(creature) {} + npc_drakuru_shacklesAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -133,7 +133,7 @@ public: struct npc_captured_rageclawAI : public ScriptedAI { - npc_captured_rageclawAI(Creature* creature) : ScriptedAI(creature) {} + npc_captured_rageclawAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -267,7 +267,7 @@ public: struct npc_gurgthockAI : public ScriptedAI { - npc_gurgthockAI(Creature* creature) : ScriptedAI(creature) {} + npc_gurgthockAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -726,7 +726,7 @@ public: struct npc_yggdrasAI : public ScriptedAI { - npc_yggdrasAI(Creature* creature) : ScriptedAI(creature) {} + npc_yggdrasAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -943,7 +943,7 @@ public: struct npc_elemental_lordAI : public ScriptedAI { - npc_elemental_lordAI(Creature* creature) : ScriptedAI(creature) {} + npc_elemental_lordAI(Creature* creature) : ScriptedAI(creature) { } std::list SummonList; @@ -1088,7 +1088,7 @@ public: struct npc_fiend_elementalAI : public ScriptedAI { - npc_fiend_elementalAI(Creature* creature) : ScriptedAI(creature) {} + npc_fiend_elementalAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -1154,7 +1154,7 @@ public: struct npc_released_offspring_harkoaAI : public ScriptedAI { - npc_released_offspring_harkoaAI(Creature* creature) : ScriptedAI(creature) {} + npc_released_offspring_harkoaAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -1200,7 +1200,7 @@ public: struct npc_crusade_recruitAI : public ScriptedAI { - npc_crusade_recruitAI(Creature* creature) : ScriptedAI(creature) {} + npc_crusade_recruitAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -1831,7 +1831,7 @@ public: struct npc_storm_cloudAI : public ScriptedAI { - npc_storm_cloudAI(Creature* creature) : ScriptedAI(creature) {} + npc_storm_cloudAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h index 60dce43bc42..d6743428db0 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h @@ -205,7 +205,7 @@ class OPvPCapturePointZM_GraveYard : public OPvPCapturePoint bool Update(uint32 diff); - void ChangeState() {} + void ChangeState() { } void FillInitialWorldStates(WorldPacket & data); diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp index 9735011ba81..4f7ac113547 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp @@ -61,7 +61,7 @@ public: struct npc_stolen_soulAI : public ScriptedAI { - npc_stolen_soulAI(Creature* creature) : ScriptedAI(creature) {} + npc_stolen_soulAI(Creature* creature) : ScriptedAI(creature) { } uint8 myClass; uint32 Class_Timer; @@ -314,7 +314,7 @@ public: struct npc_avatar_of_martyredAI : public ScriptedAI { - npc_avatar_of_martyredAI(Creature* creature) : ScriptedAI(creature) {} + npc_avatar_of_martyredAI(Creature* creature) : ScriptedAI(creature) { } uint32 Mortal_Strike_timer; diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp index 83c0cbf04d5..4083d6edc0e 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp @@ -331,7 +331,7 @@ public: struct npc_ethereal_apprenticeAI : public ScriptedAI { - npc_ethereal_apprenticeAI(Creature* creature) : ScriptedAI(creature) {} + npc_ethereal_apprenticeAI(Creature* creature) : ScriptedAI(creature) { } uint32 Cast_Timer; @@ -378,7 +378,7 @@ public: struct npc_yorAI : public ScriptedAI { - npc_yorAI(Creature* creature) : ScriptedAI(creature) {} + npc_yorAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.cpp b/src/server/scripts/Outland/BlackTemple/black_temple.cpp index a44c5f58dc4..57c494756e5 100644 --- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp @@ -63,7 +63,7 @@ public: struct npc_spirit_of_olumAI : public ScriptedAI { - npc_spirit_of_olumAI(Creature* creature) : ScriptedAI(creature) {} + npc_spirit_of_olumAI(Creature* creature) : ScriptedAI(creature) { } void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) OVERRIDE { diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 279a846140c..aceb664cb3d 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -377,7 +377,7 @@ public: struct flame_of_azzinothAI : public ScriptedAI { - flame_of_azzinothAI(Creature* creature) : ScriptedAI(creature) {} + flame_of_azzinothAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -1140,7 +1140,7 @@ public: struct boss_maievAI : public ScriptedAI { - boss_maievAI(Creature* creature) : ScriptedAI(creature) {}; + boss_maievAI(Creature* creature) : ScriptedAI(creature) { }; void Reset() OVERRIDE { @@ -1976,7 +1976,7 @@ public: struct cage_trap_triggerAI : public ScriptedAI { - cage_trap_triggerAI(Creature* creature) : ScriptedAI(creature) {} + cage_trap_triggerAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -2074,7 +2074,7 @@ public: struct shadow_demonAI : public ScriptedAI { - shadow_demonAI(Creature* creature) : ScriptedAI(creature) {} + shadow_demonAI(Creature* creature) : ScriptedAI(creature) { } void EnterCombat(Unit* /*who*/) OVERRIDE { @@ -2130,7 +2130,7 @@ public: struct blade_of_azzinothAI : public NullCreatureAI { - blade_of_azzinothAI(Creature* creature) : NullCreatureAI(creature) {} + blade_of_azzinothAI(Creature* creature) : NullCreatureAI(creature) { } void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE { diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp index ab3bc98b41b..ad913a45071 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp @@ -111,7 +111,7 @@ public: struct npc_enslaved_soulAI : public ScriptedAI { - npc_enslaved_soulAI(Creature* creature) : ScriptedAI(creature) {} + npc_enslaved_soulAI(Creature* creature) : ScriptedAI(creature) { } uint64 ReliquaryGUID; @@ -393,7 +393,7 @@ public: struct boss_essence_of_sufferingAI : public ScriptedAI { - boss_essence_of_sufferingAI(Creature* creature) : ScriptedAI(creature) {} + boss_essence_of_sufferingAI(Creature* creature) : ScriptedAI(creature) { } uint64 StatAuraGUID; @@ -516,7 +516,7 @@ public: struct boss_essence_of_desireAI : public ScriptedAI { - boss_essence_of_desireAI(Creature* creature) : ScriptedAI(creature) {} + boss_essence_of_desireAI(Creature* creature) : ScriptedAI(creature) { } uint32 RuneShieldTimer; uint32 DeadenTimer; @@ -619,7 +619,7 @@ public: struct boss_essence_of_angerAI : public ScriptedAI { - boss_essence_of_angerAI(Creature* creature) : ScriptedAI(creature) {} + boss_essence_of_angerAI(Creature* creature) : ScriptedAI(creature) { } uint64 AggroTargetGUID; diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp index 94423f87bdf..06adfe524cb 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp @@ -70,7 +70,7 @@ public: struct molten_flameAI : public NullCreatureAI { - molten_flameAI(Creature* creature) : NullCreatureAI(creature) {} + molten_flameAI(Creature* creature) : NullCreatureAI(creature) { } void InitializeAI() OVERRIDE { diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp index c02954c7b2f..68873312d35 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp @@ -63,7 +63,7 @@ public: struct npc_doom_blossomAI : public ScriptedAI { - npc_doom_blossomAI(Creature* creature) : ScriptedAI(creature) {} + npc_doom_blossomAI(Creature* creature) : ScriptedAI(creature) { } uint32 CheckTeronTimer; uint32 ShadowBoltTimer; @@ -132,7 +132,7 @@ public: struct npc_shadowy_constructAI : public ScriptedAI { - npc_shadowy_constructAI(Creature* creature) : ScriptedAI(creature) {} + npc_shadowy_constructAI(Creature* creature) : ScriptedAI(creature) { } uint64 GhostGUID; uint64 TeronGUID; diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp index 05d19eb62bf..b2569a582ad 100644 --- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp @@ -481,7 +481,7 @@ public: struct boss_gathios_the_shattererAI : public boss_illidari_councilAI { - boss_gathios_the_shattererAI(Creature* creature) : boss_illidari_councilAI(creature) {} + boss_gathios_the_shattererAI(Creature* creature) : boss_illidari_councilAI(creature) { } uint32 ConsecrationTimer; uint32 HammerOfJusticeTimer; @@ -613,7 +613,7 @@ public: struct boss_high_nethermancer_zerevorAI : public boss_illidari_councilAI { - boss_high_nethermancer_zerevorAI(Creature* creature) : boss_illidari_councilAI(creature) {} + boss_high_nethermancer_zerevorAI(Creature* creature) : boss_illidari_councilAI(creature) { } uint32 BlizzardTimer; uint32 FlamestrikeTimer; @@ -717,7 +717,7 @@ public: struct boss_lady_malandeAI : public boss_illidari_councilAI { - boss_lady_malandeAI(Creature* creature) : boss_illidari_councilAI(creature) {} + boss_lady_malandeAI(Creature* creature) : boss_illidari_councilAI(creature) { } uint32 EmpoweredSmiteTimer; uint32 CircleOfHealingTimer; @@ -795,7 +795,7 @@ public: struct boss_veras_darkshadowAI : public boss_illidari_councilAI { - boss_veras_darkshadowAI(Creature* creature) : boss_illidari_councilAI(creature) {} + boss_veras_darkshadowAI(Creature* creature) : boss_illidari_councilAI(creature) { } uint64 EnvenomTargetGUID; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp index a87ad44ef1c..308397eecc7 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp @@ -609,7 +609,7 @@ public: struct boss_leotheras_the_blind_demonformAI : public ScriptedAI { - boss_leotheras_the_blind_demonformAI(Creature* creature) : ScriptedAI(creature) {} + boss_leotheras_the_blind_demonformAI(Creature* creature) : ScriptedAI(creature) { } uint32 ChaosBlast_Timer; bool DealDamage; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index cd56005b3f6..0393379d26a 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -429,7 +429,7 @@ public: class go_strange_pool : public GameObjectScript { public: - go_strange_pool() : GameObjectScript("go_strange_pool") {} + go_strange_pool() : GameObjectScript("go_strange_pool") { } bool OnGossipHello(Player* player, GameObject* go) OVERRIDE { diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp index e0469dbfbfb..cbab7f0caf0 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp @@ -299,7 +299,7 @@ public: struct npc_water_globuleAI : public ScriptedAI { - npc_water_globuleAI(Creature* creature) : ScriptedAI(creature) {} + npc_water_globuleAI(Creature* creature) : ScriptedAI(creature) { } uint32 Check_Timer; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp index 50e9ffee196..05c8e3f7f64 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp @@ -146,7 +146,7 @@ public: struct npc_coilfang_waterelementalAI : public ScriptedAI { - npc_coilfang_waterelementalAI(Creature* creature) : ScriptedAI(creature) {} + npc_coilfang_waterelementalAI(Creature* creature) : ScriptedAI(creature) { } uint32 WaterBoltVolley_Timer; diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp index 3475e83f02c..cd11e2e1bf1 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp @@ -37,7 +37,7 @@ public: struct instance_the_slave_pens_InstanceMapScript : public InstanceScript { - instance_the_slave_pens_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_the_slave_pens_InstanceMapScript(Map* map) : InstanceScript(map) { } }; }; diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp index 0db48d83ebb..825c7173b18 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp @@ -116,7 +116,7 @@ public: struct npc_underbog_mushroomAI : public ScriptedAI { - npc_underbog_mushroomAI(Creature* creature) : ScriptedAI(creature) {} + npc_underbog_mushroomAI(Creature* creature) : ScriptedAI(creature) { } bool Stop; uint32 Grow_Timer; diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp index 0a305edf23f..08d80d3dd82 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp @@ -37,7 +37,7 @@ public: struct instance_the_underbog_InstanceMapScript : public InstanceScript { - instance_the_underbog_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_the_underbog_InstanceMapScript(Map* map) : InstanceScript(map) { } }; }; diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp index 2f5e160b335..be4cac80adb 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp @@ -161,7 +161,7 @@ class boss_broggok : public CreatureScript class go_broggok_lever : public GameObjectScript { public: - go_broggok_lever() : GameObjectScript("go_broggok_lever") {} + go_broggok_lever() : GameObjectScript("go_broggok_lever") { } bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE { diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp index fedf56eb929..cb37e3c5070 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp @@ -296,7 +296,7 @@ class npc_shadowmoon_channeler : public CreatureScript { public: - npc_shadowmoon_channeler() : CreatureScript("npc_shadowmoon_channeler") {} + npc_shadowmoon_channeler() : CreatureScript("npc_shadowmoon_channeler") { } struct npc_shadowmoon_channelerAI : public ScriptedAI { diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp index 8b233901608..b8edd55a3ed 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp @@ -36,11 +36,11 @@ class instance_blood_furnace : public InstanceMapScript { public: instance_blood_furnace() - : InstanceMapScript("instance_blood_furnace", 542) {} + : InstanceMapScript("instance_blood_furnace", 542) { } struct instance_blood_furnace_InstanceMapScript : public InstanceScript { - instance_blood_furnace_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_blood_furnace_InstanceMapScript(Map* map) : InstanceScript(map) { } uint64 The_MakerGUID; uint64 BroggokGUID; diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp index a4007a5a7b1..ab31ef476f9 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp @@ -456,7 +456,7 @@ class npc_hellfire_sentry : public CreatureScript struct npc_hellfire_sentryAI : public ScriptedAI { - npc_hellfire_sentryAI(Creature* creature) : ScriptedAI(creature) {} + npc_hellfire_sentryAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp index 260cdf0e2e6..0c8df4c01e7 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp @@ -34,7 +34,7 @@ class instance_ramparts : public InstanceMapScript struct instance_ramparts_InstanceMapScript : public InstanceScript { - instance_ramparts_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_ramparts_InstanceMapScript(Map* map) : InstanceScript(map) { } void Initialize() OVERRIDE { diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp index 0dbd21ff94a..0fa642b66cf 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp @@ -384,7 +384,7 @@ class npc_lesser_shadow_fissure : public CreatureScript struct npc_lesser_shadow_fissureAI : public ScriptedAI { - npc_lesser_shadow_fissureAI(Creature* creature) : ScriptedAI(creature) {} + npc_lesser_shadow_fissureAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} void MoveInLineOfSight(Unit* /*who*/) OVERRIDE {} diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index 8b2cce69dc7..59638a6f80f 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -539,7 +539,7 @@ class npc_flame_patch_alar : public CreatureScript struct npc_flame_patch_alarAI : public ScriptedAI { - npc_flame_patch_alarAI(Creature* creature) : ScriptedAI(creature) {} + npc_flame_patch_alarAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} void EnterCombat(Unit* /*who*/) OVERRIDE {} void AttackStart(Unit* /*who*/) OVERRIDE {} diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index cf25efb17c6..984844c3fa7 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -1026,7 +1026,7 @@ class boss_thaladred_the_darkener : public CreatureScript } struct boss_thaladred_the_darkenerAI : public advisorbase_ai { - boss_thaladred_the_darkenerAI(Creature* creature) : advisorbase_ai(creature) {} + boss_thaladred_the_darkenerAI(Creature* creature) : advisorbase_ai(creature) { } uint32 Gaze_Timer; uint32 Silence_Timer; @@ -1124,7 +1124,7 @@ class boss_lord_sanguinar : public CreatureScript } struct boss_lord_sanguinarAI : public advisorbase_ai { - boss_lord_sanguinarAI(Creature* creature) : advisorbase_ai(creature) {} + boss_lord_sanguinarAI(Creature* creature) : advisorbase_ai(creature) { } uint32 Fear_Timer; @@ -1191,7 +1191,7 @@ class boss_grand_astromancer_capernian : public CreatureScript } struct boss_grand_astromancer_capernianAI : public advisorbase_ai { - boss_grand_astromancer_capernianAI(Creature* creature) : advisorbase_ai(creature) {} + boss_grand_astromancer_capernianAI(Creature* creature) : advisorbase_ai(creature) { } uint32 Fireball_Timer; uint32 Conflagration_Timer; @@ -1336,7 +1336,7 @@ class boss_master_engineer_telonicus : public CreatureScript } struct boss_master_engineer_telonicusAI : public advisorbase_ai { - boss_master_engineer_telonicusAI(Creature* creature) : advisorbase_ai(creature) {} + boss_master_engineer_telonicusAI(Creature* creature) : advisorbase_ai(creature) { } uint32 Bomb_Timer; uint32 RemoteToy_Timer; @@ -1487,7 +1487,7 @@ class npc_phoenix_tk : public CreatureScript } struct npc_phoenix_tkAI : public ScriptedAI { - npc_phoenix_tkAI(Creature* creature) : ScriptedAI(creature) {} + npc_phoenix_tkAI(Creature* creature) : ScriptedAI(creature) { } uint32 Cycle_Timer; @@ -1541,7 +1541,7 @@ class npc_phoenix_egg_tk : public CreatureScript } struct npc_phoenix_egg_tkAI : public ScriptedAI { - npc_phoenix_egg_tkAI(Creature* creature) : ScriptedAI(creature) {} + npc_phoenix_egg_tkAI(Creature* creature) : ScriptedAI(creature) { } uint32 Rebirth_Timer; diff --git a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp index 9995efee99a..f5f75d79b63 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp @@ -46,7 +46,7 @@ class instance_the_eye : public InstanceMapScript struct instance_the_eye_InstanceMapScript : public InstanceScript { - instance_the_eye_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_the_eye_InstanceMapScript(Map* map) : InstanceScript(map) { } uint64 ThaladredTheDarkener; uint64 LordSanguinar; diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp index ab9b6ab3046..e8d52c3f819 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp @@ -47,7 +47,7 @@ class npc_crystalcore_devastator : public CreatureScript } struct npc_crystalcore_devastatorAI : public ScriptedAI { - npc_crystalcore_devastatorAI(Creature* creature) : ScriptedAI(creature) {} + npc_crystalcore_devastatorAI(Creature* creature) : ScriptedAI(creature) { } uint32 Knockaway_Timer; uint32 Countercharge_Timer; diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp index a2c6ba399a3..97a165453f8 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp @@ -53,11 +53,11 @@ enum Events class boss_gatewatcher_gyrokill : public CreatureScript { public: - boss_gatewatcher_gyrokill() : CreatureScript("boss_gatewatcher_gyrokill") {} + boss_gatewatcher_gyrokill() : CreatureScript("boss_gatewatcher_gyrokill") { } struct boss_gatewatcher_gyrokillAI : public BossAI { - boss_gatewatcher_gyrokillAI(Creature* creature) : BossAI(creature, DATA_GATEWATCHER_GYROKILL) {} + boss_gatewatcher_gyrokillAI(Creature* creature) : BossAI(creature, DATA_GATEWATCHER_GYROKILL) { } void JustDied(Unit* /*killer*/) OVERRIDE { diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp index 7dc073d82d7..6a4de059eb7 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp @@ -56,11 +56,11 @@ enum Events class boss_gatewatcher_iron_hand : public CreatureScript { public: - boss_gatewatcher_iron_hand(): CreatureScript("boss_gatewatcher_iron_hand") {} + boss_gatewatcher_iron_hand(): CreatureScript("boss_gatewatcher_iron_hand") { } struct boss_gatewatcher_iron_handAI : public BossAI { - boss_gatewatcher_iron_handAI(Creature* creature) : BossAI(creature, DATA_GATEWATCHER_IRON_HAND) {} + boss_gatewatcher_iron_handAI(Creature* creature) : BossAI(creature, DATA_GATEWATCHER_IRON_HAND) { } void EnterCombat(Unit* /*who*/) OVERRIDE { diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp index 565aefbd6b9..b5172245b49 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp @@ -61,11 +61,11 @@ enum Events class boss_nethermancer_sepethrea : public CreatureScript { - public: boss_nethermancer_sepethrea(): CreatureScript("boss_nethermancer_sepethrea") {} + public: boss_nethermancer_sepethrea(): CreatureScript("boss_nethermancer_sepethrea") { } struct boss_nethermancer_sepethreaAI : public BossAI { - boss_nethermancer_sepethreaAI(Creature* creature) : BossAI(creature, DATA_NETHERMANCER_SEPRETHREA) {} + boss_nethermancer_sepethreaAI(Creature* creature) : BossAI(creature, DATA_NETHERMANCER_SEPRETHREA) { } void EnterCombat(Unit* who) OVERRIDE { diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp index 1bcdcd48fce..822f8f1d486 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp @@ -69,7 +69,7 @@ enum Creatures class boss_pathaleon_the_calculator : public CreatureScript { public: - boss_pathaleon_the_calculator(): CreatureScript("boss_pathaleon_the_calculator") {} + boss_pathaleon_the_calculator(): CreatureScript("boss_pathaleon_the_calculator") { } struct boss_pathaleon_the_calculatorAI : public BossAI { @@ -172,7 +172,7 @@ class npc_nether_wraith : public CreatureScript struct npc_nether_wraithAI : public ScriptedAI { - npc_nether_wraithAI(Creature* creature) : ScriptedAI(creature) {} + npc_nether_wraithAI(Creature* creature) : ScriptedAI(creature) { } uint32 ArcaneMissiles_Timer; uint32 Detonation_Timer; diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp index f03cb033b0f..58b1df439ee 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp @@ -539,7 +539,7 @@ class npc_zerekethvoidzone : public CreatureScript } struct npc_zerekethvoidzoneAI : public ScriptedAI { - npc_zerekethvoidzoneAI(Creature* creature) : ScriptedAI(creature) {} + npc_zerekethvoidzoneAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp index c7765eb24ad..c4daa3d14a9 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp @@ -289,7 +289,7 @@ class boss_harbinger_skyriss_illusion : public CreatureScript } struct boss_harbinger_skyriss_illusionAI : public ScriptedAI { - boss_harbinger_skyriss_illusionAI(Creature* creature) : ScriptedAI(creature) {} + boss_harbinger_skyriss_illusionAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp index 41b87495c93..e836c5c4bf9 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp @@ -60,7 +60,7 @@ class instance_arcatraz : public InstanceMapScript } struct instance_arcatraz_InstanceMapScript : public InstanceScript { - instance_arcatraz_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_arcatraz_InstanceMapScript(Map* map) : InstanceScript(map) { } uint32 m_auiEncounter[MAX_ENCOUNTER]; diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index 57eb587140f..f5a904d58c6 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -67,7 +67,7 @@ public: struct npc_bladespire_ogreAI : public ScriptedAI { - npc_bladespire_ogreAI(Creature* creature) : ScriptedAI(creature) {} + npc_bladespire_ogreAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} @@ -119,7 +119,7 @@ public: struct npc_nether_drakeAI : public ScriptedAI { - npc_nether_drakeAI(Creature* creature) : ScriptedAI(creature) {} + npc_nether_drakeAI(Creature* creature) : ScriptedAI(creature) { } bool IsNihil; uint32 NihilSpeech_Timer; @@ -284,7 +284,7 @@ public: struct npc_daranelleAI : public ScriptedAI { - npc_daranelleAI(Creature* creature) : ScriptedAI(creature) {} + npc_daranelleAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} @@ -490,7 +490,7 @@ public: struct npc_ogre_bruteAI : public ScriptedAI { - npc_ogre_bruteAI(Creature* creature) : ScriptedAI(creature) {} + npc_ogre_bruteAI(Creature* creature) : ScriptedAI(creature) { } uint64 PlayerGUID; diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index fc7f4d2ae00..dd13cdf1fc9 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -68,7 +68,7 @@ public: struct npc_aeranasAI : public ScriptedAI { - npc_aeranasAI(Creature* creature) : ScriptedAI(creature) {} + npc_aeranasAI(Creature* creature) : ScriptedAI(creature) { } uint32 Faction_Timer; uint32 EnvelopingWinds_Timer; @@ -388,7 +388,7 @@ public: struct npc_wounded_blood_elfAI : public npc_escortAI { - npc_wounded_blood_elfAI(Creature* creature) : npc_escortAI(creature) {} + npc_wounded_blood_elfAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -462,7 +462,7 @@ public: struct npc_fel_guard_houndAI : public ScriptedAI { - npc_fel_guard_houndAI(Creature* creature) : ScriptedAI(creature) {} + npc_fel_guard_houndAI(Creature* creature) : ScriptedAI(creature) { } uint32 uiCheckTimer; uint64 uiHelboarGUID; diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp index 1d5e1b8b6a5..1caddd24efa 100644 --- a/src/server/scripts/Outland/zone_nagrand.cpp +++ b/src/server/scripts/Outland/zone_nagrand.cpp @@ -328,7 +328,7 @@ public: struct npc_creditmarker_visit_with_ancestorsAI : public ScriptedAI { - npc_creditmarker_visit_with_ancestorsAI(Creature* creature) : ScriptedAI(creature) {} + npc_creditmarker_visit_with_ancestorsAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} @@ -433,7 +433,7 @@ public: struct npc_corkiAI : public ScriptedAI { - npc_corkiAI(Creature* creature) : ScriptedAI(creature) {} + npc_corkiAI(Creature* creature) : ScriptedAI(creature) { } uint32 Say_Timer; bool ReleasedFromCage; diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index 7c328f57e78..7bb77644d0b 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -81,7 +81,7 @@ public: struct npc_manaforge_control_consoleAI : public ScriptedAI { - npc_manaforge_control_consoleAI(Creature* creature) : ScriptedAI(creature) {} + npc_manaforge_control_consoleAI(Creature* creature) : ScriptedAI(creature) { } uint32 Event_Timer; uint32 Wave_Timer; @@ -746,7 +746,7 @@ public: struct npc_phase_hunterAI : public ScriptedAI { - npc_phase_hunterAI(Creature* creature) : ScriptedAI(creature) {} + npc_phase_hunterAI(Creature* creature) : ScriptedAI(creature) { } bool Weak; bool Materialize; @@ -882,7 +882,7 @@ public: struct npc_bessyAI : public npc_escortAI { - npc_bessyAI(Creature* creature) : npc_escortAI(creature) {} + npc_bessyAI(Creature* creature) : npc_escortAI(creature) { } void JustDied(Unit* /*killer*/) OVERRIDE { @@ -953,7 +953,7 @@ public: struct npc_maxx_a_million_escortAI : public npc_escortAI { - npc_maxx_a_million_escortAI(Creature* creature) : npc_escortAI(creature) {} + npc_maxx_a_million_escortAI(Creature* creature) : npc_escortAI(creature) { } bool bTake; uint32 uiTakeTimer; diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 24fbcf881b2..716223c9a90 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -349,7 +349,7 @@ public: struct npc_dragonmaw_peonAI : public ScriptedAI { - npc_dragonmaw_peonAI(Creature* creature) : ScriptedAI(creature) {} + npc_dragonmaw_peonAI(Creature* creature) : ScriptedAI(creature) { } uint64 PlayerGUID; bool Tapped; @@ -726,7 +726,7 @@ public: struct npc_overlord_morghorAI : public ScriptedAI { - npc_overlord_morghorAI(Creature* creature) : ScriptedAI(creature) {} + npc_overlord_morghorAI(Creature* creature) : ScriptedAI(creature) { } uint64 PlayerGUID; uint64 IllidanGUID; @@ -1262,7 +1262,7 @@ public: struct npc_torloth_the_magnificentAI : public ScriptedAI { - npc_torloth_the_magnificentAI(Creature* creature) : ScriptedAI(creature) {} + npc_torloth_the_magnificentAI(Creature* creature) : ScriptedAI(creature) { } uint32 AnimationTimer, SpellTimer1, SpellTimer2, SpellTimer3; @@ -1417,7 +1417,7 @@ public: struct npc_lord_illidan_stormrageAI : public ScriptedAI { - npc_lord_illidan_stormrageAI(Creature* creature) : ScriptedAI(creature) {} + npc_lord_illidan_stormrageAI(Creature* creature) : ScriptedAI(creature) { } uint64 PlayerGUID; @@ -1559,7 +1559,7 @@ public: struct npc_illidari_spawnAI : public ScriptedAI { - npc_illidari_spawnAI(Creature* creature) : ScriptedAI(creature) {} + npc_illidari_spawnAI(Creature* creature) : ScriptedAI(creature) { } uint64 LordIllidanGUID; uint32 SpellTimer1, SpellTimer2, SpellTimer3; @@ -1814,7 +1814,7 @@ public: struct npc_enraged_spiritAI : public ScriptedAI { - npc_enraged_spiritAI(Creature* creature) : ScriptedAI(creature) {} + npc_enraged_spiritAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} @@ -1930,11 +1930,11 @@ enum ShadowMoonTuberEnum class npc_shadowmoon_tuber_node : public CreatureScript { public: - npc_shadowmoon_tuber_node() : CreatureScript("npc_shadowmoon_tuber_node") {} + npc_shadowmoon_tuber_node() : CreatureScript("npc_shadowmoon_tuber_node") { } struct npc_shadowmoon_tuber_nodeAI : public ScriptedAI { - npc_shadowmoon_tuber_nodeAI(Creature* creature) : ScriptedAI(creature) {} + npc_shadowmoon_tuber_nodeAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp index 6f4694a5924..52063bac5ca 100644 --- a/src/server/scripts/Outland/zone_shattrath_city.cpp +++ b/src/server/scripts/Outland/zone_shattrath_city.cpp @@ -162,7 +162,7 @@ public: struct npc_salsalabimAI : public ScriptedAI { - npc_salsalabimAI(Creature* creature) : ScriptedAI(creature) {} + npc_salsalabimAI(Creature* creature) : ScriptedAI(creature) { } uint32 MagneticPull_Timer; @@ -331,7 +331,7 @@ public: struct npc_kservantAI : public npc_escortAI { public: - npc_kservantAI(Creature* creature) : npc_escortAI(creature) {} + npc_kservantAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index 2cf82cce4d1..1909f12590c 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -68,7 +68,7 @@ public: struct npc_unkor_the_ruthlessAI : public ScriptedAI { - npc_unkor_the_ruthlessAI(Creature* creature) : ScriptedAI(creature) {} + npc_unkor_the_ruthlessAI(Creature* creature) : ScriptedAI(creature) { } bool CanDoQuest; uint32 UnkorUnfriendly_Timer; @@ -175,7 +175,7 @@ public: struct npc_infested_root_walkerAI : public ScriptedAI { - npc_infested_root_walkerAI(Creature* creature) : ScriptedAI(creature) {} + npc_infested_root_walkerAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} void EnterCombat(Unit* /*who*/) OVERRIDE {} @@ -207,7 +207,7 @@ public: struct npc_skywingAI : public npc_escortAI { public: - npc_skywingAI(Creature* creature) : npc_escortAI(creature) {} + npc_skywingAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -262,7 +262,7 @@ public: struct npc_rotting_forest_ragerAI : public ScriptedAI { - npc_rotting_forest_ragerAI(Creature* creature) : ScriptedAI(creature) {} + npc_rotting_forest_ragerAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} void EnterCombat(Unit* /*who*/) OVERRIDE {} @@ -305,7 +305,7 @@ public: struct npc_netherweb_victimAI : public ScriptedAI { - npc_netherweb_victimAI(Creature* creature) : ScriptedAI(creature) {} + npc_netherweb_victimAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} void EnterCombat(Unit* /*who*/) OVERRIDE {} @@ -467,7 +467,7 @@ public: struct npc_isla_starmaneAI : public npc_escortAI { - npc_isla_starmaneAI(Creature* creature) : npc_escortAI(creature) {} + npc_isla_starmaneAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { @@ -672,7 +672,7 @@ public: struct npc_akunoAI : public npc_escortAI { - npc_akunoAI(Creature* creature) : npc_escortAI(creature) {} + npc_akunoAI(Creature* creature) : npc_escortAI(creature) { } void WaypointReached(uint32 waypointId) OVERRIDE { diff --git a/src/server/scripts/Outland/zone_zangarmarsh.cpp b/src/server/scripts/Outland/zone_zangarmarsh.cpp index be938582d9c..bac252ffb1f 100644 --- a/src/server/scripts/Outland/zone_zangarmarsh.cpp +++ b/src/server/scripts/Outland/zone_zangarmarsh.cpp @@ -342,7 +342,7 @@ public: struct npc_kayra_longmaneAI : public npc_escortAI { - npc_kayra_longmaneAI(Creature* creature) : npc_escortAI(creature) {} + npc_kayra_longmaneAI(Creature* creature) : npc_escortAI(creature) { } void Reset() OVERRIDE {} diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index e1305d71b73..e78d690d3c0 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -436,7 +436,7 @@ class spell_dk_death_coil : public SpellScriptLoader class spell_dk_death_gate : public SpellScriptLoader { public: - spell_dk_death_gate() : SpellScriptLoader("spell_dk_death_gate") {} + spell_dk_death_gate() : SpellScriptLoader("spell_dk_death_gate") { } class spell_dk_death_gate_SpellScript : public SpellScript { diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp index f61da1f7179..73db091eee1 100644 --- a/src/server/scripts/Spells/spell_holiday.cpp +++ b/src/server/scripts/Spells/spell_holiday.cpp @@ -203,7 +203,7 @@ enum TrickOrTreatSpells class spell_hallow_end_trick_or_treat : public SpellScriptLoader { public: - spell_hallow_end_trick_or_treat() : SpellScriptLoader("spell_hallow_end_trick_or_treat") {} + spell_hallow_end_trick_or_treat() : SpellScriptLoader("spell_hallow_end_trick_or_treat") { } class spell_hallow_end_trick_or_treat_SpellScript : public SpellScript { diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 9f7386ab7e6..630485b0b88 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1350,7 +1350,7 @@ class spell_item_create_heart_candy : public SpellScriptLoader class spell_item_book_of_glyph_mastery : public SpellScriptLoader { public: - spell_item_book_of_glyph_mastery() : SpellScriptLoader("spell_item_book_of_glyph_mastery") {} + spell_item_book_of_glyph_mastery() : SpellScriptLoader("spell_item_book_of_glyph_mastery") { } class spell_item_book_of_glyph_mastery_SpellScript : public SpellScript { @@ -1404,7 +1404,7 @@ enum GiftOfTheHarvester class spell_item_gift_of_the_harvester : public SpellScriptLoader { public: - spell_item_gift_of_the_harvester() : SpellScriptLoader("spell_item_gift_of_the_harvester") {} + spell_item_gift_of_the_harvester() : SpellScriptLoader("spell_item_gift_of_the_harvester") { } class spell_item_gift_of_the_harvester_SpellScript : public SpellScript { @@ -1445,7 +1445,7 @@ enum Sinkholes class spell_item_map_of_the_geyser_fields : public SpellScriptLoader { public: - spell_item_map_of_the_geyser_fields() : SpellScriptLoader("spell_item_map_of_the_geyser_fields") {} + spell_item_map_of_the_geyser_fields() : SpellScriptLoader("spell_item_map_of_the_geyser_fields") { } class spell_item_map_of_the_geyser_fields_SpellScript : public SpellScript { @@ -1536,7 +1536,7 @@ enum AshbringerSounds class spell_item_ashbringer : public SpellScriptLoader { public: - spell_item_ashbringer() : SpellScriptLoader("spell_item_ashbringer") {} + spell_item_ashbringer() : SpellScriptLoader("spell_item_ashbringer") { } class spell_item_ashbringer_SpellScript : public SpellScript { @@ -1585,7 +1585,7 @@ enum MagicEater class spell_magic_eater_food : public SpellScriptLoader { public: - spell_magic_eater_food() : SpellScriptLoader("spell_magic_eater_food") {} + spell_magic_eater_food() : SpellScriptLoader("spell_magic_eater_food") { } class spell_magic_eater_food_AuraScript : public AuraScript { diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp index 6cd5e962c02..40af44911ed 100644 --- a/src/server/scripts/World/achievement_scripts.cpp +++ b/src/server/scripts/World/achievement_scripts.cpp @@ -223,7 +223,7 @@ enum ArgentTournamentAreas class achievement_tilted : public AchievementCriteriaScript { public: - achievement_tilted() : AchievementCriteriaScript("achievement_tilted") {} + achievement_tilted() : AchievementCriteriaScript("achievement_tilted") { } bool OnCheck(Player* player, Unit* /*target*/) OVERRIDE { diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp index 1b43ee30cd1..3ab9a1511af 100644 --- a/src/server/scripts/World/areatrigger_scripts.cpp +++ b/src/server/scripts/World/areatrigger_scripts.cpp @@ -243,7 +243,7 @@ class AreaTrigger_at_sholazar_waygate : public AreaTriggerScript { public: - AreaTrigger_at_sholazar_waygate() : AreaTriggerScript("at_sholazar_waygate") {} + AreaTrigger_at_sholazar_waygate() : AreaTriggerScript("at_sholazar_waygate") { } bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) OVERRIDE { diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index ce44cb57eef..84ef56eb413 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -889,7 +889,7 @@ enum SoulWellData class go_soulwell : public GameObjectScript { public: - go_soulwell() : GameObjectScript("go_soulwell") {} + go_soulwell() : GameObjectScript("go_soulwell") { } struct go_soulwellAI : public GameObjectAI { diff --git a/src/server/scripts/World/guards.cpp b/src/server/scripts/World/guards.cpp index f83d35b4039..95f97b1dc84 100644 --- a/src/server/scripts/World/guards.cpp +++ b/src/server/scripts/World/guards.cpp @@ -54,7 +54,7 @@ public: struct guard_genericAI : public GuardAI { - guard_genericAI(Creature* creature) : GuardAI(creature) {} + guard_genericAI(Creature* creature) : GuardAI(creature) { } void Reset() OVERRIDE { @@ -263,7 +263,7 @@ public: struct guard_shattrath_scryerAI : public GuardAI { - guard_shattrath_scryerAI(Creature* creature) : GuardAI(creature) {} + guard_shattrath_scryerAI(Creature* creature) : GuardAI(creature) { } void Reset() OVERRIDE { @@ -328,7 +328,7 @@ public: struct guard_shattrath_aldorAI : public GuardAI { - guard_shattrath_aldorAI(Creature* creature) : GuardAI(creature) {} + guard_shattrath_aldorAI(Creature* creature) : GuardAI(creature) { } void Reset() OVERRIDE { diff --git a/src/server/scripts/World/item_scripts.cpp b/src/server/scripts/World/item_scripts.cpp index 7b6cb90f6c9..5b8e780e3d3 100644 --- a/src/server/scripts/World/item_scripts.cpp +++ b/src/server/scripts/World/item_scripts.cpp @@ -172,7 +172,7 @@ public: class item_disgusting_jar : public ItemScript { public: - item_disgusting_jar() : ItemScript("item_disgusting_jar") {} + item_disgusting_jar() : ItemScript("item_disgusting_jar") { } bool OnExpire(Player* player, ItemTemplate const* /*pItemProto*/) OVERRIDE { diff --git a/src/server/scripts/World/mob_generic_creature.cpp b/src/server/scripts/World/mob_generic_creature.cpp index 3891de93261..ed086712ca2 100644 --- a/src/server/scripts/World/mob_generic_creature.cpp +++ b/src/server/scripts/World/mob_generic_creature.cpp @@ -36,7 +36,7 @@ public: struct generic_creatureAI : public ScriptedAI { - generic_creatureAI(Creature* creature) : ScriptedAI(creature) {} + generic_creatureAI(Creature* creature) : ScriptedAI(creature) { } uint32 GlobalCooldown; //This variable acts like the global cooldown that players have (1.5 seconds) uint32 BuffTimer; //This variable keeps track of buffs @@ -212,7 +212,7 @@ public: struct trigger_deathAI : public NullCreatureAI { - trigger_deathAI(Creature* creature) : NullCreatureAI(creature) {} + trigger_deathAI(Creature* creature) : NullCreatureAI(creature) { } void JustDied(Unit* killer) OVERRIDE { if (me->m_spells[0]) diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 5304cbf56ca..78c2e9c7ef5 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -330,7 +330,7 @@ public: struct npc_chicken_cluckAI : public ScriptedAI { - npc_chicken_cluckAI(Creature* creature) : ScriptedAI(creature) {} + npc_chicken_cluckAI(Creature* creature) : ScriptedAI(creature) { } uint32 ResetFlagTimer; @@ -425,7 +425,7 @@ public: struct npc_dancing_flamesAI : public ScriptedAI { - npc_dancing_flamesAI(Creature* creature) : ScriptedAI(creature) {} + npc_dancing_flamesAI(Creature* creature) : ScriptedAI(creature) { } bool Active; uint32 CanIteract; @@ -572,11 +572,11 @@ uint32 const HordeSoldierId[3] = class npc_doctor : public CreatureScript { public: - npc_doctor() : CreatureScript("npc_doctor") {} + npc_doctor() : CreatureScript("npc_doctor") { } struct npc_doctorAI : public ScriptedAI { - npc_doctorAI(Creature* creature) : ScriptedAI(creature) {} + npc_doctorAI(Creature* creature) : ScriptedAI(creature) { } uint64 PlayerGUID; @@ -721,7 +721,7 @@ public: struct npc_injured_patientAI : public ScriptedAI { - npc_injured_patientAI(Creature* creature) : ScriptedAI(creature) {} + npc_injured_patientAI(Creature* creature) : ScriptedAI(creature) { } uint64 DoctorGUID; Location* Coord; @@ -1123,7 +1123,7 @@ public: struct npc_guardianAI : public ScriptedAI { - npc_guardianAI(Creature* creature) : ScriptedAI(creature) {} + npc_guardianAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE { @@ -1498,7 +1498,7 @@ public: struct npc_steam_tonkAI : public ScriptedAI { - npc_steam_tonkAI(Creature* creature) : ScriptedAI(creature) {} + npc_steam_tonkAI(Creature* creature) : ScriptedAI(creature) { } void Reset() OVERRIDE {} void EnterCombat(Unit* /*who*/) OVERRIDE {} @@ -1716,11 +1716,11 @@ enum WormholeSpells class npc_wormhole : public CreatureScript { public: - npc_wormhole() : CreatureScript("npc_wormhole") {} + npc_wormhole() : CreatureScript("npc_wormhole") { } struct npc_wormholeAI : public PassiveAI { - npc_wormholeAI(Creature* creature) : PassiveAI(creature) {} + npc_wormholeAI(Creature* creature) : PassiveAI(creature) { } void InitializeAI() OVERRIDE { @@ -2135,7 +2135,7 @@ public: struct npc_fireworkAI : public ScriptedAI { - npc_fireworkAI(Creature* creature) : ScriptedAI(creature) {} + npc_fireworkAI(Creature* creature) : ScriptedAI(creature) { } bool isCluster() { From 5c0cf982a72056357b0ef67f2eecbb220f71618b Mon Sep 17 00:00:00 2001 From: gerripeach Date: Tue, 22 Oct 2013 19:25:47 +0200 Subject: [PATCH 42/56] Core/Spell: Shaman Bloodlust/Heroism ignore LOS closes: #6307 --- sql/updates/world/2013_10_22_00_world_conditions.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2013_10_22_00_world_conditions.sql diff --git a/sql/updates/world/2013_10_22_00_world_conditions.sql b/sql/updates/world/2013_10_22_00_world_conditions.sql new file mode 100644 index 00000000000..7757f50c92c --- /dev/null +++ b/sql/updates/world/2013_10_22_00_world_conditions.sql @@ -0,0 +1,4 @@ +DELETE FROM `disables` WHERE `sourceType`=0 AND `entry` IN(2825, 32182); +INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `comment`) VALUES +(0, 2825, 64, 'Ignore LOS for Heroism'), +(0, 32182, 64, 'Ignore LOS for Bloodlust'); From e8e148bee988182d23a7d71b3130dec4aa9e3555 Mon Sep 17 00:00:00 2001 From: Gacko Date: Tue, 22 Oct 2013 20:27:04 +0200 Subject: [PATCH 43/56] Rename sql file and apply some code style. *sigh* --- sql/updates/world/2013_10_22_00_world_conditions.sql | 4 ---- sql/updates/world/2013_10_22_00_world_disables.sql | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 sql/updates/world/2013_10_22_00_world_conditions.sql create mode 100644 sql/updates/world/2013_10_22_00_world_disables.sql diff --git a/sql/updates/world/2013_10_22_00_world_conditions.sql b/sql/updates/world/2013_10_22_00_world_conditions.sql deleted file mode 100644 index 7757f50c92c..00000000000 --- a/sql/updates/world/2013_10_22_00_world_conditions.sql +++ /dev/null @@ -1,4 +0,0 @@ -DELETE FROM `disables` WHERE `sourceType`=0 AND `entry` IN(2825, 32182); -INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `comment`) VALUES -(0, 2825, 64, 'Ignore LOS for Heroism'), -(0, 32182, 64, 'Ignore LOS for Bloodlust'); diff --git a/sql/updates/world/2013_10_22_00_world_disables.sql b/sql/updates/world/2013_10_22_00_world_disables.sql new file mode 100644 index 00000000000..7173deeb271 --- /dev/null +++ b/sql/updates/world/2013_10_22_00_world_disables.sql @@ -0,0 +1,4 @@ +DELETE FROM `disables` WHERE `sourceType`=0 AND `entry` IN (2825,32182); +INSERT INTO `disables` (`sourceType`,`entry`,`flags`,`comment`) VALUES +(0,2825,64,'Ignore LOS for Heroism'), +(0,32182,64,'Ignore LOS for Bloodlust'); From 635e1467a4a57d78c93c80b6b2f073dff1cf671d Mon Sep 17 00:00:00 2001 From: Gacko Date: Tue, 22 Oct 2013 20:40:43 +0200 Subject: [PATCH 44/56] Rename SQL file (thx Aokromes) --- ...ll_proc_event.sql => 2013_10_20_01_world_spell_proc_event.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2013_10_20_00_world_spell_proc_event.sql => 2013_10_20_01_world_spell_proc_event.sql} (100%) diff --git a/sql/updates/world/2013_10_20_00_world_spell_proc_event.sql b/sql/updates/world/2013_10_20_01_world_spell_proc_event.sql similarity index 100% rename from sql/updates/world/2013_10_20_00_world_spell_proc_event.sql rename to sql/updates/world/2013_10_20_01_world_spell_proc_event.sql From cdcee93854adf07c77e5b837a1fb85795d371b2d Mon Sep 17 00:00:00 2001 From: jackpoz Date: Tue, 22 Oct 2013 22:59:47 +0200 Subject: [PATCH 45/56] Core/IoC: Fix uninitialized timer Fix uninitialized Docks timer in Isle Of Conquest . Valgrind log: Conditional jump or move depends on uninitialised value(s) at : BattlegroundIC::HandleCapturedNodes(ICNodePoint*, bool) (BattlegroundIC.cpp:665) by : BattlegroundIC::PostUpdateImpl(unsigned int) (BattlegroundIC.cpp:228) by : Battleground::Update(unsigned int) (Battleground.cpp:300) by : BattlegroundMgr::Update(unsigned int) (BattlegroundMgr.cpp:93) by : World::Update(unsigned int) (World.cpp:2062) --- src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index 82d7de0d9bf..bdc9fa36328 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -45,6 +45,7 @@ BattlegroundIC::BattlegroundIC() closeFortressDoorsTimer = CLOSE_DOORS_TIME; // the doors are closed again... in a special way doorsClosed = false; + docksTimer = DOCKS_UPDATE_TIME; resourceTimer = IC_RESOURCE_TIME; for (uint8 i = NODE_TYPE_REFINERY; i < MAX_NODE_TYPES; ++i) From 63cfb712d3a4e2f73fce7b92e3bf633691c73497 Mon Sep 17 00:00:00 2001 From: Filip Date: Wed, 23 Oct 2013 13:45:11 +0200 Subject: [PATCH 46/56] DB/SAI: This just in: Fire still hot! By @untaught fixes #10752 --- sql/updates/world/2013_10_23_00_world_sai.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2013_10_23_00_world_sai.sql diff --git a/sql/updates/world/2013_10_23_00_world_sai.sql b/sql/updates/world/2013_10_23_00_world_sai.sql new file mode 100644 index 00000000000..51f5e357a22 --- /dev/null +++ b/sql/updates/world/2013_10_23_00_world_sai.sql @@ -0,0 +1,4 @@ +UPDATE `smart_scripts` SET `link`=2,`action_type`=33,`action_param1`=29692,`target_type`=7,`comment`='Hut Fire - On Spell Hit - Give Quest Credit' WHERE `entryorguid`=29692 AND `source_type`=0 AND `id`=1 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=29692 AND `id`=2 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `id`, `event_type`, `action_type`, `target_type`, `comment`) VALUES +(29692,2,61,41,1, 'Hut Fire - Link With Event 1 - Despawn'); From f6f102c70b32213dd047cd3b040e979869ecf385 Mon Sep 17 00:00:00 2001 From: Filip Date: Wed, 23 Oct 2013 14:09:43 +0200 Subject: [PATCH 47/56] DB/SAI: Add Gymer text and faction friendly to horde also. --- sql/updates/world/2013_10_23_01_world_sai.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2013_10_23_01_world_sai.sql diff --git a/sql/updates/world/2013_10_23_01_world_sai.sql b/sql/updates/world/2013_10_23_01_world_sai.sql new file mode 100644 index 00000000000..5b9ce9c4e21 --- /dev/null +++ b/sql/updates/world/2013_10_23_01_world_sai.sql @@ -0,0 +1,5 @@ +DELETE FROM `smart_scripts` WHERE `entryorguid`=29884 AND `id`=7; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(29884, 0, 7, 0, 0, 0, 100, 0, 6000, 10000, 6000, 10000, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gymer - IC - Say 1'); + +UPDATE `creature_template` SET `faction_A`=35, `faction_H`=35 WHERE `entry`=29884; From 950ac949cb11cee7e21e3b33ea4f2496b0b6b598 Mon Sep 17 00:00:00 2001 From: Discover- Date: Thu, 24 Oct 2013 06:22:00 +0200 Subject: [PATCH 48/56] DB/SAI: Fix scripts using SMART_TARGET_NONE that were 'broken' by 9653576cb4cc9449898d6af691c045d68e9361c5. 'Broken' is quoted because scripts using SMART_TARGET_NONE are most of the time broken by default anyway. --- sql/updates/world/2013_10_24_00_world_sai.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 sql/updates/world/2013_10_24_00_world_sai.sql diff --git a/sql/updates/world/2013_10_24_00_world_sai.sql b/sql/updates/world/2013_10_24_00_world_sai.sql new file mode 100644 index 00000000000..afeedcb800d --- /dev/null +++ b/sql/updates/world/2013_10_24_00_world_sai.sql @@ -0,0 +1 @@ +UPDATE `smart_scripts` SET `target_type`=7 WHERE `target_type`=0; From 626f1f0f9f688f73d517fd168ebb9f8d8945f2f8 Mon Sep 17 00:00:00 2001 From: Filip Date: Thu, 24 Oct 2013 15:18:15 +0200 Subject: [PATCH 49/56] DB/Errors: Db error clean up By @untaught fixes #11116 --- sql/updates/world/2013_10_24_01_world_errors.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 sql/updates/world/2013_10_24_01_world_errors.sql diff --git a/sql/updates/world/2013_10_24_01_world_errors.sql b/sql/updates/world/2013_10_24_01_world_errors.sql new file mode 100644 index 00000000000..f246efda806 --- /dev/null +++ b/sql/updates/world/2013_10_24_01_world_errors.sql @@ -0,0 +1,11 @@ +-- Remove unused skinning_loot_template. +DELETE FROM `skinning_loot_template` WHERE `entry`=100015; +-- Spell effects without target types AREA/NEARBY/CONE so this conditions are useless. +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `sourcegroup`=1 AND `sourceentry` IN (43789,43891); +-- Must have the same loot as item 35348. In TDB it uses reference 11112 which is empty. +DELETE FROM `item_loot_template` WHERE `entry`=34863; +INSERT INTO `item_loot_template` (`entry`, `item`, `ChanceOrQuestChance`, `lootmode`, `groupid`, `mincountOrRef`, `maxcount`) VALUES +(34863,1,100,1,0,-11113,1), +(34863,2,60,1,0,-11116,1), +(34863,3,5,1,0,-11114,1), +(34863,4,60,1,0,-11115,1); From 89496362576199af9bb87d392bfd5fbbfc6e2831 Mon Sep 17 00:00:00 2001 From: Filip Date: Thu, 24 Oct 2013 21:19:16 +0200 Subject: [PATCH 50/56] DB/SAI: Swift Discipline By @untaught fixes #11118 --- sql/updates/world/2013_10_24_02_world_sai.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 sql/updates/world/2013_10_24_02_world_sai.sql diff --git a/sql/updates/world/2013_10_24_02_world_sai.sql b/sql/updates/world/2013_10_24_02_world_sai.sql new file mode 100644 index 00000000000..758bc8de13c --- /dev/null +++ b/sql/updates/world/2013_10_24_02_world_sai.sql @@ -0,0 +1,12 @@ +UPDATE `creature_template` SET `ainame`='SmartAI' WHERE `entry`=15941; +DELETE FROM `creature_text` WHERE `entry` IN (15945,15941); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES +(15945,0,0,'You can''t do this to me! We had a deal!',12,0,0,0,0,0,''), +(15941,0,0,'What? Oh, not this again!',12,0,0,0,0,0,''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=15945 AND `source_type`=0 AND `id` IN (14,15); +DELETE FROM `smart_scripts` WHERE `entryorguid`=15941 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(15945,0,14,15,8,0,100,0,27907,0,0,0,33,15945,0,0,0,0,0,7,0,0,0,0,0,0,0,'Apprentice Meledor - On Spell Hit(Disciplinary Rod) - Quest Credit'), +(15945,0,15,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Apprentice Meledor - Link - Say line'), +(15941,0,0,1,8,0,100,0,27907,0,0,0,33,15941,0,0,0,0,0,7,0,0,0,0,0,0,0,'Apprentice Ralen - On Spell Hit(Disciplinary Rod) - Quest Credit'), +(15941,0,1,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Apprentice Ralen - Link - Say line'); From b926039e18617077eabb4be0c3876dd9aabde75b Mon Sep 17 00:00:00 2001 From: Filip Date: Thu, 24 Oct 2013 21:19:20 +0200 Subject: [PATCH 51/56] DB/SAI: Cleansing the Scar By @untaught fixes #11117 --- sql/updates/world/2013_10_24_03_world_sai.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 sql/updates/world/2013_10_24_03_world_sai.sql diff --git a/sql/updates/world/2013_10_24_03_world_sai.sql b/sql/updates/world/2013_10_24_03_world_sai.sql new file mode 100644 index 00000000000..b21f45e1e84 --- /dev/null +++ b/sql/updates/world/2013_10_24_03_world_sai.sql @@ -0,0 +1,10 @@ +DELETE FROM `smart_scripts` WHERE `entryorguid`=15938 AND `source_type`=0 AND (`id` BETWEEN 15 AND 22); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(15938,0,15,0,8,0,100,0,1243,0,0,0,33,15938,0,0,0,0,0,7,0,0,0,0,0,0,0,'Eversong Ranger - On Spell Hit(Power Word: Fortitude Rank 1) - Quest Credit'), +(15938,0,16,0,8,0,100,0,1244,0,0,0,33,15938,0,0,0,0,0,7,0,0,0,0,0,0,0,'Eversong Ranger - On Spell Hit(Power Word: Fortitude Rank 2) - Quest Credit'), +(15938,0,17,0,8,0,100,0,1245,0,0,0,33,15938,0,0,0,0,0,7,0,0,0,0,0,0,0,'Eversong Ranger - On Spell Hit(Power Word: Fortitude Rank 3) - Quest Credit'), +(15938,0,18,0,8,0,100,0,2791,0,0,0,33,15938,0,0,0,0,0,7,0,0,0,0,0,0,0,'Eversong Ranger - On Spell Hit(Power Word: Fortitude Rank 4) - Quest Credit'), +(15938,0,19,0,8,0,100,0,10937,0,0,0,33,15938,0,0,0,0,0,7,0,0,0,0,0,0,0,'Eversong Ranger - On Spell Hit(Power Word: Fortitude Rank 5) - Quest Credit'), +(15938,0,20,0,8,0,100,0,10938,0,0,0,33,15938,0,0,0,0,0,7,0,0,0,0,0,0,0,'Eversong Ranger - On Spell Hit(Power Word: Fortitude Rank 6) - Quest Credit'), +(15938,0,21,0,8,0,100,0,25389,0,0,0,33,15938,0,0,0,0,0,7,0,0,0,0,0,0,0,'Eversong Ranger - On Spell Hit(Power Word: Fortitude Rank 7) - Quest Credit'), +(15938,0,22,0,8,0,100,0,48161,0,0,0,33,15938,0,0,0,0,0,7,0,0,0,0,0,0,0,'Eversong Ranger - On Spell Hit(Power Word: Fortitude Rank 8) - Quest Credit'); From f93ac805fdcaf14b80bd541aee31e1f70240a8f3 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 25 Oct 2013 12:37:48 +0200 Subject: [PATCH 52/56] Core/Transports: Fixed double deleting IoC transports --- .../game/Battlegrounds/Zones/BattlegroundIC.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index bdc9fa36328..0855408c932 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -59,17 +59,6 @@ BattlegroundIC::BattlegroundIC() BattlegroundIC::~BattlegroundIC() { - if (gunshipHorde) - { - gunshipHorde->RemoveFromWorld(); - delete gunshipHorde; - } - - if (gunshipAlliance) - { - gunshipAlliance->RemoveFromWorld(); - delete gunshipAlliance; - } } void BattlegroundIC::HandlePlayerResurrect(Player* player) From 5e62edd7c9273859848c01f933e52b292100b0d0 Mon Sep 17 00:00:00 2001 From: Filip Date: Fri, 25 Oct 2013 15:52:26 +0200 Subject: [PATCH 53/56] Db/Update: Rockjaw Backbreaker script spam By @untaught fixes #11112 --- sql/updates/world/2013_10_25_00_world_update.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 sql/updates/world/2013_10_25_00_world_update.sql diff --git a/sql/updates/world/2013_10_25_00_world_update.sql b/sql/updates/world/2013_10_25_00_world_update.sql new file mode 100644 index 00000000000..6d1b11c5111 --- /dev/null +++ b/sql/updates/world/2013_10_25_00_world_update.sql @@ -0,0 +1 @@ +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid`=1118 AND `id`=0 AND `source_type`=0; From cc89ac0be32f6dbdce3ae9a5d5d6e4a36af5b2c8 Mon Sep 17 00:00:00 2001 From: AliveShiro Date: Fri, 25 Oct 2013 17:30:24 +0200 Subject: [PATCH 54/56] Game/Battlefield: - Remove double definition of one NPC - Use definition instead a "magic number" --- src/server/game/Battlefield/Zones/BattlefieldWG.cpp | 2 +- src/server/game/Battlefield/Zones/BattlefieldWG.h | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index 6103ff4c5ce..f246f15a81d 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -166,7 +166,7 @@ bool BattlefieldWG::SetupBattlefield() { Position towerCannonPos; WGTurret[i].GetPosition(&towerCannonPos); - if (Creature* creature = SpawnCreature(NPC_TOWER_CANNON, towerCannonPos, TEAM_ALLIANCE)) + if (Creature* creature = SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TEAM_ALLIANCE)) { CanonList.insert(creature->GetGUID()); HideNpc(creature); diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h index e13eddd7672..ee18545b0c4 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h @@ -208,7 +208,6 @@ enum WintergraspNpcs NPC_TAUNKA_SPIRIT_GUIDE = 31841, // Horde spirit guide for Wintergrasp NPC_DWARVEN_SPIRIT_GUIDE = 31842, // Alliance spirit guide for Wintergrasp - NPC_TOWER_CANNON = 28366, NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE = 28312, NPC_WINTERGRASP_SIEGE_ENGINE_HORDE = 32627, @@ -1338,7 +1337,7 @@ struct BfWGGameObjectBuilding { Position towerCannonPos; TowerCannon[towerid].TurretTop[i].GetPosition(&towerCannonPos); - if (Creature* turret = m_WG->SpawnCreature(28366, towerCannonPos, TeamId(0))) + if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TeamId(0))) { m_TurretTopList.insert(turret->GetGUID()); switch (go->GetEntry()) From daf5a4b5c33ee56abfbaf6bbd1a91dd27a45aeec Mon Sep 17 00:00:00 2001 From: jackpoz Date: Fri, 25 Oct 2013 21:50:52 +0200 Subject: [PATCH 55/56] Core/Chat Commands: Allow to add overlapping teles . Allow to add overlapping teles like "abc" even if "abcde" already exists. This wasn't possible and a "Teleport already exists" error was thrown instead. --- src/server/game/Globals/ObjectMgr.cpp | 19 +++++++++++++++++++ src/server/game/Globals/ObjectMgr.h | 1 + src/server/scripts/Commands/cs_tele.cpp | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 86e6963b1de..d515a9c20e9 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -7808,6 +7808,25 @@ GameTele const* ObjectMgr::GetGameTele(const std::string& name) const return alt; } +GameTele const* ObjectMgr::GetGameTeleExactName(const std::string& name) const +{ + // explicit name case + std::wstring wname; + if (!Utf8toWStr(name, wname)) + return NULL; + + // converting string that we try to find to lower case + wstrToLower(wname); + + for (GameTeleContainer::const_iterator itr = _gameTeleStore.begin(); itr != _gameTeleStore.end(); ++itr) + { + if (itr->second.wnameLow == wname) + return &itr->second; + } + + return NULL; +} + bool ObjectMgr::AddGameTele(GameTele& tele) { // find max id diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 752cc3b56ab..e0b33b039cc 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -1161,6 +1161,7 @@ class ObjectMgr return &itr->second; } GameTele const* GetGameTele(std::string const& name) const; + GameTele const* GetGameTeleExactName(std::string const& name) const; GameTeleContainer const& GetGameTeleMap() const { return _gameTeleStore; } bool AddGameTele(GameTele& data); bool DeleteGameTele(std::string const& name); diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp index 154da04db6a..ca9f4a59045 100644 --- a/src/server/scripts/Commands/cs_tele.cpp +++ b/src/server/scripts/Commands/cs_tele.cpp @@ -65,7 +65,7 @@ public: std::string name = args; - if (sObjectMgr->GetGameTele(name)) + if (sObjectMgr->GetGameTeleExactName(name)) { handler->SendSysMessage(LANG_COMMAND_TP_ALREADYEXIST); handler->SetSentErrorMessage(true); From b81bf7d0250939ee96b942f554c16d950f06c7b1 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 26 Oct 2013 14:39:00 +0200 Subject: [PATCH 56/56] Core/Spells: Implemented additional conditions for spells that start cooldown after an event instead of after cast --- src/server/game/DataStores/DBCEnums.h | 6 ++++ src/server/game/DataStores/DBCStores.cpp | 6 ++-- src/server/game/DataStores/DBCStores.h | 3 +- src/server/game/DataStores/DBCStructure.h | 6 ++++ src/server/game/DataStores/DBCfmt.h | 1 + .../game/Entities/Creature/Creature.cpp | 8 ++--- src/server/game/Entities/Pet/Pet.cpp | 2 +- src/server/game/Entities/Player/Player.cpp | 36 +++++++++---------- src/server/game/Entities/Unit/Unit.cpp | 10 +++--- src/server/game/Handlers/ItemHandler.cpp | 2 +- src/server/game/Handlers/MovementHandler.cpp | 2 +- .../game/Spells/Auras/SpellAuraEffects.h | 8 ++--- src/server/game/Spells/Auras/SpellAuras.cpp | 6 ++-- src/server/game/Spells/Spell.cpp | 4 +-- src/server/game/Spells/SpellEffects.cpp | 10 +++--- src/server/game/Spells/SpellInfo.cpp | 16 +++++++-- src/server/game/Spells/SpellInfo.h | 4 ++- 17 files changed, 79 insertions(+), 51 deletions(-) diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index a7189ea415a..171d0fe8cc2 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -344,6 +344,12 @@ enum ItemLimitCategoryMode ITEM_LIMIT_CATEGORY_MODE_EQUIP = 1 // limit applied to amount equipped items (including used gems) }; +enum SpellCategoryFlags +{ + SPELL_CATEGORY_FLAG_COOLDOWN_SCALES_WITH_WEAPON_SPEED = 0x01, // unused + SPELL_CATEGORY_FLAG_COOLDOWN_STARTS_ON_EVENT = 0x04 +}; + enum TotemCategoryType { TOTEM_CATEGORY_TYPE_KNIFE = 1, diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 95592cd87d9..aa292934021 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -154,10 +154,11 @@ DBCStorage sSoundEntriesStore(SoundEntriesfmt); DBCStorage sSpellItemEnchantmentStore(SpellItemEnchantmentfmt); DBCStorage sSpellItemEnchantmentConditionStore(SpellItemEnchantmentConditionfmt); DBCStorage sSpellStore(SpellEntryfmt); -SpellCategoryStore sSpellCategoryStore; +SpellCategoryStore sSpellsByCategoryStore; PetFamilySpellsStore sPetFamilySpellsStore; DBCStorage sSpellCastTimesStore(SpellCastTimefmt); +DBCStorage sSpellCategoryStore(SpellCategoryfmt); DBCStorage sSpellDifficultyStore(SpellDifficultyfmt); DBCStorage sSpellDurationStore(SpellDurationfmt); DBCStorage sSpellFocusObjectStore(SpellFocusObjectfmt); @@ -408,7 +409,7 @@ void LoadDBCStores(const std::string& dataPath) { SpellEntry const* spell = sSpellStore.LookupEntry(i); if (spell && spell->Category) - sSpellCategoryStore[spell->Category].insert(i); + sSpellsByCategoryStore[spell->Category].insert(i); } for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j) @@ -442,6 +443,7 @@ void LoadDBCStores(const std::string& dataPath) } LoadDBC(availableDbcLocales, bad_dbc_files, sSpellCastTimesStore, dbcPath, "SpellCastTimes.dbc"); + LoadDBC(availableDbcLocales, bad_dbc_files, sSpellCategoryStore, dbcPath, "SpellCategory.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sSpellDifficultyStore, dbcPath, "SpellDifficulty.dbc", &CustomSpellDifficultyfmt, &CustomSpellDifficultyIndex); LoadDBC(availableDbcLocales, bad_dbc_files, sSpellDurationStore, dbcPath, "SpellDuration.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sSpellFocusObjectStore, dbcPath, "SpellFocusObject.dbc"); diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index cac93a120a5..808ebb78fa5 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -148,12 +148,13 @@ extern DBCStorage sSkillLineStore; extern DBCStorage sSkillLineAbilityStore; extern DBCStorage sSoundEntriesStore; extern DBCStorage sSpellCastTimesStore; +extern DBCStorage sSpellCategoryStore; extern DBCStorage sSpellDifficultyStore; extern DBCStorage sSpellDurationStore; extern DBCStorage sSpellFocusObjectStore; extern DBCStorage sSpellItemEnchantmentStore; extern DBCStorage sSpellItemEnchantmentConditionStore; -extern SpellCategoryStore sSpellCategoryStore; +extern SpellCategoryStore sSpellsByCategoryStore; extern PetFamilySpellsStore sPetFamilySpellsStore; extern DBCStorage sSpellRadiusStore; extern DBCStorage sSpellRangeStore; diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index aff54f75a40..1dce61e90f6 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1675,6 +1675,12 @@ struct SpellCastTimesEntry //int32 MinCastTime; // 3 unsure }; +struct SpellCategoryEntry +{ + uint32 Id; + uint32 Flags; +}; + struct SpellDifficultyEntry { uint32 ID; // 0 diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index 5326ab70fa3..0066db2b049 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -97,6 +97,7 @@ char const SkillLinefmt[] = "nixssssssssssssssssxxxxxxxxxxxxxxxxxxixxxxxxxxxxxxx char const SkillLineAbilityfmt[] = "niiiixxiiiiixx"; char const SoundEntriesfmt[] = "nxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; char const SpellCastTimefmt[] = "nixx"; +char const SpellCategoryfmt[] = "ni"; char const SpellDifficultyfmt[] = "niiii"; const std::string CustomSpellDifficultyfmt = "ppppp"; const std::string CustomSpellDifficultyIndex = "id"; diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index f68d87de2f4..e4fda515c8a 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2141,8 +2141,8 @@ void Creature::AddCreatureSpellCooldown(uint32 spellid) if (cooldown) _AddCreatureSpellCooldown(spellid, time(NULL) + cooldown/IN_MILLISECONDS); - if (spellInfo->Category) - _AddCreatureCategoryCooldown(spellInfo->Category, time(NULL)); + if (spellInfo->GetCategory()) + _AddCreatureCategoryCooldown(spellInfo->GetCategory(), time(NULL)); } bool Creature::HasCategoryCooldown(uint32 spell_id) const @@ -2151,7 +2151,7 @@ bool Creature::HasCategoryCooldown(uint32 spell_id) const if (!spellInfo) return false; - CreatureSpellCooldowns::const_iterator itr = m_CreatureCategoryCooldowns.find(spellInfo->Category); + CreatureSpellCooldowns::const_iterator itr = m_CreatureCategoryCooldowns.find(spellInfo->GetCategory()); return(itr != m_CreatureCategoryCooldowns.end() && time_t(itr->second + (spellInfo->CategoryRecoveryTime / IN_MILLISECONDS)) > time(NULL)); } @@ -2185,7 +2185,7 @@ void Creature::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs } // Not send cooldown for this spells - if (spellInfo->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE) + if (spellInfo->IsCooldownStartedOnEvent()) continue; if (spellInfo->PreventionType != SPELL_PREVENTION_TYPE_SILENCE) diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 9758564c8f2..dfe658a30d3 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -2056,7 +2056,7 @@ void Pet::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) } // Not send cooldown for this spells - if (spellInfo->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE) + if (spellInfo->IsCooldownStartedOnEvent()) continue; if (spellInfo->PreventionType != SPELL_PREVENTION_TYPE_SILENCE) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index eaee6dc090a..80f3f022a20 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3384,7 +3384,7 @@ void Player::SendInitialSpells() data << uint32(itr->first); data << uint16(itr->second.itemid); // cast item id - data << uint16(sEntry->Category); // spell category + data << uint16(sEntry->GetCategory()); // spell category // send infinity cooldown in special format if (itr->second.end >= infTime) @@ -3396,7 +3396,7 @@ void Player::SendInitialSpells() time_t cooldown = itr->second.end > curTime ? (itr->second.end-curTime)*IN_MILLISECONDS : 0; - if (sEntry->Category) // may be wrong, but anyway better than nothing... + if (sEntry->GetCategory()) // may be wrong, but anyway better than nothing... { data << uint32(0); // cooldown data << uint32(cooldown); // category cooldown @@ -4259,16 +4259,16 @@ void Player::RemoveSpellCooldown(uint32 spell_id, bool update /* = false */) // I am not sure which one is more efficient void Player::RemoveCategoryCooldown(uint32 cat) { - SpellCategoryStore::const_iterator i_scstore = sSpellCategoryStore.find(cat); - if (i_scstore != sSpellCategoryStore.end()) + SpellCategoryStore::const_iterator i_scstore = sSpellsByCategoryStore.find(cat); + if (i_scstore != sSpellsByCategoryStore.end()) for (SpellCategorySet::const_iterator i_scset = i_scstore->second.begin(); i_scset != i_scstore->second.end(); ++i_scset) RemoveSpellCooldown(*i_scset, true); } void Player::RemoveSpellCategoryCooldown(uint32 cat, bool update /* = false */) { - SpellCategoryStore::const_iterator ct = sSpellCategoryStore.find(cat); - if (ct == sSpellCategoryStore.end()) + SpellCategoryStore::const_iterator ct = sSpellsByCategoryStore.find(cat); + if (ct == sSpellsByCategoryStore.end()) return; const SpellCategorySet& ct_set = ct->second; @@ -20433,13 +20433,13 @@ void Player::PetSpellInitialize() time_t cooldown = (itr->second > curTime) ? (itr->second - curTime) * IN_MILLISECONDS : 0; data << uint32(itr->first); // spell ID - CreatureSpellCooldowns::const_iterator categoryitr = pet->m_CreatureCategoryCooldowns.find(spellInfo->Category); + CreatureSpellCooldowns::const_iterator categoryitr = pet->m_CreatureCategoryCooldowns.find(spellInfo->GetCategory()); if (categoryitr != pet->m_CreatureCategoryCooldowns.end()) { time_t categoryCooldown = (categoryitr->second > curTime) ? (categoryitr->second - curTime) * IN_MILLISECONDS : 0; - data << uint16(spellInfo->Category); // spell category - data << uint32(cooldown); // spell cooldown - data << uint32(categoryCooldown); // category cooldown + data << uint16(spellInfo->GetCategory()); // spell category + data << uint32(cooldown); // spell cooldown + data << uint32(categoryCooldown); // category cooldown } else { @@ -20546,13 +20546,13 @@ void Player::VehicleSpellInitialize() time_t cooldown = (itr->second > now) ? (itr->second - now) * IN_MILLISECONDS : 0; data << uint32(itr->first); // spell ID - CreatureSpellCooldowns::const_iterator categoryitr = vehicle->m_CreatureCategoryCooldowns.find(spellInfo->Category); + CreatureSpellCooldowns::const_iterator categoryitr = vehicle->m_CreatureCategoryCooldowns.find(spellInfo->GetCategory()); if (categoryitr != vehicle->m_CreatureCategoryCooldowns.end()) { time_t categoryCooldown = (categoryitr->second > now) ? (categoryitr->second - now) * IN_MILLISECONDS : 0; - data << uint16(spellInfo->Category); // spell category - data << uint32(cooldown); // spell cooldown - data << uint32(categoryCooldown); // category cooldown + data << uint16(spellInfo->GetCategory()); // spell category + data << uint32(cooldown); // spell cooldown + data << uint32(categoryCooldown); // category cooldown } else { @@ -21220,7 +21220,7 @@ void Player::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) } // Not send cooldown for this spells - if (spellInfo->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE) + if (spellInfo->IsCooldownStartedOnEvent()) continue; if (spellInfo->PreventionType != SPELL_PREVENTION_TYPE_SILENCE) @@ -21683,7 +21683,7 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite // if no cooldown found above then base at DBC data if (rec < 0 && catrec < 0) { - cat = spellInfo->Category; + cat = spellInfo->GetCategory(); rec = spellInfo->RecoveryTime; catrec = spellInfo->CategoryRecoveryTime; } @@ -21734,8 +21734,8 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite // category spells if (cat && catrec > 0) { - SpellCategoryStore::const_iterator i_scstore = sSpellCategoryStore.find(cat); - if (i_scstore != sSpellCategoryStore.end()) + SpellCategoryStore::const_iterator i_scstore = sSpellsByCategoryStore.find(cat); + if (i_scstore != sSpellsByCategoryStore.end()) { for (SpellCategorySet::const_iterator i_scset = i_scstore->second.begin(); i_scset != i_scstore->second.end(); ++i_scset) { diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index c3a611c441f..ef6d9b9edef 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -4838,7 +4838,7 @@ void Unit::AddGameObject(GameObject* gameObj) { SpellInfo const* createBySpell = sSpellMgr->GetSpellInfo(gameObj->GetSpellId()); // Need disable spell use for owner - if (createBySpell && createBySpell->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE) + if (createBySpell && createBySpell->IsCooldownStartedOnEvent()) // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existing cases) ToPlayer()->AddSpellAndCategoryCooldowns(createBySpell, 0, NULL, true); } @@ -4869,7 +4869,7 @@ void Unit::RemoveGameObject(GameObject* gameObj, bool del) { SpellInfo const* createBySpell = sSpellMgr->GetSpellInfo(spellid); // Need activate spell use for owner - if (createBySpell && createBySpell->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE) + if (createBySpell && createBySpell->IsCooldownStartedOnEvent()) // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existing cases) ToPlayer()->SendCooldownEvent(createBySpell); } @@ -9382,7 +9382,7 @@ void Unit::SetMinion(Minion *minion, bool apply) // Send infinity cooldown - client does that automatically but after relog cooldown needs to be set again SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL)); - if (spellInfo && (spellInfo->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE)) + if (spellInfo && (spellInfo->IsCooldownStartedOnEvent())) ToPlayer()->AddSpellAndCategoryCooldowns(spellInfo, 0, NULL, true); } } @@ -9424,7 +9424,7 @@ void Unit::SetMinion(Minion *minion, bool apply) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL)); // Remove infinity cooldown - if (spellInfo && (spellInfo->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE)) + if (spellInfo && (spellInfo->IsCooldownStartedOnEvent())) ToPlayer()->SendCooldownEvent(spellInfo); } @@ -10546,7 +10546,7 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas break; } // Exorcism - else if (spellProto->Category == 19) + else if (spellProto->GetCategory() == 19) { if (victim->GetCreatureTypeMask() & CREATURE_TYPEMASK_DEMON_OR_UNDEAD) return true; diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 5f458edbb07..d9727ea7ded 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -382,7 +382,7 @@ void WorldSession::HandleItemQuerySingleOpcode(WorldPacket& recvData) else { data << uint32(spell->RecoveryTime); - data << uint32(spell->Category); + data << uint32(spell->GetCategory()); data << uint32(spell->CategoryRecoveryTime); } } diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 36d1e1cb1ea..955f6b3c456 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -354,7 +354,7 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) uint32 mstime = getMSTime(); /*----------------------*/ - if(m_clientTimeDelay == 0) + if (m_clientTimeDelay == 0) m_clientTimeDelay = mstime - movementInfo.time; /* process position-change */ diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 7cfb1e04850..ddd6c1127e1 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -317,11 +317,11 @@ namespace Trinity // Wards if ((spellProtoA->SpellFamilyName == SPELLFAMILY_MAGE) || (spellProtoA->SpellFamilyName == SPELLFAMILY_WARLOCK)) - if (spellProtoA->Category == 56) + if (spellProtoA->GetCategory() == 56) return true; if ((spellProtoB->SpellFamilyName == SPELLFAMILY_MAGE) || (spellProtoB->SpellFamilyName == SPELLFAMILY_WARLOCK)) - if (spellProtoB->Category == 56) + if (spellProtoB->GetCategory() == 56) return false; // Sacred Shield @@ -343,9 +343,9 @@ namespace Trinity return false; // Ice Barrier - if (spellProtoA->Category == 471) + if (spellProtoA->GetCategory() == 471) return true; - if (spellProtoB->Category == 471) + if (spellProtoB->GetCategory() == 471) return false; // Sacrifice diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index d7b8003f19a..4b6423503c1 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -413,7 +413,7 @@ void Aura::_ApplyForTarget(Unit* target, Unit* caster, AuraApplication * auraApp // set infinity cooldown state for spells if (caster && caster->GetTypeId() == TYPEID_PLAYER) { - if (m_spellInfo->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE) + if (m_spellInfo->IsCooldownStartedOnEvent()) { Item* castItem = m_castItemGuid ? caster->ToPlayer()->GetItemByGuid(m_castItemGuid) : NULL; caster->ToPlayer()->AddSpellAndCategoryCooldowns(m_spellInfo, castItem ? castItem->GetEntry() : 0, NULL, true); @@ -446,7 +446,7 @@ void Aura::_UnapplyForTarget(Unit* target, Unit* caster, AuraApplication * auraA // reset cooldown state for spells if (caster && caster->GetTypeId() == TYPEID_PLAYER) { - if (GetSpellInfo()->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE) + if (GetSpellInfo()->IsCooldownStartedOnEvent()) // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existed cases) caster->ToPlayer()->SendCooldownEvent(GetSpellInfo()); } @@ -1279,7 +1279,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b break; case SPELLFAMILY_ROGUE: // Sprint (skip non player casted spells by category) - if (GetSpellInfo()->SpellFamilyFlags[0] & 0x40 && GetSpellInfo()->Category == 44) + if (GetSpellInfo()->SpellFamilyFlags[0] & 0x40 && GetSpellInfo()->GetCategory() == 44) // in official maybe there is only one icon? if (target->HasAura(58039)) // Glyph of Blurred Speed target->CastSpell(target, 61922, true); // Sprint (waterwalk) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index aa629b46e28..e91bba13fa0 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3552,7 +3552,7 @@ void Spell::SendSpellCooldown() return; // mana/health/etc potions, disabled by client (until combat out as declarate) - if (m_CastItem && m_CastItem->IsPotion()) + if (m_CastItem && (m_CastItem->IsPotion() || m_spellInfo->IsCooldownStartedOnEvent())) { // need in some way provided data for Spell::finish SendCooldownEvent _player->SetLastPotionId(m_CastItem->GetEntry()); @@ -3560,7 +3560,7 @@ void Spell::SendSpellCooldown() } // have infinity cooldown but set at aura apply // do not set cooldown for triggered spells (needed by reincarnation) - if (m_spellInfo->Attributes & (SPELL_ATTR0_DISABLED_WHILE_ACTIVE | SPELL_ATTR0_PASSIVE) || (_triggeredCastFlags & TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD)) + if (m_spellInfo->IsCooldownStartedOnEvent() || m_spellInfo->IsPassive() || (_triggeredCastFlags & TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD)) return; _player->AddSpellAndCategoryCooldowns(m_spellInfo, m_CastItem ? m_CastItem->GetEntry() : 0, this); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 0732c389bfa..e580a3d0f2d 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -369,7 +369,7 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex) case SPELLFAMILY_WARRIOR: { // Shield Slam - if (m_spellInfo->SpellFamilyFlags[1] & 0x200 && m_spellInfo->Category == 1209) + if (m_spellInfo->SpellFamilyFlags[1] & 0x200 && m_spellInfo->GetCategory() == 1209) { uint8 level = m_caster->getLevel(); uint32 block_value = m_caster->GetShieldBlockValue(uint32(float(level) * 24.5f), uint32(float(level) * 34.5f)); @@ -943,7 +943,7 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex) // Remove spell cooldown (not category) if spell triggering spell with cooldown and same category if (m_caster->GetTypeId() == TYPEID_PLAYER && m_spellInfo->CategoryRecoveryTime && spellInfo->CategoryRecoveryTime - && m_spellInfo->Category == spellInfo->Category) + && m_spellInfo->GetCategory() == spellInfo->GetCategory()) m_caster->ToPlayer()->RemoveSpellCooldown(spellInfo->Id); // original caster guid only for GO cast @@ -996,7 +996,7 @@ void Spell::EffectTriggerMissileSpell(SpellEffIndex effIndex) // Remove spell cooldown (not category) if spell triggering spell with cooldown and same category if (m_caster->GetTypeId() == TYPEID_PLAYER && m_spellInfo->CategoryRecoveryTime && spellInfo->CategoryRecoveryTime - && m_spellInfo->Category == spellInfo->Category) + && m_spellInfo->GetCategory() == spellInfo->GetCategory()) m_caster->ToPlayer()->RemoveSpellCooldown(spellInfo->Id); // original caster guid only for GO cast @@ -2521,7 +2521,7 @@ void Spell::EffectDispel(SpellEffIndex effIndex) // On success dispel // Devour Magic - if (m_spellInfo->SpellFamilyName == SPELLFAMILY_WARLOCK && m_spellInfo->Category == SPELLCATEGORY_DEVOUR_MAGIC) + if (m_spellInfo->SpellFamilyName == SPELLFAMILY_WARLOCK && m_spellInfo->GetCategory() == SPELLCATEGORY_DEVOUR_MAGIC) { int32 heal_amount = m_spellInfo->Effects[EFFECT_1].CalcValue(); m_caster->CastCustomSpell(m_caster, 19658, &heal_amount, NULL, NULL, true); @@ -4106,7 +4106,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) case SPELLFAMILY_PALADIN: { // Judgement (seal trigger) - if (m_spellInfo->Category == SPELLCATEGORY_JUDGEMENT) + if (m_spellInfo->GetCategory() == SPELLCATEGORY_JUDGEMENT) { if (!unitTarget || !unitTarget->IsAlive()) return; diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index a0e1ec065cc..0cab2cd4540 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -763,7 +763,7 @@ SpellEffectInfo::StaticData SpellEffectInfo::_data[TOTAL_SPELL_EFFECTS] = SpellInfo::SpellInfo(SpellEntry const* spellEntry) { Id = spellEntry->Id; - Category = spellEntry->Category; + CategoryEntry = spellEntry->Category ? sSpellCategoryStore.LookupEntry(spellEntry->Category) : NULL; Dispel = spellEntry->Dispel; Mechanic = spellEntry->Mechanic; Attributes = spellEntry->Attributes; @@ -859,6 +859,11 @@ SpellInfo::~SpellInfo() _UnloadImplicitTargetConditionLists(); } +uint32 SpellInfo::GetCategory() const +{ + return CategoryEntry ? CategoryEntry->Id : 0; +} + bool SpellInfo::HasEffect(SpellEffects effect) const { for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) @@ -1103,6 +1108,11 @@ bool SpellInfo::IsStackableOnOneSlotWithDifferentCasters() const return StackAmount > 1 && !IsChanneled() && !(AttributesEx3 & SPELL_ATTR3_STACK_FOR_DIFF_CASTERS); } +bool SpellInfo::IsCooldownStartedOnEvent() const +{ + return Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE || (CategoryEntry && CategoryEntry->Flags & SPELL_CATEGORY_FLAG_COOLDOWN_STARTS_ON_EVENT); +} + bool SpellInfo::IsDeathPersistent() const { return AttributesEx3 & SPELL_ATTR3_DEATH_PERSISTENT; @@ -1712,7 +1722,7 @@ SpellCastResult SpellInfo::CheckVehicle(Unit const* caster) const bool SpellInfo::CheckTargetCreatureType(Unit const* target) const { // Curse of Doom & Exorcism: not find another way to fix spell target check :/ - if (SpellFamilyName == SPELLFAMILY_WARLOCK && Category == 1179) + if (SpellFamilyName == SPELLFAMILY_WARLOCK && GetCategory() == 1179) { // not allow cast at player if (target->GetTypeId() == TYPEID_PLAYER) @@ -1816,7 +1826,7 @@ AuraStateType SpellInfo::GetAuraState() const return AURA_STATE_FAERIE_FIRE; // Sting (hunter's pet ability) - if (Category == 1133) + if (GetCategory() == 1133) return AURA_STATE_FAERIE_FIRE; // Victorious diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index c2ca938d26f..74d95171b4b 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -290,7 +290,7 @@ class SpellInfo { public: uint32 Id; - uint32 Category; + SpellCategoryEntry const* CategoryEntry; uint32 Dispel; uint32 Mechanic; uint32 Attributes; @@ -368,6 +368,7 @@ public: SpellInfo(SpellEntry const* spellEntry); ~SpellInfo(); + uint32 GetCategory() const; bool HasEffect(SpellEffects effect) const; bool HasAura(AuraType aura) const; bool HasAreaAuraEffect() const; @@ -393,6 +394,7 @@ public: bool IsPassiveStackableWithRanks() const; bool IsMultiSlotAura() const; bool IsStackableOnOneSlotWithDifferentCasters() const; + bool IsCooldownStartedOnEvent() const; bool IsDeathPersistent() const; bool IsRequiringDeadTarget() const; bool IsAllowingDeadTarget() const;