Пример #1
0
        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();
        }