diff options
Diffstat (limited to 'src/server/scripts/Battlefield/BattlefieldWG.cpp')
-rw-r--r-- | src/server/scripts/Battlefield/BattlefieldWG.cpp | 97 |
1 files changed, 20 insertions, 77 deletions
diff --git a/src/server/scripts/Battlefield/BattlefieldWG.cpp b/src/server/scripts/Battlefield/BattlefieldWG.cpp index 85dd74769e8..fcf9d6c3dc8 100644 --- a/src/server/scripts/Battlefield/BattlefieldWG.cpp +++ b/src/server/scripts/Battlefield/BattlefieldWG.cpp @@ -438,45 +438,30 @@ bool BattlefieldWG::SetupBattlefield() m_Data32.resize(BATTLEFIELD_WG_DATA_MAX); - m_saveTimer = 60000; - // Init Graveyards SetGraveyardNumber(BATTLEFIELD_WG_GRAVEYARD_MAX); // Load from db - if (sWorld->getWorldState(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE) == 0 - && sWorld->getWorldState(WS_BATTLEFIELD_WG_DEFENDER) == 0 - && sWorld->getWorldState(ClockWorldState[0]) == 0) + if (sWorldStateMgr->GetValue(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE, m_Map) == 0 + && sWorldStateMgr->GetValue(ClockWorldState[0], m_Map) < GameTime::GetGameTime()) { - 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); + sWorldStateMgr->SetValueAndSaveInDb(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE, 0, false, m_Map); + sWorldStateMgr->SetValueAndSaveInDb(WS_BATTLEFIELD_WG_DEFENDER, urand(0, 1), false, m_Map); + sWorldStateMgr->SetValueAndSaveInDb(ClockWorldState[0], GameTime::GetGameTime() + m_NoWarBattleTime / IN_MILLISECONDS, false, m_Map); } - m_isActive = sWorld->getWorldState(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE) == 0; - m_DefenderTeam = TeamId(sWorld->getWorldState(WS_BATTLEFIELD_WG_DEFENDER)); + m_isActive = sWorldStateMgr->GetValue(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE, m_Map) == 0; + m_DefenderTeam = TeamId(sWorldStateMgr->GetValue(WS_BATTLEFIELD_WG_DEFENDER, m_Map)); - m_Timer = sWorld->getWorldState(ClockWorldState[0]); + m_Timer = sWorldStateMgr->GetValue(ClockWorldState[0], m_Map) - GameTime::GetGameTime(); if (m_isActive) { m_isActive = false; m_Timer = m_RestartAfterCrash; } - auto loadSavedWorldState = [&](int32 id) - { - sWorldStateMgr->SetValue(id, sWorld->getWorldState(id), false, m_Map); - }; - - loadSavedWorldState(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE); - loadSavedWorldState(WS_BATTLEFIELD_WG_DEFENDER); sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_ATTACKER, GetAttackerTeam(), false, m_Map); - sWorldStateMgr->SetValue(ClockWorldState[0], GameTime::GetGameTime() + m_Timer / IN_MILLISECONDS, false, m_Map); sWorldStateMgr->SetValue(ClockWorldState[1], GameTime::GetGameTime() + m_Timer / IN_MILLISECONDS, false, 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++) { @@ -553,31 +538,6 @@ bool BattlefieldWG::SetupBattlefield() return true; } -bool BattlefieldWG::Update(uint32 diff) -{ - bool m_return = Battlefield::Update(diff); - if (m_saveTimer <= diff) - { - 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); - 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 - m_saveTimer -= diff; - - return m_return; -} - void BattlefieldWG::OnBattleStart() { // Spawn titan relic @@ -593,10 +553,10 @@ void BattlefieldWG::OnBattleStart() TC_LOG_ERROR("bg.battlefield", "WG: Failed to spawn titan relic."); sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_ATTACKER, GetAttackerTeam(), false, m_Map); - sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_DEFENDER, GetDefenderTeam(), false, m_Map); - sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE, 0, false, m_Map); + sWorldStateMgr->SetValueAndSaveInDb(WS_BATTLEFIELD_WG_DEFENDER, GetDefenderTeam(), false, m_Map); + sWorldStateMgr->SetValueAndSaveInDb(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE, 0, false, m_Map); sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_SHOW_TIME_BATTLE_END, 1, false, m_Map); - sWorldStateMgr->SetValue(ClockWorldState[0], GameTime::GetGameTime() + m_Timer / IN_MILLISECONDS, false, m_Map); + sWorldStateMgr->SetValueAndSaveInDb(ClockWorldState[0], GameTime::GetGameTime() + m_Timer / IN_MILLISECONDS, false, m_Map); // Update tower visibility and update faction for (auto itr = CanonList.begin(); itr != CanonList.end(); ++itr) @@ -690,10 +650,11 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) else worldStateId = GetDefenderTeam() == TEAM_HORDE ? WS_BATTLEFIELD_WG_ATTACKED_H : WS_BATTLEFIELD_WG_ATTACKED_A; - sWorldStateMgr->SetValue(worldStateId, sWorldStateMgr->GetValue(worldStateId, m_Map) + 1, false, m_Map); + sWorldStateMgr->SetValueAndSaveInDb(worldStateId, sWorldStateMgr->GetValue(worldStateId, m_Map) + 1, false, m_Map); } - sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE, 1, false, m_Map); + sWorldStateMgr->SetValueAndSaveInDb(WS_BATTLEFIELD_WG_DEFENDER, GetDefenderTeam(), false, m_Map); + sWorldStateMgr->SetValueAndSaveInDb(WS_BATTLEFIELD_WG_SHOW_TIME_NEXT_BATTLE, 1, false, m_Map); sWorldStateMgr->SetValue(WS_BATTLEFIELD_WG_SHOW_TIME_BATTLE_END, 0, false, m_Map); sWorldStateMgr->SetValue(ClockWorldState[1], GameTime::GetGameTime() + m_Timer / IN_MILLISECONDS, false, m_Map); @@ -722,13 +683,6 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) if (GameObject* portal = GetGameObject(*itr)) portal->SetRespawnTime(RESPAWN_ONE_DAY); - // Saving data - for (BfWGGameObjectBuilding* building : BuildingsInZone) - building->Save(); - - for (WintergraspWorkshop* workshop : Workshops) - workshop->Save(); - for (auto itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(*itr)) @@ -1421,7 +1375,7 @@ void BfWGGameObjectBuilding::Rebuild() // Update worldstate _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT - (_teamControl * 3)); - sWorldStateMgr->SetValue(_worldState, _state, false, _wg->GetMap()); + sWorldStateMgr->SetValueAndSaveInDb(_worldState, _state, false, _wg->GetMap()); } UpdateCreatureAndGo(); build->SetFaction(WintergraspFaction[_teamControl]); @@ -1444,7 +1398,7 @@ void BfWGGameObjectBuilding::Damaged() { // Update worldstate _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE - (_teamControl * 3)); - sWorldStateMgr->SetValue(_worldState, _state, false, _wg->GetMap()); + sWorldStateMgr->SetValueAndSaveInDb(_worldState, _state, false, _wg->GetMap()); // Send warning message if (_staticTowerInfo) @@ -1468,7 +1422,7 @@ void BfWGGameObjectBuilding::Destroyed() { // Update worldstate _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY - (_teamControl * 3)); - sWorldStateMgr->SetValue(_worldState, _state, false, _wg->GetMap()); + sWorldStateMgr->SetValueAndSaveInDb(_worldState, _state, false, _wg->GetMap()); // Warn players if (_staticTowerInfo) @@ -1522,8 +1476,7 @@ void BfWGGameObjectBuilding::Init(GameObject* go) break; } - _state = WintergraspGameObjectState(sWorld->getWorldState(_worldState)); - sWorldStateMgr->SetValue(_worldState, _state, false, _wg->GetMap()); + _state = WintergraspGameObjectState(sWorldStateMgr->GetValue(_worldState, _wg->GetMap())); switch (_state) { case BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_INTACT: @@ -1741,11 +1694,6 @@ void BfWGGameObjectBuilding::UpdateTurretAttack(bool disable) } } -void BfWGGameObjectBuilding::Save() -{ - sWorld->setWorldState(_worldState, _state); -} - WintergraspWorkshop::WintergraspWorkshop(BattlefieldWG* wg, uint8 type) { ASSERT(wg && type < WG_MAX_WORKSHOP); @@ -1776,7 +1724,7 @@ void WintergraspWorkshop::GiveControlTo(TeamId teamId, bool init /*= false*/) { // Updating worldstate _state = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT; - sWorldStateMgr->SetValue(_staticInfo->WorldStateId, _state, false, _wg->GetMap()); + sWorldStateMgr->SetValueAndSaveInDb(_staticInfo->WorldStateId, _state, false, _wg->GetMap()); // Warning message if (!init) @@ -1794,7 +1742,7 @@ void WintergraspWorkshop::GiveControlTo(TeamId teamId, bool init /*= false*/) { // Update worldstate _state = BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT; - sWorldStateMgr->SetValue(_staticInfo->WorldStateId, _state, false, _wg->GetMap()); + sWorldStateMgr->SetValueAndSaveInDb(_staticInfo->WorldStateId, _state, false, _wg->GetMap()); // Warning message if (!init) @@ -1821,11 +1769,6 @@ void WintergraspWorkshop::UpdateGraveyardAndWorkshop() GiveControlTo(_wg->GetDefenderTeam(), true); } -void WintergraspWorkshop::Save() -{ - sWorld->setWorldState(_staticInfo->WorldStateId, _state); -} - class Battlefield_wintergrasp : public BattlefieldScript { public: |