diff --git a/src/game/BattleGround.h b/src/game/BattleGround.h index 3d5419a9e..32554e417 100644 --- a/src/game/BattleGround.h +++ b/src/game/BattleGround.h @@ -22,6 +22,7 @@ #include "Common.h" #include "SharedDefines.h" #include "Map.h" +#include "ByteBuffer.h" // magic event-numbers #define BG_EVENT_NONE 255 @@ -407,7 +408,7 @@ class BattleGround /* Packet Transfer */ // method that should fill worldpacket with actual world states (not yet implemented for all battlegrounds!) - virtual void FillInitialWorldStates(WorldPacket& /*data*/) {} + virtual void FillInitialWorldStates(WorldPacket& /*data*/, uint32& /*count*/) {} void SendPacketToTeam(uint32 TeamID, WorldPacket *packet, Player *sender = NULL, bool self = true); void SendPacketToAll(WorldPacket *packet); @@ -624,4 +625,43 @@ class BattleGround float m_TeamStartLocZ[BG_TEAMS_COUNT]; float m_TeamStartLocO[BG_TEAMS_COUNT]; }; + +// helper functions for world state list fill +inline void FillInitialWorldState(ByteBuffer& data, uint32& count, uint32 state, uint32 value) +{ + data << uint32(state); + data << uint32(value); + ++count; +} + +inline void FillInitialWorldState(ByteBuffer& data, uint32& count, uint32 state, int32 value) +{ + data << uint32(state); + data << int32(value); + ++count; +} + +inline void FillInitialWorldState(ByteBuffer& data, uint32& count, uint32 state, bool value) +{ + data << uint32(state); + data << uint32(value?1:0); + ++count; +} + +struct WorldStatePair +{ + uint32 state; + uint32 value; +}; + +inline void FillInitialWorldState(ByteBuffer& data, uint32& count, WorldStatePair const* array) +{ + for(WorldStatePair const* itr = array; itr->state; ++itr) + { + data << uint32(itr->state); + data << uint32(itr->value); + ++count; + } +} + #endif diff --git a/src/game/BattleGroundAB.cpp b/src/game/BattleGroundAB.cpp index 7f19148ef..58934ec7e 100644 --- a/src/game/BattleGroundAB.cpp +++ b/src/game/BattleGroundAB.cpp @@ -257,18 +257,18 @@ int32 BattleGroundAB::_GetNodeNameId(uint8 node) return 0; } -void BattleGroundAB::FillInitialWorldStates(WorldPacket& data) +void BattleGroundAB::FillInitialWorldStates(WorldPacket& data, uint32& count) { const uint8 plusArray[] = {0, 2, 3, 0, 1}; // Node icons for (uint8 node = 0; node < BG_AB_NODES_MAX; ++node) - data << uint32(BG_AB_OP_NODEICONS[node]) << uint32((m_Nodes[node]==0)?1:0); + FillInitialWorldState(data, count, BG_AB_OP_NODEICONS[node], m_Nodes[node]==0); // Node occupied states for (uint8 node = 0; node < BG_AB_NODES_MAX; ++node) for (uint8 i = 1; i < BG_AB_NODES_MAX; ++i) - data << uint32(BG_AB_OP_NODESTATES[node] + plusArray[i]) << uint32((m_Nodes[node]==i)?1:0); + FillInitialWorldState(data, count, BG_AB_OP_NODESTATES[node] + plusArray[i], m_Nodes[node]==i); // How many bases each team owns uint8 ally = 0, horde = 0; @@ -278,17 +278,17 @@ void BattleGroundAB::FillInitialWorldStates(WorldPacket& data) else if (m_Nodes[node] == BG_AB_NODE_STATUS_HORDE_OCCUPIED) ++horde; - data << uint32(BG_AB_OP_OCCUPIED_BASES_ALLY) << uint32(ally); - data << uint32(BG_AB_OP_OCCUPIED_BASES_HORDE) << uint32(horde); + FillInitialWorldState(data, count, BG_AB_OP_OCCUPIED_BASES_ALLY, ally); + FillInitialWorldState(data, count, BG_AB_OP_OCCUPIED_BASES_HORDE, horde); // Team scores - data << uint32(BG_AB_OP_RESOURCES_MAX) << uint32(BG_AB_MAX_TEAM_SCORE); - data << uint32(BG_AB_OP_RESOURCES_WARNING) << uint32(BG_AB_WARNING_NEAR_VICTORY_SCORE); - data << uint32(BG_AB_OP_RESOURCES_ALLY) << uint32(m_TeamScores[BG_TEAM_ALLIANCE]); - data << uint32(BG_AB_OP_RESOURCES_HORDE) << uint32(m_TeamScores[BG_TEAM_HORDE]); + FillInitialWorldState(data, count, BG_AB_OP_RESOURCES_MAX, BG_AB_MAX_TEAM_SCORE); + FillInitialWorldState(data, count, BG_AB_OP_RESOURCES_WARNING, BG_AB_WARNING_NEAR_VICTORY_SCORE); + FillInitialWorldState(data, count, BG_AB_OP_RESOURCES_ALLY, m_TeamScores[BG_TEAM_ALLIANCE]); + FillInitialWorldState(data, count, BG_AB_OP_RESOURCES_HORDE, m_TeamScores[BG_TEAM_HORDE]); // other unknown - data << uint32(0x745) << uint32(0x2); // 37 1861 unk + FillInitialWorldState(data, count, 0x745, 0x2); // 37 1861 unk } void BattleGroundAB::_SendNodeUpdate(uint8 node) diff --git a/src/game/BattleGroundAB.h b/src/game/BattleGroundAB.h index d41526c68..63b1f7ec3 100644 --- a/src/game/BattleGroundAB.h +++ b/src/game/BattleGroundAB.h @@ -193,7 +193,7 @@ class BattleGroundAB : public BattleGround /* Scorekeeping */ virtual void UpdatePlayerScore(Player *Source, uint32 type, uint32 value); - virtual void FillInitialWorldStates(WorldPacket& data); + virtual void FillInitialWorldStates(WorldPacket& data, uint32& count); /* Nodes occupying */ virtual void EventPlayerClickedOnFlag(Player *source, GameObject* target_obj); diff --git a/src/game/BattleGroundAV.cpp b/src/game/BattleGroundAV.cpp index 8f45038f6..166ae8111 100644 --- a/src/game/BattleGroundAV.cpp +++ b/src/game/BattleGroundAV.cpp @@ -608,7 +608,7 @@ void BattleGroundAV::EventPlayerAssaultsPoint(Player* player, BG_AV_Nodes node) PlaySoundToAll((team == BG_TEAM_ALLIANCE) ? BG_AV_SOUND_ALLIANCE_ASSAULTS : BG_AV_SOUND_HORDE_ASSAULTS); } -void BattleGroundAV::FillInitialWorldStates(WorldPacket& data) +void BattleGroundAV::FillInitialWorldStates(WorldPacket& data, uint32& count) { bool stateok; for (uint32 i = BG_AV_NODES_FIRSTAID_STATION; i < BG_AV_NODES_MAX; ++i) @@ -616,28 +616,36 @@ void BattleGroundAV::FillInitialWorldStates(WorldPacket& data) for (uint8 j = 0; j < BG_AV_MAX_STATES; j++) { stateok = (m_Nodes[i].State == j); - data << uint32(BG_AV_NodeWorldStates[i][GetWorldStateType(j, BG_TEAM_ALLIANCE)]) << uint32((m_Nodes[i].Owner == BG_TEAM_ALLIANCE && stateok) ? 1 : 0); - data << uint32(BG_AV_NodeWorldStates[i][GetWorldStateType(j, BG_TEAM_HORDE)]) << uint32((m_Nodes[i].Owner == BG_TEAM_HORDE && stateok) ? 1 : 0); + FillInitialWorldState(data, count, BG_AV_NodeWorldStates[i][GetWorldStateType(j, BG_TEAM_ALLIANCE)], + m_Nodes[i].Owner == BG_TEAM_ALLIANCE && stateok); + FillInitialWorldState(data, count, BG_AV_NodeWorldStates[i][GetWorldStateType(j, BG_TEAM_HORDE)], + m_Nodes[i].Owner == BG_TEAM_HORDE && stateok); } } if( m_Nodes[BG_AV_NODES_SNOWFALL_GRAVE].Owner == BG_AV_NEUTRAL_TEAM ) // cause neutral teams aren't handled generic - data << uint32(AV_SNOWFALL_N) << uint32(1); + FillInitialWorldState(data, count, AV_SNOWFALL_N, 1); - data << uint32(BG_AV_Alliance_Score) << uint32(m_TeamScores[BG_TEAM_ALLIANCE]); - data << uint32(BG_AV_Horde_Score) << uint32(m_TeamScores[BG_TEAM_HORDE]); + FillInitialWorldState(data, count, BG_AV_Alliance_Score, m_TeamScores[BG_TEAM_ALLIANCE]); + FillInitialWorldState(data, count, BG_AV_Horde_Score, m_TeamScores[BG_TEAM_HORDE]); if( GetStatus() == STATUS_IN_PROGRESS ) // only if game is running the teamscores are displayed { - data << uint32(BG_AV_SHOW_A_SCORE) << uint32(1); - data << uint32(BG_AV_SHOW_H_SCORE) << uint32(1); + FillInitialWorldState(data, count, BG_AV_SHOW_A_SCORE, 1); + FillInitialWorldState(data, count, BG_AV_SHOW_H_SCORE, 1); } else { - data << uint32(BG_AV_SHOW_A_SCORE) << uint32(0); - data << uint32(BG_AV_SHOW_H_SCORE) << uint32(0); + FillInitialWorldState(data, count, BG_AV_SHOW_A_SCORE, 0); + FillInitialWorldState(data, count, BG_AV_SHOW_H_SCORE, 0); } - SendMineWorldStates(BG_AV_NORTH_MINE); - SendMineWorldStates(BG_AV_SOUTH_MINE); + + FillInitialWorldState(data, count, BG_AV_MineWorldStates[BG_AV_NORTH_MINE][m_Mine_Owner[BG_AV_NORTH_MINE]], 1); + if (m_Mine_Owner[BG_AV_NORTH_MINE] != m_Mine_PrevOwner[BG_AV_NORTH_MINE]) + FillInitialWorldState(data, count, BG_AV_MineWorldStates[BG_AV_NORTH_MINE][m_Mine_PrevOwner[BG_AV_NORTH_MINE]], 0); + + FillInitialWorldState(data, count, BG_AV_MineWorldStates[BG_AV_SOUTH_MINE][m_Mine_Owner[BG_AV_SOUTH_MINE]], 1); + if (m_Mine_Owner[BG_AV_SOUTH_MINE] != m_Mine_PrevOwner[BG_AV_SOUTH_MINE]) + FillInitialWorldState(data, count, BG_AV_MineWorldStates[BG_AV_SOUTH_MINE][m_Mine_PrevOwner[BG_AV_SOUTH_MINE]], 0); } void BattleGroundAV::UpdateNodeWorldState(BG_AV_Nodes node) diff --git a/src/game/BattleGroundAV.h b/src/game/BattleGroundAV.h index 7d55bec1a..863062d38 100644 --- a/src/game/BattleGroundAV.h +++ b/src/game/BattleGroundAV.h @@ -312,7 +312,7 @@ class BattleGroundAV : public BattleGround virtual void StartingEventCloseDoors(); virtual void StartingEventOpenDoors(); // world states - virtual void FillInitialWorldStates(WorldPacket& data); + virtual void FillInitialWorldStates(WorldPacket& data, uint32& count); void RemovePlayer(Player *plr,uint64 guid); void HandleAreaTrigger(Player *Source, uint32 Trigger); diff --git a/src/game/BattleGroundBE.cpp b/src/game/BattleGroundBE.cpp index 20538aac8..435109960 100644 --- a/src/game/BattleGroundBE.cpp +++ b/src/game/BattleGroundBE.cpp @@ -135,11 +135,11 @@ void BattleGroundBE::HandleAreaTrigger(Player *Source, uint32 Trigger) // HandleTriggerBuff(buff_guid,Source); } -void BattleGroundBE::FillInitialWorldStates(WorldPacket &data) +void BattleGroundBE::FillInitialWorldStates(WorldPacket &data, uint32& count) { - data << uint32(0x9f1) << uint32(GetAlivePlayersCountByTeam(ALLIANCE)); // 7 - data << uint32(0x9f0) << uint32(GetAlivePlayersCountByTeam(HORDE)); // 8 - data << uint32(0x9f3) << uint32(1); // 9 + FillInitialWorldState(data, count, 0x9f1, GetAlivePlayersCountByTeam(ALLIANCE)); + FillInitialWorldState(data, count, 0x9f0, GetAlivePlayersCountByTeam(HORDE)); + FillInitialWorldState(data, count, 0x9f3, 1); } void BattleGroundBE::Reset() diff --git a/src/game/BattleGroundBE.h b/src/game/BattleGroundBE.h index d58870062..8b2cc33df 100644 --- a/src/game/BattleGroundBE.h +++ b/src/game/BattleGroundBE.h @@ -45,7 +45,7 @@ class BattleGroundBE : public BattleGround void HandleAreaTrigger(Player *Source, uint32 Trigger); bool SetupBattleGround(); virtual void Reset(); - virtual void FillInitialWorldStates(WorldPacket &d); + virtual void FillInitialWorldStates(WorldPacket &d, uint32& count); void HandleKillPlayer(Player* player, Player *killer); bool HandlePlayerUnderMap(Player * plr); diff --git a/src/game/BattleGroundEY.cpp b/src/game/BattleGroundEY.cpp index 3651d3f53..2bbbec34c 100644 --- a/src/game/BattleGroundEY.cpp +++ b/src/game/BattleGroundEY.cpp @@ -660,54 +660,41 @@ void BattleGroundEY::UpdatePlayerScore(Player *Source, uint32 type, uint32 value } } -void BattleGroundEY::FillInitialWorldStates(WorldPacket& data) +void BattleGroundEY::FillInitialWorldStates(WorldPacket& data, uint32& count) { - data << uint32(EY_HORDE_BASE) << uint32(m_TeamPointsCount[BG_TEAM_HORDE]); - data << uint32(EY_ALLIANCE_BASE) << uint32(m_TeamPointsCount[BG_TEAM_ALLIANCE]); - data << uint32(0xab6) << uint32(0x0); - data << uint32(0xab5) << uint32(0x0); - data << uint32(0xab4) << uint32(0x0); - data << uint32(0xab3) << uint32(0x0); - data << uint32(0xab2) << uint32(0x0); - data << uint32(0xab1) << uint32(0x0); - data << uint32(0xab0) << uint32(0x0); - data << uint32(0xaaf) << uint32(0x0); + FillInitialWorldState(data, count, EY_HORDE_BASE, m_TeamPointsCount[BG_TEAM_HORDE]); + FillInitialWorldState(data, count, EY_ALLIANCE_BASE, m_TeamPointsCount[BG_TEAM_ALLIANCE]); + FillInitialWorldState(data, count, 0xab6, 0x0); + FillInitialWorldState(data, count, 0xab5, 0x0); + FillInitialWorldState(data, count, 0xab4, 0x0); + FillInitialWorldState(data, count, 0xab3, 0x0); + FillInitialWorldState(data, count, 0xab2, 0x0); + FillInitialWorldState(data, count, 0xab1, 0x0); + FillInitialWorldState(data, count, 0xab0, 0x0); + FillInitialWorldState(data, count, 0xaaf, 0x0); - data << uint32(DRAENEI_RUINS_HORDE_CONTROL) << uint32(m_PointOwnedByTeam[DRAENEI_RUINS] == HORDE && m_PointState[DRAENEI_RUINS] == EY_POINT_UNDER_CONTROL); - - data << uint32(DRAENEI_RUINS_ALLIANCE_CONTROL) << uint32(m_PointOwnedByTeam[DRAENEI_RUINS] == ALLIANCE && m_PointState[DRAENEI_RUINS] == EY_POINT_UNDER_CONTROL); - - data << uint32(DRAENEI_RUINS_UNCONTROL) << uint32(m_PointState[DRAENEI_RUINS] != EY_POINT_UNDER_CONTROL); - - data << uint32(MAGE_TOWER_ALLIANCE_CONTROL) << uint32(m_PointOwnedByTeam[MAGE_TOWER] == ALLIANCE && m_PointState[MAGE_TOWER] == EY_POINT_UNDER_CONTROL); - - data << uint32(MAGE_TOWER_HORDE_CONTROL) << uint32(m_PointOwnedByTeam[MAGE_TOWER] == HORDE && m_PointState[MAGE_TOWER] == EY_POINT_UNDER_CONTROL); - - data << uint32(MAGE_TOWER_UNCONTROL) << uint32(m_PointState[MAGE_TOWER] != EY_POINT_UNDER_CONTROL); - - data << uint32(FEL_REAVER_HORDE_CONTROL) << uint32(m_PointOwnedByTeam[FEL_REALVER] == HORDE && m_PointState[FEL_REALVER] == EY_POINT_UNDER_CONTROL); - - data << uint32(FEL_REAVER_ALLIANCE_CONTROL) << uint32(m_PointOwnedByTeam[FEL_REALVER] == ALLIANCE && m_PointState[FEL_REALVER] == EY_POINT_UNDER_CONTROL); - - data << uint32(FEL_REAVER_UNCONTROL) << uint32(m_PointState[FEL_REALVER] != EY_POINT_UNDER_CONTROL); - - data << uint32(BLOOD_ELF_HORDE_CONTROL) << uint32(m_PointOwnedByTeam[BLOOD_ELF] == HORDE && m_PointState[BLOOD_ELF] == EY_POINT_UNDER_CONTROL); - - data << uint32(BLOOD_ELF_ALLIANCE_CONTROL) << uint32(m_PointOwnedByTeam[BLOOD_ELF] == ALLIANCE && m_PointState[BLOOD_ELF] == EY_POINT_UNDER_CONTROL); - - data << uint32(BLOOD_ELF_UNCONTROL) << uint32(m_PointState[BLOOD_ELF] != EY_POINT_UNDER_CONTROL); - - data << uint32(NETHERSTORM_FLAG) << uint32(m_FlagState == BG_EY_FLAG_STATE_ON_BASE); - - data << uint32(0xad2) << uint32(0x1); - data << uint32(0xad1) << uint32(0x1); - data << uint32(0xabe) << uint32(GetTeamScore(HORDE)); - data << uint32(0xabd) << uint32(GetTeamScore(ALLIANCE)); - data << uint32(0xa05) << uint32(0x8e); - data << uint32(0xaa0) << uint32(0x0); - data << uint32(0xa9f) << uint32(0x0); - data << uint32(0xa9e) << uint32(0x0); - data << uint32(0xc0d) << uint32(0x17b); + FillInitialWorldState(data, count, DRAENEI_RUINS_HORDE_CONTROL, m_PointOwnedByTeam[DRAENEI_RUINS] == HORDE && m_PointState[DRAENEI_RUINS] == EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, DRAENEI_RUINS_ALLIANCE_CONTROL, m_PointOwnedByTeam[DRAENEI_RUINS] == ALLIANCE && m_PointState[DRAENEI_RUINS] == EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, DRAENEI_RUINS_UNCONTROL, m_PointState[DRAENEI_RUINS] != EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, MAGE_TOWER_ALLIANCE_CONTROL, m_PointOwnedByTeam[MAGE_TOWER] == ALLIANCE && m_PointState[MAGE_TOWER] == EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, MAGE_TOWER_HORDE_CONTROL, m_PointOwnedByTeam[MAGE_TOWER] == HORDE && m_PointState[MAGE_TOWER] == EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, MAGE_TOWER_UNCONTROL, m_PointState[MAGE_TOWER] != EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, FEL_REAVER_HORDE_CONTROL, m_PointOwnedByTeam[FEL_REALVER] == HORDE && m_PointState[FEL_REALVER] == EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, FEL_REAVER_ALLIANCE_CONTROL, m_PointOwnedByTeam[FEL_REALVER] == ALLIANCE && m_PointState[FEL_REALVER] == EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, FEL_REAVER_UNCONTROL, m_PointState[FEL_REALVER] != EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, BLOOD_ELF_HORDE_CONTROL, m_PointOwnedByTeam[BLOOD_ELF] == HORDE && m_PointState[BLOOD_ELF] == EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, BLOOD_ELF_ALLIANCE_CONTROL, m_PointOwnedByTeam[BLOOD_ELF] == ALLIANCE && m_PointState[BLOOD_ELF] == EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, BLOOD_ELF_UNCONTROL, m_PointState[BLOOD_ELF] != EY_POINT_UNDER_CONTROL); + FillInitialWorldState(data, count, NETHERSTORM_FLAG, m_FlagState == BG_EY_FLAG_STATE_ON_BASE); + FillInitialWorldState(data, count, 0xad2, 0x1); + FillInitialWorldState(data, count, 0xad1, 0x1); + FillInitialWorldState(data, count, 0xabe, GetTeamScore(HORDE)); + FillInitialWorldState(data, count, 0xabd, GetTeamScore(ALLIANCE)); + FillInitialWorldState(data, count, 0xa05, 0x8e); + FillInitialWorldState(data, count, 0xaa0, 0x0); + FillInitialWorldState(data, count, 0xa9f, 0x0); + FillInitialWorldState(data, count, 0xa9e, 0x0); + FillInitialWorldState(data, count, 0xc0d, 0x17b); } WorldSafeLocsEntry const *BattleGroundEY::GetClosestGraveYard(Player* player) diff --git a/src/game/BattleGroundEY.h b/src/game/BattleGroundEY.h index 1887a73b3..36374ff4d 100644 --- a/src/game/BattleGroundEY.h +++ b/src/game/BattleGroundEY.h @@ -278,7 +278,7 @@ class BattleGroundEY : public BattleGround void UpdateTeamScore(uint32 Team); void EndBattleGround(uint32 winner); void UpdatePlayerScore(Player *Source, uint32 type, uint32 value); - virtual void FillInitialWorldStates(WorldPacket& data); + virtual void FillInitialWorldStates(WorldPacket& data, uint32& count); void SetDroppedFlagGUID(uint64 guid) { m_DroppedFlagGUID = guid;} uint64 GetDroppedFlagGUID() const { return m_DroppedFlagGUID;} diff --git a/src/game/BattleGroundNA.cpp b/src/game/BattleGroundNA.cpp index 02d30ba00..336dca557 100644 --- a/src/game/BattleGroundNA.cpp +++ b/src/game/BattleGroundNA.cpp @@ -131,11 +131,11 @@ void BattleGroundNA::HandleAreaTrigger(Player *Source, uint32 Trigger) // HandleTriggerBuff(buff_guid,Source); } -void BattleGroundNA::FillInitialWorldStates(WorldPacket &data) +void BattleGroundNA::FillInitialWorldStates(WorldPacket &data, uint32& count) { - data << uint32(0xa0f) << uint32(GetAlivePlayersCountByTeam(ALLIANCE)); // 7 - data << uint32(0xa10) << uint32(GetAlivePlayersCountByTeam(HORDE)); // 8 - data << uint32(0xa11) << uint32(1); // 9 + FillInitialWorldState(data, count, 0xa0f, GetAlivePlayersCountByTeam(ALLIANCE)); + FillInitialWorldState(data, count, 0xa10, GetAlivePlayersCountByTeam(HORDE)); + FillInitialWorldState(data, count, 0xa11, 1); } void BattleGroundNA::Reset() diff --git a/src/game/BattleGroundNA.h b/src/game/BattleGroundNA.h index 2bc9102e3..cc8cdad56 100644 --- a/src/game/BattleGroundNA.h +++ b/src/game/BattleGroundNA.h @@ -46,7 +46,7 @@ class BattleGroundNA : public BattleGround void HandleAreaTrigger(Player *Source, uint32 Trigger); bool SetupBattleGround(); virtual void Reset(); - virtual void FillInitialWorldStates(WorldPacket &d); + virtual void FillInitialWorldStates(WorldPacket &d, uint32& count); void HandleKillPlayer(Player* player, Player *killer); bool HandlePlayerUnderMap(Player * plr); }; diff --git a/src/game/BattleGroundRL.cpp b/src/game/BattleGroundRL.cpp index eb4232081..d54a1195e 100644 --- a/src/game/BattleGroundRL.cpp +++ b/src/game/BattleGroundRL.cpp @@ -132,11 +132,11 @@ void BattleGroundRL::HandleAreaTrigger(Player *Source, uint32 Trigger) // HandleTriggerBuff(buff_guid,Source); } -void BattleGroundRL::FillInitialWorldStates(WorldPacket &data) +void BattleGroundRL::FillInitialWorldStates(WorldPacket &data, uint32& count) { - data << uint32(0xbb8) << uint32(GetAlivePlayersCountByTeam(ALLIANCE)); // 7 - data << uint32(0xbb9) << uint32(GetAlivePlayersCountByTeam(HORDE)); // 8 - data << uint32(0xbba) << uint32(1); // 9 + FillInitialWorldState(data, count, 0xbb8, GetAlivePlayersCountByTeam(ALLIANCE)); + FillInitialWorldState(data, count, 0xbb9, GetAlivePlayersCountByTeam(HORDE)); + FillInitialWorldState(data, count, 0xbba, 1); } void BattleGroundRL::Reset() diff --git a/src/game/BattleGroundRL.h b/src/game/BattleGroundRL.h index 10dce567d..8766a5b1e 100644 --- a/src/game/BattleGroundRL.h +++ b/src/game/BattleGroundRL.h @@ -40,7 +40,7 @@ class BattleGroundRL : public BattleGround /* inherited from BattlegroundClass */ virtual void AddPlayer(Player *plr); virtual void Reset(); - virtual void FillInitialWorldStates(WorldPacket &d); + virtual void FillInitialWorldStates(WorldPacket &d, uint32& count); virtual void StartingEventCloseDoors(); virtual void StartingEventOpenDoors(); diff --git a/src/game/BattleGroundWS.cpp b/src/game/BattleGroundWS.cpp index c6de4d032..ba2b6e411 100644 --- a/src/game/BattleGroundWS.cpp +++ b/src/game/BattleGroundWS.cpp @@ -596,35 +596,34 @@ WorldSafeLocsEntry const* BattleGroundWS::GetClosestGraveYard(Player* player) } } -void BattleGroundWS::FillInitialWorldStates(WorldPacket& data) +void BattleGroundWS::FillInitialWorldStates(WorldPacket& data, uint32& count) { - data << uint32(BG_WS_FLAG_CAPTURES_ALLIANCE) << uint32(GetTeamScore(ALLIANCE)); - data << uint32(BG_WS_FLAG_CAPTURES_HORDE) << uint32(GetTeamScore(HORDE)); + FillInitialWorldState(data, count, BG_WS_FLAG_CAPTURES_ALLIANCE, GetTeamScore(ALLIANCE)); + FillInitialWorldState(data, count, BG_WS_FLAG_CAPTURES_HORDE, GetTeamScore(HORDE)); if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_ON_GROUND) - data << uint32(BG_WS_FLAG_UNK_ALLIANCE) << uint32(-1); + FillInitialWorldState(data, count, BG_WS_FLAG_UNK_ALLIANCE, -1); else if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_ON_PLAYER) - data << uint32(BG_WS_FLAG_UNK_ALLIANCE) << uint32(1); + FillInitialWorldState(data, count, BG_WS_FLAG_UNK_ALLIANCE, 1); else - data << uint32(BG_WS_FLAG_UNK_ALLIANCE) << uint32(0); + FillInitialWorldState(data, count, BG_WS_FLAG_UNK_ALLIANCE, 0); if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_ON_GROUND) - data << uint32(BG_WS_FLAG_UNK_HORDE) << uint32(-1); + FillInitialWorldState(data, count, BG_WS_FLAG_UNK_HORDE, -1); else if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_ON_PLAYER) - data << uint32(BG_WS_FLAG_UNK_HORDE) << uint32(1); + FillInitialWorldState(data, count, BG_WS_FLAG_UNK_HORDE, 1); else - data << uint32(BG_WS_FLAG_UNK_HORDE) << uint32(0); + FillInitialWorldState(data, count, BG_WS_FLAG_UNK_HORDE, 0); - data << uint32(BG_WS_FLAG_CAPTURES_MAX) << uint32(BG_WS_MAX_TEAM_SCORE); + FillInitialWorldState(data, count, BG_WS_FLAG_CAPTURES_MAX, BG_WS_MAX_TEAM_SCORE); if (m_FlagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_ON_PLAYER) - data << uint32(BG_WS_FLAG_STATE_HORDE) << uint32(2); + FillInitialWorldState(data, count, BG_WS_FLAG_STATE_HORDE, 2); else - data << uint32(BG_WS_FLAG_STATE_HORDE) << uint32(1); + FillInitialWorldState(data, count, BG_WS_FLAG_STATE_HORDE, 1); if (m_FlagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_ON_PLAYER) - data << uint32(BG_WS_FLAG_STATE_ALLIANCE) << uint32(2); + FillInitialWorldState(data, count, BG_WS_FLAG_STATE_ALLIANCE, 2); else - data << uint32(BG_WS_FLAG_STATE_ALLIANCE) << uint32(1); - + FillInitialWorldState(data, count, BG_WS_FLAG_STATE_ALLIANCE, 1); } diff --git a/src/game/BattleGroundWS.h b/src/game/BattleGroundWS.h index 9cbfae22c..42d3d9817 100644 --- a/src/game/BattleGroundWS.h +++ b/src/game/BattleGroundWS.h @@ -134,7 +134,7 @@ class BattleGroundWS : public BattleGround void UpdatePlayerScore(Player *Source, uint32 type, uint32 value); void SetDroppedFlagGUID(uint64 guid, uint32 TeamID) { m_DroppedFlagGUID[GetTeamIndexByTeamId(TeamID)] = guid;} uint64 GetDroppedFlagGUID(uint32 TeamID) { return m_DroppedFlagGUID[GetTeamIndexByTeamId(TeamID)];} - virtual void FillInitialWorldStates(WorldPacket& data); + virtual void FillInitialWorldStates(WorldPacket& data, uint32& count); /* Scorekeeping */ uint32 GetTeamScore(uint32 TeamID) const { return m_TeamScores[GetTeamIndexByTeamId(TeamID)]; } diff --git a/src/game/Player.cpp b/src/game/Player.cpp index cbddde8f0..c0a905924 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -7976,98 +7976,289 @@ void Player::SendUpdateWorldState(uint32 Field, uint32 Value) GetSession()->SendPacket(&data); } +static WorldStatePair AV_world_states[] = +{ + { 0x7ae, 0x1 }, // 7 snowfall n + { 0x532, 0x1 }, // 8 frostwolfhut hc + { 0x531, 0x0 }, // 9 frostwolfhut ac + { 0x52e, 0x0 }, // 10 stormpike firstaid a_a + { 0x571, 0x0 }, // 11 east frostwolf tower horde assaulted -unused + { 0x570, 0x0 }, // 12 west frostwolf tower horde assaulted - unused + { 0x567, 0x1 }, // 13 frostwolfe c + { 0x566, 0x1 }, // 14 frostwolfw c + { 0x550, 0x1 }, // 15 irondeep (N) ally + { 0x544, 0x0 }, // 16 ice grave a_a + { 0x536, 0x0 }, // 17 stormpike grave h_c + { 0x535, 0x1 }, // 18 stormpike grave a_c + { 0x518, 0x0 }, // 19 stoneheart grave a_a + { 0x517, 0x0 }, // 20 stoneheart grave h_a + { 0x574, 0x0 }, // 21 1396 unk + { 0x573, 0x0 }, // 22 iceblood tower horde assaulted -unused + { 0x572, 0x0 }, // 23 towerpoint horde assaulted - unused + { 0x56f, 0x0 }, // 24 1391 unk + { 0x56e, 0x0 }, // 25 iceblood a + { 0x56d, 0x0 }, // 26 towerp a + { 0x56c, 0x0 }, // 27 frostwolfe a + { 0x56b, 0x0 }, // 28 froswolfw a + { 0x56a, 0x1 }, // 29 1386 unk + { 0x569, 0x1 }, // 30 iceblood c + { 0x568, 0x1 }, // 31 towerp c + { 0x565, 0x0 }, // 32 stoneh tower a + { 0x564, 0x0 }, // 33 icewing tower a + { 0x563, 0x0 }, // 34 dunn a + { 0x562, 0x0 }, // 35 duns a + { 0x561, 0x0 }, // 36 stoneheart bunker alliance assaulted - unused + { 0x560, 0x0 }, // 37 icewing bunker alliance assaulted - unused + { 0x55f, 0x0 }, // 38 dunbaldar south alliance assaulted - unused + { 0x55e, 0x0 }, // 39 dunbaldar north alliance assaulted - unused + { 0x55d, 0x0 }, // 40 stone tower d + { 0x3c6, 0x0 }, // 41 966 unk + { 0x3c4, 0x0 }, // 42 964 unk + { 0x3c2, 0x0 }, // 43 962 unk + { 0x516, 0x1 }, // 44 stoneheart grave a_c + { 0x515, 0x0 }, // 45 stonheart grave h_c + { 0x3b6, 0x0 }, // 46 950 unk + { 0x55c, 0x0 }, // 47 icewing tower d + { 0x55b, 0x0 }, // 48 dunn d + { 0x55a, 0x0 }, // 49 duns d + { 0x559, 0x0 }, // 50 1369 unk + { 0x558, 0x0 }, // 51 iceblood d + { 0x557, 0x0 }, // 52 towerp d + { 0x556, 0x0 }, // 53 frostwolfe d + { 0x555, 0x0 }, // 54 frostwolfw d + { 0x554, 0x1 }, // 55 stoneh tower c + { 0x553, 0x1 }, // 56 icewing tower c + { 0x552, 0x1 }, // 57 dunn c + { 0x551, 0x1 }, // 58 duns c + { 0x54f, 0x0 }, // 59 irondeep (N) horde + { 0x54e, 0x0 }, // 60 irondeep (N) ally + { 0x54d, 0x1 }, // 61 mine (S) neutral + { 0x54c, 0x0 }, // 62 mine (S) horde + { 0x54b, 0x0 }, // 63 mine (S) ally + { 0x545, 0x0 }, // 64 iceblood h_a + { 0x543, 0x1 }, // 65 iceblod h_c + { 0x542, 0x0 }, // 66 iceblood a_c + { 0x540, 0x0 }, // 67 snowfall h_a + { 0x53f, 0x0 }, // 68 snowfall a_a + { 0x53e, 0x0 }, // 69 snowfall h_c + { 0x53d, 0x0 }, // 70 snowfall a_c + { 0x53c, 0x0 }, // 71 frostwolf g h_a + { 0x53b, 0x0 }, // 72 frostwolf g a_a + { 0x53a, 0x1 }, // 73 frostwolf g h_c + { 0x539, 0x0 }, // 74 frostwolf g a_c + { 0x538, 0x0 }, // 75 stormpike grave h_a + { 0x537, 0x0 }, // 76 stormpike grave a_a + { 0x534, 0x0 }, // 77 frostwolf hut h_a + { 0x533, 0x0 }, // 78 frostwolf hut a_a + { 0x530, 0x0 }, // 79 stormpike first aid h_a + { 0x52f, 0x0 }, // 80 stormpike first aid h_c + { 0x52d, 0x1 }, // 81 stormpike first aid a_c + { 0x0, 0x0 } +}; + +static WorldStatePair WS_world_states[] = +{ + { 0x62d, 0x0 }, // 7 1581 alliance flag captures + { 0x62e, 0x0 }, // 8 1582 horde flag captures + { 0x609, 0x0 }, // 9 1545 unk, set to 1 on alliance flag pickup... + { 0x60a, 0x0 }, // 10 1546 unk, set to 1 on horde flag pickup, after drop it's -1 + { 0x60b, 0x2 }, // 11 1547 unk + { 0x641, 0x3 }, // 12 1601 unk (max flag captures?) + { 0x922, 0x1 }, // 13 2338 horde (0 - hide, 1 - flag ok, 2 - flag picked up (flashing), 3 - flag picked up (not flashing) + { 0x923, 0x1 }, // 14 2339 alliance (0 - hide, 1 - flag ok, 2 - flag picked up (flashing), 3 - flag picked up (not flashing) + { 0x0, 0x0 } +}; + +static WorldStatePair AB_world_states[] = +{ + { 0x6e7, 0x0 }, // 7 1767 stables alliance + { 0x6e8, 0x0 }, // 8 1768 stables horde + { 0x6e9, 0x0 }, // 9 1769 unk, ST? + { 0x6ea, 0x0 }, // 10 1770 stables (show/hide) + { 0x6ec, 0x0 }, // 11 1772 farm (0 - horde controlled, 1 - alliance controlled) + { 0x6ed, 0x0 }, // 12 1773 farm (show/hide) + { 0x6ee, 0x0 }, // 13 1774 farm color + { 0x6ef, 0x0 }, // 14 1775 gold mine color, may be FM? + { 0x6f0, 0x0 }, // 15 1776 alliance resources + { 0x6f1, 0x0 }, // 16 1777 horde resources + { 0x6f2, 0x0 }, // 17 1778 horde bases + { 0x6f3, 0x0 }, // 18 1779 alliance bases + { 0x6f4, 0x7d0 }, // 19 1780 max resources (2000) + { 0x6f6, 0x0 }, // 20 1782 blacksmith color + { 0x6f7, 0x0 }, // 21 1783 blacksmith (show/hide) + { 0x6f8, 0x0 }, // 22 1784 unk, bs? + { 0x6f9, 0x0 }, // 23 1785 unk, bs? + { 0x6fb, 0x0 }, // 24 1787 gold mine (0 - horde contr, 1 - alliance contr) + { 0x6fc, 0x0 }, // 25 1788 gold mine (0 - conflict, 1 - horde) + { 0x6fd, 0x0 }, // 26 1789 gold mine (1 - show/0 - hide) + { 0x6fe, 0x0 }, // 27 1790 gold mine color + { 0x700, 0x0 }, // 28 1792 gold mine color, wtf?, may be LM? + { 0x701, 0x0 }, // 29 1793 lumber mill color (0 - conflict, 1 - horde contr) + { 0x702, 0x0 }, // 30 1794 lumber mill (show/hide) + { 0x703, 0x0 }, // 31 1795 lumber mill color color + { 0x732, 0x1 }, // 32 1842 stables (1 - uncontrolled) + { 0x733, 0x1 }, // 33 1843 gold mine (1 - uncontrolled) + { 0x734, 0x1 }, // 34 1844 lumber mill (1 - uncontrolled) + { 0x735, 0x1 }, // 35 1845 farm (1 - uncontrolled) + { 0x736, 0x1 }, // 36 1846 blacksmith (1 - uncontrolled) + { 0x745, 0x2 }, // 37 1861 unk + { 0x7a3, 0x708 }, // 38 1955 warning limit (1800) + { 0x0, 0x0 } +}; + +static WorldStatePair EY_world_states[] = +{ + { 0xac1, 0x0 }, // 7 2753 Horde Bases + { 0xac0, 0x0 }, // 8 2752 Alliance Bases + { 0xab6, 0x0 }, // 9 2742 Mage Tower - Horde conflict + { 0xab5, 0x0 }, // 10 2741 Mage Tower - Alliance conflict + { 0xab4, 0x0 }, // 11 2740 Fel Reaver - Horde conflict + { 0xab3, 0x0 }, // 12 2739 Fel Reaver - Alliance conflict + { 0xab2, 0x0 }, // 13 2738 Draenei - Alliance conflict + { 0xab1, 0x0 }, // 14 2737 Draenei - Horde conflict + { 0xab0, 0x0 }, // 15 2736 unk // 0 at start + { 0xaaf, 0x0 }, // 16 2735 unk // 0 at start + { 0xaad, 0x0 }, // 17 2733 Draenei - Horde control + { 0xaac, 0x0 }, // 18 2732 Draenei - Alliance control + { 0xaab, 0x1 }, // 19 2731 Draenei uncontrolled (1 - yes, 0 - no) + { 0xaaa, 0x0 }, // 20 2730 Mage Tower - Alliance control + { 0xaa9, 0x0 }, // 21 2729 Mage Tower - Horde control + { 0xaa8, 0x1 }, // 22 2728 Mage Tower uncontrolled (1 - yes, 0 - no) + { 0xaa7, 0x0 }, // 23 2727 Fel Reaver - Horde control + { 0xaa6, 0x0 }, // 24 2726 Fel Reaver - Alliance control + { 0xaa5, 0x1 }, // 25 2725 Fel Reaver uncontrolled (1 - yes, 0 - no) + { 0xaa4, 0x0 }, // 26 2724 Boold Elf - Horde control + { 0xaa3, 0x0 }, // 27 2723 Boold Elf - Alliance control + { 0xaa2, 0x1 }, // 28 2722 Boold Elf uncontrolled (1 - yes, 0 - no) + { 0xac5, 0x1 }, // 29 2757 Flag (1 - show, 0 - hide) - doesn't work exactly this way! + { 0xad2, 0x1 }, // 30 2770 Horde top-stats (1 - show, 0 - hide) // 02 -> horde picked up the flag + { 0xad1, 0x1 }, // 31 2769 Alliance top-stats (1 - show, 0 - hide) // 02 -> alliance picked up the flag + { 0xabe, 0x0 }, // 32 2750 Horde resources + { 0xabd, 0x0 }, // 33 2749 Alliance resources + { 0xa05, 0x8e }, // 34 2565 unk, constant? + { 0xaa0, 0x0 }, // 35 2720 Capturing progress-bar (100 -> empty (only grey), 0 -> blue|red (no grey), default 0) + { 0xa9f, 0x0 }, // 36 2719 Capturing progress-bar (0 - left, 100 - right) + { 0xa9e, 0x0 }, // 37 2718 Capturing progress-bar (1 - show, 0 - hide) + { 0xc0d, 0x17b }, // 38 3085 unk + // and some more ... unknown + { 0x0, 0x0 } +}; + +static WorldStatePair HP_world_states[] = // Hellfire Peninsula +{ + { 0x9ba, 0x1 }, // 10 + { 0x9b9, 0x1 }, // 11 + { 0x9b5, 0x0 }, // 12 + { 0x9b4, 0x1 }, // 13 + { 0x9b3, 0x0 }, // 14 + { 0x9b2, 0x0 }, // 15 + { 0x9b1, 0x1 }, // 16 + { 0x9b0, 0x0 }, // 17 + { 0x9ae, 0x0 }, // 18 horde pvp objectives captured + { 0x9ac, 0x0 }, // 19 + { 0x9a8, 0x0 }, // 20 + { 0x9a7, 0x0 }, // 21 + { 0x9a6, 0x1 }, // 22 + { 0x0, 0x0 } +}; + +static WorldStatePair TF_world_states[] = // Terokkar Forest +{ + { 0xa41, 0x0 }, // 10 + { 0xa40, 0x14 }, // 11 + { 0xa3f, 0x0 }, // 12 + { 0xa3e, 0x0 }, // 13 + { 0xa3d, 0x5 }, // 14 + { 0xa3c, 0x0 }, // 15 + { 0xa87, 0x0 }, // 16 + { 0xa86, 0x0 }, // 17 + { 0xa85, 0x0 }, // 18 + { 0xa84, 0x0 }, // 19 + { 0xa83, 0x0 }, // 20 + { 0xa82, 0x0 }, // 21 + { 0xa81, 0x0 }, // 22 + { 0xa80, 0x0 }, // 23 + { 0xa7e, 0x0 }, // 24 + { 0xa7d, 0x0 }, // 25 + { 0xa7c, 0x0 }, // 26 + { 0xa7b, 0x0 }, // 27 + { 0xa7a, 0x0 }, // 28 + { 0xa79, 0x0 }, // 29 + { 0x9d0, 0x5 }, // 30 + { 0x9ce, 0x0 }, // 31 + { 0x9cd, 0x0 }, // 32 + { 0x9cc, 0x0 }, // 33 + { 0xa88, 0x0 }, // 34 + { 0xad0, 0x0 }, // 35 + { 0xacf, 0x1 }, // 36 + { 0x0, 0x0 } +}; + +static WorldStatePair ZM_world_states[] = // Terokkar Forest +{ + { 0x9e1, 0x0 }, // 10 + { 0x9e0, 0x0 }, // 11 + { 0x9df, 0x0 }, // 12 + { 0xa5d, 0x1 }, // 13 + { 0xa5c, 0x0 }, // 14 + { 0xa5b, 0x1 }, // 15 + { 0xa5a, 0x0 }, // 16 + { 0xa59, 0x1 }, // 17 + { 0xa58, 0x0 }, // 18 + { 0xa57, 0x0 }, // 19 + { 0xa56, 0x0 }, // 20 + { 0xa55, 0x1 }, // 21 + { 0xa54, 0x0 }, // 22 + { 0x9e7, 0x0 }, // 23 + { 0x9e6, 0x0 }, // 24 + { 0x9e5, 0x0 }, // 25 + { 0xa00, 0x0 }, // 26 + { 0x9ff, 0x1 }, // 27 + { 0x9fe, 0x0 }, // 28 + { 0x9fd, 0x0 }, // 29 + { 0x9fc, 0x1 }, // 30 + { 0x9fb, 0x0 }, // 31 + { 0xa62, 0x0 }, // 32 + { 0xa61, 0x1 }, // 33 + { 0xa60, 0x1 }, // 34 + { 0xa5f, 0x0 }, // 35 + { 0x0, 0x0 } +}; + void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) { // data depends on zoneid/mapid... BattleGround* bg = GetBattleGround(); - uint16 NumberOfFields = 0; uint32 mapid = GetMapId(); DEBUG_LOG("Sending SMSG_INIT_WORLD_STATES to Map:%u, Zone: %u", mapid, zoneid); - // may be exist better way to do this... - switch(zoneid) - { - case 0: - case 1: - case 4: - case 8: - case 10: - case 11: - case 12: - case 36: - case 38: - case 40: - case 41: - case 51: - case 267: - case 1519: - case 1537: - case 2257: - case 2918: - NumberOfFields = 8; - break; - case 139: - NumberOfFields = 41; - break; - case 1377: - NumberOfFields = 15; - break; - case 2597: - NumberOfFields = 83; - break; - case 3277: - NumberOfFields = 16; - break; - case 3358: - case 3820: - NumberOfFields = 40; - break; - case 3483: - NumberOfFields = 27; - break; - case 3518: - NumberOfFields = 39; - break; - case 3519: - NumberOfFields = 38; - break; - case 3521: - NumberOfFields = 37; - break; - case 3698: - case 3702: - case 3968: - NumberOfFields = 11; - break; - case 3703: - NumberOfFields = 11; - break; - default: - NumberOfFields = 12; - break; - } + uint32 count = 0; // count of world states in packet - WorldPacket data(SMSG_INIT_WORLD_STATES, (4+4+4+2+(NumberOfFields*8))); + WorldPacket data(SMSG_INIT_WORLD_STATES, (4+4+4+2+8*8));// guess data << uint32(mapid); // mapid data << uint32(zoneid); // zone id data << uint32(areaid); // area id, new 2.1.0 - data << uint16(NumberOfFields); // count of uint64 blocks - data << uint32(0x8d8) << uint32(0x0); // 1 - data << uint32(0x8d7) << uint32(0x0); // 2 - data << uint32(0x8d6) << uint32(0x0); // 3 - data << uint32(0x8d5) << uint32(0x0); // 4 - data << uint32(0x8d4) << uint32(0x0); // 5 - data << uint32(0x8d3) << uint32(0x0); // 6 + size_t count_pos = data.wpos(); + data << uint16(0); // count of uint64 blocks, placeholder + + // common fields + FillInitialWorldState(data, count, 0x8d8, 0x0); // 1 + FillInitialWorldState(data, count, 0x8d7, 0x0); // 2 + FillInitialWorldState(data, count, 0x8d6, 0x0); // 3 + FillInitialWorldState(data, count, 0x8d5, 0x0); // 4 + FillInitialWorldState(data, count, 0x8d4, 0x0); // 5 + FillInitialWorldState(data, count, 0x8d3, 0x0); // 6 // 7 1 - Arena season in progress, 0 - end of season - data << uint32(0xC77) << uint32(sWorld.getConfig(CONFIG_BOOL_ARENA_SEASON_IN_PROGRESS)); + FillInitialWorldState(data, count, 0xC77, sWorld.getConfig(CONFIG_BOOL_ARENA_SEASON_IN_PROGRESS)); // 8 Arena season id - data << uint32(0xF3D) << uint32(sWorld.getConfig(CONFIG_UINT32_ARENA_SEASON_ID)); + FillInitialWorldState(data, count, 0xF3D, sWorld.getConfig(CONFIG_UINT32_ARENA_SEASON_ID)); + if(mapid == 530) // Outland { - data << uint32(0x9bf) << uint32(0x0); // 7 - data << uint32(0x9bd) << uint32(0xF); // 8 - data << uint32(0x9bb) << uint32(0xF); // 9 + FillInitialWorldState(data, count, 0x9bf, 0x0); + FillInitialWorldState(data, count, 0x9bd, 0xF); + FillInitialWorldState(data, count, 0x9bb, 0xF); } switch(zoneid) { @@ -8083,297 +8274,86 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) break; case 2597: // AV if (bg && bg->GetTypeID() == BATTLEGROUND_AV) - bg->FillInitialWorldStates(data); + bg->FillInitialWorldStates(data, count); else - { - data << uint32(0x7ae) << uint32(0x1); // 7 snowfall n - data << uint32(0x532) << uint32(0x1); // 8 frostwolfhut hc - data << uint32(0x531) << uint32(0x0); // 9 frostwolfhut ac - data << uint32(0x52e) << uint32(0x0); // 10 stormpike firstaid a_a - data << uint32(0x571) << uint32(0x0); // 11 east frostwolf tower horde assaulted -unused - data << uint32(0x570) << uint32(0x0); // 12 west frostwolf tower horde assaulted - unused - data << uint32(0x567) << uint32(0x1); // 13 frostwolfe c - data << uint32(0x566) << uint32(0x1); // 14 frostwolfw c - data << uint32(0x550) << uint32(0x1); // 15 irondeep (N) ally - data << uint32(0x544) << uint32(0x0); // 16 ice grave a_a - data << uint32(0x536) << uint32(0x0); // 17 stormpike grave h_c - data << uint32(0x535) << uint32(0x1); // 18 stormpike grave a_c - data << uint32(0x518) << uint32(0x0); // 19 stoneheart grave a_a - data << uint32(0x517) << uint32(0x0); // 20 stoneheart grave h_a - data << uint32(0x574) << uint32(0x0); // 21 1396 unk - data << uint32(0x573) << uint32(0x0); // 22 iceblood tower horde assaulted -unused - data << uint32(0x572) << uint32(0x0); // 23 towerpoint horde assaulted - unused - data << uint32(0x56f) << uint32(0x0); // 24 1391 unk - data << uint32(0x56e) << uint32(0x0); // 25 iceblood a - data << uint32(0x56d) << uint32(0x0); // 26 towerp a - data << uint32(0x56c) << uint32(0x0); // 27 frostwolfe a - data << uint32(0x56b) << uint32(0x0); // 28 froswolfw a - data << uint32(0x56a) << uint32(0x1); // 29 1386 unk - data << uint32(0x569) << uint32(0x1); // 30 iceblood c - data << uint32(0x568) << uint32(0x1); // 31 towerp c - data << uint32(0x565) << uint32(0x0); // 32 stoneh tower a - data << uint32(0x564) << uint32(0x0); // 33 icewing tower a - data << uint32(0x563) << uint32(0x0); // 34 dunn a - data << uint32(0x562) << uint32(0x0); // 35 duns a - data << uint32(0x561) << uint32(0x0); // 36 stoneheart bunker alliance assaulted - unused - data << uint32(0x560) << uint32(0x0); // 37 icewing bunker alliance assaulted - unused - data << uint32(0x55f) << uint32(0x0); // 38 dunbaldar south alliance assaulted - unused - data << uint32(0x55e) << uint32(0x0); // 39 dunbaldar north alliance assaulted - unused - data << uint32(0x55d) << uint32(0x0); // 40 stone tower d - data << uint32(0x3c6) << uint32(0x0); // 41 966 unk - data << uint32(0x3c4) << uint32(0x0); // 42 964 unk - data << uint32(0x3c2) << uint32(0x0); // 43 962 unk - data << uint32(0x516) << uint32(0x1); // 44 stoneheart grave a_c - data << uint32(0x515) << uint32(0x0); // 45 stonheart grave h_c - data << uint32(0x3b6) << uint32(0x0); // 46 950 unk - data << uint32(0x55c) << uint32(0x0); // 47 icewing tower d - data << uint32(0x55b) << uint32(0x0); // 48 dunn d - data << uint32(0x55a) << uint32(0x0); // 49 duns d - data << uint32(0x559) << uint32(0x0); // 50 1369 unk - data << uint32(0x558) << uint32(0x0); // 51 iceblood d - data << uint32(0x557) << uint32(0x0); // 52 towerp d - data << uint32(0x556) << uint32(0x0); // 53 frostwolfe d - data << uint32(0x555) << uint32(0x0); // 54 frostwolfw d - data << uint32(0x554) << uint32(0x1); // 55 stoneh tower c - data << uint32(0x553) << uint32(0x1); // 56 icewing tower c - data << uint32(0x552) << uint32(0x1); // 57 dunn c - data << uint32(0x551) << uint32(0x1); // 58 duns c - data << uint32(0x54f) << uint32(0x0); // 59 irondeep (N) horde - data << uint32(0x54e) << uint32(0x0); // 60 irondeep (N) ally - data << uint32(0x54d) << uint32(0x1); // 61 mine (S) neutral - data << uint32(0x54c) << uint32(0x0); // 62 mine (S) horde - data << uint32(0x54b) << uint32(0x0); // 63 mine (S) ally - data << uint32(0x545) << uint32(0x0); // 64 iceblood h_a - data << uint32(0x543) << uint32(0x1); // 65 iceblod h_c - data << uint32(0x542) << uint32(0x0); // 66 iceblood a_c - data << uint32(0x540) << uint32(0x0); // 67 snowfall h_a - data << uint32(0x53f) << uint32(0x0); // 68 snowfall a_a - data << uint32(0x53e) << uint32(0x0); // 69 snowfall h_c - data << uint32(0x53d) << uint32(0x0); // 70 snowfall a_c - data << uint32(0x53c) << uint32(0x0); // 71 frostwolf g h_a - data << uint32(0x53b) << uint32(0x0); // 72 frostwolf g a_a - data << uint32(0x53a) << uint32(0x1); // 73 frostwolf g h_c - data << uint32(0x539) << uint32(0x0); // 74 frostwolf g a_c - data << uint32(0x538) << uint32(0x0); // 75 stormpike grave h_a - data << uint32(0x537) << uint32(0x0); // 76 stormpike grave a_a - data << uint32(0x534) << uint32(0x0); // 77 frostwolf hut h_a - data << uint32(0x533) << uint32(0x0); // 78 frostwolf hut a_a - data << uint32(0x530) << uint32(0x0); // 79 stormpike first aid h_a - data << uint32(0x52f) << uint32(0x0); // 80 stormpike first aid h_c - data << uint32(0x52d) << uint32(0x1); // 81 stormpike first aid a_c - } + FillInitialWorldState(data,count, AV_world_states); break; case 3277: // WS if (bg && bg->GetTypeID() == BATTLEGROUND_WS) - bg->FillInitialWorldStates(data); + bg->FillInitialWorldStates(data, count); else - { - data << uint32(0x62d) << uint32(0x0); // 7 1581 alliance flag captures - data << uint32(0x62e) << uint32(0x0); // 8 1582 horde flag captures - data << uint32(0x609) << uint32(0x0); // 9 1545 unk, set to 1 on alliance flag pickup... - data << uint32(0x60a) << uint32(0x0); // 10 1546 unk, set to 1 on horde flag pickup, after drop it's -1 - data << uint32(0x60b) << uint32(0x2); // 11 1547 unk - data << uint32(0x641) << uint32(0x3); // 12 1601 unk (max flag captures?) - data << uint32(0x922) << uint32(0x1); // 13 2338 horde (0 - hide, 1 - flag ok, 2 - flag picked up (flashing), 3 - flag picked up (not flashing) - data << uint32(0x923) << uint32(0x1); // 14 2339 alliance (0 - hide, 1 - flag ok, 2 - flag picked up (flashing), 3 - flag picked up (not flashing) - } + FillInitialWorldState(data,count, WS_world_states); break; case 3358: // AB if (bg && bg->GetTypeID() == BATTLEGROUND_AB) - bg->FillInitialWorldStates(data); + bg->FillInitialWorldStates(data, count); else - { - data << uint32(0x6e7) << uint32(0x0); // 7 1767 stables alliance - data << uint32(0x6e8) << uint32(0x0); // 8 1768 stables horde - data << uint32(0x6e9) << uint32(0x0); // 9 1769 unk, ST? - data << uint32(0x6ea) << uint32(0x0); // 10 1770 stables (show/hide) - data << uint32(0x6ec) << uint32(0x0); // 11 1772 farm (0 - horde controlled, 1 - alliance controlled) - data << uint32(0x6ed) << uint32(0x0); // 12 1773 farm (show/hide) - data << uint32(0x6ee) << uint32(0x0); // 13 1774 farm color - data << uint32(0x6ef) << uint32(0x0); // 14 1775 gold mine color, may be FM? - data << uint32(0x6f0) << uint32(0x0); // 15 1776 alliance resources - data << uint32(0x6f1) << uint32(0x0); // 16 1777 horde resources - data << uint32(0x6f2) << uint32(0x0); // 17 1778 horde bases - data << uint32(0x6f3) << uint32(0x0); // 18 1779 alliance bases - data << uint32(0x6f4) << uint32(0x7d0); // 19 1780 max resources (2000) - data << uint32(0x6f6) << uint32(0x0); // 20 1782 blacksmith color - data << uint32(0x6f7) << uint32(0x0); // 21 1783 blacksmith (show/hide) - data << uint32(0x6f8) << uint32(0x0); // 22 1784 unk, bs? - data << uint32(0x6f9) << uint32(0x0); // 23 1785 unk, bs? - data << uint32(0x6fb) << uint32(0x0); // 24 1787 gold mine (0 - horde contr, 1 - alliance contr) - data << uint32(0x6fc) << uint32(0x0); // 25 1788 gold mine (0 - conflict, 1 - horde) - data << uint32(0x6fd) << uint32(0x0); // 26 1789 gold mine (1 - show/0 - hide) - data << uint32(0x6fe) << uint32(0x0); // 27 1790 gold mine color - data << uint32(0x700) << uint32(0x0); // 28 1792 gold mine color, wtf?, may be LM? - data << uint32(0x701) << uint32(0x0); // 29 1793 lumber mill color (0 - conflict, 1 - horde contr) - data << uint32(0x702) << uint32(0x0); // 30 1794 lumber mill (show/hide) - data << uint32(0x703) << uint32(0x0); // 31 1795 lumber mill color color - data << uint32(0x732) << uint32(0x1); // 32 1842 stables (1 - uncontrolled) - data << uint32(0x733) << uint32(0x1); // 33 1843 gold mine (1 - uncontrolled) - data << uint32(0x734) << uint32(0x1); // 34 1844 lumber mill (1 - uncontrolled) - data << uint32(0x735) << uint32(0x1); // 35 1845 farm (1 - uncontrolled) - data << uint32(0x736) << uint32(0x1); // 36 1846 blacksmith (1 - uncontrolled) - data << uint32(0x745) << uint32(0x2); // 37 1861 unk - data << uint32(0x7a3) << uint32(0x708); // 38 1955 warning limit (1800) - } + FillInitialWorldState(data,count, AB_world_states); break; case 3820: // EY if (bg && bg->GetTypeID() == BATTLEGROUND_EY) - bg->FillInitialWorldStates(data); + bg->FillInitialWorldStates(data, count); else - { - data << uint32(0xac1) << uint32(0x0); // 7 2753 Horde Bases - data << uint32(0xac0) << uint32(0x0); // 8 2752 Alliance Bases - data << uint32(0xab6) << uint32(0x0); // 9 2742 Mage Tower - Horde conflict - data << uint32(0xab5) << uint32(0x0); // 10 2741 Mage Tower - Alliance conflict - data << uint32(0xab4) << uint32(0x0); // 11 2740 Fel Reaver - Horde conflict - data << uint32(0xab3) << uint32(0x0); // 12 2739 Fel Reaver - Alliance conflict - data << uint32(0xab2) << uint32(0x0); // 13 2738 Draenei - Alliance conflict - data << uint32(0xab1) << uint32(0x0); // 14 2737 Draenei - Horde conflict - data << uint32(0xab0) << uint32(0x0); // 15 2736 unk // 0 at start - data << uint32(0xaaf) << uint32(0x0); // 16 2735 unk // 0 at start - data << uint32(0xaad) << uint32(0x0); // 17 2733 Draenei - Horde control - data << uint32(0xaac) << uint32(0x0); // 18 2732 Draenei - Alliance control - data << uint32(0xaab) << uint32(0x1); // 19 2731 Draenei uncontrolled (1 - yes, 0 - no) - data << uint32(0xaaa) << uint32(0x0); // 20 2730 Mage Tower - Alliance control - data << uint32(0xaa9) << uint32(0x0); // 21 2729 Mage Tower - Horde control - data << uint32(0xaa8) << uint32(0x1); // 22 2728 Mage Tower uncontrolled (1 - yes, 0 - no) - data << uint32(0xaa7) << uint32(0x0); // 23 2727 Fel Reaver - Horde control - data << uint32(0xaa6) << uint32(0x0); // 24 2726 Fel Reaver - Alliance control - data << uint32(0xaa5) << uint32(0x1); // 25 2725 Fel Reaver uncontrolled (1 - yes, 0 - no) - data << uint32(0xaa4) << uint32(0x0); // 26 2724 Boold Elf - Horde control - data << uint32(0xaa3) << uint32(0x0); // 27 2723 Boold Elf - Alliance control - data << uint32(0xaa2) << uint32(0x1); // 28 2722 Boold Elf uncontrolled (1 - yes, 0 - no) - data << uint32(0xac5) << uint32(0x1); // 29 2757 Flag (1 - show, 0 - hide) - doesn't work exactly this way! - data << uint32(0xad2) << uint32(0x1); // 30 2770 Horde top-stats (1 - show, 0 - hide) // 02 -> horde picked up the flag - data << uint32(0xad1) << uint32(0x1); // 31 2769 Alliance top-stats (1 - show, 0 - hide) // 02 -> alliance picked up the flag - data << uint32(0xabe) << uint32(0x0); // 32 2750 Horde resources - data << uint32(0xabd) << uint32(0x0); // 33 2749 Alliance resources - data << uint32(0xa05) << uint32(0x8e); // 34 2565 unk, constant? - data << uint32(0xaa0) << uint32(0x0); // 35 2720 Capturing progress-bar (100 -> empty (only grey), 0 -> blue|red (no grey), default 0) - data << uint32(0xa9f) << uint32(0x0); // 36 2719 Capturing progress-bar (0 - left, 100 - right) - data << uint32(0xa9e) << uint32(0x0); // 37 2718 Capturing progress-bar (1 - show, 0 - hide) - data << uint32(0xc0d) << uint32(0x17b); // 38 3085 unk - // and some more ... unknown - } + FillInitialWorldState(data,count, EY_world_states); break; case 3483: // Hellfire Peninsula - data << uint32(0x9ba) << uint32(0x1); // 10 - data << uint32(0x9b9) << uint32(0x1); // 11 - data << uint32(0x9b5) << uint32(0x0); // 12 - data << uint32(0x9b4) << uint32(0x1); // 13 - data << uint32(0x9b3) << uint32(0x0); // 14 - data << uint32(0x9b2) << uint32(0x0); // 15 - data << uint32(0x9b1) << uint32(0x1); // 16 - data << uint32(0x9b0) << uint32(0x0); // 17 - data << uint32(0x9ae) << uint32(0x0); // 18 horde pvp objectives captured - data << uint32(0x9ac) << uint32(0x0); // 19 - data << uint32(0x9a8) << uint32(0x0); // 20 - data << uint32(0x9a7) << uint32(0x0); // 21 - data << uint32(0x9a6) << uint32(0x1); // 22 + FillInitialWorldState(data,count, HP_world_states); break; case 3519: // Terokkar Forest - data << uint32(0xa41) << uint32(0x0); // 10 - data << uint32(0xa40) << uint32(0x14); // 11 - data << uint32(0xa3f) << uint32(0x0); // 12 - data << uint32(0xa3e) << uint32(0x0); // 13 - data << uint32(0xa3d) << uint32(0x5); // 14 - data << uint32(0xa3c) << uint32(0x0); // 15 - data << uint32(0xa87) << uint32(0x0); // 16 - data << uint32(0xa86) << uint32(0x0); // 17 - data << uint32(0xa85) << uint32(0x0); // 18 - data << uint32(0xa84) << uint32(0x0); // 19 - data << uint32(0xa83) << uint32(0x0); // 20 - data << uint32(0xa82) << uint32(0x0); // 21 - data << uint32(0xa81) << uint32(0x0); // 22 - data << uint32(0xa80) << uint32(0x0); // 23 - data << uint32(0xa7e) << uint32(0x0); // 24 - data << uint32(0xa7d) << uint32(0x0); // 25 - data << uint32(0xa7c) << uint32(0x0); // 26 - data << uint32(0xa7b) << uint32(0x0); // 27 - data << uint32(0xa7a) << uint32(0x0); // 28 - data << uint32(0xa79) << uint32(0x0); // 29 - data << uint32(0x9d0) << uint32(0x5); // 30 - data << uint32(0x9ce) << uint32(0x0); // 31 - data << uint32(0x9cd) << uint32(0x0); // 32 - data << uint32(0x9cc) << uint32(0x0); // 33 - data << uint32(0xa88) << uint32(0x0); // 34 - data << uint32(0xad0) << uint32(0x0); // 35 - data << uint32(0xacf) << uint32(0x1); // 36 + FillInitialWorldState(data,count, TF_world_states); break; case 3521: // Zangarmarsh - data << uint32(0x9e1) << uint32(0x0); // 10 - data << uint32(0x9e0) << uint32(0x0); // 11 - data << uint32(0x9df) << uint32(0x0); // 12 - data << uint32(0xa5d) << uint32(0x1); // 13 - data << uint32(0xa5c) << uint32(0x0); // 14 - data << uint32(0xa5b) << uint32(0x1); // 15 - data << uint32(0xa5a) << uint32(0x0); // 16 - data << uint32(0xa59) << uint32(0x1); // 17 - data << uint32(0xa58) << uint32(0x0); // 18 - data << uint32(0xa57) << uint32(0x0); // 19 - data << uint32(0xa56) << uint32(0x0); // 20 - data << uint32(0xa55) << uint32(0x1); // 21 - data << uint32(0xa54) << uint32(0x0); // 22 - data << uint32(0x9e7) << uint32(0x0); // 23 - data << uint32(0x9e6) << uint32(0x0); // 24 - data << uint32(0x9e5) << uint32(0x0); // 25 - data << uint32(0xa00) << uint32(0x0); // 26 - data << uint32(0x9ff) << uint32(0x1); // 27 - data << uint32(0x9fe) << uint32(0x0); // 28 - data << uint32(0x9fd) << uint32(0x0); // 29 - data << uint32(0x9fc) << uint32(0x1); // 30 - data << uint32(0x9fb) << uint32(0x0); // 31 - data << uint32(0xa62) << uint32(0x0); // 32 - data << uint32(0xa61) << uint32(0x1); // 33 - data << uint32(0xa60) << uint32(0x1); // 34 - data << uint32(0xa5f) << uint32(0x0); // 35 + FillInitialWorldState(data,count, ZM_world_states); break; case 3698: // Nagrand Arena if (bg && bg->GetTypeID() == BATTLEGROUND_NA) - bg->FillInitialWorldStates(data); + bg->FillInitialWorldStates(data, count); else { - data << uint32(0xa0f) << uint32(0x0); // 7 - data << uint32(0xa10) << uint32(0x0); // 8 - data << uint32(0xa11) << uint32(0x0); // 9 show + FillInitialWorldState(data,count,0xa0f,0x0);// 7 + FillInitialWorldState(data,count,0xa10,0x0);// 8 + FillInitialWorldState(data,count,0xa11,0x0);// 9 show } break; case 3702: // Blade's Edge Arena if (bg && bg->GetTypeID() == BATTLEGROUND_BE) - bg->FillInitialWorldStates(data); + bg->FillInitialWorldStates(data, count); else { - data << uint32(0x9f0) << uint32(0x0); // 7 gold - data << uint32(0x9f1) << uint32(0x0); // 8 green - data << uint32(0x9f3) << uint32(0x0); // 9 show + FillInitialWorldState(data,count,0x9f0,0x0);// 7 gold + FillInitialWorldState(data,count,0x9f1,0x0);// 8 green + FillInitialWorldState(data,count,0x9f3,0x0);// 9 show } break; case 3968: // Ruins of Lordaeron if (bg && bg->GetTypeID() == BATTLEGROUND_RL) - bg->FillInitialWorldStates(data); + bg->FillInitialWorldStates(data, count); else { - data << uint32(0xbb8) << uint32(0x0); // 7 gold - data << uint32(0xbb9) << uint32(0x0); // 8 green - data << uint32(0xbba) << uint32(0x0); // 9 show + FillInitialWorldState(data,count,0xbb8,0x0);// 7 gold + FillInitialWorldState(data,count,0xbb9,0x0);// 8 green + FillInitialWorldState(data,count,0xbba,0x0);// 9 show } break; case 3703: // Shattrath City break; default: - data << uint32(0x914) << uint32(0x0); // 7 - data << uint32(0x913) << uint32(0x0); // 8 - data << uint32(0x912) << uint32(0x0); // 9 - data << uint32(0x915) << uint32(0x0); // 10 + FillInitialWorldState(data,count, 0x914, 0x0); // 7 + FillInitialWorldState(data,count, 0x913, 0x0); // 8 + FillInitialWorldState(data,count, 0x912, 0x0); // 9 + FillInitialWorldState(data,count, 0x915, 0x0); // 10 break; } + + FillBGWeekendWorldStates(data,count); + + data.put(count_pos,count); // set actual world state amount + GetSession()->SendPacket(&data); - SendBGWeekendWorldStates(); } -void Player::SendBGWeekendWorldStates() +void Player::FillBGWeekendWorldStates(WorldPacket& data, uint32& count) { for(uint32 i = 1; i < sBattlemasterListStore.GetNumRows(); ++i) { @@ -8381,9 +8361,9 @@ void Player::SendBGWeekendWorldStates() if (bl && bl->HolidayWorldStateId) { if (BattleGroundMgr::IsBGWeekend(BattleGroundTypeId(bl->id))) - SendUpdateWorldState(bl->HolidayWorldStateId,1); + FillInitialWorldState(data, count, bl->HolidayWorldStateId, 1); else - SendUpdateWorldState(bl->HolidayWorldStateId,0); + FillInitialWorldState(data, count, bl->HolidayWorldStateId, 0); } } } diff --git a/src/game/Player.h b/src/game/Player.h index 06d8882a8..111108ddc 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1990,7 +1990,7 @@ class MANGOS_DLL_SPEC Player : public Unit void SendInitWorldStates(uint32 zone, uint32 area); void SendUpdateWorldState(uint32 Field, uint32 Value); void SendDirectMessage(WorldPacket *data); - void SendBGWeekendWorldStates(); + void FillBGWeekendWorldStates(WorldPacket& data, uint32& count); void SendAurasForTarget(Unit *target); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 712dad90e..c07bfea53 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "9879" + #define REVISION_NR "9880" #endif // __REVISION_NR_H__