TH1/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/KaguyaFrenchSynergySkill.cs
2026-05-13 00:29:57 +08:00

89 lines
3.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年04月23日 星期三 21:04:18
* @Modify:
*/
using RuntimeData;
using System;
using UnityEngine;
using MemoryPack;
using TH1_Logic.Core;
using Logic.CrashSight;
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 && info.DamageType != DamageType.Splash) return;
// === 诊断 log排查预览伤害每次叠高的 bug已注释需要时取消注释 ===
// UnitData origDef = null;
// if (Main.MapData != null) Main.MapData.UnitMap.GetUnitDataByUnitId(info.DamageTarget.Id, out origDef);
// int beforeCal = info.DamageTarget.GetSkill(SkillType.KAGUYAFRENCHSYNERGYDEBUFF, out var sCal) ? sCal.Level : 0;
// int beforeOrig = origDef != null && origDef.GetSkill(SkillType.KAGUYAFRENCHSYNERGYDEBUFF, out var sOrig) ? sOrig.Level : 0;
// string mapTag = (mapData == Main.MapData) ? "ORIG" : "CAL";
// bool sameRef = ReferenceEquals(info.DamageTarget, origDef);
// LogSystem.LogInfo($"[SYNERGY-DIAG] map={mapTag} sameTargetRef={sameRef} calLvBefore={beforeCal} origLvBefore={beforeOrig} targetId={info.DamageTarget.Id}");
info.DamageTarget.AddSkill_Legacy(SkillType.KAGUYAFRENCHSYNERGYDEBUFF, mapData,false,0,true,1,true,SpecialAddSkillType.AddLevel,info.DamageOrigin.Id);
// int afterCal = info.DamageTarget.GetSkill(SkillType.KAGUYAFRENCHSYNERGYDEBUFF, out var sCal2) ? sCal2.Level : 0;
// int afterOrig = origDef != null && origDef.GetSkill(SkillType.KAGUYAFRENCHSYNERGYDEBUFF, out var sOrig2) ? sOrig2.Level : 0;
// LogSystem.LogInfo($"[SYNERGY-DIAG] map={mapTag} calLvAfter={afterCal} origLvAfter={afterOrig} (delta cal={afterCal-beforeCal} orig={afterOrig-beforeOrig})");
// === 诊断 log end ===
//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;
// 检查自身是否拥有 HouraisanFrenchFakeMoon 且技能未被冻结
float multiplier = 0.5f;
if (self.GetSkill(SkillType.HouraisanFrenchFakeMoon, out var fakeMoonSkill))
{
// 检查技能是否被冻结(通过技能自身的 IsFrozen 方法)
if (!fakeMoonSkill.IsFrozen(self))
{
multiplier = 1.0f;
}
}
return skill.Level * multiplier * self.GetSpecialSkillBonus(mapData, GetSkillType());
}
public override bool ReservedOnTransform(UnitData self, UnitFullType fullType)
{
if (!IsPermanent) return true;
return false;
}
}
}