Dominion Strategy Forum

Please login or register.

Login with username, password and session length
Pages: [1]

Author Topic: Chapel/Festival/Smithy engine  (Read 8711 times)

0 Members and 1 Guest are viewing this topic.

h1402686

  • Alchemist
  • ***
  • Offline Offline
  • Posts: 39
  • Respect: +32
    • View Profile
Chapel/Festival/Smithy engine
« on: July 27, 2016, 09:49:18 pm »
+3

Kingdom: Chapel, Village, Bureaucrat, Gardens, Smithy, Throne Room, Festival, Library, Market, Adventurer
I believe I need gokosalvager.com to post a visual Kingdom, and they seem to be down right now, but I've attached a screenshot from the online game showing the Kingdom.

Sages of all walks of life know that simulators don't play engines well, but, emboldened by Geronimoo's first game engine post and dissatisfied with the Chapel+Village+Festival+Smithy engine I had built in a Base set only game against the computer, I decided to try anyway. After a lot of messing around I got something that narrowly beats the built-in Smithy bot on 4/3 starts, 51% to 46% (it's easy to build an engine on a 5/2 start that crushes Smithy by opening Festival/Chapel). I thought it what I came up with was interesting enough to be worth posting, in part because the scenario is so fundamental. Here's the buy list from Geronimoo's simulator:
  • Buy Province if you have $22 in your deck or there are no more than 2 Provinces left
  • Buy Duchy if there are no more than 3 Provinces left
  • Buy Estate if there are no more than 2 Provinces left
  • Buy Festival if you have at least $9 to spend and at least 2 buys
  • Buy Gold unless you already have 2 Gold
  • Buy Festival if count_t(Village) < count_t(Terminal) + 1
  • Buy Silver unless you already have a Silver or a Festival
  • Buy a single Chapel (play strategy standard)
  • Buy Smithy if count_t(Village) > count_t(Terminal) - 2
  • Buy Village

This bot waits until it has $22 in the deck (7 Festivals) to green and often buys as few as 3 Smithies. Its peak average $ generated per turn is $15 at turn 14. It sometimes buys no vanilla Villages but their availability is critical to the engine working, statistically.

I've been unsure whether to post this here or on the game reports forum (since I don't exactly have a game report), but my questions are:
  • Is this an engine board on a 4/3 opening? If so, is this the right way to build an engine, with 7 Festivals if you could get them?
  • Would you (a strong human player) buy any Throne Rooms?
Logged

JW

  • Jester
  • *****
  • Offline Offline
  • Posts: 968
  • Shuffle iT Username: JW
  • Respect: +1781
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #1 on: July 27, 2016, 09:57:53 pm »
0

Is there a reason why you haven't considered Library? It pairs well with using Festival as your source of Coins. I'd plan to get lots of Throne Rooms if I were using Smithy as my main source of draw. Throne Room doesn't pair quite as well with Library as the main draw but it would still be useful there too.
Logged

NolanA

  • Salvager
  • ****
  • Offline Offline
  • Posts: 61
  • Respect: +53
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #2 on: July 27, 2016, 11:28:02 pm »
+1

I like your engine.  A few of the rules are uncommon for a chapel-engine in the base game, yet they work quite well.  However, if your goal is to beat Smithy-BM on the listed kingdom, I think you'll get the best results with some type of Bureaucrat/Gardens + Market (or Festival) rush.  For example the code below gives a ~80% win rate over Smithy with a 4/3 start and higher on a 5/2 start.  It has a ~76% win rate over Smithy on a 4/3 start, if Smithy is modified to buy Gardens in the standard Smithy-BM type way (wait until x number of provinces remain).  I expect you can get higher win rates by optimizing this type of strategy and including Villages.

Note that while this type of rush is strong against Smithy-BM, it is quite weak against some other options for this kingdom, which makes it important to monitor what your opponent is doing.  For example, your engine beats the listed strategy, winning 90%.  However, if the Bureaucrat/Gardens rush is modified to buy Festivals instead of Markets, then Bureaucrat/Gardens rush wins 90% against your engine since your engine buys enough Festivals to make it much easier to empty 3 piles, and the reduced available Festivals in the supply interferes with the engine.

Code: [Select]
<player name="Bureaucrat/Gardens + Market"
 author="NolanA"
 description="">
 <type name="Competitive"/>
 <type name="UserCreated"/>
 <type name="Combo"/>
 <type name="TwoPlayer"/>
 <type name="Bot"/>
 <type name="Province"/>
   <buy name="Gardens">
      <condition>
         <left type="countCardsInDeck" attribute="Bureaucrat"/>
         <operator type="greaterOrEqualThan" />
         <right type="constant" attribute="5.0"/>
      </condition>
   </buy>
   <buy name="Province">
      <condition>
         <left type="countCardsInSupply" attribute="Gardens"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Duchy">
      <condition>
         <left type="countCardsInSupply" attribute="Gardens"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Estate">
      <condition>
         <left type="countCardsInSupply" attribute="Gardens"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Market">
      <condition>
         <left type="countCardsInDeck" attribute="Market"/>
         <operator type="smallerOrEqualThan" />
         <right type="countCardsInDeck" attribute="Bureaucrat"/>
      </condition>
   </buy>
   <buy name="Bureaucrat"/>
   <buy name="Silver"/>
   <buy name="Copper"/>
</player>

« Last Edit: July 28, 2016, 04:01:09 am by NolanA »
Logged

h1402686

  • Alchemist
  • ***
  • Offline Offline
  • Posts: 39
  • Respect: +32
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #3 on: July 28, 2016, 08:14:53 am »
0

Thank you both. You've pointed out two important blind spots in my consideration of this kingdom. I can't get Library to simulate as well as Smithy, but playing the card correctly does involve a non-trivial choice of which actions to discard which the simulator can't make as well as a human, so I suspect the Library strategy is actually a bit stronger. It would be really strong with a sifter. At the moment once you get a stop card in your hand there's no way to get rid of it.

Here's the problem I face with Throne Room: it seems to make the engine less reliable. In order for the engine to fire I need both a village (usually a Festival) and a Smithy in each five card starting hand. Starting with Throne Room-Festival or Throne Room-Smithy leads to a dead turn. Throne doesn't simulate well, but that could easily be because the simulator chooses the wrong action to Throne.

I found that I can restore the engine to beating the Gardens/Festival bot solidly by adding the rule "Buy Provinces if the Festival pile is empty." Otherwise, the engine never starts buying Provinces because it never gets to its $22 threshold.
Logged

DG

  • Governor
  • *****
  • Offline Offline
  • Posts: 4074
  • Respect: +2624
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #4 on: July 28, 2016, 09:08:44 am »
+1

The simulator isn't trashing as heavily as a human player would do. You might be able to solve this by buying an extra market or extra village before rushing into the festival/smithy engine. On a 5/2 start, market/chapel is the best opening for trashing regardless of whether it is played by a human or the simulator.

Buying provinces at 22+ coins seems suspicious. It seems like some other condition is being met coincidentally at the same time and it may be worth looking at sample game logs to work that out.
« Last Edit: July 28, 2016, 09:14:19 am by DG »
Logged

Chris is me

  • Margrave
  • *****
  • Offline Offline
  • Posts: 2745
  • Shuffle iT Username: Chris is me
  • What do you want me to say?
  • Respect: +3457
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #5 on: July 28, 2016, 09:25:41 am »
0

I'm not sure why an engine would want to build to, of all numbers, $22 to start greening. If anything you would want $16 (or $24). Engines should draw their whole deck every time ideally, so you shouldn't need excess money.

Throne Room is a little less tricky to incorporate than you make it out to be. A hand of Throne / Throne / Library is a perfectly good start (even though Throning a Library is normally stupid), because the second Throne can hit a Festival and then you're off and running. Throne is probably better when drawing with Smithy, but I guess it competes for $4 gains.

I think Library / Festival rules are actually pretty easy to code. If you have $6 in Festival / Throne money, you have a Festival out, and you still have Treasure or VP in your deck, you want to discard every action except Chapel so you get a hand ideally of Chapel + all your remaining junk. After that is said and done, always skip Chapel, skip Library after the second one (first one?), always take Festival. Not that hard, I don't think? Maybe I'm missing something that's intuitive when I'm playing that's hard to think about in advance.

I'm not sure if Village / Smithy / Festival is better or worse than Library / Festival here. I don't know if the extra control is worth the hassle of Library here? Hard to say. But Village buys on $3 are important.
Logged
Twitch channel: http://www.twitch.tv/chrisisme2791

bug me on discord

pm me if you wanna do stuff for the blog

they/them

h1402686

  • Alchemist
  • ***
  • Offline Offline
  • Posts: 39
  • Respect: +32
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #6 on: July 28, 2016, 10:06:34 am »
0

I'm at work and can't run the simulator now, but when I was building the bot a threshold of $22 to start greening was only very weakly preferred to $24. Two reasons I know of why $22 might at least not be as crazy as it sounds are:
  • This engine does not, in fact, draw the whole deck consistently
  • The deck only has even numbers of coin (once it's trashed its coppers and bought its two Gold), so $22 is the same as $21, good enough for 2xProvince+Duchy or 2xProvince+Festival, the latter of which gives enough money to triple Province on the next turn (and if you pull that off, that's the majority of the Provinces)

It's good to know that the bot isn't trashing aggressively enough. I'll see if I can nudge it to do better. I hadn't thought about the cycling benefit of Market for trashing. I did try the "aggressive trashing" setting for Chapel and couldn't get that to work; the system didn't seem to preserve enough economy, and adding a second Silver buy didn't fix it.
Logged

Chris is me

  • Margrave
  • *****
  • Offline Offline
  • Posts: 2745
  • Shuffle iT Username: Chris is me
  • What do you want me to say?
  • Respect: +3457
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #7 on: July 28, 2016, 12:42:57 pm »
0

If it isn't drawing the deck consistently with perfect trashing, a +3 Cards draw card, etc. then you haven't optimized this bot at all. I would try to aim for exactly $16 and no Treasure at all if possible.
Logged
Twitch channel: http://www.twitch.tv/chrisisme2791

bug me on discord

pm me if you wanna do stuff for the blog

they/them

JW

  • Jester
  • *****
  • Offline Offline
  • Posts: 968
  • Shuffle iT Username: JW
  • Respect: +1781
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #8 on: July 28, 2016, 12:56:21 pm »
0

I'm at work and can't run the simulator now, but when I was building the bot a threshold of $22 to start greening was only very weakly preferred to $24. Two reasons I know of why $22 might at least not be as crazy as it sounds are:

It's hard to have the simulator take full advantage of the flexibility of the engine. Even if the engine gets poor draws early (Chapel missing the shuffle, etc.), the Gardens provide a huge potential stock of points against a Smithy-Big Money player. You'd get lots of Markets, Festivals and Throne Rooms while leaving piles high enough that you can't be three-piled, then buy out the Gardens in a single turn while either emptying three piles or the remaining Provinces with enough additional coppers to level up the Gardens.
Logged

NolanA

  • Salvager
  • ****
  • Offline Offline
  • Posts: 61
  • Respect: +53
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #9 on: July 28, 2016, 03:00:54 pm »
0

Quote
Buying provinces at 22+ coins seems suspicious. It seems like some other condition is being met coincidentally at the same time and it may be worth looking at sample game logs to work that out.
Quote
I'm not sure why an engine would want to build to, of all numbers, $22 to start greening. If anything you would want $16 (or $24). Engines should draw their whole deck every time ideally, so you shouldn't need excess money.
You can improve the win rate by changing to a rule about being having enough money to buy 2 provinces and having sufficient money (Festivals) in deck.  For example buy 2 provinces with 16+ in hand, 2+ buys, and 24+ in deck increases win rate by a few %.  You might also include buying Gardens, as the larger number of late game buys compared to Smithy-BM gives an advantage with more victory cards available making the engine more powerful.  You can also tweak a few things like buy a Festival before gold, buy a mid/late game 3rd gold in certain situations when it is helpful, more complex strategy with aggressive trashing combined with buying silver when certain too low money in deck conditions are met, changing the order of early Festival/Smithy/Village buys slightly, modifying the Dutchy/Estate buy rules slightly, choosing to buy Dutchies (or Gardens) over Provinces in certain cases when behind, etc.   However, all of this adds very few percent to the win rate at the cost of increased complexity.  If the OP or others using it want to keep things simple or only need a core framework and will fine tune while playing, I think the engine is fine as is.

Quote
I think Library / Festival rules are actually pretty easy to code...
I believe the problem with coding some of the discussed more complex strategies is the simulator has default Library play rules about which action cards to keep that cannot be changed.  It also has default play rules for Chapel and Throne Room that are not ideal in many situations (particularly with Throne Room) and are relevant to this discussion.   Library-Festival... could possibly be a better choice than the discussed engine in real play, but I don't think it will be best in simulation, if the metric of success is beating a Smithy-BM player.  Both will lose to the Bureaucrat/Market/Festival rush strategy mentioned in my earlier post by this metric.




« Last Edit: July 28, 2016, 10:46:50 pm by NolanA »
Logged

h1402686

  • Alchemist
  • ***
  • Offline Offline
  • Posts: 39
  • Respect: +32
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #10 on: July 28, 2016, 10:34:52 pm »
0

However, all of this adds very few percent to the win rate at the cost of increased complexity.  If the OP or others using it want to keep things simple, I think the engine is fine as is.
I cannot claim I was trying to avoid complexity. I simply didn't figure this out. Would you mind posting or sending me your more complex bot? I'd be particularly interested to see how you make more aggressive trashing work since I'm told that slow trashing is one thing my bot does that is observably wrong.
Logged

NolanA

  • Salvager
  • ****
  • Offline Offline
  • Posts: 61
  • Respect: +53
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #11 on: July 29, 2016, 07:43:08 pm »
0

The simulator's rules for low "Standard" vs "Aggressive" trashing do not make much difference for this engine simulation.  "Standard" trashing has different rules about when to choose to play Chapel instead of action cards, such as how to play a hand with Chapel-Smithy-Copper-Copper-Copper.   "Standard" would play Smithy, and "Aggressive" would play Chapel.  However, your engine is usually going to have extra actions with the Festivals and Villages, so choice of when to play Smithy vs Chapel doesn't make much difference.  What does have more influence is having different thresholds about how low it lets the money in your deck get.  For example, after opening Silver/Chapel, you have $9 in your deck.  If on the next turn you draw Chapel-Copper-Copper-Copper-Copper, then "Aggressive" Chapel strategy will trash all 4 coppers and go down to $5  in deck, and "Standard" Chapel strategy with trash 3 coppers, not letting you drop below $6 in deck.  I think trashing 4 is the better choice here, but there are other situations where the "Standard" Chapel strategy is better, as well as situations where neither sim Chapel strategy makes the best decision.   To use "Aggressive" Chapel strategy, you just need to add a rule about buying treasure when the money in deck gets too low, such as buying a Silver if the total $ in deck is less than 5. 

The win rate should be +/- ~2% of each other with Standard vs Aggressive Chapel strategy in this sim.  Which one has the higher win rate depends on which of the additional tweaks I mentioned (and others) you have incorporated.   Hopefully, if a person was playing this strategy they'd have a better sense of how to play Chapel than occurs in either set of default rules, so they'd get better results than the sim.  If you'd like to play around with different Chapel strategies to see what works best, you can do so with the Dominiate simulator at http://rspeer.github.io/dominiate/play.html#ChapelWitch/BigSmithy .  That one lets you modify Chapel strategy, but  can be awkward to program engines.
« Last Edit: July 29, 2016, 08:20:44 pm by NolanA »
Logged

NolanA

  • Salvager
  • ****
  • Offline Offline
  • Posts: 61
  • Respect: +53
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #12 on: August 05, 2016, 02:37:40 pm »
+1

Quote
Would you mind posting or sending me your more complex bot?
I had some time today, so I looked in to writing a more complex bot that incorporates some of the updates others and I mentioned above.  The bot code is below.  The basic idea is build a huge mega-engine using all the Festivals and Smithys in supply, then buy all the Gardens to empty the 3rd pile and end the game.  If there is left over, it buys Dutchys and Coppers.  It doesn't buy Provinces.  I realize there are several areas that could be improved/optimized further such ending the game when possible instead of following usual buy rules, priority to buying coppers when near multiple of 10 Gardens threshold, altering when to start buying based on opponent victory points, better use of Throne Room, etc.  Nevertheless, it does very well against Smithy with a a ~90% win rate against Smithy on a 4/3 start and a ~98% win rate against Smithy on a 5/2 start.   Obviously it wouldn't work as well against a real player who figures out what you are doing and alters strategy to better defend.

Code: [Select]
<player name="Chapel/Festival/Smithy + Gardens Engine"
 author="NolanA"
 description="Builds mega-engine using all Festivals + Smithy, then buys all gardens.  Optimized for a traditional Smithy - Big Money opponent.">
 <type name="SingleCard"/>
 <type name="Optimized"/>
 <type name="Bot"/>
 <type name="BigMoney"/>
 <type name="Province"/>
 <type name="UserCreated"/>
 <type name="TwoPlayer"/>
   <buy name="Gardens">
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="greaterOrEqualThan" />
         <right type="constant" attribute="32.0"/>
      </condition>
      <condition>
         <left type="countBuysLeft"/>
         <operator type="greaterOrEqualThan" />
         <right type="constant" attribute="8.0"/>
      </condition>
   </buy>
   <buy name="Gardens">
      <condition>
         <left type="countCardsInDeck" attribute="Gardens"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Duchy">
      <condition>
         <left type="countCardsInDeck" attribute="Gardens"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Copper">
      <condition>
         <left type="countCardsInDeck" attribute="Gardens"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Festival">
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="greaterOrEqualThan" />
         <right type="constant" attribute="9.0"/>
      </condition>
      <condition>
         <left type="countBuysLeft"/>
         <operator type="greaterOrEqualThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
   </buy>
   <buy name="Festival">
      <condition>
         <left type="countCardsInDeck" attribute="Festival"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Gold">
      <condition>
         <left type="countCardsInDeck" attribute="Gold"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
   </buy>
   <buy name="Gold">
      <condition>
         <left type="countCardsInSupply" attribute="Festival"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="getTotalMoney"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="29.0"/>
      </condition>
   </buy>
   <buy name="Festival">
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterOrEqualThan" />
         <right type="countCardTypeInDeck" attribute="Village"/>
         <extra_operation type="minus" attribute="1.0" />
      </condition>
   </buy>
   <buy name="Silver" strategy="trashWhenObsolete">
      <condition>
         <left type="countCardsInDeck" attribute="Silver"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Festival"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Silver" strategy="trashWhenObsolete">
      <condition>
         <left type="getTotalMoney"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="5.0"/>
      </condition>
   </buy>
   <buy name="Chapel" strategy="aggressiveTrashing">
      <condition>
         <left type="countCardsInDeck" attribute="Chapel"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Festival">
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterOrEqualThan" />
         <right type="countCardTypeInDeck" attribute="Village"/>
      </condition>
   </buy>
   <buy name="Smithy"/>
   <buy name="Village"/>
   <buy name="Throne_Room"/>
</player>

Note that Throne Rooms are bought on last turn rather than when building engine because they are not played well in the simulator. For example, the sim was sometimes choosing to Throne Room an Chapel over a Festival, even though there was nothing left to trash in the deck.  In real play, I expect it would be desirable to buy some Throne Rooms earlier.
Logged

h1402686

  • Alchemist
  • ***
  • Offline Offline
  • Posts: 39
  • Respect: +32
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #13 on: August 07, 2016, 01:16:01 pm »
0

Awesome!

This drives home something for me that @JW said earlier: the engine can go for Provinces or (seemingly the better default based on this bot's performance) Gardens. It's hard for a money player to know when to start greening when they don't know whether Provinces will be contested.
Logged

NolanA

  • Salvager
  • ****
  • Offline Offline
  • Posts: 61
  • Respect: +53
    • View Profile
Re: Chapel/Festival/Smithy engine
« Reply #14 on: August 07, 2016, 02:31:20 pm »
0

I apologize for the multiple posts earlier.  Apparently the posts I attempted when the forum was down on Friday were going through even though they weren't displaying. 

Quote
Awesome!

This drives home something for me that @JW said earlier: the engine can go for Provinces or (seemingly the better default based on this bot's performance) Gardens. It's hard for a money player to know when to start greening when they don't know whether Provinces will be contested.
Yes, the bot I posted earlier will do quite poorly against a Smithy player who focuses on Gardens instead of Provinces, such as a Smithy: BM player who gets one Province, then buys Gardens.  It also won't do as well as simulated against a player will end the game by emptying 3 piles when ahead.

The code below has some minor updates below to incorporate buying Provinces after Gardens when you can end the game or when there are a lot of Provinces in supply.  This increases the win rate vs Smithy: Big Money to ~93% on a 4/3 start and ~98% on a 5/2 start.  It is much better against Smithy-Gardens type players than the earlier one.  However, if several Gardens are missing from supply, then it's better to try a different fundamentally strategy, more like your original bot.

Code: [Select]
<player name="Festival/Smithy/Chapel + Gardens Engine"
 author="NolanA"
 description="Builds mega-engine using all Festivals + Smithy, then buys all Gardens.  Optimized for a traditional Smithy - Big Money opponent.">
 <type name="Bot"/>
 <type name="TwoPlayer"/>
 <type name="BigMoney"/>
 <type name="Province"/>
 <type name="SingleCard"/>
 <type name="Optimized"/>
 <type name="UserCreated"/>
   <buy name="Province">
      <condition>
         <left type="countCardsInSupply" attribute="Province"/>
         <operator type="equalTo" />
         <right type="constant" attribute="2.0"/>
      </condition>
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="greaterOrEqualThan" />
         <right type="constant" attribute="16.0"/>
      </condition>
      <condition>
         <left type="countVP"/>
         <operator type="greaterThan" />
         <right type="countMAXOpponentVP"/>
         <extra_operation type="minus" attribute="12.0" />
      </condition>
      <condition>
         <left type="countBuysLeft"/>
         <operator type="greaterOrEqualThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
   </buy>
   <buy name="Province">
      <condition>
         <left type="countCardsInSupply" attribute="Province"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
   </buy>
   <buy name="Gardens">
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="greaterOrEqualThan" />
         <right type="countCardsInSupply" attribute="Gardens"/>
         <extra_operation type="multiplyWith" attribute="4.0" />
      </condition>
      <condition>
         <left type="countBuysLeft"/>
         <operator type="greaterOrEqualThan" />
         <right type="countCardsInSupply" attribute="Gardens"/>
      </condition>
   </buy>
   <buy name="Gardens">
      <condition>
         <left type="countCardsInDeck" attribute="Gardens"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Province">
      <condition>
         <left type="countCardsInDeck" attribute="Gardens"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInSupply" attribute="Province"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
   </buy>
   <buy name="Duchy">
      <condition>
         <left type="countCardsInDeck" attribute="Gardens"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Copper">
      <condition>
         <left type="countCardsInDeck" attribute="Gardens"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Festival">
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="greaterOrEqualThan" />
         <right type="constant" attribute="9.0"/>
      </condition>
      <condition>
         <left type="countBuysLeft"/>
         <operator type="greaterOrEqualThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
   </buy>
   <buy name="Festival">
      <condition>
         <left type="countCardsInDeck" attribute="Festival"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Gold">
      <condition>
         <left type="countCardsInDeck" attribute="Gold"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
   </buy>
   <buy name="Gold">
      <condition>
         <left type="countCardsInSupply" attribute="Festival"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="getTotalMoney"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="29.0"/>
      </condition>
   </buy>
   <buy name="Festival">
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterOrEqualThan" />
         <right type="countCardTypeInDeck" attribute="Village"/>
         <extra_operation type="minus" attribute="1.0" />
      </condition>
   </buy>
   <buy name="Silver" strategy="trashWhenObsolete">
      <condition>
         <left type="countCardsInDeck" attribute="Silver"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Festival"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Silver" strategy="trashWhenObsolete">
      <condition>
         <left type="getTotalMoney"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="5.0"/>
      </condition>
   </buy>
   <buy name="Chapel" strategy="aggressiveTrashing">
      <condition>
         <left type="countCardsInDeck" attribute="Chapel"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Festival">
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterOrEqualThan" />
         <right type="countCardTypeInDeck" attribute="Village"/>
      </condition>
   </buy>
   <buy name="Village">
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterOrEqualThan" />
         <right type="countCardTypeInDeck" attribute="Village"/>
      </condition>
   </buy>
   <buy name="Smithy"/>
   <buy name="Village"/>
   <buy name="Throne_Room"/>
</player>
« Last Edit: August 07, 2016, 02:50:54 pm by NolanA »
Logged
Pages: [1]
 

Page created in 0.096 seconds with 21 queries.