aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy <Golrag@users.noreply.github.com>2023-11-14 18:40:39 +0100
committerGitHub <noreply@github.com>2023-11-14 18:40:39 +0100
commite72bde5236d41a7f66abb25ce9e118eeb1c5aa92 (patch)
tree312d90d3dde899b05c59f95e0ac3f7c4fdfeb51a /src
parent740136af41c60787ca84d5819cf7503d69def073 (diff)
Core/BattlegroundMap: Load all cells when created & mark all creatures as active (#29410)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Maps/Map.cpp8
-rw-r--r--src/server/game/Maps/Map.h2
-rw-r--r--src/server/game/Maps/MapManager.cpp4
-rw-r--r--src/server/game/World/World.cpp1
-rw-r--r--src/server/game/World/World.h1
-rw-r--r--src/server/worldserver/worldserver.conf.dist9
6 files changed, 25 insertions, 0 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index c778396dd88..95b1f3a204d 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -548,6 +548,9 @@ bool Map::AddToMap(T* obj)
return false; //Should delete object
}
+ if (IsAlwaysActive())
+ obj->setActive(true);
+
Cell cell(cellCoord);
if (obj->isActiveObject())
EnsureGridLoadedForActiveObject(cell, obj);
@@ -3295,6 +3298,11 @@ bool Map::IsGarrison() const
return i_mapEntry && i_mapEntry->IsGarrison();
}
+bool Map::IsAlwaysActive() const
+{
+ return IsBattlegroundOrArena();
+}
+
bool Map::GetEntrancePos(int32 &mapid, float &x, float &y)
{
if (!i_mapEntry)
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index 425e7dfcd23..454718916cf 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -338,6 +338,8 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
bool IsBattlegroundOrArena() const;
bool IsScenario() const;
bool IsGarrison() const;
+ // Currently, this means that every entity added to this map will be marked as active
+ bool IsAlwaysActive() const;
bool GetEntrancePos(int32& mapid, float& x, float& y);
void AddObjectToRemoveList(WorldObject* obj);
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp
index 0c2d686d10d..40ac78eaff3 100644
--- a/src/server/game/Maps/MapManager.cpp
+++ b/src/server/game/Maps/MapManager.cpp
@@ -122,6 +122,10 @@ BattlegroundMap* MapManager::CreateBattleground(uint32 mapId, uint32 instanceId,
ASSERT(map->IsBattlegroundOrArena());
map->SetBG(bg);
bg->SetBgMap(map);
+
+ if (sWorld->getBoolConfig(CONFIG_BATTLEGROUNDMAP_LOAD_GRIDS))
+ map->LoadAllCells();
+
return map;
}
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 87c4f3a93d2..2a750efef92 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -803,6 +803,7 @@ void World::LoadConfigSettings(bool reload)
TC_LOG_ERROR("server.loading", "InstanceMapLoadAllGrids enabled, but GridUnload also enabled. GridUnload must be disabled to enable instance map pre-loading. Instance map pre-loading disabled");
m_bool_configs[CONFIG_INSTANCEMAP_LOAD_GRIDS] = false;
}
+ m_bool_configs[CONFIG_BATTLEGROUNDMAP_LOAD_GRIDS] = sConfigMgr->GetBoolDefault("BattlegroundMapLoadAllGrids", true);
m_int_configs[CONFIG_INTERVAL_SAVE] = sConfigMgr->GetIntDefault("PlayerSaveInterval", 15 * MINUTE * IN_MILLISECONDS);
m_int_configs[CONFIG_INTERVAL_DISCONNECT_TOLERANCE] = sConfigMgr->GetIntDefault("DisconnectToleranceInterval", 0);
m_bool_configs[CONFIG_STATS_SAVE_ONLY_ON_LOGOUT] = sConfigMgr->GetBoolDefault("PlayerSave.Stats.SaveOnlyOnLogout", true);
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index ffc41ac0bce..1833fcb4039 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -195,6 +195,7 @@ enum WorldBoolConfigs
CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID,
CONFIG_ALLOW_LOGGING_IP_ADDRESSES_IN_DATABASE,
CONFIG_CHARACTER_CREATING_DISABLE_ALLIED_RACE_ACHIEVEMENT_REQUIREMENT,
+ CONFIG_BATTLEGROUNDMAP_LOAD_GRIDS,
BOOL_CONFIG_VALUE_COUNT
};
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index a1c6cb9b4d0..20ad5bef124 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -330,6 +330,15 @@ BaseMapLoadAllGrids = 0
InstanceMapLoadAllGrids = 0
#
+# BattlegroundMapLoadAllGrids
+# Description: Load all grids for battleground maps upon load.
+# Upon loading an battleground map, all creatures/objects in the map will be pre-loaded
+# Default: 1 - (Preload all grids in the instance upon load)
+# 0 - (Don't preload all base maps, dynamically load as used)
+
+BattlegroundMapLoadAllGrids = 1
+
+#
# SocketTimeOutTime
# Description: Time (in milliseconds) after which a connection being idle on the character
# selection screen is disconnected.