diff --git a/Entity/Character/Character.cs b/Entity/Character/Character.cs
index 6b54e16..bcf8963 100644
--- a/Entity/Character/Character.cs
+++ b/Entity/Character/Character.cs
@@ -151,12 +151,13 @@ namespace Milimoe.FunGame.Core.Entity
public CharacterState CharacterState { get; set; } = CharacterState.Actionable;
///
- /// 角色目前被特效施加的状态 [ 用于设置角色是否被控制的状态 ]
+ /// 角色目前被特效施加的状态 [ 用于设置角色的状态,这些状态会影响角色的行动 ]
///
public Dictionary> CharacterEffectStates { get; } = [];
///
- /// 角色目前被特效施加的控制效果 [ 用于特效判断是否需要在移除特效时更改角色状态 ]
+ /// 角色目前被特效施加的控制效果 [ 用于特效在不同的钩子中更改角色的行为 ]
+ /// 我们需要明确控制效果不一定能造成角色的状态改变(影响角色的行动),但是这些控制状态需要由特效在不同的地方改变角色的行为
///
public Dictionary> CharacterEffectTypes { get; } = [];
@@ -1769,7 +1770,7 @@ namespace Milimoe.FunGame.Core.Entity
}
///
- /// 更新角色的状态
+ /// 更新角色的状态,参见 、 用法
///
///
public CharacterState UpdateCharacterState()
@@ -1804,7 +1805,7 @@ namespace Milimoe.FunGame.Core.Entity
{
CharacterState = CharacterState.ActionRestricted;
}
- else if (isBattleRestricted)
+ else if (isBattleRestricted || (isSkillRestricted && isAttackRestricted))
{
CharacterState = CharacterState.BattleRestricted;
}
diff --git a/Entity/Skill/Effect.cs b/Entity/Skill/Effect.cs
index c85d9ff..ca2b770 100644
--- a/Entity/Skill/Effect.cs
+++ b/Entity/Skill/Effect.cs
@@ -468,7 +468,7 @@ namespace Milimoe.FunGame.Core.Entity
}
///
- /// 打断施法 [ 尽可能的调用此方法而不是直接调用 ,以防止中断性变更 ]
+ /// 打断施法 [ 尽可能的调用此方法而不是直接调用 ,以防止中断性变更 ]
///
///
///
@@ -477,6 +477,57 @@ namespace Milimoe.FunGame.Core.Entity
GamingQueue?.InterruptCastingAsync(caster, interrupter);
}
+ ///
+ /// 打断施法 [ 用于使敌人目标丢失 ] [ 尽可能的调用此方法而不是直接调用 ,以防止中断性变更 ]
+ ///
+ ///
+ public void InterruptCasting(Character interrupter)
+ {
+ GamingQueue?.InterruptCastingAsync(interrupter);
+ }
+
+ ///
+ /// 将特效状态设置到角色上 [ 尽可能的调用此方法而不是自己实现 ]
+ ///
+ ///
+ ///
+ public void AddEffectStatesToCharacter(Character character, List states)
+ {
+ character.CharacterEffectStates.Add(this, states);
+ character.UpdateCharacterState();
+ }
+
+ ///
+ /// 将特效状态从角色身上移除 [ 尽可能的调用此方法而不是自己实现 ]
+ ///
+ ///
+ public void RemoveEffectStatesFromCharacter(Character character)
+ {
+ character.CharacterEffectStates.Remove(this);
+ character.UpdateCharacterState();
+ }
+
+ ///
+ /// 将特效控制效果设置到角色上 [ 尽可能的调用此方法而不是自己实现 ]
+ ///
+ ///
+ ///
+ public void AddEffectTypeToCharacter(Character character, List types)
+ {
+ character.CharacterEffectTypes.Add(this, types);
+ character.UpdateCharacterState();
+ }
+
+ ///
+ /// 将特效控制效果从角色身上移除 [ 尽可能的调用此方法而不是自己实现 ]
+ ///
+ ///
+ public void RemoveEffectTypesFromCharacter(Character character)
+ {
+ character.CharacterEffectTypes.Remove(this);
+ character.UpdateCharacterState();
+ }
+
///
/// 检查角色是否在 AI 控制状态
///