Merged in Server Load Manager
commit d46e8ba01f
Author: Cekis <cekisswg@gmail.com>
Date: Sat Sep 28 19:35:21 2019 -0400
Created the Server Load Manager
This commit is contained in:
@@ -491,6 +491,8 @@ void ConfigServerGame::install(void)
|
||||
|
||||
KEY_BOOL (useOldSuidGenerator, false);
|
||||
|
||||
KEY_STRING (serverLoadLevel, "heavy");
|
||||
|
||||
if (data->baseDecayRate <= 1.0f)
|
||||
data->baseDecayRate = 1.0f;
|
||||
|
||||
|
||||
@@ -575,6 +575,8 @@ class ConfigServerGame
|
||||
int gcwDaysRequiredForGcwRegionDefenderBonus;
|
||||
|
||||
bool useOldSuidGenerator;
|
||||
|
||||
const char * serverLoadLevel;
|
||||
};
|
||||
|
||||
private:
|
||||
@@ -1061,6 +1063,8 @@ class ConfigServerGame
|
||||
static int getGcwDaysRequiredForGcwRegionDefenderBonus();
|
||||
|
||||
static bool getUseOldSuidGenerator();
|
||||
|
||||
static const char * getServerLoadLevel();
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
@@ -3696,6 +3700,11 @@ inline bool ConfigServerGame::getUseOldSuidGenerator() {
|
||||
return data->useOldSuidGenerator;
|
||||
}
|
||||
|
||||
// ======================================================================
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
inline const char *ConfigServerGame::getServerLoadLevel()
|
||||
{
|
||||
return data->serverLoadLevel;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -52,7 +52,7 @@ namespace ServerBuildoutManagerNamespace
|
||||
struct BuildoutRow
|
||||
{
|
||||
BuildoutRow();
|
||||
BuildoutRow(int64 id, int64 containerId, int cellIndex, Transform const &transform_p, ServerObjectTemplate const *serverTemplate, std::string const &scripts, std::string const &objvars, std::string const & eventRequired);
|
||||
BuildoutRow(int64 id, int64 containerId, int cellIndex, Transform const &transform_p, ServerObjectTemplate const *serverTemplate, std::string const &scripts, std::string const &objvars, std::string const & eventRequired, std::string const & requiredLoadLevel);
|
||||
BuildoutRow(BuildoutRow const &rhs);
|
||||
~BuildoutRow();
|
||||
BuildoutRow &operator=(BuildoutRow const &rhs);
|
||||
@@ -65,6 +65,7 @@ namespace ServerBuildoutManagerNamespace
|
||||
std::string m_objvars;
|
||||
int m_cellIndex;
|
||||
std::string m_eventRequired;
|
||||
std::string m_requiredLoadLevel;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
@@ -145,6 +146,7 @@ void ServerBuildoutManager::install()
|
||||
|
||||
void ServerBuildoutManager::onChunkComplete(int nodeX, int nodeZ)
|
||||
{
|
||||
std::string configuredLoadLevel = ConfigServerGame::getServerLoadLevel();
|
||||
for (std::vector<AreaInfo>::iterator i = s_areas.begin(); i != s_areas.end(); ++i)
|
||||
{
|
||||
AreaInfo &areaInfo = *i;
|
||||
@@ -155,6 +157,24 @@ void ServerBuildoutManager::onChunkComplete(int nodeX, int nodeZ)
|
||||
{
|
||||
if (!areaInfo.loaded)
|
||||
loadArea(areaInfo);
|
||||
|
||||
// Before we decide to instantiate the area, make sure we need to actually load it based on the configured server load level.
|
||||
std::string areaRequiredLevel = areaInfo.buildoutArea.requiredLoadLevel;
|
||||
if (configuredLoadLevel != "heavy" && !areaRequiredLevel.empty()) {
|
||||
if(configuredLoadLevel == "medium"){
|
||||
// If our configured level is medium, then our area level must be medium or light.
|
||||
if(areaRequiredLevel != "medium" && areaRequiredLevel != "light") {
|
||||
DEBUG_REPORT_LOG(true,("Skipping Area %s (index %d) because its load level is %s and the configured load level is %s\n", areaInfo.buildoutArea.areaName.c_str(), areaInfo.buildoutArea.areaIndex, areaRequiredLevel.c_str(), configuredLoadLevel.c_str()));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if(configuredLoadLevel == "light"){
|
||||
if(areaRequiredLevel != "light") {
|
||||
DEBUG_REPORT_LOG(true,("Skipping Area %s (index %d) because its load level is %s and the configured load level is %s\n", areaInfo.buildoutArea.areaName.c_str(), areaInfo.buildoutArea.areaIndex, areaRequiredLevel.c_str(), configuredLoadLevel.c_str()));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
instantiateAreaNode(areaInfo, nodeX, nodeZ);
|
||||
}
|
||||
}
|
||||
@@ -580,6 +600,7 @@ void ServerBuildoutManagerNamespace::loadArea(AreaInfo &areaInfo)
|
||||
filename[sizeof(filename) - 1] = '\0';
|
||||
|
||||
std::string const & eventRequired = areaInfo.buildoutArea.getRequiredEventName();
|
||||
std::string const & requiredLoadLevel = areaInfo.buildoutArea.getRequiredLoadLevel();
|
||||
|
||||
if (!eventRequired.empty())
|
||||
{
|
||||
@@ -764,7 +785,8 @@ void ServerBuildoutManagerNamespace::loadArea(AreaInfo &areaInfo)
|
||||
serverTemplate,
|
||||
areaBuildoutTable.getStringValue(scriptsColumn, buildoutRow),
|
||||
areaBuildoutTable.getStringValue(objvarsColumn, buildoutRow),
|
||||
eventRequired));
|
||||
eventRequired,
|
||||
requiredLoadLevel));
|
||||
}
|
||||
|
||||
objects.insert(objId);
|
||||
@@ -1106,7 +1128,7 @@ ServerBuildoutManagerNamespace::BuildoutRow::BuildoutRow() :
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
ServerBuildoutManagerNamespace::BuildoutRow::BuildoutRow(int64 id, int64 containerId, int cellIndex, Transform const &transform_p, ServerObjectTemplate const *serverTemplate, std::string const &scripts, std::string const &objvars, std::string const & eventRequired) :
|
||||
ServerBuildoutManagerNamespace::BuildoutRow::BuildoutRow(int64 id, int64 containerId, int cellIndex, Transform const &transform_p, ServerObjectTemplate const *serverTemplate, std::string const &scripts, std::string const &objvars, std::string const & eventRequired, std::string const & requiredLoadLevel) :
|
||||
m_id(id),
|
||||
m_containerId(containerId),
|
||||
m_transform_p(transform_p),
|
||||
@@ -1114,7 +1136,8 @@ ServerBuildoutManagerNamespace::BuildoutRow::BuildoutRow(int64 id, int64 contain
|
||||
m_scripts(scripts),
|
||||
m_objvars(objvars),
|
||||
m_cellIndex(cellIndex),
|
||||
m_eventRequired(eventRequired)
|
||||
m_eventRequired(eventRequired),
|
||||
m_requiredLoadLevel(requiredLoadLevel)
|
||||
{
|
||||
if (serverTemplate)
|
||||
serverTemplate->addReference();
|
||||
@@ -1130,7 +1153,8 @@ ServerBuildoutManagerNamespace::BuildoutRow::BuildoutRow(BuildoutRow const &rhs)
|
||||
m_scripts(rhs.m_scripts),
|
||||
m_objvars(rhs.m_objvars),
|
||||
m_cellIndex(rhs.m_cellIndex),
|
||||
m_eventRequired(rhs.m_eventRequired)
|
||||
m_eventRequired(rhs.m_eventRequired),
|
||||
m_requiredLoadLevel(rhs.m_requiredLoadLevel)
|
||||
{
|
||||
if (m_serverTemplate)
|
||||
m_serverTemplate->addReference();
|
||||
@@ -1157,6 +1181,7 @@ ServerBuildoutManagerNamespace::BuildoutRow &ServerBuildoutManagerNamespace::Bui
|
||||
m_objvars = rhs.m_objvars;
|
||||
m_cellIndex = rhs.m_cellIndex;
|
||||
m_eventRequired = rhs.m_eventRequired;
|
||||
m_requiredLoadLevel = rhs.m_requiredLoadLevel;
|
||||
|
||||
if (m_serverTemplate)
|
||||
m_serverTemplate->releaseReference();
|
||||
|
||||
@@ -13392,18 +13392,11 @@ void CreatureObject::setGroupMissionCriticalObjects(GroupMissionCriticalObjectSe
|
||||
DEBUG_FATAL(!isAuthoritative(), ("CreatureObject::setGroupMissionCriticalObjects: called on non-authoritative object %s", getDebugInformation(true).c_str()));
|
||||
if (isAuthoritative())
|
||||
{
|
||||
m_groupMissionCriticalObjectSet.clear();
|
||||
//-- Anything that is not in our set, we need to add
|
||||
{
|
||||
for (GroupMissionCriticalObjectSet::const_iterator iter = groupMissionCriticalObjectSet.begin(); iter != groupMissionCriticalObjectSet.end(); ++iter)
|
||||
if (!m_groupMissionCriticalObjectSet.contains(*iter))
|
||||
m_groupMissionCriticalObjectSet.insert(*iter);
|
||||
}
|
||||
|
||||
//-- Anything that is not in the original set, we need to remove
|
||||
{
|
||||
for (GroupMissionCriticalObjectSet::const_iterator iter(m_groupMissionCriticalObjectSet.begin()); iter != m_groupMissionCriticalObjectSet.end(); ++iter)
|
||||
if (groupMissionCriticalObjectSet.find(*iter) == groupMissionCriticalObjectSet.end())
|
||||
m_groupMissionCriticalObjectSet.erase(*iter);
|
||||
m_groupMissionCriticalObjectSet.insert(*iter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,6 +158,13 @@ std::string const & BuildoutArea::getRequiredEventName() const
|
||||
return requiredEventName;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
std::string const & BuildoutArea::getRequiredLoadLevel() const
|
||||
{
|
||||
return requiredLoadLevel;
|
||||
}
|
||||
|
||||
// ======================================================================
|
||||
|
||||
bool SharedBuildoutAreaManager::isBuildoutScene(std::string const & sceneName)
|
||||
@@ -263,6 +270,8 @@ void SharedBuildoutAreaManager::install()
|
||||
buildoutArea.internalBuildoutArea = areaListTable.getIntValue("internal", areaRow) != 0;
|
||||
|
||||
buildoutArea.requiredEventName = areaListTable.getStringValue("eventRequired", areaRow);
|
||||
|
||||
buildoutArea.requiredLoadLevel = areaListTable.getStringValue("requiredLoadLevel", areaRow);
|
||||
}
|
||||
|
||||
s_buildoutAreas[buildoutScene] = areasForScene;
|
||||
@@ -347,6 +356,9 @@ Vector SharedBuildoutAreaManager::getRelativePositionInArea(std::string const &
|
||||
|
||||
if(ignoreNonActiveEvents && !boa.requiredEventName.empty()) // Eventually this needs to query the scheduler system and see if the event is currently active.
|
||||
continue;
|
||||
|
||||
if(ignoreNonActiveEvents && !boa.requiredLoadLevel.empty())
|
||||
continue;
|
||||
|
||||
if(boa.isLocationInside(location_w.x, location_w.z) && boa.areaName == sceneAndArea.second)
|
||||
{
|
||||
@@ -561,6 +573,9 @@ BuildoutArea const * SharedBuildoutAreaManager::findBuildoutAreaAtPosition(std::
|
||||
if(ignoreNonActiveEvents && !buildoutArea.requiredEventName.empty())
|
||||
continue;
|
||||
|
||||
if(ignoreNonActiveEvents && !buildoutArea.requiredLoadLevel.empty())
|
||||
continue;
|
||||
|
||||
if (buildoutArea.isLocationInside(x, z))
|
||||
{
|
||||
return &buildoutArea;
|
||||
@@ -585,6 +600,9 @@ BuildoutArea const * SharedBuildoutAreaManager::findBuildoutAreaAtPosition(float
|
||||
if(ignoreNonActiveEvents && !buildoutArea.requiredEventName.empty())
|
||||
return nullptr;
|
||||
|
||||
if(ignoreNonActiveEvents && !buildoutArea.requiredLoadLevel.empty())
|
||||
return nullptr;
|
||||
|
||||
if (buildoutArea.isLocationInside(x, z))
|
||||
{
|
||||
return &buildoutArea;
|
||||
|
||||
@@ -38,6 +38,7 @@ public:
|
||||
Vector getRelativePosition(Vector const & pos_w, bool allowComposite) const;
|
||||
|
||||
std::string const & getRequiredEventName() const;
|
||||
std::string const & getRequiredLoadLevel() const;
|
||||
|
||||
int areaIndex;
|
||||
std::string areaName;
|
||||
@@ -63,6 +64,9 @@ public:
|
||||
|
||||
// Required Event name for a particular buildout
|
||||
std::string requiredEventName;
|
||||
|
||||
// Required Server level for a particular buildout
|
||||
std::string requiredLoadLevel;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user