Core/WorldStates: Migrate OutdoorPvP worldstates to new system

This commit is contained in:
Shauren authored and Ovahlord committed 2022-12-21 21:55:27 +01:00
1 parent c63312cc06
commit e748845e78
14 files changed
+320 -578

No files matched your search

@@ -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)');
-175
View File
@@ -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 <field> <value>
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();
}
+9 -7
View File
@@ -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)
+2 -15
View File
@@ -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<ObjectGuid::LowType, GameObject*> GoScriptPair;
typedef std::pair<ObjectGuid::LowType, Creature*> 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*/) { }
+20 -52
View File
@@ -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)
@@ -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;
+58 -106
View File
@@ -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;
}
}
@@ -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;
+23 -31
View File
@@ -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
@@ -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;
};
+47 -67
View File
@@ -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;
}
+9 -13
View File
@@ -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;
+45 -71
View File
@@ -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
@@ -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);