96 lines
3.0 KiB
C#
96 lines
3.0 KiB
C#
/*
|
|
* @Author: 白哉
|
|
* @Description:
|
|
* @Date: 2025年10月12日 星期六 10:10:12
|
|
* @Modify:
|
|
*/
|
|
|
|
|
|
using RuntimeData;
|
|
|
|
|
|
namespace Logic.Skill
|
|
{
|
|
public partial class FlandreBuffSkill : SkillBase
|
|
{
|
|
public FlandreBuffSkill()
|
|
{
|
|
IsLevelSkill = true;
|
|
IsPermanent = false;
|
|
TurnsLimit = 0;
|
|
Score = 2;
|
|
_levelLimit = 4;
|
|
}
|
|
|
|
public override void OnTurnEnd(IdentifierBase identifier, MapData mapData)
|
|
{
|
|
var self = identifier as UnitData;
|
|
if (self == null) return;
|
|
SyncFlandreBuffLevel(mapData, 0);
|
|
}
|
|
|
|
public override SkillType GetSkillType()
|
|
{
|
|
return SkillType.FLANDREBUFF;
|
|
}
|
|
|
|
public override void AddLevel(MapData map, UnitData origin, UnitData self, int add)
|
|
{
|
|
var nextLevel = GetSharedFlandreBuffLevel(map) + add;
|
|
if (nextLevel > _levelLimit) nextLevel = _levelLimit;
|
|
SyncFlandreBuffLevel(map, nextLevel);
|
|
if (!map.GetPlayerDataByUnitId(origin.Id, out _)) return;
|
|
origin.HeroTask(map)?.OnAddSkillLevels(map, GetSkillType(), (uint)add);
|
|
}
|
|
|
|
public override float GetAttackAdditionParam(MapData mapData, UnitData self, UnitData target = null)
|
|
{
|
|
return 0.5f * Level;
|
|
}
|
|
|
|
public override bool ReservedOnTransform(UnitData self, UnitFullType fullType)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public override void OnAnyUnitCreate(MapData map, IdentifierBase identifier, UnitData newUnit)
|
|
{
|
|
if (newUnit?.UnitFullType.GiantType != GiantType.EgyptianFlandre) return;
|
|
var sharedLevel = GetSharedFlandreBuffLevel(map);
|
|
if (sharedLevel <= 0) return;
|
|
EnsureFlandreBuff(map, newUnit).SetLevel(sharedLevel);
|
|
}
|
|
|
|
private int GetSharedFlandreBuffLevel(MapData map)
|
|
{
|
|
var level = 0;
|
|
foreach (var unit in map.UnitMap.UnitList)
|
|
{
|
|
if (unit.UnitFullType.GiantType != GiantType.EgyptianFlandre) continue;
|
|
if (unit.GetSkill(SkillType.FLANDREBUFF, out var skill))
|
|
level = System.Math.Max(level, skill.Level);
|
|
}
|
|
|
|
return level;
|
|
}
|
|
|
|
private void SyncFlandreBuffLevel(MapData map, int level)
|
|
{
|
|
foreach (var unit in map.UnitMap.UnitList)
|
|
{
|
|
if (unit.UnitFullType.GiantType != GiantType.EgyptianFlandre) continue;
|
|
EnsureFlandreBuff(map, unit).SetLevel(level);
|
|
}
|
|
}
|
|
|
|
private SkillBase EnsureFlandreBuff(MapData map, UnitData unit)
|
|
{
|
|
if (unit.GetSkill(SkillType.FLANDREBUFF, out var skill)) return skill;
|
|
unit.AddSkill_Legacy(SkillType.FLANDREBUFF, map, false, 0, true, 0, false,
|
|
SpecialAddSkillType.Normal, 0);
|
|
unit.GetSkill(SkillType.FLANDREBUFF, out skill);
|
|
return skill;
|
|
}
|
|
}
|
|
}
|