예제 #1
0
        public static async Task <MonDkpDatabase> LoadMonDkpDatabaseAsync(string filePath)
        {
            using (var lua = new Lua())
            {
                lua.State.Encoding = Encoding.UTF8;

                var str = await File.ReadAllTextAsync(filePath);

                lua.DoString(str);
                var db = new MonDkpDatabase
                {
                    DkpHistory = new DkpHistory
                    {
                        HistoryEntries = GetDkpHistory(lua).ToList()
                    },
                    LootHistory = new LootHistory
                    {
                        LootEntries = GetLootHistory(lua).ToList()
                    },
                    DkpTable = new DkpTable
                    {
                        DkpEntries = GetDkpEntries(lua).ToList()
                    }
                };

                CleanUpDkpList(db);

                return(db);
            }
        }
예제 #2
0
        private async Task <MonDkpDatabase> GetMonDkpDatabaseAsync()
        {
            var writeTimeUtc = File.GetLastWriteTimeUtc(DatabaseFileName);

            if (writeTimeUtc > this.lastWriteTimeUtc)
            {
                var data = await MonDkpFileLoader.LoadMonDkpDatabaseAsync(DatabaseFileName);

                this.cachedData       = data;
                this.lastWriteTimeUtc = writeTimeUtc;
            }

            return(this.cachedData);
        }
예제 #3
0
        private static void CleanUpDkpList(MonDkpDatabase db)
        {
            var validPlayers =
                db.DkpTable.DkpEntries.Select(a => a.Player).Distinct().ToList();
            var invalidPlayers =
                db.DkpHistory.HistoryEntries.SelectMany(a => a.Players).Distinct().Where(a => !validPlayers.Contains(a))
                .ToList();

            db.LootHistory.LootEntries.RemoveAll(a => !validPlayers.Contains(a.Player));

            foreach (var dkpEntry in db.DkpHistory.HistoryEntries)
            {
                foreach (var invalidPlayer in invalidPlayers)
                {
                    dkpEntry.PlayerString = dkpEntry.PlayerString.Replace($"{invalidPlayer},", string.Empty);
                }
            }

            db.DkpHistory.HistoryEntries.RemoveAll(a => string.IsNullOrEmpty(a.PlayerString));
        }