mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-12-05 16:16:33 +00:00
135 lines
6.6 KiB
C#
135 lines
6.6 KiB
C#
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 QuestConverter : BaseEntityConverter<Quest>
|
|
{
|
|
public override Quest NewInstance()
|
|
{
|
|
return new Quest();
|
|
}
|
|
|
|
public override void ReadPropertyName(ref Utf8JsonReader reader, string propertyName, JsonSerializerOptions options, ref Quest result, Dictionary<string, object> convertingContext)
|
|
{
|
|
switch (propertyName)
|
|
{
|
|
case nameof(Quest.Id):
|
|
result.Id = reader.GetInt64();
|
|
break;
|
|
case nameof(Quest.Guid):
|
|
result.Guid = NetworkUtility.JsonDeserialize<Guid>(ref reader, options);
|
|
break;
|
|
case nameof(Quest.Name):
|
|
result.Name = reader.GetString() ?? "";
|
|
break;
|
|
case nameof(Quest.Description):
|
|
result.Description = reader.GetString() ?? "";
|
|
break;
|
|
case nameof(Quest.Status):
|
|
result.Status = (QuestState)reader.GetInt32();
|
|
break;
|
|
case nameof(Quest.CharacterId):
|
|
result.CharacterId = reader.GetInt64();
|
|
break;
|
|
case nameof(Quest.RegionId):
|
|
result.RegionId = reader.GetInt64();
|
|
break;
|
|
case nameof(Quest.NeedyExploreCharacterName):
|
|
result.NeedyExploreCharacterName = reader.GetString() ?? "";
|
|
break;
|
|
case nameof(Quest.NeedyExploreItemName):
|
|
result.NeedyExploreItemName = reader.GetString() ?? "";
|
|
break;
|
|
case nameof(Quest.NeedyExploreEventName):
|
|
result.NeedyExploreEventName = reader.GetString() ?? "";
|
|
break;
|
|
case nameof(Quest.CreditsAward):
|
|
result.CreditsAward = reader.GetDouble();
|
|
break;
|
|
case nameof(Quest.MaterialsAward):
|
|
result.MaterialsAward = reader.GetDouble();
|
|
break;
|
|
case nameof(Quest.Awards):
|
|
List<Item> awards = NetworkUtility.JsonDeserialize<List<Item>>(ref reader, options) ?? [];
|
|
foreach (Item item in awards)
|
|
{
|
|
result.Awards.Add(item);
|
|
}
|
|
break;
|
|
case nameof(Quest.AwardsCount):
|
|
Dictionary<string, int> dict = NetworkUtility.JsonDeserialize<Dictionary<string, int>>(ref reader, options) ?? [];
|
|
foreach (string key in dict.Keys)
|
|
{
|
|
result.AwardsCount[key] = dict[key];
|
|
}
|
|
break;
|
|
case nameof(Quest.StartTime):
|
|
string startTimeStr = reader.GetString() ?? "";
|
|
if (DateTime.TryParseExact(startTimeStr, General.GeneralDateTimeFormat, null, System.Globalization.DateTimeStyles.None, out DateTime startTime))
|
|
{
|
|
result.StartTime = startTime;
|
|
}
|
|
break;
|
|
case nameof(Quest.SettleTime):
|
|
string settleTimeStr = reader.GetString() ?? "";
|
|
if (DateTime.TryParseExact(settleTimeStr, General.GeneralDateTimeFormat, null, System.Globalization.DateTimeStyles.None, out DateTime settleTime))
|
|
{
|
|
result.SettleTime = settleTime;
|
|
}
|
|
break;
|
|
case nameof(Quest.QuestType):
|
|
result.QuestType = (QuestType)reader.GetInt32();
|
|
break;
|
|
case nameof(Quest.EstimatedMinutes):
|
|
result.EstimatedMinutes = reader.GetInt32();
|
|
break;
|
|
case nameof(Quest.Progress):
|
|
result.Progress = reader.GetInt32();
|
|
break;
|
|
case nameof(Quest.MaxProgress):
|
|
result.MaxProgress = reader.GetInt32();
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override void Write(Utf8JsonWriter writer, Quest value, JsonSerializerOptions options)
|
|
{
|
|
writer.WriteStartObject();
|
|
|
|
writer.WriteNumber(nameof(Quest.Id), value.Id);
|
|
if (value.Guid != Guid.Empty)
|
|
{
|
|
writer.WritePropertyName(nameof(Quest.Guid));
|
|
JsonSerializer.Serialize(writer, value.Guid, options);
|
|
}
|
|
writer.WriteString(nameof(Quest.Name), value.Name);
|
|
writer.WriteString(nameof(Quest.Description), value.Description);
|
|
writer.WriteNumber(nameof(Quest.Status), (int)value.Status);
|
|
writer.WriteNumber(nameof(Quest.CharacterId), value.CharacterId);
|
|
writer.WriteNumber(nameof(Quest.RegionId), value.RegionId);
|
|
writer.WriteString(nameof(Quest.NeedyExploreCharacterName), value.NeedyExploreCharacterName);
|
|
writer.WriteString(nameof(Quest.NeedyExploreItemName), value.NeedyExploreItemName);
|
|
writer.WriteString(nameof(Quest.NeedyExploreEventName), value.NeedyExploreEventName);
|
|
writer.WriteNumber(nameof(Quest.CreditsAward), value.CreditsAward);
|
|
writer.WriteNumber(nameof(Quest.MaterialsAward), value.MaterialsAward);
|
|
writer.WritePropertyName(nameof(Quest.Awards));
|
|
JsonSerializer.Serialize(writer, value.Awards, options);
|
|
writer.WritePropertyName(nameof(Quest.AwardsCount));
|
|
JsonSerializer.Serialize(writer, value.AwardsCount, options);
|
|
writer.WriteString(nameof(Quest.AwardsString), value.AwardsString);
|
|
if (value.StartTime != null) writer.WriteString(nameof(Quest.StartTime), value.StartTime.Value.ToString(General.GeneralDateTimeFormat));
|
|
if (value.SettleTime != null) writer.WriteString(nameof(Quest.SettleTime), value.SettleTime.Value.ToString(General.GeneralDateTimeFormat));
|
|
writer.WriteNumber(nameof(Quest.QuestType), (int)value.QuestType);
|
|
writer.WriteNumber(nameof(Quest.EstimatedMinutes), value.EstimatedMinutes);
|
|
writer.WriteNumber(nameof(Quest.Progress), value.Progress);
|
|
writer.WriteNumber(nameof(Quest.MaxProgress), value.MaxProgress);
|
|
|
|
writer.WriteEndObject();
|
|
}
|
|
}
|
|
}
|