TH1/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/KaguyaFrenchSynergySkill.cs
2025-10-23 21:28:15 +08:00

57 lines
1.9 KiB
C#

/*
* @Author: 白哉
* @Description:
* @Date: 2025年04月23日 星期三 21:04:18
* @Modify:
*/
using RuntimeData;
using System;
using UnityEngine;
using MemoryPack;
namespace Logic.Skill
{
public partial class KaguyaFrenchSynergySkill : SkillBase
{
public KaguyaFrenchSynergySkill()
{
IsPermanent = true;
TurnsLimit = 0;
}
public override SkillType GetSkillType()
{
return SkillType.KAGUYAFRENCHSYNERGY;
}
public override void OnDamageOther(MapData mapData, SettlementInfo info)
{
if (info.DamageOrigin == null || info.DamageTarget == null) return;
if (info.DamageType != DamageType.ActiveAttack) return;
if (info.IsKill) return;
info.DamageTarget.AddSkill(SkillType.KAGUYAFRENCHSYNERGYDEBUFF);
info.DamageTarget.GetSkill(SkillType.KAGUYAFRENCHSYNERGYDEBUFF, out var skill);
if (skill == null) return;
skill.AddLevel(mapData, info.DamageOrigin, info.DamageTarget, 1);
if (info.DamageOrigin.GetSkill(SkillType.REISENILLUSION, out var _) ||
info.DamageOrigin.GetSkill(SkillType.REISENILLUSIONPRO, out var _))
{
var player = info.DamageOrigin.Player(mapData);
if(player != null && player.PlayerHeroData.GetHeroTask(GiantType.FrenchReisen, out var task))
task.OnAddSkillLevels(mapData,SkillType.KAGUYAFRENCHSYNERGYDEBUFF,1);
}
}
public override float GetAttackAdditionParam(MapData mapData, UnitData self, UnitData target = null)
{
if (target == null) return 0;
if (!target.GetSkill(SkillType.KAGUYAFRENCHSYNERGYDEBUFF, out var skill)) return 0;
return skill.Level * 0.5f * self.GetSpecialSkillBonus(mapData, GetSkillType());
}
}
}