Add favorite color and fix null reference

This commit is contained in:
D1GQ committed 2025-12-02 23:48:15 -06:00
1 parent 5b8be42f55
commit d2c90b9f52
5 files changed
+109 -19

No files matched your search

+2
View File
@@ -165,6 +165,7 @@ internal class BAUPlugin : BasePlugin
internal static ConfigEntry<bool>? UnlockFPS { get; private set; }
internal static ConfigEntry<bool>? ShowFPS { get; private set; }
internal static ConfigEntry<string>? CommandPrefix { get; set; }
internal static ConfigEntry<int>? FavoriteColor { get; set; }
private void LoadOptions()
{
PrivateOnlyLobby = Config.Bind("Mod", "PrivateOnlyLobby", false);
@@ -179,6 +180,7 @@ internal class BAUPlugin : BasePlugin
UnlockFPS = Config.Bind("Better Options", "UnlockFPS", false);
ShowFPS = Config.Bind("Better Options", "ShowFPS", false);
CommandPrefix = Config.Bind("Client Options", "CommandPrefix", "/");
FavoriteColor = Config.Bind("Mod", "FavoriteColor", -1);
}
internal static string GetDataPathToAmongUs() => Application.persistentDataPath;
+2
View File
@@ -1,6 +1,7 @@
using BepInEx.Unity.IL2CPP.Utils;
using BetterAmongUs.Helpers;
using BetterAmongUs.Network.Loaders;
using Il2CppInterop.Runtime.Attributes;
using System.Collections;
using System.Reflection;
using TMPro;
@@ -68,6 +69,7 @@ internal class UpdateManager : MonoBehaviour
private GameObject? mainMenu;
private GameObject? ambience;
[HideFromIl2Cpp]
private IEnumerator CoPressDownload(DoNotPressButton button)
{
AmUpdateing = true;
+19 -2
View File
@@ -1,9 +1,11 @@
using BetterAmongUs.Helpers;
using BepInEx.Unity.IL2CPP.Utils.Collections;
using BetterAmongUs.Helpers;
using BetterAmongUs.Items.Enums;
using BetterAmongUs.Items.OptionItems;
using BetterAmongUs.Managers;
using BetterAmongUs.Mono;
using HarmonyLib;
using System.Collections;
namespace BetterAmongUs.Patches.Gameplay.Player;
@@ -12,10 +14,25 @@ internal static class PlayerControlPatch
{
[HarmonyPatch(nameof(PlayerControl.Start))]
[HarmonyPostfix]
private static void Start_Postfix(PlayerControl __instance)
private static void Start_Postfix(PlayerControl __instance, ref Il2CppSystem.Collections.IEnumerator __result)
{
BAUPlugin.AllPlayerControls.Add(__instance);
OptionPlayerItem.UpdateAllValues();
__result = Effects.Sequence(__result, CoSetFavoriteColor(__instance).WrapToIl2Cpp());
}
private static IEnumerator CoSetFavoriteColor(PlayerControl player)
{
if (player.AmOwner)
{
if (BAUPlugin.FavoriteColor.Value >= 0 && player.cosmetics.ColorId != (byte)BAUPlugin.FavoriteColor.Value)
{
player.CmdCheckColor((byte)BAUPlugin.FavoriteColor.Value);
}
}
yield break;
}
[HarmonyPatch(nameof(PlayerControl.OnDestroy))]
@@ -33,29 +33,34 @@ internal static class OnPlayerJoinedPatch
{
_ = new LateTask(() =>
{
if (GameState.IsInGame)
if (GameState.IsHost)
{
var player = Utils.PlayerFromClientId(client.Id);
// Auto ban player on ban list
if (BetterGameSettings.UseBanPlayerList.GetBool())
if (GameState.IsInGame)
{
if (player != null)
var player = Utils.PlayerFromClientId(client.Id);
// Auto ban player on ban list
if (BetterGameSettings.UseBanPlayerList.GetBool())
{
if (TextFileHandler.CompareStringMatch(BetterDataManager.banPlayerListFile,
BAUPlugin.AllPlayerControls.Select(player => player.Data.FriendCode)
.Concat(BAUPlugin.AllPlayerControls.Select(player => player.GetHashPuid())).ToArray()))
if (player != null)
{
player.Kick(true, Translator.GetString("AntiCheat.BanPlayerListMessage"), bypassDataCheck: true);
if (TextFileHandler.CompareStringMatch(BetterDataManager.banPlayerListFile,
BAUPlugin.AllPlayerControls.Select(player => player.Data.FriendCode)
.Concat(BAUPlugin.AllPlayerControls.Select(player => player.GetHashPuid())).ToArray()))
{
player.Kick(true, Translator.GetString("AntiCheat.BanPlayerListMessage"), bypassDataCheck: true);
}
}
}
}
if (BetterGameSettings.UseBanNameList.GetBool())
{
if (TextFileHandler.CompareStringFilters(BetterDataManager.banNameListFile, [player.Data.PlayerName]))
if (BetterGameSettings.UseBanNameList.GetBool())
{
player?.Kick(true, Translator.GetString("AntiCheat.BanPlayerListMessage"), bypassDataCheck: true);
if (player != null)
{
if (TextFileHandler.CompareStringFilters(BetterDataManager.banNameListFile, [player.Data.PlayerName]))
{
player?.Kick(true, Translator.GetString("AntiCheat.BanPlayerListMessage"), bypassDataCheck: true);
}
}
}
}
}
@@ -68,6 +73,18 @@ internal static class OnPlayerLeftPatch
{
private static void Postfix(/*AmongUsClient __instance,*/ [HarmonyArgument(0)] ClientData data, [HarmonyArgument(1)] DisconnectReasons reason)
{
if (GameState.IsLobby)
{
var favColorId = (byte)BAUPlugin.FavoriteColor.Value;
if (BAUPlugin.FavoriteColor.Value >= 0)
{
if (PlayerControl.LocalPlayer.cosmetics.ColorId != favColorId && data.ColorId == favColorId)
{
PlayerControl.LocalPlayer.CmdCheckColor(favColorId);
}
}
}
MeetingHudPatch.UpdateHostIcon();
}
}
+53 -1
View File
@@ -16,7 +16,7 @@ internal static class PlayerTabPatch
[HarmonyPatch(nameof(PlayerTab.OnEnable))]
[HarmonyPrefix]
private static void OnEnable_Postfix(PlayerTab __instance)
private static void OnEnable_Prefix(PlayerTab __instance)
{
foreach (var button in presetButtons.ToArray())
{
@@ -59,6 +59,58 @@ internal static class PlayerTabPatch
}
}
private static readonly List<SpriteRenderer> _favoriteIcons = [];
[HarmonyPatch(nameof(PlayerTab.OnEnable))]
[HarmonyPostfix]
private static void OnEnable_Postfix(PlayerTab __instance)
{
_favoriteIcons.Clear();
for (int i = 0; i < __instance.ColorChips.Count; i++)
{
var index = i;
var colorChip = __instance.ColorChips[i];
colorChip.Button.OnClick = new();
colorChip.Button.OnClick.AddListener((Action)(() =>
{
if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
{
if (BAUPlugin.FavoriteColor.Value == index)
{
BAUPlugin.FavoriteColor.Value = -1;
}
else
{
BAUPlugin.FavoriteColor.Value = index;
}
UpdateFavorite();
return;
}
__instance.ClickEquip();
}));
var checkBox = colorChip.PlayerEquippedForeground.transform.Find("CheckMark").GetComponentInChildren<SpriteRenderer>();
var favoriteIcon = UnityEngine.Object.Instantiate(checkBox, colorChip.transform);
favoriteIcon.color = Color.yellow;
favoriteIcon.transform.localPosition -= new Vector3(0f, 0f, 15f);
_favoriteIcons.Add(favoriteIcon);
}
UpdateFavorite();
}
private static void UpdateFavorite()
{
for (int i = 0; i < _favoriteIcons.Count; i++)
{
SpriteRenderer? fav = _favoriteIcons[i];
fav.gameObject.SetActive(i == BAUPlugin.FavoriteColor.Value);
}
}
private static bool LoadPlayerOutfit(OutfitData data)
{
var player = PlayerControl.LocalPlayer;