mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2026-03-05 22:20:26 +00:00
健壮性优化
This commit is contained in:
parent
f4b8882a2e
commit
97a5c0ac41
@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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 [ 运行时 ]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user