コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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));
            }
        }
コード例 #3
0
		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>());
		}
コード例 #4
0
		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>());
		}