Wait for the PlayerName before kicking for missing required mods

This is needed due to changes in 2024.6.18
This commit is contained in:
js6pak committed 2024-07-23 23:09:16 +02:00
1 parent f80b6a5330
commit 84837fd42c
1 file changed
+25 -6
+25 -6
View File
@@ -1,5 +1,6 @@
using System;
using AmongUs.Data;
using BepInEx.Unity.IL2CPP.Utils;
using HarmonyLib;
using Hazel;
using Il2CppInterop.Runtime;
@@ -8,6 +9,7 @@ using InnerNet;
using Reactor.Networking.Extensions;
using Reactor.Networking.Messages;
using UnityEngine;
using IEnumerator = System.Collections.IEnumerator;
namespace Reactor.Networking.Patches;
@@ -86,21 +88,38 @@ internal static class ClientPatches
{
if (reactorClientData == null && ModList.IsAnyModRequiredOnAllClients)
{
Warning("Kicking " + clientData.PlayerName + " for not having Reactor installed");
IEnumerator CoKick()
{
var startTime = DateTimeOffset.UtcNow;
string? playerName;
var chatText = clientData.PlayerName + " tried joining without Reactor installed";
do
{
yield return null;
if (DateTimeOffset.UtcNow - startTime > TimeSpan.FromSeconds(2))
{
playerName = "(unknown)";
break;
}
playerName = GameData.Instance.GetPlayerByClient(clientData)?.PlayerName;
} while (string.IsNullOrEmpty(playerName));
Warning("Kicking " + playerName + " for not having Reactor installed");
var chatText = playerName + " tried joining without Reactor installed";
if (DataManager.Settings.Multiplayer.ChatMode == QuickChatModes.FreeChatOrQuickChat)
PlayerControl.LocalPlayer.RpcSendChat(chatText);
else
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, chatText);
innerNetClient.KickPlayer(clientData.Id, false);
__result = false;
return false;
}
if (!Mod.Validate(reactorClientData?.Mods ?? Array.Empty<Mod>(), ModList.Current, out var reason))
innerNetClient.StartCoroutine(CoKick());
}
else if (!Mod.Validate(reactorClientData?.Mods ?? Array.Empty<Mod>(), ModList.Current, out var reason))
{
innerNetClient.KickWithReason(clientData.Id, reason);
__result = false;