From 90276e1217e88644233791681925a6ded4ce548d Mon Sep 17 00:00:00 2001 From: Agetian Date: Fri, 7 Jun 2019 18:58:20 +0300 Subject: [PATCH 1/2] - Some additional logic for Return from Extinction. --- .../java/forge/ai/ability/ChangeZoneAi.java | 33 +++++++++++++++++++ .../upcoming/return_from_extinction.txt | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java index ee949ddf2a8..e44b2235dcf 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -5,6 +5,7 @@ import com.google.common.base.Predicates; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import forge.ai.*; import forge.card.MagicColor; import forge.game.Game; @@ -71,6 +72,29 @@ public class ChangeZoneAi extends SpellAbilityAi { return false; } } + } else if (aiLogic.equals("NoSameCreatureType")) { + final List origin = Lists.newArrayList(); + if (sa.hasParam("Origin")) { + origin.addAll(ZoneType.listValueOf(sa.getParam("Origin"))); + } else if (sa.hasParam("TgtZone")) { + origin.addAll(ZoneType.listValueOf(sa.getParam("TgtZone"))); + } + CardCollection list = CardLists.getValidCards(ai.getGame().getCardsIn(origin), + sa.getTargetRestrictions().getValidTgts(), ai, sa.getHostCard(), sa); + + final List creatureTypes = Lists.newArrayList(); + for (Card c : list) { + creatureTypes.addAll(c.getType().getCreatureTypes()); + } + + for (String type : creatureTypes) { + int freq = Collections.frequency(creatureTypes, type); + if (freq > 1) { + return false; + } + } + + return true; } return super.checkAiLogic(ai, sa, aiLogic); @@ -1194,6 +1218,15 @@ public class ChangeZoneAi extends SpellAbilityAi { } } + // honor the Same Creature Type restriction + if (sa.hasParam("TargetsWithSameCreatureType")) { + Card firstTarget = sa.getTargetCard(); + if (firstTarget != null && !choice.sharesCreatureTypeWith(firstTarget)) { + list.remove(choice); + continue; + } + } + list.remove(choice); sa.getTargets().add(choice); } diff --git a/forge-gui/res/cardsfolder/upcoming/return_from_extinction.txt b/forge-gui/res/cardsfolder/upcoming/return_from_extinction.txt index 6821a9365b2..44d2ed4bb9a 100644 --- a/forge-gui/res/cardsfolder/upcoming/return_from_extinction.txt +++ b/forge-gui/res/cardsfolder/upcoming/return_from_extinction.txt @@ -2,6 +2,6 @@ Name:Return from Extinction ManaCost:1 B Types:Sorcery A:SP$ Charm | Cost$ 1 B | Choices$ DBChangeZone1,DBChangeZone2 -SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Mandatory$ True | TgtPrompt$ Select target creature card in your graveyard | ValidTgts$ Creature.YouOwn | SpellDescription$ Return target creature card from your graveyard to your hand. +SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Mandatory$ True | TgtPrompt$ Select target creature card in your graveyard | ValidTgts$ Creature.YouOwn | AILogic$ NoSameCreatureType | SpellDescription$ Return target creature card from your graveyard to your hand. SVar:DBChangeZone2:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Mandatory$ True | TargetsWithSameCreatureType$ True | TargetMin$ 2 | TargetMax$ 2 | ValidTgts$ Creature.YouOwn | TgtPrompt$ Select two target creature cards that share a creature type in your graveyard | SpellDescription$ Return two target creature cards that share a creature type from your graveyard to your hand. Oracle:Choose one -\n• Return target creature card from your graveyard to your hand.\n• Return two target creature cards that share a creature type from your graveyard to your hand. From 261454d803d6641356a873be7efdd59899b16dc0 Mon Sep 17 00:00:00 2001 From: Agetian Date: Fri, 7 Jun 2019 19:00:12 +0300 Subject: [PATCH 2/2] - Fix imports. --- forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java | 1 - 1 file changed, 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java index e44b2235dcf..12c1051b272 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -5,7 +5,6 @@ import com.google.common.base.Predicates; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.google.common.collect.Sets; import forge.ai.*; import forge.card.MagicColor; import forge.game.Game;