FunGame-Core/Entity/Statistics/UserStatistics.cs
2023-10-24 17:00:54 +08:00

124 lines
4.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections.Generic;
using System.Linq;
namespace Milimoe.FunGame.Core.Entity
{
public class UserStatistics
{
/**
* Key为赛季(long)每个key代表第key赛季key = 0时为生涯数据。
*/
public long Id => User?.Id ?? 0L;
public User? User { get; }
public Dictionary<long, decimal> DamageStats { get; set; } = new Dictionary<long, decimal>();
public Dictionary<long, decimal> PhysicalDamageStats { get; set; } = new Dictionary<long, decimal>();
public Dictionary<long, decimal> MagicDamageStats { get; set; } = new Dictionary<long, decimal>();
public Dictionary<long, decimal> RealDamageStats { get; set; } = new Dictionary<long, decimal>();
public Dictionary<long, decimal> AvgDamageStats
{
get
{
Dictionary<long, decimal> avgdamage = new Dictionary<long, decimal>();
foreach (long key in Plays.Keys)
{
long plays = Plays[key];
decimal total = 0;
if (DamageStats.ContainsKey(key))
{
total = DamageStats.Values.Sum();
}
avgdamage.Add(key, total / plays);
}
return avgdamage;
}
}
public Dictionary<long, decimal> AvgPhysicalDamageStats
{
get
{
Dictionary<long, decimal> avgdamage = new Dictionary<long, decimal>();
foreach (long key in Plays.Keys)
{
long plays = Plays[key];
decimal total = 0;
if (PhysicalDamageStats.ContainsKey(key))
{
total = PhysicalDamageStats.Values.Sum();
}
avgdamage.Add(key, total / plays);
}
return avgdamage;
}
}
public Dictionary<long, decimal> AvgMagicDamageStats
{
get
{
Dictionary<long, decimal> avgdamage = new Dictionary<long, decimal>();
foreach (long key in Plays.Keys)
{
long plays = Plays[key];
decimal total = 0;
if (MagicDamageStats.ContainsKey(key))
{
total = MagicDamageStats.Values.Sum();
}
avgdamage.Add(key, total / plays);
}
return avgdamage;
}
}
public Dictionary<long, decimal> AvgRealDamageStats
{
get
{
Dictionary<long, decimal> avgdamage = new Dictionary<long, decimal>();
foreach (long key in Plays.Keys)
{
long plays = Plays[key];
decimal total = 0;
if (RealDamageStats.ContainsKey(key))
{
total = RealDamageStats.Values.Sum();
}
avgdamage.Add(key, total / plays);
}
return avgdamage;
}
}
public Dictionary<long, long> Kills { get; set; } = new Dictionary<long, long>();
public Dictionary<long, long> Deaths { get; set; } = new Dictionary<long, long>();
public Dictionary<long, long> Assists { get; set; } = new Dictionary<long, long>();
public Dictionary<long, long> Plays { get; set; } = new Dictionary<long, long>();
public Dictionary<long, long> Wins { get; set; } = new Dictionary<long, long>();
public Dictionary<long, long> Loses { get; set; } = new Dictionary<long, long>();
public Dictionary<long, decimal> Winrates
{
get
{
Dictionary<long, decimal> winrates = new Dictionary<long, decimal>();
foreach (long key in Plays.Keys)
{
long plays = Plays[key];
long wins = 0;
if (Wins.ContainsKey(key))
{
wins = Wins[key];
}
winrates.Add(key, wins / plays * 0.01M);
}
return winrates;
}
}
public Dictionary<string, decimal> RatingStats { get; set; } = new Dictionary<string, decimal>();
public Dictionary<string, decimal> EloStats { get; set; } = new Dictionary<string, decimal>();
public Dictionary<string, string> RankStats { get; set; } = new Dictionary<string, string>();
internal UserStatistics(User user)
{
User = user;
}
}
}