private void NewReadFromFile(string UserID) { if (!AdminToolbox.ATPlayerDict.ContainsKey(UserID)) { return; } string playerFilePath = PlayerStatsPath + UserID + ".txt"; if (!File.Exists(playerFilePath)) { WriteToFile(UserID); } if (File.ReadAllLines(playerFilePath).Length <= 2) { ConvertOldFilesToJSON(playerFilePath); } string rawJSON = File.ReadAllText(playerFilePath); SerializablePlayerClass pl = Utf8Json.JsonSerializer.Deserialize <SerializablePlayerClass>(rawJSON); PlayerSettings playersetting = AdminToolbox.ATPlayerDict[UserID]; if (string.IsNullOrEmpty(pl.PlayerInfo.FirstJoin)) { playersetting.PlayerInfo.FirstJoin = DateTime.UtcNow.AddMinutes(-pl.PlayerStats.MinutesPlayed).ToString(CultureInfo.InvariantCulture); } playersetting.PlayerStats = pl.PlayerStats; }
#pragma warning disable IDE0051 // Remove unused private members private void NewWriteToFile(string UserID) { if (!AdminToolbox.ATPlayerDict.ContainsKey(UserID)) { return; } string playerFilePath = PlayerStatsPath + UserID + ".txt"; if (!File.Exists(playerFilePath)) { File.Create(playerFilePath).Dispose(); } if (File.ReadAllLines(playerFilePath).Length <= 2) { ConvertOldFilesToJSON(playerFilePath); } SerializablePlayerClass pl = new SerializablePlayerClass(AdminToolbox.ATPlayerDict[UserID]); if (string.IsNullOrEmpty(pl.PlayerInfo.FirstJoin)) { pl.PlayerInfo.FirstJoin = DateTime.UtcNow.AddMinutes(-pl.PlayerStats.MinutesPlayed).ToString(CultureInfo.InvariantCulture); } using (StreamWriter sw = new StreamWriter(playerFilePath, false)) { sw.WriteLine(Utf8Json.JsonSerializer.PrettyPrint(Utf8Json.JsonSerializer.Serialize(pl))); } }
/// <summary> /// Read/Writes stats to/from <see cref="File"/> for each UserID in the <see cref="List{T}"/> /// </summary> public static void ConvertOldFilesToJSON(string filePath = "") { int fileCount = 0; string[] statsFiles = string.IsNullOrEmpty(filePath) ? Directory.GetFiles(PlayerStatsPath) : new string[] { filePath }; if (statsFiles.Where(f => !File.ReadAllText(f).StartsWith("{")).Count() >= 100) { Info("!Warning! The plugin will be converting old playerfiles to a new format, this might take some time"); } if (statsFiles.Length > 0) { foreach (string path in statsFiles) { if (!File.Exists(path) || File.ReadAllLines(path).FirstOrDefault().StartsWith("{")) { continue; } try { string[] rawData = File.ReadAllText(path).Split(';'); PlayerStats ps = new PlayerStats(); ps.Kills = (rawData.Length > 0 && int.TryParse(rawData[0], out int x0) && x0 > ps.Kills) ? x0 : ps.Kills; ps.TeamKills = (rawData.Length > 1 && int.TryParse(rawData[1], out int x1) && x1 > ps.TeamKills) ? x1 : ps.TeamKills; ps.Deaths = (rawData.Length > 2 && int.TryParse(rawData[2], out int x2) && x2 > ps.Deaths) ? x2 : ps.Deaths; ps.MinutesPlayed = (rawData.Length > 3 && double.TryParse(rawData[3].Replace(",", "."), NumberStyles.Number, CultureInfo.InvariantCulture, out double x3) && x3 > ps.MinutesPlayed && x3 < int.MaxValue) ? x3 : ps.MinutesPlayed; ps.BanCount = (rawData.Length > 4 && int.TryParse(rawData[4], out int x4) && x4 > ps.BanCount) ? x4 : ps.BanCount; int subtractedMinutes = (ps.MinutesPlayed < 0) ? (int)ps.MinutesPlayed : (int)-ps.MinutesPlayed; SerializablePlayerClass playerClass = new SerializablePlayerClass(ps); playerClass.PlayerInfo.FirstJoin = DateTime.UtcNow.Add(TimeSpan.FromMinutes(subtractedMinutes)).ToString(CultureInfo.InvariantCulture); using (StreamWriter sw = new StreamWriter(path, false)) { sw.WriteLine(Utf8Json.JsonSerializer.PrettyPrint(Utf8Json.JsonSerializer.Serialize(playerClass))); } fileCount++; } catch (Exception e) { Debug("Failed during convertion of: " + path + "\n" + e); continue; } // Kills + TeamKills + Deaths + minutesPlayed + BanCount; } } if (fileCount > 0) { Debug(fileCount + " file(s) converted to new JSON format!"); } }