diff --git a/Model/PrefabricatedEntity/CourageCommandSkill.cs b/Model/PrefabricatedEntity/CourageCommandSkill.cs
index aa2bd95..f934f78 100644
--- a/Model/PrefabricatedEntity/CourageCommandSkill.cs
+++ b/Model/PrefabricatedEntity/CourageCommandSkill.cs
@@ -5,7 +5,7 @@ namespace Milimoe.FunGame.Core.Model.PrefabricatedEntity
///
/// 继承此类以表示勇气指令技能
///
- public class CourageCommandSkill : Skill
+ public class CourageCommandSkill(long id, string name, Dictionary args, Character? character = null) : OpenSkill(id, name, args, character)
{
}
diff --git a/Model/PrefabricatedEntity/MagicCardPack.cs b/Model/PrefabricatedEntity/MagicCardPack.cs
index b63ea2f..5fc6592 100644
--- a/Model/PrefabricatedEntity/MagicCardPack.cs
+++ b/Model/PrefabricatedEntity/MagicCardPack.cs
@@ -6,7 +6,7 @@ namespace Milimoe.FunGame.Core.Model.PrefabricatedEntity
///
/// 魔法卡包的基础实现
///
- public class MagicCardPack : Item
+ public class MagicCardPack : OpenItem
{
public override ItemType ItemType => ItemType.MagicCardPack;
@@ -16,9 +16,14 @@ namespace Milimoe.FunGame.Core.Model.PrefabricatedEntity
public HashSet Magics => Skills.Magics;
///
- /// 属性增强:增加角色额外核心属性
+ /// 动态矩阵:增加角色额外核心属性
///
- public HashSet AttributeBoosts { get; } = [];
+ public Dictionary AttributeBoosts { get; } = new()
+ {
+ { PrimaryAttribute.STR, 0 },
+ { PrimaryAttribute.AGI, 0 },
+ { PrimaryAttribute.INT, 0 }
+ };
///
/// 同频共振:强制转换角色的核心属性为该属性 [ 优先级:仅在装备时改变,覆盖该时刻的核心属性,后续可被其他物品/技能覆盖 ]
@@ -45,23 +50,46 @@ namespace Milimoe.FunGame.Core.Model.PrefabricatedEntity
///
private PrimaryAttribute _originalAttribute = PrimaryAttribute.None;
- protected override void OnItemEquipped(Character character, EquipSlotType type)
+ public MagicCardPack(long id, string name, Dictionary args) : base(id, name, args)
{
- foreach (AttributeBoost ab in AttributeBoosts)
+ foreach (string key in args.Keys)
{
- switch (ab.PrimaryAttribute)
+ switch (key.ToLower())
{
- case PrimaryAttribute.AGI:
- character.ExAGI += ab.Value;
+ case "exstr":
+ if (double.TryParse(args[key].ToString(), out double strValue))
+ {
+ AttributeBoosts[PrimaryAttribute.STR] = strValue;
+ }
break;
- case PrimaryAttribute.INT:
- character.ExINT += ab.Value;
+ case "exagi":
+ if (double.TryParse(args[key].ToString(), out double agiValue))
+ {
+ AttributeBoosts[PrimaryAttribute.AGI] = agiValue;
+ }
break;
- default:
- character.ExSTR += ab.Value;
+ case "exint":
+ if (double.TryParse(args[key].ToString(), out double intValue))
+ {
+ AttributeBoosts[PrimaryAttribute.INT] = intValue;
+ }
+ break;
+ case "res":
+ case "resonance":
+ if (Enum.TryParse(args[key].ToString(), out PrimaryAttribute resonance))
+ {
+ Resonance = resonance;
+ }
break;
}
}
+ }
+
+ protected override void OnItemEquipped(Character character, EquipSlotType type)
+ {
+ character.ExSTR += AttributeBoosts[PrimaryAttribute.STR];
+ character.ExAGI += AttributeBoosts[PrimaryAttribute.AGI];
+ character.ExINT += AttributeBoosts[PrimaryAttribute.INT];
if (Resonance != PrimaryAttribute.None)
{
_originalAttribute = character.PrimaryAttribute;
@@ -84,21 +112,9 @@ namespace Milimoe.FunGame.Core.Model.PrefabricatedEntity
protected override void OnItemUnEquipped(Character character, EquipSlotType type)
{
- foreach (AttributeBoost ab in AttributeBoosts)
- {
- switch (ab.PrimaryAttribute)
- {
- case PrimaryAttribute.AGI:
- character.ExAGI -= ab.Value;
- break;
- case PrimaryAttribute.INT:
- character.ExINT -= ab.Value;
- break;
- default:
- character.ExSTR -= ab.Value;
- break;
- }
- }
+ character.ExSTR -= AttributeBoosts[PrimaryAttribute.STR];
+ character.ExAGI -= AttributeBoosts[PrimaryAttribute.AGI];
+ character.ExINT -= AttributeBoosts[PrimaryAttribute.INT];
if (_originalAttribute != PrimaryAttribute.None)
{
character.PrimaryAttribute = _originalAttribute;
diff --git a/Model/PrefabricatedEntity/SoulboundSkill.cs b/Model/PrefabricatedEntity/SoulboundSkill.cs
index d5cc0dc..b589668 100644
--- a/Model/PrefabricatedEntity/SoulboundSkill.cs
+++ b/Model/PrefabricatedEntity/SoulboundSkill.cs
@@ -5,7 +5,7 @@ namespace Milimoe.FunGame.Core.Model.PrefabricatedEntity
///
/// 继承此类以表示灵魂绑定技能
///
- public class SoulboundSkill : Skill
+ public class SoulboundSkill(long id, string name, Dictionary args, Character? character = null) : OpenSkill(id, name, args, character)
{
public override bool CostAllEP => true;
public override double MinCostEP => 100;