diff --git a/sql/updates/world/4.3.4/2022_12_21_01_world.sql b/sql/updates/world/4.3.4/2022_12_21_01_world.sql new file mode 100644 index 0000000000..f752c92ce2 --- /dev/null +++ b/sql/updates/world/4.3.4/2022_12_21_01_world.sql @@ -0,0 +1,107 @@ +DELETE FROM `world_state` WHERE `ID` IN (2313,2314,2317,2322,2323,2324,2325,2470,2471,2472,2473,2474,2475,2476,2478,2480,2481,2482,2483,2484,2485,2489,2490,2491,2493,2494,2495,2497,2502, +2503,2508,2509,2510,2512,2527,2528,2529,2533,2534,2535,2555,2556,2557,2558,2559,2560,2620,2621,2622,2623,2624,2625,2644,2645,2646,2647,2648,2649,2650,2651,2652,2655,2656,2657,2658,2659, +2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2676,2677,2681,2682,2683,2684,2685,2686,2688,2689,2690,2691,2692,2693,2694,2695,2696,2760,2761,2762,2763,2767,2768); +INSERT INTO `world_state` (`ID`,`DefaultValue`,`MapIDs`,`AreaIDs`,`ScriptName`,`Comment`) VALUES +(2313,0,'1','1377','','Silithus - Alliance Silithyst Collected'), +(2314,0,'1','1377','','Silithus - Horde Silithyst Collected'), +(2317,200,'1','1377','','Silithus - Max Silithyst'), +(2322,0,'1','1377','','Silithus - Sandworm N (unused)'), +(2323,0,'1','1377','','Silithus - Sandworm S (unused)'), +(2324,0,'1','1377','','Silithus - Sandworm SW (unused)'), +(2325,0,'1','1377','','Silithus - Sandworm E (unused)'), +(2470,0,'530','3483','','Hellfire Peninsula - The Stadium - Horde Controlled'), +(2471,0,'530','3483','','Hellfire Peninsula - The Stadium - Alliance Controlled'), +(2472,1,'530','3483','','Hellfire Peninsula - The Stadium - Neutral'), +(2473,0,'530','3483','','Hellfire Peninsula - Show Fort capture bar'), +(2474,50,'530','3483','','Hellfire Peninsula - Fort CaptureBar Value'), +(2475,20,'530','3483','','Hellfire Peninsula - Fort CaptureBar Neutral Zone Size'), +(2476,0,'530','3483','','Hellfire Peninsula - Alliance Forts Controlled'), +(2478,0,'530','3483','','Hellfire Peninsula - Horde Forts Controlled'), +(2480,0,'530','3483','','Hellfire Peninsula - The Overlook - Alliance Controlled'), +(2481,0,'530','3483','','Hellfire Peninsula - The Overlook - Horde Controlled'), +(2482,1,'530','3483','','Hellfire Peninsula - The Overlook - Neutral'), +(2483,0,'530','3483','','Hellfire Peninsula - Broken Hill - Alliance Controlled'), +(2484,0,'530','3483','','Hellfire Peninsula - Broken Hill - Horde Controlled'), +(2485,1,'530','3483','','Hellfire Peninsula - Broken Hill - Neutral'), +(2489,1,'530','3483','','Hellfire Peninsula - Show Horde Forts Controlled'), +(2490,1,'530','3483','','Hellfire Peninsula - Show Alliance Forts Controlled'), +(2491,0,'530','3518','','Nagrand - Halaa - Guards Remaining'), +(2493,15,'530','3518','','Nagrand - Halaa - Guards Max'), +(2494,50,'530','3518','','Nagrand - Halaa - CaptureBar Value'), +(2495,0,'530','3518','','Nagrand - Halaa - Show capture bar'), +(2497,0,'530','3518','','Nagrand - Halaa - CaptureBar Neutral Zone Size'), +(2502,0,'530','3518','','Nagrand - Halaa - Show Alliance Guards Remaining'), +(2503,0,'530','3518','','Nagrand - Halaa - Show Horde Guards Remaining'), +(2508,0,'530','3519','','Terokkar Forest - Show Locked time remaining (Neutral)'), +(2509,0,'530','3519','','Terokkar Forest - Locked time remaining hours'), +(2510,0,'530','3519','','Terokkar Forest - Locked time remaining minutes first digit'), +(2512,0,'530','3519','','Terokkar Forest - Locked time remaining minutes second digit'), +(2527,0,'530','3521','','Zangarmarsh - West Beacon Show CaptureBar'), +(2528,50,'530','3521','','Zangarmarsh - West Beacon CaptureBar Value'), +(2529,80,'530','3521','','Zangarmarsh - West Beacon CaptureBar Neutral Zone Size'), +(2533,0,'530','3521','','Zangarmarsh - East Beacon Show CaptureBar'), +(2534,50,'530','3521','','Zangarmarsh - East Beacon CaptureBar Value'), +(2535,80,'530','3521','','Zangarmarsh - East Beacon CaptureBar Neutral Zone Size'), +(2555,0,'530','3521','','Zangarmarsh - West Beacon - Alliance Controlled widget'), +(2556,0,'530','3521','','Zangarmarsh - West Beacon - Horde Controlled widget'), +(2557,1,'530','3521','','Zangarmarsh - West Beacon - Neutral widget'), +(2558,0,'530','3521','','Zangarmarsh - East Beacon - Alliance Controlled widget'), +(2559,0,'530','3521','','Zangarmarsh - East Beacon - Horde Controlled widget'), +(2560,1,'530','3521','','Zangarmarsh - East Beacon - Neutral widget'), +(2620,1,'530','3519','','Terokkar Forest - Show Towers Controlled'), +(2621,0,'530','3519','','Terokkar Forest - Alliance Towers Controlled'), +(2622,0,'530','3519','','Terokkar Forest - Horde Towers Controlled'), +(2623,0,'530','3519','','Terokkar Forest - Show Tower capture bar'), +(2624,80,'530','3519','','Terokkar Forest - Tower CaptureBar Neutral Zone Size'), +(2625,50,'530','3519','','Terokkar Forest - Tower CaptureBar Value'), +(2644,0,'530','3521','','Zangarmarsh - West Beacon - Alliance Controlled POI'), +(2645,0,'530','3521','','Zangarmarsh - West Beacon - Horde Controlled POI'), +(2646,1,'530','3521','','Zangarmarsh - West Beacon POI'), +(2647,1,'530','3521','','Zangarmarsh - Twinspire Graveyard'), +(2648,0,'530','3521','','Zangarmarsh - Twinspire Graveyard - Alliance Controlled'), +(2649,0,'530','3521','','Zangarmarsh - Twinspire Graveyard - Horde Controlled'), +(2650,0,'530','3521','','Zangarmarsh - East Beacon - Alliance Controlled POI'), +(2651,0,'530','3521','','Zangarmarsh - East Beacon - Horde Controlled POI'), +(2652,1,'530','3521','','Zangarmarsh - East Beacon POI'), +(2655,0,'530','3521','','Zangarmarsh - Alliance Field Scout (ready)'), +(2656,1,'530','3521','','Zangarmarsh - Alliance Field Scout (not ready)'), +(2657,1,'530','3521','','Zangarmarsh - Horde Field Scout (not ready)'), +(2658,0,'530','3521','','Zangarmarsh - Horde Field Scout (ready)'), +(2659,0,'530','3518','','Nagrand - Wyvern Camp (East) - Alliance Uncontrolled'), +(2660,0,'530','3518','','Nagrand - Wyvern Camp (East) - Horde Controlled'), +(2661,0,'530','3518','','Nagrand - Wyvern Camp (East) - Alliance Controlled'), +(2662,0,'530','3518','','Nagrand - Wyvern Camp (North) - Alliance Uncontrolled'), +(2663,0,'530','3518','','Nagrand - Wyvern Camp (North) - Horde Controlled'), +(2664,0,'530','3518','','Nagrand - Wyvern Camp (North) - Alliance Controlled'), +(2665,0,'530','3518','','Nagrand - Wyvern Camp (West) - Horde Controlled'), +(2666,0,'530','3518','','Nagrand - Wyvern Camp (West) - Alliance Controlled'), +(2667,0,'530','3518','','Nagrand - Wyvern Camp (West) - Alliance Uncontrolled'), +(2668,0,'530','3518','','Nagrand - Wyvern Camp (South) - Horde Controlled'), +(2669,0,'530','3518','','Nagrand - Wyvern Camp (South) - Alliance Controlled'), +(2670,0,'530','3518','','Nagrand - Wyvern Camp (South) - Alliance Uncontrolled'), +(2671,1,'530','3518','','Nagrand - Halaa - Uncontrolled'), +(2672,0,'530','3518','','Nagrand - Halaa - Horde Controlled'), +(2673,0,'530','3518','','Nagrand - Halaa - Alliance Controlled'), +(2676,0,'530','3518','','Nagrand - Halaa - Alliance Capturing'), +(2677,0,'530','3518','','Nagrand - Halaa - Horde Capturing'), +(2681,1,'530','3519','','Terokkar Forest - Spirit Tower (NW) - Neutral'), +(2682,0,'530','3519','','Terokkar Forest - Spirit Tower (NW) - Horde Controlled'), +(2683,0,'530','3519','','Terokkar Forest - Spirit Tower (NW) - Alliance Controlled'), +(2684,0,'530','3519','','Terokkar Forest - Spirit Tower (N) - Alliance Controlled'), +(2685,0,'530','3519','','Terokkar Forest - Spirit Tower (N) - Horde Controlled'), +(2686,1,'530','3519','','Terokkar Forest - Spirit Tower (N) - Neutral'), +(2688,0,'530','3519','','Terokkar Forest - Spirit Tower (NE) - Alliance Controlled'), +(2689,0,'530','3519','','Terokkar Forest - Spirit Tower (NE) - Horde Controlled'), +(2690,1,'530','3519','','Terokkar Forest - Spirit Tower (NE) - Neutral'), +(2691,0,'530','3519','','Terokkar Forest - Spirit Tower (S) - Alliance Controlled'), +(2692,0,'530','3519','','Terokkar Forest - Spirit Tower (S) - Horde Controlled'), +(2693,1,'530','3519','','Terokkar Forest - Spirit Tower (S) - Neutral'), +(2694,0,'530','3519','','Terokkar Forest - Spirit Tower (SE) - Alliance Controlled'), +(2695,0,'530','3519','','Terokkar Forest - Spirit Tower (SE) - Horde Controlled'), +(2696,1,'530','3519','','Terokkar Forest - Spirit Tower (SE) - Neutral'), +(2760,0,'530','3518','','Nagrand - Wyvern Camp (South) - Horde Uncontrolled'), +(2761,0,'530','3518','','Nagrand - Wyvern Camp (West) - Horde Uncontrolled'), +(2762,0,'530','3518','','Nagrand - Wyvern Camp (North) - Horde Uncontrolled'), +(2763,0,'530','3518','','Nagrand - Wyvern Camp (East) - Horde Uncontrolled'), +(2767,0,'530','3519','','Terokkar Forest - Show Locked time remaining (Alliance)'), +(2768,0,'530','3519','','Terokkar Forest - Show Locked time remaining (Horde)'); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index c2cc59a572..2ee71a4999 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -8757,7 +8757,6 @@ void Player::SendInitWorldStates(uint32 zoneId, uint32 areaId) { // data depends on zoneid/mapid... uint32 mapid = GetMapId(); - OutdoorPvP* pvp = sOutdoorPvPMgr->GetOutdoorPvPToZoneId(zoneId); TC_LOG_DEBUG("network", "Sending SMSG_INIT_WORLD_STATES to Map: %u, Zone: %u", mapid, zoneId); @@ -8779,180 +8778,6 @@ void Player::SendInitWorldStates(uint32 zoneId, uint32 areaId) // 0 - End of season packet.Worldstates.emplace_back(3901, int32(sWorld->getIntConfig(CONFIG_ARENA_SEASON_ID) - sWorld->getBoolConfig(CONFIG_ARENA_SEASON_IN_PROGRESS))); // 8 PreviousSeason - if (mapid == 530) // Outland - { - packet.Worldstates.emplace_back(2495, 0); // 7 - packet.Worldstates.emplace_back(2493, 0xF); // 8 - packet.Worldstates.emplace_back(2491, 0xF); // 9 - } - - // insert - switch (zoneId) - { - case 1: // Dun Morogh - case 11: // Wetlands - case 12: // Elwynn Forest - case 38: // Loch Modan - case 40: // Westfall - case 51: // Searing Gorge - case 1519: // Stormwind City - case 1537: // Ironforge - case 2257: // Deeprun Tram - case 3703: // Shattrath City}); - break; - case 1377: // Silithus - if (pvp && pvp->GetTypeId() == OUTDOOR_PVP_SI) - pvp->FillInitialWorldStates(packet); - else - { - // states are always shown - packet.Worldstates.emplace_back(2313, 0x0); // 7 ally silityst gathered - packet.Worldstates.emplace_back(2314, 0x0); // 8 horde silityst gathered - packet.Worldstates.emplace_back(2317, 0x0); // 9 max silithyst - } - // dunno about these... aq opening event maybe? - packet.Worldstates.emplace_back(2322, 0x0); // 10 sandworm N - packet.Worldstates.emplace_back(2323, 0x0); // 11 sandworm S - packet.Worldstates.emplace_back(2324, 0x0); // 12 sandworm SW - packet.Worldstates.emplace_back(2325, 0x0); // 13 sandworm E - break; - // any of these needs change! the client remembers the prev setting! - // ON EVERY ZONE LEAVE, RESET THE OLD ZONE'S WORLD STATE, BUT AT LEAST THE UI STUFF! - case 3483: // Hellfire Peninsula - if (pvp && pvp->GetTypeId() == OUTDOOR_PVP_HP) - pvp->FillInitialWorldStates(packet); - else - { - packet.Worldstates.emplace_back(0x9ba, 0x1); // 10 // add ally tower main gui icon // maybe should be sent only on login? - packet.Worldstates.emplace_back(0x9b9, 0x1); // 11 // add horde tower main gui icon // maybe should be sent only on login? - packet.Worldstates.emplace_back(0x9b5, 0x0); // 12 // show neutral broken hill icon // 2485 - packet.Worldstates.emplace_back(0x9b4, 0x1); // 13 // show icon above broken hill // 2484 - packet.Worldstates.emplace_back(0x9b3, 0x0); // 14 // show ally broken hill icon // 2483 - packet.Worldstates.emplace_back(0x9b2, 0x0); // 15 // show neutral overlook icon // 2482 - packet.Worldstates.emplace_back(0x9b1, 0x1); // 16 // show the overlook arrow // 2481 - packet.Worldstates.emplace_back(0x9b0, 0x0); // 17 // show ally overlook icon // 2480 - packet.Worldstates.emplace_back(0x9ae, 0x0); // 18 // horde pvp objectives captured // 2478 - packet.Worldstates.emplace_back(0x9ac, 0x0); // 19 // ally pvp objectives captured // 2476 - packet.Worldstates.emplace_back(2475, 100); //: ally / horde slider grey area // show only in direct vicinity! - packet.Worldstates.emplace_back(2474, 50); //: ally / horde slider percentage, 100 for ally, 0 for horde // show only in direct vicinity! - packet.Worldstates.emplace_back(2473, 0); //: ally / horde slider display // show only in direct vicinity! - packet.Worldstates.emplace_back(0x9a8, 0x0); // 20 // show the neutral stadium icon // 2472 - packet.Worldstates.emplace_back(0x9a7, 0x0); // 21 // show the ally stadium icon // 2471 - packet.Worldstates.emplace_back(0x9a6, 0x1); // 22 // show the horde stadium icon // 2470 - } - break; - case 3518: // Nagrand - if (pvp && pvp->GetTypeId() == OUTDOOR_PVP_NA) - pvp->FillInitialWorldStates(packet); - else - { - packet.Worldstates.emplace_back(2503, 0x0); // 10 - packet.Worldstates.emplace_back(2502, 0x0); // 11 - packet.Worldstates.emplace_back(2493, 0x0); // 12 - packet.Worldstates.emplace_back(2491, 0x0); // 13 - - packet.Worldstates.emplace_back(2495, 0x0); // 14 - packet.Worldstates.emplace_back(2494, 0x0); // 15 - packet.Worldstates.emplace_back(2497, 0x0); // 16 - - packet.Worldstates.emplace_back(2762, 0x0); // 17 - packet.Worldstates.emplace_back(2662, 0x0); // 18 - packet.Worldstates.emplace_back(2663, 0x0); // 19 - packet.Worldstates.emplace_back(2664, 0x0); // 20 - - packet.Worldstates.emplace_back(2760, 0x0); // 21 - packet.Worldstates.emplace_back(2670, 0x0); // 22 - packet.Worldstates.emplace_back(2668, 0x0); // 23 - packet.Worldstates.emplace_back(2669, 0x0); // 24 - - packet.Worldstates.emplace_back(2761, 0x0); // 25 - packet.Worldstates.emplace_back(2667, 0x0); // 26 - packet.Worldstates.emplace_back(2665, 0x0); // 27 - packet.Worldstates.emplace_back(2666, 0x0); // 28 - - packet.Worldstates.emplace_back(2763, 0x0); // 29 - packet.Worldstates.emplace_back(2659, 0x0); // 30 - packet.Worldstates.emplace_back(2660, 0x0); // 31 - packet.Worldstates.emplace_back(2661, 0x0); // 32 - - packet.Worldstates.emplace_back(2671, 0x0); // 33 - packet.Worldstates.emplace_back(2676, 0x0); // 34 - packet.Worldstates.emplace_back(2677, 0x0); // 35 - packet.Worldstates.emplace_back(2672, 0x0); // 36 - packet.Worldstates.emplace_back(2673, 0x0); // 37 - } - break; - case 3519: // Terokkar Forest - if (pvp && pvp->GetTypeId() == OUTDOOR_PVP_TF) - pvp->FillInitialWorldStates(packet); - else - { - packet.Worldstates.emplace_back(0xa41, 0x0); // 10 // 2625 capture bar pos - packet.Worldstates.emplace_back(0xa40, 0x14); // 11 // 2624 capture bar neutral - packet.Worldstates.emplace_back(0xa3f, 0x0); // 12 // 2623 show capture bar - packet.Worldstates.emplace_back(0xa3e, 0x0); // 13 // 2622 horde towers controlled - packet.Worldstates.emplace_back(0xa3d, 0x5); // 14 // 2621 ally towers controlled - packet.Worldstates.emplace_back(0xa3c, 0x0); // 15 // 2620 show towers controlled - packet.Worldstates.emplace_back(0xa88, 0x0); // 16 // 2696 SE Neu - packet.Worldstates.emplace_back(0xa87, 0x0); // 17 // SE Horde - packet.Worldstates.emplace_back(0xa86, 0x0); // 18 // SE Ally - packet.Worldstates.emplace_back(0xa85, 0x0); // 19 //S Neu - packet.Worldstates.emplace_back(0xa84, 0x0); // 20 S Horde - packet.Worldstates.emplace_back(0xa83, 0x0); // 21 S Ally - packet.Worldstates.emplace_back(0xa82, 0x0); // 22 NE Neu - packet.Worldstates.emplace_back(0xa81, 0x0); // 23 NE Horde - packet.Worldstates.emplace_back(0xa80, 0x0); // 24 NE Ally - packet.Worldstates.emplace_back(0xa7e, 0x0); // 25 // 2686 N Neu - packet.Worldstates.emplace_back(0xa7d, 0x0); // 26 N Horde - packet.Worldstates.emplace_back(0xa7c, 0x0); // 27 N Ally - packet.Worldstates.emplace_back(0xa7b, 0x0); // 28 NW Ally - packet.Worldstates.emplace_back(0xa7a, 0x0); // 29 NW Horde - packet.Worldstates.emplace_back(0xa79, 0x0); // 30 NW Neutral - packet.Worldstates.emplace_back(0x9d0, 0x5); // 31 // 2512 locked time remaining seconds first digit - packet.Worldstates.emplace_back(0x9ce, 0x0); // 32 // 2510 locked time remaining seconds second digit - packet.Worldstates.emplace_back(0x9cd, 0x0); // 33 // 2509 locked time remaining minutes - packet.Worldstates.emplace_back(0x9cc, 0x0); // 34 // 2508 neutral locked time show - packet.Worldstates.emplace_back(0xad0, 0x0); // 35 // 2768 horde locked time show - packet.Worldstates.emplace_back(0xacf, 0x1); // 36 // 2767 ally locked time show - } - break; - case 3521: // Zangarmarsh - if (pvp && pvp->GetTypeId() == OUTDOOR_PVP_ZM) - pvp->FillInitialWorldStates(packet); - else - { - packet.Worldstates.emplace_back(0x9e1, 0x0); // 10 //2529 - packet.Worldstates.emplace_back(0x9e0, 0x0); // 11 - packet.Worldstates.emplace_back(0x9df, 0x0); // 12 - packet.Worldstates.emplace_back(0xa5d, 0x1); // 13 //2653 - packet.Worldstates.emplace_back(0xa5c, 0x0); // 14 //2652 east beacon neutral - packet.Worldstates.emplace_back(0xa5b, 0x1); // 15 horde - packet.Worldstates.emplace_back(0xa5a, 0x0); // 16 ally - packet.Worldstates.emplace_back(0xa59, 0x1); // 17 // 2649 Twin spire graveyard horde 12??? - packet.Worldstates.emplace_back(0xa58, 0x0); // 18 ally 14 ??? - packet.Worldstates.emplace_back(0xa57, 0x0); // 19 neutral 7??? - packet.Worldstates.emplace_back(0xa56, 0x0); // 20 // 2646 west beacon neutral - packet.Worldstates.emplace_back(0xa55, 0x1); // 21 horde - packet.Worldstates.emplace_back(0xa54, 0x0); // 22 ally - packet.Worldstates.emplace_back(0x9e7, 0x0); // 23 // 2535 - packet.Worldstates.emplace_back(0x9e6, 0x0); // 24 - packet.Worldstates.emplace_back(0x9e5, 0x0); // 25 - packet.Worldstates.emplace_back(0xa00, 0x0); // 26 // 2560 - packet.Worldstates.emplace_back(0x9ff, 0x1); // 27 - packet.Worldstates.emplace_back(0x9fe, 0x0); // 28 - packet.Worldstates.emplace_back(0x9fd, 0x0); // 29 - packet.Worldstates.emplace_back(0x9fc, 0x1); // 30 - packet.Worldstates.emplace_back(0x9fb, 0x0); // 31 - packet.Worldstates.emplace_back(0xa62, 0x0); // 32 // 2658 - packet.Worldstates.emplace_back(0xa61, 0x1); // 33 - packet.Worldstates.emplace_back(0xa60, 0x1); // 34 - packet.Worldstates.emplace_back(0xa5f, 0x0); // 35 - } - break; - default: - break; - } - SendDirectMessage(packet.Write()); SendBGWeekendWorldStates(); } diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp index c5ac569c99..1b2fe24fb7 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp @@ -28,6 +28,7 @@ #include "ObjectMgr.h" #include "OutdoorPvPMgr.h" #include "WorldPacket.h" +#include "WorldStateMgr.h" class DefenseMessageBuilder { @@ -240,7 +241,7 @@ void OutdoorPvP::DeleteSpawns() m_capturePoints.clear(); } -OutdoorPvP::OutdoorPvP() : m_TypeId(0), m_sendUpdate(true), m_map(nullptr) { } +OutdoorPvP::OutdoorPvP() : m_TypeId(0), m_map(nullptr) { } OutdoorPvP::~OutdoorPvP() { @@ -399,13 +400,14 @@ bool OPvPCapturePoint::Update(uint32 diff) return false; } -void OutdoorPvP::SendUpdateWorldState(uint32 field, uint32 value) +int32 OutdoorPvP::GetWorldState(int32 worldStateId) const { - if (m_sendUpdate) - for (int i = 0; i < 2; ++i) - for (GuidSet::iterator itr = m_players[i].begin(); itr != m_players[i].end(); ++itr) - if (Player* const player = ObjectAccessor::FindPlayer(*itr)) - player->SendUpdateWorldState(field, value); + return sWorldStateMgr->GetValue(worldStateId, m_map); +} + +void OutdoorPvP::SetWorldState(int32 worldStateId, int32 value) +{ + sWorldStateMgr->SetValue(worldStateId, value, false, m_map); } void OPvPCapturePoint::SendUpdateWorldState(uint32 field, uint32 value) diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h index cd7179280b..e1f622ce0d 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.h +++ b/src/server/game/OutdoorPvP/OutdoorPvP.h @@ -82,14 +82,6 @@ class Unit; class WorldPacket; struct GossipMenuItems; -namespace WorldPackets -{ - namespace WorldState - { - class InitWorldStates; - } -} - class TC_GAME_API OPvPCapturePoint { public: @@ -98,8 +90,6 @@ class TC_GAME_API OPvPCapturePoint virtual ~OPvPCapturePoint() { } - virtual void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) { } - // send world state update to all players present void SendUpdateWorldState(uint32 field, uint32 value); @@ -208,8 +198,6 @@ class TC_GAME_API OutdoorPvP : public ZoneScript typedef std::pair GoScriptPair; typedef std::pair CreatureScriptPair; - virtual void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) { } - // called when a player triggers an areatrigger virtual bool HandleAreaTrigger(Player* player, uint32 trigger); @@ -228,7 +216,8 @@ class TC_GAME_API OutdoorPvP : public ZoneScript void OnCreatureRemove(Creature*) override; // send world state update to all players present - void SendUpdateWorldState(uint32 field, uint32 value); + int32 GetWorldState(int32 worldStateId) const; + void SetWorldState(int32 worldStateId, int32 value); // called by OutdoorPvPMgr, updates the objectives and if needed, sends new worldstateui information virtual bool Update(uint32 diff); @@ -279,8 +268,6 @@ class TC_GAME_API OutdoorPvP : public ZoneScript uint32 m_TypeId; - bool m_sendUpdate; - // world state stuff virtual void SendRemoveWorldStates(Player* /*player*/) { } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp index 3f4ccec2b9..dc9913c346 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp @@ -36,9 +36,9 @@ uint32 const HP_CapturePointEvent_Enter[HP_TOWER_NUM] = { 11404, 11396, 11388 }; uint32 const HP_CapturePointEvent_Leave[HP_TOWER_NUM] = { 11403, 11395, 11387 }; */ -uint32 const HP_MAP_N[HP_TOWER_NUM] = { 0x9b5, 0x9b2, 0x9a8 }; -uint32 const HP_MAP_A[HP_TOWER_NUM] = { 0x9b3, 0x9b0, 0x9a7 }; -uint32 const HP_MAP_H[HP_TOWER_NUM] = { 0x9b4, 0x9b1, 0x9a6 }; +uint32 const HP_MAP_N[HP_TOWER_NUM] = { 2485, 2482, 2472 }; +uint32 const HP_MAP_A[HP_TOWER_NUM] = { 2483, 2480, 2471 }; +uint32 const HP_MAP_H[HP_TOWER_NUM] = { 2484, 2481, 2470 }; uint32 const HP_TowerArtKit_A[HP_TOWER_NUM] = { 65, 62, 67 }; uint32 const HP_TowerArtKit_H[HP_TOWER_NUM] = { 64, 61, 68 }; @@ -137,36 +137,31 @@ bool OutdoorPvPHP::Update(uint32 diff) TeamCastSpell(TEAM_ALLIANCE, -AllianceBuff); TeamCastSpell(TEAM_HORDE, -HordeBuff); } - SendUpdateWorldState(HP_UI_TOWER_COUNT_A, m_AllianceTowersControlled); - SendUpdateWorldState(HP_UI_TOWER_COUNT_H, m_HordeTowersControlled); + SetWorldState(HP_UI_TOWER_COUNT_A, m_AllianceTowersControlled); + SetWorldState(HP_UI_TOWER_COUNT_H, m_HordeTowersControlled); } return changed; } void OutdoorPvPHP::SendRemoveWorldStates(Player* player) { - player->SendUpdateWorldState(HP_UI_TOWER_DISPLAY_A, 0); - player->SendUpdateWorldState(HP_UI_TOWER_DISPLAY_H, 0); - player->SendUpdateWorldState(HP_UI_TOWER_COUNT_H, 0); - player->SendUpdateWorldState(HP_UI_TOWER_COUNT_A, 0); + WorldPackets::WorldState::InitWorldStates initWorldStates; + initWorldStates.MapID = player->GetMapId(); + initWorldStates.AreaID = player->GetZoneId(); + initWorldStates.SubareaID = player->GetAreaId(); + initWorldStates.Worldstates.emplace_back(HP_UI_TOWER_DISPLAY_A, 0); + initWorldStates.Worldstates.emplace_back(HP_UI_TOWER_DISPLAY_H, 0); + initWorldStates.Worldstates.emplace_back(HP_UI_TOWER_COUNT_H, 0); + initWorldStates.Worldstates.emplace_back(HP_UI_TOWER_COUNT_A, 0); - for (int i = 0; i < HP_TOWER_NUM; ++i) + for (size_t i = 0; i < HP_TOWER_NUM; ++i) { - player->SendUpdateWorldState(HP_MAP_N[i], 0); - player->SendUpdateWorldState(HP_MAP_A[i], 0); - player->SendUpdateWorldState(HP_MAP_H[i], 0); + initWorldStates.Worldstates.emplace_back(HP_MAP_N[i], 0); + initWorldStates.Worldstates.emplace_back(HP_MAP_A[i], 0); + initWorldStates.Worldstates.emplace_back(HP_MAP_H[i], 0); } -} -void OutdoorPvPHP::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - data.Worldstates.emplace_back(HP_UI_TOWER_DISPLAY_A, 1); - data.Worldstates.emplace_back(HP_UI_TOWER_DISPLAY_H, 1); - data.Worldstates.emplace_back(HP_UI_TOWER_COUNT_A, m_AllianceTowersControlled); - data.Worldstates.emplace_back(HP_UI_TOWER_COUNT_H, m_HordeTowersControlled); - - for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr) - itr->second->FillInitialWorldStates(data); + player->SendDirectMessage(initWorldStates.Write()); } void OPvPCapturePointHP::ChangeState() @@ -204,7 +199,7 @@ void OPvPCapturePointHP::ChangeState() // send world state update if (field) { - m_PvP->SendUpdateWorldState(field, 0); + m_PvP->SetWorldState(field, 0); field = 0; } uint32 artkit = 21; @@ -265,40 +260,13 @@ void OPvPCapturePointHP::ChangeState() // send world state update if (field) - m_PvP->SendUpdateWorldState(field, 1); + m_PvP->SetWorldState(field, 1); // complete quest objective if (m_State == OBJECTIVESTATE_ALLIANCE || m_State == OBJECTIVESTATE_HORDE) SendObjectiveComplete(HP_CREDITMARKER[m_TowerType], ObjectGuid::Empty); } -void OPvPCapturePointHP::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - switch (m_State) - { - case OBJECTIVESTATE_ALLIANCE: - case OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE: - data.Worldstates.emplace_back(HP_MAP_N[m_TowerType], 0); - data.Worldstates.emplace_back(HP_MAP_A[m_TowerType], 1); - data.Worldstates.emplace_back(HP_MAP_H[m_TowerType], 0); - break; - case OBJECTIVESTATE_HORDE: - case OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE: - data.Worldstates.emplace_back(HP_MAP_N[m_TowerType], 0); - data.Worldstates.emplace_back(HP_MAP_A[m_TowerType], 0); - data.Worldstates.emplace_back(HP_MAP_H[m_TowerType], 1); - break; - case OBJECTIVESTATE_NEUTRAL: - case OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE: - case OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE: - default: - data.Worldstates.emplace_back(HP_MAP_N[m_TowerType], 1); - data.Worldstates.emplace_back(HP_MAP_A[m_TowerType], 0); - data.Worldstates.emplace_back(HP_MAP_H[m_TowerType], 0); - break; - } -} - void OutdoorPvPHP::HandleKillImpl(Player* player, Unit* killed) { if (killed->GetTypeId() != TYPEID_PLAYER) diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h index 1e1af007ed..237c9dbfbc 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h @@ -70,8 +70,6 @@ class OPvPCapturePointHP : public OPvPCapturePoint void ChangeState() override; - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) override; - private: OutdoorPvPHPTowerType m_TowerType; }; @@ -88,8 +86,6 @@ class OutdoorPvPHP : public OutdoorPvP bool Update(uint32 diff) override; - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) override; - void SendRemoveWorldStates(Player* player) override; void HandleKillImpl(Player* player, Unit* killed) override; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp index edbd2fe144..c9ab23de0d 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp @@ -263,9 +263,9 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team) m_WyvernStateEast = WYVERN_NEU_HORDE; m_WyvernStateWest = WYVERN_NEU_HORDE; m_PvP->TeamApplyBuff(TEAM_ALLIANCE, NA_CAPTURE_BUFF); - m_PvP->SendUpdateWorldState(NA_UI_HORDE_GUARDS_SHOW, 0); - m_PvP->SendUpdateWorldState(NA_UI_ALLIANCE_GUARDS_SHOW, 1); - m_PvP->SendUpdateWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive); + m_PvP->SetWorldState(NA_UI_HORDE_GUARDS_SHOW, 0); + m_PvP->SetWorldState(NA_UI_ALLIANCE_GUARDS_SHOW, 1); + m_PvP->SetWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive); m_PvP->SendDefenseMessage(NA_HALAA_GRAVEYARD_ZONE, TEXT_HALAA_TAKEN_ALLIANCE); } else @@ -275,9 +275,9 @@ void OPvPCapturePointNA::FactionTakeOver(uint32 team) m_WyvernStateEast = WYVERN_NEU_ALLIANCE; m_WyvernStateWest = WYVERN_NEU_ALLIANCE; m_PvP->TeamApplyBuff(TEAM_HORDE, NA_CAPTURE_BUFF); - m_PvP->SendUpdateWorldState(NA_UI_HORDE_GUARDS_SHOW, 1); - m_PvP->SendUpdateWorldState(NA_UI_ALLIANCE_GUARDS_SHOW, 0); - m_PvP->SendUpdateWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive); + m_PvP->SetWorldState(NA_UI_HORDE_GUARDS_SHOW, 1); + m_PvP->SetWorldState(NA_UI_ALLIANCE_GUARDS_SHOW, 0); + m_PvP->SetWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive); m_PvP->SendDefenseMessage(NA_HALAA_GRAVEYARD_ZONE, TEXT_HALAA_TAKEN_HORDE); } UpdateWyvernRoostWorldState(NA_ROOST_S); @@ -323,86 +323,38 @@ void OutdoorPvPNA::HandlePlayerLeaveZone(Player* player, uint32 zone) OutdoorPvP::HandlePlayerLeaveZone(player, zone); } -void OutdoorPvPNA::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - m_obj->FillInitialWorldStates(data); -} - -void OPvPCapturePointNA::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - if (m_ControllingFaction == ALLIANCE) - { - data.Worldstates.emplace_back(NA_UI_HORDE_GUARDS_SHOW, 0); - data.Worldstates.emplace_back(NA_UI_ALLIANCE_GUARDS_SHOW, 1); - } - else if (m_ControllingFaction == HORDE) - { - data.Worldstates.emplace_back(NA_UI_HORDE_GUARDS_SHOW, 1); - data.Worldstates.emplace_back(NA_UI_ALLIANCE_GUARDS_SHOW, 0); - } - else - { - data.Worldstates.emplace_back(NA_UI_HORDE_GUARDS_SHOW, 0); - data.Worldstates.emplace_back(NA_UI_ALLIANCE_GUARDS_SHOW, 0); - } - - data.Worldstates.emplace_back(NA_UI_GUARDS_MAX, NA_GUARDS_MAX); - data.Worldstates.emplace_back(NA_UI_GUARDS_LEFT, m_GuardsAlive); - - data.Worldstates.emplace_back(NA_MAP_WYVERN_NORTH_NEU_H, uint32((m_WyvernStateNorth & WYVERN_NEU_HORDE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_NORTH_NEU_A, uint32((m_WyvernStateNorth & WYVERN_NEU_ALLIANCE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_NORTH_H, uint32((m_WyvernStateNorth & WYVERN_HORDE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_NORTH_A, uint32((m_WyvernStateNorth & WYVERN_ALLIANCE) != 0)); - - data.Worldstates.emplace_back(NA_MAP_WYVERN_SOUTH_NEU_H, uint32((m_WyvernStateSouth & WYVERN_NEU_HORDE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_SOUTH_NEU_A, uint32((m_WyvernStateSouth & WYVERN_NEU_ALLIANCE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_SOUTH_H, uint32((m_WyvernStateSouth & WYVERN_HORDE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_SOUTH_A, uint32((m_WyvernStateSouth & WYVERN_ALLIANCE) != 0)); - - data.Worldstates.emplace_back(NA_MAP_WYVERN_WEST_NEU_H, uint32((m_WyvernStateWest & WYVERN_NEU_HORDE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_WEST_NEU_A, uint32((m_WyvernStateWest & WYVERN_NEU_ALLIANCE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_WEST_H, uint32((m_WyvernStateWest & WYVERN_HORDE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_WEST_A, uint32((m_WyvernStateWest & WYVERN_ALLIANCE) != 0)); - - data.Worldstates.emplace_back(NA_MAP_WYVERN_EAST_NEU_H, uint32((m_WyvernStateEast & WYVERN_NEU_HORDE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_EAST_NEU_A, uint32((m_WyvernStateEast & WYVERN_NEU_ALLIANCE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_EAST_H, uint32((m_WyvernStateEast & WYVERN_HORDE) != 0)); - data.Worldstates.emplace_back(NA_MAP_WYVERN_EAST_A, uint32((m_WyvernStateEast & WYVERN_ALLIANCE) != 0)); - - data.Worldstates.emplace_back(NA_MAP_HALAA_NEUTRAL, uint32((m_HalaaState & HALAA_N) != 0)); - data.Worldstates.emplace_back(NA_MAP_HALAA_NEU_A, uint32((m_HalaaState & HALAA_N_A) != 0)); - data.Worldstates.emplace_back(NA_MAP_HALAA_NEU_H, uint32((m_HalaaState & HALAA_N_H) != 0)); - data.Worldstates.emplace_back(NA_MAP_HALAA_HORDE, uint32((m_HalaaState & HALAA_H) != 0)); - data.Worldstates.emplace_back(NA_MAP_HALAA_ALLIANCE, uint32((m_HalaaState & HALAA_A) != 0)); -} - void OutdoorPvPNA::SendRemoveWorldStates(Player* player) { - player->SendUpdateWorldState(NA_UI_HORDE_GUARDS_SHOW, 0); - player->SendUpdateWorldState(NA_UI_ALLIANCE_GUARDS_SHOW, 0); - player->SendUpdateWorldState(NA_UI_GUARDS_MAX, 0); - player->SendUpdateWorldState(NA_UI_GUARDS_LEFT, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_H, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_A, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_H, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_A, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_NEU_H, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_NEU_A, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_H, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_A, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_WEST_NEU_H, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_WEST_NEU_A, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_WEST_H, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_WEST_A, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_EAST_NEU_H, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_EAST_NEU_A, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_EAST_H, 0); - player->SendUpdateWorldState(NA_MAP_WYVERN_EAST_A, 0); - player->SendUpdateWorldState(NA_MAP_HALAA_NEUTRAL, 0); - player->SendUpdateWorldState(NA_MAP_HALAA_NEU_A, 0); - player->SendUpdateWorldState(NA_MAP_HALAA_NEU_H, 0); - player->SendUpdateWorldState(NA_MAP_HALAA_HORDE, 0); - player->SendUpdateWorldState(NA_MAP_HALAA_ALLIANCE, 0); + WorldPackets::WorldState::InitWorldStates initWorldStates; + initWorldStates.MapID = player->GetMapId(); + initWorldStates.AreaID = player->GetZoneId(); + initWorldStates.SubareaID = player->GetAreaId(); + initWorldStates.Worldstates.emplace_back(NA_UI_HORDE_GUARDS_SHOW, 0); + initWorldStates.Worldstates.emplace_back(NA_UI_ALLIANCE_GUARDS_SHOW, 0); + initWorldStates.Worldstates.emplace_back(NA_UI_GUARDS_MAX, 0); + initWorldStates.Worldstates.emplace_back(NA_UI_GUARDS_LEFT, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_NORTH_NEU_H, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_NORTH_NEU_A, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_NORTH_H, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_NORTH_A, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_SOUTH_NEU_H, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_SOUTH_NEU_A, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_SOUTH_H, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_SOUTH_A, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_WEST_NEU_H, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_WEST_NEU_A, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_WEST_H, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_WEST_A, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_EAST_NEU_H, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_EAST_NEU_A, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_EAST_H, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_WYVERN_EAST_A, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_HALAA_NEUTRAL, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_HALAA_NEU_A, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_HALAA_NEU_H, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_HALAA_HORDE, 0); + initWorldStates.Worldstates.emplace_back(NA_MAP_HALAA_ALLIANCE, 0); + player->SendDirectMessage(initWorldStates.Write()); } bool OutdoorPvPNA::Update(uint32 diff) @@ -626,7 +578,7 @@ bool OPvPCapturePointNA::Update(uint32 diff) if (m_GuardsAlive == 0) m_capturable = true; // update the guard count for the players in zone - m_PvP->SendUpdateWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive); + m_PvP->SetWorldState(NA_UI_GUARDS_LEFT, m_GuardsAlive); } } else m_GuardCheckTimer -= diff; @@ -689,11 +641,11 @@ void OPvPCapturePointNA::ChangeState() void OPvPCapturePointNA::UpdateHalaaWorldState() { - m_PvP->SendUpdateWorldState(NA_MAP_HALAA_NEUTRAL, uint32((m_HalaaState & HALAA_N) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_HALAA_NEU_A, uint32((m_HalaaState & HALAA_N_A) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_HALAA_NEU_H, uint32((m_HalaaState & HALAA_N_H) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_HALAA_HORDE, uint32((m_HalaaState & HALAA_H) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_HALAA_ALLIANCE, uint32((m_HalaaState & HALAA_A) != 0)); + m_PvP->SetWorldState(NA_MAP_HALAA_NEUTRAL, uint32((m_HalaaState & HALAA_N) != 0)); + m_PvP->SetWorldState(NA_MAP_HALAA_NEU_A, uint32((m_HalaaState & HALAA_N_A) != 0)); + m_PvP->SetWorldState(NA_MAP_HALAA_NEU_H, uint32((m_HalaaState & HALAA_N_H) != 0)); + m_PvP->SetWorldState(NA_MAP_HALAA_HORDE, uint32((m_HalaaState & HALAA_H) != 0)); + m_PvP->SetWorldState(NA_MAP_HALAA_ALLIANCE, uint32((m_HalaaState & HALAA_A) != 0)); } void OPvPCapturePointNA::UpdateWyvernRoostWorldState(uint32 roost) @@ -701,28 +653,28 @@ void OPvPCapturePointNA::UpdateWyvernRoostWorldState(uint32 roost) switch (roost) { case NA_ROOST_S: - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_NEU_H, uint32((m_WyvernStateSouth & WYVERN_NEU_HORDE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_NEU_A, uint32((m_WyvernStateSouth & WYVERN_NEU_ALLIANCE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_H, uint32((m_WyvernStateSouth & WYVERN_HORDE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_SOUTH_A, uint32((m_WyvernStateSouth & WYVERN_ALLIANCE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_SOUTH_NEU_H, uint32((m_WyvernStateSouth & WYVERN_NEU_HORDE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_SOUTH_NEU_A, uint32((m_WyvernStateSouth & WYVERN_NEU_ALLIANCE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_SOUTH_H, uint32((m_WyvernStateSouth & WYVERN_HORDE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_SOUTH_A, uint32((m_WyvernStateSouth & WYVERN_ALLIANCE) != 0)); break; case NA_ROOST_N: - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_H, uint32((m_WyvernStateNorth & WYVERN_NEU_HORDE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_NEU_A, uint32((m_WyvernStateNorth & WYVERN_NEU_ALLIANCE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_H, uint32((m_WyvernStateNorth & WYVERN_HORDE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_NORTH_A, uint32((m_WyvernStateNorth & WYVERN_ALLIANCE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_NORTH_NEU_H, uint32((m_WyvernStateNorth & WYVERN_NEU_HORDE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_NORTH_NEU_A, uint32((m_WyvernStateNorth & WYVERN_NEU_ALLIANCE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_NORTH_H, uint32((m_WyvernStateNorth & WYVERN_HORDE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_NORTH_A, uint32((m_WyvernStateNorth & WYVERN_ALLIANCE) != 0)); break; case NA_ROOST_W: - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_NEU_H, uint32((m_WyvernStateWest & WYVERN_NEU_HORDE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_NEU_A, uint32((m_WyvernStateWest & WYVERN_NEU_ALLIANCE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_H, uint32((m_WyvernStateWest & WYVERN_HORDE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_WEST_A, uint32((m_WyvernStateWest & WYVERN_ALLIANCE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_WEST_NEU_H, uint32((m_WyvernStateWest & WYVERN_NEU_HORDE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_WEST_NEU_A, uint32((m_WyvernStateWest & WYVERN_NEU_ALLIANCE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_WEST_H, uint32((m_WyvernStateWest & WYVERN_HORDE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_WEST_A, uint32((m_WyvernStateWest & WYVERN_ALLIANCE) != 0)); break; case NA_ROOST_E: - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_NEU_H, uint32((m_WyvernStateEast & WYVERN_NEU_HORDE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_NEU_A, uint32((m_WyvernStateEast & WYVERN_NEU_ALLIANCE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_H, uint32((m_WyvernStateEast & WYVERN_HORDE) != 0)); - m_PvP->SendUpdateWorldState(NA_MAP_WYVERN_EAST_A, uint32((m_WyvernStateEast & WYVERN_ALLIANCE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_EAST_NEU_H, uint32((m_WyvernStateEast & WYVERN_NEU_HORDE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_EAST_NEU_A, uint32((m_WyvernStateEast & WYVERN_NEU_ALLIANCE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_EAST_H, uint32((m_WyvernStateEast & WYVERN_HORDE) != 0)); + m_PvP->SetWorldState(NA_MAP_WYVERN_EAST_A, uint32((m_WyvernStateEast & WYVERN_ALLIANCE) != 0)); break; } } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h index 9398b5644c..ef8d5bd089 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h @@ -167,8 +167,6 @@ class OPvPCapturePointNA : public OPvPCapturePoint void ChangeState() override; - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) override; - bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go) override; int32 HandleOpenGo(Player* player, GameObject* go) override; @@ -220,8 +218,6 @@ class OutdoorPvPNA : public OutdoorPvP bool Update(uint32 diff) override; - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) override; - void SendRemoveWorldStates(Player* player) override; void HandleKillImpl(Player* player, Unit* killed) override; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp index 74ed6cb78e..7dbecce64f 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp @@ -30,8 +30,7 @@ #include "WorldPacket.h" #include "WorldStatePackets.h" -uint32 const SI_MAX_RESOURCES = 200; - +constexpr int32 SI_MAX_RESOURCES = 200; uint32 const SI_AREATRIGGER_H = 4168; uint32 const SI_AREATRIGGER_A = 4162; @@ -46,30 +45,19 @@ uint32 const OutdoorPvPSIBuffZones[OutdoorPvPSIBuffZonesNum] = { 1377, 3428, 342 OutdoorPvPSI::OutdoorPvPSI() { m_TypeId = OUTDOOR_PVP_SI; - m_Gathered_A = 0; - m_Gathered_H = 0; m_LastController = 0; } -void OutdoorPvPSI::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - data.Worldstates.emplace_back(SI_GATHERED_A, m_Gathered_A); - data.Worldstates.emplace_back(SI_GATHERED_H, m_Gathered_H); - data.Worldstates.emplace_back(SI_SILITHYST_MAX, SI_MAX_RESOURCES); -} - void OutdoorPvPSI::SendRemoveWorldStates(Player* player) { - player->SendUpdateWorldState(SI_GATHERED_A, 0); - player->SendUpdateWorldState(SI_GATHERED_H, 0); - player->SendUpdateWorldState(SI_SILITHYST_MAX, 0); -} - -void OutdoorPvPSI::UpdateWorldState() -{ - SendUpdateWorldState(SI_GATHERED_A, m_Gathered_A); - SendUpdateWorldState(SI_GATHERED_H, m_Gathered_H); - SendUpdateWorldState(SI_SILITHYST_MAX, SI_MAX_RESOURCES); + WorldPackets::WorldState::InitWorldStates initWorldStates; + initWorldStates.MapID = player->GetMapId(); + initWorldStates.AreaID = player->GetZoneId(); + initWorldStates.SubareaID = player->GetAreaId(); + initWorldStates.Worldstates.emplace_back(SI_GATHERED_A, 0); + initWorldStates.Worldstates.emplace_back(SI_GATHERED_H, 0); + initWorldStates.Worldstates.emplace_back(SI_SILITHYST_MAX, 0); + player->SendDirectMessage(initWorldStates.Write()); } bool OutdoorPvPSI::SetupOutdoorPvP() @@ -78,6 +66,10 @@ bool OutdoorPvPSI::SetupOutdoorPvP() for (uint8 i = 0; i < OutdoorPvPSIBuffZonesNum; ++i) RegisterZone(OutdoorPvPSIBuffZones[i]); + + SetWorldState(SI_GATHERED_A, 0); + SetWorldState(SI_GATHERED_H, 0); + SetWorldState(SI_SILITHYST_MAX, SI_MAX_RESOURCES); return true; } @@ -109,17 +101,17 @@ bool OutdoorPvPSI::HandleAreaTrigger(Player* player, uint32 trigger) { // remove aura player->RemoveAurasDueToSpell(SI_SILITHYST_FLAG); - ++ m_Gathered_A; - if (m_Gathered_A >= SI_MAX_RESOURCES) + int32 newScore = GetWorldState(SI_GATHERED_A) + 1; + if (newScore >= SI_MAX_RESOURCES) { TeamApplyBuff(TEAM_ALLIANCE, SI_CENARION_FAVOR); /// @todo: confirm this text sWorld->SendZoneText(OutdoorPvPSIBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_SI_CAPTURE_A)); m_LastController = ALLIANCE; - m_Gathered_A = 0; - m_Gathered_H = 0; + newScore = 0; + SetWorldState(SI_GATHERED_H, 0); } - UpdateWorldState(); + SetWorldState(SI_GATHERED_A, newScore); // reward player player->CastSpell(player, SI_TRACES_OF_SILITHYST, true); // add 19 honor @@ -135,17 +127,17 @@ bool OutdoorPvPSI::HandleAreaTrigger(Player* player, uint32 trigger) { // remove aura player->RemoveAurasDueToSpell(SI_SILITHYST_FLAG); - ++ m_Gathered_H; - if (m_Gathered_H >= SI_MAX_RESOURCES) + int32 newScore = GetWorldState(SI_GATHERED_H) + 1; + if (newScore >= SI_MAX_RESOURCES) { TeamApplyBuff(TEAM_HORDE, SI_CENARION_FAVOR); /// @todo: confirm this text sWorld->SendZoneText(OutdoorPvPSIBuffZones[0], sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_SI_CAPTURE_H)); m_LastController = HORDE; - m_Gathered_A = 0; - m_Gathered_H = 0; + SetWorldState(SI_GATHERED_A, 0); + newScore = 0; } - UpdateWorldState(); + SetWorldState(SI_GATHERED_H, newScore); // reward player player->CastSpell(player, SI_TRACES_OF_SILITHYST, true); // add 19 honor diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h index 7f104b907e..e617ed3d8a 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h @@ -52,25 +52,13 @@ class OutdoorPvPSI : public OutdoorPvP void HandlePlayerEnterZone(Player* player, uint32 zone) override; void HandlePlayerLeaveZone(Player* player, uint32 zone) override; - bool Update(uint32 diff) override; - - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) override; - void SendRemoveWorldStates(Player* player) override; - bool HandleAreaTrigger(Player* player, uint32 trigger) override; - bool HandleDropFlag(Player* player, uint32 spellId) override; - bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go) override; - void UpdateWorldState(); - private: - uint32 m_Gathered_A; - uint32 m_Gathered_H; - uint32 m_LastController; }; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp index 62f0817850..59344be22a 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp @@ -59,18 +59,18 @@ go_type const TFCapturePoints[TF_TOWER_NUM] = struct tf_tower_world_state { - uint32 n; - uint32 h; - uint32 a; + int32 n; + int32 h; + int32 a; }; tf_tower_world_state const TFTowerWorldStates[TF_TOWER_NUM] = { - { 0xa79, 0xa7a, 0xa7b }, - { 0xa7e, 0xa7d, 0xa7c }, - { 0xa82, 0xa81, 0xa80 }, - { 0xa88, 0xa87, 0xa86 }, - { 0xa85, 0xa84, 0xa83 } + { 2681, 2682, 2683 }, + { 2686, 2685, 2684 }, + { 2690, 2689, 2688 }, + { 2696, 2695, 2694 }, + { 2693, 2692, 2691 } }; /* @@ -115,59 +115,39 @@ OPvPCapturePointTF::OPvPCapturePointTF(OutdoorPvP* pvp, OutdoorPvPTF_TowerType t SetCapturePointData(TFCapturePoints[type].entry, TFCapturePoints[type].map, TFCapturePoints[type].pos, TFCapturePoints[type].rot); } -void OPvPCapturePointTF::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - data.Worldstates.emplace_back(uint32(TFTowerWorldStates[m_TowerType].n), uint32((m_TowerState & TF_TOWERSTATE_N) != 0)); - data.Worldstates.emplace_back(uint32(TFTowerWorldStates[m_TowerType].h), uint32((m_TowerState & TF_TOWERSTATE_H) != 0)); - data.Worldstates.emplace_back(uint32(TFTowerWorldStates[m_TowerType].a), uint32((m_TowerState & TF_TOWERSTATE_A) != 0)); -} - -void OutdoorPvPTF::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - data.Worldstates.emplace_back(TF_UI_TOWER_COUNT_H, m_HordeTowersControlled); - data.Worldstates.emplace_back(TF_UI_TOWER_COUNT_A, m_AllianceTowersControlled); - data.Worldstates.emplace_back(TF_UI_TOWERS_CONTROLLED_DISPLAY, uint32(!m_IsLocked)); - - data.Worldstates.emplace_back(TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT, first_digit); - data.Worldstates.emplace_back(TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT, second_digit); - - data.Worldstates.emplace_back(TF_UI_LOCKED_DISPLAY_NEUTRAL, uint32(m_IsLocked && !m_HordeTowersControlled && !m_AllianceTowersControlled)); - data.Worldstates.emplace_back(TF_UI_LOCKED_DISPLAY_HORDE, uint32(m_IsLocked && (m_HordeTowersControlled > m_AllianceTowersControlled))); - data.Worldstates.emplace_back(TF_UI_LOCKED_DISPLAY_ALLIANCE, uint32(m_IsLocked && (m_HordeTowersControlled < m_AllianceTowersControlled))); - - for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr) - { - itr->second->FillInitialWorldStates(data); - } -} - void OutdoorPvPTF::SendRemoveWorldStates(Player* player) { - player->SendUpdateWorldState(TF_UI_TOWER_COUNT_H, uint32(0)); - player->SendUpdateWorldState(TF_UI_TOWER_COUNT_A, uint32(0)); - player->SendUpdateWorldState(TF_UI_TOWERS_CONTROLLED_DISPLAY, uint32(0)); + WorldPackets::WorldState::InitWorldStates initWorldStates; + initWorldStates.MapID = player->GetMapId(); + initWorldStates.AreaID = player->GetZoneId(); + initWorldStates.SubareaID = player->GetAreaId(); + initWorldStates.Worldstates.emplace_back(TF_UI_TOWER_COUNT_H, 0); + initWorldStates.Worldstates.emplace_back(TF_UI_TOWER_COUNT_A, 0); + initWorldStates.Worldstates.emplace_back(TF_UI_TOWERS_CONTROLLED_DISPLAY, 0); - player->SendUpdateWorldState(TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT, uint32(0)); - player->SendUpdateWorldState(TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT, uint32(0)); - player->SendUpdateWorldState(TF_UI_LOCKED_TIME_HOURS, uint32(0)); + initWorldStates.Worldstates.emplace_back(TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT, 0); + initWorldStates.Worldstates.emplace_back(TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT, 0); + initWorldStates.Worldstates.emplace_back(TF_UI_LOCKED_TIME_HOURS, 0); - player->SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_NEUTRAL, uint32(0)); - player->SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_HORDE, uint32(0)); - player->SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_ALLIANCE, uint32(0)); + initWorldStates.Worldstates.emplace_back(TF_UI_LOCKED_DISPLAY_NEUTRAL, 0); + initWorldStates.Worldstates.emplace_back(TF_UI_LOCKED_DISPLAY_HORDE, 0); + initWorldStates.Worldstates.emplace_back(TF_UI_LOCKED_DISPLAY_ALLIANCE, 0); - for (int i = 0; i < TF_TOWER_NUM; ++i) + for (tf_tower_world_state const& towerWorldStates : TFTowerWorldStates) { - player->SendUpdateWorldState(uint32(TFTowerWorldStates[i].n), uint32(0)); - player->SendUpdateWorldState(uint32(TFTowerWorldStates[i].h), uint32(0)); - player->SendUpdateWorldState(uint32(TFTowerWorldStates[i].a), uint32(0)); + initWorldStates.Worldstates.emplace_back(towerWorldStates.n, 0); + initWorldStates.Worldstates.emplace_back(towerWorldStates.h, 0); + initWorldStates.Worldstates.emplace_back(towerWorldStates.a, 0); } + + player->SendDirectMessage(initWorldStates.Write()); } void OPvPCapturePointTF::UpdateTowerState() { - m_PvP->SendUpdateWorldState(uint32(TFTowerWorldStates[m_TowerType].n), uint32((m_TowerState & TF_TOWERSTATE_N) != 0)); - m_PvP->SendUpdateWorldState(uint32(TFTowerWorldStates[m_TowerType].h), uint32((m_TowerState & TF_TOWERSTATE_H) != 0)); - m_PvP->SendUpdateWorldState(uint32(TFTowerWorldStates[m_TowerType].a), uint32((m_TowerState & TF_TOWERSTATE_A) != 0)); + m_PvP->SetWorldState(TFTowerWorldStates[m_TowerType].n, int32((m_TowerState & TF_TOWERSTATE_N) != 0)); + m_PvP->SetWorldState(TFTowerWorldStates[m_TowerType].h, int32((m_TowerState & TF_TOWERSTATE_H) != 0)); + m_PvP->SetWorldState(TFTowerWorldStates[m_TowerType].a, int32((m_TowerState & TF_TOWERSTATE_A) != 0)); } bool OutdoorPvPTF::Update(uint32 diff) @@ -180,27 +160,27 @@ bool OutdoorPvPTF::Update(uint32 diff) { TeamApplyBuff(TEAM_ALLIANCE, TF_CAPTURE_BUFF); m_IsLocked = true; - SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_NEUTRAL, uint32(0)); - SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_HORDE, uint32(0)); - SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_ALLIANCE, uint32(1)); - SendUpdateWorldState(TF_UI_TOWERS_CONTROLLED_DISPLAY, uint32(0)); + SetWorldState(TF_UI_LOCKED_DISPLAY_NEUTRAL, 0); + SetWorldState(TF_UI_LOCKED_DISPLAY_HORDE, 0); + SetWorldState(TF_UI_LOCKED_DISPLAY_ALLIANCE, 1); + SetWorldState(TF_UI_TOWERS_CONTROLLED_DISPLAY, 0); } else if (m_HordeTowersControlled == TF_TOWER_NUM) { TeamApplyBuff(TEAM_HORDE, TF_CAPTURE_BUFF); m_IsLocked = true; - SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_NEUTRAL, uint32(0)); - SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_HORDE, uint32(1)); - SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_ALLIANCE, uint32(0)); - SendUpdateWorldState(TF_UI_TOWERS_CONTROLLED_DISPLAY, uint32(0)); + SetWorldState(TF_UI_LOCKED_DISPLAY_NEUTRAL, 0); + SetWorldState(TF_UI_LOCKED_DISPLAY_HORDE, 1); + SetWorldState(TF_UI_LOCKED_DISPLAY_ALLIANCE, 0); + SetWorldState(TF_UI_TOWERS_CONTROLLED_DISPLAY, 0); } else { TeamCastSpell(TEAM_ALLIANCE, -TF_CAPTURE_BUFF); TeamCastSpell(TEAM_HORDE, -TF_CAPTURE_BUFF); } - SendUpdateWorldState(TF_UI_TOWER_COUNT_A, m_AllianceTowersControlled); - SendUpdateWorldState(TF_UI_TOWER_COUNT_H, m_HordeTowersControlled); + SetWorldState(TF_UI_TOWER_COUNT_A, m_AllianceTowersControlled); + SetWorldState(TF_UI_TOWER_COUNT_H, m_HordeTowersControlled); } if (m_IsLocked) { @@ -210,10 +190,10 @@ bool OutdoorPvPTF::Update(uint32 diff) m_LockTimer = TF_LOCK_TIME; m_LockTimerUpdate = 0; m_IsLocked = false; - SendUpdateWorldState(TF_UI_TOWERS_CONTROLLED_DISPLAY, uint32(1)); - SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_NEUTRAL, uint32(0)); - SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_HORDE, uint32(0)); - SendUpdateWorldState(TF_UI_LOCKED_DISPLAY_ALLIANCE, uint32(0)); + SetWorldState(TF_UI_TOWERS_CONTROLLED_DISPLAY, 1); + SetWorldState(TF_UI_LOCKED_DISPLAY_NEUTRAL, 0); + SetWorldState(TF_UI_LOCKED_DISPLAY_HORDE, 0); + SetWorldState(TF_UI_LOCKED_DISPLAY_ALLIANCE, 0); } else { @@ -227,9 +207,9 @@ bool OutdoorPvPTF::Update(uint32 diff) second_digit = minutes_left % 10; first_digit = minutes_left / 10; - SendUpdateWorldState(TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT, first_digit); - SendUpdateWorldState(TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT, second_digit); - SendUpdateWorldState(TF_UI_LOCKED_TIME_HOURS, hours_left); + SetWorldState(TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT, first_digit); + SetWorldState(TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT, second_digit); + SetWorldState(TF_UI_LOCKED_TIME_HOURS, hours_left); } else m_LockTimerUpdate -= diff; m_LockTimer -= diff; } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h index 98d7e58b86..f23f1337fd 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h @@ -50,16 +50,16 @@ enum OutdoorPvPTF_TowerType enum TFWorldStates { - TF_UI_TOWER_COUNT_H = 0xa3e, - TF_UI_TOWER_COUNT_A = 0xa3d, - TF_UI_TOWERS_CONTROLLED_DISPLAY = 0xa3c, + TF_UI_TOWER_COUNT_H = 2622, + TF_UI_TOWER_COUNT_A = 2621, + TF_UI_TOWERS_CONTROLLED_DISPLAY = 2620, - TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT = 0x9d0, - TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT = 0x9ce, - TF_UI_LOCKED_TIME_HOURS = 0x9cd, - TF_UI_LOCKED_DISPLAY_NEUTRAL = 0x9cc, - TF_UI_LOCKED_DISPLAY_HORDE = 0xad0, - TF_UI_LOCKED_DISPLAY_ALLIANCE = 0xacf + TF_UI_LOCKED_TIME_MINUTES_FIRST_DIGIT = 2512, + TF_UI_LOCKED_TIME_MINUTES_SECOND_DIGIT = 2510, + TF_UI_LOCKED_TIME_HOURS = 2509, + TF_UI_LOCKED_DISPLAY_NEUTRAL = 2508, + TF_UI_LOCKED_DISPLAY_HORDE = 2768, + TF_UI_LOCKED_DISPLAY_ALLIANCE = 2767 }; enum TFTowerStates @@ -78,8 +78,6 @@ class OPvPCapturePointTF : public OPvPCapturePoint void ChangeState() override; - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) override; - void UpdateTowerState(); protected: @@ -100,8 +98,6 @@ class OutdoorPvPTF : public OutdoorPvP bool Update(uint32 diff) override; - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) override; - void SendRemoveWorldStates(Player* player) override; uint32 GetAllianceTowersControlled() const; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp index 358344a1d7..fbf5db9c99 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp @@ -52,20 +52,20 @@ creature_type const ZM_AllianceFieldScout = { 18581, 530, { 374.395f, 6230.08f, struct zm_beacon { - uint32 ui_tower_n; - uint32 ui_tower_h; - uint32 ui_tower_a; - uint32 map_tower_n; - uint32 map_tower_h; - uint32 map_tower_a; + int32 ui_tower_n; + int32 ui_tower_h; + int32 ui_tower_a; + int32 map_tower_n; + int32 map_tower_h; + int32 map_tower_a; uint32 event_enter; uint32 event_leave; }; zm_beacon const ZMBeaconInfo[ZM_NUM_BEACONS] = { - { 2560, 2559, 2558, 2652, 2651, 2650, 11807, 11806 }, - { 2557, 2556, 2555, 2646, 2645, 2644, 11805, 11804 } + { ZM_UI_TOWER_EAST_N, ZM_UI_TOWER_EAST_H, ZM_UI_TOWER_EAST_A, ZM_MAP_TOWER_EAST_N, ZM_MAP_TOWER_EAST_H, ZM_MAP_TOWER_EAST_A, 11807, 11806 }, + { ZM_UI_TOWER_WEST_N, ZM_UI_TOWER_WEST_H, ZM_UI_TOWER_WEST_A, ZM_MAP_TOWER_WEST_N, ZM_MAP_TOWER_WEST_H, ZM_MAP_TOWER_WEST_A, 11805, 11804 } }; uint32 const ZMBeaconCaptureA[ZM_NUM_BEACONS] = @@ -92,24 +92,14 @@ OPvPCapturePointZM_Beacon::OPvPCapturePointZM_Beacon(OutdoorPvP* pvp, ZM_BeaconT SetCapturePointData(ZMCapturePoints[type].entry, ZMCapturePoints[type].map, ZMCapturePoints[type].pos, ZMCapturePoints[type].rot); } -void OPvPCapturePointZM_Beacon::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - data.Worldstates.emplace_back(uint32(ZMBeaconInfo[m_TowerType].ui_tower_n), ((m_TowerState & ZM_TOWERSTATE_N) != 0)); - data.Worldstates.emplace_back(uint32(ZMBeaconInfo[m_TowerType].map_tower_n), ((m_TowerState & ZM_TOWERSTATE_N) != 0)); - data.Worldstates.emplace_back(uint32(ZMBeaconInfo[m_TowerType].ui_tower_a), ((m_TowerState & ZM_TOWERSTATE_A) != 0)); - data.Worldstates.emplace_back(uint32(ZMBeaconInfo[m_TowerType].map_tower_a), ((m_TowerState & ZM_TOWERSTATE_A) != 0)); - data.Worldstates.emplace_back(uint32(ZMBeaconInfo[m_TowerType].ui_tower_h), ((m_TowerState & ZM_TOWERSTATE_H) != 0)); - data.Worldstates.emplace_back(uint32(ZMBeaconInfo[m_TowerType].map_tower_h), ((m_TowerState & ZM_TOWERSTATE_H) != 0)); -} - void OPvPCapturePointZM_Beacon::UpdateTowerState() { - m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].ui_tower_n), uint32((m_TowerState & ZM_TOWERSTATE_N) != 0)); - m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].map_tower_n), uint32((m_TowerState & ZM_TOWERSTATE_N) != 0)); - m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].ui_tower_a), uint32((m_TowerState & ZM_TOWERSTATE_A) != 0)); - m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].map_tower_a), uint32((m_TowerState & ZM_TOWERSTATE_A) != 0)); - m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].ui_tower_h), uint32((m_TowerState & ZM_TOWERSTATE_H) != 0)); - m_PvP->SendUpdateWorldState(uint32(ZMBeaconInfo[m_TowerType].map_tower_h), uint32((m_TowerState & ZM_TOWERSTATE_H) != 0)); + m_PvP->SetWorldState(ZMBeaconInfo[m_TowerType].ui_tower_n, int32((m_TowerState & ZM_TOWERSTATE_N) != 0)); + m_PvP->SetWorldState(ZMBeaconInfo[m_TowerType].map_tower_n, int32((m_TowerState & ZM_TOWERSTATE_N) != 0)); + m_PvP->SetWorldState(ZMBeaconInfo[m_TowerType].ui_tower_a, int32((m_TowerState & ZM_TOWERSTATE_A) != 0)); + m_PvP->SetWorldState(ZMBeaconInfo[m_TowerType].map_tower_a, int32((m_TowerState & ZM_TOWERSTATE_A) != 0)); + m_PvP->SetWorldState(ZMBeaconInfo[m_TowerType].ui_tower_h, int32((m_TowerState & ZM_TOWERSTATE_H) != 0)); + m_PvP->SetWorldState(ZMBeaconInfo[m_TowerType].map_tower_h, int32((m_TowerState & ZM_TOWERSTATE_H) != 0)); } void OPvPCapturePointZM_Beacon::ChangeState() @@ -291,26 +281,14 @@ OPvPCapturePointZM_Graveyard::OPvPCapturePointZM_Graveyard(OutdoorPvP* pvp) void OPvPCapturePointZM_Graveyard::UpdateTowerState() { - m_PvP->SendUpdateWorldState(ZM_MAP_GRAVEYARD_N, uint32((m_GraveyardState & ZM_GRAVEYARD_N) != 0)); - m_PvP->SendUpdateWorldState(ZM_MAP_GRAVEYARD_H, uint32((m_GraveyardState & ZM_GRAVEYARD_H) != 0)); - m_PvP->SendUpdateWorldState(ZM_MAP_GRAVEYARD_A, uint32((m_GraveyardState & ZM_GRAVEYARD_A) != 0)); + m_PvP->SetWorldState(ZM_MAP_GRAVEYARD_N, int32((m_GraveyardState & ZM_GRAVEYARD_N) != 0)); + m_PvP->SetWorldState(ZM_MAP_GRAVEYARD_H, int32((m_GraveyardState & ZM_GRAVEYARD_H) != 0)); + m_PvP->SetWorldState(ZM_MAP_GRAVEYARD_A, int32((m_GraveyardState & ZM_GRAVEYARD_A) != 0)); - m_PvP->SendUpdateWorldState(ZM_MAP_ALLIANCE_FLAG_READY, uint32(m_BothControllingFaction == ALLIANCE)); - m_PvP->SendUpdateWorldState(ZM_MAP_ALLIANCE_FLAG_NOT_READY, uint32(m_BothControllingFaction != ALLIANCE)); - m_PvP->SendUpdateWorldState(ZM_MAP_HORDE_FLAG_READY, uint32(m_BothControllingFaction == HORDE)); - m_PvP->SendUpdateWorldState(ZM_MAP_HORDE_FLAG_NOT_READY, uint32(m_BothControllingFaction != HORDE)); -} - -void OPvPCapturePointZM_Graveyard::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - data.Worldstates.emplace_back(ZM_MAP_GRAVEYARD_N, uint32((m_GraveyardState & ZM_GRAVEYARD_N) != 0)); - data.Worldstates.emplace_back(ZM_MAP_GRAVEYARD_H, uint32((m_GraveyardState & ZM_GRAVEYARD_H) != 0)); - data.Worldstates.emplace_back(ZM_MAP_GRAVEYARD_A, uint32((m_GraveyardState & ZM_GRAVEYARD_A) != 0)); - - data.Worldstates.emplace_back(ZM_MAP_ALLIANCE_FLAG_READY, uint32(m_BothControllingFaction == ALLIANCE)); - data.Worldstates.emplace_back(ZM_MAP_ALLIANCE_FLAG_NOT_READY, uint32(m_BothControllingFaction != ALLIANCE)); - data.Worldstates.emplace_back(ZM_MAP_HORDE_FLAG_READY, uint32(m_BothControllingFaction == HORDE)); - data.Worldstates.emplace_back(ZM_MAP_HORDE_FLAG_NOT_READY, uint32(m_BothControllingFaction != HORDE)); + m_PvP->SetWorldState(ZM_MAP_ALLIANCE_FLAG_READY, int32(m_BothControllingFaction == ALLIANCE)); + m_PvP->SetWorldState(ZM_MAP_ALLIANCE_FLAG_NOT_READY, int32(m_BothControllingFaction != ALLIANCE)); + m_PvP->SetWorldState(ZM_MAP_HORDE_FLAG_READY, int32(m_BothControllingFaction == HORDE)); + m_PvP->SetWorldState(ZM_MAP_HORDE_FLAG_NOT_READY, int32(m_BothControllingFaction != HORDE)); } void OPvPCapturePointZM_Graveyard::SetBeaconState(uint32 controlling_faction) @@ -436,36 +414,32 @@ void OutdoorPvPZM::SetHordeTowersControlled(uint32 count) m_HordeTowersControlled = count; } -void OutdoorPvPZM::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - data.Worldstates.emplace_back(ZM_WORLDSTATE_UNK_1, uint32(1)); - - for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr) - itr->second->FillInitialWorldStates(data); -} - void OutdoorPvPZM::SendRemoveWorldStates(Player* player) { - player->SendUpdateWorldState(ZM_WORLDSTATE_UNK_1, 1); - player->SendUpdateWorldState(ZM_UI_TOWER_EAST_N, 0); - player->SendUpdateWorldState(ZM_UI_TOWER_EAST_H, 0); - player->SendUpdateWorldState(ZM_UI_TOWER_EAST_A, 0); - player->SendUpdateWorldState(ZM_UI_TOWER_WEST_N, 0); - player->SendUpdateWorldState(ZM_UI_TOWER_WEST_H, 0); - player->SendUpdateWorldState(ZM_UI_TOWER_WEST_A, 0); - player->SendUpdateWorldState(ZM_MAP_TOWER_EAST_N, 0); - player->SendUpdateWorldState(ZM_MAP_TOWER_EAST_H, 0); - player->SendUpdateWorldState(ZM_MAP_TOWER_EAST_A, 0); - player->SendUpdateWorldState(ZM_MAP_GRAVEYARD_H, 0); - player->SendUpdateWorldState(ZM_MAP_GRAVEYARD_A, 0); - player->SendUpdateWorldState(ZM_MAP_GRAVEYARD_N, 0); - player->SendUpdateWorldState(ZM_MAP_TOWER_WEST_N, 0); - player->SendUpdateWorldState(ZM_MAP_TOWER_WEST_H, 0); - player->SendUpdateWorldState(ZM_MAP_TOWER_WEST_A, 0); - player->SendUpdateWorldState(ZM_MAP_HORDE_FLAG_READY, 0); - player->SendUpdateWorldState(ZM_MAP_HORDE_FLAG_NOT_READY, 0); - player->SendUpdateWorldState(ZM_MAP_ALLIANCE_FLAG_NOT_READY, 0); - player->SendUpdateWorldState(ZM_MAP_ALLIANCE_FLAG_READY, 0); + WorldPackets::WorldState::InitWorldStates initWorldStates; + initWorldStates.MapID = player->GetMapId(); + initWorldStates.AreaID = player->GetZoneId(); + initWorldStates.SubareaID = player->GetAreaId(); + initWorldStates.Worldstates.emplace_back(ZM_UI_TOWER_EAST_N, 0); + initWorldStates.Worldstates.emplace_back(ZM_UI_TOWER_EAST_H, 0); + initWorldStates.Worldstates.emplace_back(ZM_UI_TOWER_EAST_A, 0); + initWorldStates.Worldstates.emplace_back(ZM_UI_TOWER_WEST_N, 0); + initWorldStates.Worldstates.emplace_back(ZM_UI_TOWER_WEST_H, 0); + initWorldStates.Worldstates.emplace_back(ZM_UI_TOWER_WEST_A, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_TOWER_EAST_N, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_TOWER_EAST_H, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_TOWER_EAST_A, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_GRAVEYARD_H, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_GRAVEYARD_A, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_GRAVEYARD_N, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_TOWER_WEST_N, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_TOWER_WEST_H, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_TOWER_WEST_A, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_HORDE_FLAG_READY, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_HORDE_FLAG_NOT_READY, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_ALLIANCE_FLAG_NOT_READY, 0); + initWorldStates.Worldstates.emplace_back(ZM_MAP_ALLIANCE_FLAG_READY, 0); + player->SendDirectMessage(initWorldStates.Write()); } class OutdoorPvP_zangarmarsh : public OutdoorPvPScript diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h index 4d3a1bdb44..978ca7bd77 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h @@ -72,8 +72,6 @@ enum ZM_BeaconType enum OutdoorPvPZMWorldStates { - ZM_WORLDSTATE_UNK_1 = 2653, - ZM_UI_TOWER_EAST_N = 2560, ZM_UI_TOWER_EAST_H = 2559, ZM_UI_TOWER_EAST_A = 2558, @@ -113,8 +111,6 @@ class OPvPCapturePointZM_Beacon : public OPvPCapturePoint void ChangeState() override; - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) override; - void UpdateTowerState(); protected: @@ -135,23 +131,13 @@ class OPvPCapturePointZM_Graveyard : public OPvPCapturePoint OPvPCapturePointZM_Graveyard(OutdoorPvP* pvp); bool Update(uint32 diff) override; - void ChangeState() override { } - - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) override; - void UpdateTowerState(); - int32 HandleOpenGo(Player* player, GameObject* go) override; - void SetBeaconState(uint32 controlling_team); // not good atm - bool HandleGossipOption(Player* player, Creature* creature, uint32 gossipid) override; - bool HandleDropFlag(Player* player, uint32 spellId) override; - bool CanTalkTo(Player* player, Creature* creature, GossipMenuItems const& gso) override; - uint32 GetGraveyardState() const; private: @@ -172,18 +158,11 @@ class OutdoorPvPZM : public OutdoorPvP void HandlePlayerEnterZone(Player* player, uint32 zone) override; void HandlePlayerLeaveZone(Player* player, uint32 zone) override; - bool Update(uint32 diff) override; - - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) override; - void SendRemoveWorldStates(Player* player) override; - void HandleKillImpl(Player* player, Unit* killed) override; - uint32 GetAllianceTowersControlled() const; void SetAllianceTowersControlled(uint32 count); - uint32 GetHordeTowersControlled() const; void SetHordeTowersControlled(uint32 count);