From 98fcbf1a6cffd87a2dd96be82207a7e79f372dc0 Mon Sep 17 00:00:00 2001 From: milimoe Date: Mon, 6 Jan 2025 01:43:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A4=BE=E5=9B=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Entity/BaseEntity.cs | 18 +++- Entity/Item/Item.cs | 9 -- Entity/Skill/Skill.cs | 9 -- Entity/System/Club.cs | 13 +-- Entity/System/Quest.cs | 5 - Interface/Entity/Base/IBaseEntity.cs | 2 + Library/Common/JsonConverter/ClubConverter.cs | 98 +++++++++++++++++++ Service/JsonManager.cs | 2 +- 8 files changed, 121 insertions(+), 35 deletions(-) create mode 100644 Library/Common/JsonConverter/ClubConverter.cs diff --git a/Entity/BaseEntity.cs b/Entity/BaseEntity.cs index b8f15a3..84da248 100644 --- a/Entity/BaseEntity.cs +++ b/Entity/BaseEntity.cs @@ -5,12 +5,12 @@ namespace Milimoe.FunGame.Core.Entity public abstract class BaseEntity : IBaseEntity { /// - /// 实体的数字ID + /// 实体的数字 ID /// public virtual long Id { get; set; } = 0; /// - /// 实体的唯一ID + /// 实体的唯一 ID /// public virtual Guid Guid { get; set; } = Guid.Empty; @@ -19,6 +19,20 @@ namespace Milimoe.FunGame.Core.Entity /// public virtual string Name { get; set; } = ""; + /// + /// 比较两个实体是否相同 + /// + /// + /// public abstract bool Equals(IBaseEntity? other); + + /// + /// 获取实体的 Id.Name + /// + /// + public string GetIdName() + { + return Id + "." + Name; + } } } diff --git a/Entity/Item/Item.cs b/Entity/Item/Item.cs index 89f8962..adcd2b8 100644 --- a/Entity/Item/Item.cs +++ b/Entity/Item/Item.cs @@ -414,15 +414,6 @@ namespace Milimoe.FunGame.Core.Entity internal Item() { } - /// - /// Id.Name - /// - /// - public string GetIdName() - { - return Id + "." + Name; - } - /// /// 显示物品的详细信息 /// diff --git a/Entity/Skill/Skill.cs b/Entity/Skill/Skill.cs index b10a183..c930902 100644 --- a/Entity/Skill/Skill.cs +++ b/Entity/Skill/Skill.cs @@ -442,15 +442,6 @@ namespace Milimoe.FunGame.Core.Entity return builder.ToString(); } - /// - /// Id.Name - /// - /// - public string GetIdName() - { - return Id + "." + Name; - } - /// /// 判断两个技能是否相同 检查Id.Name /// diff --git a/Entity/System/Club.cs b/Entity/System/Club.cs index 3e1cf42..2c646ce 100644 --- a/Entity/System/Club.cs +++ b/Entity/System/Club.cs @@ -10,18 +10,13 @@ namespace Milimoe.FunGame.Core.Entity public bool IsPublic { get; set; } = false; public double ClubPoins { get; set; } = 0; public User? Master { get; set; } - public Dictionary Admins { get; set; } = []; - public Dictionary Members { get; set; } = []; - public Dictionary Applicants { get; set; } = []; - - public bool Equals(Club other) - { - return Equals(other); - } + public Dictionary Admins { get; set; } = []; + public Dictionary Members { get; set; } = []; + public Dictionary Applicants { get; set; } = []; public override bool Equals(IBaseEntity? other) { - return other?.Id == Id; + return other is Club && other?.Id == Id; } } } diff --git a/Entity/System/Quest.cs b/Entity/System/Quest.cs index efb5a12..e65bcd0 100644 --- a/Entity/System/Quest.cs +++ b/Entity/System/Quest.cs @@ -28,11 +28,6 @@ namespace Milimoe.FunGame.Core.Entity (SettleTime.HasValue ? $"\r\n结算时间:{SettleTime.Value.ToString(General.GeneralDateTimeFormatChinese)}" : ""); } - public string GetIdName() - { - return Id + "." + Name; - } - private string GetStatus() { return Status switch diff --git a/Interface/Entity/Base/IBaseEntity.cs b/Interface/Entity/Base/IBaseEntity.cs index c6f8c3f..c4288f3 100644 --- a/Interface/Entity/Base/IBaseEntity.cs +++ b/Interface/Entity/Base/IBaseEntity.cs @@ -5,5 +5,7 @@ public long Id { get; } public Guid Guid { get; } public string Name { get; } + + public string GetIdName(); } } diff --git a/Library/Common/JsonConverter/ClubConverter.cs b/Library/Common/JsonConverter/ClubConverter.cs new file mode 100644 index 0000000..3cc771a --- /dev/null +++ b/Library/Common/JsonConverter/ClubConverter.cs @@ -0,0 +1,98 @@ +using System.Text.Json; +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Interface.Entity; +using Milimoe.FunGame.Core.Library.Common.Architecture; +using Milimoe.FunGame.Core.Library.Constant; +using Milimoe.FunGame.Core.Library.SQLScript.Entity; + +namespace Milimoe.FunGame.Core.Library.Common.JsonConverter +{ + public class ClubConverter : BaseEntityConverter + { + public override Club NewInstance() + { + return new(); + } + + public override void ReadPropertyName(ref Utf8JsonReader reader, string propertyName, JsonSerializerOptions options, ref Club result) + { + switch (propertyName) + { + case nameof(Club.Id): + result.Id = reader.GetInt64(); + break; + case nameof(Club.Guid): + result.Guid = NetworkUtility.JsonDeserialize(ref reader, options); + break; + case nameof(Club.Name): + result.Name = reader.GetString() ?? ""; + break; + case nameof(Club.Prefix): + result.Prefix = reader.GetString() ?? ""; + break; + case nameof(Club.Description): + result.Description = reader.GetString() ?? ""; + break; + case nameof(Club.IsPublic): + result.IsPublic = reader.GetBoolean(); + break; + case nameof(Club.IsNeedApproval): + result.IsNeedApproval = reader.GetBoolean(); + break; + case nameof(Club.ClubPoins): + result.ClubPoins = reader.GetDouble(); + break; + case nameof(Club.Master): + long master = reader.GetInt64(); + result.Master = new(master); + break; + case nameof(Club.Admins): + List admins = NetworkUtility.JsonDeserialize>(ref reader, options) ?? []; + foreach (long id in admins) + { + result.Admins[id] = new(id); + } + break; + case nameof(Club.Members): + List members = NetworkUtility.JsonDeserialize>(ref reader, options) ?? []; + foreach (long id in members) + { + result.Members[id] = new(id); + } + break; + case nameof(Club.Applicants): + List applicants = NetworkUtility.JsonDeserialize>(ref reader, options) ?? []; + foreach (long id in applicants) + { + result.Applicants[id] = new(id); + } + break; + } + } + + public override void Write(Utf8JsonWriter writer, Club value, JsonSerializerOptions options) + { + writer.WriteStartObject(); + + writer.WriteNumber(nameof(Club.Id), value.Id); + writer.WritePropertyName(nameof(Club.Guid)); + JsonSerializer.Serialize(writer, value.Guid, options); + writer.WriteString(nameof(Club.Name), value.Name); + writer.WriteString(nameof(Club.Prefix), value.Prefix); + writer.WriteString(nameof(Club.Description), value.Description); + writer.WriteBoolean(nameof(Club.IsPublic), value.IsPublic); + writer.WriteBoolean(nameof(Club.IsNeedApproval), value.IsNeedApproval); + writer.WriteNumber(nameof(Club.ClubPoins), value.ClubPoins); + writer.WriteNumber(nameof(Club.Master), value.Master?.Id ?? 0); + writer.WritePropertyName(nameof(Club.Admins)); + JsonSerializer.Serialize(writer, value.Admins.Keys, options); + writer.WritePropertyName(nameof(Club.Members)); + JsonSerializer.Serialize(writer, value.Members.Keys, options); + writer.WritePropertyName(nameof(Club.Applicants)); + JsonSerializer.Serialize(writer, value.Applicants.Keys, options); + + writer.WriteEndObject(); + } + } +} diff --git a/Service/JsonManager.cs b/Service/JsonManager.cs index 13c0082..6904cb4 100644 --- a/Service/JsonManager.cs +++ b/Service/JsonManager.cs @@ -21,7 +21,7 @@ namespace Milimoe.FunGame.Core.Service ReferenceHandler = ReferenceHandler.IgnoreCycles, Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter(), new UserConverter(), new RoomConverter(), new CharacterConverter(), new MagicResistanceConverter(), new EquipSlotConverter(), new SkillConverter(), new EffectConverter(), new ItemConverter(), - new InventoryConverter(), new NormalAttackConverter() + new InventoryConverter(), new NormalAttackConverter(), new ClubConverter() } };