void player_CardsDiscarding(object sender, CardsDiscardEventArgs e) { if (!e.Cards.Contains(this.PhysicalCard) || e.GetAction(TypeClass.Alchemist) != null || (e.FromLocation != DeckLocation.InPlay && e.FromLocation != DeckLocation.SetAside && e.FromLocation != DeckLocation.InPlayAndSetAside)) { return; } if (e.Cards.Any(c => c.CardType == TypeClass.Potion)) { e.AddAction(TypeClass.Alchemist, new CardsDiscardAction(sender as Player, this, String.Format("Put {0} on your deck", this.PhysicalCard), player_Action, false)); } }
void player_CardsDiscarding(object sender, CardsDiscardEventArgs e) { if (!e.Cards.Contains(this.PhysicalCard) || e.GetAction(TypeClass.Herbalist) != null || e.HandledBy.Contains(this) || (e.FromLocation != DeckLocation.InPlay && e.FromLocation != DeckLocation.SetAside && e.FromLocation != DeckLocation.InPlayAndSetAside)) { return; } if (e.Cards.Any(c => (c.Category & Cards.Category.Treasure) == Cards.Category.Treasure)) { e.AddAction(TypeClass.Herbalist, new CardsDiscardAction(sender as Player, this, "Put a Treasure on your deck", player_Action, false)); } }
protected override ChoiceResult Decide_CardsDiscard(Choice choice, CardsDiscardEventArgs cdea, IEnumerable<Tuple<Type, Type>> cardTriggerTypes) { // Always put Treasury on my deck if I can if (cardTriggerTypes.Any(t => t.Item1 == Cards.Seaside.TypeClass.Treasury)) return new ChoiceResult(new List<String>() { cdea.GetAction(Cards.Seaside.TypeClass.Treasury).Text }); // Always put Alchemist on my deck if I can if (cardTriggerTypes.Any(t => t.Item1 == Cards.Alchemy.TypeClass.Alchemist)) return new ChoiceResult(new List<String>() { cdea.GetAction(Cards.Alchemy.TypeClass.Alchemist).Text }); // Only perform Herbalist if there's at least 1 non-Copper Treasure card in play if (cardTriggerTypes.Any(t => t.Item1 == Cards.Alchemy.TypeClass.Herbalist)) return new ChoiceResult(new List<String>() { cdea.GetAction(Cards.Alchemy.TypeClass.Herbalist).Text }); // Always reveal this when discarding if (cardTriggerTypes.Any(t => t.Item1 == Cards.Hinterlands.TypeClass.Tunnel)) return new ChoiceResult(new List<String>() { cdea.GetAction(Cards.Hinterlands.TypeClass.Tunnel).Text }); IEnumerable<CardsDiscardAction> schemeOptions = cdea.Actions.Where(kvp => kvp.Key.Item1 == Cards.Hinterlands.TypeClass.Scheme).Select(kvp => kvp.Value).OrderBy(cda => ((ICard)cda.Data).BaseCost.Coin.Value + 2.5f * ((ICard)cda.Data).BaseCost.Potion.Value); if (schemeOptions.Count() > 0) return new ChoiceResult(new List<String>() { schemeOptions.ElementAt(0).Text }); // Dunno what to do -- choose a random IsRequired one or nothing if there are none IEnumerable<KeyValuePair<Tuple<Type, Type>, CardsDiscardAction>> requiredActions = cdea.Actions.Where(a => a.Value.IsRequired); if (requiredActions.Count() > 0) { int index = this._Game.RNG.Next(requiredActions.Count()); return new ChoiceResult(new List<String>() { cdea.Actions[requiredActions.ElementAt(index).Key].Text }); } return new ChoiceResult(new List<String>()); }
protected override ChoiceResult Decide_CardsDiscard(Choice choice, CardsDiscardEventArgs cdea, IEnumerable<Tuple<Type, Type>> cardTriggerTypes) { // Always put Treasury on my deck if I can if (cardTriggerTypes.Any(t => t.Item1 == Cards.Seaside.TypeClass.Treasury)) return new ChoiceResult(new List<String>() { cdea.GetAction(Cards.Seaside.TypeClass.Treasury).Text }); // Always put Alchemist on my deck if I can if (cardTriggerTypes.Any(t => t.Item1 == Cards.Alchemy.TypeClass.Alchemist)) return new ChoiceResult(new List<String>() { cdea.GetAction(Cards.Alchemy.TypeClass.Alchemist).Text }); // Only perform Herbalist if there's at least 1 non-Copper Treasure card in play if (cardTriggerTypes.Any(t => t.Item1 == Cards.Alchemy.TypeClass.Herbalist)) { if (this.RealThis.InPlay[Category.Treasure].Any(c => c.CardType != Cards.Universal.TypeClass.Copper)) return new ChoiceResult(new List<String>() { cdea.GetAction(Cards.Alchemy.TypeClass.Herbalist).Text }); } // Always reveal this when discarding if (cardTriggerTypes.Any(t => t.Item1 == Cards.Hinterlands.TypeClass.Tunnel)) return new ChoiceResult(new List<String>() { cdea.GetAction(Cards.Hinterlands.TypeClass.Tunnel).Text }); return new ChoiceResult(new List<String>()); }