diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerGameData.cs b/src/Impostor.Server/Net/Inner/Objects/InnerGameData.cs index b8b7a821..7c210fb2 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerGameData.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerGameData.cs @@ -31,5 +31,18 @@ namespace Impostor.Server.Net.Inner.Objects { _allPlayers.TryRemove(playerId, out _); } + + internal byte GetNextAvailablePlayerId() + { + for (byte i = 0; i < 255; i++) + { + if (!Players.ContainsKey(i)) + { + return i; + } + } + + return 255; + } } } diff --git a/src/Impostor.Server/Net/State/Game.Data.cs b/src/Impostor.Server/Net/State/Game.Data.cs index 0619c931..73cf73fa 100644 --- a/src/Impostor.Server/Net/State/Game.Data.cs +++ b/src/Impostor.Server/Net/State/Game.Data.cs @@ -270,7 +270,7 @@ namespace Impostor.Server.Net.State playerInfo.NetId = _nextNetId++; playerInfo.OwnerId = -4; playerInfo.ClientId = clientId; - playerInfo.PlayerId = 0; // TODO + playerInfo.PlayerId = GameNet.GameData.GetNextAvailablePlayerId(); if (!AddNetObject(playerInfo)) { @@ -278,6 +278,7 @@ namespace Impostor.Server.Net.State playerInfo.NetId = uint.MaxValue; break; } + _logger.LogTrace("Spawning PlayerInfo (netId {Netid})", playerInfo.NetId); await OnSpawnAsync(sender, playerInfo); var writer = MessageWriter.Get(MessageType.Reliable);