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 控制状态 ///