diff --git a/BetterAmongUs.csproj b/BetterAmongUs.csproj
index 1d0bb6b..b908264 100644
--- a/BetterAmongUs.csproj
+++ b/BetterAmongUs.csproj
@@ -10,7 +10,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/Modules/AntiCheat.cs b/Modules/AntiCheat.cs
index e8d8153..1fccf3c 100644
--- a/Modules/AntiCheat.cs
+++ b/Modules/AntiCheat.cs
@@ -100,7 +100,7 @@ class AntiCheat
{
MessageReader reader = MessageReader.Get(Oldreader);
- if (player == PlayerControl.LocalPlayer || PlayerControl.LocalPlayer == null || player == null || !IsEnabled) return;
+ if (player.IsLocalPlayer() || player == null || !IsEnabled) return;
if (callId is unchecked((byte)CustomRPC.Sicko) && Main.AntiCheat.Value && BetterGameSettings.DetectCheatClients.GetBool())
{
@@ -182,7 +182,7 @@ class AntiCheat
{
MessageReader reader = MessageReader.Get(Oldreader);
- if (PlayerControl.LocalPlayer == null || player == null || player == PlayerControl.LocalPlayer || player.BetterData().IsBetterHost || reader == null || !IsEnabled || !Main.AntiCheat.Value
+ if (player == null || player.IsLocalPlayer() || player.BetterData().IsBetterHost || reader == null || !IsEnabled || !Main.AntiCheat.Value
|| (GameStates.IsBetterHostLobby && !GameStates.IsHost) || !BetterGameSettings.DetectInvalidRPCs.GetBool()) return;
RoleTypes? Role = player?.Data?.RoleType;
@@ -352,7 +352,7 @@ class AntiCheat
}
}
- if (!GameStates.IsHost || PlayerControl.LocalPlayer == null || player == null || player == PlayerControl.LocalPlayer || player.BetterData().IsBetterHost || !IsEnabled || !Main.AntiCheat.Value
+ if (!GameStates.IsHost || PlayerControl.LocalPlayer == null || player == null || player.IsLocalPlayer() || player.BetterData().IsBetterHost || !IsEnabled || !Main.AntiCheat.Value
|| (GameStates.IsBetterHostLobby && !GameStates.IsHost) || !BetterGameSettings.DetectInvalidRPCs.GetBool()) return true;
if (!BetterGameSettings.CancelInvalidSabotage.GetBool())
@@ -478,7 +478,7 @@ class AntiCheat
{
MessageReader reader = MessageReader.Get(Oldreader);
- if (PlayerControl.LocalPlayer == null || player == null || player == PlayerControl.LocalPlayer || player.BetterData().IsBetterHost || reader == null) return true;
+ if (PlayerControl.LocalPlayer == null || player == null || player.IsLocalPlayer() || player.BetterData().IsBetterHost || reader == null) return true;
// Prevent ban exploit
if (callId is (byte)RpcCalls.MurderPlayer)
@@ -489,7 +489,7 @@ class AntiCheat
if (target != null)
{
- if (target == PlayerControl.LocalPlayer)
+ if (target.IsLocalPlayer())
{
target.BetterData().AntiCheatInfo.TimesAttemptedKilled++;
diff --git a/Modules/BetterHostManager.cs b/Modules/BetterHostManager.cs
index d34d4bd..d34c8fc 100644
--- a/Modules/BetterHostManager.cs
+++ b/Modules/BetterHostManager.cs
@@ -206,7 +206,7 @@ class BetterHostManager
foreach (PlayerControl target in Main.AllPlayerControls)
{
- if (target == null || target == PlayerControl.LocalPlayer) continue;
+ if (target == null || target.IsLocalPlayer()) continue;
string NewName = player.CurrentOutfit.PlayerName;
@@ -224,7 +224,7 @@ class BetterHostManager
if (player.IsDev())
sbTopTag.Append("(Dev)+++");
- if (player == PlayerControl.LocalPlayer)
+ if (player.IsLocalPlayer())
sbTopTag.Append($"Better Host+++");
else if (player.BetterData().IsBetterUser)
sbTopTag.Append("Better User+++");
diff --git a/Modules/BetterNotificationManager.cs b/Modules/BetterNotificationManager.cs
index 5dfc5f6..1eb207d 100644
--- a/Modules/BetterNotificationManager.cs
+++ b/Modules/BetterNotificationManager.cs
@@ -1,4 +1,6 @@
-using TMPro;
+using BetterAmongUs.Patches;
+using Cpp2IL.Core.Extensions;
+using TMPro;
using UnityEngine;
namespace BetterAmongUs;
@@ -39,6 +41,11 @@ class BetterNotificationManager
if (newText != "")
text = $"Player: {player?.BetterData().RealName} " + newText + $": {reason}";
+ if (BetterGameSettings.CensorDetectionReason.GetBool())
+ {
+ reason = string.Concat('*').Repeat(reason.Length);
+ }
+
if (!AntiCheat.PlayerData.ContainsKey(Utils.GetHashPuid(player)))
{
AntiCheat.PlayerData[Utils.GetHashPuid(player)] = player.Data.FriendCode;
diff --git a/Modules/ExtendedPlayerControl.cs b/Modules/ExtendedPlayerControl.cs
index f6c5888..25c7015 100644
--- a/Modules/ExtendedPlayerControl.cs
+++ b/Modules/ExtendedPlayerControl.cs
@@ -68,7 +68,6 @@ static class ExtendedPlayerControl
textObj.text = text;
}
}
-
// Reset players over head text
public static void ResetAllPlayerTextInfo(this PlayerControl player)
{
@@ -99,7 +98,6 @@ static class ExtendedPlayerControl
}
return true;
}
-
// Kick player
public static void Kick(this PlayerControl player, bool ban = false, string setReasonInfo = "", bool AntiCheatBan = false)
{
@@ -127,7 +125,7 @@ static class ExtendedPlayerControl
player.BetterData().AntiCheatInfo.BannedByAntiCheat = AntiCheatBan;
}
-
+ // Set color outline on player
public static void SetOutline(this PlayerControl player, bool active, Color? color = null)
{
player.cosmetics.currentBodySprite.BodySprite.material.SetFloat("_Outline", (float)(active ? 1 : 0));
@@ -146,6 +144,7 @@ static class ExtendedPlayerControl
}
}
}
+ // Set color outline on player
public static void SetOutlineByHex(this PlayerControl player, bool active, string hexColor = "")
{
Color color = Utils.HexToColor32(hexColor);
@@ -165,26 +164,27 @@ static class ExtendedPlayerControl
}
}
}
-
// RPCs
+ // Set name for Target
public static void RpcSetNamePrivate(this PlayerControl player, string name, PlayerControl target)
{
if (player == null || target == null) return;
RPC.SetNamePrivate(player, name, target);
}
-
+ // Exile player
public static void RpcExile(this PlayerControl player)
{
if (player == null) return;
RPC.ExileAsync(player);
}
-
+ // Check if player is selecting room to spawn in, for Airship
public static bool IsInRoomSelect(this PlayerControl player)
{
if (player == null) return false;
return GameStates.AirshipIsActive && Vector2.Distance(player.GetTruePosition(), new(-25, 40)) < 5f;
}
-
+ // Check if player controller is self client
+ public static bool IsLocalPlayer(this PlayerControl player) => player != null && PlayerControl.LocalPlayer != null && player == PlayerControl.LocalPlayer;
// Get vent Id that the player is in.
public static int GetPlayerVentId(this PlayerControl player)
{
@@ -196,9 +196,8 @@ static class ExtendedPlayerControl
return ventilationSystem.PlayersInsideVents.TryGetValue(player.PlayerId, out var playerIdVentId) ? playerIdVentId : -1;
}
-
+ // Get true position
public static Vector2 GetCustomPosition(this PlayerControl player) => new(player.transform.position.x, player.transform.position.y);
-
// Check if player is a dev
public static bool IsDev(this PlayerControl player) => player != null && Main.DevUser.Contains($"{Utils.GetHashPuid(player)}+{player.Data.FriendCode}");
// Check if player is alive
@@ -254,7 +253,7 @@ static class ExtendedPlayerControl
// Check if player is a imposter teammate
public static bool IsImpostorTeammate(this PlayerControl player) =>
player != null && PlayerControl.LocalPlayer != null &&
- ((player == PlayerControl.LocalPlayer && PlayerControl.LocalPlayer.IsImpostorTeam()) ||
+ ((player.IsLocalPlayer() && PlayerControl.LocalPlayer.IsImpostorTeam()) ||
(PlayerControl.LocalPlayer.IsImpostorTeam() && player.IsImpostorTeam()));
// Check if player is in the Anti-Cheat list
public static bool IsCheater(this PlayerControl player) =>
diff --git a/Modules/ExtendedPlayerInfo.cs b/Modules/ExtendedPlayerInfo.cs
index df7b453..07f61aa 100644
--- a/Modules/ExtendedPlayerInfo.cs
+++ b/Modules/ExtendedPlayerInfo.cs
@@ -13,6 +13,7 @@ public static class PlayerControlDataExtension
public string? RealName { get; set; }
public Dictionary LastNameSetFor { get; set; } = [];
public bool IsBetterUser { get; set; } = false;
+ public bool IsVerifiedBetterUser { get; set; } = false;
public bool IsBetterHost { get; set; } = false;
public bool IsTOHEHost { get; set; } = false;
diff --git a/Modules/RPC.cs b/Modules/RPC.cs
index 3c2a725..aca33d2 100644
--- a/Modules/RPC.cs
+++ b/Modules/RPC.cs
@@ -7,8 +7,8 @@ namespace BetterAmongUs;
enum CustomRPC : int
{
// Cheat RPC's
- Sicko = 420,
- AUM = 42069,
+ Sicko = 420, // Results in 164
+ AUM = 42069, // Results in 85
AUMChat = 101,
// TOHE
@@ -16,8 +16,7 @@ enum CustomRPC : int
RequestRetryVersionCheck = 81,
//Better Among Us
- BetterCheck = 150,
- AddChat,
+ BetterCheck = 150,
}
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.HandleRpc))]
@@ -99,7 +98,7 @@ internal static class RPC
return;
}
- foreach (var player in Main.AllPlayerControls.Where(pc => pc != PlayerControl.LocalPlayer))
+ foreach (var player in Main.AllPlayerControls.Where(pc => !pc.IsLocalPlayer()))
{
var optionsByteArray = GameOptionsManager.Instance.gameOptionsFactory.ToBytes(GameOptionsManager.Instance.CurrentGameOptions, false);
MessageWriter messageWriter = AmongUsClient.Instance.StartRpcImmediately(player.NetId, (byte)RpcCalls.SyncSettings, SendOption.None, player.GetClientId());
@@ -114,6 +113,7 @@ internal static class RPC
MessageWriter messageWriter = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.BetterCheck, SendOption.None, -1);
messageWriter.Write(true);
messageWriter.Write(flag);
+ messageWriter.Write(Main.modSignature);
messageWriter.Write(Main.GetVersionText().Replace(" ", ""));
AmongUsClient.Instance.FinishRpcImmediately(messageWriter);
}
@@ -151,7 +151,7 @@ internal static class RPC
public static void HandleCustomRPC(PlayerControl player, byte callId, MessageReader oldReader)
{
- if (PlayerControl.LocalPlayer == null || player == null || player == PlayerControl.LocalPlayer || player.Data == null) return;
+ if (player == null || player.IsLocalPlayer() || player.Data == null) return;
if (!Enum.IsDefined(typeof(CustomRPC), (int)unchecked(callId))) return;
@@ -163,22 +163,39 @@ internal static class RPC
{
var SetBetterUser = reader.ReadBoolean();
var IsBetterHost = reader.ReadBoolean();
-
+ var Signature = reader.ReadString();
+ var Version = reader.ReadString();
+ var IsVerified = Signature == Main.modSignature;
if (!player.IsHost() && IsBetterHost)
{
BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((CustomRPC)callId)} called as BetterHost");
break;
}
+ if (string.IsNullOrEmpty(Signature) || string.IsNullOrEmpty(Version))
+ {
+ BetterNotificationManager.NotifyCheat(player, $"Invalid Action RPC: {Enum.GetName((CustomRPC)callId)} called with invalid info");
+ break;
+ }
+
player.BetterData().IsBetterUser = SetBetterUser;
player.BetterData().IsBetterHost = IsBetterHost;
+ if (IsVerified)
+ {
+ player.BetterData().IsVerifiedBetterUser = true;
+ }
+
+ Logger.Log($"Received better user RPC from: {player.Data.PlayerName}:{player.Data.FriendCode}:{Utils.GetHashPuid(player)} - " +
+ $"BetterUser: {SetBetterUser} - " +
+ $"BetterHost: {IsBetterHost} - " +
+ $"Version: {Version} - " +
+ $"Verified: {IsVerified} - " +
+ $"Signature: {Signature}");
+
SyncAllNames(force: true);
}
break;
- case (byte)CustomRPC.AddChat:
- Utils.AddChatPrivate(reader.ReadString(), reader.ReadString());
- break;
case (byte)CustomRPC.VersionCheck or (byte)CustomRPC.RequestRetryVersionCheck:
if (player.IsHost())
{
@@ -192,7 +209,7 @@ internal static class RPC
public static void HandleRPC(PlayerControl player, byte callId, MessageReader oldReader)
{
- if (PlayerControl.LocalPlayer == null || player == null || player == PlayerControl.LocalPlayer || player.Data == null) return;
+ if (player == null || player.IsLocalPlayer() || player.Data == null) return;
MessageReader reader = MessageReader.Get(oldReader);
@@ -206,7 +223,7 @@ internal static class RPC
case (byte)RpcCalls.SendChat:
var text = reader.ReadString();
- if (player.IsHost() && player != PlayerControl.LocalPlayer)
+ if (player.IsHost() && !player.IsLocalPlayer())
{
if (text.ToLower() == "/allow")
{
diff --git a/Patches/ChatPatch.cs b/Patches/ChatPatch.cs
index d5669c7..e3adc9c 100644
--- a/Patches/ChatPatch.cs
+++ b/Patches/ChatPatch.cs
@@ -131,7 +131,7 @@ class ChatPatch
pooledBubble.transform.SetParent(__instance.scroller.Inner);
pooledBubble.transform.localScale = Vector3.one;
- bool flag = sourcePlayer == PlayerControl.LocalPlayer;
+ bool flag = sourcePlayer.IsLocalPlayer();
if (flag)
{
pooledBubble.SetRight();
@@ -176,10 +176,10 @@ class ChatPatch
if (sourcePlayer.IsDev())
sbTag.Append("Dev+++");
- if (((sourcePlayer == PlayerControl.LocalPlayer && GameStates.IsHost && Main.BetterHost.Value)
- || (sourcePlayer != PlayerControl.LocalPlayer && sourcePlayer.BetterData().IsBetterHost && sourcePlayer.IsHost())))
+ if (((sourcePlayer.IsLocalPlayer() && GameStates.IsHost && Main.BetterHost.Value)
+ || (!sourcePlayer.IsLocalPlayer() && sourcePlayer.BetterData().IsBetterHost && sourcePlayer.IsHost())))
sbTag.Append("Better Host+++");
- else if ((sourcePlayer == PlayerControl.LocalPlayer || sourcePlayer.BetterData().IsBetterUser))
+ else if ((sourcePlayer.IsLocalPlayer() || sourcePlayer.BetterData().IsBetterUser))
sbTag.Append("Better User+++");
if (!string.IsNullOrEmpty(hashPuid) && AntiCheat.SickoData.ContainsKey(hashPuid) || !string.IsNullOrEmpty(friendCode) && AntiCheat.SickoData.ContainsValue(friendCode))
@@ -192,7 +192,7 @@ class ChatPatch
if (!sourcePlayer.IsImpostorTeammate())
{
- if (PlayerControl.LocalPlayer.IsAlive() && sourcePlayer != PlayerControl.LocalPlayer)
+ if (PlayerControl.LocalPlayer.IsAlive() && !sourcePlayer.IsLocalPlayer())
{
Role = "";
}
diff --git a/Patches/CommandsPatch.cs b/Patches/CommandsPatch.cs
index ec75c48..3334463 100644
--- a/Patches/CommandsPatch.cs
+++ b/Patches/CommandsPatch.cs
@@ -347,7 +347,7 @@ class CommandsPatch
else if (HandlePlayerArgument(command, subArgs) == true)
{
var player = cmdTarget;
- if (player == PlayerControl.LocalPlayer)
+ if (player.IsLocalPlayer())
{
Utils.AddChatPrivate($"{error}\nUnable to use /SetRole for self, use /Role!");
return;
diff --git a/Patches/GameSettingMenuPatch.cs b/Patches/GameSettingMenuPatch.cs
index d844b07..67b1704 100644
--- a/Patches/GameSettingMenuPatch.cs
+++ b/Patches/GameSettingMenuPatch.cs
@@ -18,8 +18,8 @@ class BetterGameSettings
public static BetterOptionItem? DetectInvalidRPCs;
public static BetterOptionItem? RoleRandomizer;
public static BetterOptionItem? DesyncRoles;
-
public static BetterOptionItem? CancelInvalidSabotage;
+ public static BetterOptionItem? CensorDetectionReason;
}
class BetterGameSettingsTemp
@@ -43,6 +43,8 @@ static class GameSettingMenuPatch
BetterOptionItem.TempPlayerOptionDataNum = 0;
TitleList.Clear();
+ // Use 1400 next ID
+
// Anti-Cheat Settings
{
TitleList.Add(new BetterOptionHeaderItem().Create(BetterSettingsTab, "Anti-Cheat Settings"));
@@ -51,18 +53,19 @@ static class GameSettingMenuPatch
{
TitleList.Add(new BetterOptionTitleItem().Create(BetterSettingsTab, $"Host Only"));
BetterGameSettings.WhenCheating = new BetterOptionStringItem().Create(100, BetterSettingsTab, "When a player is caught cheating", ["Notify", "Kick", "Ban"], 2);
- BetterGameSettings.InvalidFriendCode = new BetterOptionCheckboxItem().Create(200, BetterSettingsTab, "Detected invalid FriendCodes", true);
- BetterGameSettings.CancelInvalidSabotage = new BetterOptionCheckboxItem().Create(900, BetterSettingsTab, "Cancel Invalid Sabotages", true);
- BetterGameSettings.UseBanPlayerList = new BetterOptionCheckboxItem().Create(300, BetterSettingsTab, "Use Ban Player List", true);
- BetterGameSettings.UseBanNameList = new BetterOptionCheckboxItem().Create(400, BetterSettingsTab, "Use Ban Name List", true);
- BetterGameSettings.UseBanWordList = new BetterOptionCheckboxItem().Create(500, BetterSettingsTab, "Use Ban Word List", true);
+ BetterGameSettings.InvalidFriendCode = new BetterOptionCheckboxItem().Create(200, BetterSettingsTab, "Detected invalid friendCodes", true);
+ BetterGameSettings.CancelInvalidSabotage = new BetterOptionCheckboxItem().Create(900, BetterSettingsTab, "Cancel invalid sabotages", true);
+ BetterGameSettings.UseBanPlayerList = new BetterOptionCheckboxItem().Create(300, BetterSettingsTab, "Use ban player list", true);
+ BetterGameSettings.UseBanNameList = new BetterOptionCheckboxItem().Create(400, BetterSettingsTab, "Use ban name list", true);
+ BetterGameSettings.UseBanWordList = new BetterOptionCheckboxItem().Create(500, BetterSettingsTab, "Use ban word list", true);
TitleList.Add(new BetterOptionDividerItem().Create(BetterSettingsTab));
}
TitleList.Add(new BetterOptionTitleItem().Create(BetterSettingsTab, $"Detections"));
+ BetterGameSettings.CensorDetectionReason = new BetterOptionCheckboxItem().Create(1300, BetterSettingsTab, "Censor detection reason", false);
BetterGameSettings.DetectedLevelAbove = new BetterOptionIntItem().Create(600, BetterSettingsTab, "Detected player levels >", [100, 5000, 5], 200, "Lv ", "");
- BetterGameSettings.DetectCheatClients = new BetterOptionCheckboxItem().Create(700, BetterSettingsTab, "Detect Cheat Clients", true);
- BetterGameSettings.DetectInvalidRPCs = new BetterOptionCheckboxItem().Create(800, BetterSettingsTab, "Detect Invalid RPCs", true);
+ BetterGameSettings.DetectCheatClients = new BetterOptionCheckboxItem().Create(700, BetterSettingsTab, "Detect cheat clients", true);
+ BetterGameSettings.DetectInvalidRPCs = new BetterOptionCheckboxItem().Create(800, BetterSettingsTab, "Detect invalid RPCs", true);
/*
TitleList.Add(new BetterOptionDividerItem().Create(BetterSettingsTab));
@@ -75,7 +78,7 @@ static class GameSettingMenuPatch
{
TitleList.Add(new BetterOptionHeaderItem().Create(BetterSettingsTab, "Role Algorithm Settings"));
BetterGameSettings.RoleRandomizer = new BetterOptionStringItem().Create(1100, BetterSettingsTab, "Randomizer", ["System.Random", "UnityEngine.Random"], 0);
- BetterGameSettings.DesyncRoles = new BetterOptionCheckboxItem().Create(1200, BetterSettingsTab, "Desync Roles To Other Clients", true);
+ BetterGameSettings.DesyncRoles = new BetterOptionCheckboxItem().Create(1200, BetterSettingsTab, "Desync roles to other clients", true);
}
// Gameplay Settings
diff --git a/Patches/MeetingHudPatch.cs b/Patches/MeetingHudPatch.cs
index c2d9be0..71ef7dc 100644
--- a/Patches/MeetingHudPatch.cs
+++ b/Patches/MeetingHudPatch.cs
@@ -86,7 +86,7 @@ class MeetingHudUpdatePatch
case DisconnectReasons.Banned:
if (playerData.BetterData().AntiCheatInfo.BannedByAntiCheat)
{
- DisconnectText = "Banned By Anti-Cheat>";
+ DisconnectText = "Banned By Anti-Cheat";
}
else
{
@@ -153,7 +153,7 @@ class MeetingHudUpdatePatch
}
if (!target.IsImpostorTeammate())
{
- if (PlayerControl.LocalPlayer.IsAlive() && target != PlayerControl.LocalPlayer)
+ if (PlayerControl.LocalPlayer.IsAlive() && !target.IsLocalPlayer())
{
if (!DebugMenu.RevealRoles)
{
diff --git a/Patches/PingTrackerPatch.cs b/Patches/PingTrackerPatch.cs
index 72dfb31..4a64ef4 100644
--- a/Patches/PingTrackerPatch.cs
+++ b/Patches/PingTrackerPatch.cs
@@ -31,7 +31,8 @@ public class PingTrackerPatch
}
sb.Append($"BetterAmongUs {Main.GetVersionText(true)}\n");
- sb.AppendFormat("{0}\n", Main.Github);
+ // sb.Append("By The Enhanced Network\n");
+ sb.Append($"{Main.Github}\n");
if (Main.BetterHost.Value && GameStates.IsHost)
{
diff --git a/Patches/PlayerControlPatch.cs b/Patches/PlayerControlPatch.cs
index a26c66b..53950ef 100644
--- a/Patches/PlayerControlPatch.cs
+++ b/Patches/PlayerControlPatch.cs
@@ -130,19 +130,22 @@ class PlayerControlPatch
var sbTagBottom = new StringBuilder();
// Put +++ at the end of each tag
- if (!string.IsNullOrEmpty(hashPuid) && AntiCheat.SickoData.ContainsKey(hashPuid) || !string.IsNullOrEmpty(friendCode) && AntiCheat.SickoData.ContainsValue(friendCode))
+ if (!string.IsNullOrEmpty(hashPuid) && hashPuid.Length > 0 && AntiCheat.SickoData.ContainsKey(hashPuid)
+ || !string.IsNullOrEmpty(friendCode) && friendCode.Length > 0 && AntiCheat.SickoData.ContainsValue(friendCode))
{
sbTag.Append("Sicko User+++");
player.SetOutlineByHex(true, "#00f583");
}
- else if (!string.IsNullOrEmpty(hashPuid) && AntiCheat.AUMData.ContainsKey(hashPuid) || !string.IsNullOrEmpty(friendCode) && AntiCheat.AUMData.ContainsValue(friendCode))
+ else if (!string.IsNullOrEmpty(hashPuid) && hashPuid.Length > 0 && AntiCheat.AUMData.ContainsKey(hashPuid)
+ || !string.IsNullOrEmpty(friendCode) && friendCode.Length > 0 && AntiCheat.AUMData.ContainsValue(friendCode))
{
sbTag.Append("AUM User+++");
player.SetOutlineByHex(true, "#4f0000");
}
- else if (!string.IsNullOrEmpty(hashPuid) && AntiCheat.PlayerData.ContainsKey(hashPuid) || !string.IsNullOrEmpty(friendCode) && AntiCheat.PlayerData.ContainsValue(friendCode))
+ else if (!string.IsNullOrEmpty(hashPuid) && hashPuid.Length > 0 && AntiCheat.PlayerData.ContainsKey(hashPuid)
+ || !string.IsNullOrEmpty(friendCode) && friendCode.Length > 0 && AntiCheat.PlayerData.ContainsValue(friendCode))
{
sbTag.Append("Known Cheater+++");
player.SetOutlineByHex(true, "#fc0000");
@@ -169,11 +172,11 @@ class PlayerControlPatch
if (player.IsDev() && !GameStates.IsInGamePlay)
sbTag.Append("(Dev)+++");
- if (((player == PlayerControl.LocalPlayer && GameStates.IsHost && Main.BetterHost.Value)
- || (player != PlayerControl.LocalPlayer && player.BetterData().IsBetterHost && player.IsHost())) && !GameStates.IsInGamePlay)
- sbTag.Append("Better Host+++");
- else if ((player == PlayerControl.LocalPlayer || player.BetterData().IsBetterUser) && !GameStates.IsInGamePlay)
- sbTag.Append("Better User+++");
+ if (((player.IsLocalPlayer() && GameStates.IsHost && Main.BetterHost.Value)
+ || (!player.IsLocalPlayer() && player.BetterData().IsBetterHost && player.IsHost())) && !GameStates.IsInGamePlay)
+ sbTag.AppendFormat("{0}Better Host+++", player.BetterData().IsVerifiedBetterUser || player.IsLocalPlayer() ? "✓ " : "");
+ else if ((player.IsLocalPlayer() || player.BetterData().IsBetterUser) && !GameStates.IsInGamePlay)
+ sbTag.AppendFormat("{0}Better User+++", player.BetterData().IsVerifiedBetterUser || player.IsLocalPlayer() ? "✓ " : "");
sbTag.Append($"ID: {player.PlayerId}+++");
sbTagTop.Append($"{platform}+++");
@@ -184,7 +187,7 @@ class PlayerControlPatch
}
else if ((GameStates.IsInGame || GameStates.IsFreePlay) && !GameStates.IsHideNSeek)
{
- if (player.IsImpostorTeammate() || player == PlayerControl.LocalPlayer || !PlayerControl.LocalPlayer.IsAlive() || DebugMenu.RevealRoles)
+ if (player.IsImpostorTeammate() || player.IsLocalPlayer() || !PlayerControl.LocalPlayer.IsAlive() || DebugMenu.RevealRoles)
{
string Role = $"{player.GetRoleName()}";
if (!player.IsImpostorTeam() && player.myTasks.Count > 0)
@@ -200,7 +203,7 @@ class PlayerControlPatch
}
else if (GameStates.IsInGame || GameStates.IsFreePlay)
{
- if (player == PlayerControl.LocalPlayer)
+ if (player.IsLocalPlayer())
{
if (player.IsImpostorTeam())
{
@@ -213,7 +216,7 @@ class PlayerControlPatch
}
}
- if (player.IsImpostorTeammate() && player != PlayerControl.LocalPlayer)
+ if (player.IsImpostorTeammate() && !player.IsLocalPlayer())
{
NewName = $"{player.Data.PlayerName}";
}
diff --git a/Patches/RoleManagerPatch.cs b/Patches/RoleManagerPatch.cs
index 1d5b263..01f8183 100644
--- a/Patches/RoleManagerPatch.cs
+++ b/Patches/RoleManagerPatch.cs
@@ -13,7 +13,7 @@ public class RoleManagerPatch
static readonly Func clientCheck = (clientData) =>
{
- return clientData?.BetterData()?.IsBetterUser != true;
+ return clientData?.BetterData()?.IsVerifiedBetterUser != true;
};
// Better role algorithm
@@ -49,7 +49,7 @@ public class RoleManagerPatch
{
{ 3, 1 },
{ 5, 2 },
- { 6, 3 }
+ { 7, 3 }
};
foreach (var limit in impostorLimits)
@@ -92,7 +92,7 @@ public class RoleManagerPatch
// Override player role assignment
if (SetPlayerRole.Keys.Any())
{
- foreach (var kvp in SetPlayerRole.Where(kvp => kvp.Key != null).OrderBy(kvp => kvp.Key == PlayerControl.LocalPlayer ? 0 : 1))
+ foreach (var kvp in SetPlayerRole.Where(kvp => kvp.Key != null).OrderBy(kvp => kvp.Key.IsLocalPlayer() ? 0 : 1))
{
var player = kvp.Key;
var role = kvp.Value;
@@ -103,7 +103,7 @@ public class RoleManagerPatch
{
Impostors.Add(player);
player.RpcSetRole(RoleTypes.Impostor);
- Logger.Log($"Override Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {player.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Override Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {player.Data.PlayerName}", "RoleManager");
}
else continue;
}
@@ -111,7 +111,7 @@ public class RoleManagerPatch
{
Crewmates.Add(player);
player.RpcSetRole(RoleTypes.Crewmate);
- Logger.Log($"Override Assigned {Utils.GetRoleName(RoleTypes.Crewmate)} role to {player.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Override Assigned {Utils.GetRoleName(RoleTypes.Crewmate)} role to {player.Data.PlayerName}", "RoleManager");
}
else
{
@@ -155,7 +155,7 @@ public class RoleManagerPatch
}
}
- Logger.Log($"Override Assigned {Utils.GetRoleName(role)} role to {player.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Override Assigned {Utils.GetRoleName(role)} role to {player.Data.PlayerName}", "RoleManager");
}
}
}
@@ -205,7 +205,7 @@ public class RoleManagerPatch
}
}
- Logger.Log($"Assigned {Utils.GetRoleName(kvp.Key)} role to {pc.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Assigned {Utils.GetRoleName(kvp.Key)} role to {pc.Data.PlayerName}", "RoleManager");
break;
}
}
@@ -215,7 +215,7 @@ public class RoleManagerPatch
ImpostorMultiplier[Utils.GetHashPuid(pc)] += 15;
Impostors.Add(pc);
pc.RpcSetRole(RoleTypes.Impostor);
- Logger.Log($"Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {pc.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {pc.Data.PlayerName}", "RoleManager");
}
}
else
@@ -242,7 +242,7 @@ public class RoleManagerPatch
}
}
- Logger.Log($"Assigned {Utils.GetRoleName(kvp.Key)} role to {pc.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Assigned {Utils.GetRoleName(kvp.Key)} role to {pc.Data.PlayerName}", "RoleManager");
break;
}
}
@@ -252,7 +252,7 @@ public class RoleManagerPatch
ImpostorMultiplier[Utils.GetHashPuid(pc)] = 0;
Crewmates.Add(pc);
pc.RpcSetRole(RoleTypes.Crewmate);
- Logger.Log($"Assigned {Utils.GetRoleName(RoleTypes.Crewmate)} role to {pc.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Assigned {Utils.GetRoleName(RoleTypes.Crewmate)} role to {pc.Data.PlayerName}", "RoleManager");
}
}
}
@@ -301,7 +301,7 @@ public class RoleManagerPatch
if (Impostors.Count < NumImpostors)
{
Impostors.Add(player);
- Logger.Log($"Settings Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {player.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Settings Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {player.Data.PlayerName}", "RoleManager");
}
}
}
@@ -311,7 +311,7 @@ public class RoleManagerPatch
// Override player role assignment
if (SetPlayerRole.Keys.Any())
{
- foreach (var kvp in SetPlayerRole.Where(kvp => kvp.Key != null).OrderBy(kvp => kvp.Key == PlayerControl.LocalPlayer ? 0 : 1))
+ foreach (var kvp in SetPlayerRole.Where(kvp => kvp.Key != null).OrderBy(kvp => kvp.Key.IsLocalPlayer() ? 0 : 1))
{
var player = kvp.Key;
var role = kvp.Value;
@@ -321,14 +321,14 @@ public class RoleManagerPatch
if (Impostors.Count < NumImpostors)
{
Impostors.Add(player);
- Logger.Log($"Override Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {player.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Override Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {player.Data.PlayerName}", "RoleManager");
}
else continue;
}
else if (role is RoleTypes.Engineer)
{
Crewmates.Add(player);
- Logger.Log($"Override Assigned {Utils.GetRoleName(RoleTypes.Engineer)} role to {player.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Override Assigned {Utils.GetRoleName(RoleTypes.Engineer)} role to {player.Data.PlayerName}", "RoleManager");
}
}
}
@@ -359,7 +359,7 @@ public class RoleManagerPatch
if (!Crewmates.Contains(pc))
{
Impostors.Add(pc);
- Logger.Log($"Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {pc.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Assigned {Utils.GetRoleName(RoleTypes.Impostor)} role to {pc.Data.PlayerName}", "RoleManager");
}
}
else
@@ -367,7 +367,7 @@ public class RoleManagerPatch
if (!Impostors.Contains(pc))
{
Crewmates.Add(pc);
- Logger.Log($"Assigned {Utils.GetRoleName(RoleTypes.Engineer)} role to {pc.Data.PlayerName}", "RoleManager");
+ Logger.LogPrivate($"Assigned {Utils.GetRoleName(RoleTypes.Engineer)} role to {pc.Data.PlayerName}", "RoleManager");
}
}
}
diff --git a/main.cs b/main.cs
index 3e3cd1c..7cd264b 100644
--- a/main.cs
+++ b/main.cs
@@ -24,11 +24,11 @@ public class Main : BasePlugin
{
public const ReleaseTypes ReleaseBuildType = ReleaseTypes.Release;
public const string CanaryNum = "0";
- public const string HotfixNum = "0";
- public const bool IsHotFix = false;
+ public const string HotfixNum = "1";
+ public const bool IsHotFix = true;
public const string PluginGuid = "com.d1gq.betteramongus";
public const string PluginVersion = "1.1.2";
- public const string ReleaseDate = "08.31.2024"; // mm/dd/yyyy
+ public const string ReleaseDate = "09.8.2024"; // mm/dd/yyyy
public const string Github = "https://github.com/D1GQ/BetterAmongUs-Public";
public const string Discord = "https://discord.gg/vjYrXpzNAn";
@@ -53,8 +53,9 @@ public class Main : BasePlugin
.Append(ReleaseDate)
.Append(Github)
.Append(Discord)
- .Append(string.Join(",", Enum.GetNames(typeof(CustomRPC))))
- .Append(string.Join(",", GetRoleName.Values))
+ .Append(string.Join(".", Enum.GetNames(typeof(CustomRPC))))
+ .Append(string.Join(".", GetRoleName.Values))
+ .Append(string.Join(".", GetRoleColor.Values))
.ToString();
return GetHash(versionData);
@@ -88,6 +89,7 @@ public class Main : BasePlugin
public static List SupportedAmongUsVersions =
[
+ "2024.9.4",
"2024.8.13",
"2024.6.18",
];