添加社团功能

This commit is contained in:
milimoe 2025-01-06 01:43:49 +08:00
parent 188316e1ef
commit 98fcbf1a6c
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
8 changed files with 121 additions and 35 deletions

View File

@ -5,12 +5,12 @@ namespace Milimoe.FunGame.Core.Entity
public abstract class BaseEntity : IBaseEntity public abstract class BaseEntity : IBaseEntity
{ {
/// <summary> /// <summary>
/// 实体的数字ID /// 实体的数字 ID
/// </summary> /// </summary>
public virtual long Id { get; set; } = 0; public virtual long Id { get; set; } = 0;
/// <summary> /// <summary>
/// 实体的唯一ID /// 实体的唯一 ID
/// </summary> /// </summary>
public virtual Guid Guid { get; set; } = Guid.Empty; public virtual Guid Guid { get; set; } = Guid.Empty;
@ -19,6 +19,20 @@ namespace Milimoe.FunGame.Core.Entity
/// </summary> /// </summary>
public virtual string Name { get; set; } = ""; public virtual string Name { get; set; } = "";
/// <summary>
/// 比较两个实体是否相同
/// </summary>
/// <param name="other"></param>
/// <returns></returns>
public abstract bool Equals(IBaseEntity? other); public abstract bool Equals(IBaseEntity? other);
/// <summary>
/// 获取实体的 Id.Name
/// </summary>
/// <returns></returns>
public string GetIdName()
{
return Id + "." + Name;
}
} }
} }

View File

@ -414,15 +414,6 @@ namespace Milimoe.FunGame.Core.Entity
internal Item() { } internal Item() { }
/// <summary>
/// Id.Name
/// </summary>
/// <returns></returns>
public string GetIdName()
{
return Id + "." + Name;
}
/// <summary> /// <summary>
/// 显示物品的详细信息 /// 显示物品的详细信息
/// </summary> /// </summary>

View File

@ -442,15 +442,6 @@ namespace Milimoe.FunGame.Core.Entity
return builder.ToString(); return builder.ToString();
} }
/// <summary>
/// Id.Name
/// </summary>
/// <returns></returns>
public string GetIdName()
{
return Id + "." + Name;
}
/// <summary> /// <summary>
/// 判断两个技能是否相同 检查Id.Name /// 判断两个技能是否相同 检查Id.Name
/// </summary> /// </summary>

View File

@ -10,18 +10,13 @@ namespace Milimoe.FunGame.Core.Entity
public bool IsPublic { get; set; } = false; public bool IsPublic { get; set; } = false;
public double ClubPoins { get; set; } = 0; public double ClubPoins { get; set; } = 0;
public User? Master { get; set; } public User? Master { get; set; }
public Dictionary<string, User> Admins { get; set; } = []; public Dictionary<long, User> Admins { get; set; } = [];
public Dictionary<string, User> Members { get; set; } = []; public Dictionary<long, User> Members { get; set; } = [];
public Dictionary<string, User> Applicants { get; set; } = []; public Dictionary<long, User> Applicants { get; set; } = [];
public bool Equals(Club other)
{
return Equals(other);
}
public override bool Equals(IBaseEntity? other) public override bool Equals(IBaseEntity? other)
{ {
return other?.Id == Id; return other is Club && other?.Id == Id;
} }
} }
} }

View File

@ -28,11 +28,6 @@ namespace Milimoe.FunGame.Core.Entity
(SettleTime.HasValue ? $"\r\n结算时间{SettleTime.Value.ToString(General.GeneralDateTimeFormatChinese)}" : ""); (SettleTime.HasValue ? $"\r\n结算时间{SettleTime.Value.ToString(General.GeneralDateTimeFormatChinese)}" : "");
} }
public string GetIdName()
{
return Id + "." + Name;
}
private string GetStatus() private string GetStatus()
{ {
return Status switch return Status switch

View File

@ -5,5 +5,7 @@
public long Id { get; } public long Id { get; }
public Guid Guid { get; } public Guid Guid { get; }
public string Name { get; } public string Name { get; }
public string GetIdName();
} }
} }

View File

@ -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<Club>
{
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<Guid>(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<long> admins = NetworkUtility.JsonDeserialize<List<long>>(ref reader, options) ?? [];
foreach (long id in admins)
{
result.Admins[id] = new(id);
}
break;
case nameof(Club.Members):
List<long> members = NetworkUtility.JsonDeserialize<List<long>>(ref reader, options) ?? [];
foreach (long id in members)
{
result.Members[id] = new(id);
}
break;
case nameof(Club.Applicants):
List<long> applicants = NetworkUtility.JsonDeserialize<List<long>>(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();
}
}
}

View File

@ -21,7 +21,7 @@ namespace Milimoe.FunGame.Core.Service
ReferenceHandler = ReferenceHandler.IgnoreCycles, ReferenceHandler = ReferenceHandler.IgnoreCycles,
Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter(), new UserConverter(), new RoomConverter(), Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter(), new UserConverter(), new RoomConverter(),
new CharacterConverter(), new MagicResistanceConverter(), new EquipSlotConverter(), new SkillConverter(), new EffectConverter(), new ItemConverter(), new CharacterConverter(), new MagicResistanceConverter(), new EquipSlotConverter(), new SkillConverter(), new EffectConverter(), new ItemConverter(),
new InventoryConverter(), new NormalAttackConverter() new InventoryConverter(), new NormalAttackConverter(), new ClubConverter()
} }
}; };