diff --git a/src/BAUPlugin.cs b/src/BAUPlugin.cs
index 0990a2f..42ca138 100644
--- a/src/BAUPlugin.cs
+++ b/src/BAUPlugin.cs
@@ -146,7 +146,8 @@ internal class BAUPlugin : BasePlugin
///
private void OnChainloaderFinished()
{
- if (!BAUModdedSupportEvents.InvokeAll_OnBAULoad(this)) return;
+ if (!BAUModdedSupportEvents.InvokeAll_OnBAULoad(this))
+ return;
BAUModdedSupportFlags.Initialize();
GithubAPI.Connect();
@@ -214,7 +215,8 @@ internal class BAUPlugin : BasePlugin
/// Gets the persistent data path for Among Us.
///
/// The persistent data path string.
- internal static string GetDataPathToAmongUs() => Application.persistentDataPath;
+ internal static string GetDataPathToAmongUs()
+ => Application.persistentDataPath;
///
/// Gets the game installation path for Among Us.
diff --git a/src/Commands/AllCommandsCommand.cs b/src/Commands/AllCommandsCommand.cs
index 2dc8e16..6c0b60a 100644
--- a/src/Commands/AllCommandsCommand.cs
+++ b/src/Commands/AllCommandsCommand.cs
@@ -12,7 +12,7 @@ internal sealed class AllCommandsCommand : BaseCommand
internal override void Run()
{
- BaseCommand?[] allNormalCommands = allCommands.Where(cmd => cmd.Type == CommandType.Normal && cmd.ShowCommand()).ToArray();
+ BaseCommand[] allNormalCommands = allCommands.Where(cmd => cmd.Type == CommandType.Normal && cmd.ShowCommand()).ToArray();
string list;
var open = "┌──────── ";
var mid = "├ ";
@@ -21,12 +21,9 @@ internal sealed class AllCommandsCommand : BaseCommand
if (allNormalCommands.Length > 0)
{
- for (int i = 0; i < allNormalCommands.Length; i++)
+ foreach (var command in allNormalCommands)
{
- if (i < allNormalCommands.Length)
- {
- list += $"\n{mid}{ChatCommandsPatch.CommandPrefix}{allNormalCommands[i].Name} {allNormalCommands[i].Description}.";
- }
+ list += $"\n{mid}{ChatCommandsPatch.CommandPrefix}{command.Name} {command.Description}.";
}
}
diff --git a/src/Commands/Arguments/BaseArgument.cs b/src/Commands/Arguments/BaseArgument.cs
index 65a6895..fcba647 100644
--- a/src/Commands/Arguments/BaseArgument.cs
+++ b/src/Commands/Arguments/BaseArgument.cs
@@ -5,12 +5,12 @@
///
/// The command this argument belongs to.
/// Information about the argument.
-internal abstract class BaseArgument(BaseCommand? command, string argInfo)
+internal abstract class BaseArgument(BaseCommand command, string argInfo)
{
///
/// Gets the command this argument belongs to.
///
- internal BaseCommand? Command { get; } = command;
+ internal BaseCommand Command { get; } = command;
///
/// Gets information about the argument.
@@ -36,5 +36,6 @@ internal abstract class BaseArgument(BaseCommand? command, string argInfo)
/// Gets the closest suggestion for the current argument value.
///
/// The closest matching suggestion, or empty string if none found.
- internal string GetClosestSuggestion() => ArgSuggestions.FirstOrDefault(name => name.StartsWith(Arg, StringComparison.OrdinalIgnoreCase)) ?? string.Empty;
+ internal string GetClosestSuggestion() =>
+ ArgSuggestions.FirstOrDefault(name => name.StartsWith(Arg, StringComparison.OrdinalIgnoreCase)) ?? string.Empty;
}
\ No newline at end of file
diff --git a/src/Commands/Arguments/BoolArgument.cs b/src/Commands/Arguments/BoolArgument.cs
index 8e3c1af..084e1b7 100644
--- a/src/Commands/Arguments/BoolArgument.cs
+++ b/src/Commands/Arguments/BoolArgument.cs
@@ -5,7 +5,7 @@
///
/// The command this argument belongs to.
/// Information about the argument (default: "{bool}").
-internal sealed class BoolArgument(BaseCommand? command, string argInfo = "{bool}") : BaseArgument(command, argInfo)
+internal sealed class BoolArgument(BaseCommand command, string argInfo = "{bool}") : BaseArgument(command, argInfo)
{
///
/// Gets the boolean argument suggestions for auto-completion.
diff --git a/src/Commands/Arguments/PlayerArgument.cs b/src/Commands/Arguments/PlayerArgument.cs
index 43f61ca..cc674b9 100644
--- a/src/Commands/Arguments/PlayerArgument.cs
+++ b/src/Commands/Arguments/PlayerArgument.cs
@@ -7,7 +7,7 @@ namespace BetterAmongUs.Commands.Arguments;
///
/// The command this argument belongs to.
/// Information about the argument (default: "{player}").
-internal sealed class PlayerArgument(BaseCommand? command, string argInfo = "{player}") : BaseArgument(command, argInfo)
+internal sealed class PlayerArgument(BaseCommand command, string argInfo = "{player}") : BaseArgument(command, argInfo)
{
///
/// Gets the player argument suggestions for auto-completion.
diff --git a/src/Commands/Arguments/StringArgument.cs b/src/Commands/Arguments/StringArgument.cs
index 4cd095e..2b8000f 100644
--- a/src/Commands/Arguments/StringArgument.cs
+++ b/src/Commands/Arguments/StringArgument.cs
@@ -5,7 +5,7 @@
///
/// The command this argument belongs to.
/// Information about the argument (default: "{String}").
-internal sealed class StringArgument(BaseCommand? command, string argInfo = "{String}") : BaseArgument(command, argInfo)
+internal sealed class StringArgument(BaseCommand command, string argInfo = "{String}") : BaseArgument(command, argInfo)
{
// This class inherits the basic string argument functionality from BaseArgument
// and can be extended with string-specific parsing or validation if needed.
diff --git a/src/Commands/BaseCommand.cs b/src/Commands/BaseCommand.cs
index 85cfbbd..09c5a94 100644
--- a/src/Commands/BaseCommand.cs
+++ b/src/Commands/BaseCommand.cs
@@ -13,7 +13,7 @@ internal abstract class BaseCommand
///
/// Gets an array of all registered commands.
///
- internal static readonly BaseCommand?[] allCommands = [.. RegisterCommandAttribute.Instances];
+ internal static readonly BaseCommand[] allCommands = [.. RegisterCommandAttribute.Instances];
///
/// Gets the type of the command.
diff --git a/src/Commands/DumpCommand.cs b/src/Commands/DumpCommand.cs
index de20a42..b4ee035 100644
--- a/src/Commands/DumpCommand.cs
+++ b/src/Commands/DumpCommand.cs
@@ -9,7 +9,8 @@ internal sealed class DumpCommand : BaseCommand
{
internal override string Name => "dump";
internal override string Description => "Dump the entire log to the user's desktop";
- internal override bool ShowCommand() => !ModInfo.Starlight;
+ internal override bool ShowCommand() =>
+ !ModInfo.Starlight;
internal override bool CanRunCommand(out string reason)
{
diff --git a/src/Commands/EndGameCommand.cs b/src/Commands/EndGameCommand.cs
index e21cafb..ad32730 100644
--- a/src/Commands/EndGameCommand.cs
+++ b/src/Commands/EndGameCommand.cs
@@ -8,7 +8,8 @@ internal sealed class EndGameCommand : BaseCommand
{
internal override string Name => "endgame";
internal override string Description => "Force end the game";
- internal override bool ShowCommand() => GameState.IsHost && !GameState.IsLobby && !GameState.IsFreePlay;
+ internal override bool ShowCommand() =>
+ GameState.IsHost && !GameState.IsLobby && !GameState.IsFreePlay;
internal override void Run()
{
GameManager.Instance.RpcEndGame(GameOverReason.ImpostorDisconnect, false);
diff --git a/src/Commands/KickCommand.cs b/src/Commands/KickCommand.cs
index f553f94..13b2fb8 100644
--- a/src/Commands/KickCommand.cs
+++ b/src/Commands/KickCommand.cs
@@ -22,17 +22,17 @@ internal sealed class KickCommand : BaseCommand
}
public KickCommand()
{
- playerArgument = new PlayerArgument(this);
- boolArgument = new BoolArgument(this, "{ban}");
- Arguments = [playerArgument, boolArgument];
+ _playerArgument = new PlayerArgument(this);
+ _boolArgument = new BoolArgument(this, "{ban}");
+ Arguments = [_playerArgument, _boolArgument];
}
- private PlayerArgument playerArgument { get; }
- private BoolArgument boolArgument { get; }
+ private readonly PlayerArgument _playerArgument;
+ private readonly BoolArgument _boolArgument;
internal override void Run()
{
- var player = playerArgument.TryGetTarget();
- var isBan = boolArgument.GetBool();
+ var player = _playerArgument.TryGetTarget();
+ var isBan = _boolArgument.GetBool();
if (player != null && isBan != null && !player.IsHost())
{
player.Kick((bool)isBan);
diff --git a/src/Commands/PlayerInfoCommand.cs b/src/Commands/PlayerInfoCommand.cs
index 84109ff..307c2af 100644
--- a/src/Commands/PlayerInfoCommand.cs
+++ b/src/Commands/PlayerInfoCommand.cs
@@ -1,6 +1,6 @@
-using BetterAmongUs.Commands.Arguments;
+using BetterAmongUs.Attributes;
+using BetterAmongUs.Commands.Arguments;
using BetterAmongUs.Helpers;
-using BetterAmongUs.Attributes;
using System.Text;
namespace BetterAmongUs.Commands;
@@ -13,26 +13,26 @@ internal sealed class PlayerInfoCommand : BaseCommand
public PlayerInfoCommand()
{
- playerArgument = new PlayerArgument(this);
- Arguments = [playerArgument];
+ _playerArgument = new PlayerArgument(this);
+ Arguments = [_playerArgument];
}
- private PlayerArgument playerArgument { get; }
+ private readonly PlayerArgument _playerArgument;
internal override void Run()
{
- var player = playerArgument.TryGetTarget();
- if (player != null)
+ var player = _playerArgument.TryGetTarget();
+ if (player?.Data != null)
{
StringBuilder sb = new();
var hexColor = Utils.Color32ToHex(Palette.PlayerColors[player.CurrentOutfit.ColorId]);
var format1 = "┌ •";
var format2 = "├ •";
var format3 = "└ •";
- sb.Append($"{player?.Data?.PlayerName} Info:\n");
- sb.Append($"{format1} ID: {player?.Data?.PlayerId}\n");
- sb.Append($"{format2} HashPUID: {Utils.GetHashStr($"{player?.Data?.Puid}")}\n");
+ sb.Append($"{player.Data.PlayerName} Info:\n");
+ sb.Append($"{format1} ID: {player.Data.PlayerId}\n");
+ sb.Append($"{format2} HashPUID: {Utils.GetHashStr($"{player.Data.Puid}")}\n");
sb.Append($"{format2} Platform: {Utils.GetPlatformName(player)}\n");
- sb.Append($"{format3} FriendCode: {player?.Data?.FriendCode}");
+ sb.Append($"{format3} FriendCode: {player.Data.FriendCode}");
CommandResultText(sb.ToString());
}
}
diff --git a/src/Commands/PlayersInfoCommand.cs b/src/Commands/PlayersInfoCommand.cs
index d988d2b..8a832da 100644
--- a/src/Commands/PlayersInfoCommand.cs
+++ b/src/Commands/PlayersInfoCommand.cs
@@ -1,5 +1,5 @@
-using BetterAmongUs.Helpers;
-using BetterAmongUs.Attributes;
+using BetterAmongUs.Attributes;
+using BetterAmongUs.Helpers;
using System.Text;
namespace BetterAmongUs.Commands;
@@ -15,12 +15,14 @@ internal sealed class PlayersInfoCommand : BaseCommand
StringBuilder sb = new();
foreach (PlayerControl player in BAUPlugin.AllPlayerControls.Where(player => !player.isDummy))
{
+ if (player?.Data == null) continue;
+
var hexColor = Utils.Color32ToHex(Palette.PlayerColors[player.CurrentOutfit.ColorId]);
- sb.Append($"{player?.Data?.PlayerName} Info:\n");
- sb.Append($"{player?.Data?.PlayerId} - ");
- sb.Append($"{Utils.GetHashStr($"{player?.Data?.Puid}")} - ");
+ sb.Append($"{player.Data.PlayerName} Info:\n");
+ sb.Append($"{player.Data.PlayerId} - ");
+ sb.Append($"{Utils.GetHashStr($"{player.Data.Puid}")} - ");
sb.Append($"{Utils.GetPlatformName(player)} - ");
- sb.Append($"{player?.Data?.FriendCode}");
+ sb.Append($"{player.Data.FriendCode}");
sb.Append("\n\n");
}
CommandResultText(sb.ToString());
diff --git a/src/Commands/RemovePlayerCommand.cs b/src/Commands/RemovePlayerCommand.cs
index 99e79b2..9d97f19 100644
--- a/src/Commands/RemovePlayerCommand.cs
+++ b/src/Commands/RemovePlayerCommand.cs
@@ -1,7 +1,7 @@
-using BetterAmongUs.Commands.Arguments;
+using BetterAmongUs.Attributes;
+using BetterAmongUs.Commands.Arguments;
using BetterAmongUs.Data;
using BetterAmongUs.Helpers;
-using BetterAmongUs.Attributes;
namespace BetterAmongUs.Commands;
@@ -13,26 +13,26 @@ internal sealed class RemovePlayerCommand : BaseCommand
public RemovePlayerCommand()
{
- identifierArgument = new StringArgument(this, "{identifier}")
+ _identifierArgument = new StringArgument(this, "{identifier}")
{
GetArgSuggestions = () =>
BetterDataManager.BetterDataFile.AllCheatData
.SelectMany(info => new[] { info.HashPuid.Replace(' ', '_'), info.FriendCode.Replace(' ', '_'), info.PlayerName.Replace(' ', '_') })
.ToArray()
};
- Arguments = [identifierArgument];
+ Arguments = [_identifierArgument];
}
- private StringArgument identifierArgument { get; }
+ private readonly StringArgument _identifierArgument;
internal override void Run()
{
- if (BetterDataManager.RemovePlayer(identifierArgument.Arg) == true)
+ if (BetterDataManager.RemovePlayer(_identifierArgument.Arg) == true)
{
- Utils.AddChatPrivate($"{identifierArgument.Arg} successfully removed from local Anti-Cheat data!");
+ Utils.AddChatPrivate($"{_identifierArgument.Arg} successfully removed from local Anti-Cheat data!");
}
else
{
- Utils.AddChatPrivate($"{identifierArgument.Arg} Could not find player data from identifier");
+ Utils.AddChatPrivate($"{_identifierArgument.Arg} Could not find player data from identifier");
}
}
}
diff --git a/src/Commands/SetPrefixCommand.cs b/src/Commands/SetPrefixCommand.cs
index b636600..da0fd48 100644
--- a/src/Commands/SetPrefixCommand.cs
+++ b/src/Commands/SetPrefixCommand.cs
@@ -13,17 +13,18 @@ internal sealed class SetPrefixCommand : BaseCommand
internal SetPrefixCommand()
{
- prefixArgument = new StringArgument(this, "{prefix}");
- Arguments = [prefixArgument];
+ _prefixArgument = new StringArgument(this, "{prefix}");
+ Arguments = [_prefixArgument];
}
- private StringArgument? prefixArgument { get; }
+ private readonly StringArgument _prefixArgument;
- internal override bool ShowCommand() => !BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Force_BAU_Command_Prefix);
+ internal override bool ShowCommand() =>
+ !BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Force_BAU_Command_Prefix);
internal override void Run()
{
var oldPrefix = BAUConfigs.CommandPrefix.Value;
- var prefix = prefixArgument.Arg.ToCharArray()?.First().ToString();
+ var prefix = _prefixArgument.Arg.ToCharArray()?.First().ToString();
if (!string.IsNullOrEmpty(prefix))
{
BAUConfigs.CommandPrefix.Value = prefix;
diff --git a/src/Data/BetterDataManager.cs b/src/Data/BetterDataManager.cs
index 7474b76..00a52ae 100644
--- a/src/Data/BetterDataManager.cs
+++ b/src/Data/BetterDataManager.cs
@@ -57,7 +57,7 @@ internal static class BetterDataManager
///
/// Current compressed settings file path.
///
- internal static string SettingsFile => Path.Combine(filePathFolderSettings, $"Preset-{BAUConfigs.SettingsPreset?.Value ?? 0}.dat");
+ internal static string SettingsFile => Path.Combine(filePathFolderSettings, $"Preset-{BAUConfigs.SettingsPreset.Value}.dat");
///
/// File containing banned player identifiers.
diff --git a/src/Data/Config/BAUConfigs.cs b/src/Data/Config/BAUConfigs.cs
index 45b7f7d..a3712e6 100644
--- a/src/Data/Config/BAUConfigs.cs
+++ b/src/Data/Config/BAUConfigs.cs
@@ -11,82 +11,82 @@ internal static class BAUConfigs
///
/// Gets the configuration entry for anti-cheat setting.
///
- internal static BAUConfigEntry? AntiCheat { get; } = new("Better Options", "AntiCheat", true);
+ internal static BAUConfigEntry AntiCheat { get; } = new("Better Options", "AntiCheat", true);
///
/// Gets the configuration entry for sending Better RPC setting.
///
- internal static BAUConfigEntry? SendBetterRpc { get; } = new("Better Options", "SendBetterRpc", true);
+ internal static BAUConfigEntry SendBetterRpc { get; } = new("Better Options", "SendBetterRpc", true);
///
/// Gets the configuration entry for better notifications setting.
///
- internal static BAUConfigEntry? BetterNotifications { get; } = new("Better Options", "BetterNotifications", true);
+ internal static BAUConfigEntry BetterNotifications { get; } = new("Better Options", "BetterNotifications", true);
///
/// Gets the configuration entry for force own language setting.
///
- internal static BAUConfigEntry? ForceOwnLanguage { get; } = new("Better Options", "ForceOwnLanguage", false);
+ internal static BAUConfigEntry ForceOwnLanguage { get; } = new("Better Options", "ForceOwnLanguage", false);
///
/// Gets the configuration entry for chat dark mode setting.
///
- internal static BAUConfigEntry? ChatDarkMode { get; } = new("Better Options", "ChatDarkMode", true);
+ internal static BAUConfigEntry ChatDarkMode { get; } = new("Better Options", "ChatDarkMode", true);
///
/// Gets the configuration entry for chat in gameplay setting.
///
- internal static BAUConfigEntry? ChatInGameplay { get; } = new("Better Options", "ChatInGameplay", true);
+ internal static BAUConfigEntry ChatInGameplay { get; } = new("Better Options", "ChatInGameplay", true);
///
/// Gets the configuration entry for lobby player info setting.
///
- internal static BAUConfigEntry? LobbyPlayerInfo { get; } = new("Better Options", "LobbyPlayerInfo", true);
+ internal static BAUConfigEntry LobbyPlayerInfo { get; } = new("Better Options", "LobbyPlayerInfo", true);
///
/// Gets the configuration entry for disable lobby theme setting.
///
- internal static BAUConfigEntry? DisableLobbyTheme { get; } = new("Better Options", "DisableLobbyTheme", true);
+ internal static BAUConfigEntry DisableLobbyTheme { get; } = new("Better Options", "DisableLobbyTheme", true);
///
/// Gets the configuration entry for unlock FPS setting.
///
- internal static BAUConfigEntry? UnlockFPS { get; } = new("Better Options", "UnlockFPS", false);
+ internal static BAUConfigEntry UnlockFPS { get; } = new("Better Options", "UnlockFPS", false);
///
/// Gets the configuration entry for show FPS setting.
///
- internal static BAUConfigEntry? ShowFPS { get; } = new("Better Options", "ShowFPS", false);
+ internal static BAUConfigEntry ShowFPS { get; } = new("Better Options", "ShowFPS", false);
///
/// Gets the configuration entry for minimap icons setting.
///
- internal static BAUConfigEntry? MinimapIcons { get; } = new("Better Options", "MinimapIcons", true);
+ internal static BAUConfigEntry MinimapIcons { get; } = new("Better Options", "MinimapIcons", true);
///
/// Gets the configuration entry for vent color groups setting.
///
- internal static BAUConfigEntry? VentColorGroups { get; } = new("Better Options", "VentColorGroups", true);
+ internal static BAUConfigEntry VentColorGroups { get; } = new("Better Options", "VentColorGroups", true);
///
/// Gets the configuration entry for command prefix setting.
///
- internal static BAUConfigEntry? CommandPrefix { get; } = new("Mod", "CommandPrefix", "/");
+ internal static BAUConfigEntry CommandPrefix { get; } = new("Mod", "CommandPrefix", "/");
///
/// Gets the configuration entry for private only lobby setting.
///
- internal static BAUConfigEntry? PrivateOnlyLobby { get; } = new("Mod", "PrivateOnlyLobby", false);
+ internal static BAUConfigEntry PrivateOnlyLobby { get; } = new("Mod", "PrivateOnlyLobby", false);
///
/// Gets the configuration entry for favorite color setting.
///
- internal static BAUConfigEntry? FavoriteColor { get; } = new("Mod", "FavoriteColor", -1);
+ internal static BAUConfigEntry FavoriteColor { get; } = new("Mod", "FavoriteColor", -1);
///
/// Gets the configuration entry for the settings preset.
///
- internal static BAUConfigEntry? SettingsPreset { get; } = new("Mod", "SettingsPreset", 0);
+ internal static BAUConfigEntry SettingsPreset { get; } = new("Mod", "SettingsPreset", 0);
///
/// Loads configuration options from BepInEx config file.
diff --git a/src/Data/Json/AbstractJsonFile.cs b/src/Data/Json/AbstractJsonFile.cs
index 70802ab..6ff1a91 100644
--- a/src/Data/Json/AbstractJsonFile.cs
+++ b/src/Data/Json/AbstractJsonFile.cs
@@ -32,7 +32,9 @@ internal abstract class AbstractJsonFile
///
internal virtual void Init()
{
- if (_hasInit) return;
+ if (_hasInit)
+ return;
+
_hasInit = true;
if (!IsFileValid())
diff --git a/src/Data/Json/BetterDataFile.cs b/src/Data/Json/BetterDataFile.cs
index 7aefef4..39dc53c 100644
--- a/src/Data/Json/BetterDataFile.cs
+++ b/src/Data/Json/BetterDataFile.cs
@@ -43,7 +43,8 @@ internal sealed class BetterDataFile : AbstractJsonFile
///
/// The player information to check.
/// True if the player matches a cheat entry, false otherwise.
- internal bool CheckPlayerData(NetworkedPlayerInfo data) => CheckPlayerDataWithReason(data).check;
+ internal bool CheckPlayerData(NetworkedPlayerInfo data) =>
+ CheckPlayerDataWithReason(data).check;
///
/// Checks if player data matches any known cheat entries and provides a reason if found.
diff --git a/src/Data/Json/OutfitData.cs b/src/Data/Json/OutfitData.cs
index 55d2cf8..9f5b05b 100644
--- a/src/Data/Json/OutfitData.cs
+++ b/src/Data/Json/OutfitData.cs
@@ -37,14 +37,16 @@ internal sealed class OutfitData
/// Gets the outfit data for the currently selected preset.
///
/// The outfit data for the current preset.
- internal static OutfitData GetOutfitData() => BetterDataManager.BetterDataFile.OutfitData.ElementAt(BetterDataManager.BetterDataFile.SelectedOutfitPreset);
+ internal static OutfitData GetOutfitData() =>
+ BetterDataManager.BetterDataFile.OutfitData.ElementAt(BetterDataManager.BetterDataFile.SelectedOutfitPreset);
///
/// Gets the outfit data for a specific preset index.
///
/// The index of the preset to retrieve.
/// The outfit data for the specified preset.
- internal static OutfitData GetOutfitData(int index) => BetterDataManager.BetterDataFile.OutfitData.ElementAt(index);
+ internal static OutfitData GetOutfitData(int index) =>
+ BetterDataManager.BetterDataFile.OutfitData.ElementAt(index);
private static bool ignoreChange;
@@ -57,7 +59,9 @@ internal sealed class OutfitData
var Save = () =>
{
- if (ignoreChange) return;
+ if (ignoreChange)
+ return;
+
GetOutfitData().SetFromData();
BetterDataManager.BetterDataFile.Save();
};
diff --git a/src/Data/Replay/Events/AppearReplayEvent.cs b/src/Data/Replay/Events/AppearReplayEvent.cs
index a995bf9..841666c 100644
--- a/src/Data/Replay/Events/AppearReplayEvent.cs
+++ b/src/Data/Replay/Events/AppearReplayEvent.cs
@@ -16,10 +16,13 @@ internal sealed class AppearReplayEvent : IReplayEvent<(int playerId, bool anima
public void Play()
{
var player = Utils.PlayerFromPlayerId(EventData.playerId);
- if (player?.Data.RoleType is RoleTypes.Phantom)
- {
- player?.SetRoleInvisibility(false, EventData.animate, true);
- }
+ if (player == null)
+ return;
+
+ if (player.Data.RoleType != RoleTypes.Phantom)
+ return;
+
+ player.SetRoleInvisibility(false, EventData.animate, true);
}
public void Record(PlayerControl player, bool animate)
diff --git a/src/Data/Replay/Events/MurderReplayEvent.cs b/src/Data/Replay/Events/MurderReplayEvent.cs
index 9e2de03..efcaea1 100644
--- a/src/Data/Replay/Events/MurderReplayEvent.cs
+++ b/src/Data/Replay/Events/MurderReplayEvent.cs
@@ -15,8 +15,14 @@ internal sealed class MurderReplayEvent : IReplayEvent<(int killerId, int target
public void Play()
{
var killer = Utils.PlayerFromPlayerId(EventData.killerId);
+ if (killer == null)
+ return;
+
var target = Utils.PlayerFromPlayerId(EventData.targetId);
- killer?.MurderPlayer(target, MurderResultFlags.Succeeded);
+ if (target == null)
+ return;
+
+ killer.MurderPlayer(target, MurderResultFlags.Succeeded);
}
public void Record(PlayerControl killer, PlayerControl target)
diff --git a/src/Data/Replay/Events/ProtectReplayEvent.cs b/src/Data/Replay/Events/ProtectReplayEvent.cs
index f94a68d..9db1707 100644
--- a/src/Data/Replay/Events/ProtectReplayEvent.cs
+++ b/src/Data/Replay/Events/ProtectReplayEvent.cs
@@ -16,11 +16,17 @@ internal sealed class ProtectReplayEvent : IReplayEvent<(int playerId, int targe
public void Play()
{
var player = Utils.PlayerFromPlayerId(EventData.playerId);
+ if (player == null)
+ return;
+
var target = Utils.PlayerFromPlayerId(EventData.targetId);
- if (player?.Data.RoleType is RoleTypes.GuardianAngel)
- {
- player?.ProtectPlayer(target, player.Data.DefaultOutfit.ColorId);
- }
+ if (target == null)
+ return;
+
+ if (player.Data.RoleType != RoleTypes.GuardianAngel)
+ return;
+
+ player.ProtectPlayer(target, player.Data.DefaultOutfit.ColorId);
}
public void Record(PlayerControl player, PlayerControl target)
diff --git a/src/Data/Replay/Events/ShapeshiftReplayEvent.cs b/src/Data/Replay/Events/ShapeshiftReplayEvent.cs
index 4d44ae8..59ed920 100644
--- a/src/Data/Replay/Events/ShapeshiftReplayEvent.cs
+++ b/src/Data/Replay/Events/ShapeshiftReplayEvent.cs
@@ -16,11 +16,17 @@ internal sealed class ShapeshiftReplayEvent : IReplayEvent<(int playerId, int ta
public void Play()
{
var player = Utils.PlayerFromPlayerId(EventData.playerId);
+ if (player == null)
+ return;
+
var target = Utils.PlayerFromPlayerId(EventData.targetId);
- if (player?.Data.RoleType is RoleTypes.Shapeshifter)
- {
- player?.Shapeshift(target, EventData.animate);
- }
+ if (target == null)
+ return;
+
+ if (player.Data.RoleType != RoleTypes.Shapeshifter)
+ return;
+
+ player.Shapeshift(target, EventData.animate);
}
public void Record(PlayerControl killer, PlayerControl target, bool animate)
diff --git a/src/Data/Replay/Events/UpdateSystemReplayEvent.cs b/src/Data/Replay/Events/UpdateSystemReplayEvent.cs
index 3f6b5f3..d877ff5 100644
--- a/src/Data/Replay/Events/UpdateSystemReplayEvent.cs
+++ b/src/Data/Replay/Events/UpdateSystemReplayEvent.cs
@@ -15,10 +15,13 @@ internal sealed class UpdateSystemReplayEvent : IReplayEvent<(byte systemType, i
public void Play()
{
var player = Utils.PlayerFromPlayerId(EventData.playerId);
- if (player != null)
- {
- ShipStatus.Instance?.UpdateSystem((SystemTypes)EventData.systemType, player, EventData.amount);
- }
+ if (player == null)
+ return;
+
+ if (ShipStatus.Instance == null)
+ return;
+
+ ShipStatus.Instance?.UpdateSystem((SystemTypes)EventData.systemType, player, EventData.amount);
}
public void Record(SystemTypes system, PlayerControl player, byte amount)
diff --git a/src/Data/Replay/Events/VanishReplayEvent.cs b/src/Data/Replay/Events/VanishReplayEvent.cs
index 94b4955..862fc8a 100644
--- a/src/Data/Replay/Events/VanishReplayEvent.cs
+++ b/src/Data/Replay/Events/VanishReplayEvent.cs
@@ -16,10 +16,13 @@ internal sealed class VanishReplayEvent : IReplayEvent
public void Play()
{
var player = Utils.PlayerFromPlayerId(EventData);
- if (player?.Data.RoleType is RoleTypes.Phantom)
- {
- player?.SetRoleInvisibility(true, true, true);
- }
+ if (player == null)
+ return;
+
+ if (player.Data.RoleType != RoleTypes.Phantom)
+ return;
+
+ player.SetRoleInvisibility(true, true, true);
}
public void Record(PlayerControl player)
diff --git a/src/Data/SharedSecretExchange.cs b/src/Data/SharedSecretExchange.cs
index 2740794..0623c84 100644
--- a/src/Data/SharedSecretExchange.cs
+++ b/src/Data/SharedSecretExchange.cs
@@ -184,7 +184,9 @@ internal sealed class SharedSecretExchange
///
internal void ClearData()
{
- if (HasBeenCleared) return;
+ if (HasBeenCleared)
+ return;
+
HasBeenCleared = true;
publicKey = [];
tempKey = 0;
diff --git a/src/Helpers/Il2CppExtensions.cs b/src/Helpers/Il2CppExtensions.cs
index 4c3b4cb..fbfc0f0 100644
--- a/src/Helpers/Il2CppExtensions.cs
+++ b/src/Helpers/Il2CppExtensions.cs
@@ -15,7 +15,8 @@ internal static class Il2CppExtensions
/// The action to perform on each element.
internal static void ForEachIl2Cpp(this Il2CppSystem.Collections.Generic.IEnumerable source, Action action)
{
- if (source == null || action == null) return;
+ if (source == null || action == null)
+ return;
var list = new Il2CppSystem.Collections.Generic.List(source);
for (int i = 0; i < list.Count; i++)
@@ -54,7 +55,8 @@ internal static class Il2CppExtensions
/// The action to perform on each element.
internal static void ForEachIl2Cpp(this Il2CppSystem.Collections.Generic.List source, Action action)
{
- if (source == null || action == null) return;
+ if (source == null || action == null)
+ return;
// Direct iteration - no conversion needed!
for (int i = 0; i < source.Count; i++)
diff --git a/src/Helpers/Logger.cs b/src/Helpers/Logger.cs
index 8d21849..27a1623 100644
--- a/src/Helpers/Logger.cs
+++ b/src/Helpers/Logger.cs
@@ -24,7 +24,8 @@ internal static class Logger_
{
try
{
- if (hostOnly && !GameState.IsHost) return;
+ if (hostOnly && !GameState.IsHost)
+ return;
string mark = $"{DateTime.Now:HH:mm} [BetterLog][{tag}]";
string logFilePath = Path.Combine(BetterDataManager.filePathFolder, "better-log.txt");
@@ -163,7 +164,8 @@ internal static class Logger_
/// Whether to log only when the client is host.
internal static void InGame(string info, bool hostOnly = false)
{
- if (hostOnly && !GameState.IsHost) return;
+ if (hostOnly && !GameState.IsHost)
+ return;
if (HudManager.InstanceExists) HudManager.Instance.Notifier.AddDisconnectMessage(info);
Log(info, "InGame", hostOnly: hostOnly);
@@ -179,7 +181,8 @@ internal static class Logger_
{
try
{
- if (hostOnly && !GameState.IsHost) return;
+ if (hostOnly && !GameState.IsHost)
+ return;
string mark = $"{DateTime.Now:HH:mm} [BetterLog][PrivateLog][{tag}]";
string logFilePath = Path.Combine(BetterDataManager.filePathFolder, "better-log.txt");
@@ -208,7 +211,8 @@ internal class CustomLogListener : ILogListener
public void LogEvent(object sender, LogEventArgs eventArgs)
{
if (eventArgs.Source.SourceName.ToLower().Contains("unity")
- || eventArgs.Source.SourceName.ToLower().Contains("betteramongus")) return;
+ || eventArgs.Source.SourceName.ToLower().Contains("betteramongus"))
+ return;
if (eventArgs.Level is LogLevel.None or LogLevel.Info)
{
diff --git a/src/Helpers/ObjectHelper.cs b/src/Helpers/ObjectHelper.cs
index ade0bb5..bf29fc8 100644
--- a/src/Helpers/ObjectHelper.cs
+++ b/src/Helpers/ObjectHelper.cs
@@ -127,7 +127,8 @@ internal static class ObjectHelper
/// Names of GameObjects to skip when applying colors.
internal static void SetUIColors(this GameObject go, Color? color = null, Func? check = null, params string[] avoidGoName)
{
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Theme)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Theme))
+ return;
var sprites = go.GetComponentsInChildren(true);
foreach (var sprite in sprites)
@@ -145,7 +146,8 @@ internal static class ObjectHelper
/// The color to blend (defaults to green if null).
internal static void AddColor(SpriteRenderer sprite, Color? color = null)
{
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Theme)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Theme))
+ return;
color ??= Color.green;
sprite.color = (sprite.color * 0.6f) + ((Color)color * 0.5f);
@@ -159,7 +161,8 @@ internal static class ObjectHelper
internal static void SetLayers(this GameObject go, string layerName)
{
int layer = LayerMask.NameToLayer(layerName);
- if (layer == -1) return;
+ if (layer == -1)
+ return;
Transform[] allChildren = go.GetComponentsInChildren(true);
foreach (Transform child in allChildren)
diff --git a/src/Helpers/PlayerControlHelper.cs b/src/Helpers/PlayerControlHelper.cs
index 59facd5..08e023c 100644
--- a/src/Helpers/PlayerControlHelper.cs
+++ b/src/Helpers/PlayerControlHelper.cs
@@ -26,7 +26,9 @@ internal static class PlayerControlHelper
foreach (var client in AmongUsClient.Instance.allClients)
{
- if (client?.Character?.PlayerId == player.PlayerId)
+ if (client?.Character == null) continue;
+
+ if (client.Character.PlayerId == player.PlayerId)
return client;
}
return null;
@@ -46,7 +48,8 @@ internal static class PlayerControlHelper
/// The colored player name string.
internal static string GetPlayerNameAndColor(this PlayerControl player)
{
- if (player?.Data == null) return string.Empty;
+ if (player?.Data == null)
+ return string.Empty;
try
{
@@ -72,8 +75,11 @@ internal static class PlayerControlHelper
return true;
}
+ if (player.cosmetics?.nameText == null)
+ return false;
+
string loading = Translator.GetString("Player.Loading");
- string? nameText = player.cosmetics?.nameText?.text;
+ string nameText = player.cosmetics.nameText.text;
if (nameText == "???" || nameText == "Player" || nameText == loading ||
string.IsNullOrEmpty(nameText) ||
@@ -188,7 +194,8 @@ internal static class PlayerControlHelper
/// The vent ID, or -1 if not in a vent.
internal static int GetPlayerVentId(this PlayerControl player)
{
- if (player == null) return -1;
+ if (player == null)
+ return -1;
if (!(ShipStatus.Instance.Systems.TryGetValue(SystemTypes.Ventilation, out var systemType) &&
systemType.TryCast() is VentilationSystem ventilationSystem))
@@ -202,21 +209,24 @@ internal static class PlayerControlHelper
///
/// The player to get the position for.
/// The player's position as a Vector2.
- internal static Vector2 GetCustomPosition(this PlayerControl player) => new(player.transform.position.x, player.transform.position.y);
+ internal static Vector2 GetCustomPosition(this PlayerControl player) =>
+ player.transform.position;
///
/// Checks if a player is alive.
///
/// The player to check.
/// True if the player is alive.
- internal static bool IsAlive(this PlayerControl player) => player?.Data != null && !player.Data.IsDead;
+ internal static bool IsAlive(this PlayerControl player) =>
+ player?.Data != null && !player.Data.IsDead;
///
/// Checks if a player is in a vent.
///
/// The player to check.
/// True if the player is in a vent.
- internal static bool IsInVent(this PlayerControl player) => player != null && (player.inVent || player.walkingToVent || player.MyPhysics?.Animations?.IsPlayingEnterVentAnimation() == true);
+ internal static bool IsInVent(this PlayerControl player) =>
+ player != null && (player.inVent || player.walkingToVent || player.MyPhysics?.Animations?.IsPlayingEnterVentAnimation() == true);
///
/// Gets the role name of a player.
@@ -362,7 +372,9 @@ internal static class PlayerControlHelper
/// The hashed PUID string.
internal static string GetHashPuid(this NetworkedPlayerInfo data)
{
- if (data?.Puid == null) return "";
+ if (data?.Puid == null)
+ return "";
+
return Utils.GetHashStr(data.Puid);
}
diff --git a/src/Helpers/Utils.cs b/src/Helpers/Utils.cs
index 831683a..bd115bb 100644
--- a/src/Helpers/Utils.cs
+++ b/src/Helpers/Utils.cs
@@ -155,13 +155,16 @@ internal static class Utils
/// Whether to align the message to the right side.
internal static void AddChatPrivate(string text, string overrideName = "", bool setRight = false)
{
- if (!GameState.IsInGame) return;
+ if (!GameState.IsInGame)
+ return;
var chat = HudManager.Instance?.Chat;
- if (chat == null) return;
+ if (chat == null)
+ return;
var data = PlayerControl.LocalPlayer?.Data;
- if (data == null) return;
+ if (data == null)
+ return;
var pooledBubble = chat.GetPooledBubble();
var messageName = $"({Translator.GetString("SystemMessage")})" + ChatPatch.COMMAND_POSTFIX_ID;
@@ -233,7 +236,10 @@ internal static class Utils
/// The hashed PUID string.
internal static string GetHashPuid(PlayerControl player)
{
- return player?.Data?.Puid == null ? "" : GetHashStr(player.Data.Puid);
+ if (player?.Data?.Puid == null)
+ return "";
+
+ return GetHashStr(player.Data.Puid);
}
///
diff --git a/src/Managers/BetterNotificationManager.cs b/src/Managers/BetterNotificationManager.cs
index 84ec363..9099254 100644
--- a/src/Managers/BetterNotificationManager.cs
+++ b/src/Managers/BetterNotificationManager.cs
@@ -15,13 +15,71 @@ namespace BetterAmongUs.Managers;
///
internal static class BetterNotificationManager
{
- internal static GameObject? BAUNotificationManagerObj;
- internal static TextMeshPro? NameText;
- internal static TextMeshPro? TextArea => BAUNotificationManagerObj.transform.Find("Sizer/ChatText (TMP)").GetComponent();
- internal static Dictionary NotifyQueue = [];
- internal static float showTime = 0f;
+ private static GameObject? BAUNotificationManagerObj;
+ private static TextMeshPro? NameText;
+ private static TextMeshPro? TextArea;
+ private readonly static Dictionary NotifyQueue = [];
+ private static float showTime = 0f;
private static Camera? localCamera;
- internal static bool Notifying = false;
+ private static bool Notifying = false;
+
+ ///
+ /// Initializes the BetterNotificationManager by creating and configuring a cloned instance of the game's chat notification system.
+ ///
+ internal static void Init()
+ {
+ if (BAUNotificationManagerObj == null)
+ {
+ var ChatNotifications = HudManager.Instance.Chat.chatNotification;
+ if (ChatNotifications != null)
+ {
+ ChatNotifications.timeOnScreen = 1f;
+ ChatNotifications.gameObject.SetActive(true);
+
+ // Clone chat notification system for BAU notifications
+ GameObject BAUNotification = UnityEngine.Object.Instantiate(ChatNotifications.gameObject);
+ BAUNotification.name = "BAUNotification";
+ BAUNotification.GetComponent().DestroyMono();
+
+ // Remove unnecessary elements from the clone
+ GameObject.Find($"{BAUNotification.name}/Sizer/PoolablePlayer").DestroyObj();
+ GameObject.Find($"{BAUNotification.name}/Sizer/ColorText").DestroyObj();
+
+ // Position notification at bottom-left corner
+ BAUNotification.GetComponent().DistanceFromEdge = new Vector3(-1.57f, 5.3f, -15f);
+ GameObject.Find($"{BAUNotification.name}/Sizer/NameText").transform.localPosition = new Vector3(-3.3192f, -0.0105f);
+
+ // Cache TextMeshPro component for text updates
+ NameText = GameObject.Find($"{BAUNotification.name}/Sizer/NameText").GetComponent();
+ UnityEngine.Object.DontDestroyOnLoad(BAUNotification);
+ BAUNotificationManagerObj = BAUNotification;
+ BAUNotification.SetActive(false);
+
+ // Reset original chat notification settings
+ ChatNotifications.timeOnScreen = 0f;
+ ChatNotifications.gameObject.SetActive(false);
+
+ // Configure text wrapping for multi-line notifications
+ TextArea = BAUNotificationManagerObj.transform.Find("Sizer/ChatText (TMP)").GetComponent();
+ TextArea.enableWordWrapping = true;
+ TextArea.m_firstOverflowCharacterIndex = 0;
+ TextArea.overflowMode = TextOverflowModes.Overflow;
+ }
+ }
+ }
+
+ ///
+ /// Cleans up and destroys the notification manager.
+ ///
+ internal static void Detach()
+ {
+ NotifyQueue.Clear();
+
+ if (BAUNotificationManagerObj == null)
+ return;
+
+ BAUNotificationManagerObj.DestroyObj();
+ }
///
/// Displays a notification message in-game.
@@ -30,25 +88,27 @@ internal static class BetterNotificationManager
/// The duration in seconds to show the notification.
internal static void Notify(string text, float Time = 5f)
{
- if (!BAUConfigs.BetterNotifications.Value) return;
+ if (!BAUConfigs.BetterNotifications.Value)
+ return;
- if (BAUNotificationManagerObj != null)
+ if (BAUNotificationManagerObj == null)
+ return;
+
+ if (Notifying)
{
- if (Notifying)
- {
- if (text == BAUNotificationManagerObj.transform.Find("Sizer/ChatText (TMP)").GetComponent().text)
- return;
- NotifyQueue[text] = Time;
+ if (text == TextArea.text)
return;
- }
- showTime = Time;
- BAUNotificationManagerObj.SetActive(true);
- NameText.text = $"{Translator.GetString("SystemNotification")}";
- TextArea.text = text;
- SoundManager.Instance.PlaySound(HudManager.Instance.TaskCompleteSound, false, 1f);
- Notifying = true;
+ NotifyQueue[text] = Time;
+ return;
}
+
+ showTime = Time;
+ BAUNotificationManagerObj.SetActive(true);
+ NameText.text = $"{Translator.GetString("SystemNotification")}";
+ TextArea.text = text;
+ SoundManager.Instance.PlaySound(HudManager.Instance.TaskCompleteSound, false, 1f);
+ Notifying = true;
}
///
@@ -115,42 +175,55 @@ internal static class BetterNotificationManager
return true;
}
+ ///
+ /// Clears all pending and active notifications by resetting the notification queue, display timer, and notification state.
+ ///
+ internal static void ClearNotifications()
+ {
+ NotifyQueue.Clear();
+ showTime = 0f;
+ Notifying = false;
+ }
+
///
/// Updates the notification manager each frame.
///
internal static void Update()
{
- if (BAUNotificationManagerObj != null)
+ if (BAUNotificationManagerObj == null)
+ return;
+
+ if (TextArea == null)
+ return;
+
+ if (!localCamera)
{
- if (!localCamera)
+ if (HudManager.InstanceExists)
{
- if (HudManager.InstanceExists)
- {
- localCamera = HudManager.Instance.GetComponentInChildren();
- }
- else
- {
- localCamera = Camera.main;
- }
+ localCamera = HudManager.Instance.GetComponentInChildren();
}
-
- BAUNotificationManagerObj.transform.position = AspectPosition.ComputeWorldPosition(localCamera, AspectPosition.EdgeAlignments.Bottom, new Vector3(-1.3f, 0.7f, localCamera.nearClipPlane + 0.1f));
-
- showTime -= Time.deltaTime;
- if (showTime <= 0f && GameState.IsInGame)
+ else
{
- BAUNotificationManagerObj.transform.Find("Sizer/ChatText (TMP)").GetComponent().text = "";
- BAUNotificationManagerObj.SetActive(false);
- Notifying = false;
-
- CheckNotifyQueue();
+ localCamera = Camera.main;
}
+ }
- if (!GameState.IsInGame)
- {
- BAUNotificationManagerObj.SetActive(false);
- showTime = 0f;
- }
+ BAUNotificationManagerObj.transform.position = AspectPosition.ComputeWorldPosition(localCamera, AspectPosition.EdgeAlignments.Bottom, new Vector3(-1.3f, 0.7f, localCamera.nearClipPlane + 0.1f));
+
+ showTime -= Time.deltaTime;
+ if (showTime <= 0f && GameState.IsInGame)
+ {
+ TextArea.text = "";
+ BAUNotificationManagerObj.SetActive(false);
+ Notifying = false;
+
+ CheckNotifyQueue();
+ }
+
+ if (!GameState.IsInGame)
+ {
+ BAUNotificationManagerObj.SetActive(false);
+ showTime = 0f;
}
}
diff --git a/src/Managers/UpdateManager.cs b/src/Managers/UpdateManager.cs
index 72287dc..e72b053 100644
--- a/src/Managers/UpdateManager.cs
+++ b/src/Managers/UpdateManager.cs
@@ -42,7 +42,8 @@ internal sealed class UpdateManager : MonoBehaviour
///
internal void OnMainMenu()
{
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_ModUpdate)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_ModUpdate))
+ return;
var doNotPress = FindObjectOfType(true);
if (doNotPress != null)
@@ -59,7 +60,9 @@ internal sealed class UpdateManager : MonoBehaviour
button.OnClick = new();
button.OnClick.AddListener(() =>
{
- if (AmUpdateing || WaitForRestart) return;
+ if (AmUpdateing || WaitForRestart)
+ return;
+
this.StartCoroutine(CoPressDownload(doNotPress));
});
}
diff --git a/src/Modules/AntiCheat/BetterAntiCheat.cs b/src/Modules/AntiCheat/BetterAntiCheat.cs
index d13981c..cee1ab4 100644
--- a/src/Modules/AntiCheat/BetterAntiCheat.cs
+++ b/src/Modules/AntiCheat/BetterAntiCheat.cs
@@ -67,7 +67,8 @@ internal static class BetterAntiCheat
/// The MessageReader containing RPC data.
internal static void HandleCheatRPCBeforeCheck(PlayerControl player, byte callId, MessageReader oldReader)
{
- if (!IsEnabled) return;
+ if (!IsEnabled)
+ return;
MessageReader reader = MessageReader.Get(oldReader);
RPCHandler.HandleRPC(callId, player, reader, HandlerFlag.CheatRpcCheck);
@@ -82,9 +83,18 @@ internal static class BetterAntiCheat
/// The MessageReader containing RPC data.
internal static void CheckRPC(PlayerControl player, byte callId, MessageReader oldReader)
{
- if (player == null || player?.Data == null) return;
- if (!IsEnabled || !BAUConfigs.AntiCheat.Value || BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat) || !BetterGameSettings.DetectInvalidRPCs.GetBool()) return;
- if (player.IsLocalPlayer() && player.IsHost()) return;
+ if (!IsEnabled || !BAUConfigs.AntiCheat.Value)
+ return;
+
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat) ||
+ !BetterGameSettings.DetectInvalidRPCs.GetBool())
+ return;
+
+ if (player?.Data == null)
+ return;
+
+ if (player.IsLocalPlayer() && player.IsHost())
+ return;
MessageReader reader = MessageReader.Get(oldReader);
RPCHandler.HandleRPC(callId, player, reader, HandlerFlag.AntiCheat);
@@ -224,7 +234,8 @@ internal static class BetterAntiCheat
/// The MessageReader containing RPC data.
internal static void HandleRPC(PlayerControl player, byte callId, MessageReader oldReader)
{
- if (player == null || player?.Data == null || player.IsLocalPlayer()) return;
+ if (player?.Data == null || player.IsLocalPlayer())
+ return;
MessageReader reader = MessageReader.Get(oldReader);
RPCHandler.HandleRPC(callId, player, reader, HandlerFlag.Handle);
diff --git a/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMChatHandler.cs b/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMChatHandler.cs
index e288f7d..d4d1fa4 100644
--- a/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMChatHandler.cs
+++ b/src/Modules/AntiCheat/RPCHandlers/Cheats/AUMChatHandler.cs
@@ -32,7 +32,11 @@ internal sealed class AUMChatHandler : RPCHandler
Logger_.Log($"{sender.Data.PlayerName} -> {msgString}", "AUMChatLog");
- if (!BAUConfigs.AntiCheat.Value || BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat) || !BetterGameSettings.DetectCheatClients.GetBool()) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat))
+ return;
+
+ if (!BAUConfigs.AntiCheat.Value || !BetterGameSettings.DetectCheatClients.GetBool())
+ return;
var flag = string.IsNullOrEmpty(nameString) && string.IsNullOrEmpty(msgString);
diff --git a/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkChatHandler.cs b/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkChatHandler.cs
index 942fdf0..e966815 100644
--- a/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkChatHandler.cs
+++ b/src/Modules/AntiCheat/RPCHandlers/Cheats/KillNetworkChatHandler.cs
@@ -19,7 +19,11 @@ internal sealed class KillNetworkChatHandler : RPCHandler
internal override void HandleCheatRpcCheck(PlayerControl? sender, MessageReader reader)
{
- if (!BAUConfigs.AntiCheat.Value || BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat) || !BetterGameSettings.DetectCheatClients.GetBool()) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat))
+ return;
+
+ if (!BAUConfigs.AntiCheat.Value || !BetterGameSettings.DetectCheatClients.GetBool())
+ return;
if (!BetterDataManager.BetterDataFile.KNData.Any(info => info.CheckPlayerData(sender.Data)))
{
diff --git a/src/Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DeserializeNetObjectHandler.cs b/src/Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DeserializeNetObjectHandler.cs
index f31f9d4..85e2fff 100644
--- a/src/Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DeserializeNetObjectHandler.cs
+++ b/src/Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DeserializeNetObjectHandler.cs
@@ -17,7 +17,9 @@ internal sealed class DeserializeNetObjectHandler : RPCHandler
if (innerNetObject?.TryCast() && (GameState.IsMeeting && MeetingHudPatch.timeOpen > 5))
{
var player = innerNetObject.Cast()?.myPlayer;
- if (player == null) return;
+ if (player == null)
+ return;
+
if (BetterNotificationManager.NotifyCheat(player, "Attempting to move in meeting", forceBan: true))
{
LogRpcInfo($"Player attempted to move during meeting", player);
diff --git a/src/Modules/ClientOptionItem.cs b/src/Modules/ClientOptionItem.cs
index 5994794..25f1003 100644
--- a/src/Modules/ClientOptionItem.cs
+++ b/src/Modules/ClientOptionItem.cs
@@ -140,7 +140,8 @@ internal sealed class ClientOptionItem
passiveButton.OnClick.AddListener(() =>
{
- if (toggleCheck?.Invoke() == false) return;
+ if (toggleCheck?.Invoke() == false)
+ return;
if (Config != null)
{
@@ -168,7 +169,9 @@ internal sealed class ClientOptionItem
passiveButton.OnClick.AddListener(() =>
{
- if (clickCheck?.Invoke() == false) return;
+ if (clickCheck?.Invoke() == false)
+ return;
+
onClick?.Invoke();
});
}
@@ -178,7 +181,8 @@ internal sealed class ClientOptionItem
///
internal void UpdateToggle()
{
- if (ToggleButton == null || Config == null) return;
+ if (ToggleButton == null || Config == null)
+ return;
UpdateToggleVisuals(Config.Value);
}
diff --git a/src/Modules/HandshakeHandler.cs b/src/Modules/HandshakeHandler.cs
index b52d3e3..b65cc1b 100644
--- a/src/Modules/HandshakeHandler.cs
+++ b/src/Modules/HandshakeHandler.cs
@@ -55,8 +55,11 @@ internal sealed class HandshakeHandler
///
internal void ResendSecretToPlayer()
{
- if (!BAUConfigs.SendBetterRpc.Value) return;
- if (HasSendSharedSecret && _extendedData.IsVerifiedBetterUser) return;
+ if (!BAUConfigs.SendBetterRpc.Value)
+ return;
+
+ if (HasSendSharedSecret && _extendedData.IsVerifiedBetterUser)
+ return;
HasSendSharedSecret = false;
SendSecretToPlayer();
@@ -68,8 +71,11 @@ internal sealed class HandshakeHandler
// Local client sends to client
private void SendSecretToPlayer()
{
- if (_extendedData._Data.Object.IsLocalPlayer()) return;
- if (HasSendSharedSecret) return;
+ if (_extendedData._Data.Object.IsLocalPlayer())
+ return;
+
+ if (HasSendSharedSecret)
+ return;
HasSendSharedSecret = true;
@@ -88,7 +94,8 @@ internal sealed class HandshakeHandler
// Client receives from local client
internal void HandleSecretFromSender(MessageReader reader)
{
- if (_extendedData._Data?.Object?.IsLocalPlayer() == true) return;
+ if (_extendedData._Data?.Object?.IsLocalPlayer() == true)
+ return;
bool senderSupportsCrypto = reader.ReadBoolean();
byte[] sendersPublicKey = reader.ReadBytes();
@@ -151,8 +158,11 @@ internal sealed class HandshakeHandler
///
internal void TryHandlePendingVerificationData()
{
- if (!_pendingVerificationData.HasValue) return;
- if (SharedSecret.GetSharedSecret().Length == 0) return;
+ if (!_pendingVerificationData.HasValue)
+ return;
+
+ if (SharedSecret.GetSharedSecret().Length == 0)
+ return;
var (tempKey, receivedHash) = _pendingVerificationData.Value;
diff --git a/src/Modules/MonoExtension.cs b/src/Modules/MonoExtension.cs
index a57f020..1fcf94e 100644
--- a/src/Modules/MonoExtension.cs
+++ b/src/Modules/MonoExtension.cs
@@ -184,7 +184,8 @@ internal static class MonoExtensionManager
/// The extension to unregister.
internal static void UnregisterExtension(this IMonoExtension extension)
{
- if (extension.BaseMono == null) return;
+ if (extension.BaseMono == null)
+ return;
if (_extensionsByBaseType.TryGetValue(extension.BaseMono.GetType(), out var extensions))
{
diff --git a/src/Modules/OptionItems/NoneOption/OptionDividerItem.cs b/src/Modules/OptionItems/NoneOption/OptionDividerItem.cs
index 4ff834c..306ea39 100644
--- a/src/Modules/OptionItems/NoneOption/OptionDividerItem.cs
+++ b/src/Modules/OptionItems/NoneOption/OptionDividerItem.cs
@@ -47,7 +47,9 @@ internal sealed class OptionDividerItem : OptionItem
///
private void CreateBehavior()
{
- if (!GameSettingMenu.Instance) return;
+ if (!GameSettingMenu.Instance)
+ return;
+
AllOptionsTemp.Add(this);
CategoryHeaderMasked categoryHeaderMasked = UnityEngine.Object.Instantiate(Tab.AUTab.categoryHeaderOrigin, Tab.AUTab.settingsContainer);
Obj = categoryHeaderMasked.gameObject;
diff --git a/src/Modules/OptionItems/NoneOption/OptionHeaderItem.cs b/src/Modules/OptionItems/NoneOption/OptionHeaderItem.cs
index beb96d9..ec22b45 100644
--- a/src/Modules/OptionItems/NoneOption/OptionHeaderItem.cs
+++ b/src/Modules/OptionItems/NoneOption/OptionHeaderItem.cs
@@ -50,7 +50,9 @@ internal sealed class OptionHeaderItem : OptionItem
///
private void CreateBehavior()
{
- if (!GameSettingMenu.Instance) return;
+ if (!GameSettingMenu.Instance)
+ return;
+
AllOptionsTemp.Add(this);
categoryHeaderMasked = UnityEngine.Object.Instantiate(Tab.AUTab.categoryHeaderOrigin, Tab.AUTab.settingsContainer);
Obj = categoryHeaderMasked.gameObject;
diff --git a/src/Modules/OptionItems/NoneOption/OptionTitleItem.cs b/src/Modules/OptionItems/NoneOption/OptionTitleItem.cs
index f881596..b428623 100644
--- a/src/Modules/OptionItems/NoneOption/OptionTitleItem.cs
+++ b/src/Modules/OptionItems/NoneOption/OptionTitleItem.cs
@@ -51,7 +51,9 @@ internal sealed class OptionTitleItem : OptionItem
///
private void CreateBehavior()
{
- if (!GameSettingMenu.Instance) return;
+ if (!GameSettingMenu.Instance)
+ return;
+
AllOptionsTemp.Add(this);
optionBehaviour = UnityEngine.Object.Instantiate(Tab.AUTab.checkboxOrigin, Tab.AUTab.settingsContainer);
Obj = optionBehaviour.gameObject;
diff --git a/src/Modules/OptionItems/OptionCheckboxItem.cs b/src/Modules/OptionItems/OptionCheckboxItem.cs
index c65910d..c79fa9e 100644
--- a/src/Modules/OptionItems/OptionCheckboxItem.cs
+++ b/src/Modules/OptionItems/OptionCheckboxItem.cs
@@ -53,7 +53,9 @@ public sealed class OptionCheckboxItem : OptionItem
protected sealed override void CreateBehavior()
{
TryLoad();
- if (!GameSettingMenu.Instance) return;
+ if (!GameSettingMenu.Instance)
+ return;
+
AllOptionsTemp.Add(this);
var ToggleOption = UnityEngine.Object.Instantiate(Tab.AUTab.checkboxOrigin, Tab.AUTab.settingsContainer);
Option = ToggleOption;
diff --git a/src/Modules/OptionItems/OptionFloatItem.cs b/src/Modules/OptionItems/OptionFloatItem.cs
index 38382ad..bb0fdfc 100644
--- a/src/Modules/OptionItems/OptionFloatItem.cs
+++ b/src/Modules/OptionItems/OptionFloatItem.cs
@@ -80,7 +80,9 @@ public class OptionFloatItem : OptionItem
protected override void CreateBehavior()
{
TryLoad();
- if (!GameSettingMenu.Instance) return;
+ if (!GameSettingMenu.Instance)
+ return;
+
AllOptionsTemp.Add(this);
var numberOption = UnityEngine.Object.Instantiate(Tab.AUTab.numberOptionOrigin, Tab.AUTab.settingsContainer);
Option = numberOption;
diff --git a/src/Modules/OptionItems/OptionIntItem.cs b/src/Modules/OptionItems/OptionIntItem.cs
index 1a751e8..e0caa95 100644
--- a/src/Modules/OptionItems/OptionIntItem.cs
+++ b/src/Modules/OptionItems/OptionIntItem.cs
@@ -80,7 +80,9 @@ public sealed class OptionIntItem : OptionItem
protected sealed override void CreateBehavior()
{
TryLoad();
- if (!GameSettingMenu.Instance) return;
+ if (!GameSettingMenu.Instance)
+ return;
+
AllOptionsTemp.Add(this);
var numberOption = UnityEngine.Object.Instantiate(Tab.AUTab.numberOptionOrigin, Tab.AUTab.settingsContainer);
Option = numberOption;
diff --git a/src/Modules/OptionItems/OptionItem.cs b/src/Modules/OptionItems/OptionItem.cs
index 7c831b6..1a6a65f 100644
--- a/src/Modules/OptionItems/OptionItem.cs
+++ b/src/Modules/OptionItems/OptionItem.cs
@@ -64,7 +64,9 @@ public abstract class OptionItem
/// Custom text to display instead of the value.
internal void PopNotification(string custom = "")
{
- if (_id == null) return;
+ if (_id == null)
+ return;
+
string value = custom == string.Empty ? ValueAsString() : custom;
string msg = $"{GetParentPath()} " +
$"{Translator.GetString("BetterSetting.SetTo")} {value}";
@@ -286,7 +288,8 @@ public abstract class OptionItem
/// The description text to display.
internal void CreateDescriptionButton(string text)
{
- if (Option == null) return;
+ if (Option == null)
+ return;
NumberOption optionBehaviourNum = UnityEngine.Object.Instantiate(Tab.AUTab.numberOptionOrigin, Vector3.zero, Quaternion.identity, Tab.AUTab.settingsContainer);
SetupAUOption(optionBehaviourNum);
@@ -440,8 +443,10 @@ public abstract class OptionItem : OptionItem
return Value;
}
- internal virtual T? GetDefaultValue() => DefaultValue;
- public override string ValueAsString() => Value?.ToString() ?? string.Empty;
+ internal virtual T? GetDefaultValue() =>
+ DefaultValue;
+ public override string ValueAsString() =>
+ Value?.ToString() ?? string.Empty;
internal override void SetToDefault()
{
Value = DefaultValue;
@@ -525,7 +530,8 @@ public abstract class OptionItem : OptionItem
/// Whether to force reload even if already loaded.
internal override void TryLoad(bool forceLoad = false)
{
- if (!CanLoad) return;
+ if (!CanLoad)
+ return;
if (!HasLoadValue || forceLoad)
{
@@ -539,9 +545,12 @@ public abstract class OptionItem : OptionItem
///
protected virtual void Load()
{
- if (!CanLoad) return;
+ if (!CanLoad)
+ return;
+
+ if (_id == null)
+ return;
- if (_id == null) return;
Value = BetterDataManager.LoadSetting(Id, DefaultValue);
}
@@ -550,9 +559,12 @@ public abstract class OptionItem : OptionItem
///
internal virtual void Save()
{
- if (!CanLoad) return;
+ if (!CanLoad)
+ return;
+
+ if (_id == null)
+ return;
- if (_id == null) return;
BetterDataManager.SaveSetting(Id, Value);
}
}
\ No newline at end of file
diff --git a/src/Modules/OptionItems/OptionPlayerItem.cs b/src/Modules/OptionItems/OptionPlayerItem.cs
index 133ea04..d1ae5af 100644
--- a/src/Modules/OptionItems/OptionPlayerItem.cs
+++ b/src/Modules/OptionItems/OptionPlayerItem.cs
@@ -82,7 +82,9 @@ public sealed class OptionPlayerItem : OptionItem
///
protected sealed override void CreateBehavior()
{
- if (!GameSettingMenu.Instance) return;
+ if (!GameSettingMenu.Instance)
+ return;
+
AllOptionsTemp.Add(this);
var numberOption = UnityEngine.Object.Instantiate(Tab.AUTab.numberOptionOrigin, Tab.AUTab.settingsContainer);
Option = numberOption;
@@ -202,7 +204,8 @@ public sealed class OptionPlayerItem : OptionItem
/// Whether to update the parent tab visuals as well.
internal sealed override void UpdateVisuals(bool updateTabVisuals = true)
{
- if (!GameSettingMenu.Instance) return;
+ if (!GameSettingMenu.Instance)
+ return;
if (Option is NumberOption numberOption)
{
@@ -251,13 +254,15 @@ public sealed class OptionPlayerItem : OptionItem
/// Gets the integer value (player index) of this option.
///
/// The current player index.
- public sealed override int GetInt() => GetValue();
+ public sealed override int GetInt() =>
+ GetValue();
///
/// Gets the float representation of the player index.
///
/// The current player index as a float.
- public sealed override float GetFloat() => GetValue();
+ public sealed override float GetFloat() =>
+ GetValue();
///
/// Checks if the option value matches a specific integer.
diff --git a/src/Modules/OptionItems/OptionStringItem.cs b/src/Modules/OptionItems/OptionStringItem.cs
index ade17e1..cec505b 100644
--- a/src/Modules/OptionItems/OptionStringItem.cs
+++ b/src/Modules/OptionItems/OptionStringItem.cs
@@ -85,7 +85,9 @@ public class OptionStringItem : OptionItem
protected sealed override void CreateBehavior()
{
TryLoad();
- if (!GameSettingMenu.Instance) return;
+ if (!GameSettingMenu.Instance)
+ return;
+
AllOptionsTemp.Add(this);
var numberOption = UnityEngine.Object.Instantiate(Tab.AUTab.numberOptionOrigin, Tab.AUTab.settingsContainer);
Option = numberOption;
@@ -175,7 +177,8 @@ public class OptionStringItem : OptionItem
/// Gets the translated string representation of the current selection.
///
/// The translated string for the current index.
- public override string ValueAsString() => Translator.GetString(TranslatorStrings[Value], showInvalid: false);
+ public override string ValueAsString() =>
+ Translator.GetString(TranslatorStrings[Value], showInvalid: false);
///
/// Gets the effective string value index, accounting for random selection.
diff --git a/src/Modules/OptionItems/OptionTab.cs b/src/Modules/OptionItems/OptionTab.cs
index 65dbba5..b6bde70 100644
--- a/src/Modules/OptionItems/OptionTab.cs
+++ b/src/Modules/OptionItems/OptionTab.cs
@@ -98,7 +98,8 @@ internal sealed class OptionTab
/// Whether to preserve the map picker UI.
private void CreateBehavior(bool doNotDestroyMapPicker)
{
- if (!GameSettingMenu.Instance) return;
+ if (!GameSettingMenu.Instance)
+ return;
var SettingsButton = UnityEngine.Object.Instantiate(GameSettingMenu.Instance.GameSettingsButton, GameSettingMenu.Instance.GameSettingsButton.transform.parent);
TabButton = SettingsButton;
@@ -147,7 +148,8 @@ internal sealed class OptionTab
///
private void ShowOptions()
{
- if (AUTab == null) return;
+ if (AUTab == null)
+ return;
AUTab.gameObject.SetActive(true);
float spacingNum = 0f;
diff --git a/src/Modules/Support/BAUModdedSupportFlags.cs b/src/Modules/Support/BAUModdedSupportFlags.cs
index e517c4c..7ba7673 100644
--- a/src/Modules/Support/BAUModdedSupportFlags.cs
+++ b/src/Modules/Support/BAUModdedSupportFlags.cs
@@ -183,7 +183,9 @@ public static class BAUModdedSupportFlags
///
internal static void Initialize()
{
- if (_initialized) return;
+ if (_initialized)
+ return;
+
_initialized = true;
foreach (var pluginInfo in IL2CPPChainloader.Instance.Plugins.Values)
{
@@ -200,11 +202,13 @@ public static class BAUModdedSupportFlags
var field = plugin.GetType().GetField("BAUFlags",
BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
- if (field == null) return;
+ if (field == null)
+ return;
var value = field.IsStatic ? field.GetValue(null) : field.GetValue(plugin);
- if (value is not IEnumerable strings) return;
+ if (value is not IEnumerable strings)
+ return;
var pluginName = plugin.GetType().GetCustomAttribute()?.Name ?? plugin.GetType().Name;
diff --git a/src/Modules/Translator.cs b/src/Modules/Translator.cs
index f0b4b76..27903e4 100644
--- a/src/Modules/Translator.cs
+++ b/src/Modules/Translator.cs
@@ -79,7 +79,8 @@ internal static class Translator
try
{
using var resourceStream = assembly.GetManifestResourceStream(resourceName);
- if (resourceStream == null) return;
+ if (resourceStream == null)
+ return;
using var reader = new StreamReader(resourceStream);
var jsonContent = reader.ReadToEnd();
diff --git a/src/Mono/BetterPingTracker.cs b/src/Mono/BetterPingTracker.cs
index 5c2360b..e03e479 100644
--- a/src/Mono/BetterPingTracker.cs
+++ b/src/Mono/BetterPingTracker.cs
@@ -30,7 +30,9 @@ internal sealed class BetterPingTracker : MonoBehaviour
/// The AspectPosition component for positioning the display.
internal void SetUp(TextMeshPro pingText, AspectPosition pingAspectPosition)
{
- if (Instance != null) return;
+ if (Instance != null)
+ return;
+
if (pingText == null || pingAspectPosition == null)
{
Logger_.Error("BetterPingTracker.SetUp() called with null parameters!");
@@ -47,7 +49,8 @@ internal sealed class BetterPingTracker : MonoBehaviour
///
private void Update()
{
- if (aspectPosition == null || text == null) return;
+ if (aspectPosition == null || text == null)
+ return;
// Update position and appearance
aspectPosition.DistanceFromEdge = new Vector3(4f, 0.1f, -5);
diff --git a/src/Mono/ExtendedPlayerControl.cs b/src/Mono/ExtendedPlayerControl.cs
index 2eade86..0efa3f3 100644
--- a/src/Mono/ExtendedPlayerControl.cs
+++ b/src/Mono/ExtendedPlayerControl.cs
@@ -24,7 +24,9 @@ internal sealed class ExtendedPlayerControl : MonoBehaviour, IMonoExtension().Init(_Player);
}
diff --git a/src/Mono/ExtendedPlayerInfo.cs b/src/Mono/ExtendedPlayerInfo.cs
index ac638d1..514f79e 100644
--- a/src/Mono/ExtendedPlayerInfo.cs
+++ b/src/Mono/ExtendedPlayerInfo.cs
@@ -39,16 +39,19 @@ internal sealed class ExtendedPlayerInfo : MonoBehaviour, IMonoExtensionThe callback to execute with the extended data.
internal static void BetterDataWait(this PlayerControl player, Action callback)
{
- MonoExtensionManager.RunWhenNotNull(player, () => player?.BetterData(), callback);
+ MonoExtensionManager.RunWhenNotNull(player, () => player?.BetterData(), callback);
}
///
diff --git a/src/Mono/MeetingInfoDisplay.cs b/src/Mono/MeetingInfoDisplay.cs
index ad2d1c9..3f4674a 100644
--- a/src/Mono/MeetingInfoDisplay.cs
+++ b/src/Mono/MeetingInfoDisplay.cs
@@ -88,7 +88,8 @@ internal sealed class MeetingInfoDisplay : PlayerInfoDisplay
if (Time.frameCount - _lastUpdateFrame < UPDATE_COOLDOWN)
return;
- if (_pva == null) return;
+ if (_pva == null)
+ return;
_sbTag.Clear();
_sbInfo.Clear();
@@ -141,7 +142,8 @@ internal sealed class MeetingInfoDisplay : PlayerInfoDisplay
///
private void UpdateInfo()
{
- if (_player?.Data == null || _player.BetterData() == null) return;
+ if (_player?.Data == null || _player.BetterData() == null)
+ return;
SetPlayerTags(_sbTag);
FormatPlayerInfo(_sbTag, _sbInfo);
@@ -160,7 +162,8 @@ internal sealed class MeetingInfoDisplay : PlayerInfoDisplay
[HideFromIl2Cpp]
private void SetPlayerTags(StringBuilder sbTag)
{
- if (_player?.Data == null) return;
+ if (_player?.Data == null)
+ return;
if (ContainsPlayerData(BetterDataManager.BetterDataFile.SickoData, _player.Data))
sbTag.Append($"{_cachedTranslations.SickoUser}+++");
@@ -180,7 +183,8 @@ internal sealed class MeetingInfoDisplay : PlayerInfoDisplay
[HideFromIl2Cpp]
private static void FormatPlayerInfo(StringBuilder sbTag, StringBuilder sbInfo)
{
- if (sbTag.Length == 0) return;
+ if (sbTag.Length == 0)
+ return;
string tagString = sbTag.ToString();
string[] tags = tagString.Split(["+++"], System.StringSplitOptions.RemoveEmptyEntries);
@@ -257,7 +261,8 @@ internal sealed class MeetingInfoDisplay : PlayerInfoDisplay
/// Reference to last value for comparison.
private static void UpdateTextIfChanged(TextMeshPro textMesh, string newText, ref string lastValue)
{
- if (textMesh == null) return;
+ if (textMesh == null)
+ return;
if (newText != lastValue)
{
diff --git a/src/Mono/PlayerInfoDisplay.cs b/src/Mono/PlayerInfoDisplay.cs
index 9cc3889..7d85fc9 100644
--- a/src/Mono/PlayerInfoDisplay.cs
+++ b/src/Mono/PlayerInfoDisplay.cs
@@ -147,14 +147,23 @@ internal class PlayerInfoDisplay : MonoBehaviour
///
private void UpdatePlayerInfo()
{
- if (_player == null) return;
- if (_player.Data == null) return;
+ if (_player == null)
+ return;
- if (_nameText == null) return;
- if (_cachedTranslations == null) return;
+ if (_player.Data == null)
+ return;
- if (_sbTag == null || _sbTagTop == null || _sbTagBottom == null) return;
- if (_topText == null || _bottomText == null || _infoText == null) return;
+ if (_nameText == null)
+ return;
+
+ if (_cachedTranslations == null)
+ return;
+
+ if (_sbTag == null || _sbTagTop == null || _sbTagBottom == null)
+ return;
+
+ if (_topText == null || _bottomText == null || _infoText == null)
+ return;
var betterData = _player.BetterData();
@@ -210,7 +219,8 @@ internal class PlayerInfoDisplay : MonoBehaviour
else
{
var targetData = Utils.PlayerDataFromPlayerId(_player.shapeshiftTargetPlayerId);
- if (targetData == null) return;
+ if (targetData == null)
+ return;
var betterTargetData = targetData.BetterData();
string name = betterTargetData != null ? betterTargetData.RealName : targetData.PlayerName;
@@ -234,7 +244,8 @@ internal class PlayerInfoDisplay : MonoBehaviour
/// Reference to last value for comparison.
private static void UpdateTextIfChanged(TextMeshPro textMesh, StringBuilder sb, ref string lastValue)
{
- if (textMesh == null) return;
+ if (textMesh == null)
+ return;
string newText = Utils.FormatInfo(sb);
if (newText != lastValue)
@@ -324,7 +335,8 @@ internal class PlayerInfoDisplay : MonoBehaviour
[HideFromIl2Cpp]
private void SetPlayerOutline(StringBuilder sbTag)
{
- if (_player?.Data == null) return;
+ if (_player?.Data == null)
+ return;
string hashPuid = Utils.GetHashPuid(_player);
string friendCode = _player.Data.FriendCode;
@@ -375,11 +387,14 @@ internal class PlayerInfoDisplay : MonoBehaviour
}
///
- /// Sets in-game specific information.
+ /// Sets lobby specific information.
///
[HideFromIl2Cpp]
private void SetLobbyInfo(ref string newName, ExtendedPlayerInfo betterData, StringBuilder sbTag)
{
+ if (betterData == null)
+ return;
+
if (_player.IsHost() && BAUConfigs.LobbyPlayerInfo.Value)
newName = _player.GetPlayerNameAndColor();
@@ -433,7 +448,9 @@ internal class PlayerInfoDisplay : MonoBehaviour
private void UpdateColorBlindTextPosition()
{
var text = _player.cosmetics.colorBlindText;
- if (!text.enabled) return;
+ if (!text.enabled)
+ return;
+
if (!_player.onLadder && !_player.MyPhysics.Animations.IsPlayingAnyLadderAnimation())
{
text.transform.localPosition = new Vector3(0f, -1.3f, 0.4999f);
diff --git a/src/Network/GithubAPI.cs b/src/Network/GithubAPI.cs
index 34c1d4f..9c30352 100644
--- a/src/Network/GithubAPI.cs
+++ b/src/Network/GithubAPI.cs
@@ -38,7 +38,9 @@ internal sealed class GithubAPI : MonoBehaviour
///
internal static void Connect()
{
- if (hasTryConnect) return;
+ if (hasTryConnect)
+ return;
+
hasTryConnect = true;
var obj = new GameObject("GithubAPI(BAU)") { hideFlags = HideFlags.HideAndDontSave };
diff --git a/src/Network/RPC.cs b/src/Network/RPC.cs
index fc27b30..0cb920e 100644
--- a/src/Network/RPC.cs
+++ b/src/Network/RPC.cs
@@ -48,7 +48,8 @@ internal static class RPC
/// The message reader containing the RPC data.
internal static void HandleCustomRPCPacked(PlayerControl player, MessageReader oldReader)
{
- if (player == null || player.IsLocalPlayer() || player.Data == null) return;
+ if (player == null || player.IsLocalPlayer() || player.Data == null)
+ return;
MessageReader reader = MessageReader.Get(oldReader);
@@ -87,7 +88,8 @@ internal static class RPC
///
internal static void HandleCustomRPCLegacy(PlayerControl player, byte callId, MessageReader oldReader)
{
- if (player == null || player.IsLocalPlayer() || player.Data == null || Enum.IsDefined(typeof(RpcCalls), callId)) return;
+ if (player == null || player.IsLocalPlayer() || player.Data == null || Enum.IsDefined(typeof(RpcCalls), callId))
+ return;
if (Enum.IsDefined(typeof(CustomRPC), (int)unchecked(callId)))
{
diff --git a/src/Patches/Client/Discord/DiscordPatch.cs b/src/Patches/Client/Discord/DiscordPatch.cs
index 877f872..34ef59f 100644
--- a/src/Patches/Client/Discord/DiscordPatch.cs
+++ b/src/Patches/Client/Discord/DiscordPatch.cs
@@ -17,14 +17,18 @@ internal static class DiscordPatch
private static void ActivityManager_UpdateActivity_Prefix(Activity activity)
{
// Skip Discord Rich Presence if other mods have disabled it via BAUModdedSupportFlags
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_DiscordRP)) return;
- if (activity == null) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_DiscordRP))
+ return;
+
+ if (activity == null)
+ return;
string details = $"BAU {BAUPlugin.GetVersionText()}";
activity.Details = details;
// Skip lobby info processing if Discord already shows "In Menus"
- if (activity.State == "In Menus") return;
+ if (activity.State == "In Menus")
+ return;
try
{
diff --git a/src/Patches/Client/OptionsMenuBehaviourPatch.cs b/src/Patches/Client/OptionsMenuBehaviourPatch.cs
index 51042a1..63fdb00 100644
--- a/src/Patches/Client/OptionsMenuBehaviourPatch.cs
+++ b/src/Patches/Client/OptionsMenuBehaviourPatch.cs
@@ -34,7 +34,8 @@ internal static class OptionsMenuBehaviourPatch
private static void SetupAllClientOptions(OptionsMenuBehaviour __instance)
{
- if (__instance.DisableMouseMovement == null) return;
+ if (__instance.DisableMouseMovement == null)
+ return;
// Clear previous client options to prevent duplicates
ClientOptionItem.ClientOptions.Clear();
@@ -42,7 +43,7 @@ internal static class OptionsMenuBehaviourPatch
// Toggle options with config binding
ClientOptionItem.CreateToggle(Translator.GetString("BetterOption.AntiCheat"), BAUConfigs.AntiCheat, 1, __instance);
ClientOptionItem.CreateToggle(Translator.GetString("BetterOption.SendBetterRpc"), BAUConfigs.SendBetterRpc, 1, __instance, SendBetterRpcAction);
- ClientOptionItem.CreateToggle(Translator.GetString("BetterOption.BetterNotifications"), BAUConfigs.BetterNotifications, 1, __instance, ClearNotifications);
+ ClientOptionItem.CreateToggle(Translator.GetString("BetterOption.BetterNotifications"), BAUConfigs.BetterNotifications, 1, __instance, BetterNotificationManager.ClearNotifications);
ClientOptionItem.CreateToggle(Translator.GetString("BetterOption.ForceOwnLanguage"), BAUConfigs.ForceOwnLanguage, 1, __instance);
ClientOptionItem.CreateToggle(Translator.GetString("BetterOption.ChatDarkMode"), BAUConfigs.ChatDarkMode, 1, __instance, ChatPatch.SetChatTheme);
ClientOptionItem.CreateToggle(Translator.GetString("BetterOption.ChatInGame"), BAUConfigs.ChatInGameplay, 1, __instance);
@@ -101,7 +102,7 @@ internal static class OptionsMenuBehaviourPatch
{
// Clean up BAU mod components and return to vanilla Among Us
ConsoleManager.DetachConsole();
- BetterNotificationManager.BAUNotificationManagerObj?.DestroyObj();
+ BetterNotificationManager.Detach();
Harmony.UnpatchAll();
ModManager.Instance.ModStamp.gameObject.SetActive(false);
SceneChanger.ChangeScene("MainMenu");
@@ -110,7 +111,8 @@ internal static class OptionsMenuBehaviourPatch
private static void SendBetterRpcAction()
{
// Resend handshake secret to all other players when option is toggled
- if (!GameState.IsInGame) return;
+ if (!GameState.IsInGame)
+ return;
foreach (var player in BAUPlugin.AllPlayerControls)
{
@@ -119,14 +121,6 @@ internal static class OptionsMenuBehaviourPatch
}
}
- private static void ClearNotifications()
- {
- // Clear all active notifications when option is toggled
- BetterNotificationManager.NotifyQueue.Clear();
- BetterNotificationManager.showTime = 0f;
- BetterNotificationManager.Notifying = false;
- }
-
private static void ToggleLobbyTheme()
{
// Play lobby theme music if re-enabled while in lobby
@@ -145,7 +139,8 @@ internal static class OptionsMenuBehaviourPatch
private static void OpenSaveData()
{
// Open BAU save data folder in file explorer
- if (!File.Exists(BetterDataManager.dataPath)) return;
+ if (!File.Exists(BetterDataManager.dataPath))
+ return;
Process.Start(new ProcessStartInfo
{
@@ -204,7 +199,8 @@ internal static class OptionsMenuBehaviourPatch
if (tabButton.gameObject.activeInHierarchy) activeCount++;
}
- if (activeCount == 0) return;
+ if (activeCount == 0)
+ return;
// Calculate total width needed for all active tabs
float totalWidth = (activeCount - 1) * buttonSpacing + activeCount * buttonWidth;
diff --git a/src/Patches/Client/PrivateLobbyPatch.cs b/src/Patches/Client/PrivateLobbyPatch.cs
index 9704506..40df963 100644
--- a/src/Patches/Client/PrivateLobbyPatch.cs
+++ b/src/Patches/Client/PrivateLobbyPatch.cs
@@ -27,7 +27,9 @@ internal static class PrivateLobbyPatch
}
// Only create toggle UI once
- if (toggle != null) return;
+ if (toggle != null)
+ return;
+
buttons.Clear();
// Clone April Fools toggle as template for private lobby toggle
@@ -39,7 +41,8 @@ internal static class PrivateLobbyPatch
// Get the ON and OFF buttons from the toggle
buttons.Add(toggle.transform.Find("AprilOn").GetComponent());
buttons.Add(toggle.transform.Find("AprilOff").GetComponent());
- if (buttons.Count < 2) return;
+ if (buttons.Count < 2)
+ return;
toggle.gameObject.SetActive(true);
@@ -83,7 +86,8 @@ internal static class PrivateLobbyPatch
private static void TogglePrivateOnlyLobby(bool modeOn)
{
- if (buttons.Count < 2) return;
+ if (buttons.Count < 2)
+ return;
// Show both buttons first
buttons[0].gameObject.SetActive(true);
diff --git a/src/Patches/Client/SplashIntroPatch.cs b/src/Patches/Client/SplashIntroPatch.cs
index d4a043f..c52b2aa 100644
--- a/src/Patches/Client/SplashIntroPatch.cs
+++ b/src/Patches/Client/SplashIntroPatch.cs
@@ -61,7 +61,8 @@ internal static class SplashIntroPatch
private static void HandleAudioDestruction(SplashManager __instance)
{
- if (!BetterIntro) return;
+ if (!BetterIntro)
+ return;
if (Time.time - __instance.startTime > AudioDestroyTime)
{
@@ -86,7 +87,8 @@ internal static class SplashIntroPatch
private static void StartBetterIntro(SplashManager __instance)
{
- if (BetterIntro) return;
+ if (BetterIntro)
+ return;
// Start BAU custom intro sequence
__instance.startTime = Time.time;
diff --git a/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs b/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs
index 351c95d..c609a90 100644
--- a/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs
+++ b/src/Patches/Gameplay/Anticheat/PlatformSpoofPatch.cs
@@ -16,7 +16,11 @@ internal class PlatformSpoofPatch
[HarmonyPostfix]
internal static void PlatformSpecificData_Deserialize_Postfix(PlatformSpecificData __instance)
{
- if (!BAUConfigs.AntiCheat.Value || BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat) || !GameState.IsVanillaServer) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat))
+ return;
+
+ if (!BAUConfigs.AntiCheat.Value || !GameState.IsVanillaServer)
+ return;
if (GameState.IsLobby)
{
diff --git a/src/Patches/Gameplay/Anticheat/VoteBanSystemPatch.cs b/src/Patches/Gameplay/Anticheat/VoteBanSystemPatch.cs
index a83d1c8..fba01af 100644
--- a/src/Patches/Gameplay/Anticheat/VoteBanSystemPatch.cs
+++ b/src/Patches/Gameplay/Anticheat/VoteBanSystemPatch.cs
@@ -98,7 +98,8 @@ internal static class VoteBanSystemPatch
private static void VoteBanSystem_AddVote_Postfix(VoteBanSystem __instance, int srcClient, int clientId)
{
// Skip logging if anti-cheat disabled
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_Anticheat))
+ return;
// Log the vote if it was allowed
if (DoLog)
diff --git a/src/Patches/Gameplay/LobbyPatch.cs b/src/Patches/Gameplay/LobbyPatch.cs
index a1a212d..d3749d6 100644
--- a/src/Patches/Gameplay/LobbyPatch.cs
+++ b/src/Patches/Gameplay/LobbyPatch.cs
@@ -85,7 +85,8 @@ internal static class LobbyPatch
[HarmonyPostfix]
private static void GameStartManager_Update_Postfix(GameStartManager __instance)
{
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_CancelStartingGame)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_CancelStartingGame))
+ return;
// Hide start button for non-hosts
if (!GameState.IsHost)
diff --git a/src/Patches/Gameplay/Managers/FindAGameManagerClass/FindGameMoreInfoPopupPatch.cs b/src/Patches/Gameplay/Managers/FindAGameManagerClass/FindGameMoreInfoPopupPatch.cs
index 01aedfa..2ef0d00 100644
--- a/src/Patches/Gameplay/Managers/FindAGameManagerClass/FindGameMoreInfoPopupPatch.cs
+++ b/src/Patches/Gameplay/Managers/FindAGameManagerClass/FindGameMoreInfoPopupPatch.cs
@@ -48,7 +48,8 @@ internal static class FindGameMoreInfoPopupPatch
private static void ShowAll()
{
- if (_findGameMoreInfoPopup == null) return;
+ if (_findGameMoreInfoPopup == null)
+ return;
_sb.Clear();
var options = _findGameMoreInfoPopup.gameListing.Options;
diff --git a/src/Patches/Gameplay/Managers/HudManagerPatch.cs b/src/Patches/Gameplay/Managers/HudManagerPatch.cs
index 31e6187..a09929d 100644
--- a/src/Patches/Gameplay/Managers/HudManagerPatch.cs
+++ b/src/Patches/Gameplay/Managers/HudManagerPatch.cs
@@ -3,7 +3,6 @@ using BetterAmongUs.Helpers;
using BetterAmongUs.Managers;
using BetterAmongUs.Modules;
using HarmonyLib;
-using TMPro;
using UnityEngine;
namespace BetterAmongUs.Patches.Gameplay.Managers;
@@ -22,43 +21,7 @@ internal static class HudManagerPatch
private static void HudManager_Start_Postfix(HudManager __instance)
{
// Create custom BAU notification system if it doesn't exist
- if (BetterNotificationManager.BAUNotificationManagerObj == null)
- {
- var ChatNotifications = __instance.Chat.chatNotification;
- if (ChatNotifications != null)
- {
- ChatNotifications.timeOnScreen = 1f;
- ChatNotifications.gameObject.SetActive(true);
-
- // Clone chat notification system for BAU notifications
- GameObject BAUNotification = UnityEngine.Object.Instantiate(ChatNotifications.gameObject);
- BAUNotification.name = "BAUNotification";
- BAUNotification.GetComponent().DestroyMono();
-
- // Remove unnecessary elements from the clone
- GameObject.Find($"{BAUNotification.name}/Sizer/PoolablePlayer").DestroyObj();
- GameObject.Find($"{BAUNotification.name}/Sizer/ColorText").DestroyObj();
-
- // Position notification at bottom-left corner
- BAUNotification.GetComponent().DistanceFromEdge = new Vector3(-1.57f, 5.3f, -15f);
- GameObject.Find($"{BAUNotification.name}/Sizer/NameText").transform.localPosition = new Vector3(-3.3192f, -0.0105f);
-
- // Cache TextMeshPro component for text updates
- BetterNotificationManager.NameText = GameObject.Find($"{BAUNotification.name}/Sizer/NameText").GetComponent();
- UnityEngine.Object.DontDestroyOnLoad(BAUNotification);
- BetterNotificationManager.BAUNotificationManagerObj = BAUNotification;
- BAUNotification.SetActive(false);
-
- // Reset original chat notification settings
- ChatNotifications.timeOnScreen = 0f;
- ChatNotifications.gameObject.SetActive(false);
-
- // Configure text wrapping for multi-line notifications
- BetterNotificationManager.TextArea.enableWordWrapping = true;
- BetterNotificationManager.TextArea.m_firstOverflowCharacterIndex = 0;
- BetterNotificationManager.TextArea.overflowMode = TextOverflowModes.Overflow;
- }
- }
+ BetterNotificationManager.Init();
// Show welcome message after 1 second delay (only once per session)
LateTask.Schedule(() =>
@@ -72,47 +35,45 @@ internal static class HudManagerPatch
Utils.AddChatPrivate(WelcomeMessage, overrideName: " ");
HasBeenWelcomed = true;
}
- }, 1f, "HudManagerPatch Start");
+ }, 1f, shouldLog: false);
}
+ private static GameObject? gameStart;
+
[HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))]
[HarmonyPostfix]
private static void HudManager_Update_Postfix(HudManager __instance)
{
- try
- {
- // Adjust GameStartManager position for better UI layout
- GameObject gameStart = GameObject.Find("GameStartManager");
- if (gameStart != null)
- gameStart.transform.SetLocalY(-2.8f);
+ // Adjust GameStartManager position for better UI layout
+ gameStart ??= GameObject.Find("GameStartManager");
+ gameStart?.transform.SetLocalY(-2.8f);
- // Manage in-game chat visibility based on settings and game state
- if (GameState.InGame)
+ // Manage in-game chat visibility based on settings and game state
+ if (GameState.InGame)
+ {
+ if (__instance.Chat == null)
+ return;
+
+ if (!BAUConfigs.ChatInGameplay.Value)
{
- if (!BAUConfigs.ChatInGameplay.Value)
+ // Vanilla chat behavior: only show chat when dead or during meetings
+ if (!PlayerControl.LocalPlayer.IsAlive())
{
- // Vanilla chat behavior: only show chat when dead or during meetings
- if (!PlayerControl.LocalPlayer.IsAlive())
- {
- __instance.Chat.gameObject.SetActive(true);
- }
- else if (GameState.IsInGamePlay && !(GameState.IsMeeting || GameState.IsExilling))
- {
- __instance.Chat.gameObject.SetActive(false);
- }
+ __instance.Chat.gameObject.SetActive(true);
}
- else
+ else if (GameState.IsInGamePlay && !(GameState.IsMeeting || GameState.IsExilling))
{
- // BAU chat behavior: always show chat when enabled
- if (__instance?.Chat?.gameObject.active == false)
- {
- __instance.Chat.gameObject.SetActive(true);
- }
+ __instance.Chat.gameObject.SetActive(false);
+ }
+ }
+ else
+ {
+ // BAU chat behavior: always show chat when enabled
+ if (__instance.Chat.gameObject.active == false)
+ {
+ __instance.Chat.gameObject.SetActive(true);
}
}
}
- catch
- {
- }
}
}
\ No newline at end of file
diff --git a/src/Patches/Gameplay/Player/PlayerControlPatch.cs b/src/Patches/Gameplay/Player/PlayerControlPatch.cs
index 08dc4a8..aac53e8 100644
--- a/src/Patches/Gameplay/Player/PlayerControlPatch.cs
+++ b/src/Patches/Gameplay/Player/PlayerControlPatch.cs
@@ -59,7 +59,7 @@ internal static class PlayerControlPatch
private static void PlayerControl_MurderPlayer_Postfix(PlayerControl __instance, PlayerControl target)
{
// Check for null references
- if (__instance == null || target == null || target.Data == null || __instance.Data == null)
+ if (__instance == null || target == null || target.Data == null || __instance.Data == null)
return;
// Log kill event with player names and roles
@@ -73,7 +73,8 @@ internal static class PlayerControlPatch
[HarmonyPostfix]
private static void PlayerControl_Shapeshift_Postfix(PlayerControl __instance, PlayerControl targetPlayer, bool animate)
{
- if (targetPlayer == null) return;
+ if (targetPlayer == null)
+ return;
// Log shapeshift events (both shifting and unshifting)
if (__instance != targetPlayer)
diff --git a/src/Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs b/src/Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs
index ddbdbc8..ada7ee4 100644
--- a/src/Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs
+++ b/src/Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs
@@ -120,7 +120,9 @@ internal static class PlayerJoinAndLeftPatch
internal static void BetterShowNotification(NetworkedPlayerInfo playerData, DisconnectReasons reason = DisconnectReasons.Unknown, string forceReasonText = "")
{
// Prevent showing duplicate notifications
- if (playerData.BetterData().AntiCheatInfo.BannedByAntiCheat || playerData.BetterData().HasShowDcMsg) return;
+ if (playerData.BetterData().AntiCheatInfo.BannedByAntiCheat || playerData.BetterData().HasShowDcMsg)
+ return;
+
playerData.BetterData().HasShowDcMsg = true;
string? playerName = playerData.BetterData().RealName;
diff --git a/src/Patches/Gameplay/UI/Chat/ChatNotificationPatch.cs b/src/Patches/Gameplay/UI/Chat/ChatNotificationPatch.cs
index f515e58..a9f2d61 100644
--- a/src/Patches/Gameplay/UI/Chat/ChatNotificationPatch.cs
+++ b/src/Patches/Gameplay/UI/Chat/ChatNotificationPatch.cs
@@ -11,7 +11,8 @@ internal static class ChatNotificationPatch
[HarmonyPostfix]
private static void ChatNotification_SetUp_Postfix(ChatNotification __instance)
{
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_BetterPingTracker)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_BetterPingTracker))
+ return;
// Reposition to top left
__instance.GetComponent().DistanceFromEdge = new Vector3(-2.8f, 0.3f, -40f);
diff --git a/src/Patches/Gameplay/UI/Chat/ChatPatch.cs b/src/Patches/Gameplay/UI/Chat/ChatPatch.cs
index f17f4dc..e3f631d 100644
--- a/src/Patches/Gameplay/UI/Chat/ChatPatch.cs
+++ b/src/Patches/Gameplay/UI/Chat/ChatPatch.cs
@@ -21,7 +21,8 @@ internal static class ChatPatch
internal static void ClearChat()
{
- if (!HudManager.InstanceExists) return;
+ if (!HudManager.InstanceExists)
+ return;
// Clear all chat bubbles
HudManager.Instance.Chat.chatBubblePool.ReclaimAll();
@@ -29,7 +30,8 @@ internal static class ChatPatch
internal static void ClearPlayerChats()
{
- if (!HudManager.InstanceExists) return;
+ if (!HudManager.InstanceExists)
+ return;
// Clear only player chat bubbles (keep command bubbles)
foreach (var obj in HudManager.Instance.Chat.chatBubblePool.activeChildren.ToArray())
@@ -46,7 +48,9 @@ internal static class ChatPatch
internal static void ClearCommands()
{
- if (!HudManager.InstanceExists) return;
+ if (!HudManager.InstanceExists)
+ return;
+
// Clear only command chat bubbles (keep player chat)
foreach (var obj in HudManager.Instance.Chat.chatBubblePool.activeChildren.ToArray())
{
@@ -129,12 +133,22 @@ internal static class ChatPatch
[HarmonyPostfix]
private static void ChatController_SetChatBubbleName_Postfix(ChatController __instance, ChatBubble bubble, NetworkedPlayerInfo playerInfo, bool isDead, bool didVote)
{
- if (didVote) return;
- if (bubble == null || bubble.NameText == null || playerInfo == null) return;
+ if (playerInfo == null)
+ return;
+
+ if (didVote)
+ return;
+
+ if (bubble?.NameText == null)
+ return;
var sourcePlayer = playerInfo.Object;
+ if (sourcePlayer == null)
+ return;
+
var localPlayer = PlayerControl.LocalPlayer;
- if (sourcePlayer == null || localPlayer == null) return;
+ if (localPlayer == null)
+ return;
StringBuilder sbTag = new();
StringBuilder sbInfo = new();
@@ -152,7 +166,8 @@ internal static class ChatPatch
Role = "";
var betterData = sourcePlayer.BetterData();
- if (betterData == null) return;
+ if (betterData == null)
+ return;
// Show BAU user tag
if (sourcePlayer.IsLocalPlayer() || betterData.IsBetterUser)
diff --git a/src/Patches/Gameplay/UI/GameSummaryPatch.cs b/src/Patches/Gameplay/UI/GameSummaryPatch.cs
index 738179a..e47f4d9 100644
--- a/src/Patches/Gameplay/UI/GameSummaryPatch.cs
+++ b/src/Patches/Gameplay/UI/GameSummaryPatch.cs
@@ -17,7 +17,7 @@ internal static class GameSummaryPatch
private static void EndGameManager_SetEverythingUp_Postfix(EndGameManager __instance)
{
// Check for null references
- if (__instance == null)
+ if (__instance == null)
return;
// Log game end to console
@@ -43,7 +43,8 @@ internal static class GameSummaryPatch
var summaryObject = CreateSummaryObject(endGameManager);
var summaryText = summaryObject.GetComponent();
- if (summaryText == null) return;
+ if (summaryText == null)
+ return;
ConfigureSummaryText(summaryText);
diff --git a/src/Patches/Gameplay/UI/MeetingHudPatch.cs b/src/Patches/Gameplay/UI/MeetingHudPatch.cs
index 0feafa0..0c9d09f 100644
--- a/src/Patches/Gameplay/UI/MeetingHudPatch.cs
+++ b/src/Patches/Gameplay/UI/MeetingHudPatch.cs
@@ -16,7 +16,8 @@ internal static class MeetingHudPatch
[HarmonyPostfix]
private static void MeetingHud_Start_Postfix(MeetingHud __instance)
{
- if (__instance == null || __instance.playerStates == null) return;
+ if (__instance == null || __instance.playerStates == null)
+ return;
// Add meeting info display to each player state
foreach (var pva in __instance.playerStates)
@@ -29,7 +30,8 @@ internal static class MeetingHudPatch
pva.gameObject.AddComponent().Init(target, pva);
}
- if (!GameState.IsOnlineGame) return;
+ if (!GameState.IsOnlineGame)
+ return;
// Add host icon to meeting hud
if (__instance.ProceedButton != null && __instance.HostIcon != null)
@@ -50,16 +52,21 @@ internal static class MeetingHudPatch
// Updates host icon with current host info
internal static void UpdateHostIcon()
{
- if (MeetingHud.Instance == null) return;
- if (GameData.Instance == null) return;
+ if (MeetingHud.Instance == null)
+ return;
+
+ if (GameData.Instance == null)
+ return;
var host = GameData.Instance.GetHost();
- if (host == null || host.BetterData() == null) return;
+ if (host?.BetterData() == null)
+ return;
var hostColor = host.Color;
var hostRealName = host.BetterData().RealName;
- if (MeetingHud.Instance.HostIcon == null || MeetingHud.Instance.ProceedButton == null) return;
+ if (MeetingHud.Instance.HostIcon == null || MeetingHud.Instance.ProceedButton == null)
+ return;
PlayerMaterial.SetColors(hostColor, MeetingHud.Instance.HostIcon);
MeetingHud.Instance.ProceedButton.gameObject.GetComponentInChildren().text = string.Format(Translator.GetString("HostInMeeting"), hostRealName);
diff --git a/src/Patches/Gameplay/UI/MiniMapBehaviourPatch.cs b/src/Patches/Gameplay/UI/MiniMapBehaviourPatch.cs
index f259520..b51a77a 100644
--- a/src/Patches/Gameplay/UI/MiniMapBehaviourPatch.cs
+++ b/src/Patches/Gameplay/UI/MiniMapBehaviourPatch.cs
@@ -69,7 +69,11 @@ internal static class MiniMapBehaviourPatch
[HarmonyPostfix]
private static void MapBehaviour_Show_Postfix(MapBehaviour __instance)
{
- if (!BAUConfigs.MinimapIcons.Value || BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_MinimapIcons)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_MinimapIcons))
+ return;
+
+ if (!BAUConfigs.MinimapIcons.Value)
+ return;
// Make infected overlay buttons semi-transparent and smaller
foreach (var button in __instance.infectedOverlay.allButtons)
diff --git a/src/Patches/Gameplay/UI/PlayerTabPatch.cs b/src/Patches/Gameplay/UI/PlayerTabPatch.cs
index f5446f3..daad54b 100644
--- a/src/Patches/Gameplay/UI/PlayerTabPatch.cs
+++ b/src/Patches/Gameplay/UI/PlayerTabPatch.cs
@@ -56,8 +56,13 @@ internal static class PlayerTabPatch
var data = OutfitData.GetOutfitData(currentI);
var button = playerTab.CreateOutfitPresetButton(name, new Vector3(2.5f, 1.55f - currentI * 0.45f, 0f), out var playerPreview, () =>
{
+ if (BetterDataManager.BetterDataFile.SelectedOutfitPreset == currentI)
+ return;
+
// Ignore if cooldown active or same preset selected
- if (cooldown > 0f || BetterDataManager.BetterDataFile.SelectedOutfitPreset == currentI) return;
+ if (cooldown > 0f)
+ return;
+
cooldown = 0.5f;
// Update selected preset
diff --git a/src/Patches/Gameplay/UI/ServerDropdownPatch.cs b/src/Patches/Gameplay/UI/ServerDropdownPatch.cs
index e88e4c5..424930a 100644
--- a/src/Patches/Gameplay/UI/ServerDropdownPatch.cs
+++ b/src/Patches/Gameplay/UI/ServerDropdownPatch.cs
@@ -14,7 +14,8 @@ internal static class ServerDropdownPatch
[HarmonyPrefix]
private static void FindAGameManager_Start_Prefix(FindAGameManager __instance)
{
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_ServerDropDown)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_ServerDropDown))
+ return;
var aspectPosition = __instance.serverDropdown.transform.parent.GetComponent();
if (aspectPosition != null)
diff --git a/src/Patches/Gameplay/UI/Settings/GameSettingsPatch.cs b/src/Patches/Gameplay/UI/Settings/GameSettingsPatch.cs
index 84be5b4..4edc400 100644
--- a/src/Patches/Gameplay/UI/Settings/GameSettingsPatch.cs
+++ b/src/Patches/Gameplay/UI/Settings/GameSettingsPatch.cs
@@ -140,7 +140,8 @@ internal static class GameSettingsPatch
[HarmonyPostfix]
private static void GameSettingMenu_Start_Postfix(GameSettingMenu __instance)
{
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_AllGameOptions)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_AllGameOptions))
+ return;
SetupSettings();
@@ -191,8 +192,11 @@ internal static class GameSettingsPatch
[HarmonyPrefix]
private static void GameSettingMenu_ChangeTab_Prefix(GameSettingMenu __instance, [HarmonyArgument(0)] int tabNum, [HarmonyArgument(1)] bool previewOnly)
{
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_AllGameOptions)) return;
- if (BetterSettingsTab == null) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_AllGameOptions))
+ return;
+
+ if (BetterSettingsTab == null)
+ return;
// Hide custom tab when switching away
BetterSettingsTab.AUTab?.gameObject?.SetActive(false);
@@ -233,7 +237,8 @@ internal static class GameSettingsPatch
[HarmonyPrefix]
private static void OptionsConsole_CanUse_Prefix(OptionsConsole __instance)
{
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_AllGameOptions)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_AllGameOptions))
+ return;
__instance.HostOnly = false; // Allow non-hosts to use settings console
}
diff --git a/src/Patches/Unity/UnityWebRequestPatch.cs b/src/Patches/Unity/UnityWebRequestPatch.cs
index 8f14529..da783b7 100644
--- a/src/Patches/Unity/UnityWebRequestPatch.cs
+++ b/src/Patches/Unity/UnityWebRequestPatch.cs
@@ -34,7 +34,8 @@ internal static class UnityWebRequestPatch
[HarmonyPrefix]
private static void UnityWebRequest_SendWebRequest_Prefix(UnityWebRequest __instance)
{
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_BAUHttpHeader)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_BAUHttpHeader))
+ return;
// Check if this is a game API request
var path = new Uri(__instance.url).AbsolutePath;
@@ -50,7 +51,8 @@ internal static class UnityWebRequestPatch
[HarmonyPostfix]
private static void UnityWebRequest_SendWebRequest_Postfix(UnityWebRequest __instance, UnityWebRequestAsyncOperation __result)
{
- if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_BAUHttpHeader)) return;
+ if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_BAUHttpHeader))
+ return;
var path = new Uri(__instance.url).AbsolutePath;
if (path.Contains("/api/games"))
@@ -58,7 +60,8 @@ internal static class UnityWebRequestPatch
// Add callback when request completes
__result.add_completed((Action)(_ =>
{
- if (!HttpUtils.IsSuccess(__instance.responseCode)) return;
+ if (!HttpUtils.IsSuccess(__instance.responseCode))
+ return;
// Check if server supports BAU mod
var responseHeader = __instance.GetResponseHeader("BAU-Mod-Processed");