namespace Milimoe.FunGame.Core.Entity { /// /// 记录 的生涯、赛季统计数据 /// Key为赛季(long),每个key代表第key赛季,key = 0时为生涯数据。 /// public class UserStatistics { public long Id => User.Id; public User User { get; } public Dictionary DamageStats { get; } = []; public Dictionary PhysicalDamageStats { get; } = []; public Dictionary MagicDamageStats { get; } = []; public Dictionary RealDamageStats { get; } = []; public Dictionary AvgDamageStats { get { Dictionary avgdamage = []; foreach (long key in Plays.Keys) { long plays = Plays[key]; double total = 0; if (DamageStats.ContainsKey(key)) { total = DamageStats.Values.Sum(); } avgdamage.Add(key, Math.Round(total / plays, 2)); } return avgdamage; } } public Dictionary AvgPhysicalDamageStats { get { Dictionary avgdamage = []; foreach (long key in Plays.Keys) { long plays = Plays[key]; double total = 0; if (PhysicalDamageStats.ContainsKey(key)) { total = PhysicalDamageStats.Values.Sum(); } avgdamage.Add(key, Math.Round(total / plays, 2)); } return avgdamage; } } public Dictionary AvgMagicDamageStats { get { Dictionary avgdamage = []; foreach (long key in Plays.Keys) { long plays = Plays[key]; double total = 0; if (MagicDamageStats.ContainsKey(key)) { total = MagicDamageStats.Values.Sum(); } avgdamage.Add(key, Math.Round(total / plays, 2)); } return avgdamage; } } public Dictionary AvgRealDamageStats { get { Dictionary avgdamage = []; foreach (long key in Plays.Keys) { long plays = Plays[key]; double total = 0; if (RealDamageStats.ContainsKey(key)) { total = RealDamageStats.Values.Sum(); } avgdamage.Add(key, Math.Round(total / plays, 2)); } return avgdamage; } } public Dictionary Kills { get; } = []; public Dictionary Deaths { get; } = []; public Dictionary Assists { get; } = []; public Dictionary Plays { get; } = []; public Dictionary Wins { get; } = []; public Dictionary Loses { get; } = []; public Dictionary Winrates { get { Dictionary winrates = []; foreach (long key in Plays.Keys) { long plays = Plays[key]; long wins = 0; if (Wins.TryGetValue(key, out long value)) { wins = value; } winrates.Add(key, Math.Round(wins * 1.0 / plays * 1.0, 4)); } return winrates; } } public Dictionary RatingStats { get; } = []; public Dictionary EloStats { get; } = []; public Dictionary RankStats { get; } = []; public string GetWinrate(long season) { if (Winrates.TryGetValue(season, out double value)) { return value.ToString("0.##%"); } return "0%"; } internal UserStatistics(User user) { User = user; } } }