From d292cc8fd07ce044900275a12c2b94d0d6d3090e Mon Sep 17 00:00:00 2001 From: D1GQ Date: Sat, 24 Aug 2024 08:12:47 -0500 Subject: [PATCH] Experimental setting and error fixes --- Modules/AntiCheat.cs | 5 +- .../OptionItems/BetterOptionCheckboxItem.cs | 6 ++ Modules/OptionItems/BetterOptionFloatItem.cs | 4 ++ Modules/OptionItems/BetterOptionIntItem.cs | 4 ++ Modules/OptionItems/BetterOptionStringItem.cs | 10 ++++ .../NoneOption/BetterOptionTitleItem.cs | 1 + Patches/GameSettingMenuPatch.cs | 59 +++++++++++++------ 7 files changed, 68 insertions(+), 21 deletions(-) diff --git a/Modules/AntiCheat.cs b/Modules/AntiCheat.cs index 0d43861..a7aa17b 100644 --- a/Modules/AntiCheat.cs +++ b/Modules/AntiCheat.cs @@ -325,8 +325,6 @@ class AntiCheat // Check game states when sabotaging public static bool RpcUpdateSystemCheck(PlayerControl player, SystemTypes systemType, byte amount) { - return true; - byte hostNum = 128; // Only host should ever send this number byte singleFixNum = 0; byte minLightNum = 0; @@ -360,6 +358,9 @@ class AntiCheat if (!GameStates.IsHost || PlayerControl.LocalPlayer == null || player == null || player == PlayerControl.LocalPlayer || player.BetterData().IsBetterHost || !IsEnabled || !Main.AntiCheat.Value || (GameStates.IsBetterHostLobby && !GameStates.IsHost) || !BetterGameSettings.DetectInvalidRPCs.GetBool()) return true; + if (!BetterGameSettings.ExperimentalDetectInvalidSabotage.GetBool()) + return true; + // Single Fix: 0 // Lights: 0-1-2-3-4 // Fix 1: 16 diff --git a/Modules/OptionItems/BetterOptionCheckboxItem.cs b/Modules/OptionItems/BetterOptionCheckboxItem.cs index 61c7d6c..3106594 100644 --- a/Modules/OptionItems/BetterOptionCheckboxItem.cs +++ b/Modules/OptionItems/BetterOptionCheckboxItem.cs @@ -23,6 +23,12 @@ public class BetterOptionCheckboxItem : BetterOptionItem optionBehaviour.OnValueChanged = new Action((option) => ValueChanged(id, option)); SpacingNum += StaticSpacingNumPlus; + // Fix Game Crash + foreach (RulesCategory rulesCategory in GameManager.Instance.GameSettingsList.AllCategories) + { + optionBehaviour.data = rulesCategory.AllGameSettings.ToArray().FirstOrDefault(item => item.Type == OptionTypes.Checkbox); + } + // Set data optionBehaviour.CheckMark.GetComponent().enabled = Default; IsChecked = Default; diff --git a/Modules/OptionItems/BetterOptionFloatItem.cs b/Modules/OptionItems/BetterOptionFloatItem.cs index eca6b9e..c6a26a3 100644 --- a/Modules/OptionItems/BetterOptionFloatItem.cs +++ b/Modules/OptionItems/BetterOptionFloatItem.cs @@ -168,4 +168,8 @@ public class BetterOptionFloatItem : BetterOptionItem Type = OptionTypes.Float, }; } + + public override void ValueChanged(int id, OptionBehaviour optionBehaviour) + { + } } diff --git a/Modules/OptionItems/BetterOptionIntItem.cs b/Modules/OptionItems/BetterOptionIntItem.cs index 0f95c50..422eb2b 100644 --- a/Modules/OptionItems/BetterOptionIntItem.cs +++ b/Modules/OptionItems/BetterOptionIntItem.cs @@ -168,4 +168,8 @@ public class BetterOptionIntItem : BetterOptionItem Type = OptionTypes.Float, }; } + + public override void ValueChanged(int id, OptionBehaviour optionBehaviour) + { + } } diff --git a/Modules/OptionItems/BetterOptionStringItem.cs b/Modules/OptionItems/BetterOptionStringItem.cs index 203b280..90fd443 100644 --- a/Modules/OptionItems/BetterOptionStringItem.cs +++ b/Modules/OptionItems/BetterOptionStringItem.cs @@ -24,6 +24,12 @@ public class BetterOptionStringItem : BetterOptionItem optionBehaviour.OnValueChanged = new Action((option) => ValueChanged(id, option)); SpacingNum += StaticSpacingNumPlus; + // Fix Game Crash + foreach (RulesCategory rulesCategory in GameManager.Instance.GameSettingsList.AllCategories) + { + optionBehaviour.data = rulesCategory.AllGameSettings.ToArray().FirstOrDefault(item => item.Type == OptionTypes.String); + } + optionBehaviour.PlusBtn.OnClick.RemoveAllListeners(); optionBehaviour.MinusBtn.OnClick.RemoveAllListeners(); optionBehaviour.PlusBtn.OnClick.AddListener(new Action(() => Increase())); @@ -124,4 +130,8 @@ public class BetterOptionStringItem : BetterOptionItem Type = OptionTypes.String, }; } + + public override void ValueChanged(int id, OptionBehaviour optionBehaviour) + { + } } diff --git a/Modules/OptionItems/NoneOption/BetterOptionTitleItem.cs b/Modules/OptionItems/NoneOption/BetterOptionTitleItem.cs index 1441b80..3014c3f 100644 --- a/Modules/OptionItems/NoneOption/BetterOptionTitleItem.cs +++ b/Modules/OptionItems/NoneOption/BetterOptionTitleItem.cs @@ -18,6 +18,7 @@ public class BetterOptionTitleItem : BetterOptionItem SpacingNum += StaticSpacingNumPlus; UnityEngine.Object.Destroy(optionBehaviour.CheckMark.transform.parent.gameObject); + UnityEngine.Object.Destroy(optionBehaviour.GetComponent()); optionBehaviour.TitleText.alignment = TMPro.TextAlignmentOptions.Center; optionBehaviour.TitleText.outlineColor = Color.black; optionBehaviour.TitleText.outlineWidth = 0.2f; diff --git a/Patches/GameSettingMenuPatch.cs b/Patches/GameSettingMenuPatch.cs index cb0891c..5293613 100644 --- a/Patches/GameSettingMenuPatch.cs +++ b/Patches/GameSettingMenuPatch.cs @@ -1,8 +1,6 @@ using AmongUs.GameOptions; using HarmonyLib; using UnityEngine; -using static Il2CppSystem.Linq.Expressions.Interpreter.CastInstruction.CastInstructionNoT; -using static Logger; namespace BetterAmongUs.Patches; @@ -18,6 +16,8 @@ class BetterGameSettings public static BetterOptionItem? DetectedLevelAbove; public static BetterOptionItem? DetectCheatClients; public static BetterOptionItem? DetectInvalidRPCs; + + public static BetterOptionItem? ExperimentalDetectInvalidSabotage; } [HarmonyPatch(typeof(GameSettingMenu))] @@ -25,30 +25,37 @@ static class GameSettingMenuPatch { private static PassiveButton BetterSettingsButton; public static GameOptionsMenu BetterSettingsTab; + private static List TitleList = []; public static void SetupSettings(bool IsPreload = false) { BetterOptionItem.SpacingNum = 0; + BetterOptionItem.BetterOptionItems.Clear(); + TitleList.Clear(); // Anti-Cheat Settings { - new BetterOptionHeaderItem().Create(BetterSettingsTab, "Anti-Cheat Settings"); + TitleList.Add(new BetterOptionHeaderItem().Create(BetterSettingsTab, "Anti-Cheat Settings")); if (IsPreload || GameStates.IsHost) { - new BetterOptionTitleItem().Create(BetterSettingsTab, $"Host Only"); + TitleList.Add(new BetterOptionTitleItem().Create(BetterSettingsTab, $"Host Only")); BetterGameSettings.WhenCheating = new BetterOptionStringItem().Create(100, BetterSettingsTab, "When a player is caught cheating", ["Do Nothing", "Kick", "Ban"], 2); BetterGameSettings.InvalidFriendCode = new BetterOptionCheckboxItem().Create(200, BetterSettingsTab, "Allow invalid friendCodes", true); BetterGameSettings.UseBanPlayerList = new BetterOptionCheckboxItem().Create(300, BetterSettingsTab, "Use Ban Player List", true); BetterGameSettings.UseBanNameList = new BetterOptionCheckboxItem().Create(400, BetterSettingsTab, "Use Ban Name List", true); BetterGameSettings.UseBanWordList = new BetterOptionCheckboxItem().Create(500, BetterSettingsTab, "Use Ban Word List", true); - new BetterOptionDividerItem().Create(BetterSettingsTab); + TitleList.Add(new BetterOptionDividerItem().Create(BetterSettingsTab)); } - new BetterOptionTitleItem().Create(BetterSettingsTab, $"Detections"); + TitleList.Add(new BetterOptionTitleItem().Create(BetterSettingsTab, $"Detections")); BetterGameSettings.DetectedLevelAbove = new BetterOptionIntItem().Create(600, BetterSettingsTab, "Detected player level # or >", [100, 1000, 5], 200, "Lv ", ""); BetterGameSettings.DetectCheatClients = new BetterOptionCheckboxItem().Create(700, BetterSettingsTab, "Detect Cheat Clients", true); BetterGameSettings.DetectInvalidRPCs = new BetterOptionCheckboxItem().Create(800, BetterSettingsTab, "Detect Invalid RPCs", true); + + TitleList.Add(new BetterOptionDividerItem().Create(BetterSettingsTab)); + TitleList.Add(new BetterOptionTitleItem().Create(BetterSettingsTab, $"Experimental")); + BetterGameSettings.ExperimentalDetectInvalidSabotage = new BetterOptionCheckboxItem().Create(100000, BetterSettingsTab, "Detect Invalid Sabotages", false); } // Gameplay Settings @@ -83,7 +90,7 @@ static class GameSettingMenuPatch */ if (BetterSettingsTab != null) - BetterSettingsTab.scrollBar.SetYBoundsMax(1.15f * BetterOptionItem.SpacingNum / 2); + BetterSettingsTab.scrollBar.SetYBoundsMax(1.25f * BetterOptionItem.SpacingNum / 2); } private static void Initialize() @@ -92,9 +99,12 @@ static class GameSettingMenuPatch { foreach (var item in BetterOptionItem.BetterOptionItems) { - if (item.TitleText != null) + if (item != null) { - item.TitleText.text = item.Name; + if (item.TitleText != null) + { + item.TitleText.text = item.Name; + } } } }, 0.005f, shoudLog: false); @@ -269,6 +279,7 @@ static class NumberOptionPatch __instance.UpdateValue(); return false; } + [HarmonyPatch(nameof(NumberOption.Decrease))] [HarmonyPrefix] public static bool Decrease_Prefix(NumberOption __instance) @@ -283,6 +294,7 @@ static class NumberOptionPatch __instance.UpdateValue(); return false; } + [HarmonyPatch(nameof(NumberOption.UpdateValue))] [HarmonyPrefix] public static bool UpdateValue_Prefix(NumberOption __instance) @@ -299,26 +311,35 @@ static class NumberOptionPatch } return false; } + [HarmonyPatch(nameof(NumberOption.FixedUpdate))] [HarmonyPrefix] public static bool FixedUpdate_Prefix(NumberOption __instance) { - __instance.MinusBtn.SetInteractable(true); - __instance.PlusBtn.SetInteractable(true); - - if (__instance.oldValue != __instance.Value) + try { - __instance.oldValue = __instance.Value; - - if (__instance.Value > __instance.ValidRange.max || __instance.Value < __instance.ValidRange.min) + if (__instance.MinusBtn != null && __instance.PlusBtn != null) { - __instance.ValueText.text = $"{__instance.data.GetValueString(__instance.Value)}"; + __instance.MinusBtn.SetInteractable(true); + __instance.PlusBtn.SetInteractable(true); } - else + + if (__instance.oldValue != __instance.Value) { - __instance.ValueText.text = __instance.data.GetValueString(__instance.Value); + __instance.oldValue = __instance.Value; + + if (__instance.Value > __instance.ValidRange.max || __instance.Value < __instance.ValidRange.min) + { + __instance.ValueText.text = $"{__instance.data.GetValueString(__instance.Value)}"; + } + else + { + __instance.ValueText.text = __instance.data.GetValueString(__instance.Value); + } } } + catch { } + return false; } } \ No newline at end of file