public void Load() { try { using (var reader = File.OpenText(@"logs\ranking.txt")) { string[] line; lastExpUpdateTime = new DateTimeOffset(DateTime.Parse(reader.ReadLine()), TimeSpan.FromHours(7)); line = reader.ReadLine().Split(','); Number1 = new RankRecord { Point = int.Parse(line[0]), Diff = int.Parse(line[1]) }; line = reader.ReadLine().Split(','); Number5 = new RankRecord { Point = int.Parse(line[0]), Diff = int.Parse(line[1]) }; line = reader.ReadLine().Split(','); Number20 = new RankRecord { Point = int.Parse(line[0]), Diff = int.Parse(line[1]) }; line = reader.ReadLine().Split(','); Number100 = new RankRecord { Point = int.Parse(line[0]), Diff = int.Parse(line[1]) }; line = reader.ReadLine().Split(','); Number500 = new RankRecord { Point = int.Parse(line[0]), Diff = int.Parse(line[1]) }; line = reader.ReadLine().Split(','); MyRank = int.Parse(line[0]); myLastPoint = int.Parse(line[1]); myLastExp = int.Parse(line[2]); myLastExpStore = int.Parse(line[3]); myExp = int.Parse(line[4]); } } catch { } }
private void RankingListHandler(ranking_getlist api) { foreach (var player in api.api_list) { int rate = DecodeRate(player); switch (player.api_mxltvkpyuklh) { case 1: if (Number1.Point < rate) { Number1 = new RankRecord { Point = rate, Diff = rate - Number1.Point } } ; else if (Number1.Point > rate) { Number1 = new RankRecord { Point = rate, Diff = 0 } } ; break; case 5: if (Number5.Point < rate) { Number5 = new RankRecord { Point = rate, Diff = rate - Number5.Point } } ; else if (Number5.Point > rate) { Number5 = new RankRecord { Point = rate, Diff = 0 } } ; break; case 20: if (Number20.Point < rate) { Number20 = new RankRecord { Point = rate, Diff = rate - Number20.Point } } ; else if (Number20.Point > rate) { Number20 = new RankRecord { Point = rate, Diff = 0 } } ; break; case 100: if (Number100.Point < rate) { Number100 = new RankRecord { Point = rate, Diff = rate - Number100.Point } } ; else if (Number100.Point > rate) { Number100 = new RankRecord { Point = rate, Diff = 0 } } ; break; case 500: if (Number500.Point < rate) { Number500 = new RankRecord { Point = rate, Diff = rate - Number500.Point } } ; else if (Number500.Point > rate) { Number500 = new RankRecord { Point = rate, Diff = 0 } } ; break; } if (player.api_mtjmdcwtvhdr == Staff.Current.Admiral.Nickname && player.api_itbrdpdbkynm == Staff.Current.Admiral.Comment) { if (myLastPoint != rate || MyRank != player.api_mxltvkpyuklh) { MyRank = player.api_mxltvkpyuklh; myLastPoint = rate; myLastExp = myLastExpStore; OnPropertyChanged(nameof(MyDiff)); OnPropertyChanged(nameof(MyPoint)); } } } }
public void Load() { try { using (var reader = File.OpenText(@"logs\ranking.txt")) { string[] line; lastExpUpdateTime = new DateTimeOffset(DateTime.Parse(reader.ReadLine()), TimeSpan.FromHours(7)); line = reader.ReadLine().Split(','); Number1 = new RankRecord { Point = int.Parse(line[0]), Diff = int.Parse(line[1]) }; line = reader.ReadLine().Split(','); Number5 = new RankRecord { Point = int.Parse(line[0]), Diff = int.Parse(line[1]) }; line = reader.ReadLine().Split(','); Number20 = new RankRecord { Point = int.Parse(line[0]), Diff = int.Parse(line[1]) }; line = reader.ReadLine().Split(','); Number100 = new RankRecord { Point = int.Parse(line[0]), Diff = int.Parse(line[1]) }; line = reader.ReadLine().Split(','); Number500 = new RankRecord { Point = int.Parse(line[0]), Diff = int.Parse(line[1]) }; line = reader.ReadLine().Split(','); MyRank = int.Parse(line[0]); MyLastPoint = int.Parse(line[1]); myLastExp = int.Parse(line[2]); myLastExpStore = int.Parse(line[3]); myExp = int.Parse(line[4]); } } catch { } }
private void RankingListHandler(ranking_getlist api) { foreach (var player in api.api_list) { int rate = DecodeRate(player); switch (player.api_mxltvkpyuklh) { case 1: if (Number1.Point < rate) Number1 = new RankRecord { Point = rate, Diff = rate - Number1.Point }; else if (Number1.Point > rate) Number1 = new RankRecord { Point = rate, Diff = 0 }; break; case 5: if (Number5.Point < rate) Number5 = new RankRecord { Point = rate, Diff = rate - Number5.Point }; else if (Number5.Point > rate) Number5 = new RankRecord { Point = rate, Diff = 0 }; break; case 20: if (Number20.Point < rate) Number20 = new RankRecord { Point = rate, Diff = rate - Number20.Point }; else if (Number20.Point > rate) Number20 = new RankRecord { Point = rate, Diff = 0 }; break; case 100: if (Number100.Point < rate) Number100 = new RankRecord { Point = rate, Diff = rate - Number100.Point }; else if (Number100.Point > rate) Number100 = new RankRecord { Point = rate, Diff = 0 }; break; case 500: if (Number500.Point < rate) Number500 = new RankRecord { Point = rate, Diff = rate - Number500.Point }; else if (Number500.Point > rate) Number500 = new RankRecord { Point = rate, Diff = 0 }; break; } if (player.api_mtjmdcwtvhdr == Staff.Current.Admiral.Nickname && player.api_itbrdpdbkynm == Staff.Current.Admiral.Comment) { if (MyLastPoint != rate || MyRank != player.api_mxltvkpyuklh) { MyRank = player.api_mxltvkpyuklh; MyLastPoint = rate; myLastExp = myLastExpStore; OnPropertyChanged(nameof(MyPoint)); } } } }
public void Rank() { _service.Info.Worlds.ForEach(w => { var watch = Stopwatch.StartNew(); using var store = _service.DataStore.OpenSession(); using var batch = store.Batch(); var characters = store .Query <AccountData>() .Where(d => d.WorldID == w) .ToList() .SelectMany(d => store .Query <Character>() .Where(c => c.AccountDataID == d.ID) .ToList()) .ToList(); var worldRanking = characters .OrderBy(c => c.Level, OrderByDirection.Descending) .Select((c, index) => new { CharacterID = c.ID, Rank = index + 1 }) .ToDictionary(r => r.CharacterID, r => r.Rank); var jobRanking = new Dictionary <int, int>(); characters .GroupBy(c => c.Job % 1000 / 100) .ForEach(job => job .OrderBy(c => c.Level, OrderByDirection.Descending) .Select((c, index) => new { CharacterID = c.ID, Rank = index + 1 }) .ToDictionary(r => r.CharacterID, r => r.Rank) .ForEach(kv => jobRanking.Add(kv.Key, kv.Value))); characters.ForEach(c => { var ranking = store .Query <RankRecord>() .FirstOrDefault(r => r.CharacterID == c.ID); if (ranking == null) { ranking = new RankRecord { CharacterID = c.ID }; batch.Insert(ranking); } else { ranking.WorldRankGap = ranking.WorldRank - worldRanking[c.ID]; ranking.JobRankGap = ranking.JobRank - jobRanking[c.ID]; } ranking.WorldRank = worldRanking[c.ID]; ranking.JobRank = jobRanking[c.ID]; batch.Update(ranking); }); batch.SaveChanges(); Logger.Info($"Ranked {characters.Count} characters (world {w}) in {watch.ElapsedMilliseconds}ms"); }); }