From 6769ddca39db96cace62f2dd87ad3fe5e34346e7 Mon Sep 17 00:00:00 2001 From: jeefo Date: Wed, 2 Nov 2016 18:36:05 +0300 Subject: [PATCH] Prevent bot auto-creation when removing bot, by delaying quota maintaining time. --- source/combat.cpp | 2 +- source/manager.cpp | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/source/combat.cpp b/source/combat.cpp index 0238295..a6c2da1 100644 --- a/source/combat.cpp +++ b/source/combat.cpp @@ -972,7 +972,7 @@ bool Bot::IsWeaponBadInDistance (int weaponIndex, float distance) int wid = g_weaponSelect[weaponIndex].id; if (wid == WEAPON_KNIFE) - return false; + return false; // check is ammo available for secondary weapon if (m_ammoInClip[g_weaponSelect[GetBestSecondaryWeaponCarried ()].id] >= 1) diff --git a/source/manager.cpp b/source/manager.cpp index 38e1a15..a8decbe 100644 --- a/source/manager.cpp +++ b/source/manager.cpp @@ -368,19 +368,21 @@ void BotManager::AdjustQuota (bool isPlayerConnecting, edict_t *ent) { RemoveRandom (); m_balanceCount--; + + m_quotaMaintainTime = engine.Time () + 2.0f; } } else if (m_balanceCount < 0) { - AddRandom (false); + AddRandom (); m_balanceCount++; } } void BotManager::AddPlayerToCheckTeamQueue (edict_t *ent) { - if (!engine.IsDedicatedServer () || !yb_autovacate.GetBool () || IsValidBot (ent)) - return; + if (!engine.IsDedicatedServer () || !yb_autovacate.GetBool () || IsValidBot (ent)) + return; // entity must be unique bool hasFound = false; @@ -400,8 +402,8 @@ void BotManager::AddPlayerToCheckTeamQueue (edict_t *ent) void BotManager::VerifyPlayersHasJoinedTeam (int &desiredCount) { - if (!engine.IsDedicatedServer () || !yb_autovacate.GetBool () || m_trackedPlayers.IsEmpty ()) - return; + if (!engine.IsDedicatedServer () || !yb_autovacate.GetBool () || m_trackedPlayers.IsEmpty ()) + return; for (int i = 0; i < engine.MaxClients (); i++) { @@ -475,21 +477,23 @@ void BotManager::MaintainBotQuota (void) } int numBots = GetBotsNum (); - int numHumans = yb_autovacate_smart_kick.GetBool () ? GetHumansJoinedTeam () : GetHumansNum (); + int numHumans = GetHumansNum (); int desiredCount = yb_quota.GetInt (); if (yb_join_after_player.GetBool () && !numHumans) desiredCount = 0; + int numHumansOnTeam = yb_autovacate_smart_kick.GetBool () ? GetHumansJoinedTeam () : numHumans; + // quota mode char mode = yb_quota_mode.GetString ()[0]; if (mode == 'f' || mode == 'F') // fill - desiredCount = A_max (0, desiredCount - numHumans); + desiredCount = A_max (0, desiredCount - numHumansOnTeam); else if (mode == 'm' || mode == 'M') // match - desiredCount = A_max (0, yb_quota.GetInt () * numHumans); + desiredCount = A_max (0, yb_quota.GetInt () * numHumansOnTeam); - desiredCount = A_min (desiredCount, engine.MaxClients () - (numHumans + (yb_autovacate.GetBool () ? 1 : 0))); + desiredCount = A_min (desiredCount, engine.MaxClients () - (numHumansOnTeam + (yb_autovacate.GetBool () ? 1 : 0))); if (yb_autovacate_smart_kick.GetBool () && numBots > 1 && desiredCount > 1) VerifyPlayersHasJoinedTeam (desiredCount);