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;
|
Item newitem;
|
||||||
if (itemsDefined != null && itemsDefined.FirstOrDefault(i => i.GetIdName() == item.GetIdName()) is Item itemDefined)
|
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);
|
item.SetPropertyToItemModuleNew(newitem);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newitem = item.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
newitem = item.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||||
}
|
}
|
||||||
newitem.Character = character;
|
newitem.Character = character;
|
||||||
character.Items.Add(newitem);
|
character.Items.Add(newitem);
|
||||||
@ -196,32 +196,32 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
{
|
{
|
||||||
if (mcp != null)
|
if (mcp != null)
|
||||||
{
|
{
|
||||||
mcp = mcp.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
mcp = mcp.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||||
character.Equip(mcp);
|
character.Equip(mcp);
|
||||||
}
|
}
|
||||||
if (w != null)
|
if (w != null)
|
||||||
{
|
{
|
||||||
w = w.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
w = w.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||||
character.Equip(w);
|
character.Equip(w);
|
||||||
}
|
}
|
||||||
if (a != null)
|
if (a != null)
|
||||||
{
|
{
|
||||||
a = a.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
a = a.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||||
character.Equip(a);
|
character.Equip(a);
|
||||||
}
|
}
|
||||||
if (s != null)
|
if (s != null)
|
||||||
{
|
{
|
||||||
s = s.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
s = s.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||||
character.Equip(s);
|
character.Equip(s);
|
||||||
}
|
}
|
||||||
if (ac1 != null)
|
if (ac1 != null)
|
||||||
{
|
{
|
||||||
ac1 = ac1.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
ac1 = ac1.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||||
character.Equip(ac1);
|
character.Equip(ac1);
|
||||||
}
|
}
|
||||||
if (ac2 != null)
|
if (ac2 != null)
|
||||||
{
|
{
|
||||||
ac2 = ac2.Copy(true, !newItemGuid, true, itemsDefined, skillsDefined);
|
ac2 = ac2.Copy(true, !newItemGuid, true, true, itemsDefined, skillsDefined);
|
||||||
character.Equip(ac2);
|
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)
|
protected Item(ItemType type, bool isInGame = true)
|
||||||
{
|
{
|
||||||
ItemType = type;
|
ItemType = type;
|
||||||
@ -602,7 +610,7 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
/// 复制一个物品
|
/// 复制一个物品
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <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 item = Factory.OpenFactory.GetInstance<Item>(Id, Name, []);
|
||||||
Item? itemDefined = null;
|
Item? itemDefined = null;
|
||||||
@ -654,6 +662,14 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
{
|
{
|
||||||
item.Others[key] = itemDefined.Others[key];
|
item.Others[key] = itemDefined.Others[key];
|
||||||
}
|
}
|
||||||
|
if (copyOthers)
|
||||||
|
{
|
||||||
|
foreach (string key in Others.Keys)
|
||||||
|
{
|
||||||
|
item.Others[key] = Others[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
item.AfterCopy();
|
||||||
return item;
|
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(),
|
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 ClubConverter(), new GoodsConverter(), new StoreConverter(),
|
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