From c6c60a7e07deb71e4deed512b393fe8e22bf61f3 Mon Sep 17 00:00:00 2001 From: devbeni Date: Sat, 13 Dec 2025 17:11:00 +0100 Subject: [PATCH] fix? --- Main.cs | 17 ++++++++++++----- Packets/Lobby/SaveTransferPacket.cs | 3 +++ RiptideSteamTransport/LobbyManager.cs | 3 +++ StateManagement/Observers/StateObserver.cs | 18 ++++++++++++++++++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/Main.cs b/Main.cs index 9cec6a3..34d0a9c 100644 --- a/Main.cs +++ b/Main.cs @@ -550,7 +550,12 @@ namespace KCM { public static bool Prefix(Player __instance) { - if (KCClient.client.IsConnected && __instance.gameObject.name.Contains("Client Player") && !LobbyManager.loadingSave) + var localPlayer = Player.inst; + if (KCClient.client.IsConnected && + __instance != null && + (localPlayer == null || __instance != localPlayer) && + __instance.gameObject != null && + __instance.gameObject.name.Contains("Client Player")) { try { @@ -1206,6 +1211,7 @@ namespace KCM if (KCServer.IsRunning) { Main.helper.Log("Trying to load multiplayer save"); + KCM.StateManagement.Observers.StateObserver.ClearAll(); LoadSave.LastLoadDirectory = path; path = path + "/" + filename; @@ -1453,11 +1459,12 @@ namespace KCM Main.helper.Log(e.Message); } - bool flag2 = building.GetComponent() != null && building.TeamID() == p.PlayerLandmassOwner.teamId; - Main.helper.Log("Set keep? " + flag2); - if (flag2) + var keep = building.GetComponent(); + bool shouldSetKeep = keep != null && p.keep == null; + Main.helper.Log("Set keep? " + shouldSetKeep); + if (shouldSetKeep) { - p.keep = building.GetComponent(); + p.keep = keep; Main.helper.Log(p.keep.ToString()); } diff --git a/Packets/Lobby/SaveTransferPacket.cs b/Packets/Lobby/SaveTransferPacket.cs index ec62433..dc595d0 100644 --- a/Packets/Lobby/SaveTransferPacket.cs +++ b/Packets/Lobby/SaveTransferPacket.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; +using KCM.StateManagement.Observers; using static KCM.Main; namespace KCM.Packets.Lobby @@ -41,6 +42,8 @@ namespace KCM.Packets.Lobby loadingSave = true; received = 0; + StateObserver.ClearAll(); + saveData = new byte[saveSize]; chunksReceived = new bool[totalChunks]; diff --git a/RiptideSteamTransport/LobbyManager.cs b/RiptideSteamTransport/LobbyManager.cs index 3dfb8ff..ca9ca72 100644 --- a/RiptideSteamTransport/LobbyManager.cs +++ b/RiptideSteamTransport/LobbyManager.cs @@ -1,6 +1,7 @@ using KCM; using KCM.Enums; using KCM.Packets.Handlers; +using KCM.StateManagement.Observers; using Steamworks; using UnityEngine; @@ -157,6 +158,8 @@ namespace Riptide.Demos.Steam.PlayerHosted if (KCClient.client.IsConnected) KCClient.client.Disconnect(); + StateObserver.ClearAll(); + Main.helper.Log("clear players"); Main.kCPlayers.Clear(); Main.clientSteamIds.Clear(); diff --git a/StateManagement/Observers/StateObserver.cs b/StateManagement/Observers/StateObserver.cs index c8881c3..87b7428 100644 --- a/StateManagement/Observers/StateObserver.cs +++ b/StateManagement/Observers/StateObserver.cs @@ -12,6 +12,24 @@ namespace KCM.StateManagement.Observers { public static Dictionary observers = new Dictionary(); + public static void ClearAll() + { + foreach (var observer in observers.Values) + { + try + { + var component = observer as Component; + if (component != null) + UnityEngine.Object.Destroy(component.gameObject); + } + catch + { + } + } + + observers.Clear(); + } + public static void RegisterObserver(T instance, string[] monitoredFields, EventHandler eventHandler = null, EventHandler sendUpdateHandler = null) { if (observers.ContainsKey(instance.GetHashCode()))