aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2022_06_26_01_world.sql54
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp5
-rw-r--r--src/server/game/Battlefield/Battlefield.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp14
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h40
-rw-r--r--src/server/scripts/Battlefield/BattlefieldTB.cpp3
-rw-r--r--src/server/scripts/Battlefield/BattlefieldWG.cpp143
-rw-r--r--src/server/scripts/Battlefield/BattlefieldWG.h16
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();
};