健壮性优化

This commit is contained in:
milimoe 2026-01-23 01:25:22 +08:00
parent f4b8882a2e
commit 97a5c0ac41
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0
3 changed files with 20 additions and 26 deletions

View File

@ -50,12 +50,8 @@ namespace Milimoe.FunGame.Core.Controller
// 计算普通攻击的可达格子 // 计算普通攻击的可达格子
List<Grid> normalAttackReachableGrids = _map.GetGridsByRange(potentialMoveGrid, character.ATR, true); List<Grid> normalAttackReachableGrids = _map.GetGridsByRange(potentialMoveGrid, character.ATR, true);
List<Character> normalAttackReachableEnemys = [.. allEnemysInGame List<Character> normalAttackReachableEnemys = [.. allEnemysInGame.Where(c => normalAttackReachableGrids.SelectMany(g => g.Characters).Contains(c) && !c.IsUnselectable && selectableEnemys.Contains(c)).Distinct()];
.Where(c => normalAttackReachableGrids.SelectMany(g => g.Characters).Contains(c) && !c.IsUnselectable && selectableEnemys.Contains(c)) List<Character> normalAttackReachableTeammates = [.. allTeammatesInGame.Where(c => normalAttackReachableGrids.SelectMany(g => g.Characters).Contains(c) && selectableTeammates.Contains(c)).Distinct()];
.Distinct()];
List<Character> normalAttackReachableTeammates = [.. allTeammatesInGame
.Where(c => normalAttackReachableGrids.SelectMany(g => g.Characters).Contains(c) && selectableTeammates.Contains(c))
.Distinct()];
if (normalAttackReachableEnemys.Count > 0) if (normalAttackReachableEnemys.Count > 0)
{ {
@ -97,12 +93,8 @@ namespace Milimoe.FunGame.Core.Controller
} }
else else
{ {
List<Character> skillReachableEnemys = [.. allEnemysInGame List<Character> skillReachableEnemys = [.. allEnemysInGame.Where(c => skillReachableGrids.SelectMany(g => g.Characters).Contains(c) && !c.IsUnselectable && selectableEnemys.Contains(c)).Distinct()];
.Where(c => skillReachableGrids.SelectMany(g => g.Characters).Contains(c) && !c.IsUnselectable && selectableEnemys.Contains(c)) List<Character> skillReachableTeammates = [.. allTeammatesInGame.Where(c => skillReachableGrids.SelectMany(g => g.Characters).Contains(c) && selectableTeammates.Contains(c)).Distinct()];
.Distinct()];
List<Character> skillReachableTeammates = [.. allTeammatesInGame
.Where(c => skillReachableGrids.SelectMany(g => g.Characters).Contains(c) && selectableTeammates.Contains(c))
.Distinct()];
// 检查是否有可用的目标(敌人或队友,取决于技能类型) // 检查是否有可用的目标(敌人或队友,取决于技能类型)
if (skillReachableEnemys.Count > 0 || skillReachableTeammates.Count > 0) if (skillReachableEnemys.Count > 0 || skillReachableTeammates.Count > 0)
@ -149,12 +141,8 @@ namespace Milimoe.FunGame.Core.Controller
} }
else else
{ {
List<Character> itemSkillReachableEnemys = [.. allEnemysInGame List<Character> itemSkillReachableEnemys = [.. allEnemysInGame.Where(c => itemSkillReachableGrids.SelectMany(g => g.Characters).Contains(c) && !c.IsUnselectable && selectableEnemys.Contains(c)).Distinct()];
.Where(c => itemSkillReachableGrids.SelectMany(g => g.Characters).Contains(c) && !c.IsUnselectable && selectableEnemys.Contains(c)) List<Character> itemSkillReachableTeammates = [.. allTeammatesInGame.Where(c => itemSkillReachableGrids.SelectMany(g => g.Characters).Contains(c) && selectableTeammates.Contains(c)).Distinct()];
.Distinct()];
List<Character> itemSkillReachableTeammates = [.. allTeammatesInGame
.Where(c => itemSkillReachableGrids.SelectMany(g => g.Characters).Contains(c) && selectableTeammates.Contains(c))
.Distinct()];
// 检查是否有可用的目标 // 检查是否有可用的目标
if (itemSkillReachableEnemys.Count > 0 || itemSkillReachableTeammates.Count > 0) if (itemSkillReachableEnemys.Count > 0 || itemSkillReachableTeammates.Count > 0)
@ -203,16 +191,12 @@ namespace Milimoe.FunGame.Core.Controller
} }
} }
List<Grid> tempAllReachableGridsForPureMove = [.. tempAttackGridsForPureMove.Union(tempCastGridsForPureMove).Distinct()]; List<Grid> tempAllReachableGridsForPureMove = [.. tempAttackGridsForPureMove.Union(tempCastGridsForPureMove).Distinct()];
List<Character> tempCurrentReachableEnemysForPureMove = [.. allEnemysInGame List<Character> tempCurrentReachableEnemysForPureMove = [.. allEnemysInGame.Where(c => tempAllReachableGridsForPureMove.SelectMany(g => g.Characters).Contains(c) && !c.IsUnselectable && selectableEnemys.Contains(c)).Distinct()];
.Where(c => tempAllReachableGridsForPureMove.SelectMany(g => g.Characters).Contains(c) && !c.IsUnselectable && selectableEnemys.Contains(c))
.Distinct()];
// 如果当前位置无法攻击任何敌人,但地图上还有敌人,尝试向最近的敌人移动 // 如果当前位置无法攻击任何敌人,但地图上还有敌人,尝试向最近的敌人移动
if (tempCurrentReachableEnemysForPureMove.Count == 0 && allEnemysInGame.Count > 0) // 使用新计算的列表 if (tempCurrentReachableEnemysForPureMove.Count == 0 && allEnemysInGame.Count > 0) // 使用新计算的列表
{ {
Character? target = allEnemysInGame Character? target = allEnemysInGame.OrderBy(e => GameMap.CalculateManhattanDistance(potentialMoveGrid, _map.GetCharacterCurrentGrid(e) ?? Grid.Empty)).FirstOrDefault();
.OrderBy(e => GameMap.CalculateManhattanDistance(potentialMoveGrid, _map.GetCharacterCurrentGrid(e)!))
.FirstOrDefault();
if (target != null) if (target != null)
{ {

View File

@ -1866,7 +1866,7 @@ namespace Milimoe.FunGame.Core.Entity
} }
if (EquipSlot.Weapon != null) if (EquipSlot.Weapon != null)
{ {
builder.AppendLine($"[{ItemSet.GetQualityTypeName(EquipSlot.Weapon.QualityType)}]" + ItemSet.GetEquipSlotTypeName(EquipSlotType.Weapon) + "" + EquipSlot.Weapon.Name); builder.AppendLine($"[{ItemSet.GetQualityTypeName(EquipSlot.Weapon.QualityType)}]" + ItemSet.GetEquipSlotTypeName(EquipSlotType.Weapon) + $"-{ItemSet.GetWeaponTypeName(EquipSlot.Weapon.WeaponType)}" + "" + EquipSlot.Weapon.Name);
builder.AppendLine(EquipSlot.Weapon.Description); builder.AppendLine(EquipSlot.Weapon.Description);
} }
if (EquipSlot.Armor != null) if (EquipSlot.Armor != null)

View File

@ -268,7 +268,17 @@ namespace Milimoe.FunGame.Core.Entity
/// <summary> /// <summary>
/// 剩余冷却时间 [ 和 <see cref="Enable"/> 属性配合使用 ] /// 剩余冷却时间 [ 和 <see cref="Enable"/> 属性配合使用 ]
/// </summary> /// </summary>
public double CurrentCD { get; set; } = 0; public double CurrentCD
{
get
{
return Math.Max(0, field);
}
set
{
field = Math.Max(0, value);
}
}
/// <summary> /// <summary>
/// 无 CD [ 运行时 ] /// 无 CD [ 运行时 ]