From 8a98cc02054e7c5274ae22a868f60837e3e9b886 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 9 Oct 2022 01:15:02 +0200 Subject: [PATCH] Core/WorldStates: Migrate Wintergrasp worldstates to new system --- .../world/4.3.4/2022_10_09_01_world.sql | 54 +++++++ src/server/game/Battlefield/Battlefield.cpp | 5 +- src/server/game/Battlefield/Battlefield.h | 2 + src/server/game/Entities/Player/Player.cpp | 19 --- src/server/game/Miscellaneous/SharedDefines.h | 40 ++--- .../scripts/Battlefield/BattlefieldTB.cpp | 3 + .../scripts/Battlefield/BattlefieldWG.cpp | 142 ++++++++---------- .../scripts/Battlefield/BattlefieldWG.h | 16 +- 8 files changed, 150 insertions(+), 131 deletions(-) create mode 100644 sql/updates/world/4.3.4/2022_10_09_01_world.sql diff --git a/sql/updates/world/4.3.4/2022_10_09_01_world.sql b/sql/updates/world/4.3.4/2022_10_09_01_world.sql new file mode 100644 index 0000000000..84c54e33a8 --- /dev/null +++ b/sql/updates/world/4.3.4/2022_10_09_01_world.sql @@ -0,0 +1,54 @@ +DELETE FROM `world_state` WHERE `ID` IN (3490,3491,3680,3681,3698,3699,3700,3701,3702,3703,3704,3705,3706,3710,3711,3712,3713,3714,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3781,3801,3802,3803,4022,4023,4024,4025,4354); +INSERT INTO `world_state` (`ID`,`DefaultValue`,`MapIDs`,`Comment`) VALUES +(3490,0,'571,2118','Wintergrasp - Number of Horde vehicles'), +(3491,0,'571,2118','Wintergrasp - Horde vehicle limit'), +(3680,0,'571,2118','Wintergrasp - Number of Alliance vehicles'), +(3681,0,'571,2118','Wintergrasp - Alliance vehicle limit'), +(3698,0,'571,2138','Wintergrasp - Workshop'), +(3699,0,'571,2138','Wintergrasp - Workshop'), +(3700,0,'571,2138','Wintergrasp - Workshop'), +(3701,0,'571,2138','Wintergrasp - Workshop'), +(3702,0,'571,2138','Wintergrasp - Workshop'), +(3703,0,'571,2138','Wintergrasp - Workshop'), +(3704,0,'571,2138','Wintergrasp - Tower'), +(3705,0,'571,2138','Wintergrasp - Tower'), +(3706,0,'571,2138','Wintergrasp - Tower'), +(3710,0,'571,2118','Wintergrasp - Show timer to battle end'), +(3711,0,'571,2138','Wintergrasp - Keep tower'), +(3712,0,'571,2138','Wintergrasp - Keep tower'), +(3713,0,'571,2138','Wintergrasp - Keep tower'), +(3714,0,'571,2138','Wintergrasp - Keep tower'), +(3749,0,'571,2119','Wintergrasp - Wall'), +(3750,0,'571,2120','Wintergrasp - Wall'), +(3751,0,'571,2121','Wintergrasp - Wall'), +(3752,0,'571,2122','Wintergrasp - Wall'), +(3753,0,'571,2123','Wintergrasp - Wall'), +(3754,0,'571,2124','Wintergrasp - Wall'), +(3755,0,'571,2125','Wintergrasp - Wall'), +(3756,0,'571,2126','Wintergrasp - Wall'), +(3757,0,'571,2127','Wintergrasp - Wall'), +(3758,0,'571,2128','Wintergrasp - Wall'), +(3759,0,'571,2129','Wintergrasp - Wall'), +(3760,0,'571,2130','Wintergrasp - Wall'), +(3761,0,'571,2131','Wintergrasp - Wall'), +(3762,0,'571,2132','Wintergrasp - Wall'), +(3763,0,'571,2138','Wintergrasp - Keep gate'), +(3764,0,'571,2133','Wintergrasp - Wall'), +(3765,0,'571,2134','Wintergrasp - Wall'), +(3766,0,'571,2134','Wintergrasp - Wall'), +(3767,0,'571,2135','Wintergrasp - Wall'), +(3768,0,'571,2134','Wintergrasp - Wall'), +(3769,0,'571,2136','Wintergrasp - Wall'), +(3770,0,'571,2134','Wintergrasp - Wall'), +(3771,0,'571,2134','Wintergrasp - Wall'), +(3772,0,'571,2138','Wintergrasp - Wall'), +(3773,0,'571,2138','Wintergrasp - Relic gate'), +(3781,0,'571,2118','Wintergrasp - Battle end time'), +(3801,0,'571,2118','Wintergrasp - Show timer for next battle'), +(3802,0,'571,2118','Wintergrasp - Defender'), +(3803,0,'571,2118','Wintergrasp - Attacker'), +(4022,0,'571,2118','Wintergrasp - Number of Horde wins as attacker'), +(4023,0,'571,2118','Wintergrasp - Number of Alliance wins as attacker'), +(4024,0,'571,2118','Wintergrasp - Number of Horde wins as defender'), +(4025,0,'571,2118','Wintergrasp - Number of Alliance wins as defender'), +(4354,0,'571,2118','Wintergrasp - Next battle start time'); diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 90e84bbce7..6160073fb0 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -346,11 +346,10 @@ void Battlefield::EndBattle(bool endByTimer) if (!endByTimer) SetDefenderTeam(GetAttackerTeam()); - OnBattleEnd(endByTimer); - // Reset battlefield timer m_Timer = m_NoWarBattleTime; - SendInitWorldStatesToAll(); + + OnBattleEnd(endByTimer); } void Battlefield::DoPlaySoundToAll(uint32 SoundID) diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index d968c92cbd..f814a20baf 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -247,6 +247,8 @@ class TC_GAME_API Battlefield : public ZoneScript uint32 GetTypeId() const { return m_TypeId; } uint32 GetZoneId() const { return m_ZoneId; } + uint32 GetMapId() const { return m_MapId; } + Map* GetMap() const { return m_Map; } ObjectGuid GetGUID() { return m_Guid; } void TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2 = 0); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index aac21e1c50..e3c662915d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -9407,16 +9407,7 @@ void Player::SendInitWorldStates(uint32 zoneId, uint32 areaId) if (bf && bf->GetTypeId() == BATTLEFIELD_TB) bf->FillInitialWorldStates(packet); break; - // Wintergrasp - case AREA_WINTERGRASP: - if (bf && bf->GetTypeId() == BATTLEFIELD_WG) - bf->FillInitialWorldStates(packet); - [[fallthrough]]; default: - packet.Worldstates.emplace_back(0x914, 0x0); // 7 - packet.Worldstates.emplace_back(0x913, 0x0); // 8 - packet.Worldstates.emplace_back(0x912, 0x0); // 9 - packet.Worldstates.emplace_back(0x915, 0x0); // 10 break; } @@ -9443,16 +9434,6 @@ void Player::SendBGWeekendWorldStates() const void Player::SendBattlefieldWorldStates() const { /// Send misc stuff that needs to be sent on every login, like the battle timers. - if (sWorld->getBoolConfig(CONFIG_WINTERGRASP_ENABLE)) - { - if (Battlefield* wg = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG)) - { - SendUpdateWorldState(WS_BATTLEFIELD_WG_ACTIVE, wg->IsWarTime() ? 0 : 1); - uint32 timer = wg->IsWarTime() ? 0 : (wg->GetTimer() / 1000); // 0 - Time to next battle - SendUpdateWorldState(WS_BATTLEFIELD_WG_TIME_NEXT_BATTLE, uint32(GameTime::GetGameTime() + timer)); - } - } - if (sWorld->getBoolConfig(CONFIG_TOLBARAD_ENABLE)) { if (Battlefield* tb = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_TB)) diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 848dbd1f38..18efcb9fd5 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -4359,26 +4359,26 @@ enum AreaId : uint32 enum WorldState : uint32 { - WS_BATTLEFIELD_WG_VEHICLE_H = 3490, - WS_BATTLEFIELD_WG_MAX_VEHICLE_H = 3491, - WS_BATTLEFIELD_WG_VEHICLE_A = 3680, - WS_BATTLEFIELD_WG_MAX_VEHICLE_A = 3681, - WS_BATTLEFIELD_WG_WORKSHOP_K_W = 3698, - WS_BATTLEFIELD_WG_WORKSHOP_K_E = 3699, - WS_BATTLEFIELD_WG_WORKSHOP_NW = 3700, - WS_BATTLEFIELD_WG_WORKSHOP_NE = 3701, - WS_BATTLEFIELD_WG_WORKSHOP_SW = 3702, - WS_BATTLEFIELD_WG_WORKSHOP_SE = 3703, - WS_BATTLEFIELD_WG_SHOW_WORLDSTATE = 3710, - WS_BATTLEFIELD_WG_TIME_BATTLE_END = 3781, - WS_BATTLEFIELD_WG_ACTIVE = 3801, - WS_BATTLEFIELD_WG_DEFENDER = 3802, - WS_BATTLEFIELD_WG_ATTACKER = 3803, - WS_BATTLEFIELD_WG_ATTACKED_H = 4022, - WS_BATTLEFIELD_WG_ATTACKED_A = 4023, - WS_BATTLEFIELD_WG_DEFENDED_H = 4024, - WS_BATTLEFIELD_WG_DEFENDED_A = 4025, - WS_BATTLEFIELD_WG_TIME_NEXT_BATTLE = 4354, + WS_BATTLEFIELD_WG_VEHICLE_H = 3490, + WS_BATTLEFIELD_WG_MAX_VEHICLE_H = 3491, + WS_BATTLEFIELD_WG_VEHICLE_A = 3680, + WS_BATTLEFIELD_WG_MAX_VEHICLE_A = 3681, + WS_BATTLEFIELD_WG_WORKSHOP_K_W = 3698, + WS_BATTLEFIELD_WG_WORKSHOP_K_E = 3699, + WS_BATTLEFIELD_WG_WORKSHOP_NW = 3700, + WS_BATTLEFIELD_WG_WORKSHOP_NE = 3701, + WS_BATTLEFIELD_WG_WORKSHOP_SW = 3702, + WS_BATTLEFIELD_WG_WORKSHOP_SE = 3703, + WS_BATTLEFIELD_WG_SHOW_TIME_BATTLE_END = 3710, + WS_BATTLEFIELD_WG_TIME_BATTLE_END = 3781, + WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE = 3801, + WS_BATTLEFIELD_WG_DEFENDER = 3802, + WS_BATTLEFIELD_WG_ATTACKER = 3803, + WS_BATTLEFIELD_WG_ATTACKED_H = 4022, + WS_BATTLEFIELD_WG_ATTACKED_A = 4023, + WS_BATTLEFIELD_WG_DEFENDED_H = 4024, + WS_BATTLEFIELD_WG_DEFENDED_A = 4025, + WS_BATTLEFIELD_WG_TIME_NEXT_BATTLE = 4354, WS_BATTLEFIELD_TB_ALLIANCE_CONTROLS_SHOW = 5385, WS_BATTLEFIELD_TB_HORDE_CONTROLS_SHOW = 5384, diff --git a/src/server/scripts/Battlefield/BattlefieldTB.cpp b/src/server/scripts/Battlefield/BattlefieldTB.cpp index 51b0e4cf31..62bce6498d 100644 --- a/src/server/scripts/Battlefield/BattlefieldTB.cpp +++ b/src/server/scripts/Battlefield/BattlefieldTB.cpp @@ -34,6 +34,7 @@ #include "Random.h" #include "ScriptMgr.h" #include "World.h" +#include "WorldStateMgr.h" #include "WorldStatePackets.h" const uint32 TBFactions[BG_TEAMS_COUNT] = { 1610, 1732 }; @@ -672,6 +673,8 @@ void BattlefieldTB::OnBattleEnd(bool endByTimer) warnedFiveMinutes = false; warnedTwoMinutes = false; warnedOneMinute = false; + + sWorldStateMgr->SetValue(WS_BATTLEFIELD_TB_TIME_NEXT_BATTLE, GameTime::GetGameTime() + m_NoWarBattleTime / IN_MILLISECONDS, m_Map); }; void BattlefieldTB::UpdateNPCsAndGameObjects() diff --git a/src/server/scripts/Battlefield/BattlefieldWG.cpp b/src/server/scripts/Battlefield/BattlefieldWG.cpp index 51985fc5e1..92202af752 100644 --- a/src/server/scripts/Battlefield/BattlefieldWG.cpp +++ b/src/server/scripts/Battlefield/BattlefieldWG.cpp @@ -39,6 +39,7 @@ #include "TemporarySummon.h" #include "World.h" #include "WorldSession.h" +#include "WorldStateMgr.h" #include "WorldStatePackets.h" struct BfWGCoordGY @@ -445,15 +446,16 @@ bool BattlefieldWG::SetupBattlefield() SetGraveyardNumber(BATTLEFIELD_WG_GRAVEYARD_MAX); // Load from db - if ((sWorld->getWorldState(WS_BATTLEFIELD_WG_ACTIVE) == 0) && (sWorld->getWorldState(WS_BATTLEFIELD_WG_DEFENDER) == 0) - && (sWorld->getWorldState(ClockWorldState[0]) == 0)) + if (sWorld->getWorldState(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE) == 0 + && sWorld->getWorldState(WS_BATTLEFIELD_WG_DEFENDER) == 0 + && sWorld->getWorldState(ClockWorldState[0]) == 0) { - sWorld->setWorldState(WS_BATTLEFIELD_WG_ACTIVE, uint64(false)); - sWorld->setWorldState(WS_BATTLEFIELD_WG_DEFENDER, uint64(urand(0, 1))); - sWorld->setWorldState(ClockWorldState[0], uint64(m_NoWarBattleTime)); + sWorld->setWorldState(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE, 0); + sWorld->setWorldState(WS_BATTLEFIELD_WG_DEFENDER, urand(0, 1)); + sWorld->setWorldState(ClockWorldState[0], m_NoWarBattleTime); } - m_isActive = sWorld->getWorldState(WS_BATTLEFIELD_WG_ACTIVE) != 0; + m_isActive = sWorld->getWorldState(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE) == 0; m_DefenderTeam = TeamId(sWorld->getWorldState(WS_BATTLEFIELD_WG_DEFENDER)); m_Timer = sWorld->getWorldState(ClockWorldState[0]); @@ -463,10 +465,20 @@ bool BattlefieldWG::SetupBattlefield() m_Timer = m_RestartAfterCrash; } - SetData(BATTLEFIELD_WG_DATA_WON_A, uint32(sWorld->getWorldState(WS_BATTLEFIELD_WG_ATTACKED_A))); - SetData(BATTLEFIELD_WG_DATA_DEF_A, uint32(sWorld->getWorldState(WS_BATTLEFIELD_WG_DEFENDED_A))); - SetData(BATTLEFIELD_WG_DATA_WON_H, uint32(sWorld->getWorldState(WS_BATTLEFIELD_WG_ATTACKED_H))); - SetData(BATTLEFIELD_WG_DATA_DEF_H, uint32(sWorld->getWorldState(WS_BATTLEFIELD_WG_DEFENDED_H))); + auto loadSavedWorldState = [&](int32 id) + { + sWorldStateMgr->SetValue(id, sWorld->getWorldState(id), m_Map); + }; + + loadSavedWorldState(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE); + loadSavedWorldState(WS_BATTLEFIELD_WG_DEFENDER); + sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_ATTACKER, GetAttackerTeam(), m_Map); + sWorldStateMgr->SetValue(ClockWorldState[0], GameTime::GetGameTime() + m_Timer / IN_MILLISECONDS, m_Map); + sWorldStateMgr->SetValue(ClockWorldState[1], GameTime::GetGameTime() + m_Timer / IN_MILLISECONDS, m_Map); + loadSavedWorldState(WS_BATTLEFIELD_WG_ATTACKED_A); + loadSavedWorldState(WS_BATTLEFIELD_WG_DEFENDED_A); + loadSavedWorldState(WS_BATTLEFIELD_WG_ATTACKED_H); + loadSavedWorldState(WS_BATTLEFIELD_WG_DEFENDED_H); for (uint8 i = 0; i < BATTLEFIELD_WG_GRAVEYARD_MAX; i++) { @@ -548,13 +560,18 @@ bool BattlefieldWG::Update(uint32 diff) bool m_return = Battlefield::Update(diff); if (m_saveTimer <= diff) { - sWorld->setWorldState(WS_BATTLEFIELD_WG_ACTIVE, m_isActive); + auto saveWorldState = [&](int32 id) + { + sWorld->setWorldState(id, sWorldStateMgr->GetValue(id, m_Map)); + }; + + sWorld->setWorldState(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE, !m_isActive); sWorld->setWorldState(WS_BATTLEFIELD_WG_DEFENDER, m_DefenderTeam); sWorld->setWorldState(ClockWorldState[0], m_Timer); - sWorld->setWorldState(WS_BATTLEFIELD_WG_ATTACKED_A, GetData(BATTLEFIELD_WG_DATA_WON_A)); - sWorld->setWorldState(WS_BATTLEFIELD_WG_DEFENDED_A, GetData(BATTLEFIELD_WG_DATA_DEF_A)); - sWorld->setWorldState(WS_BATTLEFIELD_WG_ATTACKED_H, GetData(BATTLEFIELD_WG_DATA_WON_H)); - sWorld->setWorldState(WS_BATTLEFIELD_WG_DEFENDED_H, GetData(BATTLEFIELD_WG_DATA_DEF_H)); + saveWorldState(WS_BATTLEFIELD_WG_ATTACKED_A); + saveWorldState(WS_BATTLEFIELD_WG_DEFENDED_A); + saveWorldState(WS_BATTLEFIELD_WG_ATTACKED_H); + saveWorldState(WS_BATTLEFIELD_WG_DEFENDED_H); m_saveTimer = 60 * IN_MILLISECONDS; } else @@ -577,6 +594,11 @@ void BattlefieldWG::OnBattleStart() else TC_LOG_ERROR("bg.battlefield", "WG: Failed to spawn titan relic."); + sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_ATTACKER, GetAttackerTeam(), m_Map); + sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_DEFENDER, GetDefenderTeam(), m_Map); + sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE, 0, m_Map); + sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_SHOW_TIME_BATTLE_END, 1, m_Map); + sWorldStateMgr->SetValue(ClockWorldState[0], GameTime::GetGameTime() + m_Timer / IN_MILLISECONDS, m_Map); // Update tower visibility and update faction for (auto itr = CanonList.begin(); itr != CanonList.end(); ++itr) @@ -655,12 +677,22 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) relic->RemoveFromWorld(); m_titansRelicGUID.Clear(); - // successful defense - if (endByTimer) - UpdateData(GetDefenderTeam() == TEAM_HORDE ? BATTLEFIELD_WG_DATA_DEF_H : BATTLEFIELD_WG_DATA_DEF_A, 1); - // successful attack (note that teams have already been swapped, so defender team is the one who won) - else - UpdateData(GetDefenderTeam() == TEAM_HORDE ? BATTLEFIELD_WG_DATA_WON_H : BATTLEFIELD_WG_DATA_WON_A, 1); + // update win statistics + { + int32 worldStateId; + // successful defense + if (endByTimer) + worldStateId = GetDefenderTeam() == TEAM_HORDE ? WS_BATTLEFIELD_WG_DEFENDED_H : WS_BATTLEFIELD_WG_DEFENDED_A; + // successful attack (note that teams have already been swapped, so defender team is the one who won) + else + worldStateId = GetDefenderTeam() == TEAM_HORDE ? WS_BATTLEFIELD_WG_ATTACKED_H : WS_BATTLEFIELD_WG_ATTACKED_A; + + sWorldStateMgr->SetValue(worldStateId, sWorldStateMgr->GetValue(worldStateId, m_Map) + 1, m_Map); + } + + sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE, 1, m_Map); + sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_SHOW_TIME_BATTLE_END, 0, m_Map); + sWorldStateMgr->SetValue(ClockWorldState[1], GameTime::GetGameTime() + m_Timer / IN_MILLISECONDS, m_Map); // Remove turret for (auto itr = CanonList.begin(); itr != CanonList.end(); ++itr) @@ -1141,43 +1173,6 @@ uint32 BattlefieldWG::GetData(uint32 data) const return Battlefield::GetData(data); } - -void BattlefieldWG::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& packet) -{ - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_DEFENDED_A, GetData(BATTLEFIELD_WG_DATA_DEF_A)); - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_DEFENDED_H, GetData(BATTLEFIELD_WG_DATA_DEF_H)); - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_ATTACKED_A, GetData(BATTLEFIELD_WG_DATA_WON_A)); - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_ATTACKED_H, GetData(BATTLEFIELD_WG_DATA_WON_H)); - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_ATTACKER, GetAttackerTeam()); - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_DEFENDER, GetDefenderTeam()); - - // Note: cleanup these two, their names look awkward - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_ACTIVE, IsWarTime() ? 0 : 1); - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_SHOW_WORLDSTATE, IsWarTime() ? 1 : 0); - - for (uint32 itr = 0; itr < 2; ++itr) - packet.Worldstates.emplace_back(ClockWorldState[itr], int32(GameTime::GetGameTime()) + int32(m_Timer) / int32(1000)); - - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_VEHICLE_H, GetData(BATTLEFIELD_WG_DATA_VEHICLE_H)); - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_MAX_VEHICLE_H, GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_H)); - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_VEHICLE_A, GetData(BATTLEFIELD_WG_DATA_VEHICLE_A)); - packet.Worldstates.emplace_back(WS_BATTLEFIELD_WG_MAX_VEHICLE_A, GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A)); - - for (BfWGGameObjectBuilding* building : BuildingsInZone) - building->FillInitialWorldStates(packet); - - for (WintergraspWorkshop* workshop : Workshops) - workshop->FillInitialWorldStates(packet); -} - -void BattlefieldWG::SendInitWorldStatesToAll() -{ - for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) - for (auto itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) - if (Player* player = ObjectAccessor::FindPlayer(*itr)) - SendInitWorldStatesTo(player); -} - void BattlefieldWG::BrokenWallOrTower(TeamId team, BfWGGameObjectBuilding* building) { if (team == GetDefenderTeam()) @@ -1224,7 +1219,7 @@ void BattlefieldWG::UpdatedDestroyedTowerCount(TeamId team) m_Timer = 0; else m_Timer -= 600000; - SendInitWorldStatesToAll(); + sWorldStateMgr->SetValue(ClockWorldState[0], GameTime::GetGameTime() + m_Timer / IN_MILLISECONDS, m_Map); } } else // Keep tower @@ -1282,10 +1277,10 @@ void BattlefieldWG::UpdateDamagedTowerCount(TeamId team) // Update vehicle count WorldState to player void BattlefieldWG::UpdateVehicleCountWG() { - SendUpdateWorldState(WS_BATTLEFIELD_WG_VEHICLE_H, GetData(BATTLEFIELD_WG_DATA_VEHICLE_H)); - SendUpdateWorldState(WS_BATTLEFIELD_WG_MAX_VEHICLE_H, GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_H)); - SendUpdateWorldState(WS_BATTLEFIELD_WG_VEHICLE_A, GetData(BATTLEFIELD_WG_DATA_VEHICLE_A)); - SendUpdateWorldState(WS_BATTLEFIELD_WG_MAX_VEHICLE_A, GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A)); + sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_VEHICLE_H, GetData(BATTLEFIELD_WG_DATA_VEHICLE_H), m_Map); + sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_MAX_VEHICLE_H, GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_H), m_Map); + sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_VEHICLE_A, GetData(BATTLEFIELD_WG_DATA_VEHICLE_A), m_Map); + sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_MAX_VEHICLE_A, GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A), m_Map); } void BattlefieldWG::UpdateTenacity() @@ -1421,7 +1416,7 @@ void BfWGGameObjectBuilding::Rebuild() // Update worldstate _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT - (_teamControl * 3)); - _wg->SendUpdateWorldState(_worldState, _state); + sWorldStateMgr->SetValue(_worldState, _state, _wg->GetMap()); } UpdateCreatureAndGo(); build->SetFaction(WintergraspFaction[_teamControl]); @@ -1432,7 +1427,7 @@ void BfWGGameObjectBuilding::Damaged() { // Update worldstate _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE - (_teamControl * 3)); - _wg->SendUpdateWorldState(_worldState, _state); + sWorldStateMgr->SetValue(_worldState, _state, _wg->GetMap()); // Send warning message if (_staticTowerInfo) @@ -1456,7 +1451,7 @@ void BfWGGameObjectBuilding::Destroyed() { // Update worldstate _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY - (_teamControl * 3)); - _wg->SendUpdateWorldState(_worldState, _state); + sWorldStateMgr->SetValue(_worldState, _state, _wg->GetMap()); // Warn players if (_staticTowerInfo) @@ -1511,6 +1506,7 @@ void BfWGGameObjectBuilding::Init(GameObject* go) } _state = WintergraspGameObjectState(sWorld->getWorldState(_worldState)); + sWorldStateMgr->SetValue(_worldState, _state, _wg->GetMap()); switch (_state) { case BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_INTACT: @@ -1728,11 +1724,6 @@ void BfWGGameObjectBuilding::UpdateTurretAttack(bool disable) } } -void BfWGGameObjectBuilding::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - data.Worldstates.emplace_back(uint32(_worldState), uint32(_state)); -} - void BfWGGameObjectBuilding::Save() { sWorld->setWorldState(_worldState, _state); @@ -1768,7 +1759,7 @@ void WintergraspWorkshop::GiveControlTo(TeamId teamId, bool init /*= false*/) { // Updating worldstate _state = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT; - _wg->SendUpdateWorldState(_staticInfo->WorldStateId, _state); + sWorldStateMgr->SetValue(_staticInfo->WorldStateId, _state, _wg->GetMap()); // Warning message if (!init) @@ -1786,7 +1777,7 @@ void WintergraspWorkshop::GiveControlTo(TeamId teamId, bool init /*= false*/) { // Update worldstate _state = BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT; - _wg->SendUpdateWorldState(_staticInfo->WorldStateId, _state); + sWorldStateMgr->SetValue(_staticInfo->WorldStateId, _state, _wg->GetMap()); // Warning message if (!init) @@ -1813,11 +1804,6 @@ void WintergraspWorkshop::UpdateGraveyardAndWorkshop() GiveControlTo(_wg->GetDefenderTeam(), true); } -void WintergraspWorkshop::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) -{ - data.Worldstates.emplace_back(uint32(_staticInfo->WorldStateId), uint32(_state)); -} - void WintergraspWorkshop::Save() { sWorld->setWorldState(_staticInfo->WorldStateId, _state); diff --git a/src/server/scripts/Battlefield/BattlefieldWG.h b/src/server/scripts/Battlefield/BattlefieldWG.h index 3d5f14fb6b..d12644b538 100644 --- a/src/server/scripts/Battlefield/BattlefieldWG.h +++ b/src/server/scripts/Battlefield/BattlefieldWG.h @@ -96,10 +96,6 @@ enum WintergraspData BATTLEFIELD_WG_DATA_MAX_VEHICLE_H, BATTLEFIELD_WG_DATA_VEHICLE_A, BATTLEFIELD_WG_DATA_VEHICLE_H, - BATTLEFIELD_WG_DATA_WON_A, - BATTLEFIELD_WG_DATA_DEF_A, - BATTLEFIELD_WG_DATA_WON_H, - BATTLEFIELD_WG_DATA_DEF_H, BATTLEFIELD_WG_DATA_MAX, BATTLEFIELD_WG_MAPID = 571 // Northrend @@ -245,7 +241,7 @@ class BattlefieldWG : public Battlefield * - Teleport if it needed * - Update worldstate * - Update tenacity - * \param player: Player who accepted invite + * \param player : Player who accepted invite */ void OnPlayerJoinWar(Player* player) override; @@ -338,8 +334,10 @@ class BattlefieldWG : public Battlefield void UpdateVehicleCountWG(); void UpdateCounterVehicle(bool init); - void SendInitWorldStatesToAll() override; - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/) override; + // TODO: delete + void SendInitWorldStatesToAll() override { } + // TODO: delete + void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*packet*/) override { } void HandleKill(Player* killer, Unit* victim) override; void OnUnitDeath(Unit* unit) override; @@ -547,8 +545,6 @@ public: void UpdateTurretAttack(bool disable); - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data); - void Save(); }; @@ -574,8 +570,6 @@ public: void UpdateGraveyardAndWorkshop(); - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& /*data*/); - void Save(); };