diff --git a/src/Managers/NetworkManager.cs b/src/Managers/NetworkManager.cs index 900ca7d..3a9e9e9 100644 --- a/src/Managers/NetworkManager.cs +++ b/src/Managers/NetworkManager.cs @@ -199,8 +199,6 @@ internal static class NetworkManager HandleInvalidTag(reader); break; } - - yield break; } /// diff --git a/src/Network/Configs/BAUUpdateData.cs b/src/Network/Configs/BAUUpdateData.cs index 7cdd876..8926b81 100644 --- a/src/Network/Configs/BAUUpdateData.cs +++ b/src/Network/Configs/BAUUpdateData.cs @@ -144,7 +144,6 @@ internal sealed class BAUUpdateData { yield return null; } - yield break; } /// diff --git a/src/Patches/Gameplay/Anticheat/CheckPlayerLevelPatch.cs b/src/Patches/Gameplay/Anticheat/CheckPlayerLevelPatch.cs index 9f8abc9..42d55a5 100644 --- a/src/Patches/Gameplay/Anticheat/CheckPlayerLevelPatch.cs +++ b/src/Patches/Gameplay/Anticheat/CheckPlayerLevelPatch.cs @@ -6,7 +6,7 @@ using HarmonyLib; namespace BetterAmongUs.Patches.Gameplay.Anticheat; [HarmonyPatch] -internal class CheckPlayerLevelPatch +internal static class CheckPlayerLevelPatch { [HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.FixedUpdate))] [HarmonyPostfix] diff --git a/src/Patches/Gameplay/Anticheat/InitializePlayerTimeoutPatch.cs b/src/Patches/Gameplay/Anticheat/InitializePlayerTimeoutPatch.cs new file mode 100644 index 0000000..a217ee6 --- /dev/null +++ b/src/Patches/Gameplay/Anticheat/InitializePlayerTimeoutPatch.cs @@ -0,0 +1,57 @@ +using BepInEx.Unity.IL2CPP.Utils.Collections; +using BetterAmongUs.Generated; +using BetterAmongUs.Modules; +using BetterAmongUs.Utilities; +using HarmonyLib; +using System.Collections; + +namespace BetterAmongUs.Patches.Gameplay.Anticheat; + +[HarmonyPatch] +internal static class InitializePlayerTimeoutPatch +{ + [HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.ClientInitialize))] + [HarmonyPostfix] + private static void PlayerControl_ClientInitialize_Postfix(PlayerControl __instance, ref Il2CppSystem.Collections.IEnumerator __result) + { + __result = CoClientInitialize(__instance, __result).WrapToIl2Cpp(); + } + + private static IEnumerator CoClientInitialize(PlayerControl player, Il2CppSystem.Collections.IEnumerator original) + { + player.Visible = false; + bool exit = false; + yield return player.AssertWithTimeout((Func)(() => GameData.Instance != null && player.Data != null && !player.Data.IsIncomplete), (Action)(() => + { + if (GameState.IsHost) + { + player.Kick(true, TranslationStrings.AntiCheat_Reason_Initialize.LocalizedString, true, forceBan: true); + } + else + { + if (GameData.Instance != null && player.Data != null) + { + var outfit = player.Data.DefaultOutfit; + outfit.PlayerName = TranslationStrings.Player_Loading.LocalizedString; + outfit.HatId = HatData.EmptyId; + outfit.VisorId = VisorData.EmptyId; + outfit.SkinId = SkinData.EmptyId; + outfit.PetId = PetData.EmptyId; + outfit.NamePlateId = NamePlateData.EmptyId; + outfit.ColorId = 18; + } + else + { + exit = true; + } + } + }), 25f); + + if (exit) + { + yield break; + } + + yield return original; + } +} diff --git a/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs b/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs index c3ac6d4..de8d22a 100644 --- a/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs +++ b/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs @@ -14,7 +14,7 @@ using UnityEngine; namespace BetterAmongUs.Patches.Gameplay.Anticheat; [HarmonyPatch] -internal class PlatformSpoofPatch +internal static class PlatformSpoofPatch { [HarmonyPatch(typeof(PlatformSpecificData), nameof(PlatformSpecificData.Deserialize))] [HarmonyPostfix] diff --git a/src/Resources/Lang/en_US.json b/src/Resources/Lang/en_US.json index f6e0d12..3042bc2 100644 --- a/src/Resources/Lang/en_US.json +++ b/src/Resources/Lang/en_US.json @@ -137,6 +137,7 @@ "AntiCheat.Reason.PlatformSpoofer": "Platform Spoofer", "AntiCheat.Reason.RPCSentPS": "RPC Spam", "AntiCheat.Reason.VoteKick": "Vote Kick Exploit", + "AntiCheat.Reason.Initialize": "Failed To Initialize Player", "AntiCheat.Reason.SickoMenuUser": "Known Sicko User", "AntiCheat.Reason.AUMUser": "Known AUM User", "AntiCheat.Reason.KNUser": "Known KN User", diff --git a/src/build/Generated/TranslationStrings.cs b/src/build/Generated/TranslationStrings.cs index 511f228..9878aeb 100644 --- a/src/build/Generated/TranslationStrings.cs +++ b/src/build/Generated/TranslationStrings.cs @@ -673,6 +673,11 @@ public static class TranslationStrings /// public static readonly TranslationString AntiCheat_Reason_VoteKick = new("AntiCheat.Reason.VoteKick"); + /// + /// Base Translation: Failed To Initialize Player + /// + public static readonly TranslationString AntiCheat_Reason_Initialize = new("AntiCheat.Reason.Initialize"); + /// /// Base Translation: Known Sicko User ///