using BetterAmongUs.Helpers;
using Hazel;
namespace BetterAmongUs.Modules;
enum CustomRPC : int
{
// Cheat RPC's
Sicko = 420, // Results in 164
AUM = 42069, // Results in 85
AUMChat = 101,
KillNetwork = 250,
KillNetworkChat = 119,
// TOHE
VersionCheck = 80,
RequestRetryVersionCheck = 81,
//Better Among Us
LegacyBetterCheck = 150, // Unused
SendSecretToPlayer,
CheckSecretHashFromPlayer,
}
enum HandleGameDataTags : byte
{
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;
}
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);
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;
*/
}
}
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 = $"{Icon}{Translator.GetString("BAU")}{Icon}";
Utils.DisconnectSelf(string.Format(Translator.GetString("ModdedLobbyMsg"), BAU));
}
}
}
catch { }
}
}
}