mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-12-05 00:06:02 +00:00
在物品类中添加 AfterCopy 方法,并且为 Copy 添加了复制 Others 的参数;添加任务类的转换器
This commit is contained in:
parent
155b846aa5
commit
2ed01700ef
@ -147,12 +147,12 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
Item newitem;
|
||||
if (itemsDefined != null && itemsDefined.FirstOrDefault(i => i.GetIdName() == item.GetIdName()) is Item itemDefined)
|
||||
{
|
||||
newitem = itemDefined.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
||||
newitem = itemDefined.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||
item.SetPropertyToItemModuleNew(newitem);
|
||||
}
|
||||
else
|
||||
{
|
||||
newitem = item.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
||||
newitem = item.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||
}
|
||||
newitem.Character = character;
|
||||
character.Items.Add(newitem);
|
||||
@ -196,32 +196,32 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
{
|
||||
if (mcp != null)
|
||||
{
|
||||
mcp = mcp.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
||||
mcp = mcp.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||
character.Equip(mcp);
|
||||
}
|
||||
if (w != null)
|
||||
{
|
||||
w = w.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
||||
w = w.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||
character.Equip(w);
|
||||
}
|
||||
if (a != null)
|
||||
{
|
||||
a = a.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
||||
a = a.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||
character.Equip(a);
|
||||
}
|
||||
if (s != null)
|
||||
{
|
||||
s = s.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
||||
s = s.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||
character.Equip(s);
|
||||
}
|
||||
if (ac1 != null)
|
||||
{
|
||||
ac1 = ac1.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
||||
ac1 = ac1.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||
character.Equip(ac1);
|
||||
}
|
||||
if (ac2 != null)
|
||||
{
|
||||
ac2 = ac2.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
||||
ac2 = ac2.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||
character.Equip(ac2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -400,6 +400,14 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 物品完成复制后触发
|
||||
/// </summary>
|
||||
protected virtual void AfterCopy()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
protected Item(ItemType type, bool isInGame = true)
|
||||
{
|
||||
ItemType = type;
|
||||
@ -602,7 +610,7 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
/// 复制一个物品
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Item Copy(bool copyLevel = false, bool copyGuid = false, bool copyProperty = true, IEnumerable<Item>? itemsDefined = null, IEnumerable<Skill>? skillsDefined = null)
|
||||
public Item Copy(bool copyLevel = false, bool copyGuid = false, bool copyProperty = true, bool copyOthers = true, IEnumerable<Item>? itemsDefined = null, IEnumerable<Skill>? skillsDefined = null)
|
||||
{
|
||||
Item item = Factory.OpenFactory.GetInstance<Item>(Id, Name, []);
|
||||
Item? itemDefined = null;
|
||||
@ -654,6 +662,14 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
{
|
||||
item.Others[key] = itemDefined.Others[key];
|
||||
}
|
||||
if (copyOthers)
|
||||
{
|
||||
foreach (string key in Others.Keys)
|
||||
{
|
||||
item.Others[key] = Others[key];
|
||||
}
|
||||
}
|
||||
item.AfterCopy();
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
122
Library/Common/JsonConverter/QuestConverter.cs
Normal file
122
Library/Common/JsonConverter/QuestConverter.cs
Normal file
@ -0,0 +1,122 @@
|
||||
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.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.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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -22,7 +22,7 @@ namespace Milimoe.FunGame.Core.Service
|
||||
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 ClubConverter(), new GoodsConverter(), new StoreConverter(),
|
||||
new NovelOptionConverter(), new NovelNodeConverter(), new ShieldConverter(), new RoundRecordConverter(), new ActivityConverter()
|
||||
new NovelOptionConverter(), new NovelNodeConverter(), new ShieldConverter(), new RoundRecordConverter(), new ActivityConverter(), new QuestConverter()
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user