mirror of
https://github.com/D1GQ/BetterAmongUs.git
synced 2026-10-19 15:51:52 +00:00
Add favorite color and fix null reference
This commit is contained in:
1 parent
5b8be42f55
commit
d2c90b9f52
5 files changed
+109
-19
No files matched your search
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user