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; } = new(); public Dictionary PhysicalDamageStats { get; } = new(); public Dictionary MagicDamageStats { get; } = new(); public Dictionary RealDamageStats { get; } = new(); public Dictionary AvgDamageStats { get { Dictionary avgdamage = new(); foreach (long key in Plays.Keys) { long plays = Plays[key]; decimal 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 = new(); foreach (long key in Plays.Keys) { long plays = Plays[key]; decimal 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 = new(); foreach (long key in Plays.Keys) { long plays = Plays[key]; decimal 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 = new(); foreach (long key in Plays.Keys) { long plays = Plays[key]; decimal total = 0; if (RealDamageStats.ContainsKey(key)) { total = RealDamageStats.Values.Sum(); } avgdamage.Add(key, Math.Round(total / plays, 2)); } return avgdamage; } } public Dictionary Kills { get; } = new(); public Dictionary Deaths { get; } = new(); public Dictionary Assists { get; } = new(); public Dictionary Plays { get; } = new(); public Dictionary Wins { get; } = new(); public Dictionary Loses { get; } = new(); public Dictionary Winrates { get { Dictionary winrates = new(); foreach (long key in Plays.Keys) { long plays = Plays[key]; long wins = 0; if (Wins.ContainsKey(key)) { wins = Wins[key]; } winrates.Add(key, Math.Round(wins * 1.0000M / plays * 1.0000M, 4)); } return winrates; } } public Dictionary RatingStats { get; } = new(); public Dictionary EloStats { get; } = new(); public Dictionary RankStats { get; } = new(); public string GetWinrate(long season) { if (Winrates.ContainsKey(season)) { return Winrates[season].ToString("0.##%"); } return "0%"; } internal UserStatistics(User user) { User = user; } } }