diff --git a/Reactor/Networking/Patches/ClientPatches.cs b/Reactor/Networking/Patches/ClientPatches.cs index d1a9160..10e9779 100644 --- a/Reactor/Networking/Patches/ClientPatches.cs +++ b/Reactor/Networking/Patches/ClientPatches.cs @@ -134,9 +134,13 @@ public static bool Prefix(InnerNetClient._CoSendSceneChange_d__32 __instance, re var innerNetClient = __instance.__4__this; - if (__instance.__1__state == 2) + // Check for the conditions when the scene change message should be sent + if (!innerNetClient.AmHost && + innerNetClient.connection.State == ConnectionState.Connected && + innerNetClient.ClientId >= 0) { - if (!innerNetClient.AmHost && innerNetClient.connection.State == ConnectionState.Connected) + var clientData = innerNetClient.FindClientById(innerNetClient.ClientId); + if (clientData != null) { var writer = MessageWriter.Get(SendOption.Reliable); writer.StartMessage(Tags.GameData); @@ -154,11 +158,15 @@ public static bool Prefix(InnerNetClient._CoSendSceneChange_d__32 __instance, re writer.EndMessage(); innerNetClient.SendOrDisconnect(writer); writer.Recycle(); - } - __instance.__1__state = -1; - __result = false; - return false; + // Create a new coroutine to let AmongUsClient handle scene changes too + innerNetClient.StartCoroutine(innerNetClient.CoOnPlayerChangedScene(clientData, __instance.sceneName)); + + // Cancel this coroutine + __instance.__1__state = -1; + __result = false; + return false; + } } return true;