mirror of
https://github.com/D1GQ/BetterAmongUs.git
synced 2026-10-20 01:46:19 +00:00
12 files changed
+76
-94
No files matched your search
@@ -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) ||
|
||||
|
||||
@@ -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
@@ -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
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 |
Reference in new issue
Block a user