Merge pull request #48 from D1GQ/dev

v1.3.0 hotfix 2
This commit is contained in:
D1GQ authored and GitHub committed 2025-10-28 14:58:36 -05:00
commit 7bfbe3c733
12 files changed
+76 -94

No files matched your search

+1 -1
View File
@@ -53,7 +53,7 @@ static class PlayerControlHelper
}
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) ||
+1 -1
View File
@@ -272,7 +272,7 @@ internal abstract class OptionItem
button.ReceiveMouseOut();
button.interactableHoveredColor = Color.gray;
button.interactableClickColor = Color.white;
button.buttonSprite.sprite = Utils.LoadSprite("TheBetterRoles.Resources.Images.Icons.QuestionMark.png", 50);
button.buttonSprite.sprite = Utils.LoadSprite("BetterAmongUs.Resources.Images.QuestionMark.png", 50);
button.OnClick = new();
button.OnClick.AddListener((Action)(() =>
{
+22 -15
View File
@@ -1,4 +1,5 @@
using BepInEx.Unity.IL2CPP.Utils;
using AmongUs.InnerNet.GameDataMessages;
using BepInEx.Unity.IL2CPP.Utils;
using BetterAmongUs.Helpers;
using BetterAmongUs.Items.Structs;
using BetterAmongUs.Modules;
@@ -26,7 +27,7 @@ internal class NetworkManager
}
catch (Exception ex)
{
Logger.Error(ex);
Logger.Error(ex, "NetworkManager");
}
finally
{
@@ -126,34 +127,34 @@ internal class NetworkManager
reader.Position = 0;
byte tag = reader.Tag;
switch (tag)
switch ((GameDataTypes)tag)
{
case 1: // Object deserialization
case GameDataTypes.DataFlag: // Object deserialization
yield return HandleObjectDeserialization(reader, msgNum, attemptCount);
break;
case 2: // RPC handling
case GameDataTypes.RpcFlag: // RPC handling
yield return HandleRpcCall(reader, msgNum, attemptCount);
break;
case 4: // Spawn handling
case GameDataTypes.SpawnFlag: // Spawn handling
InnerNetClient.StartCoroutine(InnerNetClient.CoHandleSpawn(reader));
break;
case 5: // Object destruction
case GameDataTypes.DespawnFlag: // Object destruction
yield return HandleObjectDestruction(reader);
break;
case 7: // Client ready status
case GameDataTypes.ReadyFlag: // Client ready status
yield return HandleClientReady(reader);
break;
case 6: // Scene change
case GameDataTypes.SceneChangeFlag: // Scene change
HandleSceneChange(reader);
break;
case 207: // Special case (ulong parsing)
yield return HandleSpecialCase(reader);
case GameDataTypes.XboxDeclareXuid: // Special case (ulong parsing) (DO NOT USE)
yield return HandleXboxDeclareXuid(reader);
break;
default: // Invalid tags
@@ -323,23 +324,29 @@ internal class NetworkManager
}
}
private static IEnumerator HandleSpecialCase(MessageReader reader)
private static IEnumerator HandleXboxDeclareXuid(MessageReader reader)
{
/*
try
{
ulong.Parse(reader.ReadString());
string data = reader.ReadString();
if (ulong.TryParse(data, out ulong parsedValue))
{
}
yield break;
}
finally
{
reader.Recycle();
}
*/
reader.Recycle();
yield break;
}
private static void HandleInvalidTag(MessageReader reader)
{
Debug.Log($"Bad tag {reader.Tag} at {reader.Offset}+{reader.Position}={reader.Length}: " +
string.Join(" ", reader.Buffer.Take(128)));
Logger.Warning($"Bad tag {reader.Tag} at {reader.Offset}+{reader.Position}={reader.Length}: " + string.Join(" ", reader.Buffer.Take(128)), "NetworkManager");
reader.Recycle();
}
+3 -3
View File
@@ -4,12 +4,12 @@ internal static class ModInfo
{
internal static readonly ReleaseTypes ReleaseBuildType = ReleaseTypes.Release;
internal const string BetaNum = "0";
internal const string HotfixNum = "1";
internal const string HotfixNum = "2";
internal const bool IsHotFix = true;
internal const string PluginName = "BetterAmongUs";
internal const string PluginGuid = "com.ten.betteramongus";
internal const string PluginGuid = "com.d1gq.betteramongus";
internal const string PluginVersion = "1.3.0";
internal const string ReleaseDate = "10.24.2025"; // mm/dd/yyyy
internal const string ReleaseDate = "10.28.2025"; // mm/dd/yyyy
internal const string Github = "https://github.com/D1GQ/BetterAmongUs-Public";
internal const string Discord = "https://discord.gg/vjYrXpzNAn";
}
@@ -1,5 +1,5 @@
using AmongUs.InnerNet.GameDataMessages;
using BetterAmongUs.Managers;
using BetterAmongUs.Network;
using BetterAmongUs.Patches.Gameplay.UI;
using Hazel;
using InnerNet;
@@ -8,7 +8,7 @@ namespace BetterAmongUs.Modules.AntiCheat;
internal class DeserializeNetObjectHandler : RPCHandler
{
internal override byte GameDataTag => (byte)HandleGameDataTags.NetObjectDeserialize;
internal override byte GameDataTag => (byte)GameDataTypes.DataFlag;
internal override void HandleGameData(MessageReader reader)
{
@@ -1,5 +1,5 @@
using AmongUs.InnerNet.GameDataMessages;
using BetterAmongUs.Managers;
using BetterAmongUs.Network;
using Hazel;
using InnerNet;
@@ -7,7 +7,7 @@ namespace BetterAmongUs.Modules.AntiCheat;
internal class DespawnNetObjectHandler : RPCHandler
{
internal override byte GameDataTag => (byte)HandleGameDataTags.NetObjectDespawn;
internal override byte GameDataTag => (byte)GameDataTypes.DespawnFlag;
internal override void HandleGameData(MessageReader reader)
{
+1 -11
View File
@@ -71,22 +71,12 @@ internal class ExtendedPlayerInfo : MonoBehaviour, IMonoExtension<NetworkedPlaye
}
}
internal void LateUpdate()
{
if (gameObject == null) return;
if (_Data != null && string.IsNullOrEmpty(RealName) && !string.IsNullOrEmpty(_Data.PlayerName))
{
RealName = _Data.PlayerName;
}
}
[HideFromIl2Cpp]
internal HandshakeHandler HandshakeHandler { get; }
[HideFromIl2Cpp]
internal UserData? MyUserData { get; private set; } = UserData.AllUsers.First();
internal byte _PlayerId { get; private set; }
internal string? RealName { get; private set; }
internal string RealName => _Data?.PlayerName ?? "???";
internal string NameSetAsLast { get; set; } = string.Empty;
internal bool IsBetterUser { get; set; } = false;
internal bool IsVerifiedBetterUser { get; set; } = false;
+4
View File
@@ -36,6 +36,10 @@ internal class GitHubFile
int dotCount = (int)(Time.time * 2f) % 4;
string dots = new('.', dotCount);
float progress = www.downloadProgress * 100f;
if (progress < 1f)
{
CustomLoadingBarManager.SetLoadingPercent(0f, $"Starting Download{dots}");
}
CustomLoadingBarManager.SetLoadingPercent(progress, $"Downloading{dots}");
}
yield return null;
-9
View File
@@ -20,15 +20,6 @@ enum CustomRPC : int
CheckSecretHashFromPlayer,
}
enum HandleGameDataTags : byte
{
NetObjectDeserialize = 1,
NetObjectHandleRPC = 2,
NetObjectSpawn = 4,
NetObjectDespawn = 5,
ClientDataReady = 7,
}
internal static class RPC
{
internal static void RpcSetNameForTarget(PlayerControl player, string name, PlayerControl target)
@@ -54,7 +54,7 @@ internal static class OnPlayerJoinedPatch
{
if (TextFileHandler.CompareStringFilters(BetterDataManager.banNameListFile, [player.Data.PlayerName]))
{
player.Kick(true, Translator.GetString("AntiCheat.BanPlayerListMessage"), bypassDataCheck: true);
player?.Kick(true, Translator.GetString("AntiCheat.BanPlayerListMessage"), bypassDataCheck: true);
}
}
}
+39 -49
View File
@@ -110,17 +110,29 @@ internal static class ChatPatch
// Add extra information to chat bubble
[HarmonyPatch(nameof(ChatController.AddChat))]
[HarmonyPostfix]
private static void AddChat_Postfix(ChatController __instance, [HarmonyArgument(0)] PlayerControl sourcePlayer, [HarmonyArgument(1)] string chatText)
private static void AddChat_Postfix(ChatController __instance, PlayerControl sourcePlayer, string chatText)
{
ChatBubble? chatBubble = SetChatPoolTheme();
if (chatBubble == null) return;
if (sourcePlayer.IsAlive() || !PlayerControl.LocalPlayer.IsAlive())
{
Logger.Log($"{sourcePlayer.Data.PlayerName} -> {chatText}", "ChatLog");
}
else
{
Logger.LogPrivate($"{sourcePlayer.Data.PlayerName} -> {chatText}", "ChatLog");
}
}
StringBuilder sbTag = new StringBuilder();
StringBuilder sbInfo = new StringBuilder();
[HarmonyPatch(nameof(ChatController.SetChatBubbleName))]
[HarmonyPostfix]
private static void SetChatBubbleName_Postfix(ChatController __instance, ChatBubble bubble, NetworkedPlayerInfo playerInfo)
{
StringBuilder sbTag = new();
StringBuilder sbInfo = new();
var sourcePlayer = playerInfo.Object;
string hashPuid = Utils.GetHashPuid(sourcePlayer);
string friendCode = sourcePlayer.Data.FriendCode;
string playerName = sourcePlayer.BetterData().RealName ?? "";
string friendCode = playerInfo.FriendCode;
string playerName = playerInfo.BetterData()?.RealName ?? "???";
string Role = $"<size=75%><color={sourcePlayer.GetTeamHexColor()}>{sourcePlayer.GetRoleName()}</color></size>+++";
if (GameState.IsLobby && !GameState.IsFreePlay)
@@ -183,15 +195,8 @@ internal static class ChatPatch
playerName += $" {sbInfo}";
}
chatBubble.NameText.text = playerName;
if (sourcePlayer.IsAlive() || !PlayerControl.LocalPlayer.IsAlive())
{
Logger.Log($"{sourcePlayer.Data.PlayerName} -> {chatText}", "ChatLog");
}
else
{
Logger.LogPrivate($"{sourcePlayer.Data.PlayerName} -> {chatText}", "ChatLog");
}
bubble.NameText.SetText(playerName);
SetChatPoolTheme(bubble);
}
[HarmonyPatch(nameof(ChatController.AddChatNote))]
@@ -240,39 +245,33 @@ internal static class ChatPatch
}
// Set chat theme
internal static ChatBubble? SetChatPoolTheme(ChatBubble? asChatBubble = null)
internal static ChatBubble SetChatPoolTheme(ChatBubble? asChatBubble = null)
{
ChatBubble Get() => HudManager.Instance.Chat.chatBubblePool.activeChildren
.SelectIl2Cpp(c => c.GetComponent<ChatBubble>())
.Last();
ChatBubble chatBubble = asChatBubble ??= Get();
if (chatBubble == null) return chatBubble;
ChatBubble chatBubble = asChatBubble ?? HudManager.Instance.Chat.GetPooledBubble();
if (BAUPlugin.ChatDarkMode.Value)
{
chatBubble.transform.Find("ChatText (TMP)").GetComponent<TextMeshPro>().color = new Color(1f, 1f, 1f, 1f);
chatBubble.transform.Find("Background").GetComponent<SpriteRenderer>().color = new Color(0.15f, 0.15f, 0.15f, 1f);
chatBubble.transform.Find("ChatText (TMP)").GetComponentInChildren<TextMeshPro>(true).color = new Color(1f, 1f, 1f, 1f);
chatBubble.transform.Find("Background").GetComponentInChildren<SpriteRenderer>(true).color = new Color(0.15f, 0.15f, 0.15f, 1f);
if (chatBubble.transform.Find("PoolablePlayer/xMark") != null)
{
if (chatBubble.transform.Find("PoolablePlayer/xMark").GetComponent<SpriteRenderer>().enabled == true)
if (chatBubble.transform.Find("PoolablePlayer/xMark").GetComponentInChildren<SpriteRenderer>(true).enabled == true)
{
chatBubble.transform.Find("Background").GetComponent<SpriteRenderer>().color = new Color(0.15f, 0.15f, 0.15f, 0.5f);
chatBubble.transform.Find("Background").GetComponentInChildren<SpriteRenderer>(true).color = new Color(0.15f, 0.15f, 0.15f, 0.5f);
}
}
}
else
{
chatBubble.transform.Find("ChatText (TMP)").GetComponent<TextMeshPro>().color = new Color(0f, 0f, 0f, 1f);
chatBubble.transform.Find("Background").GetComponent<SpriteRenderer>().color = new Color(1f, 1f, 1f, 1f);
chatBubble.transform.Find("ChatText (TMP)").GetComponentInChildren<TextMeshPro>(true).color = new Color(0f, 0f, 0f, 1f);
chatBubble.transform.Find("Background").GetComponentInChildren<SpriteRenderer>(true).color = new Color(1f, 1f, 1f, 1f);
if (chatBubble.transform.Find("PoolablePlayer/xMark") != null)
{
if (chatBubble.transform.Find("PoolablePlayer/xMark").GetComponent<SpriteRenderer>().enabled == true)
if (chatBubble.transform.Find("PoolablePlayer/xMark").GetComponentInChildren<SpriteRenderer>(true).enabled == true)
{
chatBubble.transform.Find("Background").GetComponent<SpriteRenderer>().color = new Color(1f, 1f, 1f, 0.5f);
chatBubble.transform.Find("Background").GetComponentInChildren<SpriteRenderer>(true).color = new Color(1f, 1f, 1f, 0.5f);
}
}
}
@@ -308,23 +307,14 @@ internal static class ChatPatch
private static Color GetCharColor(int length, Color color)
{
Color[] colorGradient =
[
Color.green,
Color.yellow,
Color.red
];
switch (length)
{
case int n when n > 117:
if (ColorUtility.TryParseHtmlString("#ff0000", out Color newColor1))
color = newColor1;
break;
case int n when n > 74:
if (ColorUtility.TryParseHtmlString("#ffff00", out Color newColor3))
color = newColor3;
break;
default:
if (ColorUtility.TryParseHtmlString("#00f04c", out Color newColor4))
color = newColor4;
break;
}
return color;
(float min, float max) lerpRange = (0f, 117f);
return colorGradient.LerpColor(lerpRange, length);
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB