mirror of
https://github.com/D1GQ/BetterAmongUs.git
synced 2026-10-19 15:51:52 +00:00
Add settings for rpc rate limiting
This commit is contained in:
1 parent
4eb48fe621
commit
88006b31f9
6 files changed
+46
-27
No files matched your search
@@ -5,6 +5,7 @@ using BetterAmongUs.Modules;
|
||||
using BetterAmongUs.Modules.AntiCheat;
|
||||
using BetterAmongUs.Mono.Extended;
|
||||
using BetterAmongUs.Network;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Settings;
|
||||
using BetterAmongUs.Structs;
|
||||
using BetterAmongUs.Utilities;
|
||||
using HarmonyLib;
|
||||
@@ -454,10 +455,10 @@ internal static class NetworkManager
|
||||
/// </summary>
|
||||
private static bool PlayerRpc(PlayerControl player, byte callId, MessageReader reader)
|
||||
{
|
||||
if (player.ExtendedData() != null)
|
||||
if (player.ExtendedData() != null && BetterGameSettings.RpcRateLimiting.GetBool())
|
||||
{
|
||||
player.ExtendedData().AntiCheatInfo.RPCSentPS++;
|
||||
if (player.ExtendedData().AntiCheatInfo.RPCSentPS >= ExtendedAntiCheatInfo.MAX_RPC_SENT)
|
||||
if (player.ExtendedData().AntiCheatInfo.RPCSentPS >= BetterGameSettings.RpcRateLimit.GetInt())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -496,10 +497,13 @@ internal static class NetworkManager
|
||||
[HarmonyPrefix]
|
||||
internal static bool ShipStatus_UpdateSystem_Prefix(SystemTypes systemType, PlayerControl player, MessageReader msgReader)
|
||||
{
|
||||
player.ExtendedData().AntiCheatInfo.RPCSentPS++;
|
||||
if (player.ExtendedData().AntiCheatInfo.RPCSentPS >= ExtendedAntiCheatInfo.MAX_RPC_SENT)
|
||||
if (BetterGameSettings.RpcRateLimiting.GetBool())
|
||||
{
|
||||
return false;
|
||||
player.ExtendedData().AntiCheatInfo.RPCSentPS++;
|
||||
if (player.ExtendedData().AntiCheatInfo.RPCSentPS >= BetterGameSettings.RpcRateLimit.GetInt())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (BetterAntiCheat.RpcUpdateSystemCheck(player, systemType, msgReader) != true) return false;
|
||||
|
||||
@@ -109,7 +109,7 @@ internal static class BetterAntiCheat
|
||||
return;
|
||||
|
||||
if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat) ||
|
||||
!BetterGameSettings.DetectInvalidRPCs.GetBool())
|
||||
!BetterGameSettings.DetectInvalidRpcs.GetBool())
|
||||
return;
|
||||
|
||||
if (player == null)
|
||||
@@ -138,7 +138,7 @@ internal static class BetterAntiCheat
|
||||
try
|
||||
{
|
||||
if (player == null || player.Data == null) return true;
|
||||
if (!IsEnabled || !BAUConfigs.AntiCheat.Value || BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat) || !BetterGameSettings.DetectInvalidRPCs.GetBool()) return true;
|
||||
if (!IsEnabled || !BAUConfigs.AntiCheat.Value || BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat) || !BetterGameSettings.DetectInvalidRpcs.GetBool()) return true;
|
||||
if (player.IsLocalPlayer() && player.IsHost()) return true;
|
||||
|
||||
MessageReader reader = MessageReader.Get(oldReader);
|
||||
|
||||
@@ -4,6 +4,7 @@ using BetterAmongUs.Generated;
|
||||
using BetterAmongUs.Managers;
|
||||
using BetterAmongUs.Modules;
|
||||
using BetterAmongUs.Modules.Support;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Settings;
|
||||
using BetterAmongUs.Utilities;
|
||||
using HarmonyLib;
|
||||
using Hazel;
|
||||
@@ -79,17 +80,20 @@ internal sealed class ExtendedPlayerInfo : MonoBehaviour, IMonoExtension<Network
|
||||
|
||||
if (AntiCheatInfo.RPCSentPS > 0)
|
||||
{
|
||||
bool flag = BaseMono.IsCheater();
|
||||
|
||||
if (AntiCheatInfo.RPCSentPS >= ExtendedAntiCheatInfo.MAX_RPC_SENT && !flag)
|
||||
if (BetterGameSettings.RpcRateLimiting.GetBool())
|
||||
{
|
||||
BetterNotificationManager.NotifyCheat(
|
||||
BaseMono.Object,
|
||||
TranslationStrings.AntiCheat_Reason_RPCSentPS.LocalizedString,
|
||||
TranslationStrings.AntiCheat_UnauthorizedAction.LocalizedString
|
||||
);
|
||||
bool flag = BaseMono.IsCheater();
|
||||
|
||||
Logger_.LogCheat($"{BaseMono.Object.ExtendedData().RealName} {AntiCheatInfo.RPCSentPS} Sent.");
|
||||
if (AntiCheatInfo.RPCSentPS >= BetterGameSettings.RpcRateLimit.GetInt() && !flag)
|
||||
{
|
||||
BetterNotificationManager.NotifyCheat(
|
||||
BaseMono.Object,
|
||||
TranslationStrings.AntiCheat_Reason_RPCSentPS.LocalizedString,
|
||||
TranslationStrings.AntiCheat_UnauthorizedAction.LocalizedString
|
||||
);
|
||||
|
||||
Logger_.LogCheat($"{BaseMono.Object.ExtendedData().RealName} {AntiCheatInfo.RPCSentPS} Sent.");
|
||||
}
|
||||
}
|
||||
|
||||
timeAccumulator += time;
|
||||
@@ -184,11 +188,6 @@ internal sealed class ExtendedPlayerInfo : MonoBehaviour, IMonoExtension<Network
|
||||
/// </summary>
|
||||
internal sealed class ExtendedAntiCheatInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Maximum allowed RPCs per second.
|
||||
/// </summary>
|
||||
internal const int MAX_RPC_SENT = 50;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets whether the player is banned by anti-cheat.
|
||||
/// </summary>
|
||||
|
||||
@@ -22,7 +22,9 @@ internal sealed class BetterGameSettings
|
||||
internal static OptionCheckboxItem? KickLevel;
|
||||
internal static OptionIntItem? KickLevelBelow;
|
||||
internal static OptionCheckboxItem? DetectCheatClients;
|
||||
internal static OptionCheckboxItem? DetectInvalidRPCs;
|
||||
internal static OptionCheckboxItem? DetectInvalidRpcs;
|
||||
internal static OptionCheckboxItem? RpcRateLimiting;
|
||||
internal static OptionIntItem? RpcRateLimit;
|
||||
|
||||
internal static OptionStringItem? RoleRandomizer;
|
||||
|
||||
@@ -49,7 +51,7 @@ internal static class GameSettingsPatch
|
||||
// Creates all custom game settings and organizes them in tabs
|
||||
internal static void SetupSettings(bool IsPreload = false)
|
||||
{
|
||||
// Note: Use 2000 next ID
|
||||
// Note: Use 2200 next ID
|
||||
|
||||
// Create main settings tab
|
||||
BetterSettingsTab = OptionTab.Create(3, TranslationStrings.BetterSetting, TranslationStrings.BetterSetting_Description, Color.green);
|
||||
@@ -83,7 +85,9 @@ internal static class GameSettingsPatch
|
||||
BetterGameSettings.KickLevel = OptionCheckboxItem.Create(1900, BetterSettingsTab, TranslationStrings.BetterSetting_Setting_KickLevel, false);
|
||||
BetterGameSettings.KickLevelBelow = OptionIntItem.Create(1700, BetterSettingsTab, TranslationStrings.BetterSetting_Setting_KickLevelBelow, (0, 10000, 1), 0, ("Lv ", ""), BetterGameSettings.KickLevel);
|
||||
BetterGameSettings.DetectCheatClients = OptionCheckboxItem.Create(700, BetterSettingsTab, TranslationStrings.BetterSetting_Setting_DetectCheatClients, true);
|
||||
BetterGameSettings.DetectInvalidRPCs = OptionCheckboxItem.Create(800, BetterSettingsTab, TranslationStrings.BetterSetting_Setting_DetectInvalidRPCs, true);
|
||||
BetterGameSettings.DetectInvalidRpcs = OptionCheckboxItem.Create(800, BetterSettingsTab, TranslationStrings.BetterSetting_Setting_DetectInvalidRpcs, true);
|
||||
BetterGameSettings.RpcRateLimiting = OptionCheckboxItem.Create(2000, BetterSettingsTab, TranslationStrings.BetterSetting_Setting_RpcRateLimiting, true);
|
||||
BetterGameSettings.RpcRateLimit = OptionIntItem.Create(2100, BetterSettingsTab, TranslationStrings.BetterSetting_Setting_RateLimit, (25, 1000, 1), 50, ("", " PS"), BetterGameSettings.RpcRateLimiting);
|
||||
}
|
||||
|
||||
// Role algorithm settings
|
||||
|
||||
@@ -95,7 +95,9 @@
|
||||
"BetterSetting.Setting.KickLevel": "Kick player levels",
|
||||
"BetterSetting.Setting.KickLevelBelow": "Kick player level below",
|
||||
"BetterSetting.Setting.DetectCheatClients": "Detect cheat clients",
|
||||
"BetterSetting.Setting.DetectInvalidRPCs": "Detect invalid RPCs",
|
||||
"BetterSetting.Setting.DetectInvalidRpcs": "Detect invalid Rpcs",
|
||||
"BetterSetting.Setting.RpcRateLimiting": "Rpc Rate Limiting",
|
||||
"BetterSetting.Setting.RateLimit": "Rate Limit",
|
||||
"BetterSetting.Setting.RoleRandomizer": "Randomizer",
|
||||
"BetterSetting.Setting.DesyncRoles": "Desync roles to other clients",
|
||||
"BetterSetting.Setting.DisableSabotagesForDead": "Disable sabotages for dead",
|
||||
|
||||
@@ -469,9 +469,19 @@ public static class TranslationStrings
|
||||
public static readonly TranslationString BetterSetting_Setting_DetectCheatClients = new("BetterSetting.Setting.DetectCheatClients");
|
||||
|
||||
/// <summary>
|
||||
/// Base Translation: Detect invalid RPCs
|
||||
/// Base Translation: Detect invalid Rpcs
|
||||
/// </summary>
|
||||
public static readonly TranslationString BetterSetting_Setting_DetectInvalidRPCs = new("BetterSetting.Setting.DetectInvalidRPCs");
|
||||
public static readonly TranslationString BetterSetting_Setting_DetectInvalidRpcs = new("BetterSetting.Setting.DetectInvalidRpcs");
|
||||
|
||||
/// <summary>
|
||||
/// Base Translation: Rpc Rate Limiting
|
||||
/// </summary>
|
||||
public static readonly TranslationString BetterSetting_Setting_RpcRateLimiting = new("BetterSetting.Setting.RpcRateLimiting");
|
||||
|
||||
/// <summary>
|
||||
/// Base Translation: Rate Limit
|
||||
/// </summary>
|
||||
public static readonly TranslationString BetterSetting_Setting_RateLimit = new("BetterSetting.Setting.RateLimit");
|
||||
|
||||
/// <summary>
|
||||
/// Base Translation: Randomizer
|
||||
|
||||
Reference in new issue
Block a user