diff --git a/Entity/Character/Character.cs b/Entity/Character/Character.cs
index 89ec436..81e6a70 100644
--- a/Entity/Character/Character.cs
+++ b/Entity/Character/Character.cs
@@ -236,7 +236,7 @@ namespace Milimoe.FunGame.Core.Entity
public double ExMP2 { get; set; } = 0;
///
- /// 额外魔法值2 [ 额外魔法值% ]
+ /// 额外魔法值3 [ 额外魔法值% ]
///
public double ExMP3 => (BaseMP + ExMP + ExMP2) * ExMPPercentage;
@@ -339,11 +339,21 @@ namespace Milimoe.FunGame.Core.Entity
/// 额外攻击力2 [ 与技能和物品相关 ]
///
public double ExATK2 { get; set; } = 0;
+
+ ///
+ /// 额外攻击力3 [ 额外攻击力% ]
+ ///
+ public double ExATK3 => (BaseATK + ExATK + ExATK2) * ExATKPercentage;
///
- /// 攻击力 = 基础攻击力 + 额外攻击力 + 额外攻击力2
+ /// 额外攻击力% [ 与技能和物品相关 ]
///
- public double ATK => BaseATK + ExATK + ExATK2;
+ public double ExATKPercentage { get; set; } = 0;
+
+ ///
+ /// 攻击力 = 基础攻击力 + 额外攻击力 + 额外攻击力2 + 额外攻击力3
+ ///
+ public double ATK => BaseATK + ExATK + ExATK2 + ExATK3;
///
/// 初始物理护甲 [ 初始设定 ]
@@ -367,9 +377,19 @@ namespace Milimoe.FunGame.Core.Entity
public double ExDEF2 { get; set; } = 0;
///
- /// 物理护甲 = 基础物理护甲 + 额外物理护甲 + 额外物理护甲2
+ /// 额外物理护甲3 [ 额外物理护甲% ]
///
- public double DEF => BaseDEF + ExDEF + ExDEF2;
+ public double ExDEF3 => (BaseDEF + ExDEF + ExDEF2) * ExDEFPercentage;
+
+ ///
+ /// 额外物理护甲% [ 与技能和物品相关 ]
+ ///
+ public double ExDEFPercentage { get; set; } = 0;
+
+ ///
+ /// 物理护甲 = 基础物理护甲 + 额外物理护甲 + 额外物理护甲2 + 额外物理护甲3
+ ///
+ public double DEF => BaseDEF + ExDEF + ExDEF2 + ExDEF3;
///
/// 物理伤害减免(%) = [ 与物理护甲相关 ] + 额外物理伤害减免(%)
@@ -575,19 +595,49 @@ namespace Milimoe.FunGame.Core.Entity
public double ExINT { get; set; } = 0;
///
- /// 力量 = 基础力量 + 额外力量
+ /// 额外力量2 [ 额外力量% ]
///
- public double STR => BaseSTR + ExSTR;
+ public double ExSTR2 => (BaseSTR + ExSTR) * ExSTRPercentage;
///
- /// 敏捷 = 基础敏捷 + 额外敏捷
+ /// 额外敏捷2 [ 额外敏捷% ]
///
- public double AGI => BaseAGI + ExAGI;
+ public double ExAGI2 => (BaseAGI + ExAGI) * ExAGIPercentage;
///
- /// 智力 = 基础智力 + 额外智力
+ /// 额外智力2 [ 额外智力% ]
///
- public double INT => BaseINT + ExINT;
+ public double ExINT2 => (BaseINT + ExINT) * ExINTPercentage;
+
+ ///
+ /// 额外力量% [ 与技能和物品相关 ]
+ ///
+ public double ExSTRPercentage { get; set; } = 0;
+
+ ///
+ /// 额外敏捷% [ 与技能和物品相关 ]
+ ///
+ public double ExAGIPercentage { get; set; } = 0;
+
+ ///
+ /// 额外智力% [ 与技能和物品相关 ]
+ ///
+ public double ExINTPercentage { get; set; } = 0;
+
+ ///
+ /// 力量 = 基础力量 + 额外力量 + 额外力量2
+ ///
+ public double STR => BaseSTR + ExSTR + ExSTR2;
+
+ ///
+ /// 敏捷 = 基础敏捷 + 额外敏捷 + 额外敏捷2
+ ///
+ public double AGI => BaseAGI + ExAGI + ExAGI2;
+
+ ///
+ /// 智力 = 基础智力 + 额外智力 + 额外智力2
+ ///
+ public double INT => BaseINT + ExINT + ExINT2;
///
/// 力量成长值(+BaseSTR/Lv)
diff --git a/Library/Common/JsonConverter/CharacterConverter.cs b/Library/Common/JsonConverter/CharacterConverter.cs
index 995ad0a..752bcb8 100644
--- a/Library/Common/JsonConverter/CharacterConverter.cs
+++ b/Library/Common/JsonConverter/CharacterConverter.cs
@@ -89,15 +89,21 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
case nameof(Character.InitialATK):
result.InitialATK = reader.GetDouble();
break;
- case nameof(Character.ExATK):
+ case nameof(Character.ExATK2):
result.ExATK2 = reader.GetDouble();
break;
+ case nameof(Character.ExATKPercentage):
+ result.ExATKPercentage = reader.GetDouble();
+ break;
case nameof(Character.InitialDEF):
result.InitialDEF = reader.GetDouble();
break;
- case nameof(Character.ExDEF):
+ case nameof(Character.ExDEF2):
result.ExDEF2 = reader.GetDouble();
break;
+ case nameof(Character.ExDEFPercentage):
+ result.ExDEFPercentage = reader.GetDouble();
+ break;
case nameof(Character.MDF):
result.MDF = NetworkUtility.JsonDeserialize(ref reader, options) ?? new();
break;
@@ -143,6 +149,15 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
case nameof(Character.ExINT):
result.ExINT = reader.GetDouble();
break;
+ case nameof(Character.ExSTRPercentage):
+ result.ExSTRPercentage = reader.GetDouble();
+ break;
+ case nameof(Character.ExAGIPercentage):
+ result.ExAGIPercentage = reader.GetDouble();
+ break;
+ case nameof(Character.ExINTPercentage):
+ result.ExINTPercentage = reader.GetDouble();
+ break;
case nameof(Character.STRGrowth):
result.STRGrowth = reader.GetDouble();
break;
@@ -227,8 +242,10 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
writer.WriteNumber(nameof(Character.EP), value.EP);
writer.WriteNumber(nameof(Character.InitialATK), value.InitialATK);
writer.WriteNumber(nameof(Character.ExATK2), value.ExATK2);
+ writer.WriteNumber(nameof(Character.ExATKPercentage), value.ExATKPercentage);
writer.WriteNumber(nameof(Character.InitialDEF), value.InitialDEF);
writer.WriteNumber(nameof(Character.ExDEF2), value.ExDEF2);
+ writer.WriteNumber(nameof(Character.ExDEFPercentage), value.ExDEFPercentage);
writer.WritePropertyName(nameof(Character.MDF));
JsonSerializer.Serialize(writer, value.MDF, options);
writer.WriteNumber(nameof(Character.PhysicalPenetration), value.PhysicalPenetration);
@@ -244,6 +261,9 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
writer.WriteNumber(nameof(Character.ExSTR), value.ExSTR);
writer.WriteNumber(nameof(Character.ExAGI), value.ExAGI);
writer.WriteNumber(nameof(Character.ExINT), value.ExINT);
+ writer.WriteNumber(nameof(Character.ExSTRPercentage), value.ExSTRPercentage);
+ writer.WriteNumber(nameof(Character.ExAGIPercentage), value.ExAGIPercentage);
+ writer.WriteNumber(nameof(Character.ExINTPercentage), value.ExINTPercentage);
writer.WriteNumber(nameof(Character.STRGrowth), value.STRGrowth);
writer.WriteNumber(nameof(Character.AGIGrowth), value.AGIGrowth);
writer.WriteNumber(nameof(Character.INTGrowth), value.INTGrowth);