diff --git a/main/source/mod/AIPlayers/AvHAIConfig.cpp b/main/source/mod/AIPlayers/AvHAIConfig.cpp index a3a7df49..54073711 100644 --- a/main/source/mod/AIPlayers/AvHAIConfig.cpp +++ b/main/source/mod/AIPlayers/AvHAIConfig.cpp @@ -14,6 +14,8 @@ bool bLerkAllowed = true; bool bFadeAllowed = true; bool bOnosAllowed = true; +BotFillTiming CurrentBotFillTiming = FILLTIMING_MAPLOAD; + std::unordered_map TeamSizeMap; std::unordered_map BotSkillLevelsMap; @@ -241,6 +243,14 @@ void CONFIG_ParseConfigFile() continue; } + if (key.compare("BotFillTiming") == 0) + { + int FillSetting = atoi(value.c_str()); + FillSetting = clampi(FillSetting, 0, 2); + CurrentBotFillTiming = (BotFillTiming)FillSetting; + continue; + } + if (key.compare("BotSkillName") == 0) { BotSkillLevelsMap[value.c_str()].marine_bot_aim_skill = 0.5f; @@ -478,4 +488,9 @@ void CONFIG_ParseConfigFile() { GlobalSkillLevel = "default"; } +} + +BotFillTiming CONFIG_GetBotFillTiming() +{ + return CurrentBotFillTiming; } \ No newline at end of file diff --git a/main/source/mod/AIPlayers/AvHAIConfig.h b/main/source/mod/AIPlayers/AvHAIConfig.h index 59e31283..10eab2c2 100644 --- a/main/source/mod/AIPlayers/AvHAIConfig.h +++ b/main/source/mod/AIPlayers/AvHAIConfig.h @@ -21,6 +21,13 @@ typedef struct _TEAMSIZEDEFINITIONS int TeamBSize = 6; } TeamSizeDefinitions; +typedef enum _BOTFILLTIMING +{ + FILLTIMING_MAPLOAD = 0, // Bots will start filling teams after map load (after grace period) + FILLTIMING_ALLHUMANS, // Bots will only start filling teams once all humans in the ready room have joined a team + FILLTIMING_ROUNDSTART // Bots will only start filling teams after round start +} BotFillTiming; + // Reads evobot.cfg in addons/evobot and populates all the settings from it void CONFIG_ParseConfigFile(); @@ -55,6 +62,8 @@ bot_skill CONFIG_GetGlobalBotSkillLevel(); void CONFIG_SetGlobalBotSkillLevel(const char* NewSkillLevel); +BotFillTiming CONFIG_GetBotFillTiming(); + #endif \ No newline at end of file diff --git a/main/source/mod/AIPlayers/AvHAIPlayerManager.cpp b/main/source/mod/AIPlayers/AvHAIPlayerManager.cpp index 491b5c4d..393db733 100644 --- a/main/source/mod/AIPlayers/AvHAIPlayerManager.cpp +++ b/main/source/mod/AIPlayers/AvHAIPlayerManager.cpp @@ -126,6 +126,29 @@ void AIMGR_UpdateAIPlayerCounts() return; } + BotFillTiming CurrentFillTiming = CONFIG_GetBotFillTiming(); + + if (!GetGameRules()->GetGameStarted()) + { + if (CurrentFillTiming == FILLTIMING_ROUNDSTART) { return; } + + if (CurrentFillTiming == FILLTIMING_ALLHUMANS) + { + for (int i = 1; i <= gpGlobals->maxClients; i++) + { + edict_t* PlayerEdict = INDEXENT(i); + if (FNullEnt(PlayerEdict) || PlayerEdict->free || (PlayerEdict->v.flags & FL_FAKECLIENT)) { continue; } + + AvHPlayer* PlayerRef = dynamic_cast(CBaseEntity::Instance(PlayerEdict)); + + if (!PlayerRef) { continue; } + + if (PlayerRef->GetInReadyRoom()) { return; } + } + } + } + + if (avh_botautomode.value == 1) // Fill teams: bots will be added and removed to maintain a minimum player count { AIMGR_UpdateFillTeams();