添加 AlterEnemyListBeforeAction

This commit is contained in:
milimoe 2024-09-13 00:02:56 +08:00
parent dc008b1d95
commit 64ce1f8c92
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
3 changed files with 52 additions and 10 deletions

View File

@ -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<Character> enemysTemp = new(enemys);
List<Character> teammatesTemp = new(teammates);
List<Skill> skillsTemp = new(skills);
Dictionary<Character, int> continuousKillingTemp = new(_continuousKilling);
Dictionary<Character, int> 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)

View File

@ -177,9 +177,10 @@ namespace Milimoe.FunGame.Core.Entity
/// 在完成释放技能动作之后修改硬直时间
/// </summary>
/// <param name="character"></param>
/// <param name="skill"></param>
/// <param name="baseHardnessTime"></param>
/// <param name="isCheckProtected"></param>
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
/// <summary>
/// 角色属性发生变化
/// </summary>
/// <param name="character"></param>
public virtual void OnAttributeChanged(Character character)
{
}
/// <summary>
/// 行动开始前,修改可选择的 <paramref name="enemys"/>, <paramref name="teammates"/>, <paramref name="skills"/> 列表<para/>
/// 注意 <paramref name="continuousKilling"/> 和 <paramref name="earnedMoney"/> 是副本,修改无效
/// </summary>
/// <param name="character"></param>
/// <param name="enemys"></param>
/// <param name="teammates"></param>
/// <param name="skills"></param>
/// <param name="continuousKilling"></param>
/// <param name="earnedMoney"></param>
/// <returns>返回 true 表示更改生效</returns>
public virtual bool AlterEnemyListBeforeAction(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, Dictionary<Character, int> continuousKilling, Dictionary<Character, int> earnedMoney)
{
return false;
}
/// <summary>
/// 对敌人造成技能伤害 [ 强烈建议使用此方法造成伤害而不是自行调用 <see cref="ActionQueue.DamageToEnemy"/> ]
/// </summary>
@ -368,6 +386,10 @@ namespace Milimoe.FunGame.Core.Entity
ActionQueue?.InterruptCasting(caster, interrupter);
}
/// <summary>
/// 返回特效详情
/// </summary>
/// <returns></returns>
public override string ToString()
{
StringBuilder builder = new();
@ -386,6 +408,11 @@ namespace Milimoe.FunGame.Core.Entity
return builder.ToString();
}
/// <summary>
/// 比较两个特效
/// </summary>
/// <param name="other"></param>
/// <returns></returns>
public override bool Equals(IBaseEntity? other)
{
return other is Effect c && c.Name == Name;

View File

@ -176,26 +176,26 @@ namespace Milimoe.FunGame.Core.Entity
/// <summary>
/// 技能开始吟唱时 [ 吟唱魔法、释放战技和爆发技、预释放爆发技均可触发 ]
/// </summary>
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);
}
}
/// <summary>
/// 触发技能效果
/// </summary>
public void OnSkillCasted(ActionQueue queue, Character actor, List<Character> enemys, List<Character> teammates)
public void OnSkillCasted(ActionQueue queue, Character caster, List<Character> enemys, List<Character> teammates)
{
ActionQueue = queue;
foreach (Effect e in Effects)
{
e.ActionQueue = ActionQueue;
e.OnSkillCasted(actor, enemys, teammates, OtherArgs);
e.OnSkillCasted(caster, enemys, teammates, OtherArgs);
}
}