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()
}
};