diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-06-26 19:16:30 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-06-26 19:16:30 +0200 |
commit | 6285033ed5ba8f67330eca40c1ae4840882a98d3 (patch) | |
tree | 59d358dea46458ac580d993be0e946b7e57a427a | |
parent | f874f34f04228a41133cd7ce5621e3c637bbf48a (diff) |
Core/WorldStates: Migrate Wintergrasp worldstates to new system
-rw-r--r-- | sql/updates/world/master/2022_06_26_01_world.sql | 54 | ||||
-rw-r--r-- | src/server/game/Battlefield/Battlefield.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Battlefield/Battlefield.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 40 | ||||
-rw-r--r-- | src/server/scripts/Battlefield/BattlefieldTB.cpp | 3 | ||||
-rw-r--r-- | src/server/scripts/Battlefield/BattlefieldWG.cpp | 143 | ||||
-rw-r--r-- | src/server/scripts/Battlefield/BattlefieldWG.h | 16 |
8 files changed, 152 insertions, 125 deletions
diff --git a/sql/updates/world/master/2022_06_26_01_world.sql b/sql/updates/world/master/2022_06_26_01_world.sql new file mode 100644 index 00000000000..84c54e33a8e --- /dev/null +++ b/sql/updates/world/master/2022_06_26_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 4a0a3d25137..3e9d81ca6d3 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -349,11 +349,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 517382fd2e6..ac535fbe49a 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -250,6 +250,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; } uint64 GetQueueId() const; 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 ac8228c2be4..56380e7adf7 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -9759,10 +9759,6 @@ void Player::SendInitWorldStates(uint32 zoneId, uint32 areaId) packet.Worldstates.emplace_back(4882, 0); // WORLD_STATE_HOR_WAVE_COUNT } break; - case AREA_WINTERGRASP: // Wintergrasp - if (battlefield && battlefield->GetTypeId() == BATTLEFIELD_WG) - battlefield->FillInitialWorldStates(packet); - break; case 3805: // Zul Aman if (instance) instance->FillInitialWorldStates(packet); @@ -9832,16 +9828,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 2231843775e..71cb2db2d29 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -7747,26 +7747,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 effbc045240..4d55ea35d85 100644 --- a/src/server/scripts/Battlefield/BattlefieldTB.cpp +++ b/src/server/scripts/Battlefield/BattlefieldTB.cpp @@ -36,6 +36,7 @@ #include "ScriptMgr.h" #include "TemporarySummon.h" #include "World.h" +#include "WorldStateMgr.h" #include "WorldStatePackets.h" BattlefieldTB::~BattlefieldTB() { } @@ -442,6 +443,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 ba7c3e4ca51..deff3280c15 100644 --- a/src/server/scripts/Battlefield/BattlefieldWG.cpp +++ b/src/server/scripts/Battlefield/BattlefieldWG.cpp @@ -38,6 +38,7 @@ #include "TemporarySummon.h" #include "World.h" #include "WorldSession.h" +#include "WorldStateMgr.h" #include "WorldStatePackets.h" struct BfWGCoordGY @@ -444,15 +445,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]); @@ -462,10 +464,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++) { @@ -547,13 +559,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 @@ -576,6 +593,12 @@ 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) { @@ -659,12 +682,22 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) building->RebuildGate(); } - // 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) @@ -1149,42 +1182,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 < PVP_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()) @@ -1231,7 +1228,8 @@ 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 @@ -1289,10 +1287,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() @@ -1428,7 +1426,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]); @@ -1451,7 +1449,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) @@ -1475,7 +1473,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) @@ -1530,6 +1528,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: @@ -1747,11 +1746,6 @@ void BfWGGameObjectBuilding::UpdateTurretAttack(bool disable) } } -void BfWGGameObjectBuilding::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& packet) -{ - packet.Worldstates.emplace_back(_worldState, _state); -} - void BfWGGameObjectBuilding::Save() { sWorld->setWorldState(_worldState, _state); @@ -1787,7 +1781,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) @@ -1805,7 +1799,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) @@ -1832,11 +1826,6 @@ void WintergraspWorkshop::UpdateGraveyardAndWorkshop() GiveControlTo(_wg->GetDefenderTeam(), true); } -void WintergraspWorkshop::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& packet) -{ - packet.Worldstates.emplace_back(_staticInfo->WorldStateId, _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 4e9ecb7cb7a..d2593b5e569 100644 --- a/src/server/scripts/Battlefield/BattlefieldWG.h +++ b/src/server/scripts/Battlefield/BattlefieldWG.h @@ -87,10 +87,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 @@ -236,7 +232,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; @@ -329,8 +325,10 @@ class BattlefieldWG : public Battlefield void UpdateVehicleCountWG(); void UpdateCounterVehicle(bool init); - void SendInitWorldStatesToAll() override; - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& packet) 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; @@ -539,8 +537,6 @@ public: void UpdateTurretAttack(bool disable); - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& packet); - void Save(); }; @@ -566,8 +562,6 @@ public: void UpdateGraveyardAndWorkshop(); - void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& packet); - void Save(); }; |