mirror of
https://github.com/D1GQ/BetterAmongUs.git
synced 2026-10-20 01:46:19 +00:00
Add custom names
This commit is contained in:
1 parent
01c122edfd
commit
86520d7f2b
23 files changed
+319
-181
No files matched your search
@@ -44,6 +44,8 @@ internal class ExtendedPlayerControl : MonoBehaviour, IMonoExtension<PlayerContr
|
||||
{
|
||||
MonoExtensionManager.UnregisterExtension(this);
|
||||
}
|
||||
|
||||
internal readonly Dictionary<NetworkedPlayerInfo, string> NameSetLastFor = [];
|
||||
}
|
||||
|
||||
internal static class PlayerControlExtension
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using AmongUs.GameOptions;
|
||||
using BetterAmongUs.Data;
|
||||
using BetterAmongUs.Modules;
|
||||
using BetterAmongUs.Network;
|
||||
using BetterAmongUs.Patches.Gameplay.Player;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Settings;
|
||||
using InnerNet;
|
||||
@@ -129,13 +130,7 @@ static class PlayerControlHelper
|
||||
}
|
||||
}
|
||||
}
|
||||
// RPCs
|
||||
// Set name for Target
|
||||
internal static void RpcSetNamePrivate(this PlayerControl player, string name, PlayerControl target)
|
||||
{
|
||||
if (player == null || target == null) return;
|
||||
RPC.RpcSetNamePrivate(player, name, target);
|
||||
}
|
||||
|
||||
// Exile player
|
||||
internal static void RpcExile(this PlayerControl player)
|
||||
{
|
||||
@@ -197,11 +192,12 @@ static class PlayerControlHelper
|
||||
return false;
|
||||
}
|
||||
// Get hex color for team
|
||||
internal static string GetTeamHexColor(this PlayerControl player)
|
||||
internal static string GetTeamHexColor(this PlayerControl player) => player.Data.GetTeamHexColor();
|
||||
internal static string GetTeamHexColor(this NetworkedPlayerInfo data)
|
||||
{
|
||||
if (player == null) return "#ffffff";
|
||||
if (data == null) return "#ffffff";
|
||||
|
||||
if (player.IsImpostorTeam())
|
||||
if (data.IsImpostorTeam())
|
||||
{
|
||||
return "#f00202";
|
||||
}
|
||||
@@ -210,12 +206,14 @@ static class PlayerControlHelper
|
||||
return "#8cffff";
|
||||
}
|
||||
}
|
||||
|
||||
// Check if player is role type
|
||||
internal static bool Is(this PlayerControl player, RoleTypes role) => player?.Data?.RoleType == role;
|
||||
// Check if player is Ghost role type
|
||||
internal static bool IsGhostRole(this PlayerControl player) => player?.Data?.RoleType is RoleTypes.GuardianAngel;
|
||||
// Check if player is on imposter team
|
||||
internal static bool IsImpostorTeam(this PlayerControl player) => player?.Data != null && player.Data.RoleType is RoleTypes.Impostor or RoleTypes.ImpostorGhost or RoleTypes.Shapeshifter or RoleTypes.Phantom or RoleTypes.Viper;
|
||||
internal static bool IsImpostorTeam(this PlayerControl player) => player?.Data?.IsImpostorTeam() == true;
|
||||
internal static bool IsImpostorTeam(this NetworkedPlayerInfo data) => data?.RoleType is RoleTypes.Impostor or RoleTypes.ImpostorGhost or RoleTypes.Shapeshifter or RoleTypes.Phantom or RoleTypes.Viper;
|
||||
// Check if player is a imposter teammate
|
||||
internal static bool IsImpostorTeammate(this PlayerControl player) =>
|
||||
player != null && PlayerControl.LocalPlayer != null &&
|
||||
|
||||
@@ -25,6 +25,21 @@ internal static class Utils
|
||||
return text;
|
||||
}
|
||||
|
||||
internal static string FormatInfo(StringBuilder source)
|
||||
{
|
||||
if (source.Length == 0) return string.Empty;
|
||||
|
||||
var sb = new StringBuilder();
|
||||
foreach (var part in source.ToString().Split("+++"))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(Utils.RemoveHtmlText(part)))
|
||||
{
|
||||
sb.Append(part).Append(" - ");
|
||||
}
|
||||
}
|
||||
return sb.ToString().TrimEnd(" - ".ToCharArray());
|
||||
}
|
||||
|
||||
internal static bool IsInternetAvailable()
|
||||
{
|
||||
if (Application.internetReachability == NetworkReachability.NotReachable)
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
using AmongUs.GameOptions;
|
||||
using BepInEx.Unity.IL2CPP.Utils;
|
||||
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Modules;
|
||||
using BetterAmongUs.Network;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Settings;
|
||||
using System.Collections;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BetterAmongUs.Managers;
|
||||
|
||||
internal static class HostManager
|
||||
{
|
||||
internal enum SyncType
|
||||
{
|
||||
Reset,
|
||||
Gameplay,
|
||||
Meeting
|
||||
}
|
||||
|
||||
private static Coroutine? syncCoroutine = null;
|
||||
|
||||
internal static void SyncNames(SyncType syncType, float sDelay, int repeat = 1)
|
||||
{
|
||||
if (!GameState.IsHost || !BetterGameSettings.ShowRoleForClients.GetValue()) return;
|
||||
|
||||
if (syncCoroutine != null && GameData.Instance != null)
|
||||
{
|
||||
GameData.Instance.StopCoroutine(syncCoroutine);
|
||||
syncCoroutine = null;
|
||||
}
|
||||
|
||||
if (GameData.Instance != null)
|
||||
{
|
||||
syncCoroutine = GameData.Instance.StartCoroutine(CoSyncNamesDelay(syncType, sDelay, repeat));
|
||||
}
|
||||
}
|
||||
|
||||
private static IEnumerator CoSyncNamesDelay(SyncType syncType, float sDelay, int repeat)
|
||||
{
|
||||
for (int i = 0; i < repeat; i++)
|
||||
{
|
||||
yield return new WaitForSeconds(sDelay);
|
||||
SyncNames(syncType);
|
||||
}
|
||||
|
||||
syncCoroutine = null;
|
||||
}
|
||||
|
||||
internal static void SyncNames(SyncType syncType)
|
||||
{
|
||||
if (!GameState.IsHost || !BetterGameSettings.ShowRoleForClients.GetValue()) return;
|
||||
|
||||
StringBuilder sb = new();
|
||||
|
||||
foreach (var player in BAUPlugin.AllPlayerControls)
|
||||
{
|
||||
if (syncType is SyncType.Reset)
|
||||
{
|
||||
SyncResetName(player);
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach (var target in BAUPlugin.AllPlayerControls)
|
||||
{
|
||||
if (target.IsLocalPlayer() || target.BetterData().IsVerifiedBetterUser) continue;
|
||||
|
||||
switch (syncType)
|
||||
{
|
||||
case SyncType.Gameplay:
|
||||
case SyncType.Meeting:
|
||||
var shapeshift = player.shapeshiftTargetPlayerId == -1 ? player.Data : Utils.PlayerDataFromPlayerId(player.shapeshiftTargetPlayerId);
|
||||
SyncNamesForGameplay(shapeshift, target, sb, player.Data, syncType == SyncType.Meeting);
|
||||
break;
|
||||
}
|
||||
|
||||
var newName = sb.ToString();
|
||||
sb.Clear();
|
||||
|
||||
if (player.BetterPlayerControl().NameSetLastFor.TryGetValue(target.Data, out var lastName) && lastName == newName)
|
||||
continue;
|
||||
|
||||
player.BetterPlayerControl().NameSetLastFor[target.Data] = newName;
|
||||
|
||||
RPC.RpcSetNameForTarget(player, newName, target);
|
||||
Logger.Warning($"Setting {player.BetterData().RealName} name to {newName}, for {target.BetterData().RealName}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void SyncResetName(PlayerControl player)
|
||||
{
|
||||
player.RpcSetName(player.BetterData().RealName);
|
||||
}
|
||||
|
||||
private static void SyncNamesForGameplay(NetworkedPlayerInfo playerData, PlayerControl target, StringBuilder sb, NetworkedPlayerInfo playerNonShapeshift, bool isMeeting)
|
||||
{
|
||||
bool hasInfo = false;
|
||||
|
||||
if ((playerNonShapeshift.IsImpostorTeam() && target.IsImpostorTeam())
|
||||
|| playerNonShapeshift.PlayerId == target.Data.PlayerId // Self
|
||||
|| (!target.IsAlive() && !target.Is(RoleTypes.GuardianAngel)))
|
||||
{
|
||||
string roleInfo = $"<color={playerNonShapeshift.GetTeamHexColor()}>{playerNonShapeshift.RoleType.GetRoleName()}</color>";
|
||||
|
||||
if (!playerNonShapeshift.IsImpostorTeam() && playerNonShapeshift.Tasks.Count > 0)
|
||||
{
|
||||
int completedTasks = playerNonShapeshift.Tasks.ToArray().Count(task => task.Complete);
|
||||
roleInfo += $" <color=#cbcbcb>({completedTasks}/{playerNonShapeshift.Tasks.Count})</color>";
|
||||
}
|
||||
|
||||
sb.Append(roleInfo.Size(60f));
|
||||
hasInfo = true;
|
||||
}
|
||||
|
||||
if (hasInfo)
|
||||
sb.Append('\n');
|
||||
|
||||
sb.Append($"{playerData.BetterData().RealName}");
|
||||
|
||||
if (hasInfo && !isMeeting)
|
||||
sb.Append("\n ");
|
||||
}
|
||||
|
||||
internal static void SetCustomEjectMessage(string msg)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Items.Structs;
|
||||
using BetterAmongUs.Modules;
|
||||
using BetterAmongUs.Modules.AntiCheat;
|
||||
using BetterAmongUs.Network;
|
||||
using HarmonyLib;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Modules;
|
||||
using BetterAmongUs.Modules;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Settings;
|
||||
using HarmonyLib;
|
||||
|
||||
@@ -8,38 +7,6 @@ namespace BetterAmongUs.Managers;
|
||||
[HarmonyPatch]
|
||||
internal static class PrivateOnlyLobbyManager
|
||||
{
|
||||
private static void SyncNamesAsHost()
|
||||
{
|
||||
if (!GameState.IsHost || !GameState.IsPrivateOnlyLobby || !GameState.InGame) return;
|
||||
|
||||
foreach (var target in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (target.IsHost() || target.BetterData().IsBetterUser) continue;
|
||||
|
||||
foreach (var player in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (GameState.IsMeeting)
|
||||
{
|
||||
SetNameMeeting(player, target);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetNameGameplay(player, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void SetNameGameplay(PlayerControl player, PlayerControl target)
|
||||
{
|
||||
player.RpcSetNamePrivate("", target);
|
||||
}
|
||||
|
||||
private static void SetNameMeeting(PlayerControl player, PlayerControl target)
|
||||
{
|
||||
player.RpcSetNamePrivate("", target);
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(PlayerControl))]
|
||||
[HarmonyPatch(nameof(PlayerControl.Die))]
|
||||
[HarmonyPostfix]
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Items.Attributes;
|
||||
using BetterAmongUs.Managers;
|
||||
using BetterAmongUs.Network;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Settings;
|
||||
using HarmonyLib;
|
||||
using Hazel;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Items.Attributes;
|
||||
using BetterAmongUs.Network;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
using UnityEngine;
|
||||
|
||||
@@ -2,6 +2,7 @@ using BetterAmongUs.Data;
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Items.Attributes;
|
||||
using BetterAmongUs.Managers;
|
||||
using BetterAmongUs.Network;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Settings;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
|
||||
@@ -2,6 +2,7 @@ using BetterAmongUs.Data;
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Items.Attributes;
|
||||
using BetterAmongUs.Managers;
|
||||
using BetterAmongUs.Network;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Settings;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
|
||||
@@ -2,6 +2,7 @@ using BetterAmongUs.Data;
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Items.Attributes;
|
||||
using BetterAmongUs.Managers;
|
||||
using BetterAmongUs.Network;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Settings;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
|
||||
@@ -2,6 +2,7 @@ using BetterAmongUs.Data;
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Items.Attributes;
|
||||
using BetterAmongUs.Managers;
|
||||
using BetterAmongUs.Network;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Settings;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using BetterAmongUs.Managers;
|
||||
using BetterAmongUs.Network;
|
||||
using BetterAmongUs.Patches.Gameplay.UI;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using BetterAmongUs.Managers;
|
||||
using BetterAmongUs.Network;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ using BetterAmongUs.Data;
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Items.Attributes;
|
||||
using BetterAmongUs.Managers;
|
||||
using BetterAmongUs.Network;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Settings;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using BepInEx.Unity.IL2CPP.Utils;
|
||||
using BetterAmongUs.Data;
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Network;
|
||||
using Hazel;
|
||||
using Il2CppInterop.Runtime.Attributes;
|
||||
using System.Collections;
|
||||
|
||||
@@ -121,12 +121,12 @@ internal class PlayerInfoDisplay : MonoBehaviour
|
||||
else
|
||||
{
|
||||
var targetData = Utils.PlayerDataFromPlayerId(_player.shapeshiftTargetPlayerId);
|
||||
if (targetData != null) _player.RawSetName(targetData.BetterData().RealName);
|
||||
if (targetData != null) _player.RawSetName(targetData.BetterData()?.RealName ?? targetData.PlayerName);
|
||||
}
|
||||
|
||||
_topText?.SetText(FormatInfo(sbTagTop));
|
||||
_bottomText?.SetText(FormatInfo(sbTagBottom));
|
||||
_infoText?.SetText(FormatInfo(sbTag));
|
||||
_topText?.SetText(Utils.FormatInfo(sbTagTop));
|
||||
_bottomText?.SetText(Utils.FormatInfo(sbTagBottom));
|
||||
_infoText?.SetText(Utils.FormatInfo(sbTag));
|
||||
}
|
||||
|
||||
private string ValidateFriendCode(out string color)
|
||||
@@ -263,19 +263,4 @@ internal class PlayerInfoDisplay : MonoBehaviour
|
||||
text.transform.localPosition = new Vector3(0f, -1.5f, 0.4999f);
|
||||
}
|
||||
}
|
||||
|
||||
private static string FormatInfo(StringBuilder source)
|
||||
{
|
||||
if (source.Length == 0) return string.Empty;
|
||||
|
||||
var sb = new StringBuilder();
|
||||
foreach (var part in source.ToString().Split("+++"))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(Utils.RemoveHtmlText(part)))
|
||||
{
|
||||
sb.Append(part).Append(" - ");
|
||||
}
|
||||
}
|
||||
return sb.ToString().TrimEnd(" - ".ToCharArray());
|
||||
}
|
||||
}
|
||||
+110
-109
@@ -1,136 +1,137 @@
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Modules;
|
||||
using Hazel;
|
||||
|
||||
namespace BetterAmongUs.Modules;
|
||||
namespace BetterAmongUs.Network;
|
||||
|
||||
enum CustomRPC : int
|
||||
{
|
||||
// Cheat RPC's
|
||||
Sicko = 420, // Results in 164
|
||||
AUM = 42069, // Results in 85
|
||||
AUMChat = 101,
|
||||
KillNetwork = 250,
|
||||
KillNetworkChat = 119,
|
||||
|
||||
// TOHE
|
||||
AUMChat = 101,
|
||||
KillNetwork = 250,
|
||||
KillNetworkChat = 119,
|
||||
|
||||
// TOHE
|
||||
VersionCheck = 80,
|
||||
RequestRetryVersionCheck = 81,
|
||||
|
||||
//Better Among Us
|
||||
LegacyBetterCheck = 150, // Unused
|
||||
SendSecretToPlayer,
|
||||
RequestRetryVersionCheck = 81,
|
||||
|
||||
//Better Among Us
|
||||
LegacyBetterCheck = 150, // Unused
|
||||
SendSecretToPlayer,
|
||||
CheckSecretHashFromPlayer,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
enum HandleGameDataTags : byte
|
||||
{
|
||||
NetObjectDeserialize = 1,
|
||||
NetObjectHandleRPC = 2,
|
||||
NetObjectSpawn = 4,
|
||||
NetObjectDespawn = 5,
|
||||
{
|
||||
NetObjectDeserialize = 1,
|
||||
NetObjectHandleRPC = 2,
|
||||
NetObjectSpawn = 4,
|
||||
NetObjectDespawn = 5,
|
||||
ClientDataReady = 7,
|
||||
}
|
||||
|
||||
internal static class RPC
|
||||
{
|
||||
internal static void RpcSetNamePrivate(PlayerControl player, string name, PlayerControl target)
|
||||
{
|
||||
if (!GameState.IsHost || !GameState.IsVanillaServer)
|
||||
{
|
||||
return;
|
||||
}
|
||||
{
|
||||
internal static void RpcSetNameForTarget(PlayerControl player, string name, PlayerControl target)
|
||||
{
|
||||
if (!GameState.IsHost)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(player.NetId, (byte)RpcCalls.SetName, SendOption.Reliable, target.GetClientId());
|
||||
writer.Write(player.Data.NetId);
|
||||
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(player.NetId, (byte)RpcCalls.SetName, SendOption.Reliable, target.GetClientId());
|
||||
writer.Write(player.Data.NetId);
|
||||
writer.Write(name);
|
||||
AmongUsClient.Instance.FinishRpcImmediately(writer);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
internal static void RpcExile(PlayerControl player)
|
||||
{
|
||||
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(player.NetId, (byte)RpcCalls.Exiled, SendOption.Reliable, -1);
|
||||
AmongUsClient.Instance.FinishRpcImmediately(writer);
|
||||
|
||||
AmongUsClient.Instance.FinishRpcImmediately(writer);
|
||||
|
||||
player.Exiled();
|
||||
}
|
||||
|
||||
internal static void HandleCustomRPC(PlayerControl player, byte callId, MessageReader oldReader)
|
||||
{
|
||||
if (player == null || player.IsLocalPlayer() || player.Data == null || Enum.IsDefined(typeof(RpcCalls), callId)) return;
|
||||
|
||||
if (Enum.IsDefined(typeof(CustomRPC), (int)unchecked(callId)))
|
||||
{
|
||||
MessageReader reader = MessageReader.Get(oldReader);
|
||||
|
||||
switch (callId)
|
||||
{
|
||||
/*
|
||||
case (byte)CustomRPC.LegacyBetterCheck:
|
||||
{
|
||||
var SetBetterUser = reader.ReadBoolean();
|
||||
var Signature = reader.ReadString();
|
||||
var Version = reader.ReadString();
|
||||
var IsVerified = Signature == Main.ModSignature.ToString();
|
||||
|
||||
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;
|
||||
|
||||
if (IsVerified)
|
||||
{
|
||||
player.BetterData().IsVerifiedBetterUser = true;
|
||||
}
|
||||
|
||||
Logger.Log($"Received better user RPC from: {player.Data.PlayerName}:{player.Data.FriendCode}:{Utils.GetHashPuid(player)} - " +
|
||||
$"BetterUser: {SetBetterUser} - " +
|
||||
$"Version: {Version} - " +
|
||||
$"Verified: {IsVerified} - " +
|
||||
$"Signature: {Signature}");
|
||||
|
||||
Utils.DirtyAllNames();
|
||||
}
|
||||
break;
|
||||
*/
|
||||
case (byte)CustomRPC.SendSecretToPlayer:
|
||||
{
|
||||
player.BetterData().HandshakeHandler.HandleSecretFromSender(reader);
|
||||
}
|
||||
break;
|
||||
case (byte)CustomRPC.CheckSecretHashFromPlayer:
|
||||
{
|
||||
player.BetterData().HandshakeHandler.HandleSecretHashFromPlayer(reader);
|
||||
}
|
||||
break;
|
||||
/*
|
||||
case (byte)CustomRPC.VersionCheck or (byte)CustomRPC.RequestRetryVersionCheck:
|
||||
if (player.IsHost())
|
||||
{
|
||||
player.BetterData().IsTOHEHost = true;
|
||||
}
|
||||
break;
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal static void HandleCustomRPC(PlayerControl player, byte callId, MessageReader oldReader)
|
||||
{
|
||||
if (player == null || player.IsLocalPlayer() || player.Data == null || Enum.IsDefined(typeof(RpcCalls), callId)) return;
|
||||
|
||||
if (Enum.IsDefined(typeof(CustomRPC), (int)unchecked(callId)))
|
||||
{
|
||||
MessageReader reader = MessageReader.Get(oldReader);
|
||||
|
||||
switch (callId)
|
||||
{
|
||||
/*
|
||||
case (byte)CustomRPC.LegacyBetterCheck:
|
||||
{
|
||||
var SetBetterUser = reader.ReadBoolean();
|
||||
var Signature = reader.ReadString();
|
||||
var Version = reader.ReadString();
|
||||
var IsVerified = Signature == Main.ModSignature.ToString();
|
||||
|
||||
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;
|
||||
|
||||
if (IsVerified)
|
||||
{
|
||||
player.BetterData().IsVerifiedBetterUser = true;
|
||||
}
|
||||
|
||||
Logger.Log($"Received better user RPC from: {player.Data.PlayerName}:{player.Data.FriendCode}:{Utils.GetHashPuid(player)} - " +
|
||||
$"BetterUser: {SetBetterUser} - " +
|
||||
$"Version: {Version} - " +
|
||||
$"Verified: {IsVerified} - " +
|
||||
$"Signature: {Signature}");
|
||||
|
||||
Utils.DirtyAllNames();
|
||||
}
|
||||
break;
|
||||
*/
|
||||
case (byte)CustomRPC.SendSecretToPlayer:
|
||||
{
|
||||
player.BetterData().HandshakeHandler.HandleSecretFromSender(reader);
|
||||
}
|
||||
break;
|
||||
case (byte)CustomRPC.CheckSecretHashFromPlayer:
|
||||
{
|
||||
player.BetterData().HandshakeHandler.HandleSecretHashFromPlayer(reader);
|
||||
}
|
||||
break;
|
||||
/*
|
||||
case (byte)CustomRPC.VersionCheck or (byte)CustomRPC.RequestRetryVersionCheck:
|
||||
if (player.IsHost())
|
||||
{
|
||||
player.BetterData().IsTOHEHost = true;
|
||||
}
|
||||
break;
|
||||
*/
|
||||
}
|
||||
}
|
||||
else if (!Enum.IsDefined(typeof(CustomRPC), (int)unchecked(callId)))
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!GameState.IsHost && !GameState.IsTOHEHostLobby)
|
||||
{
|
||||
if (player.IsHost())
|
||||
{
|
||||
var Icon = Translator.GetString("BAUMark");
|
||||
var BAU = $"<color=#278720>{Icon}</color><color=#0ed400><b>{Translator.GetString("BAU")}</b></color><color=#278720>{Icon}</color>";
|
||||
Utils.DisconnectSelf(string.Format(Translator.GetString("ModdedLobbyMsg"), BAU));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!GameState.IsHost && !GameState.IsTOHEHostLobby)
|
||||
{
|
||||
if (player.IsHost())
|
||||
{
|
||||
var Icon = Translator.GetString("BAUMark");
|
||||
var BAU = $"<color=#278720>{Icon}</color><color=#0ed400><b>{Translator.GetString("BAU")}</b></color><color=#278720>{Icon}</color>";
|
||||
Utils.DisconnectSelf(string.Format(Translator.GetString("ModdedLobbyMsg"), BAU));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Managers;
|
||||
using BetterAmongUs.Modules;
|
||||
using HarmonyLib;
|
||||
using System.Text;
|
||||
@@ -17,13 +18,7 @@ internal static class GameManagersPatch
|
||||
[HarmonyPostfix]
|
||||
private static void EndGame_Postfix(/*GameManager __instance*/)
|
||||
{
|
||||
if (GameState.IsHost)
|
||||
{
|
||||
foreach (PlayerControl player in BAUPlugin.AllPlayerControls)
|
||||
{
|
||||
player.RpcSetName(player.Data.PlayerName);
|
||||
}
|
||||
}
|
||||
HostManager.SyncNames(HostManager.SyncType.Reset);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Items.OptionItems;
|
||||
using BetterAmongUs.Managers;
|
||||
using HarmonyLib;
|
||||
|
||||
namespace BetterAmongUs.Patches.Gameplay.Player;
|
||||
@@ -32,6 +33,8 @@ internal static class PlayerControlPatch
|
||||
Logger.LogPrivate($"{__instance.Data.PlayerName} Has killed {target.Data.PlayerName} as {__instance.Data.RoleType.GetRoleName()}", "EventLog");
|
||||
|
||||
__instance.BetterData().RoleInfo.Kills += 1;
|
||||
|
||||
HostManager.SyncNames(HostManager.SyncType.Gameplay);
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(PlayerControl.Shapeshift))]
|
||||
@@ -44,6 +47,22 @@ internal static class PlayerControlPatch
|
||||
Logger.LogPrivate($"{__instance.Data.PlayerName} Has Shapeshifted into {target.Data.PlayerName}, did animate: {animate}", "EventLog");
|
||||
else
|
||||
Logger.LogPrivate($"{__instance.Data.PlayerName} Has Un-Shapeshifted, did animate: {animate}", "EventLog");
|
||||
|
||||
HostManager.SyncNames(HostManager.SyncType.Gameplay, 0.2f, 30);
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(PlayerControl.CompleteTask))]
|
||||
[HarmonyPostfix]
|
||||
private static void CompleteTask_Postfix(PlayerControl __instance)
|
||||
{
|
||||
HostManager.SyncNames(HostManager.SyncType.Gameplay);
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(PlayerControl.StartMeeting))]
|
||||
[HarmonyPrefix]
|
||||
private static void StartMeeting_Prefix(PlayerControl __instance)
|
||||
{
|
||||
HostManager.SyncNames(HostManager.SyncType.Meeting);
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(PlayerControl.SetRoleInvisibility))]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using BetterAmongUs.Helpers;
|
||||
using BetterAmongUs.Managers;
|
||||
using BetterAmongUs.Modules;
|
||||
using BetterAmongUs.Mono;
|
||||
using BetterAmongUs.Patches.Gameplay.UI.Chat;
|
||||
@@ -45,4 +46,11 @@ internal static class MeetingHudPatch
|
||||
ChatPatch.ClearPlayerChats();
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(MeetingHud.SetMasksEnabled))]
|
||||
[HarmonyPostfix]
|
||||
private static void SetMasksEnabled_Postfix(MeetingHud __instance)
|
||||
{
|
||||
HostManager.SyncNames(HostManager.SyncType.Reset);
|
||||
}
|
||||
}
|
||||
@@ -64,7 +64,7 @@ internal static class GameSettingMenuPatch
|
||||
BetterGameSettings.UseBanWordList = OptionCheckboxItem.Create(500, BetterSettingsTab, "BetterSetting.Setting.UseBanWordList", true);
|
||||
BetterGameSettings.UseBanWordListOnlyLobby = OptionCheckboxItem.Create(1400, BetterSettingsTab, "BetterSetting.Setting.UseBanWordListOnlyLobby", true, BetterGameSettings.UseBanWordList);
|
||||
OptionDividerItem.Create(BetterSettingsTab);
|
||||
BetterGameSettings.ShowRoleForClients = OptionCheckboxItem.Create(1700, BetterSettingsTab, "BetterSetting.Setting.ShowRoleForClient", false);
|
||||
BetterGameSettings.ShowRoleForClients = OptionCheckboxItem.Create(1700, BetterSettingsTab, "BetterSetting.Setting.ShowRoleForClients", false);
|
||||
OptionDividerItem.Create(BetterSettingsTab);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,13 @@ internal static class HudManagerPatch
|
||||
|
||||
private static bool HasBeenWelcomed = false;
|
||||
|
||||
[HarmonyPatch(nameof(HudManager.CoShowIntro))]
|
||||
[HarmonyPostfix]
|
||||
private static void CoShowIntro_Postfix(HudManager __instance)
|
||||
{
|
||||
HostManager.SyncNames(HostManager.SyncType.Gameplay, 0.25f, 20);
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(HudManager.Start))]
|
||||
[HarmonyPostfix]
|
||||
private static void Start_Postfix(HudManager __instance)
|
||||
|
||||
Reference in new issue
Block a user