Beispiel #1
0
        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;
        }
Beispiel #2
0
#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)));
            }
        }
Beispiel #3
0
        /// <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!");
            }
        }