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); }
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); }
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); }
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); }
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); } } } }
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); } }
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); } }
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 void AddModifier(ICardModifier modifier, ModifierParameters p) { _modifiers.Add(modifier); ActivateModifier(modifier, p); if (IsPermanent) { Publish(new PermanentModifiedEvent(this, modifier)); } }
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); }
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(); }
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()); })); }
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); }
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); } }
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); }
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); } }
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); } }
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); }
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); } }
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); }
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); }
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 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); }
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); } }
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); } } }
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); }
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); } } }