From 93eeb195bbecb74c941a0cde51bfe13cd1aa9b49 Mon Sep 17 00:00:00 2001 From: milimoe Date: Thu, 26 Dec 2024 01:09:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=99=AE=E9=80=9A=E6=94=BB?= =?UTF-8?q?=E5=87=BB=E7=B1=BBJSON=E8=BD=AC=E6=8D=A2=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Entity/Character/CharacterBuilder.cs | 1 + .../JsonConverter/CharacterConverter.cs | 8 ++++ .../JsonConverter/NormalAttackConverter.cs | 47 +++++++++++++++++++ Service/JsonManager.cs | 2 +- 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 Library/Common/JsonConverter/NormalAttackConverter.cs diff --git a/Entity/Character/CharacterBuilder.cs b/Entity/Character/CharacterBuilder.cs index 4ccf8c4..c73d608 100644 --- a/Entity/Character/CharacterBuilder.cs +++ b/Entity/Character/CharacterBuilder.cs @@ -251,6 +251,7 @@ namespace Milimoe.FunGame.Core.Entity character.EXP = reference.EXP; } character.NormalAttack.Level = reference.NormalAttack.Level; + character.NormalAttack.HardnessTime = reference.NormalAttack.HardnessTime; character.NormalAttack.SetMagicType(reference.NormalAttack.IsMagic, reference.NormalAttack.MagicType); return character; } diff --git a/Library/Common/JsonConverter/CharacterConverter.cs b/Library/Common/JsonConverter/CharacterConverter.cs index e4ef40c..4c2e711 100644 --- a/Library/Common/JsonConverter/CharacterConverter.cs +++ b/Library/Common/JsonConverter/CharacterConverter.cs @@ -197,6 +197,12 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter case nameof(Character.ExEvadeRate): result.ExEvadeRate = reader.GetDouble(); break; + case nameof(Character.NormalAttack): + NormalAttack normalAttack = NetworkUtility.JsonDeserialize(ref reader, options) ?? new NormalAttack(result); + result.NormalAttack.Level = normalAttack.Level; + result.NormalAttack.HardnessTime = normalAttack.HardnessTime; + result.NormalAttack.SetMagicType(normalAttack.IsMagic, normalAttack.MagicType); + break; case nameof(Character.Skills): HashSet skills = NetworkUtility.JsonDeserialize>(ref reader, options) ?? []; foreach (Skill skill in skills) @@ -280,6 +286,8 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter writer.WriteNumber(nameof(Character.ExCritRate), value.ExCritRate); writer.WriteNumber(nameof(Character.ExCritDMG), value.ExCritDMG); writer.WriteNumber(nameof(Character.ExEvadeRate), value.ExEvadeRate); + writer.WritePropertyName(nameof(Character.NormalAttack)); + JsonSerializer.Serialize(writer, value.NormalAttack, options); writer.WritePropertyName(nameof(Character.Skills)); JsonSerializer.Serialize(writer, value.Skills.Where(s => s.Guid == Guid.Empty), options); writer.WritePropertyName(nameof(Character.Items)); diff --git a/Library/Common/JsonConverter/NormalAttackConverter.cs b/Library/Common/JsonConverter/NormalAttackConverter.cs new file mode 100644 index 0000000..8af273c --- /dev/null +++ b/Library/Common/JsonConverter/NormalAttackConverter.cs @@ -0,0 +1,47 @@ +using System.Text.Json; +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Common.Architecture; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Core.Library.Common.JsonConverter +{ + public class NormalAttackConverter : BaseEntityConverter + { + public override NormalAttack NewInstance() + { + return new NormalAttack(Factory.GetCharacter()); + } + + public override void ReadPropertyName(ref Utf8JsonReader reader, string propertyName, JsonSerializerOptions options, ref NormalAttack result) + { + switch (propertyName) + { + case nameof(NormalAttack.Level): + result.Level = reader.GetInt32(); + break; + case nameof(NormalAttack.HardnessTime): + result.HardnessTime = reader.GetDouble(); + break; + case nameof(NormalAttack.IsMagic): + result.SetMagicType(reader.GetBoolean(), result.MagicType); + break; + case nameof(NormalAttack.MagicType): + result.SetMagicType(result.IsMagic, (MagicType)reader.GetInt32()); + break; + } + } + + public override void Write(Utf8JsonWriter writer, NormalAttack value, JsonSerializerOptions options) + { + writer.WriteStartObject(); + + writer.WriteNumber(nameof(NormalAttack.Level), value.Level); + writer.WriteNumber(nameof(NormalAttack.HardnessTime), value.HardnessTime); + writer.WriteBoolean(nameof(NormalAttack.IsMagic), value.IsMagic); + writer.WriteNumber(nameof(NormalAttack.MagicType), (int)value.MagicType); + + writer.WriteEndObject(); + } + } +} diff --git a/Service/JsonManager.cs b/Service/JsonManager.cs index f00452b..13c0082 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 InventoryConverter(), new NormalAttackConverter() } };