private void UpdatePlayerInfos(ServerRow server) { // no need for update if it's the same server and update timestamp if (server == this.serverForPlayerInfos && server.RequestTimestamp == this.dataTimestamp && this.playerInfos.Count > 0) { return; } this.serverForPlayerInfos = server; this.dataTimestamp = server.RequestTimestamp; var newPlayerInfos = new Dictionary <string, ToxikkPlayerInfo>(); var strNames = (server.GetRule("p1073741832") ?? "") + (server.GetRule("p1073741833") ?? "") + (server.GetRule("p1073741834") ?? ""); if (string.IsNullOrEmpty(strNames)) { return; } var gameType = (string)server.GetExtenderCellValue("_gametype"); bool isTeamGame = "SA,CC,AD,SS,TA,SB,IB,2v2,4v4".Contains(gameType); var strSteamIds = (server.GetRule("p1073741829") ?? "") + (server.GetRule("p1073741830") ?? "") + (server.GetRule("p1073741831") ?? ""); var strSkill = server.GetRule("p1073741837") ?? ""; var strRank = server.GetRule("p1073741838") ?? ""; int teamSepIdx = strNames.IndexOf(';'); var names = strNames.Split(',', ';'); var steamIds = strSteamIds.Split(',', ';'); var skills = strSkill.Split(',', ';'); var ranks = strRank.Split(',', ';'); int i = 0; foreach (var name in names) { var info = new ToxikkPlayerInfo(); info.Team = !isTeamGame ? "Player" : teamSepIdx < 0 || strNames.IndexOf(name) < teamSepIdx ? "Red" : "Blue"; if (i < steamIds.Length) { info.SteamId = steamIds[i]; } decimal sc; if (i < skills.Length && decimal.TryParse(skills[i], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out sc)) { info.SkillClass = sc; } if (i < ranks.Length && ranks[i].Length > 0) { int rank; if (!char.IsDigit(ranks[i][0])) { var teamInfo = ranks[i][0]; if (teamInfo == 29 || teamInfo == 'S') { info.Team = "Spec"; } else if (teamInfo == 30 || teamInfo == 'Q') { info.Team = "Queue"; } int.TryParse(ranks[i].Substring(1), out rank); } else { int.TryParse(ranks[i], out rank); } info.Rank = rank; } newPlayerInfos.Add(name, info); ++i; } this.playerInfos = newPlayerInfos; server.PlayerCount.Update(); }
private void UpdatePlayerInfos(ServerRow server) { // no need for update if it's the same server and update timestamp if (server == this.serverForPlayerInfos && server.RequestTimestamp == this.dataTimestamp && playerInfos.Count > 0) return; this.serverForPlayerInfos = server; this.dataTimestamp = server.RequestTimestamp; this.playerInfos.Clear(); var strNames = (server.GetRule("p1073741832") ?? "") + (server.GetRule("p1073741833") ?? "") + (server.GetRule("p1073741834") ?? ""); if (string.IsNullOrEmpty(strNames)) return; var gameType = (string)server.GetExtenderCellValue("_gametype"); bool isTeamGame = gameType != "BL"; var strSteamIds = (server.GetRule("p1073741829") ?? "") + (server.GetRule("p1073741830") ?? "") + (server.GetRule("p1073741831") ?? ""); var strSkill = server.GetRule("p1073741837") ?? ""; var strRank = server.GetRule("p1073741838") ?? ""; int teamSepIdx = strNames.IndexOf(';'); var names = strNames.Split(',', ';'); var steamIds = strSteamIds.Split(',', ';'); var skills = strSkill.Split(',',';'); var ranks = strRank.Split(',', ';'); int i = 0; foreach (var name in names) { var info = new ToxikkPlayerInfo(); info.Team = !isTeamGame ? "Player" : teamSepIdx < 0 || strNames.IndexOf(name) < teamSepIdx ? "Red" : "Blue"; if (i < steamIds.Length) info.SteamId = steamIds[i]; decimal sc; if (i < skills.Length && decimal.TryParse(skills[i], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out sc)) info.SkillClass = sc; int rank; if (i < ranks.Length && int.TryParse(ranks[i], out rank)) info.Rank = rank; this.playerInfos.Add(name, info); ++i; } }