From b53bb6c1faa50688847d1de2f06fc5262e56ce6d Mon Sep 17 00:00:00 2001 From: D1GQ Date: Mon, 29 Jul 2024 04:49:50 -0500 Subject: [PATCH] better host improvements --- Modules/BetterHostManager.cs | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/Modules/BetterHostManager.cs b/Modules/BetterHostManager.cs index e6d45a7..cee18d8 100644 --- a/Modules/BetterHostManager.cs +++ b/Modules/BetterHostManager.cs @@ -1,12 +1,13 @@ using Hazel; using InnerNet; using System.Text; -using System.Text.RegularExpressions; namespace BetterAmongUs; class BetterHostManager { + public static Dictionary> LastPlayerName = []; // Targetid, Playerid, Name + public static bool CheckRPCAsHost(PlayerControl player, byte callId, MessageReader reader, ref bool canceled) { if (player == null) return true; @@ -133,18 +134,11 @@ class BetterHostManager if (!IsBetterHost && !force) return; - string friendCode = player.Data.FriendCode; - - string pattern = @"^[a-zA-Z0-9#]+$"; - string hashtagPattern = @"^#[0-9]{4}$"; - string friendCodeColor = (Regex.Replace(friendCode, hashtagPattern, string.Empty).Length is > 10 or < 5 || !Regex.IsMatch(friendCode, pattern) || !Regex.IsMatch(friendCode, hashtagPattern)) ? "#00f7ff" : "#ff0000"; - foreach (PlayerControl target in Main.AllPlayerControls) { if (target == null || target == PlayerControl.LocalPlayer || target.GetIsBetterUser()) continue; string NewName = player.CurrentOutfit.PlayerName; - string BottomTag = ""; StringBuilder sbTopTag = new StringBuilder(); StringBuilder sbTopInfo = new StringBuilder(); @@ -160,10 +154,8 @@ class BetterHostManager sbTopTag.Append($"Better Host+++"); else if (player.GetIsBetterUser()) sbTopTag.Append("Better User+++"); - - BottomTag += $"{friendCode}"; } - else if (GameStates.IsInGame && !GameStates.IsLobby) + else if (GameStates.IsInGamePlay) { string Role = $"{player.GetRoleName()}"; if (!player.IsImpostorTeam() && !target.IsImpostorTeam()) @@ -192,7 +184,23 @@ class BetterHostManager } } - NewName = $"{sbTopInfo}\n{NewName}\n{BottomTag}"; + NewName = $"{sbTopInfo}\n{NewName}"; + + // Don't send rpc if name is the same! + if (!LastPlayerName.ContainsKey(target.Data.PlayerId)) + { + LastPlayerName[target.Data.PlayerId] = new Dictionary(); + } + + if (LastPlayerName[target.Data.PlayerId].ContainsKey(player.Data.PlayerId)) + { + if (LastPlayerName[target.Data.PlayerId][player.Data.PlayerId] == NewName) + { + return; + } + } + + LastPlayerName[target.Data.PlayerId][player.Data.PlayerId] = NewName; player.RpcSetNamePrivate(NewName, target); Logger.Log($"Set {player.Data.PlayerName} name to {NewName.Replace("\n", "-")} for {target.Data.PlayerName}", "RPC");