From 175d6a8836a7f8f3d2cef97e1e0b95f479083307 Mon Sep 17 00:00:00 2001 From: At0mBomba <102352627+At0mBomba@users.noreply.github.com> Date: Wed, 19 Aug 2026 14:53:00 +0300 Subject: [PATCH] Add minimum player requirement for level kick --- src/Patches/Gameplay/Anticheat/CheckPlayerLevelPatch.cs | 8 ++++++-- src/Patches/Gameplay/UI/Settings/GameSettingsPatch.cs | 2 ++ src/Resources/Lang/en_US.json | 1 + src/build/Generated/TranslationStrings.cs | 5 +++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Patches/Gameplay/Anticheat/CheckPlayerLevelPatch.cs b/src/Patches/Gameplay/Anticheat/CheckPlayerLevelPatch.cs index e18f9d2..e74778b 100644 --- a/src/Patches/Gameplay/Anticheat/CheckPlayerLevelPatch.cs +++ b/src/Patches/Gameplay/Anticheat/CheckPlayerLevelPatch.cs @@ -1,6 +1,6 @@ -using BetterAmongUs.Utilities; -using BetterAmongUs.Modules; +using BetterAmongUs.Modules; using BetterAmongUs.Patches.Gameplay.UI.Settings; +using BetterAmongUs.Utilities; using HarmonyLib; namespace BetterAmongUs.Patches.Gameplay.Anticheat; @@ -20,6 +20,10 @@ internal static class CheckPlayerLevelPatch // Kick players below minimum level if (!__instance.IsLocalPlayer() && BetterGameSettings.KickLevel.GetBool() && __instance.Data.PlayerLevel < BetterGameSettings.KickLevelBelow.GetInt()) { + var minPlayers = BetterGameSettings.KickLevelBelowMinimumPlayers.GetInt(); + if (minPlayers > 1 && minPlayers > BAUPlugin.AllPlayerControls.Count) + return; + __instance.TryKick(setReasonInfo: $" is level {__instance.Data.PlayerLevel}, level must be equal or above {BetterGameSettings.KickLevelBelow.GetInt()} to join"); } } diff --git a/src/Patches/Gameplay/UI/Settings/GameSettingsPatch.cs b/src/Patches/Gameplay/UI/Settings/GameSettingsPatch.cs index ab230c1..0189fad 100644 --- a/src/Patches/Gameplay/UI/Settings/GameSettingsPatch.cs +++ b/src/Patches/Gameplay/UI/Settings/GameSettingsPatch.cs @@ -22,6 +22,7 @@ internal sealed class BetterGameSettings internal static OptionIntItem? DetectedLevelAbove; internal static OptionCheckboxItem? KickLevel; internal static OptionIntItem? KickLevelBelow; + internal static OptionIntItem? KickLevelBelowMinimumPlayers; internal static OptionCheckboxItem? DetectCheatClients; internal static OptionCheckboxItem? DetectInvalidRpcs; internal static OptionCheckboxItem? RpcRateLimiting; @@ -86,6 +87,7 @@ internal static class GameSettingsPatch BetterGameSettings.DetectedLevelAbove = OptionIntItem.Create(BetterSettingsTab, TranslationStrings.BetterSetting_Setting_DetectedLevelAbove, (100, 10000, 5), 500, ("Lv ", ""), BetterGameSettings.DetectedLevel); BetterGameSettings.KickLevel = OptionCheckboxItem.Create(BetterSettingsTab, TranslationStrings.BetterSetting_Setting_KickLevel, false); BetterGameSettings.KickLevelBelow = OptionIntItem.Create(BetterSettingsTab, TranslationStrings.BetterSetting_Setting_KickLevelBelow, (0, 10000, 1), 0, ("Lv ", ""), BetterGameSettings.KickLevel); + BetterGameSettings.KickLevelBelowMinimumPlayers = OptionIntItem.Create(BetterSettingsTab, TranslationStrings.BetterSetting_Setting_KickLevelBelowMinimumPlayers, (1, 15, 1), 9, parent: BetterGameSettings.KickLevelBelow); BetterGameSettings.DetectCheatClients = OptionCheckboxItem.Create(BetterSettingsTab, TranslationStrings.BetterSetting_Setting_DetectCheatClients, true); BetterGameSettings.DetectInvalidRpcs = OptionCheckboxItem.Create(BetterSettingsTab, TranslationStrings.BetterSetting_Setting_DetectInvalidRpcs, true); BetterGameSettings.RpcRateLimiting = OptionCheckboxItem.Create(BetterSettingsTab, TranslationStrings.BetterSetting_Setting_RpcRateLimiting, true); diff --git a/src/Resources/Lang/en_US.json b/src/Resources/Lang/en_US.json index ec8ec52..21c8886 100644 --- a/src/Resources/Lang/en_US.json +++ b/src/Resources/Lang/en_US.json @@ -96,6 +96,7 @@ "BetterSetting.Setting.DetectedLevelAbove": "Detected player level above", "BetterSetting.Setting.KickLevel": "Kick player levels", "BetterSetting.Setting.KickLevelBelow": "Kick player level below", + "BetterSetting.Setting.KickLevelBelowMinimumPlayers": "Only when player count at least", "BetterSetting.Setting.DetectCheatClients": "Detect cheat clients", "BetterSetting.Setting.DetectInvalidRpcs": "Detect invalid Rpcs", "BetterSetting.Setting.RpcRateLimiting": "Rpc Rate Limiting", diff --git a/src/build/Generated/TranslationStrings.cs b/src/build/Generated/TranslationStrings.cs index 2cba8ab..c02d623 100644 --- a/src/build/Generated/TranslationStrings.cs +++ b/src/build/Generated/TranslationStrings.cs @@ -473,6 +473,11 @@ public static class TranslationStrings /// public static readonly TranslationString BetterSetting_Setting_KickLevelBelow = new("BetterSetting.Setting.KickLevelBelow"); + /// + /// Base Translation: Only when player count at least + /// + public static readonly TranslationString BetterSetting_Setting_KickLevelBelowMinimumPlayers = new("BetterSetting.Setting.KickLevelBelowMinimumPlayers"); + /// /// Base Translation: Detect cheat clients ///