Clean up owned playerinfo's when disconnecting

This commit is contained in:
miniduikboot committed 2024-06-20 22:26:16 +02:00
1 parent 01eb7bb375
commit cceecb0c36
2 files changed
+31

No files matched your search

@@ -123,5 +123,15 @@ namespace Impostor.Server.Net.State
message.EndMessage();
message.EndMessage();
}
private void WriteObjectDespawn(IMessageWriter message, InnerNetObject obj)
{
message.StartMessage(MessageFlags.GameData);
Code.Serialize(message);
message.StartMessage(GameDataTag.DespawnFlag);
message.WritePacked(obj.NetId);
message.EndMessage();
message.EndMessage();
}
}
}
@@ -85,6 +85,27 @@ namespace Impostor.Server.Net.State
}
});
// Clean up the PlayerInfo if we own it
foreach (var playerInfo in GameNet.GameData.Players.Values)
{
if (playerInfo.ClientId == playerId)
{
if (playerInfo.OwnerId == ServerOwned)
{
_logger.LogInformation("Destroying PlayerInfo {nid}", playerInfo.NetId);
GameNet.GameData.RemovePlayer(playerInfo.PlayerId);
RemoveNetObject(playerInfo);
var writer = MessageWriter.Get(MessageType.Reliable);
WriteObjectDespawn(writer, playerInfo);
await SendToAllAsync(writer);
}
break;
}
}
return true;
}