public bool ComparePK(Player other) { if (other == null) return false; if (ReferenceEquals(other, this)) return true; // Otherwise we break syncing based on gamespy vs source if (other.GetType() != GetType()) return false; return other.Name != null && other.Name.Equals(Name); }
static Player[] ParsePlayers(IServer server, byte[] players) { //TODO: Player doesn't have same info for different game/server types var pos = 5; //skip header var cnt = players[pos++]; var playerAr = new Player[cnt]; for (var i = 0; i < cnt; i++) { if (pos >= players.Length) break; // ReSharper disable once UnusedVariable var pnum = players[pos++]; //TODO: index is always zero, why? Defined as "Index of player chunk starting from 0." should be usable below var start = pos; while (players[pos++] != 0x00) {} var name = Encoding.UTF8.GetString(players, start, pos - start - 1); var score = BitConverter.ToInt32(players, pos); pos += 4; var duration = (int) BitConverter.ToSingle(players, pos); //in seconds, dropped float precision pos += 4; playerAr[i] = new SourcePlayer(server, name, score, TimeSpan.FromSeconds(duration)); //use i instead of pnum } return playerAr; }