From faf370b9074840b94607b4f5ce265ae8664ebdbc Mon Sep 17 00:00:00 2001 From: milimoe Date: Tue, 24 Oct 2023 21:01:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84UserStatistics=EF=BC=9B?= =?UTF-8?q?=E4=BF=AE=E6=94=B9InventoryFactory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Api/Factory/InventoryFactory.cs | 8 +++- Entity/Statistics/UserStatistics.cs | 68 ++++++++++++++++------------- Entity/System/Inventory.cs | 9 +++- Entity/User/User.cs | 10 ++--- 4 files changed, 56 insertions(+), 39 deletions(-) diff --git a/Api/Factory/InventoryFactory.cs b/Api/Factory/InventoryFactory.cs index a88c1cc..2138633 100644 --- a/Api/Factory/InventoryFactory.cs +++ b/Api/Factory/InventoryFactory.cs @@ -1,5 +1,6 @@ using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Interface.Base; +using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Core.Api.Factory { @@ -9,7 +10,12 @@ namespace Milimoe.FunGame.Core.Api.Factory public Inventory Create() { - return new Inventory(); + return new Inventory(General.UnknownUserInstance); + } + + public static Inventory Create(User user) + { + return new Inventory(user); } } } diff --git a/Entity/Statistics/UserStatistics.cs b/Entity/Statistics/UserStatistics.cs index a806a57..306aa74 100644 --- a/Entity/Statistics/UserStatistics.cs +++ b/Entity/Statistics/UserStatistics.cs @@ -1,25 +1,22 @@ -using System.Collections.Generic; -using System.Linq; - namespace Milimoe.FunGame.Core.Entity { + /// + /// 记录 的生涯、赛季统计数据 + /// Key为赛季(long),每个key代表第key赛季,key = 0时为生涯数据。 + /// public class UserStatistics { - /** - * Key为赛季(long),每个key代表第key赛季,key = 0时为生涯数据。 - */ - - public long Id => User?.Id ?? 0L; + public long Id => User.Id; public User User { get; } - public Dictionary DamageStats { get; set; } = new Dictionary(); - public Dictionary PhysicalDamageStats { get; set; } = new Dictionary(); - public Dictionary MagicDamageStats { get; set; } = new Dictionary(); - public Dictionary RealDamageStats { get; set; } = new Dictionary(); + public Dictionary DamageStats { get; set; } = new(); + public Dictionary PhysicalDamageStats { get; set; } = new(); + public Dictionary MagicDamageStats { get; set; } = new(); + public Dictionary RealDamageStats { get; set; } = new(); public Dictionary AvgDamageStats { get { - Dictionary avgdamage = new Dictionary(); + Dictionary avgdamage = new(); foreach (long key in Plays.Keys) { long plays = Plays[key]; @@ -28,7 +25,7 @@ namespace Milimoe.FunGame.Core.Entity { total = DamageStats.Values.Sum(); } - avgdamage.Add(key, total / plays); + avgdamage.Add(key, Math.Round(total / plays, 2)); } return avgdamage; } @@ -37,7 +34,7 @@ namespace Milimoe.FunGame.Core.Entity { get { - Dictionary avgdamage = new Dictionary(); + Dictionary avgdamage = new(); foreach (long key in Plays.Keys) { long plays = Plays[key]; @@ -46,7 +43,7 @@ namespace Milimoe.FunGame.Core.Entity { total = PhysicalDamageStats.Values.Sum(); } - avgdamage.Add(key, total / plays); + avgdamage.Add(key, Math.Round(total / plays, 2)); } return avgdamage; } @@ -55,7 +52,7 @@ namespace Milimoe.FunGame.Core.Entity { get { - Dictionary avgdamage = new Dictionary(); + Dictionary avgdamage = new(); foreach (long key in Plays.Keys) { long plays = Plays[key]; @@ -64,7 +61,7 @@ namespace Milimoe.FunGame.Core.Entity { total = MagicDamageStats.Values.Sum(); } - avgdamage.Add(key, total / plays); + avgdamage.Add(key, Math.Round(total / plays, 2)); } return avgdamage; } @@ -73,7 +70,7 @@ namespace Milimoe.FunGame.Core.Entity { get { - Dictionary avgdamage = new Dictionary(); + Dictionary avgdamage = new(); foreach (long key in Plays.Keys) { long plays = Plays[key]; @@ -82,22 +79,22 @@ namespace Milimoe.FunGame.Core.Entity { total = RealDamageStats.Values.Sum(); } - avgdamage.Add(key, total / plays); + avgdamage.Add(key, Math.Round(total / plays, 2)); } return avgdamage; } } - public Dictionary Kills { get; set; } = new Dictionary(); - public Dictionary Deaths { get; set; } = new Dictionary(); - public Dictionary Assists { get; set; } = new Dictionary(); - public Dictionary Plays { get; set; } = new Dictionary(); - public Dictionary Wins { get; set; } = new Dictionary(); - public Dictionary Loses { get; set; } = new Dictionary(); + public Dictionary Kills { get; set; } = new(); + public Dictionary Deaths { get; set; } = new(); + public Dictionary Assists { get; set; } = new(); + public Dictionary Plays { get; set; } = new(); + public Dictionary Wins { get; set; } = new(); + public Dictionary Loses { get; set; } = new(); public Dictionary Winrates { get { - Dictionary winrates = new Dictionary(); + Dictionary winrates = new(); foreach (long key in Plays.Keys) { long plays = Plays[key]; @@ -106,14 +103,23 @@ namespace Milimoe.FunGame.Core.Entity { wins = Wins[key]; } - winrates.Add(key, wins / plays * 0.01M); + winrates.Add(key, Math.Round(wins * 1.0000M / plays * 1.0000M, 4)); } return winrates; } } - public Dictionary RatingStats { get; set; } = new Dictionary(); - public Dictionary EloStats { get; set; } = new Dictionary(); - public Dictionary RankStats { get; set; } = new Dictionary(); + public Dictionary RatingStats { get; set; } = new(); + public Dictionary EloStats { get; set; } = new(); + public Dictionary RankStats { get; set; } = new(); + + public string GetWinrate(long season) + { + if (Winrates.ContainsKey(season)) + { + return Winrates[season].ToString("0.##%"); + } + return "0%"; + } internal UserStatistics(User user) { diff --git a/Entity/System/Inventory.cs b/Entity/System/Inventory.cs index 24be9f5..0e2bff9 100644 --- a/Entity/System/Inventory.cs +++ b/Entity/System/Inventory.cs @@ -2,10 +2,15 @@ { public class Inventory { - public int Id { get; set; } + public long Id => User.Id; public string Name { get; set; } = ""; - public User? User { get; set; } = null; + public User User { get; } public Dictionary Characters { get; set; } = new(); public Dictionary Items { get; set; } = new(); + + internal Inventory(User user) + { + User = user; + } } } diff --git a/Entity/User/User.cs b/Entity/User/User.cs index b232e19..f71bbc0 100644 --- a/Entity/User/User.cs +++ b/Entity/User/User.cs @@ -1,7 +1,5 @@ -using System.Data; using Milimoe.FunGame.Core.Interface.Entity; using Milimoe.FunGame.Core.Library.Constant; -using Milimoe.FunGame.Core.Library.SQLScript.Entity; namespace Milimoe.FunGame.Core.Entity { @@ -23,11 +21,12 @@ namespace Milimoe.FunGame.Core.Entity public decimal GameTime { get; set; } = 0; public string AutoKey { get; set; } = ""; public UserStatistics Statistics { get; } - public Inventory? Inventory { get; set; } = null; + public Inventory Inventory { get; } 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 = "") @@ -45,7 +44,8 @@ namespace Milimoe.FunGame.Core.Entity this.Materials = Materials; this.GameTime = GameTime; this.AutoKey = AutoKey; - this.Statistics = new(this); + Statistics = new(this); + Inventory = new(this); } public override bool Equals(IBaseEntity? other)