From 596ce9e89284203d6ed593cad7833a449c74a66f Mon Sep 17 00:00:00 2001 From: D1GQ Date: Tue, 20 Aug 2024 22:14:29 -0500 Subject: [PATCH] A lot of fixes and Hotfix 2 --- Modules/AntiCheat.cs | 82 ++++++++++++++++------------ Modules/BetterNotificationManager.cs | 10 ++-- Modules/ExtendedPlayerControl.cs | 2 +- Modules/ExtendedPlayerInfo.cs | 15 ++--- Patches/ClientPatch.cs | 2 +- Patches/GamePlayManagerPatch.cs | 2 +- Patches/PlayerControlPatch.cs | 6 +- main.cs | 2 +- 8 files changed, 69 insertions(+), 52 deletions(-) diff --git a/Modules/AntiCheat.cs b/Modules/AntiCheat.cs index a8f5803..e1fd693 100644 --- a/Modules/AntiCheat.cs +++ b/Modules/AntiCheat.cs @@ -78,7 +78,7 @@ class AntiCheat { player.ReportPlayer(ReportReasons.Cheating_Hacking); BetterNotificationManager.NotifyCheat(player, $"Platform Spoofer", newText: "Has been detected with a cheat"); - Logger.LogCheat($"{player.Data.PlayerName} Platform Spoofer: {__instance.XboxPlatformId}"); + Logger.LogCheat($"{player.BetterData().RealName} Platform Spoofer: {__instance.XboxPlatformId}"); } } @@ -88,7 +88,7 @@ class AntiCheat { player.ReportPlayer(ReportReasons.Cheating_Hacking); BetterNotificationManager.NotifyCheat(player, $"Platform Spoofer", newText: "Has been detected with a cheat"); - Logger.LogCheat($"{player.Data.PlayerName} Platform Spoofer: {__instance.PsnPlatformId}"); + Logger.LogCheat($"{player.BetterData().RealName} Platform Spoofer: {__instance.PsnPlatformId}"); } } } @@ -196,7 +196,7 @@ class AntiCheat if (player.IsAlive() && GameStates.IsInGamePlay && !GameStates.IsMeeting && !GameStates.IsExilling) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {player.IsAlive()} && {GameStates.IsInGamePlay} && {!GameStates.IsMeeting} && {!GameStates.IsExilling}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {player.IsAlive()} && {GameStates.IsInGamePlay} && {!GameStates.IsMeeting} && {!GameStates.IsExilling}"); } return; @@ -207,7 +207,7 @@ class AntiCheat if ((!player.IsImpostorTeam() && Role != RoleTypes.Engineer) || player.Data.IsDead) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {player.IsImpostorTeam()} && {Role != RoleTypes.Engineer} || {player.Data.IsDead}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {player.IsImpostorTeam()} && {Role != RoleTypes.Engineer} || {player.Data.IsDead}"); } return; @@ -218,7 +218,7 @@ class AntiCheat if (Role is not RoleTypes.GuardianAngel) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {Role is not RoleTypes.GuardianAngel}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {Role is not RoleTypes.GuardianAngel}"); } return; @@ -230,12 +230,20 @@ class AntiCheat { PlayerControl target = reader.ReadNetObject(); + if (GameStates.IsHost) + { + BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {GameStates.IsHost}"); + + return; + } + if (target != null) { if (!player.IsImpostorTeam() || !player.IsAlive() || player.IsInVanish() || target.IsImpostorTeam()) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {!player.IsImpostorTeam()} || {player.IsInVanish()}" + + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {!player.IsImpostorTeam()} || {player.IsInVanish()}" + $" || {!target.IsAlive()} || {target.IsImpostorTeam()}"); } } @@ -252,7 +260,7 @@ class AntiCheat if (level >= 200) { BetterNotificationManager.NotifyCheat(player, $"Invalid Level: {level}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {level >= 200}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {level >= 200}"); } } return; @@ -266,7 +274,7 @@ class AntiCheat { byte Type = reader.ReadByte(); BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)} - {Enum.GetName((SystemTypes)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {!player.IsImpostorTeam()}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {!player.IsImpostorTeam()}"); return; } @@ -282,7 +290,7 @@ class AntiCheat && player.BetterData().TimeSinceLastTask < 1.25f) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {player.IsImpostorTeam()} || {!player.Data.Tasks.ToArray().Any(task => task.Id == taskId)} ||" + + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {player.IsImpostorTeam()} || {!player.Data.Tasks.ToArray().Any(task => task.Id == taskId)} ||" + $" {player.BetterData().LastTaskId == taskId} || {player.BetterData().LastTaskId != taskId} && {player.BetterData().TimeSinceLastTask < 1.25f}"); player.BetterData().TimeSinceLastTask = 0f; @@ -300,7 +308,7 @@ class AntiCheat if (!player.IsImpostorTeam()) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {!player.IsImpostorTeam()}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {!player.IsImpostorTeam()}"); } } @@ -309,7 +317,7 @@ class AntiCheat if (player?.CurrentOutfit?.PetId == "pet_EmptyPet") { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {player?.CurrentOutfit?.PetId == "pet_EmptyPet"}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {player?.CurrentOutfit?.PetId == "pet_EmptyPet"}"); } return; @@ -380,7 +388,7 @@ class AntiCheat if (!player.IsImpostorTeam() || GameStates.IsAnySabotageActive() || !Utils.SystemTypeIsSabotage(SaboType)) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName(SaboType)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName(SaboType)}: {!player.IsImpostorTeam()} || {GameStates.IsAnySabotageActive()} " + + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName(SaboType)}: {!player.IsImpostorTeam()} || {GameStates.IsAnySabotageActive()} " + $"|| {!Utils.SystemTypeIsSabotage(SaboType)}"); return false; } @@ -392,7 +400,7 @@ class AntiCheat if (amount == hostNum && !player.IsHost()) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName(systemType)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName(systemType)}: {amount == hostNum} && {!player.IsHost()}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName(systemType)}: {amount == hostNum} && {!player.IsHost()}"); return false; } @@ -401,7 +409,7 @@ class AntiCheat if (systemType is SystemTypes.Electrical) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName(systemType)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName(systemType)}: {systemType is SystemTypes.Electrical}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName(systemType)}: {systemType is SystemTypes.Electrical}"); } return false; @@ -412,14 +420,14 @@ class AntiCheat if (player.BetterData().OpenSabotageNum == 0) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName(systemType)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName(systemType)}: {player.BetterData().OpenSabotageNum == 0}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName(systemType)}: {player.BetterData().OpenSabotageNum == 0}"); return false; } if (amount == openPanelNum && amount == openPanelNum + 1) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName(systemType)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName(systemType)}: {amount == openPanelNum} && {amount == openPanelNum + 1}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName(systemType)}: {amount == openPanelNum} && {amount == openPanelNum + 1}"); return false; } @@ -427,7 +435,7 @@ class AntiCheat || player.BetterData().OpenSabotageNum == 2 && amount == openPanelNum) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName(systemType)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName(systemType)}: {player.BetterData().OpenSabotageNum == 1} && {amount == openPanelNum + 1} " + + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName(systemType)}: {player.BetterData().OpenSabotageNum == 1} && {amount == openPanelNum + 1} " + $"|| {player.BetterData().OpenSabotageNum == 2} && {amount == openPanelNum}"); return false; } @@ -439,7 +447,7 @@ class AntiCheat && amount > MaxLightNum) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName(systemType)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName(systemType)}: {amount != fixNum} && {amount != fixNum + 1}" + + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName(systemType)}: {amount != fixNum} && {amount != fixNum + 1}" + $" && {amount != closePanelNum} && {amount != closePanelNum + 1}" + $" && {amount > MaxLightNum}"); return false; @@ -450,7 +458,7 @@ class AntiCheat if (amount > MaxLightNum) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName(systemType)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName(systemType)}: {amount > MaxLightNum}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName(systemType)}: {amount > MaxLightNum}"); return false; } } @@ -480,15 +488,19 @@ class AntiCheat { if (target == PlayerControl.LocalPlayer) { - if (target.BetterData().CheckBanExploit && !target.IsAlive()) + target.BetterData().TimesAttemptedKilled++; + + if (target.BetterData().TimesAttemptedKilled >= 5 && !target.IsAlive()) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action: Attempted To Ban Exploit"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)} 2: {target.BetterData().CheckBanExploit} && {!target.IsAlive()}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)} 2: {target.BetterData().CheckBanExploit} && {!target.IsAlive()}"); return false; } - else + + // Cancel murder on client + if (!target.IsAlive()) { - target.BetterData().CheckBanExploit = true; + return false; } } } @@ -513,7 +525,7 @@ class AntiCheat || player.inMovingPlat || player.onLadder || player.MyPhysics.Animations.IsPlayingAnyLadderAnimation()) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {GameStates.IsMeeting} && {GameStates.IsHideNSeek} || {!player.IsAlive()} || {player.IsInVent()} || {player.shapeshifting}" + + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {GameStates.IsMeeting} && {GameStates.IsHideNSeek} || {!player.IsAlive()} || {player.IsInVent()} || {player.shapeshifting}" + $" || {player.inMovingPlat} || {player.onLadder} || {player.MyPhysics.Animations.IsPlayingAnyLadderAnimation()}"); if (GameStates.IsHost) @@ -534,7 +546,7 @@ class AntiCheat if (!UnityEngine.Object.FindAnyObjectByType() || !deadPlayerInfo.IsDead || deadPlayerInfo == player.Data) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {!UnityEngine.Object.FindAnyObjectByType()} || {!deadPlayerInfo.IsDead} || {deadPlayerInfo == player.Data}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {!UnityEngine.Object.FindAnyObjectByType()} || {!deadPlayerInfo.IsDead} || {deadPlayerInfo == player.Data}"); if (GameStates.IsHost) { return false; @@ -550,7 +562,7 @@ class AntiCheat if (player.BetterData().TimesCalledMeeting >= GameOptionsManager.Instance.currentNormalGameOptions.NumEmergencyMeetings) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {player.BetterData().TimesCalledMeeting} -> {GameOptionsManager.Instance.currentNormalGameOptions.NumEmergencyMeetings}" + + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {player.BetterData().TimesCalledMeeting} -> {GameOptionsManager.Instance.currentNormalGameOptions.NumEmergencyMeetings}" + $" - {player.BetterData().TimesCalledMeeting >= GameOptionsManager.Instance.currentNormalGameOptions.NumEmergencyMeetings}"); if (GameStates.IsHost) { @@ -573,14 +585,14 @@ class AntiCheat if (Role is not RoleTypes.Shapeshifter || !player.IsAlive()) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)} 1: {Role is not RoleTypes.Shapeshifter} || {!player.IsAlive()}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)} 1: {Role is not RoleTypes.Shapeshifter} || {!player.IsAlive()}"); return false; } else if (!flag && !GameStates.IsMeeting && !GameStates.IsExilling && !player.IsInVent()) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)} 2: {!flag} && {!GameStates.IsMeeting} && {!GameStates.IsExilling} && {!player.IsInVent()}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)} 2: {!flag} && {!GameStates.IsMeeting} && {!GameStates.IsExilling} && {!player.IsInVent()}"); return false; } } @@ -590,7 +602,7 @@ class AntiCheat if (Role is not RoleTypes.Phantom || player.Data.IsDead) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)} 1: {Role is not RoleTypes.Phantom} || {player.Data.IsDead}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)} 1: {Role is not RoleTypes.Phantom} || {player.Data.IsDead}"); return false; } @@ -599,7 +611,7 @@ class AntiCheat if (player.IsInVent()) { BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)} 2: {player.IsInVent()}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)} 2: {player.IsInVent()}"); } } } @@ -611,7 +623,7 @@ class AntiCheat or (byte)RpcCalls.CloseMeeting) { BetterNotificationManager.NotifyCheat(player, $"Invalid Host RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {!player.IsHost()}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {!player.IsHost()}"); return false; } } @@ -621,13 +633,13 @@ class AntiCheat if (callId is (byte)RpcCalls.CheckName or (byte)RpcCalls.SetLevel) { BetterNotificationManager.NotifyCheat(player, $"Invalid Set RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {player.DataIsCollected() == true}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {player.DataIsCollected() == true}"); if (callId is (byte)RpcCalls.CheckName) { var name = reader.ReadString(); Utils.AddChatPrivate($"{player.GetPlayerNameAndColor()} Has tried to change their name to '{name}' but has been undone!"); - Logger.LogCheat($"{player.Data.PlayerName} Has tried to change their name to '{name}' but has been undone!"); + Logger.LogCheat($"{player.BetterData().RealName} Has tried to change their name to '{name}' but has been undone!"); } return false; } @@ -643,7 +655,7 @@ class AntiCheat or (byte)RpcCalls.SetNamePlate) { BetterNotificationManager.NotifyCheat(player, $"Invalid Set RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {GameStates.IsInGamePlay}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {GameStates.IsInGamePlay}"); return false; } } @@ -678,7 +690,7 @@ class AntiCheat or (byte)RpcCalls.CheckVanish) { BetterNotificationManager.NotifyCheat(player, $"Invalid Lobby RPC: {Enum.GetName((RpcCalls)callId)}"); - Logger.LogCheat($"{player.Data.PlayerName} {Enum.GetName((RpcCalls)callId)}: {GameStates.IsInGame} && {GameStates.IsLobby}"); + Logger.LogCheat($"{player.BetterData().RealName} {Enum.GetName((RpcCalls)callId)}: {GameStates.IsInGame} && {GameStates.IsLobby}"); return false; } } diff --git a/Modules/BetterNotificationManager.cs b/Modules/BetterNotificationManager.cs index a826f32..5a20c92 100644 --- a/Modules/BetterNotificationManager.cs +++ b/Modules/BetterNotificationManager.cs @@ -35,23 +35,23 @@ class BetterNotificationManager public static void NotifyCheat(PlayerControl player, string reason, string newText = "", bool kickPlayer = true) { - string text = $"Player: {player?.CurrentOutfit.PlayerName} Has been detected doing an unauthorized action: {reason}"; + string text = $"Player: {player?.BetterData().RealName} Has been detected doing an unauthorized action: {reason}"; if (newText != "") - text = $"Player: {player?.CurrentOutfit.PlayerName} " + newText + $": {reason}"; + text = $"Player: {player?.BetterData().RealName} " + newText + $": {reason}"; if (!AntiCheat.PlayerData.ContainsKey(Utils.GetHashPuid(player))) { AntiCheat.PlayerData[Utils.GetHashPuid(player)] = player.Data.FriendCode; - BetterDataManager.SaveCheatData(Utils.GetHashPuid(player), player.Data.FriendCode, player.Data.PlayerName, "cheatData", reason); + BetterDataManager.SaveCheatData(Utils.GetHashPuid(player), player.Data.FriendCode, player?.BetterData().RealName, "cheatData", reason); Notify(text, Time: 8f); } + Logger.LogCheat(Utils.RemoveHtmlText(text)); + if (GameStates.IsHost && kickPlayer) { player.Kick(true, $"banned by Anti-Cheat!\n Reason: {reason}", true); } - - Logger.LogCheat(Utils.RemoveHtmlText(text)); } public static void Update() diff --git a/Modules/ExtendedPlayerControl.cs b/Modules/ExtendedPlayerControl.cs index c153095..4871018 100644 --- a/Modules/ExtendedPlayerControl.cs +++ b/Modules/ExtendedPlayerControl.cs @@ -111,7 +111,7 @@ static class ExtendedPlayerControl player.BetterData().BannedByAntiCheat = AntiCheatBan && ban; NetworkedPlayerInfo playerInfo = player.Data; - string saveName = player.Data.PlayerName; + string saveName = player.BetterData().RealName; if (setReasonInfo != "") { diff --git a/Modules/ExtendedPlayerInfo.cs b/Modules/ExtendedPlayerInfo.cs index 68712c2..d191192 100644 --- a/Modules/ExtendedPlayerInfo.cs +++ b/Modules/ExtendedPlayerInfo.cs @@ -8,19 +8,20 @@ public static class PlayerControlDataExtension { public class ExtendedPlayerInfo { - public NetworkedPlayerInfo? ThisPlayerData { get; set; } + public NetworkedPlayerInfo? _Data { get; set; } + public string RealName { get; set; } = string.Empty; public Dictionary LastNameSetFor { get; set; } = []; public bool IsBetterUser { get; set; } = false; public bool IsBetterHost { get; set; } = false; public bool IsTOHEHost { get; set; } = false; public bool BannedByAntiCheat { get; set; } = false; - public bool CheckBanExploit { get; set; } = false; + public int TimesAttemptedKilled { get; set; } = 0; // Track Game Info public int OpenSabotageNum { get; set; } = 0; public bool IsFixingPanelSabotage => OpenSabotageNum != 0; public float TimeSinceLastTask { get; set; } = 5f; - public uint LastTaskId { get; set; } = 0; + public uint LastTaskId { get; set; } = 999; public int TimesCalledMeeting { get; set; } = 0; public DisconnectReasons DisconnectReason { get; set; } = DisconnectReasons.Unknown; public ExtendedRoleInfo? RoleInfo { get; set; } @@ -46,7 +47,7 @@ public static class PlayerControlDataExtension player.BetterData().LastTaskId = 999; player.BetterData().RoleInfo.Kills = 0; player.BetterData().OpenSabotageNum = 0; - player.BetterData().CheckBanExploit = false; + player.BetterData().TimesAttemptedKilled = 0; } else { @@ -66,7 +67,7 @@ public static class PlayerControlDataExtension { playerInfo[player.Data.Puid] = new ExtendedPlayerInfo { - ThisPlayerData = player.Data, + _Data = player.Data, RoleInfo = new ExtendedRoleInfo() }; } @@ -81,7 +82,7 @@ public static class PlayerControlDataExtension { playerInfo[info.Puid] = new ExtendedPlayerInfo { - ThisPlayerData = info, + _Data = info, RoleInfo = new ExtendedRoleInfo() }; } @@ -100,7 +101,7 @@ public static class PlayerControlDataExtension { playerInfo[player.Data.Puid] = new ExtendedPlayerInfo { - ThisPlayerData = player.Data, + _Data = player.Data, RoleInfo = new ExtendedRoleInfo() }; } diff --git a/Patches/ClientPatch.cs b/Patches/ClientPatch.cs index 6836178..dc59b23 100644 --- a/Patches/ClientPatch.cs +++ b/Patches/ClientPatch.cs @@ -77,7 +77,7 @@ public class ClientPatch [HarmonyPrefix] public static void KickPlayer_Prefix(ref int clientId, ref bool ban) { - if (ban) + if (ban && Main.UseBannedList.Value) { NetworkedPlayerInfo info = Utils.PlayerFromClientId(clientId).Data; BetterDataManager.SaveBanList(info.FriendCode, info.Puid); diff --git a/Patches/GamePlayManagerPatch.cs b/Patches/GamePlayManagerPatch.cs index f6fd709..3d8f9a8 100644 --- a/Patches/GamePlayManagerPatch.cs +++ b/Patches/GamePlayManagerPatch.cs @@ -251,7 +251,7 @@ class GamePlayManager foreach (var data in playersData) { - var name = $"{data.PlayerName}"; + var name = $"{data.BetterData().RealName}"; string playerTheme(string text) => $"{text}"; string roleInfo; diff --git a/Patches/PlayerControlPatch.cs b/Patches/PlayerControlPatch.cs index cb134fb..313ad15 100644 --- a/Patches/PlayerControlPatch.cs +++ b/Patches/PlayerControlPatch.cs @@ -1,7 +1,9 @@ using AmongUs.Data; using AmongUs.GameOptions; using HarmonyLib; +using Hazel; using Il2CppSystem.Linq; +using InnerNet; using LibCpp2IL; using System.Text; using System.Text.RegularExpressions; @@ -223,13 +225,15 @@ class PlayerControlPatch [HarmonyPatch(nameof(PlayerControl.RpcSetName))] [HarmonyPrefix] - public static bool RpcSetName_Prefix([HarmonyArgument(0)] string name) + public static bool RpcSetName_Prefix(PlayerControl __instance, [HarmonyArgument(0)] string name) { if (!GameStates.IsVanillaServer && Utils.IsHtmlText(name)) { return false; } + __instance.BetterData().RealName = name; + return true; } diff --git a/main.cs b/main.cs index d1dcc43..811c706 100644 --- a/main.cs +++ b/main.cs @@ -24,7 +24,7 @@ public class Main : BasePlugin { public const ReleaseTypes ReleaseBuildType = ReleaseTypes.Release; public const string CanaryNum = "0"; - public const string HotfixNum = "1"; + public const string HotfixNum = "2"; public const bool IsHotFix = true; public const string PluginGuid = "com.d1gq.betteramongus"; public const string PluginVersion = "1.0.4";