89 lines
3.9 KiB
C#
89 lines
3.9 KiB
C#
/*
|
||
* @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;
|
||
}
|
||
}
|
||
} |