Core/WorldStates: Migrate Wintergrasp worldstates to new system
This commit is contained in:
1 parent
e15fe3378e
commit
8a98cc0205
8 files changed
+150
-131
No files matched your search
@@ -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');
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user