Files
BH3/Assets/Scripts/Assembly-CSharp/MoleMole/AbilityModifyDamageTakenByDamageValueMixin.cs
2025-08-13 09:26:42 +08:00

55 lines
1.8 KiB
C#

using MoleMole.Config;
namespace MoleMole
{
public class AbilityModifyDamageTakenByDamageValueMixin : AbilityModifyDamageTakenMixin
{
private ModifyDamageTakenByDamageValueMixin config;
public AbilityModifyDamageTakenByDamageValueMixin(ActorAbility instancedAbility, ActorModifier instancedModifier, ConfigAbilityMixin config)
: base(instancedAbility, instancedModifier, config)
{
this.config = (ModifyDamageTakenByDamageValueMixin)config;
}
protected override bool OnPostBeingHit(EvtBeingHit evt)
{
base.OnPostBeingHit(evt);
float replaceDamage = GetReplaceDamage(evt.attackData.damage);
if (replaceDamage != evt.attackData.damage)
{
evt.attackData.damage = GetReplaceDamage(evt.attackData.damage);
if (config.UseReplaceAniDamageRatio)
{
evt.attackData.attackerAniDamageRatio = config.ReplaceAniDamageRatio;
}
}
evt.attackData.fireDamage = GetReplaceDamage(evt.attackData.fireDamage);
evt.attackData.thunderDamage = GetReplaceDamage(evt.attackData.thunderDamage);
evt.attackData.alienDamage = GetReplaceDamage(evt.attackData.alienDamage);
evt.attackData.plainDamage = GetReplaceDamage(evt.attackData.plainDamage);
return true;
}
private float GetReplaceDamage(float damage)
{
switch (config.CompareType)
{
case ModifyDamageTakenByDamageValueMixin.LogicType.MoreThan:
if (damage > instancedAbility.Evaluate(config.ByDamageValue))
{
damage = instancedAbility.Evaluate(config.ReplaceDamageValue);
}
break;
case ModifyDamageTakenByDamageValueMixin.LogicType.LessThanOrEqual:
if (damage <= instancedAbility.Evaluate(config.ByDamageValue) && damage > instancedAbility.Evaluate(config.ReplaceDamageValue))
{
damage = instancedAbility.Evaluate(config.ReplaceDamageValue);
}
break;
}
return damage;
}
}
}