fixed bug when master server leaves, ownership wasn't be transferred properly
parent
775bc52e3e
commit
c15c7abf1d
|
|
@ -93,7 +93,25 @@ public class NetworkManager : MonoBehaviour
|
||||||
|
|
||||||
if (me.room != m.text)
|
if (me.room != m.text)
|
||||||
{
|
{
|
||||||
|
|
||||||
//we got a left message, kill it
|
//we got a left message, kill it
|
||||||
|
//change ownership of all objects to
|
||||||
|
|
||||||
|
foreach (KeyValuePair<string, NetworkObject> 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);
|
Destroy(players[m.sender].gameObject);
|
||||||
players.Remove(m.sender);
|
players.Remove(m.sender);
|
||||||
}
|
}
|
||||||
|
|
@ -142,9 +160,12 @@ public class NetworkManager : MonoBehaviour
|
||||||
//master player should take over any objects that do not have an owner
|
//master player should take over any objects that do not have an owner
|
||||||
|
|
||||||
foreach(KeyValuePair<string,NetworkObject> kvp in objects)
|
foreach(KeyValuePair<string,NetworkObject> kvp in objects)
|
||||||
|
{
|
||||||
|
if (kvp.Value.owner == null)
|
||||||
{
|
{
|
||||||
kvp.Value.owner = masterPlayer;
|
kvp.Value.owner = masterPlayer;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue