From e55827d9d01f49aa88febb6bd09e3883e4ab4f77 Mon Sep 17 00:00:00 2001 From: Marek Sorokin Date: Mon, 27 Oct 2025 12:50:17 +0100 Subject: [PATCH] online fix --- .../Networking/SteamWeaponNetworkBridge.cs | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/Game/Scripts/Networking/SteamWeaponNetworkBridge.cs b/Game/Scripts/Networking/SteamWeaponNetworkBridge.cs index 07ef4b3..a852b8c 100644 --- a/Game/Scripts/Networking/SteamWeaponNetworkBridge.cs +++ b/Game/Scripts/Networking/SteamWeaponNetworkBridge.cs @@ -37,16 +37,7 @@ namespace MegaKoop.Game.Networking return; } - if (networkManager == null) - { - networkManager = SteamCoopNetworkManager.Instance; - } - - if (networkManager != null) - { - networkManager.RegisterHandler(NetworkMessageType.ProjectileSpawn, HandleProjectileSpawnMessage); - isRegistered = true; - } + TryEnsureNetworkManager(); weaponController.ProjectileSpawned += OnProjectileSpawned; @@ -72,6 +63,11 @@ namespace MegaKoop.Game.Networking } } + private void Update() + { + TryEnsureNetworkManager(); + } + private bool IsAuthoritative() { if (networkManager == null) @@ -82,6 +78,26 @@ namespace MegaKoop.Game.Networking return networkManager.IsHost; } + private void TryEnsureNetworkManager() + { + if (networkManager == null) + { + networkManager = SteamCoopNetworkManager.Instance; + } + + if (networkManager == null) + { + return; + } + + if (!isRegistered) + { + networkManager.RegisterHandler(NetworkMessageType.ProjectileSpawn, HandleProjectileSpawnMessage); + isRegistered = true; + ApplyLocalAuthoritySetting(); + } + } + private void OnProjectileSpawned(WeaponController.ProjectileSpawnEvent spawnEvent) { if (!IsAuthoritative()) @@ -89,6 +105,8 @@ namespace MegaKoop.Game.Networking return; } + networkManager ??= SteamCoopNetworkManager.Instance; + if (networkManager == null) { return; @@ -96,7 +114,7 @@ namespace MegaKoop.Game.Networking var message = new ProjectileSpawnMessage(identity.NetworkId, spawnEvent.WeaponIndex, spawnEvent.Position, spawnEvent.Direction, spawnEvent.Speed, spawnEvent.Lifetime, spawnEvent.Damage); byte[] payload = ProjectileSpawnMessage.Serialize(message); - networkManager.SendToAll(NetworkMessageType.ProjectileSpawn, payload, EP2PSend.k_EP2PSendUnreliableNoDelay); + networkManager.SendToAll(NetworkMessageType.ProjectileSpawn, payload, EP2PSend.k_EP2PSendReliable); } private void HandleProjectileSpawnMessage(NetworkMessage message)