59 lines
1.8 KiB
C#

/*
* @Author: 白哉
* @Description:
* @Date: 2025年04月23日 星期三 21:04:18
* @Modify:
*/
using RuntimeData;
using System;
using MemoryPack;
using TH1_Logic.Core;
namespace Logic.Skill
{
public partial class ConvertSkill : SkillBase
{
public ConvertSkill()
{
IsPermanent = true;
TurnsLimit = 0;
Score = 4;
}
public override SkillType GetSkillType()
{
return SkillType.CONVERT;
}
// 攻击一名单位后,将该单位变成己方单位
public override void OnDamageOther(MapData mapData, SettlementInfo info)
{
if (info == null) return;
if (info.DamageType != DamageType.ActiveAttack) return;
if (info.DamageOrigin == null || info.DamageTarget == null) return;
if (info.DamageTarget.UnitType is UnitType.Giant or UnitType.GiantJuggernaut) return;
if (!mapData.GetGridDataByUnitId(info.DamageTarget.Id, out var grid)) return;
if (!mapData.GetPlayerDataByUnitId(info.DamageOrigin.Id, out var player)) return;
var citySet = mapData.GetCityDataSetByPlayerId(player.Id);
info.DamageTarget.ClearAPMPCP();
Main.PlayerLogic.UpdateSightByRadius(mapData,player,grid,grid.Feature == TerrainFeature.Mountain? 2:1);
foreach (var city in citySet)
{
if (mapData.GetUnitCount(city.Id) >= city.Level) continue;
mapData.SetUnitIdToCityId(info.DamageTarget.Id, city.Id);
return;
}
foreach (var city in citySet)
{
if (!city.IsCapital) continue;
mapData.SetUnitIdToCityId(info.DamageTarget.Id, city.Id);
return;
}
}
}
}