TH1/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/ReisenFrenchAttakSkill.cs
2026-05-23 18:51:24 +08:00

67 lines
2.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @Author: 白哉
* @Description:
* @Date: 2025年09月12日 星期四 17:09:18
* @Modify:
*/
using RuntimeData;
using TH1_Logic.Core;
using TH1Renderer;
namespace Logic.Skill
{
public partial class ReisenFrenchAttakSkill : SkillBase
{
public ReisenFrenchAttakSkill()
{
IsPermanent = true;
TurnsLimit = 0;
Score = 4;
}
public override SkillType GetSkillType()
{
return SkillType.REISENFRENCHATTAK;
}
public override void BeforeActiveAttackOther(MapData mapData, UnitData origin, UnitData target, out int addDmg)
{
addDmg = 0;
if (mapData == null || origin == null || target == null) return;
if (!origin.IsValidOnMap(mapData) || !target.IsValidOnMap(mapData)) return;
if (!mapData.GetGridDataByUnitId(target.Id, out var targetGrid)) return;
var count = 0;
foreach (var unit in mapData.UnitMap.UnitList)
{
if (unit == null || !unit.IsValidOnMap(mapData)) continue;
if (unit == origin || unit == target) continue;
// 仅本体的我方/在盟盟友可参与协同;刚背盟的不算,敌方幻象更不算
if (!mapData.IsLeagueUnitByUnit(unit.Id, origin.Id)) continue;
if (!unit.GetSkill(SkillType.REISENILLUSION, out _) &&
!unit.GetSkill(SkillType.REISENILLUSIONPRO, out _)) continue;
if (!mapData.GetGridDataByUnitId(unit.Id, out var unitGrid)) continue;
if (mapData.GridMap.CalcDistance(unitGrid, targetGrid) > unit.GetAttackRange(mapData)) continue;
// 仅在真实地图上播放投射物动画与音效AI 沙盘评分时 mapData 是 CalMap禁止驱动 Renderer
if (mapData == Main.MapData
&& unit.TryGetPosition(mapData, out var unitPosition)
&& target.TryGetPosition(mapData, out var targetPosition))
MapRenderer.Instance.ProjectileManager.CreateProjectile(unitPosition, targetPosition, ProjectileType.ReisenAttack);
count++;
}
if (!origin.IsValidOnMap(mapData) || !target.IsValidOnMap(mapData, targetGrid)) return;
target.AddSkill_Legacy(SkillType.KAGUYAFRENCHSYNERGYDEBUFF, mapData,false,0,true,count,true,SpecialAddSkillType.AddLevel,origin.Id);
//target.GetSkill(SkillType.KAGUYAFRENCHSYNERGYDEBUFF, out var debuffSkill);
//debuffSkill.AddLevel(mapData, origin, target, count);
if (origin.UnitLevel >= 4)
{
int dmg = Table.Instance.CalcDamage(mapData, origin, target, damagePara:0.5f) * count;
addDmg = dmg;
Main.UnitLogic.DamageSettlement(mapData, origin, target, dmg, DamageType.FollowAttack);
}
}
}
}