SelectTargets 将所有角色列表传入 (#154)

This commit is contained in:
milimoe 2026-04-15 00:12:32 +08:00 committed by GitHub
parent 5e4b742505
commit 64ab9870b3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 83 additions and 47 deletions

View File

@ -162,7 +162,7 @@ namespace Milimoe.FunGame.Core.Controller
if (normalAttackReachableEnemys.Count > 0) if (normalAttackReachableEnemys.Count > 0)
{ {
List<Character> targets = SelectTargets(character, character.NormalAttack, normalAttackReachableEnemys, []); List<Character> targets = SelectTargets(character, character.NormalAttack, allEnemysInGame, allTeammatesInGame, normalAttackReachableEnemys, []);
if (targets.Count > 0) if (targets.Count > 0)
{ {
double currentScore = EvaluateNormalAttack(character, targets) - movePenalty; double currentScore = EvaluateNormalAttack(character, targets) - movePenalty;
@ -223,7 +223,7 @@ namespace Milimoe.FunGame.Core.Controller
if (skillReachableEnemys.Count > 0 || skillReachableTeammates.Count > 0) if (skillReachableEnemys.Count > 0 || skillReachableTeammates.Count > 0)
{ {
List<Character> targets = SelectTargets(character, skill, skillReachableEnemys, skillReachableTeammates); List<Character> targets = SelectTargets(character, skill, allEnemysInGame, allTeammatesInGame, skillReachableEnemys, skillReachableTeammates);
if (targets.Count > 0) if (targets.Count > 0)
{ {
double currentScore = EvaluateSkill(character, skill, targets, cost) - movePenalty; double currentScore = EvaluateSkill(character, skill, targets, cost) - movePenalty;
@ -288,7 +288,7 @@ namespace Milimoe.FunGame.Core.Controller
if (itemSkillReachableEnemys.Count > 0 || itemSkillReachableTeammates.Count > 0) if (itemSkillReachableEnemys.Count > 0 || itemSkillReachableTeammates.Count > 0)
{ {
List<Character> targetsForItem = SelectTargets(character, itemSkill, itemSkillReachableEnemys, itemSkillReachableTeammates); List<Character> targetsForItem = SelectTargets(character, itemSkill, allEnemysInGame, allTeammatesInGame, itemSkillReachableEnemys, itemSkillReachableTeammates);
if (targetsForItem.Count > 0) if (targetsForItem.Count > 0)
{ {
double currentScore = EvaluateItem(character, item, targetsForItem, cost) - movePenalty; double currentScore = EvaluateItem(character, item, targetsForItem, cost) - movePenalty;
@ -484,9 +484,9 @@ namespace Milimoe.FunGame.Core.Controller
} }
// 选择技能的最佳目标 // 选择技能的最佳目标
private static List<Character> SelectTargets(Character character, ISkill skill, List<Character> enemys, List<Character> teammates) private static List<Character> SelectTargets(Character character, ISkill skill, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates)
{ {
List<Character> targets = skill.GetSelectableTargets(character, enemys, teammates); List<Character> targets = skill.GetSelectableTargets(character, allEnemys, allTeammates, enemys, teammates);
int count = skill.RealCanSelectTargetCount(enemys, teammates); int count = skill.RealCanSelectTargetCount(enemys, teammates);
return [.. targets.OrderBy(o => Random.Shared.Next()).Take(count)]; return [.. targets.OrderBy(o => Random.Shared.Next()).Take(count)];
} }

View File

@ -714,9 +714,11 @@ namespace Milimoe.FunGame.Core.Entity
/// </summary> /// </summary>
/// <param name="character"></param> /// <param name="character"></param>
/// <param name="skill"></param> /// <param name="skill"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
public virtual void AlterSelectListBeforeSelection(Character character, ISkill skill, List<Character> enemys, List<Character> teammates) public virtual void AlterSelectListBeforeSelection(Character character, ISkill skill, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates)
{ {
} }

View File

@ -248,10 +248,12 @@ namespace Milimoe.FunGame.Core.Entity
/// 获取可选择的目标列表 /// 获取可选择的目标列表
/// </summary> /// </summary>
/// <param name="attacker"></param> /// <param name="attacker"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
/// <returns></returns> /// <returns></returns>
public List<Character> GetSelectableTargets(Character attacker, List<Character> enemys, List<Character> teammates) public List<Character> GetSelectableTargets(Character attacker, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates)
{ {
List<Character> selectable = []; List<Character> selectable = [];
@ -300,12 +302,14 @@ namespace Milimoe.FunGame.Core.Entity
/// 选取普攻目标 /// 选取普攻目标
/// </summary> /// </summary>
/// <param name="attacker"></param> /// <param name="attacker"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
/// <returns></returns> /// <returns></returns>
public List<Character> SelectTargets(Character attacker, List<Character> enemys, List<Character> teammates) public List<Character> SelectTargets(Character attacker, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates)
{ {
List<Character> tobeSelected = GetSelectableTargets(attacker, enemys, teammates); List<Character> tobeSelected = GetSelectableTargets(attacker, allEnemys, allTeammates, enemys, teammates);
List<Character> targets = []; List<Character> targets = [];

View File

@ -180,7 +180,7 @@ namespace Milimoe.FunGame.Core.Entity
public virtual bool AllowSelectNoCharacterGrid { get; set; } = false; public virtual bool AllowSelectNoCharacterGrid { get; set; } = false;
/// <summary> /// <summary>
/// 是否可以选择已死亡的角色。仅 <see cref="IsNonDirectional"/> = true 时有效。 /// 是否可以选择已死亡的角色
/// </summary> /// </summary>
public virtual bool AllowSelectDead { get; set; } = false; public virtual bool AllowSelectDead { get; set; } = false;
@ -485,10 +485,12 @@ namespace Milimoe.FunGame.Core.Entity
/// 获取可选择的目标列表 /// 获取可选择的目标列表
/// </summary> /// </summary>
/// <param name="caster"></param> /// <param name="caster"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
/// <returns></returns> /// <returns></returns>
public virtual List<Character> GetSelectableTargets(Character caster, List<Character> enemys, List<Character> teammates) public virtual List<Character> GetSelectableTargets(Character caster, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates)
{ {
List<Character> selectable = []; List<Character> selectable = [];
@ -503,22 +505,35 @@ namespace Milimoe.FunGame.Core.Entity
checkType |= ImmuneType.Magical; checkType |= ImmuneType.Magical;
} }
foreach (Character character in enemys) if (CanSelectEnemy)
{ {
IEnumerable<Effect> effects = Effects.Where(e => e.IsInEffect).OrderByDescending(e => e.Priority); foreach (Character character in enemys)
if (CanSelectEnemy && ((character.ImmuneType & checkType) == ImmuneType.None ||
effects.Any(e => e.IgnoreImmune == ImmuneType.All || e.IgnoreImmune == ImmuneType.Skilled || (IsMagic && e.IgnoreImmune == ImmuneType.Magical))))
{ {
selectable.Add(character); IEnumerable<Effect> effects = Effects.Where(e => e.IsInEffect).OrderByDescending(e => e.Priority);
if ((character.ImmuneType & checkType) == ImmuneType.None ||
effects.Any(e => e.IgnoreImmune == ImmuneType.All || e.IgnoreImmune == ImmuneType.Skilled || (IsMagic && e.IgnoreImmune == ImmuneType.Magical)))
{
selectable.Add(character);
}
}
if (AllowSelectDead)
{
selectable.AddRange(allEnemys.Where(c => c.HP == 0));
} }
} }
foreach (Character character in teammates) if (CanSelectTeammate)
{ {
if (CanSelectTeammate) foreach (Character character in teammates)
{ {
selectable.Add(character); selectable.Add(character);
} }
if (AllowSelectDead)
{
selectable.AddRange(allTeammates.Where(c => c.HP == 0));
}
} }
// 其他条件 // 其他条件
@ -548,12 +563,14 @@ namespace Milimoe.FunGame.Core.Entity
/// 选取技能目标 /// 选取技能目标
/// </summary> /// </summary>
/// <param name="caster"></param> /// <param name="caster"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
/// <returns></returns> /// <returns></returns>
public virtual List<Character> SelectTargets(Character caster, List<Character> enemys, List<Character> teammates) public virtual List<Character> SelectTargets(Character caster, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates)
{ {
List<Character> tobeSelected = GetSelectableTargets(caster, enemys, teammates); List<Character> tobeSelected = GetSelectableTargets(caster, allEnemys, allTeammates, enemys, teammates);
List<Character> targets = []; List<Character> targets = [];

View File

@ -205,22 +205,26 @@ namespace Milimoe.FunGame.Core.Interface.Base
/// </summary> /// </summary>
/// <param name="caster"></param> /// <param name="caster"></param>
/// <param name="skill"></param> /// <param name="skill"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
/// <param name="castRange"></param> /// <param name="castRange"></param>
/// <returns></returns> /// <returns></returns>
public List<Character> SelectTargets(Character caster, Skill skill, List<Character> enemys, List<Character> teammates, List<Grid> castRange); public List<Character> SelectTargets(Character caster, Skill skill, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates, List<Grid> castRange);
/// <summary> /// <summary>
/// 选取普通攻击目标 /// 选取普通攻击目标
/// </summary> /// </summary>
/// <param name="character"></param> /// <param name="character"></param>
/// <param name="attack"></param> /// <param name="attack"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
/// <param name="attackRange"></param> /// <param name="attackRange"></param>
/// <returns></returns> /// <returns></returns>
public List<Character> SelectTargets(Character character, NormalAttack attack, List<Character> enemys, List<Character> teammates, List<Grid> attackRange); public List<Character> SelectTargets(Character character, NormalAttack attack, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates, List<Grid> attackRange);
/// <summary> /// <summary>
/// 获取某角色的敌人列表 /// 获取某角色的敌人列表

View File

@ -112,10 +112,12 @@ namespace Milimoe.FunGame.Core.Interface.Entity
/// 获取可选择的目标列表 /// 获取可选择的目标列表
/// </summary> /// </summary>
/// <param name="caster"></param> /// <param name="caster"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
/// <returns></returns> /// <returns></returns>
public List<Character> GetSelectableTargets(Character caster, List<Character> enemys, List<Character> teammates); public List<Character> GetSelectableTargets(Character caster, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates);
/// <summary> /// <summary>
/// 实际可选取的目标数量 /// 实际可选取的目标数量

View File

@ -392,10 +392,10 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon.Example
//queue.TurnEndEvent += Queue_TurnEndEvent; //queue.TurnEndEvent += Queue_TurnEndEvent;
// 我们示范两个事件,一是选择技能目标,需要和客户端交互的事件 // 我们示范两个事件,一是选择技能目标,需要和客户端交互的事件
queue.SelectSkillTargetsEvent += (queue, caster, skill, enemys, teammates, castRange) => queue.SelectSkillTargetsEvent += (queue, caster, skill, allEnemys, allTeammates, enemys, teammates, castRange) =>
{ {
/// 如果你的逻辑都写在 <see cref="ModuleServerWorker"/> 里就不用这么麻烦每次都传 obj 和 worker 了。 /// 如果你的逻辑都写在 <see cref="ModuleServerWorker"/> 里就不用这么麻烦每次都传 obj 和 worker 了。
return Queue_SelectSkillTargetsEvent(worker, caster, skill, enemys, teammates, castRange); return Queue_SelectSkillTargetsEvent(worker, caster, skill, allEnemys, allTeammates, enemys, teammates, castRange);
}; };
// 二是角色行动完毕,需要通知客户端更新状态的事件 // 二是角色行动完毕,需要通知客户端更新状态的事件
@ -511,21 +511,23 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon.Example
}); });
} }
private List<Character> Queue_SelectSkillTargetsEvent(ModuleServerWorker worker, Character caster, Skill skill, List<Character> enemys, List<Character> teammates, List<Grid> castRange) private List<Character> Queue_SelectSkillTargetsEvent(ModuleServerWorker worker, Character caster, Skill skill, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates, List<Grid> castRange)
{ {
// 这是一个需要与客户端交互的事件,其他的选择事件与之做法相同 // 这是一个需要与客户端交互的事件,其他的选择事件与之做法相同
// SyncAwaiter是一个允许同步方法安全等待异步任务完成的工具类 // SyncAwaiter是一个允许同步方法安全等待异步任务完成的工具类
return SyncAwaiter.WaitResult(RequestClientSelectSkillTargets(worker, caster, skill, enemys, teammates, castRange)); return SyncAwaiter.WaitResult(RequestClientSelectSkillTargets(worker, caster, skill, allEnemys, allTeammates, enemys, teammates, castRange));
} }
private async Task<List<Character>> RequestClientSelectSkillTargets(ModuleServerWorker worker, Character caster, Skill skill, List<Character> enemys, List<Character> teammates, List<Grid> castRange) private async Task<List<Character>> RequestClientSelectSkillTargets(ModuleServerWorker worker, Character caster, Skill skill, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates, List<Grid> castRange)
{ {
List<Character> selectTargets = []; List<Character> selectTargets = [];
Dictionary<string, object> data = []; Dictionary<string, object> data = [];
data.Add("event", "SelectSkillTargets"); data.Add("event", "SelectSkillTargets");
data.Add("caster", caster.Id); data.Add("caster", caster.Id);
data.Add("skill", skill.Id); data.Add("skill", skill.Id);
data.Add("allenemys", allEnemys.Select(c => c.Id));
data.Add("enemys", enemys.Select(c => c.Id)); data.Add("enemys", enemys.Select(c => c.Id));
data.Add("allteammates", allTeammates.Select(c => c.Id));
data.Add("teammates", teammates.Select(c => c.Id)); data.Add("teammates", teammates.Select(c => c.Id));
data.Add("castRange", castRange.Select(g => g.Id)); data.Add("castRange", castRange.Select(g => g.Id));
await SendGamingMessage(_clientModels, GamingType.Skill, data); await SendGamingMessage(_clientModels, GamingType.Skill, data);

View File

@ -1270,9 +1270,6 @@ namespace Milimoe.FunGame.Core.Model
// 启用战棋地图时的专属 AI 决策方法 // 启用战棋地图时的专属 AI 决策方法
if (isAI && ai != null && startGrid != null) if (isAI && ai != null && startGrid != null)
{ {
List<Character> allEnemysInGame = [.. allEnemys.Where(canAttackGridsByStartGrid.Union(canCastGridsByStartGrid).SelectMany(g => g.Characters).Contains)];
List<Character> allTeammatesInGame = [.. allTeammates.Where(canAttackGridsByStartGrid.Union(canCastGridsByStartGrid).SelectMany(g => g.Characters).Contains)];
aiDecision = ai.DecideAIAction(character, dp, startGrid, canMoveGrids, skills, items, allEnemys, allTeammates, enemys, teammates, pUseItem, pCastSkill, pNormalAttack); aiDecision = ai.DecideAIAction(character, dp, startGrid, canMoveGrids, skills, items, allEnemys, allTeammates, enemys, teammates, pUseItem, pCastSkill, pNormalAttack);
type = aiDecision.ActionType; type = aiDecision.ActionType;
} }
@ -1386,7 +1383,7 @@ namespace Milimoe.FunGame.Core.Model
enemys = [.. enemys.Where(attackRange.SelectMany(g => g.Characters).Contains)]; enemys = [.. enemys.Where(attackRange.SelectMany(g => g.Characters).Contains)];
teammates = [.. teammates.Where(attackRange.SelectMany(g => g.Characters).Contains)]; teammates = [.. teammates.Where(attackRange.SelectMany(g => g.Characters).Contains)];
} }
targets = SelectTargets(character, character.NormalAttack, enemys, teammates, attackRange); targets = SelectTargets(character, character.NormalAttack, allEnemys, allTeammates, enemys, teammates, attackRange);
} }
if (targets.Count > 0) if (targets.Count > 0)
{ {
@ -2972,7 +2969,7 @@ namespace Milimoe.FunGame.Core.Model
if (aiDecision != null) targets = aiDecision.Targets; if (aiDecision != null) targets = aiDecision.Targets;
if (targets.Count == 0) if (targets.Count == 0)
{ {
targets = SelectTargets(character, skill, enemys, teammates, castRange); targets = SelectTargets(character, skill, allEnemys, allTeammates, enemys, teammates, castRange);
} }
if (skill.CanSelectTargetRange > 0) if (skill.CanSelectTargetRange > 0)
{ {
@ -3283,21 +3280,23 @@ namespace Milimoe.FunGame.Core.Model
/// </summary> /// </summary>
/// <param name="caster"></param> /// <param name="caster"></param>
/// <param name="skill"></param> /// <param name="skill"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
/// <param name="castRange"></param> /// <param name="castRange"></param>
/// <returns></returns> /// <returns></returns>
public List<Character> SelectTargets(Character caster, Skill skill, List<Character> enemys, List<Character> teammates, List<Grid> castRange) public List<Character> SelectTargets(Character caster, Skill skill, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates, List<Grid> castRange)
{ {
List<Effect> effects = [.. caster.Effects.Where(e => e.IsInEffect).OrderByDescending(e => e.Priority)]; List<Effect> effects = [.. caster.Effects.Where(e => e.IsInEffect).OrderByDescending(e => e.Priority)];
foreach (Effect effect in effects) foreach (Effect effect in effects)
{ {
effect.AlterSelectListBeforeSelection(caster, skill, enemys, teammates); effect.AlterSelectListBeforeSelection(caster, skill, allEnemys, allTeammates, enemys, teammates);
} }
List<Character> targets = OnSelectSkillTargetsEvent(caster, skill, enemys, teammates, castRange); List<Character> targets = OnSelectSkillTargetsEvent(caster, skill, allEnemys, allTeammates, enemys, teammates, castRange);
if (targets.Count == 0 && IsCharacterInAIControlling(caster)) if (targets.Count == 0 && IsCharacterInAIControlling(caster))
{ {
targets = skill.SelectTargets(caster, enemys, teammates); targets = skill.SelectTargets(caster, allEnemys, allTeammates, enemys, teammates);
} }
return targets; return targets;
} }
@ -3326,21 +3325,23 @@ namespace Milimoe.FunGame.Core.Model
/// </summary> /// </summary>
/// <param name="character"></param> /// <param name="character"></param>
/// <param name="attack"></param> /// <param name="attack"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
/// <param name="attackRange"></param> /// <param name="attackRange"></param>
/// <returns></returns> /// <returns></returns>
public List<Character> SelectTargets(Character character, NormalAttack attack, List<Character> enemys, List<Character> teammates, List<Grid> attackRange) public List<Character> SelectTargets(Character character, NormalAttack attack, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates, List<Grid> attackRange)
{ {
List<Effect> effects = [.. character.Effects.Where(e => e.IsInEffect).OrderByDescending(e => e.Priority)]; List<Effect> effects = [.. character.Effects.Where(e => e.IsInEffect).OrderByDescending(e => e.Priority)];
foreach (Effect effect in effects) foreach (Effect effect in effects)
{ {
effect.AlterSelectListBeforeSelection(character, attack, enemys, teammates); effect.AlterSelectListBeforeSelection(character, attack, allEnemys, allTeammates, enemys, teammates);
} }
List<Character> targets = OnSelectNormalAttackTargetsEvent(character, attack, enemys, teammates, attackRange); List<Character> targets = OnSelectNormalAttackTargetsEvent(character, attack, allEnemys, allTeammates, enemys, teammates, attackRange);
if (targets.Count == 0 && IsCharacterInAIControlling(character)) if (targets.Count == 0 && IsCharacterInAIControlling(character))
{ {
targets = character.NormalAttack.SelectTargets(character, enemys, teammates); targets = character.NormalAttack.SelectTargets(character, allEnemys, allTeammates, enemys, teammates);
} }
return targets; return targets;
} }
@ -4698,7 +4699,7 @@ namespace Milimoe.FunGame.Core.Model
return SelectTargetGridEvent?.Invoke(this, character, enemys, teammates, map, moveRange) ?? Grid.Empty; return SelectTargetGridEvent?.Invoke(this, character, enemys, teammates, map, moveRange) ?? Grid.Empty;
} }
public delegate List<Character> SelectSkillTargetsEventHandler(GamingQueue queue, Character caster, Skill skill, List<Character> enemys, List<Character> teammates, List<Grid> castRange); public delegate List<Character> SelectSkillTargetsEventHandler(GamingQueue queue, Character caster, Skill skill, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates, List<Grid> castRange);
/// <summary> /// <summary>
/// 选取技能目标事件 /// 选取技能目标事件
/// </summary> /// </summary>
@ -4708,13 +4709,15 @@ namespace Milimoe.FunGame.Core.Model
/// </summary> /// </summary>
/// <param name="caster"></param> /// <param name="caster"></param>
/// <param name="skill"></param> /// <param name="skill"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
/// <param name="castRange"></param> /// <param name="castRange"></param>
/// <returns></returns> /// <returns></returns>
protected List<Character> OnSelectSkillTargetsEvent(Character caster, Skill skill, List<Character> enemys, List<Character> teammates, List<Grid> castRange) protected List<Character> OnSelectSkillTargetsEvent(Character caster, Skill skill, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates, List<Grid> castRange)
{ {
return SelectSkillTargetsEvent?.Invoke(this, caster, skill, enemys, teammates, castRange) ?? []; return SelectSkillTargetsEvent?.Invoke(this, caster, skill, allEnemys, allTeammates, enemys, teammates, castRange) ?? [];
} }
public delegate List<Grid> SelectNonDirectionalSkillTargetsEventHandler(GamingQueue queue, Character caster, Skill skill, List<Character> enemys, List<Character> teammates, List<Grid> castRange); public delegate List<Grid> SelectNonDirectionalSkillTargetsEventHandler(GamingQueue queue, Character caster, Skill skill, List<Character> enemys, List<Character> teammates, List<Grid> castRange);
@ -4736,7 +4739,7 @@ namespace Milimoe.FunGame.Core.Model
return SelectNonDirectionalSkillTargetsEvent?.Invoke(this, caster, skill, enemys, teammates, castRange) ?? []; return SelectNonDirectionalSkillTargetsEvent?.Invoke(this, caster, skill, enemys, teammates, castRange) ?? [];
} }
public delegate List<Character> SelectNormalAttackTargetsEventHandler(GamingQueue queue, Character character, NormalAttack attack, List<Character> enemys, List<Character> teammates, List<Grid> attackRange); public delegate List<Character> SelectNormalAttackTargetsEventHandler(GamingQueue queue, Character character, NormalAttack attack, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates, List<Grid> attackRange);
/// <summary> /// <summary>
/// 选取普通攻击目标事件 /// 选取普通攻击目标事件
/// </summary> /// </summary>
@ -4746,13 +4749,15 @@ namespace Milimoe.FunGame.Core.Model
/// </summary> /// </summary>
/// <param name="character"></param> /// <param name="character"></param>
/// <param name="attack"></param> /// <param name="attack"></param>
/// <param name="allEnemys"></param>
/// <param name="allTeammates"></param>
/// <param name="enemys"></param> /// <param name="enemys"></param>
/// <param name="teammates"></param> /// <param name="teammates"></param>
/// <param name="attackRange"></param> /// <param name="attackRange"></param>
/// <returns></returns> /// <returns></returns>
protected List<Character> OnSelectNormalAttackTargetsEvent(Character character, NormalAttack attack, List<Character> enemys, List<Character> teammates, List<Grid> attackRange) protected List<Character> OnSelectNormalAttackTargetsEvent(Character character, NormalAttack attack, List<Character> allEnemys, List<Character> allTeammates, List<Character> enemys, List<Character> teammates, List<Grid> attackRange)
{ {
return SelectNormalAttackTargetsEvent?.Invoke(this, character, attack, enemys, teammates, attackRange) ?? []; return SelectNormalAttackTargetsEvent?.Invoke(this, character, attack, allEnemys, allTeammates, enemys, teammates, attackRange) ?? [];
} }
public delegate void InterruptCastingEventHandler(GamingQueue queue, Character cast, Skill? skill, Character interrupter); public delegate void InterruptCastingEventHandler(GamingQueue queue, Character cast, Skill? skill, Character interrupter);