增加一批问题保护
This commit is contained in:
parent
96c2e0f504
commit
8bce7d89dc
@ -213,6 +213,7 @@ namespace Logic.Action
|
||||
//处理SuwakoHebi的合并
|
||||
if (unit1.GetSkill(SkillType.SUWAKOHEBI, out var _))
|
||||
{
|
||||
if (!SuwakoHebiSkill.CanCombineToNextLevel(unit2)) return false;
|
||||
NotProjectile = true;
|
||||
//unit2.UnitFullType.UnitLevel++;
|
||||
var unitFullType = unit2.UnitFullType;
|
||||
|
||||
@ -266,6 +266,8 @@ namespace Logic.Skill
|
||||
private void OmikujiAnim(MapData mapData,GridData origin,GridData target, SanaeDivineType divine)
|
||||
{
|
||||
if (mapData == null || origin == null || target == null) return;
|
||||
var mainMap = Main.MapData;
|
||||
if (mapData != mainMap || mainMap?.GridMap == null || mainMap.PlayerMap?.SelfPlayerData?.Sight == null) return;
|
||||
if (origin.InMainSight() || target.InMainSight())
|
||||
{
|
||||
if (Table.Instance == null) return;
|
||||
@ -609,4 +611,3 @@ namespace Logic.Skill
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -33,10 +33,10 @@ namespace Logic.Skill
|
||||
|
||||
public override bool IsCanAttackTargetAlly(MapData map,UnitData self, UnitData target)
|
||||
{
|
||||
//不能已经满级
|
||||
if (self.UnitLevel == 5) return false;
|
||||
if (map == null || self == null || target == null) return false;
|
||||
//必须是同类
|
||||
if (target.UnitFullType != self.UnitFullType) return false;
|
||||
if (!CanCombineToNextLevel(target)) return false;
|
||||
//必须是同一阵营
|
||||
if (target.Player(map) != self.Player(map)) return false;
|
||||
//必须是距离1
|
||||
@ -59,6 +59,14 @@ namespace Logic.Skill
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool CanCombineToNextLevel(UnitData target)
|
||||
{
|
||||
if (target == null || Table.Instance?.UnitTypeDataAssets == null) return false;
|
||||
var targetFullType = target.UnitFullType;
|
||||
targetFullType.UnitLevel++;
|
||||
return Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(targetFullType, out _);
|
||||
}
|
||||
|
||||
public override bool IsCanAttackAlly()
|
||||
{
|
||||
return true;
|
||||
@ -163,4 +171,3 @@ namespace Logic.Skill
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1975,11 +1975,20 @@ namespace Logic
|
||||
//生命周期: 1 . 卸载所有原来的skill
|
||||
//TODO 要迭代这块,主要是在skill那边要加标记,确认一个skill是否可以继承,是否transfrom的时候要删掉之类的,要不要触发情况等等
|
||||
|
||||
Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(unitData.UnitType, unitData.GiantType, unitData.UnitLevel, out var originInfo);
|
||||
Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(targetType, giantType, unitLevel, out var targetInfo);
|
||||
if (originInfo == null || targetInfo == null) return;
|
||||
var originFullTypeBeforeTransform = unitData.UnitFullType;
|
||||
var targetFullTypeBeforeTransform = new UnitFullType(targetType, giantType, unitLevel);
|
||||
if (!Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(originFullTypeBeforeTransform, out var originInfo))
|
||||
{
|
||||
LogSystem.LogError($"UnitTypeTransform failed: origin unit type not found. unitId:{unitData.Id} origin:{FormatUnitFullType(originFullTypeBeforeTransform)} target:{FormatUnitFullType(targetFullTypeBeforeTransform)}");
|
||||
return;
|
||||
}
|
||||
if (!Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(targetFullTypeBeforeTransform, out var targetInfo))
|
||||
{
|
||||
LogSystem.LogError($"UnitTypeTransform failed: target unit type not found. unitId:{unitData.Id} origin:{FormatUnitFullType(originFullTypeBeforeTransform)} target:{FormatUnitFullType(targetFullTypeBeforeTransform)}");
|
||||
return;
|
||||
}
|
||||
var previousFullTypeForBoatOnLandLog = unitData.UnitFullType;
|
||||
var requestedFullTypeForBoatOnLandLog = new UnitFullType(targetType, giantType, unitLevel);
|
||||
var requestedFullTypeForBoatOnLandLog = targetFullTypeBeforeTransform;
|
||||
|
||||
unitData.SkillCache ??= new List<SkillBase>();
|
||||
unitData.Skills ??= new List<SkillBase>();
|
||||
@ -2008,7 +2017,7 @@ namespace Logic
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogSystem.LogError($"UnitTypeTransform ReservedOnTransform failed. skill:{skill.GetType().Name} ex:{e.Message}");
|
||||
LogSystem.LogError($"UnitTypeTransform ReservedOnTransform failed. unitId:{unitData.Id} origin:{FormatUnitFullType(originFullTypeBeforeTransform)} target:{FormatUnitFullType(targetFullTypeBeforeTransform)} skill:{skill.GetType().Name} skillType:{skill.GetSkillType()} ex:{e}");
|
||||
reserved = false;
|
||||
}
|
||||
|
||||
@ -2065,8 +2074,8 @@ namespace Logic
|
||||
}
|
||||
}
|
||||
|
||||
var originFullType = new UnitFullType(unitData.UnitType, unitData.GiantType, unitData.UnitLevel);
|
||||
var targetFullType = new UnitFullType(targetType, giantType, unitLevel);
|
||||
var originFullType = originFullTypeBeforeTransform;
|
||||
var targetFullType = targetFullTypeBeforeTransform;
|
||||
|
||||
if (mapData.GetPlayerDataByUnitId(unitData.Id, out var playerData))
|
||||
{
|
||||
@ -2089,6 +2098,11 @@ namespace Logic
|
||||
previousFullTypeForBoatOnLandLog, requestedFullTypeForBoatOnLandLog);
|
||||
}
|
||||
|
||||
private static string FormatUnitFullType(UnitFullType fullType)
|
||||
{
|
||||
return $"{fullType.UnitType}/{fullType.GiantType}/{fullType.UnitLevel}";
|
||||
}
|
||||
|
||||
public void PassiveMoveAway(MapData mapData,UnitData unitData)
|
||||
{
|
||||
if (!mapData.GetGridDataByUnitId(unitData.Id, out var gridData))
|
||||
|
||||
@ -701,7 +701,8 @@ namespace TH1Renderer
|
||||
{
|
||||
targetGridData.Renderer(Main.MapData)?.PlayVFXInSight(new GridVFXParams(GridVFXType.CounterDieHint),GridVFXPlayType.Play);
|
||||
}
|
||||
ROUnitMap[unitDataB.Id].SetAttackHighlight(true);
|
||||
if (ROUnitMap.TryGetValue(unitDataB.Id, out var targetUnitRenderer))
|
||||
targetUnitRenderer.SetAttackHighlight(true);
|
||||
}
|
||||
//如果是友军目标,且unit的AP>0
|
||||
if (sig == MoveAttackType.Ally && unitData.GetActionPoint(ActionPointType.Attack) > 0)
|
||||
@ -710,7 +711,8 @@ namespace TH1Renderer
|
||||
if (!targetGridData.MainSelfPlayerVisibleUnit(out var unitDataB))
|
||||
continue;
|
||||
|
||||
ROUnitMap[unitDataB.Id].SetAllyHighlight(true);
|
||||
if (ROUnitMap.TryGetValue(unitDataB.Id, out var targetUnitRenderer))
|
||||
targetUnitRenderer.SetAllyHighlight(true);
|
||||
}
|
||||
//如果是攻击ground目标,且unit的AP>0
|
||||
if (sig == MoveAttackType.AttackGround &&
|
||||
|
||||
@ -93,7 +93,7 @@ namespace TH1_UI.View.Info
|
||||
Union.SetActive(false);
|
||||
}
|
||||
//未相遇的对手
|
||||
else if (!selfPlayer.MeetPlayers.Contains(player.Id))
|
||||
else if (!HasMetPlayer(selfPlayer, player))
|
||||
{
|
||||
RefreshForceName();
|
||||
Avatar.sprite = Table.Instance.PlayerDataAssets.CommonPlayerAvatar;
|
||||
@ -157,7 +157,7 @@ namespace TH1_UI.View.Info
|
||||
ForceName.text = Logic.PlayerLogic.GetDisplayForceName(Main.MapData, _player);
|
||||
ForceName.color = Color.gray;
|
||||
}
|
||||
else if (selfPlayer != null && !selfPlayer.MeetPlayers.Contains(_player.Id))
|
||||
else if (!HasMetPlayer(selfPlayer, _player))
|
||||
{
|
||||
ForceName.text = "???";
|
||||
ForceName.color = NormalRankTextColor;
|
||||
@ -197,6 +197,13 @@ namespace TH1_UI.View.Info
|
||||
return confirm != null && confirm.IsNeedAI();
|
||||
}
|
||||
|
||||
private static bool HasMetPlayer(PlayerData selfPlayer, PlayerData player)
|
||||
{
|
||||
if (selfPlayer == null || player == null) return false;
|
||||
if (selfPlayer.Id == player.Id) return true;
|
||||
return selfPlayer.MeetPlayers?.Contains(player.Id) == true;
|
||||
}
|
||||
|
||||
private void SetForceNameActive(bool active)
|
||||
{
|
||||
if (ForceName != null) ForceName.gameObject.SetActive(active);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user