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:
CekisSWG
2019-11-26 15:56:14 -08:00
parent 7c08c716dc
commit 49689cb559
6 changed files with 66 additions and 15 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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();

View File

@@ -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);
}
}
}

View File

@@ -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;

View File

@@ -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;
};
// ----------------------------------------------------------------------