67 lines
2.9 KiB
C#
67 lines
2.9 KiB
C#
/*
|
||
* @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);
|
||
}
|
||
}
|
||
}
|
||
}
|