From 577bc102daa18f36a5308b11da96921bb8eb1e39 Mon Sep 17 00:00:00 2001 From: D1GQ Date: Fri, 20 Sep 2024 02:52:41 -0500 Subject: [PATCH 1/4] Start and cancel game translation --- Patches/GamePlayManagerPatch.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Patches/GamePlayManagerPatch.cs b/Patches/GamePlayManagerPatch.cs index 020abdd..d89142b 100644 --- a/Patches/GamePlayManagerPatch.cs +++ b/Patches/GamePlayManagerPatch.cs @@ -150,11 +150,11 @@ class GamePlayManager __instance.StartButton.gameObject.SetActive(true); if (__instance.startState == GameStartManager.StartingStates.Countdown) { - __instance.StartButton.buttonText.text = string.Format("Cancel: {0}", (int)__instance.countDownTimer + 1); + __instance.StartButton.buttonText.text = string.Format("{0}: {1}", Translator.GetString(StringNames.Cancel),(int)__instance.countDownTimer + 1); } else { - __instance.StartButton.buttonText.text = "Start Game"; + __instance.StartButton.buttonText.text = Translator.GetString(StringNames.StartLabel); } } [HarmonyPatch(nameof(GameStartManager.BeginGame))] From 81e4a976ee9f8f7835d2d069b2e06b150937f5ff Mon Sep 17 00:00:00 2001 From: D1GQ Date: Sun, 22 Sep 2024 16:12:55 -0500 Subject: [PATCH 2/4] Fixes --- Modules/AntiCheat.cs | 19 ++++++++++++++++++- Modules/ExtendedPlayerInfo.cs | 6 ++++++ Patches/ClientPatch.cs | 2 +- Patches/MeetingHudPatch.cs | 13 +++++++++++++ main.cs | 8 ++++---- 5 files changed, 42 insertions(+), 6 deletions(-) diff --git a/Modules/AntiCheat.cs b/Modules/AntiCheat.cs index d17d071..6d076ab 100644 --- a/Modules/AntiCheat.cs +++ b/Modules/AntiCheat.cs @@ -281,7 +281,7 @@ class AntiCheat if (level + 1 > BetterGameSettings.DetectedLevelAbove.GetInt()) { - BetterNotificationManager.NotifyCheat(player, string.Format(Translator.GetString("InvalidLevelRPC"), level)); + BetterNotificationManager.NotifyCheat(player, string.Format(Translator.GetString("AntiCheat.InvalidLevelRPC"), level)); Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {level > BetterGameSettings.DetectedLevelAbove.GetInt()} - {level} > {BetterGameSettings.DetectedLevelAbove.GetInt()}"); } @@ -621,6 +621,22 @@ class AntiCheat } } + if (callId is (byte)RpcCalls.SendChatNote) + { + var type = reader.ReadByte(); + + if (!GameStates.IsMeeting || (ChatNoteTypes)type == ChatNoteTypes.DidVote && player.BetterData().AntiCheatInfo.ChatDidVote) + { + BetterNotificationManager.NotifyCheat(player, string.Format(Translator.GetString("AntiCheat.InvalidActionRPC"), Enum.GetName((RpcCalls)callId))); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {!GameStates.IsMeeting} || {(ChatNoteTypes)type == ChatNoteTypes.DidVote} && {player.BetterData().AntiCheatInfo.ChatDidVote}"); + } + + if ((ChatNoteTypes)type == ChatNoteTypes.DidVote) + { + player.BetterData().AntiCheatInfo.ChatDidVote = true; + } + } + if (callId is (byte)RpcCalls.Shapeshift) { var target = reader.ReadNetObject(); @@ -713,6 +729,7 @@ class AntiCheat { if (callId is (byte)RpcCalls.StartMeeting or (byte)RpcCalls.ReportDeadBody + or (byte)RpcCalls.SendChatNote or (byte)RpcCalls.CloseMeeting or (byte)RpcCalls.Exiled or (byte)RpcCalls.CastVote diff --git a/Modules/ExtendedPlayerInfo.cs b/Modules/ExtendedPlayerInfo.cs index 04046a6..f6351df 100644 --- a/Modules/ExtendedPlayerInfo.cs +++ b/Modules/ExtendedPlayerInfo.cs @@ -27,6 +27,7 @@ public static class PlayerControlDataExtension public class ExtendedAntiCheatInfo { public bool BannedByAntiCheat { get; set; } = false; + public bool ChatDidVote { get; set; } = false; public List AUMChats { get; set; } = []; public int TimesAttemptedKilled { get; set; } = 0; public int OpenSabotageNum { get; set; } = 0; @@ -75,6 +76,11 @@ public static class PlayerControlDataExtension player.BetterData().RoleInfo.DeadDisplayRole = player.Data.RoleType; } + if (!GameStates.IsMeeting) + { + player.BetterData().AntiCheatInfo.ChatDidVote = false; + } + if (string.IsNullOrEmpty(player.BetterData().RealName)) { player.BetterData().RealName = player.Data.PlayerName; diff --git a/Patches/ClientPatch.cs b/Patches/ClientPatch.cs index 2d1146c..d27a3f8 100644 --- a/Patches/ClientPatch.cs +++ b/Patches/ClientPatch.cs @@ -51,7 +51,7 @@ public class ClientPatch [HarmonyPostfix] public static void StartInitialLoginFlow_Postfix(EOSManager __instance) { - __instance.StartCoroutine(DataBaseConnect.Init()); + // __instance.StartCoroutine(DataBaseConnect.Init()); } } // Log game exit diff --git a/Patches/MeetingHudPatch.cs b/Patches/MeetingHudPatch.cs index eb00b71..d9d4d7b 100644 --- a/Patches/MeetingHudPatch.cs +++ b/Patches/MeetingHudPatch.cs @@ -204,6 +204,19 @@ class MeetingHudUpdatePatch } } +[HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.ClearVote))] +class MeetingHud_ClearVotePatch +{ + public static void Postfix() + { + // Clear info for Anti-Cheat + foreach (var player in Main.AllPlayerControls) + { + player.BetterData().AntiCheatInfo.ChatDidVote = false; + } + } +} + [HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.OnDestroy))] class MeetingHud_OnDestroyPatch { diff --git a/main.cs b/main.cs index f19be1b..fa37047 100644 --- a/main.cs +++ b/main.cs @@ -25,8 +25,8 @@ public class Main : BasePlugin { public static readonly ReleaseTypes ReleaseBuildType = ReleaseTypes.Release; public const string BetaNum = "0"; - public const string HotfixNum = "0"; - public const bool IsHotFix = false; + public const string HotfixNum = "1"; + public const bool IsHotFix = true; public const string PluginGuid = "com.ten.betteramongus"; public const string PluginVersion = "1.1.4"; public const string ReleaseDate = "09.20.2024"; // mm/dd/yyyy @@ -155,11 +155,11 @@ public class Main : BasePlugin { Logger = BepInEx.Logging.Logger.CreateLogSource(PluginGuid); + BetterDataManager.SetUp(); + BetterDataManager.LoadData(); LoadOptions(); Translator.Init(); Harmony.PatchAll(); - BetterDataManager.SetUp(); - BetterDataManager.LoadData(); GameSettingMenuPatch.SetupSettings(true); if (PlatformData.Platform == Platforms.StandaloneSteamPC) From 734faa4c77e2de8fa47d59589c8c9535c9649801 Mon Sep 17 00:00:00 2001 From: D1GQ Date: Sun, 22 Sep 2024 16:25:59 -0500 Subject: [PATCH 3/4] Fix hide and seek custom imposters --- Patches/RoleManagerPatch.cs | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/Patches/RoleManagerPatch.cs b/Patches/RoleManagerPatch.cs index 0b5166b..36508d9 100644 --- a/Patches/RoleManagerPatch.cs +++ b/Patches/RoleManagerPatch.cs @@ -1,6 +1,7 @@ using AmongUs.GameOptions; using HarmonyLib; using Hazel; +using static Il2CppSystem.Globalization.CultureInfo; namespace BetterAmongUs.Patches; @@ -276,8 +277,9 @@ public class RoleManagerPatch if (NumImpostors > Main.AllPlayerControls.Length) NumImpostors = Main.AllPlayerControls.Length; - List Impostors = []; - List Crewmates = []; + List Impostors = []; + List Crewmates = []; + List CrewAndImps() => [.. Impostors, .. Crewmates]; // Set imp from settings int[] betterImpostorSettings = @@ -300,7 +302,7 @@ public class RoleManagerPatch { if (Impostors.Count < NumImpostors) { - Impostors.Add(player); + Impostors.Add(player.Data); Logger.LogPrivate($"Settings Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {player.Data.PlayerName}", "RoleManager"); } } @@ -320,14 +322,14 @@ public class RoleManagerPatch { if (Impostors.Count < NumImpostors) { - Impostors.Add(player); + Impostors.Add(player.Data); Logger.LogPrivate($"Override Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {player.Data.PlayerName}", "RoleManager"); } else continue; } else if (role is RoleTypes.Engineer) { - Crewmates.Add(player); + Crewmates.Add(player.Data); Logger.LogPrivate($"Override Assigned {Utils.GetRoleName(RoleTypes.Engineer)} role to {player.Data.PlayerName}", "RoleManager"); } } @@ -336,7 +338,7 @@ public class RoleManagerPatch // Get players in random order List players = Main.AllPlayerControls - .Where(player => !Impostors.Contains(player) && !Crewmates.Contains(player)) + .Where(player => !CrewAndImps().Contains(player.Data)) .ToList(); int n = players.Count; @@ -356,29 +358,25 @@ public class RoleManagerPatch if (Impostors.Count < NumImpostors) { - if (!Crewmates.Contains(pc)) - { - Impostors.Add(pc); - Logger.LogPrivate($"Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {pc.Data.PlayerName}", "RoleManager"); - } + Impostors.Add(pc.Data); + Logger.LogPrivate($"Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {pc.Data.PlayerName}", "RoleManager"); } else { - if (!Impostors.Contains(pc)) - { - Crewmates.Add(pc); - Logger.LogPrivate($"Assigned {Utils.GetRoleName(RoleTypes.Engineer)} role to {pc.Data.PlayerName}", "RoleManager"); - } + Crewmates.Add(pc.Data); + Logger.LogPrivate($"Assigned {Utils.GetRoleName(RoleTypes.Engineer)} role to {pc.Data.PlayerName}", "RoleManager"); } } - foreach (var player in Impostors) + foreach (var data in Impostors) { + var player = Utils.PlayerFromPlayerId(data.PlayerId); player.RpcSetRole(RoleTypes.Impostor); } - foreach (var player in Crewmates) + foreach (var data in Crewmates) { + var player = Utils.PlayerFromPlayerId(data.PlayerId); player.RpcSetRole(RoleTypes.Engineer); } From f8f69d3b01430c1056365db6edfad5a9a2a17507 Mon Sep 17 00:00:00 2001 From: D1GQ Date: Sun, 22 Sep 2024 16:34:01 -0500 Subject: [PATCH 4/4] fix --- Modules/RPC.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/RPC.cs b/Modules/RPC.cs index 7e2b56d..4fa3b8d 100644 --- a/Modules/RPC.cs +++ b/Modules/RPC.cs @@ -209,7 +209,7 @@ internal static class RPC try { - if (!GameStates.IsTOHEHostLobby) + if (!GameStates.IsTOHEHostLobby && callId is not unchecked((byte)CustomRPC.Sicko) or unchecked((byte)CustomRPC.AUM) or (byte)CustomRPC.AUMChat) { var flag = Enum.IsDefined(typeof(CustomRPC), (int)callId) || Enum.IsDefined(typeof(RpcCalls), callId);