using UnityEngine;
using XGame.Database;
using XGame.Framework.Components;
namespace FL.Battle.Components
{
public interface IEpigraphicsContext
{
IEntity Entity { get; }
int EpigraphId { get; }
ITargetSelector Selector { get; }
}
///
/// 铭文组件
/// 只有随从可以装配,且只能装配一个
///
public class EpigraphicsComponent : Component
{
protected override void OnDispose()
{
}
///
/// 是否铭文的目标debuff
///
///
///
public bool IsTargetBuff(int buffId, out int epigrapId)
{
if (Context.EpigraphId == 20300)
{
var table = EpigraphTableRepo.Get(Context.EpigraphId);
if (buffId == table.EffectArgs[0])
{
epigrapId = Context.EpigraphId;
return true;
}
}
epigrapId = 0;
return false;
}
///
/// 尝试触发远古毒素
/// 冰->毒
///
///
///
///
///
public bool TryTickIceToPoison(long targetId, EElementType skillElementType, int damage)
{
//EffectArgs: [目标buffId,层数,伤害转吸血万分比,不满足层数时buff触发概率,buffid1,buffid2,buffid3]
if (Context.EpigraphId != 20300 || skillElementType != EElementType.Ice)
return false;
var target = Context.Selector.GetTarget(targetId);
if (target == null) return false;
var table = EpigraphTableRepo.Get(Context.EpigraphId);
var tarBuffId = table.EffectArgs[0];
var tarLayers = target.Buffs.GetLayers(tarBuffId);
if (tarLayers == 0)
return false;
if (tarLayers == table.EffectArgs[1])
{ // 触发5层特效
// 吸血比例,吸血给玩家
var suckBloodPer = table.EffectArgs[2];
var player = Context.Selector.GetPlayer();
player.Calculation.Damage(Mathf.Abs(damage * suckBloodPer), EElementType.None);
return true;
}
if (MathUtils.Random(table.EffectArgs[3]) == false)
{
return false;
}
var buffId1 = table.EffectArgs[4];
var buffId2 = table.EffectArgs[5];
var buffId3 = table.EffectArgs[6];
target.Calculation.TickBuff(buffId1);
target.Calculation.TickBuff(buffId2);
target.Calculation.TickBuff(buffId3);
return true;
}
}
}