aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Battlefield/BattlefieldWG.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts/Battlefield/BattlefieldWG.cpp')
-rw-r--r--src/server/scripts/Battlefield/BattlefieldWG.cpp97
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: