diff --git a/Api/Utility/ActionQueue.cs b/Api/Utility/ActionQueue.cs index 83d792b..ab868ac 100644 --- a/Api/Utility/ActionQueue.cs +++ b/Api/Utility/ActionQueue.cs @@ -170,8 +170,8 @@ namespace Milimoe.FunGame.Core.Api.Utility if (isCheckProtected) { - // 查找保护条件 5人局为3次,9人局为4次 - int countProtected = _queue.Count >= 9 ? 4 : ((_queue.Count >= 5) ? 3 : 2); + // 查找保护条件 被插队超过此次数便能获得插队补偿 即行动保护 + int countProtected = _queue.Count; // 查找队列中是否有满足插队补偿条件的角色(最后一个) var list = _queue @@ -409,6 +409,21 @@ namespace Milimoe.FunGame.Core.Api.Utility WriteLine("[ " + character + $" ] 完全行动不能!"); } + List enemysTemp = new(enemys); + List teammatesTemp = new(teammates); + List skillsTemp = new(skills); + Dictionary continuousKillingTemp = new(_continuousKilling); + Dictionary earnedMoneyTemp = new(_earnedMoney); + foreach (Effect e in character.Effects.Where(e => e.Level > 0).ToList()) + { + if (e.AlterEnemyListBeforeAction(character, enemysTemp, teammatesTemp, skillsTemp, continuousKillingTemp, earnedMoneyTemp)) + { + enemys = enemysTemp.Distinct().ToList(); + teammates = teammatesTemp.Distinct().ToList(); + skills = skillsTemp.Distinct().ToList(); + } + } + if (type == CharacterActionType.NormalAttack) { // 使用普通攻击逻辑 @@ -453,7 +468,7 @@ namespace Milimoe.FunGame.Core.Api.Utility foreach (Effect effect in character.Effects.Where(e => e.Level > 0).ToList()) { - effect.AlterHardnessTimeAfterCastSkill(character, ref baseTime, ref isCheckProtected); + effect.AlterHardnessTimeAfterCastSkill(character, skill, ref baseTime, ref isCheckProtected); } } } @@ -485,7 +500,7 @@ namespace Milimoe.FunGame.Core.Api.Utility foreach (Effect effect in character.Effects.Where(e => e.Level > 0).ToList()) { - effect.AlterHardnessTimeAfterCastSkill(character, ref baseTime, ref isCheckProtected); + effect.AlterHardnessTimeAfterCastSkill(character, skill, ref baseTime, ref isCheckProtected); } } else if (type == CharacterActionType.CastSuperSkill) @@ -515,7 +530,7 @@ namespace Milimoe.FunGame.Core.Api.Utility foreach (Effect effect in character.Effects.Where(e => e.Level > 0).ToList()) { - effect.AlterHardnessTimeAfterCastSkill(character, ref baseTime, ref isCheckProtected); + effect.AlterHardnessTimeAfterCastSkill(character, skill, ref baseTime, ref isCheckProtected); } } else if (type == CharacterActionType.UseItem) diff --git a/Entity/Skill/Effect.cs b/Entity/Skill/Effect.cs index 1e90cfa..7519396 100644 --- a/Entity/Skill/Effect.cs +++ b/Entity/Skill/Effect.cs @@ -177,9 +177,10 @@ namespace Milimoe.FunGame.Core.Entity /// 在完成释放技能动作之后修改硬直时间 /// /// + /// /// /// - public virtual void AlterHardnessTimeAfterCastSkill(Character character, ref double baseHardnessTime, ref bool isCheckProtected) + public virtual void AlterHardnessTimeAfterCastSkill(Character character, Skill skill, ref double baseHardnessTime, ref bool isCheckProtected) { } @@ -336,11 +337,28 @@ namespace Milimoe.FunGame.Core.Entity /// /// 角色属性发生变化 /// + /// public virtual void OnAttributeChanged(Character character) { } + /// + /// 行动开始前,修改可选择的 , , 列表 + /// 注意 是副本,修改无效 + /// + /// + /// + /// + /// + /// + /// + /// 返回 true 表示更改生效 + public virtual bool AlterEnemyListBeforeAction(Character character, List enemys, List teammates, List skills, Dictionary continuousKilling, Dictionary earnedMoney) + { + return false; + } + /// /// 对敌人造成技能伤害 [ 强烈建议使用此方法造成伤害而不是自行调用 ] /// @@ -368,6 +386,10 @@ namespace Milimoe.FunGame.Core.Entity ActionQueue?.InterruptCasting(caster, interrupter); } + /// + /// 返回特效详情 + /// + /// public override string ToString() { StringBuilder builder = new(); @@ -386,6 +408,11 @@ namespace Milimoe.FunGame.Core.Entity return builder.ToString(); } + /// + /// 比较两个特效 + /// + /// + /// public override bool Equals(IBaseEntity? other) { return other is Effect c && c.Name == Name; diff --git a/Entity/Skill/Skill.cs b/Entity/Skill/Skill.cs index 13bf24b..6d46887 100644 --- a/Entity/Skill/Skill.cs +++ b/Entity/Skill/Skill.cs @@ -176,26 +176,26 @@ namespace Milimoe.FunGame.Core.Entity /// /// 技能开始吟唱时 [ 吟唱魔法、释放战技和爆发技、预释放爆发技均可触发 ] /// - public void OnSkillCasting(ActionQueue queue, Character actor) + public void OnSkillCasting(ActionQueue queue, Character caster) { ActionQueue = queue; foreach (Effect e in Effects) { e.ActionQueue = ActionQueue; - e.OnSkillCasting(actor); + e.OnSkillCasting(caster); } } /// /// 触发技能效果 /// - public void OnSkillCasted(ActionQueue queue, Character actor, List enemys, List teammates) + public void OnSkillCasted(ActionQueue queue, Character caster, List enemys, List teammates) { ActionQueue = queue; foreach (Effect e in Effects) { e.ActionQueue = ActionQueue; - e.OnSkillCasted(actor, enemys, teammates, OtherArgs); + e.OnSkillCasted(caster, enemys, teammates, OtherArgs); } }