public OneOrMany <IAction> Intercept(IAction action, GameContext context) { IAction result = action is DamageAction damageAction && context.RandomService.NextDouble() < _chance ? new DamageAction(damageAction.Target, new HitPoints((uint)(Math.Round(damageAction.Damage.Value * _damageMultiplier)))) : action; return(result.AsOne()); }
public OneOrMany <IAction> Intercept(IAction action, GameContext context) { return (action is DamageAction damageAction && !damageAction.Target.Requisites.Contains(_status) ? AppendStatusAndRemover() : action.AsOne()); OneOrMany <IAction> AppendStatusAndRemover() => new IAction[] { action, new AddRequisiteAction(damageAction.Target, _status), new AddRequisiteAction(damageAction.Target, new RemoveRequisiteAbility(_status, CommonTickPhases.PassiveAbilities).Schedule(_duration)) } .AsMany(); }