From c15c7abf1d9c808604342049834a904798e3a714 Mon Sep 17 00:00:00 2001 From: Kyle Johnsen Date: Tue, 4 Jan 2022 00:16:43 -0500 Subject: [PATCH] fixed bug when master server leaves, ownership wasn't be transferred properly --- .../Assets/VelGameServer/NetworkManager.cs | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/TestVelGameServer/Assets/VelGameServer/NetworkManager.cs b/TestVelGameServer/Assets/VelGameServer/NetworkManager.cs index a02b498..64d83fd 100644 --- a/TestVelGameServer/Assets/VelGameServer/NetworkManager.cs +++ b/TestVelGameServer/Assets/VelGameServer/NetworkManager.cs @@ -93,7 +93,25 @@ public class NetworkManager : MonoBehaviour if (me.room != m.text) { + //we got a left message, kill it + //change ownership of all objects to + + foreach (KeyValuePair kvp in objects) + { + if (kvp.Value.owner == players[m.sender]) //the owner is the player that left + { + if (me.isLocal && me == masterPlayer) //I'm the local master player, so can take ownership immediately + { + me.takeOwnership(kvp.Key); + } + else if (players[m.sender] == masterPlayer) //the master player left, so everyone should set the owner null (we should get a new master shortly) + { + kvp.Value.owner = null; + } + } + } + Destroy(players[m.sender].gameObject); players.Remove(m.sender); } @@ -143,7 +161,10 @@ public class NetworkManager : MonoBehaviour foreach(KeyValuePair kvp in objects) { - kvp.Value.owner = masterPlayer; + if (kvp.Value.owner == null) + { + kvp.Value.owner = masterPlayer; + } } }