public void Disconnect(uint playerID, ChunkMPlayer player) { Race race = GetRace(playerID); if (race != null) { race.RemovePlayer(playerID, $"Player #{playerID} disconnected."); } }
public void Move(uint playerID, int index, GhostNetFrame frame = null) { Logger.Log(LogLevel.Verbose, "ghostnet-race", $"Moving player {playerID} to index {index}"); GhostNetConnection con = Manager.Server.Connections[(int)playerID]; ChunkMPlayer playerCached; if (con == null || !Manager.Server.PlayerMap.TryGetValue(playerID, out playerCached) || playerCached == null) { return; } Indices[playerID] = index; if (index == -1 && WaitingForStart.Contains(playerID) && string.IsNullOrEmpty(playerCached.SID)) { WaitingForStart.Remove(playerID); return; } ChunkMPlayer player = new ChunkMPlayer { Name = playerCached.Name, SID = index == -1 ? "" : Areas[index].Item1, Mode = index == -1 ? AreaMode.Normal : Areas[index].Item2, Level = "" }; if (frame == null) { con.SendManagement(new GhostNetFrame { HHead = new ChunkHHead { PlayerID = playerID }, MPlayer = player }, true); } else { frame.MPlayer = player; frame.PropagateM = true; } }