diff --git a/src/cs2fixes.cpp b/src/cs2fixes.cpp index 6dee2ab3..690991fc 100644 --- a/src/cs2fixes.cpp +++ b/src/cs2fixes.cpp @@ -845,6 +845,13 @@ void CS2Fixes::Hook_ClientCommand(CPlayerSlot slot, const CCommand& args) if (g_cvarEnableZR.Get() && slot != -1 && !V_strncmp(args.Arg(0), "jointeam", 8)) { + // Bots use jointeam to finish connecting. SUPERCEDE is evaluated here, + // so an early return in ZR_Hook_ClientCommand_JoinTeam still blocks it + // and leaves fill's new bots stuck in challenging (status id 65535). + CCSPlayerController* pController = CCSPlayerController::FromSlot(slot); + if (pController && pController->IsBot()) + RETURN_META(MRES_IGNORED); + ZR_Hook_ClientCommand_JoinTeam(slot, args); RETURN_META(MRES_SUPERCEDE); } diff --git a/src/zombiereborn.cpp b/src/zombiereborn.cpp index e91796ae..3d349102 100644 --- a/src/zombiereborn.cpp +++ b/src/zombiereborn.cpp @@ -1587,6 +1587,10 @@ void ZR_Hook_ClientCommand_JoinTeam(CPlayerSlot slot, const CCommand& args) if (!pController) return; + // Engine jointeam is how bots finish connecting after bot_kick / quota refill. + if (pController->IsBot()) + return; + CCSPlayerPawn* pPawn = (CCSPlayerPawn*)pController->GetPawn(); if (pPawn && pPawn->IsAlive()) pPawn->CommitSuicide(false, true);