- Conspiracy: fixed the AI never putting any conspiracies into the command zone. Added some simple logic for the AI revealing conspiracies when a spell with the chosen name was cast during any given turn.

This commit is contained in:
Agetian
2017-08-17 12:31:27 +00:00
parent b0584d4499
commit 0679d9a30f
3 changed files with 30 additions and 38 deletions

View File

@@ -1,19 +1,14 @@
package forge.ai.ability; package forge.ai.ability;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import forge.ai.ComputerUtilCard; import forge.ai.ComputerUtilCard;
import forge.ai.SpellAbilityAi; import forge.ai.SpellAbilityAi;
import forge.card.CardSplitType; import forge.card.CardSplitType;
import forge.card.CardStateName;
import forge.game.Game; import forge.game.Game;
import forge.game.GlobalRuleChange; import forge.game.GlobalRuleChange;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.card.Card; import forge.game.card.*;
import forge.game.card.CardCollection;
import forge.game.card.CardLists;
import forge.game.card.CardState;
import forge.game.card.CardUtil;
import forge.game.card.CounterType;
import forge.game.card.CardPredicates.Presets; import forge.game.card.CardPredicates.Presets;
import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType; import forge.game.phase.PhaseType;
@@ -172,6 +167,18 @@ public class SetStateAi extends SpellAbilityAi {
private boolean shouldTurnFace(Card card, Player ai, PhaseHandler ph) { private boolean shouldTurnFace(Card card, Player ai, PhaseHandler ph) {
if (card.isFaceDown()) { if (card.isFaceDown()) {
// hidden agenda
if (card.getState(CardStateName.Original).hasIntrinsicKeyword("Hidden agenda")
&& card.getZone().is(ZoneType.Command)) {
String chosenName = card.getNamedCard();
for (Card cast : ai.getGame().getStack().getSpellsCastThisTurn()) {
if (cast.getController() == ai && cast.getName().equals(chosenName)) {
return true;
}
}
return false;
}
// non-permanent facedown can't be turned face up // non-permanent facedown can't be turned face up
if (!card.getRules().getType().isPermanent()) { if (!card.getRules().getType().isPermanent()) {
return false; return false;

View File

@@ -1,22 +1,6 @@
package forge.game; package forge.game;
import java.util.ArrayList; import com.google.common.collect.*;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
import java.util.Random;
import java.util.Set;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multiset;
import forge.LobbyPlayer; import forge.LobbyPlayer;
import forge.deck.CardPool; import forge.deck.CardPool;
import forge.deck.Deck; import forge.deck.Deck;
@@ -31,8 +15,11 @@ import forge.game.trigger.Trigger;
import forge.game.zone.PlayerZone; import forge.game.zone.PlayerZone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.util.collect.FCollectionView;
import forge.util.MyRandom; import forge.util.MyRandom;
import forge.util.collect.FCollectionView;
import java.util.*;
import java.util.Map.Entry;
public class Match { public class Match {
private final List<RegisteredPlayer> players; private final List<RegisteredPlayer> players;
@@ -243,8 +230,6 @@ public class Match {
} }
} }
player.initVariantsZones(psc);
Deck myDeck = psc.getDeck(); Deck myDeck = psc.getDeck();
Set<PaperCard> myRemovedAnteCards = null; Set<PaperCard> myRemovedAnteCards = null;
@@ -265,6 +250,8 @@ public class Match {
} }
player.shuffle(null); player.shuffle(null);
player.initVariantsZones(psc);
if (isFirstGame) { if (isFirstGame) {
Collection<? extends PaperCard> cardsComplained = player.getController().complainCardsCantPlayWell(myDeck); Collection<? extends PaperCard> cardsComplained = player.getController().complainCardsCantPlayWell(myDeck);
if (null != cardsComplained) { if (null != cardsComplained) {

View File

@@ -1,14 +1,6 @@
package forge.card; package forge.card;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import forge.card.mana.ManaCostShard; import forge.card.mana.ManaCostShard;
import forge.game.GameView; import forge.game.GameView;
import forge.game.card.Card; import forge.game.card.Card;
@@ -24,6 +16,12 @@ import forge.model.FModel;
import forge.properties.ForgeConstants; import forge.properties.ForgeConstants;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
import forge.util.Lang; import forge.util.Lang;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class CardDetailUtil { public class CardDetailUtil {
@@ -380,7 +378,7 @@ public class CardDetailUtil {
} }
// chosen type // chosen type
if (!card.getChosenType().equals("")) { if (!card.getChosenType().isEmpty()) {
if (area.length() != 0) { if (area.length() != 0) {
area.append("\n"); area.append("\n");
} }
@@ -418,7 +416,7 @@ public class CardDetailUtil {
} }
// chosen mode // chosen mode
if (!card.getChosenMode().equals("")) { if (!card.getChosenMode().isEmpty()) {
if (area.length() != 0) { if (area.length() != 0) {
area.append("\n"); area.append("\n");
} }
@@ -426,7 +424,7 @@ public class CardDetailUtil {
} }
// named card // named card
if (!card.getNamedCard().equals("")) { if (!card.getNamedCard().isEmpty() && !card.isFaceDown()) {
if (area.length() != 0) { if (area.length() != 0) {
area.append("\n"); area.append("\n");
} }