示例#1
0
文件: Attach.cs 项目: longde123/grove
        protected override void ResolveEffect()
        {
            var attachTo = (Card)Target;

            attachTo.Attach(Source.OwningCard);

            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            foreach (var modifier in _modifiers.Select(factory => factory()))
            {
                if (modifier is ICardModifier)
                {
                    attachTo.AddModifier((ICardModifier)modifier, p);
                }
                else if (modifier is IGameModifier)
                {
                    Game.AddModifier((IGameModifier)modifier, p);
                }
            }
        }
        public override void ProcessResults(ChosenOptions results)
        {
            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            var ability = Static.Vigilance;

            if (results.Options[0].Equals(EffectOption.Haste))
            {
                ability = Static.Haste;
            }

            if (results.Options[0].Equals(EffectOption.Lifelink))
            {
                ability = Static.Lifelink;
            }

            var modifier = new AddSimpleAbility(ability)
            {
                UntilEot = true
            };

            Source.OwningCard.AddModifier(modifier, p);
        }
示例#3
0
        protected override void ResolveEffect()
        {
            var emblem = new Emblem(_text, _score);

            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X,
                IsStatic     = true
            };

            foreach (var modifier in _modifiers.Select(modifierFactory => modifierFactory()))
            {
                var lifetime = new EmblemLifetime(emblem);
                lifetime.Initialize(Game);

                modifier.AddLifetime(lifetime);

                if (modifier is IGameModifier gameModifier)
                {
                    Game.AddModifier(gameModifier, p);
                }
                else if (modifier is IPlayerModifier playerModifier)
                {
                    _controller.Value.AddModifier(playerModifier, p);
                }
            }

            _controller.Value.AddEmblem(emblem);
        }
示例#4
0
        protected override void ResolveEffect()
        {
            foreach (Card target in ValidEffectTargets)
            {
                // exile first, otherwise modifier
                // will be removed when moving to exile
                target.Exile();

                if (!target.Is().Token)
                {
                    var tp = new TriggeredAbility.Parameters
                    {
                        Text = string.Format("When {0} leaves play, return exiled creature to battlefield.",
                                             Source.OwningCard.Name),
                        Effect = () => new PutOwnerToBattlefield(Zone.Exile),
                    };

                    tp.Trigger(new WhenPermanentLeavesPlay(Source.OwningCard));

                    var mp = new ModifierParameters
                    {
                        SourceCard   = Source.OwningCard,
                        SourceEffect = this
                    };

                    target.AddModifier(new AddTriggeredAbility(new TriggeredAbility(tp)), mp);
                }
            }
        }
        public override int PreventDamage(PreventDamageParameters p)
        {
            if (p.Target.IsPlayer())
            return 0;

              var targetCard = p.Target.Card();

              if (targetCard.Controller != _player)
            return 0;

              if (_filter(targetCard) == false)
            return 0;

              if (p.QueryOnly)
            return p.Amount;

              var mp = new ModifierParameters
            {
              SourceCard = targetCard,
            };

              var modifier = new AddCounters(_counter, p.Amount);
              targetCard.AddModifier(modifier, mp);

              return p.Amount;
        }
        public override void ProcessResults(ChosenOptions results)
        {
            var chosenType = (string)results.Options[0];

            var sp = new StaticAbilityParameters();

            sp.Modifier(() =>
            {
                var cp = new ContinuousEffectParameters
                {
                    Modifier = () => new AddPowerAndToughness(_power, _toughness),
                    Selector = (card, effect) => card.Is().Creature&& card.Is(chosenType) && IsValidController(card)
                };

                return(new AddContiniousEffect(new ContinuousEffect(cp)));
            });

            var modifier = new AddStaticAbility(new StaticAbility(sp));

            var mp = new ModifierParameters
            {
                SourceCard   = Source.OwningCard,
                SourceEffect = this
            };

            Source.OwningCard.AddModifier(modifier, mp);
        }
示例#7
0
        public override int PreventDamage(PreventDamageParameters p)
        {
            if (p.Target.IsPlayer())
            {
                return(0);
            }

            var targetCard = p.Target.Card();

            if (targetCard.Controller != _player)
            {
                return(0);
            }

            if (_filter(targetCard) == false)
            {
                return(0);
            }

            if (p.QueryOnly)
            {
                return(p.Amount);
            }

            var mp = new ModifierParameters
            {
                SourceCard = targetCard,
            };

            var modifier = new AddCounters(_counter, p.Amount);

            targetCard.AddModifier(modifier, mp);

            return(p.Amount);
        }
示例#8
0
        protected override void ResolveEffect()
        {
            // Fix: when equipment becomes creature (e.g Ensoul Artifact, Haunted Plate Mail) it tries to equip self. It caused StackOverflow exception
            if (Source.OwningCard.Is().Creature&& Source.OwningCard.Is().Equipment)
            {
                return;
            }

            var attachTo = (Card)Target;

            attachTo.Attach(Source.OwningCard);

            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            foreach (var modifier in _modifiers.Select(factory => factory()))
            {
                if (modifier is ICardModifier)
                {
                    attachTo.AddModifier((ICardModifier)modifier, p);
                }
                else if (modifier is IGameModifier)
                {
                    Game.AddModifier((IGameModifier)modifier, p);
                }
            }
        }
        protected override void ResolveEffect()
        {
            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            foreach (var target in ValidEffectTargets)
            {
                if (target.IsCard())
                {
                    foreach (var modifier in _cardModifiers.Select(factory => factory()))
                    {
                        target.Card().AddModifier(modifier, p);
                    }
                }

                else if (target.IsPlayer())
                {
                    foreach (var modifier in _playerModifiers.Select(factory => factory()))
                    {
                        target.Player().AddModifier(modifier, p);
                    }
                }
            }
        }
示例#10
0
        protected override void ResolveEffect()
        {
            var source = DamageSource.IsEffect()
        ? DamageSource.Effect().Source.OwningCard
        : DamageSource.Card();

            var mp = new ModifierParameters
            {
                SourceCard   = Source.OwningCard,
                SourceEffect = this,
                X            = X
            };

            var prevention = new PreventAllDamageFromSourceToTarget(
                source: source,
                creatureOrPlayer: DamageTarget,
                onlyOnce: true);

            var modifier = new AddDamagePrevention(prevention)
            {
                UntilEot = true
            };

            Game.AddModifier(modifier, mp);
        }
        protected override void ResolveEffect()
        {
            if (Source.OwningCard.Zone != Zone.Battlefield)
            return;

              var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              var selfModifiers = _selfModifiers.Select(factory => factory());

              foreach (var modifier in selfModifiers)
              {
            Source.OwningCard.AddModifier(modifier, p);
              }

              var targetModifiers = _targetModifiers.Select(factory => factory());

              foreach (var modifier in targetModifiers)
              {
            Target.Card().AddModifier(modifier, p);
              }
        }
示例#12
0
        protected override void ResolveEffect()
        {
            var hasWon = FlipACoin(Controller);

            if (hasWon)
            {
                return;
            }

            if (Source.OwningCard.Zone != Zone.Battlefield)
            {
                return;
            }

            if (Source.OwningCard.Controller == _opponent)
            {
                return;
            }

            var sourceModifier = new ChangeController(_opponent);

            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            Source.OwningCard.AddModifier(sourceModifier, p);
        }
        protected override void ResolveEffect()
        {
            if (Source.OwningCard.Zone != Zone.Battlefield)
            {
                return;
            }

            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            var selfModifiers = _selfModifiers.Select(factory => factory());

            foreach (var modifier in selfModifiers)
            {
                Source.OwningCard.AddModifier(modifier, p);
            }

            var targetModifiers = _targetModifiers.Select(factory => factory());

            foreach (var modifier in targetModifiers)
            {
                Target.Card().AddModifier(modifier, p);
            }
        }
示例#14
0
        protected override void ResolveEffect()
        {
            var attachTo = (Card) Target;

              attachTo.Attach(Source.OwningCard);

              var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              foreach (var modifier in _modifiers.Select(factory => factory()))
              {
            if (modifier is ICardModifier)
            {
              attachTo.AddModifier((ICardModifier) modifier, p);
            }
            else if (modifier is IGameModifier)
            {
              Game.AddModifier((IGameModifier) modifier, p);
            }
              }
        }
        protected override void ResolveEffect()
        {
            var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              foreach (var target in ValidEffectTargets)
              {
            if (target.IsCard())
            {
              foreach (var modifier in _cardModifiers.Select(factory => factory()))
              {
            target.Card().AddModifier(modifier, p);
              }
            }

            else if (target.IsPlayer())
            {
              foreach (var modifier in _playerModifiers.Select(factory => factory()))
              {
            target.Player().AddModifier(modifier, p);
              }
            }
              }
        }
示例#16
0
        public void AddModifier(ICardModifier modifier, ModifierParameters p)
        {
            _modifiers.Add(modifier);
            ActivateModifier(modifier, p);

            if (IsPermanent)
            {
                Publish(new PermanentModifiedEvent(this, modifier));
            }
        }
示例#17
0
        public override void PayPartial(PayCostParameters p)
        {
            var count = _hasX ? p.X : _count;

            var mp = new ModifierParameters {
                SourceCard = Card
            };

            Card.AddModifier(new AddCounters(
                                 () => new SimpleCounter(_counterType), count), mp);
        }
示例#18
0
        public void Initialize(ModifierParameters p, Game game)
        {
            Game         = game;
            SourceCard   = p.SourceCard;
            SourceEffect = p.SourceEffect;
            Owner        = p.Owner;
            X            = p.X;

            InitializeLifetimes(p.IsStatic);
            Initialize();
        }
示例#19
0
        public override IEnumerable <CardTemplate> GetCards()
        {
            yield return(Card
                         .Named("Briber's Purse")
                         .ManaCost("{0}").HasXInCost()
                         .Type("Artifact")
                         .Text("Briber's Purse enters the battlefield with X gem counters on it.{EOL}{1},{T}, Remove a gem counter from Briber's Purse: Target creature can't attack or block this turn.")
                         .FlavorText("Victory is certain. The price, negotiable.")
                         .Cast(p =>
            {
                p.CostRule(new XIsAvailableMana(-1));
                p.AfterResolve = (c, ctx) =>
                {
                    var x = ctx.X ?? 0;

                    c.PutToBattlefield();

                    var mp = new ModifierParameters
                    {
                        SourceEffect = ctx.Effect,
                        SourceCard = c,
                        X = x
                    };

                    var addCounters = new AddCounters(() => new SimpleCounter(CounterType.Gem), Value.PlusX);
                    c.AddModifier(addCounters, mp);
                };
            })
                         .ActivatedAbility(p =>
            {
                p.Text = "{1},{T}, Remove a gem counter from Briber's Purse: Target creature can't attack or block this turn.";

                p.Cost = new AggregateCost(
                    new PayMana(1.Colorless()),
                    new Tap(),
                    new RemoveCounters(CounterType.Gem, count: 1));

                p.Effect = () => new ApplyModifiersToTargets(
                    () => new AddSimpleAbility(Static.CannotBlock)
                {
                    UntilEot = true
                },
                    () => new AddSimpleAbility(Static.CannotAttack)
                {
                    UntilEot = true
                }).SetTags(EffectTag.CombatDisabler);

                p.TargetSelector.AddEffect(trg => trg.Is.Creature().On.Battlefield());

                p.TimingRule(new OnStep(Step.BeginningOfCombat));
                p.TargetingRule(new EffectCannotBlockAttack());
            }));
        }
示例#20
0
        private void ActivateModifier(ICardModifier modifier, ModifierParameters p)
        {
            p.Owner = this;
            modifier.Initialize(p, Game);

            foreach (var modifiable in ModifiableProperties)
            {
                modifiable.Accept(modifier);
            }

            modifier.Activate();
        }
        protected override void ResolveEffect()
        {
            var mp = new ModifierParameters
            {
              SourceCard = Source.OwningCard,
              SourceEffect = this,
            };

              var prevention = new Grove.PreventAllCombatDamage();
              var modifier = new AddDamagePrevention(prevention) {UntilEot = true};
              Game.AddModifier(modifier, mp);
        }
        private void GainControl(Card enchantment)
        {
            var sourceModifier = new ChangeController(Controller);

              var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              enchantment.AddModifier(sourceModifier, p);
        }
示例#23
0
        private void GainControl(Card enchantment)
        {
            var sourceModifier = new ChangeController(Controller);

            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            enchantment.AddModifier(sourceModifier, p);
        }
示例#24
0
文件: Player.cs 项目: longde123/grove
        public void AddModifier(IPlayerModifier modifier, ModifierParameters p)
        {
            p.Owner = this;
            _modifiers.Add(modifier);

            modifier.Initialize(p, Game);
            modifier.Activate();

            foreach (var modifiableProperty in ModifiableProperties)
            {
                modifiableProperty.Accept(modifier);
            }
        }
示例#25
0
        private void AddModifier(Card card)
        {
            var modifier = _modifierFactory();

            _modifiers.Add(modifier);
            _doNotUpdate.Value = modifier;

            var p = new ModifierParameters
            {
                SourceCard = Source,
            };

            card.AddModifier(modifier, p);
        }
        protected override void ResolveEffect()
        {
            var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              foreach (var modifier in _modifiers.Select(modifierFactory => modifierFactory()))
              {
            Game.AddModifier(modifier, p);
              }
        }
        protected override void ResolveEffect()
        {
            var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              var modifier = new AddPowerAndToughness(_countersCount, _countersCount) {UntilEot = true};

              var targetCreature = (Card) Target;
              targetCreature.AddModifier(modifier, p);
        }
示例#28
0
        protected override void ResolveEffect()
        {
            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            foreach (var modifier in _modifiers.Select(modifierFactory => modifierFactory()))
            {
                _card.Value.AddModifier(modifier, p);
            }
        }
示例#29
0
        public void ProcessResults(BooleanResult results)
        {
            if (results.IsTrue)
            {
                var p = new ModifierParameters
                {
                    SourceCard   = Source.OwningCard,
                    SourceEffect = this,
                };

                var addCounter = new AddCounters(() => new SimpleCounter(_counterType), 1);
                Source.OwningCard.AddModifier(addCounter, p);
            }
        }
        public override void ProcessResults(ChosenOptions results)
        {
            var color = ChoiceToColorMap.Single(x => x.Choice.Equals(results.Options[0])).Color;

              var modifier = new AddProtectionFromColors(color) {UntilEot = true};

              var parameters = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard
            };

              Target.Card().AddModifier(modifier, parameters);
        }
        protected override void ResolveEffect()
        {
            var targetModifier = new ChangeController(Controller);
              var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              Target.Card().AddModifier(targetModifier, p);

              var sourceModifier = new ChangeController(Controller.Opponent);
              Source.OwningCard.AddModifier(sourceModifier, p);
        }
        protected override void ResolveEffect()
        {
            var mp = new ModifierParameters
            {
              SourceCard = Source.OwningCard,
              SourceEffect = this,
            };

              foreach (var target in ValidEffectTargets)
              {
            var prevention = new PreventNextDamageToTarget(_amount, target);
            var modifier = new AddDamagePrevention(prevention) {UntilEot = true};
            Game.AddModifier(modifier, mp);
              }
        }
示例#33
0
        protected override void ResolveEffect()
        {
            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            var modifier = new AddCounters(() => new PowerToughness(1, 1), count: _count.Value);

            var targetCreature = (Card)Target;

            targetCreature.AddModifier(modifier, p);
        }
示例#34
0
        private static void AddCounters(ScenarioCard scenarioCard, Card card)
        {
            if (scenarioCard.HasCounters)
            {
                var p = new ModifierParameters
                {
                    SourceCard = card,
                };

                var counters = new AddCounters(() => new SimpleCounter(scenarioCard.Counters.Type),
                                               scenarioCard.Counters.Count);

                card.AddModifier(counters, p);
            }
        }
        protected override void ResolveEffect()
        {
            var targetModifier = new ChangeController(Controller);
            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            Target.Card().AddModifier(targetModifier, p);

            var sourceModifier = new ChangeController(Controller.Opponent);

            Source.OwningCard.AddModifier(sourceModifier, p);
        }
        public override void ProcessResults(ChosenOptions results)
        {
            var ability = (Static) Enum.Parse(
            typeof (Static),
            (string) results.Options[0]);

              var modifier = new DisableAbility(ability) {UntilEot = true};

              var mp = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard
            };

              Target.Card().AddModifier(modifier, mp);
        }
示例#37
0
        public override void ProcessResults(ChosenOptions results)
        {
            var lifeToPay = (int) results.Options[0];

              Controller.Life -= lifeToPay;

              var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              var addCounters = new AddCounters(() => new SimpleCounter(_counterType), lifeToPay);
              Source.OwningCard.AddModifier(addCounters, p);
        }
        protected override void ResolveEffect()
        {
            var mp = new ModifierParameters
            {
                SourceCard   = Source.OwningCard,
                SourceEffect = this,
            };

            var prevention = new Grove.PreventCombatDamage(_filter);
            var modifier   = new AddDamagePrevention(prevention)
            {
                UntilEot = true
            };

            Game.AddModifier(modifier, mp);
        }
        protected override void ResolveEffect()
        {
            var mp = new ModifierParameters
            {
                SourceCard   = Source.OwningCard,
                SourceEffect = this,
            };

            var prevention = new PreventDamageToTarget(
                target: Source.OwningCard.AttachedTo,
                amount: (creatureOrPlayer, ctx) => _amount((Card)(creatureOrPlayer)));

            var modifier = new AddDamagePrevention(prevention);

            Game.AddModifier(modifier, mp);
        }
        public override void ProcessResults(ChosenOptions results)
        {
            var color = ChoiceToColorMap.Single(x => x.Choice.Equals(results.Options[0])).Color;

            var modifier = new AddProtectionFromColors(color)
            {
                UntilEot = true
            };

            var parameters = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard
            };

            Target.Card().AddModifier(modifier, parameters);
        }
示例#41
0
        public override void ProcessResults(ChosenOptions results)
        {
            var lifeToPay = (int)results.Options[0];

            Controller.Life -= lifeToPay;

            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            var addCounters = new AddCounters(() => new SimpleCounter(_counterType), lifeToPay);

            Source.OwningCard.AddModifier(addCounters, p);
        }
示例#42
0
        protected override void ResolveEffect()
        {
            var p = new ModifierParameters
            {
                SourceEffect = this,
                SourceCard   = Source.OwningCard,
                X            = X
            };

            var modifier = new AddPowerAndToughness(_countersCount, _countersCount)
            {
                UntilEot = true
            };

            var targetCreature = (Card)Target;

            targetCreature.AddModifier(modifier, p);
        }
示例#43
0
        protected override void ResolveEffect()
        {
            var mp = new ModifierParameters
            {
                SourceCard   = Source.OwningCard,
                SourceEffect = this,
            };

            foreach (var target in ValidEffectTargets)
            {
                var prevention = new PreventNextDamageToTarget(_amount, target);
                var modifier   = new AddDamagePrevention(prevention)
                {
                    UntilEot = true
                };
                Game.AddModifier(modifier, mp);
            }
        }
示例#44
0
        protected override void ResolveEffect()
        {
            if (Source.OwningCard.Zone != Zone.Battlefield)
            return;

              if (Source.OwningCard.Controller == _opponent)
            return;

              var sourceModifier = new ChangeController(_opponent);

              var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              Source.OwningCard.AddModifier(sourceModifier, p);
        }
        protected override void ResolveEffect()
        {
            var target = _toAttachedTo ? Source.OwningCard.AttachedTo : Source.OwningCard;

              var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              if (Source.OwningCard.Zone == Zone.Battlefield)
              {
            foreach (var modifier in _selfModifiers.Select(modifierFactory => modifierFactory()))
            {
              target.AddModifier(modifier, p);
            }
              }
        }
        protected override void ResolveEffect()
        {
            var source = Target.IsEffect()
            ? Target.Effect().Source.OwningCard
            : Target.Card();

              var mp = new ModifierParameters
            {
              SourceCard = Source.OwningCard,
              SourceEffect = this,
              X = X
            };

              var prevention = new PreventAllDamageFromSource(
            source, _preventCombatOnly);

              var modifier = new AddDamagePrevention(prevention) {UntilEot = true};
              Game.AddModifier(modifier, mp);
        }
        protected override void ResolveEffect()
        {
            var source = DamageSource.IsEffect()
            ? DamageSource.Effect().Source.OwningCard
            : DamageSource.Card();

              var mp = new ModifierParameters
            {
              SourceCard = Source.OwningCard,
              SourceEffect = this,
              X = X
            };

              var prevention = new PreventAllDamageFromSourceToTarget(
            source: source,
            creatureOrPlayer: DamageTarget,
            onlyOnce: true);

              var modifier = new AddDamagePrevention(prevention) {UntilEot = true};
              Game.AddModifier(modifier, mp);
        }
        public override void ProcessResults(ChosenOptions results)
        {
            var chosenType = (string)results.Options[0];

              var cp = new ContinuousEffectParameters
            {
              Modifier = () => new AddPowerAndToughness(-1, -1),
              CardFilter = (card, effect) => card.Is().Creature && card.Is(chosenType)
            };

              var modifier = new AddContiniousEffect(
            new ContinuousEffect(cp));

              var mp = new ModifierParameters
            {
              SourceCard = Source.OwningCard,
              SourceEffect = this
            };

              Source.OwningCard.AddModifier(modifier, mp);
        }
        protected override void ResolveEffect()
        {
            var permanents = Players.Permanents()
            .Where(x => _filter(x, this))
            .ToList();

              foreach (var permanent in permanents)
              {
            if (permanent.Controller != Controller)
            {
              var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              var modifier = new ChangeController(Controller);
              permanent.AddModifier(modifier, p);
            }
              }
        }
示例#50
0
        public void AddModifier(IPlayerModifier modifier, ModifierParameters p)
        {
            p.Owner = this;
              _modifiers.Add(modifier);

              modifier.Initialize(p, Game);
              modifier.Activate();

              foreach (var modifiableProperty in ModifiableProperties)
              {
            modifiableProperty.Accept(modifier);
              }
        }
        public override void ProcessResults(ChosenOptions results)
        {
            var chosenType = (string) results.Options[0];

              var costModifier = new SpellCostModifier(_amount,
            (card, self) => card.Is().Creature && card.Is(chosenType));

              var addCostModifier = new AddCostModifier(costModifier);

              addCostModifier.AddLifetime(new PermanentLeavesBattlefieldLifetime(
            self => self.Modifier.SourceCard
            ));

              var mp = new ModifierParameters
            {
              SourceCard = Source.OwningCard,
              SourceEffect = this
            };

              Game.AddModifier(addCostModifier, mp);
        }
示例#52
0
        private void ActivateModifier(ICardModifier modifier, ModifierParameters p)
        {
            p.Owner = this;
              modifier.Initialize(p, Game);

              foreach (var modifiable in ModifiableProperties)
              {
            modifiable.Accept(modifier);
              }

              modifier.Activate();
        }
示例#53
0
        public void AddModifier(ICardModifier modifier, ModifierParameters p)
        {
            _modifiers.Add(modifier);
              ActivateModifier(modifier, p);

              if (IsPermanent)
              {
            Publish(new PermanentModifiedEvent(this, modifier));
              }
        }
        private void ApplyModifierToPlayersPermanents(Player player)
        {
            foreach (var permanent in player.Battlefield)
              {
            if (!_selector(this, permanent))
              continue;

            foreach (var modifierFactory in _modifiers)
            {
              var p = new ModifierParameters
            {
              SourceEffect = this,
              SourceCard = Source.OwningCard,
              X = X
            };

              var modifier = modifierFactory();
              permanent.AddModifier(modifier, p);
            }
              }
        }