From c1eb91c1c174870026cf4750bafc8d04d182ade0 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 24 Jul 2022 20:11:24 +0200 Subject: Core/WorldStates: Add generic worldstates for team in instance --- src/server/game/Maps/Map.cpp | 14 +++++++++++++- src/server/game/Maps/Map.h | 5 ++--- src/server/game/Miscellaneous/SharedDefines.h | 3 +++ 3 files changed, 18 insertions(+), 4 deletions(-) (limited to 'src/server/game') diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 1810b63d555..fc5fa907d84 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2772,7 +2772,7 @@ template TC_GAME_API void Map::RemoveFromMap(Conversation*, bool); InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty SpawnMode, TeamId InstanceTeam) : Map(id, expiry, InstanceId, SpawnMode), m_resetAfterUnload(false), m_unloadWhenEmpty(false), - i_data(nullptr), i_script_id(0), i_script_team(InstanceTeam), i_scenario(nullptr) + i_data(nullptr), i_script_id(0), i_scenario(nullptr) { //lets initialize visibility distance for dungeons InstanceMap::InitVisibilityDistance(); @@ -2780,6 +2780,9 @@ InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty // the timer is started by default, and stopped when the first player joins // this make sure it gets unloaded if for some reason no player joins m_unloadTimer = std::max(sWorld->getIntConfig(CONFIG_INSTANCE_UNLOAD_DELAY), (uint32)MIN_UNLOAD_DELAY); + + sWorldStateMgr->SetValue(WS_TEAM_IN_INSTANCE_ALLIANCE, InstanceTeam == TEAM_ALLIANCE, false, this); + sWorldStateMgr->SetValue(WS_TEAM_IN_INSTANCE_HORDE, InstanceTeam == TEAM_HORDE, false, this); } InstanceMap::~InstanceMap() @@ -3270,6 +3273,15 @@ uint32 InstanceMap::GetMaxResetDelay() const return mapDiff ? mapDiff->GetRaidDuration() : 0; } +TeamId InstanceMap::GetTeamIdInInstance() const +{ + if (sWorldStateMgr->GetValue(WS_TEAM_IN_INSTANCE_ALLIANCE, this)) + return TEAM_ALLIANCE; + if (sWorldStateMgr->GetValue(WS_TEAM_IN_INSTANCE_HORDE, this)) + return TEAM_HORDE; + return TEAM_NEUTRAL; +} + /* ******* Battleground Instance Maps ******* */ BattlegroundMap::BattlegroundMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty spawnMode) diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index ae34acdd23b..f031b1832fd 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -821,8 +821,8 @@ class TC_GAME_API InstanceMap : public Map bool HasPermBoundPlayers() const; uint32 GetMaxPlayers() const; uint32 GetMaxResetDelay() const; - TeamId GetTeamIdInInstance() const { return i_script_team; } - Team GetTeamInInstance() const { return i_script_team == TEAM_ALLIANCE ? ALLIANCE : HORDE; } + TeamId GetTeamIdInInstance() const; + Team GetTeamInInstance() const { return GetTeamIdInInstance() == TEAM_ALLIANCE ? ALLIANCE : HORDE; } virtual void InitVisibilityDistance() override; @@ -832,7 +832,6 @@ class TC_GAME_API InstanceMap : public Map bool m_unloadWhenEmpty; InstanceScript* i_data; uint32 i_script_id; - TeamId i_script_team; InstanceScenario* i_scenario; }; diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 52c9166f70d..c7d180a375a 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -7750,6 +7750,9 @@ enum WorldState : uint32 WS_CURRENT_PVP_SEASON_ID = 3191, WS_PREVIOUS_PVP_SEASON_ID = 3901, + WS_TEAM_IN_INSTANCE_ALLIANCE = 4485, + WS_TEAM_IN_INSTANCE_HORDE = 4486, + WS_BATTLEFIELD_WG_VEHICLE_H = 3490, WS_BATTLEFIELD_WG_MAX_VEHICLE_H = 3491, WS_BATTLEFIELD_WG_VEHICLE_A = 3680, -- cgit v1.2.3