Add custom names

This commit is contained in:
D1GQ committed 2025-10-19 22:51:39 -05:00
1 parent 01c122edfd
commit 86520d7f2b
23 files changed
+319 -181

No files matched your search

+2
View File
@@ -44,6 +44,8 @@ internal class ExtendedPlayerControl : MonoBehaviour, IMonoExtension<PlayerContr
{
MonoExtensionManager.UnregisterExtension(this);
}
internal readonly Dictionary<NetworkedPlayerInfo, string> NameSetLastFor = [];
}
internal static class PlayerControlExtension
+9 -11
View File
@@ -1,6 +1,7 @@
using AmongUs.GameOptions;
using BetterAmongUs.Data;
using BetterAmongUs.Modules;
using BetterAmongUs.Network;
using BetterAmongUs.Patches.Gameplay.Player;
using BetterAmongUs.Patches.Gameplay.UI.Settings;
using InnerNet;
@@ -129,13 +130,7 @@ static class PlayerControlHelper
}
}
}
// RPCs
// Set name for Target
internal static void RpcSetNamePrivate(this PlayerControl player, string name, PlayerControl target)
{
if (player == null || target == null) return;
RPC.RpcSetNamePrivate(player, name, target);
}
// Exile player
internal static void RpcExile(this PlayerControl player)
{
@@ -197,11 +192,12 @@ static class PlayerControlHelper
return false;
}
// Get hex color for team
internal static string GetTeamHexColor(this PlayerControl player)
internal static string GetTeamHexColor(this PlayerControl player) => player.Data.GetTeamHexColor();
internal static string GetTeamHexColor(this NetworkedPlayerInfo data)
{
if (player == null) return "#ffffff";
if (data == null) return "#ffffff";
if (player.IsImpostorTeam())
if (data.IsImpostorTeam())
{
return "#f00202";
}
@@ -210,12 +206,14 @@ static class PlayerControlHelper
return "#8cffff";
}
}
// Check if player is role type
internal static bool Is(this PlayerControl player, RoleTypes role) => player?.Data?.RoleType == role;
// Check if player is Ghost role type
internal static bool IsGhostRole(this PlayerControl player) => player?.Data?.RoleType is RoleTypes.GuardianAngel;
// Check if player is on imposter team
internal static bool IsImpostorTeam(this PlayerControl player) => player?.Data != null && player.Data.RoleType is RoleTypes.Impostor or RoleTypes.ImpostorGhost or RoleTypes.Shapeshifter or RoleTypes.Phantom or RoleTypes.Viper;
internal static bool IsImpostorTeam(this PlayerControl player) => player?.Data?.IsImpostorTeam() == true;
internal static bool IsImpostorTeam(this NetworkedPlayerInfo data) => data?.RoleType is RoleTypes.Impostor or RoleTypes.ImpostorGhost or RoleTypes.Shapeshifter or RoleTypes.Phantom or RoleTypes.Viper;
// Check if player is a imposter teammate
internal static bool IsImpostorTeammate(this PlayerControl player) =>
player != null && PlayerControl.LocalPlayer != null &&
+15
View File
@@ -25,6 +25,21 @@ internal static class Utils
return text;
}
internal static string FormatInfo(StringBuilder source)
{
if (source.Length == 0) return string.Empty;
var sb = new StringBuilder();
foreach (var part in source.ToString().Split("+++"))
{
if (!string.IsNullOrEmpty(Utils.RemoveHtmlText(part)))
{
sb.Append(part).Append(" - ");
}
}
return sb.ToString().TrimEnd(" - ".ToCharArray());
}
internal static bool IsInternetAvailable()
{
if (Application.internetReachability == NetworkReachability.NotReachable)
+130
View File
@@ -0,0 +1,130 @@
using AmongUs.GameOptions;
using BepInEx.Unity.IL2CPP.Utils;
using BetterAmongUs.Helpers;
using BetterAmongUs.Modules;
using BetterAmongUs.Network;
using BetterAmongUs.Patches.Gameplay.UI.Settings;
using System.Collections;
using System.Text;
using UnityEngine;
namespace BetterAmongUs.Managers;
internal static class HostManager
{
internal enum SyncType
{
Reset,
Gameplay,
Meeting
}
private static Coroutine? syncCoroutine = null;
internal static void SyncNames(SyncType syncType, float sDelay, int repeat = 1)
{
if (!GameState.IsHost || !BetterGameSettings.ShowRoleForClients.GetValue()) return;
if (syncCoroutine != null && GameData.Instance != null)
{
GameData.Instance.StopCoroutine(syncCoroutine);
syncCoroutine = null;
}
if (GameData.Instance != null)
{
syncCoroutine = GameData.Instance.StartCoroutine(CoSyncNamesDelay(syncType, sDelay, repeat));
}
}
private static IEnumerator CoSyncNamesDelay(SyncType syncType, float sDelay, int repeat)
{
for (int i = 0; i < repeat; i++)
{
yield return new WaitForSeconds(sDelay);
SyncNames(syncType);
}
syncCoroutine = null;
}
internal static void SyncNames(SyncType syncType)
{
if (!GameState.IsHost || !BetterGameSettings.ShowRoleForClients.GetValue()) return;
StringBuilder sb = new();
foreach (var player in BAUPlugin.AllPlayerControls)
{
if (syncType is SyncType.Reset)
{
SyncResetName(player);
continue;
}
foreach (var target in BAUPlugin.AllPlayerControls)
{
if (target.IsLocalPlayer() || target.BetterData().IsVerifiedBetterUser) continue;
switch (syncType)
{
case SyncType.Gameplay:
case SyncType.Meeting:
var shapeshift = player.shapeshiftTargetPlayerId == -1 ? player.Data : Utils.PlayerDataFromPlayerId(player.shapeshiftTargetPlayerId);
SyncNamesForGameplay(shapeshift, target, sb, player.Data, syncType == SyncType.Meeting);
break;
}
var newName = sb.ToString();
sb.Clear();
if (player.BetterPlayerControl().NameSetLastFor.TryGetValue(target.Data, out var lastName) && lastName == newName)
continue;
player.BetterPlayerControl().NameSetLastFor[target.Data] = newName;
RPC.RpcSetNameForTarget(player, newName, target);
Logger.Warning($"Setting {player.BetterData().RealName} name to {newName}, for {target.BetterData().RealName}");
}
}
}
private static void SyncResetName(PlayerControl player)
{
player.RpcSetName(player.BetterData().RealName);
}
private static void SyncNamesForGameplay(NetworkedPlayerInfo playerData, PlayerControl target, StringBuilder sb, NetworkedPlayerInfo playerNonShapeshift, bool isMeeting)
{
bool hasInfo = false;
if ((playerNonShapeshift.IsImpostorTeam() && target.IsImpostorTeam())
|| playerNonShapeshift.PlayerId == target.Data.PlayerId // Self
|| (!target.IsAlive() && !target.Is(RoleTypes.GuardianAngel)))
{
string roleInfo = $"<color={playerNonShapeshift.GetTeamHexColor()}>{playerNonShapeshift.RoleType.GetRoleName()}</color>";
if (!playerNonShapeshift.IsImpostorTeam() && playerNonShapeshift.Tasks.Count > 0)
{
int completedTasks = playerNonShapeshift.Tasks.ToArray().Count(task => task.Complete);
roleInfo += $" <color=#cbcbcb>({completedTasks}/{playerNonShapeshift.Tasks.Count})</color>";
}
sb.Append(roleInfo.Size(60f));
hasInfo = true;
}
if (hasInfo)
sb.Append('\n');
sb.Append($"{playerData.BetterData().RealName}");
if (hasInfo && !isMeeting)
sb.Append("\n ");
}
internal static void SetCustomEjectMessage(string msg)
{
}
}
+1
View File
@@ -3,6 +3,7 @@ using BetterAmongUs.Helpers;
using BetterAmongUs.Items.Structs;
using BetterAmongUs.Modules;
using BetterAmongUs.Modules.AntiCheat;
using BetterAmongUs.Network;
using HarmonyLib;
using Hazel;
using InnerNet;
+1 -34
View File
@@ -1,5 +1,4 @@
using BetterAmongUs.Helpers;
using BetterAmongUs.Modules;
using BetterAmongUs.Modules;
using BetterAmongUs.Patches.Gameplay.UI.Settings;
using HarmonyLib;
@@ -8,38 +7,6 @@ namespace BetterAmongUs.Managers;
[HarmonyPatch]
internal static class PrivateOnlyLobbyManager
{
private static void SyncNamesAsHost()
{
if (!GameState.IsHost || !GameState.IsPrivateOnlyLobby || !GameState.InGame) return;
foreach (var target in PlayerControl.AllPlayerControls)
{
if (target.IsHost() || target.BetterData().IsBetterUser) continue;
foreach (var player in PlayerControl.AllPlayerControls)
{
if (GameState.IsMeeting)
{
SetNameMeeting(player, target);
}
else
{
SetNameGameplay(player, target);
}
}
}
}
private static void SetNameGameplay(PlayerControl player, PlayerControl target)
{
player.RpcSetNamePrivate("", target);
}
private static void SetNameMeeting(PlayerControl player, PlayerControl target)
{
player.RpcSetNamePrivate("", target);
}
[HarmonyPatch(typeof(PlayerControl))]
[HarmonyPatch(nameof(PlayerControl.Die))]
[HarmonyPostfix]
+1
View File
@@ -2,6 +2,7 @@
using BetterAmongUs.Helpers;
using BetterAmongUs.Items.Attributes;
using BetterAmongUs.Managers;
using BetterAmongUs.Network;
using BetterAmongUs.Patches.Gameplay.UI.Settings;
using HarmonyLib;
using Hazel;
+1
View File
@@ -1,5 +1,6 @@
using BetterAmongUs.Helpers;
using BetterAmongUs.Items.Attributes;
using BetterAmongUs.Network;
using Hazel;
using InnerNet;
using UnityEngine;
@@ -2,6 +2,7 @@ using BetterAmongUs.Data;
using BetterAmongUs.Helpers;
using BetterAmongUs.Items.Attributes;
using BetterAmongUs.Managers;
using BetterAmongUs.Network;
using BetterAmongUs.Patches.Gameplay.UI.Settings;
using Hazel;
using InnerNet;
@@ -2,6 +2,7 @@ using BetterAmongUs.Data;
using BetterAmongUs.Helpers;
using BetterAmongUs.Items.Attributes;
using BetterAmongUs.Managers;
using BetterAmongUs.Network;
using BetterAmongUs.Patches.Gameplay.UI.Settings;
using Hazel;
using InnerNet;
@@ -2,6 +2,7 @@ using BetterAmongUs.Data;
using BetterAmongUs.Helpers;
using BetterAmongUs.Items.Attributes;
using BetterAmongUs.Managers;
using BetterAmongUs.Network;
using BetterAmongUs.Patches.Gameplay.UI.Settings;
using Hazel;
using InnerNet;
@@ -2,6 +2,7 @@ using BetterAmongUs.Data;
using BetterAmongUs.Helpers;
using BetterAmongUs.Items.Attributes;
using BetterAmongUs.Managers;
using BetterAmongUs.Network;
using BetterAmongUs.Patches.Gameplay.UI.Settings;
using Hazel;
using InnerNet;
@@ -1,4 +1,5 @@
using BetterAmongUs.Managers;
using BetterAmongUs.Network;
using BetterAmongUs.Patches.Gameplay.UI;
using Hazel;
using InnerNet;
@@ -1,4 +1,5 @@
using BetterAmongUs.Managers;
using BetterAmongUs.Network;
using Hazel;
using InnerNet;
@@ -2,6 +2,7 @@ using BetterAmongUs.Data;
using BetterAmongUs.Helpers;
using BetterAmongUs.Items.Attributes;
using BetterAmongUs.Managers;
using BetterAmongUs.Network;
using BetterAmongUs.Patches.Gameplay.UI.Settings;
using Hazel;
using InnerNet;
+1
View File
@@ -1,6 +1,7 @@
using BepInEx.Unity.IL2CPP.Utils;
using BetterAmongUs.Data;
using BetterAmongUs.Helpers;
using BetterAmongUs.Network;
using Hazel;
using Il2CppInterop.Runtime.Attributes;
using System.Collections;
+4 -19
View File
@@ -121,12 +121,12 @@ internal class PlayerInfoDisplay : MonoBehaviour
else
{
var targetData = Utils.PlayerDataFromPlayerId(_player.shapeshiftTargetPlayerId);
if (targetData != null) _player.RawSetName(targetData.BetterData().RealName);
if (targetData != null) _player.RawSetName(targetData.BetterData()?.RealName ?? targetData.PlayerName);
}
_topText?.SetText(FormatInfo(sbTagTop));
_bottomText?.SetText(FormatInfo(sbTagBottom));
_infoText?.SetText(FormatInfo(sbTag));
_topText?.SetText(Utils.FormatInfo(sbTagTop));
_bottomText?.SetText(Utils.FormatInfo(sbTagBottom));
_infoText?.SetText(Utils.FormatInfo(sbTag));
}
private string ValidateFriendCode(out string color)
@@ -263,19 +263,4 @@ internal class PlayerInfoDisplay : MonoBehaviour
text.transform.localPosition = new Vector3(0f, -1.5f, 0.4999f);
}
}
private static string FormatInfo(StringBuilder source)
{
if (source.Length == 0) return string.Empty;
var sb = new StringBuilder();
foreach (var part in source.ToString().Split("+++"))
{
if (!string.IsNullOrEmpty(Utils.RemoveHtmlText(part)))
{
sb.Append(part).Append(" - ");
}
}
return sb.ToString().TrimEnd(" - ".ToCharArray());
}
}
+110 -109
View File
@@ -1,136 +1,137 @@
using BetterAmongUs.Helpers;
using BetterAmongUs.Modules;
using Hazel;
namespace BetterAmongUs.Modules;
namespace BetterAmongUs.Network;
enum CustomRPC : int
{
// Cheat RPC's
Sicko = 420, // Results in 164
AUM = 42069, // Results in 85
AUMChat = 101,
KillNetwork = 250,
KillNetworkChat = 119,
// TOHE
AUMChat = 101,
KillNetwork = 250,
KillNetworkChat = 119,
// TOHE
VersionCheck = 80,
RequestRetryVersionCheck = 81,
//Better Among Us
LegacyBetterCheck = 150, // Unused
SendSecretToPlayer,
RequestRetryVersionCheck = 81,
//Better Among Us
LegacyBetterCheck = 150, // Unused
SendSecretToPlayer,
CheckSecretHashFromPlayer,
}
}
enum HandleGameDataTags : byte
{
NetObjectDeserialize = 1,
NetObjectHandleRPC = 2,
NetObjectSpawn = 4,
NetObjectDespawn = 5,
{
NetObjectDeserialize = 1,
NetObjectHandleRPC = 2,
NetObjectSpawn = 4,
NetObjectDespawn = 5,
ClientDataReady = 7,
}
internal static class RPC
{
internal static void RpcSetNamePrivate(PlayerControl player, string name, PlayerControl target)
{
if (!GameState.IsHost || !GameState.IsVanillaServer)
{
return;
}
{
internal static void RpcSetNameForTarget(PlayerControl player, string name, PlayerControl target)
{
if (!GameState.IsHost)
{
return;
}
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(player.NetId, (byte)RpcCalls.SetName, SendOption.Reliable, target.GetClientId());
writer.Write(player.Data.NetId);
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(player.NetId, (byte)RpcCalls.SetName, SendOption.Reliable, target.GetClientId());
writer.Write(player.Data.NetId);
writer.Write(name);
AmongUsClient.Instance.FinishRpcImmediately(writer);
}
}
internal static void RpcExile(PlayerControl player)
{
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(player.NetId, (byte)RpcCalls.Exiled, SendOption.Reliable, -1);
AmongUsClient.Instance.FinishRpcImmediately(writer);
AmongUsClient.Instance.FinishRpcImmediately(writer);
player.Exiled();
}
internal static void HandleCustomRPC(PlayerControl player, byte callId, MessageReader oldReader)
{
if (player == null || player.IsLocalPlayer() || player.Data == null || Enum.IsDefined(typeof(RpcCalls), callId)) return;
if (Enum.IsDefined(typeof(CustomRPC), (int)unchecked(callId)))
{
MessageReader reader = MessageReader.Get(oldReader);
switch (callId)
{
/*
case (byte)CustomRPC.LegacyBetterCheck:
{
var SetBetterUser = reader.ReadBoolean();
var Signature = reader.ReadString();
var Version = reader.ReadString();
var IsVerified = Signature == Main.ModSignature.ToString();
if (string.IsNullOrEmpty(Signature) || string.IsNullOrEmpty(Version))
{
BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((CustomRPC)callId)} called with invalid info");
break;
}
player.BetterData().IsBetterUser = SetBetterUser;
if (IsVerified)
{
player.BetterData().IsVerifiedBetterUser = true;
}
Logger.Log($"Received better user RPC from: {player.Data.PlayerName}:{player.Data.FriendCode}:{Utils.GetHashPuid(player)} - " +
$"BetterUser: {SetBetterUser} - " +
$"Version: {Version} - " +
$"Verified: {IsVerified} - " +
$"Signature: {Signature}");
Utils.DirtyAllNames();
}
break;
*/
case (byte)CustomRPC.SendSecretToPlayer:
{
player.BetterData().HandshakeHandler.HandleSecretFromSender(reader);
}
break;
case (byte)CustomRPC.CheckSecretHashFromPlayer:
{
player.BetterData().HandshakeHandler.HandleSecretHashFromPlayer(reader);
}
break;
/*
case (byte)CustomRPC.VersionCheck or (byte)CustomRPC.RequestRetryVersionCheck:
if (player.IsHost())
{
player.BetterData().IsTOHEHost = true;
}
break;
*/
}
}
}
internal static void HandleCustomRPC(PlayerControl player, byte callId, MessageReader oldReader)
{
if (player == null || player.IsLocalPlayer() || player.Data == null || Enum.IsDefined(typeof(RpcCalls), callId)) return;
if (Enum.IsDefined(typeof(CustomRPC), (int)unchecked(callId)))
{
MessageReader reader = MessageReader.Get(oldReader);
switch (callId)
{
/*
case (byte)CustomRPC.LegacyBetterCheck:
{
var SetBetterUser = reader.ReadBoolean();
var Signature = reader.ReadString();
var Version = reader.ReadString();
var IsVerified = Signature == Main.ModSignature.ToString();
if (string.IsNullOrEmpty(Signature) || string.IsNullOrEmpty(Version))
{
BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((CustomRPC)callId)} called with invalid info");
break;
}
player.BetterData().IsBetterUser = SetBetterUser;
if (IsVerified)
{
player.BetterData().IsVerifiedBetterUser = true;
}
Logger.Log($"Received better user RPC from: {player.Data.PlayerName}:{player.Data.FriendCode}:{Utils.GetHashPuid(player)} - " +
$"BetterUser: {SetBetterUser} - " +
$"Version: {Version} - " +
$"Verified: {IsVerified} - " +
$"Signature: {Signature}");
Utils.DirtyAllNames();
}
break;
*/
case (byte)CustomRPC.SendSecretToPlayer:
{
player.BetterData().HandshakeHandler.HandleSecretFromSender(reader);
}
break;
case (byte)CustomRPC.CheckSecretHashFromPlayer:
{
player.BetterData().HandshakeHandler.HandleSecretHashFromPlayer(reader);
}
break;
/*
case (byte)CustomRPC.VersionCheck or (byte)CustomRPC.RequestRetryVersionCheck:
if (player.IsHost())
{
player.BetterData().IsTOHEHost = true;
}
break;
*/
}
}
else if (!Enum.IsDefined(typeof(CustomRPC), (int)unchecked(callId)))
{
try
{
if (!GameState.IsHost && !GameState.IsTOHEHostLobby)
{
if (player.IsHost())
{
var Icon = Translator.GetString("BAUMark");
var BAU = $"<color=#278720>{Icon}</color><color=#0ed400><b>{Translator.GetString("BAU")}</b></color><color=#278720>{Icon}</color>";
Utils.DisconnectSelf(string.Format(Translator.GetString("ModdedLobbyMsg"), BAU));
}
}
}
catch { }
}
{
try
{
if (!GameState.IsHost && !GameState.IsTOHEHostLobby)
{
if (player.IsHost())
{
var Icon = Translator.GetString("BAUMark");
var BAU = $"<color=#278720>{Icon}</color><color=#0ed400><b>{Translator.GetString("BAU")}</b></color><color=#278720>{Icon}</color>";
Utils.DisconnectSelf(string.Format(Translator.GetString("ModdedLobbyMsg"), BAU));
}
}
}
catch { }
}
}
}
+2 -7
View File
@@ -1,4 +1,5 @@
using BetterAmongUs.Helpers;
using BetterAmongUs.Managers;
using BetterAmongUs.Modules;
using HarmonyLib;
using System.Text;
@@ -17,13 +18,7 @@ internal static class GameManagersPatch
[HarmonyPostfix]
private static void EndGame_Postfix(/*GameManager __instance*/)
{
if (GameState.IsHost)
{
foreach (PlayerControl player in BAUPlugin.AllPlayerControls)
{
player.RpcSetName(player.Data.PlayerName);
}
}
HostManager.SyncNames(HostManager.SyncType.Reset);
}
}
@@ -1,5 +1,6 @@
using BetterAmongUs.Helpers;
using BetterAmongUs.Items.OptionItems;
using BetterAmongUs.Managers;
using HarmonyLib;
namespace BetterAmongUs.Patches.Gameplay.Player;
@@ -32,6 +33,8 @@ internal static class PlayerControlPatch
Logger.LogPrivate($"{__instance.Data.PlayerName} Has killed {target.Data.PlayerName} as {__instance.Data.RoleType.GetRoleName()}", "EventLog");
__instance.BetterData().RoleInfo.Kills += 1;
HostManager.SyncNames(HostManager.SyncType.Gameplay);
}
[HarmonyPatch(nameof(PlayerControl.Shapeshift))]
@@ -44,6 +47,22 @@ internal static class PlayerControlPatch
Logger.LogPrivate($"{__instance.Data.PlayerName} Has Shapeshifted into {target.Data.PlayerName}, did animate: {animate}", "EventLog");
else
Logger.LogPrivate($"{__instance.Data.PlayerName} Has Un-Shapeshifted, did animate: {animate}", "EventLog");
HostManager.SyncNames(HostManager.SyncType.Gameplay, 0.2f, 30);
}
[HarmonyPatch(nameof(PlayerControl.CompleteTask))]
[HarmonyPostfix]
private static void CompleteTask_Postfix(PlayerControl __instance)
{
HostManager.SyncNames(HostManager.SyncType.Gameplay);
}
[HarmonyPatch(nameof(PlayerControl.StartMeeting))]
[HarmonyPrefix]
private static void StartMeeting_Prefix(PlayerControl __instance)
{
HostManager.SyncNames(HostManager.SyncType.Meeting);
}
[HarmonyPatch(nameof(PlayerControl.SetRoleInvisibility))]
+8
View File
@@ -1,4 +1,5 @@
using BetterAmongUs.Helpers;
using BetterAmongUs.Managers;
using BetterAmongUs.Modules;
using BetterAmongUs.Mono;
using BetterAmongUs.Patches.Gameplay.UI.Chat;
@@ -45,4 +46,11 @@ internal static class MeetingHudPatch
ChatPatch.ClearPlayerChats();
}
}
[HarmonyPatch(nameof(MeetingHud.SetMasksEnabled))]
[HarmonyPostfix]
private static void SetMasksEnabled_Postfix(MeetingHud __instance)
{
HostManager.SyncNames(HostManager.SyncType.Reset);
}
}
@@ -64,7 +64,7 @@ internal static class GameSettingMenuPatch
BetterGameSettings.UseBanWordList = OptionCheckboxItem.Create(500, BetterSettingsTab, "BetterSetting.Setting.UseBanWordList", true);
BetterGameSettings.UseBanWordListOnlyLobby = OptionCheckboxItem.Create(1400, BetterSettingsTab, "BetterSetting.Setting.UseBanWordListOnlyLobby", true, BetterGameSettings.UseBanWordList);
OptionDividerItem.Create(BetterSettingsTab);
BetterGameSettings.ShowRoleForClients = OptionCheckboxItem.Create(1700, BetterSettingsTab, "BetterSetting.Setting.ShowRoleForClient", false);
BetterGameSettings.ShowRoleForClients = OptionCheckboxItem.Create(1700, BetterSettingsTab, "BetterSetting.Setting.ShowRoleForClients", false);
OptionDividerItem.Create(BetterSettingsTab);
}
+7
View File
@@ -17,6 +17,13 @@ internal static class HudManagerPatch
private static bool HasBeenWelcomed = false;
[HarmonyPatch(nameof(HudManager.CoShowIntro))]
[HarmonyPostfix]
private static void CoShowIntro_Postfix(HudManager __instance)
{
HostManager.SyncNames(HostManager.SyncType.Gameplay, 0.25f, 20);
}
[HarmonyPatch(nameof(HudManager.Start))]
[HarmonyPostfix]
private static void Start_Postfix(HudManager __instance)