mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-04-22 03:59:35 +08:00
优化了角色物品栏和装备栏的逻辑;添加了物品、技能、特效的复制方法
This commit is contained in:
parent
dcf922fa3f
commit
83fab0d5e4
@ -38,7 +38,7 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
public CharacterProfile Profile { get; set; }
|
public CharacterProfile Profile { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 角色的详细资料
|
/// 角色的装备
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public EquipSlot EquipSlot { get; set; }
|
public EquipSlot EquipSlot { get; set; }
|
||||||
|
|
||||||
@ -1158,6 +1158,15 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Items.Count > 0)
|
||||||
|
{
|
||||||
|
builder.AppendLine("== 角色背包 ==");
|
||||||
|
foreach (Item item in Items)
|
||||||
|
{
|
||||||
|
builder.Append(item.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (Effects.Where(e => e.EffectType != EffectType.Item).Any())
|
if (Effects.Where(e => e.EffectType != EffectType.Item).Any())
|
||||||
{
|
{
|
||||||
builder.AppendLine("== 状态栏 ==");
|
builder.AppendLine("== 状态栏 ==");
|
||||||
@ -1275,6 +1284,7 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
{
|
{
|
||||||
Character c = new()
|
Character c = new()
|
||||||
{
|
{
|
||||||
|
Id = Id,
|
||||||
Name = Name,
|
Name = Name,
|
||||||
FirstName = FirstName,
|
FirstName = FirstName,
|
||||||
NickName = NickName,
|
NickName = NickName,
|
||||||
@ -1326,11 +1336,15 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
};
|
};
|
||||||
foreach (Skill skill in Skills)
|
foreach (Skill skill in Skills)
|
||||||
{
|
{
|
||||||
c.Skills.Add(skill);
|
Skill newskill = skill.Copy();
|
||||||
|
newskill.Character = c;
|
||||||
|
c.Skills.Add(newskill);
|
||||||
}
|
}
|
||||||
foreach (Item item in Items)
|
foreach (Item item in Items)
|
||||||
{
|
{
|
||||||
c.Items.Add(item);
|
Item newitem = item.Copy();
|
||||||
|
newitem.Character = c;
|
||||||
|
c.Items.Add(newitem);
|
||||||
}
|
}
|
||||||
c.Recovery();
|
c.Recovery();
|
||||||
return c;
|
return c;
|
||||||
|
@ -14,17 +14,17 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 物品的描述
|
/// 物品的描述
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual string Description { get; } = "";
|
public virtual string Description { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 物品的通用描述
|
/// 物品的通用描述
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual string GeneralDescription { get; } = "";
|
public virtual string GeneralDescription { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 物品的背景故事
|
/// 物品的背景故事
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual string BackgroundStory { get; } = "";
|
public virtual string BackgroundStory { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 物品类型
|
/// 物品类型
|
||||||
@ -32,7 +32,17 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
public virtual ItemType ItemType { get; set; } = ItemType.Others;
|
public virtual ItemType ItemType { get; set; } = ItemType.Others;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 物品槽位
|
/// 是否允许装备
|
||||||
|
/// </summary>
|
||||||
|
public bool Equipable { get; set; } = true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否允许取消装备
|
||||||
|
/// </summary>
|
||||||
|
public bool Unequipable { get; set; } = true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 装备槽位
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual EquipSlotType EquipSlotType { get; set; } = EquipSlotType.None;
|
public virtual EquipSlotType EquipSlotType { get; set; } = EquipSlotType.None;
|
||||||
|
|
||||||
@ -56,16 +66,6 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Enable { get; set; } = true;
|
public bool Enable { get; set; } = true;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否允许装备
|
|
||||||
/// </summary>
|
|
||||||
public bool Equipable { get; set; } = true;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否允许取消装备
|
|
||||||
/// </summary>
|
|
||||||
public bool Unequipable { get; set; } = true;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否是局内使用的物品(局内是指对角色生效的物品)
|
/// 是否是局内使用的物品(局内是指对角色生效的物品)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -143,7 +143,6 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
public void OnItemEquip(Character character, EquipItemToSlot type)
|
public void OnItemEquip(Character character, EquipItemToSlot type)
|
||||||
{
|
{
|
||||||
Character = character;
|
Character = character;
|
||||||
Character.Items.Add(this);
|
|
||||||
foreach (Skill skill in Skills.Passives)
|
foreach (Skill skill in Skills.Passives)
|
||||||
{
|
{
|
||||||
if (!skill.IsActive && skill.Level > 0)
|
if (!skill.IsActive && skill.Level > 0)
|
||||||
@ -206,7 +205,6 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
Character.EquipSlot.Accessory2 = null;
|
Character.EquipSlot.Accessory2 = null;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Character.Items.Remove(this);
|
|
||||||
OnItemUnEquipped(Character, this, type);
|
OnItemUnEquipped(Character, this, type);
|
||||||
}
|
}
|
||||||
Character = null;
|
Character = null;
|
||||||
@ -388,6 +386,44 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
item.NextTradableTime = NextTradableTime;
|
item.NextTradableTime = NextTradableTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 复制一个物品
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Item Copy()
|
||||||
|
{
|
||||||
|
Item item = new()
|
||||||
|
{
|
||||||
|
Id = Id,
|
||||||
|
Name = Name,
|
||||||
|
Description = Description,
|
||||||
|
GeneralDescription = GeneralDescription,
|
||||||
|
ItemType = ItemType,
|
||||||
|
Equipable = Equipable,
|
||||||
|
Unequipable = Unequipable,
|
||||||
|
EquipSlotType = EquipSlotType,
|
||||||
|
WeaponType = WeaponType,
|
||||||
|
Key = Key,
|
||||||
|
Enable = Enable,
|
||||||
|
IsInGameItem = IsInGameItem,
|
||||||
|
IsPurchasable = IsPurchasable,
|
||||||
|
Price = Price,
|
||||||
|
IsSellable = IsSellable,
|
||||||
|
NextSellableTime = NextSellableTime,
|
||||||
|
IsTradable = IsTradable,
|
||||||
|
NextTradableTime = NextTradableTime,
|
||||||
|
RemainUseTimes = RemainUseTimes,
|
||||||
|
};
|
||||||
|
item.Skills.Active = Skills.Active?.Copy();
|
||||||
|
foreach (Skill skill in Skills.Passives)
|
||||||
|
{
|
||||||
|
Skill newskill = skill.Copy();
|
||||||
|
newskill.Item = item;
|
||||||
|
item.Skills.Passives.Add(newskill);
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 所属的角色
|
/// 所属的角色
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -19,40 +19,40 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
/// 特殊效果类型<para/>
|
/// 特殊效果类型<para/>
|
||||||
/// 注意:如果技能特效没有原生施加控制效果,请始终保持此属性为 <see cref="EffectType.None"/>。
|
/// 注意:如果技能特效没有原生施加控制效果,请始终保持此属性为 <see cref="EffectType.None"/>。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual EffectType EffectType { get; } = EffectType.None;
|
public virtual EffectType EffectType { get; set; } = EffectType.None;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 作用于自身
|
/// 作用于自身
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual bool TargetSelf { get; } = false;
|
public virtual bool TargetSelf { get; set; } = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 作用目标数量
|
/// 作用目标数量
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual int TargetCount { get; } = 0;
|
public virtual int TargetCount { get; set; } = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 作用范围
|
/// 作用范围
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual double TargetRange { get; } = 0;
|
public virtual double TargetRange { get; set; } = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 持续性的<para/>
|
/// 持续性的<para/>
|
||||||
/// 配合 <see cref="Duration"/> 使用,而不是 <see cref="DurationTurn"/>。
|
/// 配合 <see cref="Duration"/> 使用,而不是 <see cref="DurationTurn"/>。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual bool Durative { get; } = false;
|
public virtual bool Durative { get; set; } = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 持续时间<para/>
|
/// 持续时间<para/>
|
||||||
/// 配合 <see cref="Durative"/> 使用。
|
/// 配合 <see cref="Durative"/> 使用。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual double Duration { get; } = 0;
|
public virtual double Duration { get; set; } = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 持续时间(回合)<para/>
|
/// 持续时间(回合)<para/>
|
||||||
/// 使用此属性需要将 <see cref="Durative"/> 设置为 false。
|
/// 使用此属性需要将 <see cref="Durative"/> 设置为 false。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual int DurationTurn { get; } = 0;
|
public virtual int DurationTurn { get; set; } = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 剩余持续时间
|
/// 剩余持续时间
|
||||||
@ -67,12 +67,12 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 魔法类型
|
/// 魔法类型
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual MagicType MagicType { get; } = MagicType.None;
|
public virtual MagicType MagicType { get; set; } = MagicType.None;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 效果描述
|
/// 效果描述
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual string Description { get; } = "";
|
public virtual string Description { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 等级,跟随技能的等级
|
/// 等级,跟随技能的等级
|
||||||
@ -434,6 +434,29 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
return builder.ToString();
|
return builder.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 复制一个特效
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Effect Copy(Skill skill)
|
||||||
|
{
|
||||||
|
Effect copy = new(skill)
|
||||||
|
{
|
||||||
|
EffectType = EffectType,
|
||||||
|
TargetSelf = TargetSelf,
|
||||||
|
TargetCount = TargetCount,
|
||||||
|
TargetRange = TargetRange,
|
||||||
|
Durative = Durative,
|
||||||
|
Duration = Duration,
|
||||||
|
DurationTurn = DurationTurn,
|
||||||
|
MagicType = MagicType,
|
||||||
|
Description = Description,
|
||||||
|
ActionQueue = ActionQueue
|
||||||
|
};
|
||||||
|
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 比较两个特效
|
/// 比较两个特效
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -118,7 +118,7 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
/// 冷却时间
|
/// 冷却时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[InitRequired]
|
[InitRequired]
|
||||||
public virtual double CD { get; } = 0;
|
public virtual double CD { get; set; } = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 剩余冷却时间 [ 建议配合 <see cref="Enable"/> 属性使用 ]
|
/// 剩余冷却时间 [ 建议配合 <see cref="Enable"/> 属性使用 ]
|
||||||
@ -146,6 +146,11 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public ActionQueue? ActionQueue { get; set; } = null;
|
public ActionQueue? ActionQueue { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 技能是否属于某个物品
|
||||||
|
/// </summary>
|
||||||
|
public Item? Item { get; set; } = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 继承此类实现时,调用基类的构造函数
|
/// 继承此类实现时,调用基类的构造函数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -308,6 +313,35 @@ namespace Milimoe.FunGame.Core.Entity
|
|||||||
return other is Skill c && c.Id + "." + c.Name == Id + "." + Name;
|
return other is Skill c && c.Id + "." + c.Name == Id + "." + Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 复制一个技能
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Skill Copy()
|
||||||
|
{
|
||||||
|
Skill s = new()
|
||||||
|
{
|
||||||
|
Id = Id,
|
||||||
|
Name = Name,
|
||||||
|
Description = Description,
|
||||||
|
GeneralDescription = GeneralDescription,
|
||||||
|
SkillType = SkillType,
|
||||||
|
MPCost = MPCost,
|
||||||
|
CastTime = CastTime,
|
||||||
|
EPCost = EPCost,
|
||||||
|
CD = CD,
|
||||||
|
CurrentCD = CurrentCD,
|
||||||
|
HardnessTime = HardnessTime,
|
||||||
|
ActionQueue = ActionQueue
|
||||||
|
};
|
||||||
|
foreach (Effect e in Effects)
|
||||||
|
{
|
||||||
|
Effect neweffect = e.Copy(s);
|
||||||
|
s.Effects.Add(neweffect);
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 等级
|
/// 等级
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -170,6 +170,20 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
|
|||||||
case nameof(Character.ExEvadeRate):
|
case nameof(Character.ExEvadeRate):
|
||||||
result.ExEvadeRate = reader.GetDouble();
|
result.ExEvadeRate = reader.GetDouble();
|
||||||
break;
|
break;
|
||||||
|
case nameof(Character.Skills):
|
||||||
|
HashSet<Skill> skills = NetworkUtility.JsonDeserialize<HashSet<Skill>>(ref reader, options) ?? [];
|
||||||
|
foreach (Skill skill in skills)
|
||||||
|
{
|
||||||
|
result.Skills.Add(skill);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case nameof(Character.Items):
|
||||||
|
HashSet<Item> items = NetworkUtility.JsonDeserialize<HashSet<Item>>(ref reader, options) ?? [];
|
||||||
|
foreach (Item item in items)
|
||||||
|
{
|
||||||
|
result.Items.Add(item);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,6 +244,10 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
|
|||||||
writer.WriteNumber(nameof(Character.ExCritRate), value.ExCritRate);
|
writer.WriteNumber(nameof(Character.ExCritRate), value.ExCritRate);
|
||||||
writer.WriteNumber(nameof(Character.ExCritDMG), value.ExCritDMG);
|
writer.WriteNumber(nameof(Character.ExCritDMG), value.ExCritDMG);
|
||||||
writer.WriteNumber(nameof(Character.ExEvadeRate), value.ExEvadeRate);
|
writer.WriteNumber(nameof(Character.ExEvadeRate), value.ExEvadeRate);
|
||||||
|
writer.WritePropertyName(nameof(Character.Skills));
|
||||||
|
JsonSerializer.Serialize(writer, value.Skills, options);
|
||||||
|
writer.WritePropertyName(nameof(Character.Items));
|
||||||
|
JsonSerializer.Serialize(writer, value.Items, options);
|
||||||
writer.WriteEndObject();
|
writer.WriteEndObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user