完善UserStatistics;修改InventoryFactory

This commit is contained in:
milimoe 2023-10-24 21:01:29 +08:00
parent 632f0863dc
commit faf370b907
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
4 changed files with 56 additions and 39 deletions

View File

@ -1,5 +1,6 @@
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Interface.Base; using Milimoe.FunGame.Core.Interface.Base;
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Core.Api.Factory namespace Milimoe.FunGame.Core.Api.Factory
{ {
@ -9,7 +10,12 @@ namespace Milimoe.FunGame.Core.Api.Factory
public Inventory Create() public Inventory Create()
{ {
return new Inventory(); return new Inventory(General.UnknownUserInstance);
}
public static Inventory Create(User user)
{
return new Inventory(user);
} }
} }
} }

View File

@ -1,25 +1,22 @@
using System.Collections.Generic;
using System.Linq;
namespace Milimoe.FunGame.Core.Entity namespace Milimoe.FunGame.Core.Entity
{ {
/// <summary>
/// 记录 <see cref="Entity.User"/> 的生涯、赛季统计数据<para/>
/// Key为赛季(long)每个key代表第key赛季key = 0时为生涯数据。
/// </summary>
public class UserStatistics public class UserStatistics
{ {
/** public long Id => User.Id;
* Key为赛季(long)key代表第key赛季key = 0
*/
public long Id => User?.Id ?? 0L;
public User User { get; } public User User { get; }
public Dictionary<long, decimal> DamageStats { get; set; } = new Dictionary<long, decimal>(); public Dictionary<long, decimal> DamageStats { get; set; } = new();
public Dictionary<long, decimal> PhysicalDamageStats { get; set; } = new Dictionary<long, decimal>(); public Dictionary<long, decimal> PhysicalDamageStats { get; set; } = new();
public Dictionary<long, decimal> MagicDamageStats { get; set; } = new Dictionary<long, decimal>(); public Dictionary<long, decimal> MagicDamageStats { get; set; } = new();
public Dictionary<long, decimal> RealDamageStats { get; set; } = new Dictionary<long, decimal>(); public Dictionary<long, decimal> RealDamageStats { get; set; } = new();
public Dictionary<long, decimal> AvgDamageStats public Dictionary<long, decimal> AvgDamageStats
{ {
get get
{ {
Dictionary<long, decimal> avgdamage = new Dictionary<long, decimal>(); Dictionary<long, decimal> avgdamage = new();
foreach (long key in Plays.Keys) foreach (long key in Plays.Keys)
{ {
long plays = Plays[key]; long plays = Plays[key];
@ -28,7 +25,7 @@ namespace Milimoe.FunGame.Core.Entity
{ {
total = DamageStats.Values.Sum(); total = DamageStats.Values.Sum();
} }
avgdamage.Add(key, total / plays); avgdamage.Add(key, Math.Round(total / plays, 2));
} }
return avgdamage; return avgdamage;
} }
@ -37,7 +34,7 @@ namespace Milimoe.FunGame.Core.Entity
{ {
get get
{ {
Dictionary<long, decimal> avgdamage = new Dictionary<long, decimal>(); Dictionary<long, decimal> avgdamage = new();
foreach (long key in Plays.Keys) foreach (long key in Plays.Keys)
{ {
long plays = Plays[key]; long plays = Plays[key];
@ -46,7 +43,7 @@ namespace Milimoe.FunGame.Core.Entity
{ {
total = PhysicalDamageStats.Values.Sum(); total = PhysicalDamageStats.Values.Sum();
} }
avgdamage.Add(key, total / plays); avgdamage.Add(key, Math.Round(total / plays, 2));
} }
return avgdamage; return avgdamage;
} }
@ -55,7 +52,7 @@ namespace Milimoe.FunGame.Core.Entity
{ {
get get
{ {
Dictionary<long, decimal> avgdamage = new Dictionary<long, decimal>(); Dictionary<long, decimal> avgdamage = new();
foreach (long key in Plays.Keys) foreach (long key in Plays.Keys)
{ {
long plays = Plays[key]; long plays = Plays[key];
@ -64,7 +61,7 @@ namespace Milimoe.FunGame.Core.Entity
{ {
total = MagicDamageStats.Values.Sum(); total = MagicDamageStats.Values.Sum();
} }
avgdamage.Add(key, total / plays); avgdamage.Add(key, Math.Round(total / plays, 2));
} }
return avgdamage; return avgdamage;
} }
@ -73,7 +70,7 @@ namespace Milimoe.FunGame.Core.Entity
{ {
get get
{ {
Dictionary<long, decimal> avgdamage = new Dictionary<long, decimal>(); Dictionary<long, decimal> avgdamage = new();
foreach (long key in Plays.Keys) foreach (long key in Plays.Keys)
{ {
long plays = Plays[key]; long plays = Plays[key];
@ -82,22 +79,22 @@ namespace Milimoe.FunGame.Core.Entity
{ {
total = RealDamageStats.Values.Sum(); total = RealDamageStats.Values.Sum();
} }
avgdamage.Add(key, total / plays); avgdamage.Add(key, Math.Round(total / plays, 2));
} }
return avgdamage; return avgdamage;
} }
} }
public Dictionary<long, long> Kills { get; set; } = new Dictionary<long, long>(); public Dictionary<long, long> Kills { get; set; } = new();
public Dictionary<long, long> Deaths { get; set; } = new Dictionary<long, long>(); public Dictionary<long, long> Deaths { get; set; } = new();
public Dictionary<long, long> Assists { get; set; } = new Dictionary<long, long>(); public Dictionary<long, long> Assists { get; set; } = new();
public Dictionary<long, long> Plays { get; set; } = new Dictionary<long, long>(); public Dictionary<long, long> Plays { get; set; } = new();
public Dictionary<long, long> Wins { get; set; } = new Dictionary<long, long>(); public Dictionary<long, long> Wins { get; set; } = new();
public Dictionary<long, long> Loses { get; set; } = new Dictionary<long, long>(); public Dictionary<long, long> Loses { get; set; } = new();
public Dictionary<long, decimal> Winrates public Dictionary<long, decimal> Winrates
{ {
get get
{ {
Dictionary<long, decimal> winrates = new Dictionary<long, decimal>(); Dictionary<long, decimal> winrates = new();
foreach (long key in Plays.Keys) foreach (long key in Plays.Keys)
{ {
long plays = Plays[key]; long plays = Plays[key];
@ -106,14 +103,23 @@ namespace Milimoe.FunGame.Core.Entity
{ {
wins = Wins[key]; wins = Wins[key];
} }
winrates.Add(key, wins / plays * 0.01M); winrates.Add(key, Math.Round(wins * 1.0000M / plays * 1.0000M, 4));
} }
return winrates; return winrates;
} }
} }
public Dictionary<string, decimal> RatingStats { get; set; } = new Dictionary<string, decimal>(); public Dictionary<long, decimal> RatingStats { get; set; } = new();
public Dictionary<string, decimal> EloStats { get; set; } = new Dictionary<string, decimal>(); public Dictionary<long, decimal> EloStats { get; set; } = new();
public Dictionary<string, string> RankStats { get; set; } = new Dictionary<string, string>(); public Dictionary<long, string> RankStats { get; set; } = new();
public string GetWinrate(long season)
{
if (Winrates.ContainsKey(season))
{
return Winrates[season].ToString("0.##%");
}
return "0%";
}
internal UserStatistics(User user) internal UserStatistics(User user)
{ {

View File

@ -2,10 +2,15 @@
{ {
public class Inventory public class Inventory
{ {
public int Id { get; set; } public long Id => User.Id;
public string Name { get; set; } = ""; public string Name { get; set; } = "";
public User? User { get; set; } = null; public User User { get; }
public Dictionary<string, Character> Characters { get; set; } = new(); public Dictionary<string, Character> Characters { get; set; } = new();
public Dictionary<string, Item> Items { get; set; } = new(); public Dictionary<string, Item> Items { get; set; } = new();
internal Inventory(User user)
{
User = user;
}
} }
} }

View File

@ -1,7 +1,5 @@
using System.Data;
using Milimoe.FunGame.Core.Interface.Entity; using Milimoe.FunGame.Core.Interface.Entity;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.SQLScript.Entity;
namespace Milimoe.FunGame.Core.Entity namespace Milimoe.FunGame.Core.Entity
{ {
@ -23,11 +21,12 @@ namespace Milimoe.FunGame.Core.Entity
public decimal GameTime { get; set; } = 0; public decimal GameTime { get; set; } = 0;
public string AutoKey { get; set; } = ""; public string AutoKey { get; set; } = "";
public UserStatistics Statistics { get; } public UserStatistics Statistics { get; }
public Inventory? Inventory { get; set; } = null; public Inventory Inventory { get; }
internal User() internal User()
{ {
this.Statistics = new(this); Statistics = new(this);
Inventory = new(this);
} }
internal User(long Id = 0, string Username = "", DateTime? RegTime = null, DateTime? LastTime = null, string Email = "", string NickName = "", bool IsAdmin = false, bool IsOperator = false, bool IsEnable = true, decimal Credits = 0, decimal Materials = 0, decimal GameTime = 0, string AutoKey = "") internal User(long Id = 0, string Username = "", DateTime? RegTime = null, DateTime? LastTime = null, string Email = "", string NickName = "", bool IsAdmin = false, bool IsOperator = false, bool IsEnable = true, decimal Credits = 0, decimal Materials = 0, decimal GameTime = 0, string AutoKey = "")
@ -45,7 +44,8 @@ namespace Milimoe.FunGame.Core.Entity
this.Materials = Materials; this.Materials = Materials;
this.GameTime = GameTime; this.GameTime = GameTime;
this.AutoKey = AutoKey; this.AutoKey = AutoKey;
this.Statistics = new(this); Statistics = new(this);
Inventory = new(this);
} }
public override bool Equals(IBaseEntity? other) public override bool Equals(IBaseEntity? other)