mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Fix Thelon
This commit is contained in:
@@ -173,7 +173,7 @@ public class AiCostDecision extends CostDecisionMakerBase {
|
||||
if (cost.getFrom().equals(ZoneType.Library)) {
|
||||
return PaymentDecision.card(player.getCardsIn(ZoneType.Library, c));
|
||||
}
|
||||
else if (cost.sameZone) {
|
||||
else if (cost.zoneRestriction == 0) {
|
||||
// TODO Determine exile from same zone for AI
|
||||
return null;
|
||||
} else {
|
||||
|
||||
@@ -448,10 +448,16 @@ public class Cost implements Serializable {
|
||||
return new CostExile(splitStr[0], splitStr[1], description, ZoneType.Library);
|
||||
}
|
||||
|
||||
if (parse.startsWith("ExileAnyGrave<")) {
|
||||
final String[] splitStr = abCostParse(parse, 3);
|
||||
final String description = splitStr.length > 2 ? splitStr[2] : null;
|
||||
return new CostExile(splitStr[0], splitStr[1], description, ZoneType.Graveyard, -1);
|
||||
}
|
||||
|
||||
if (parse.startsWith("ExileSameGrave<")) {
|
||||
final String[] splitStr = abCostParse(parse, 3);
|
||||
final String description = splitStr.length > 2 ? splitStr[2] : null;
|
||||
return new CostExile(splitStr[0], splitStr[1], description, ZoneType.Graveyard, true);
|
||||
return new CostExile(splitStr[0], splitStr[1], description, ZoneType.Graveyard, 0);
|
||||
}
|
||||
|
||||
if (parse.startsWith("Return<")) {
|
||||
|
||||
@@ -46,20 +46,20 @@ public class CostExile extends CostPartWithList {
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
public final ZoneType from;
|
||||
public final boolean sameZone;
|
||||
public final int zoneRestriction;
|
||||
|
||||
public final ZoneType getFrom() {
|
||||
return this.from;
|
||||
}
|
||||
|
||||
public CostExile(final String amount, final String type, final String description, final ZoneType from) {
|
||||
this(amount, type, description, from, false);
|
||||
this(amount, type, description, from, 1);
|
||||
}
|
||||
|
||||
public CostExile(final String amount, final String type, final String description, final ZoneType from, final boolean sameZone) {
|
||||
public CostExile(final String amount, final String type, final String description, final ZoneType from, final int zoneMode) {
|
||||
super(amount, type, description);
|
||||
this.from = from != null ? from : ZoneType.Battlefield;
|
||||
this.sameZone = sameZone;
|
||||
this.zoneRestriction = zoneMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -68,7 +68,7 @@ public class CostExile extends CostPartWithList {
|
||||
final Game game = source.getGame();
|
||||
|
||||
CardCollectionView typeList;
|
||||
if (this.sameZone) {
|
||||
if (zoneRestriction != 1) {
|
||||
typeList = game.getCardsIn(this.from);
|
||||
} else {
|
||||
typeList = payer.getCardsIn(this.from);
|
||||
@@ -105,15 +105,21 @@ public class CostExile extends CostPartWithList {
|
||||
}
|
||||
|
||||
if (!desc.equals("Card") && !desc.contains("card")) {
|
||||
if (this.sameZone) {
|
||||
return String.format("Exile %s from the same %s", Lang.nounWithNumeralExceptOne(this.getAmount(),
|
||||
desc + " card"), origin);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Exile %s from ");
|
||||
if (zoneRestriction == 0) {
|
||||
sb.append("the same");
|
||||
} else if (zoneRestriction == -1) {
|
||||
sb.append("a");
|
||||
} else {
|
||||
sb.append("your");
|
||||
}
|
||||
return String.format("Exile %s from your %s", Lang.nounWithNumeralExceptOne(this.getAmount(),
|
||||
sb.append(" %s");
|
||||
return String.format(sb.toString(), Lang.nounWithNumeralExceptOne(this.getAmount(),
|
||||
desc + " card"), origin);
|
||||
}
|
||||
|
||||
if (this.sameZone) {
|
||||
if (zoneRestriction == 0) {
|
||||
return String.format("Exile %s from the same %s", Cost.convertAmountTypeToWords(i, this.getAmount(), desc), origin);
|
||||
}
|
||||
|
||||
@@ -143,7 +149,7 @@ public class CostExile extends CostPartWithList {
|
||||
}
|
||||
|
||||
CardCollectionView list;
|
||||
if (this.sameZone) {
|
||||
if (zoneRestriction != 1) {
|
||||
list = game.getCardsIn(this.from);
|
||||
} else {
|
||||
list = payer.getCardsIn(this.from);
|
||||
@@ -168,7 +174,7 @@ public class CostExile extends CostPartWithList {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.sameZone) {
|
||||
if (zoneRestriction == 0) {
|
||||
boolean foundPayable = false;
|
||||
FCollectionView<Player> players = game.getPlayers();
|
||||
for (Player p : players) {
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:G G
|
||||
Types:Legendary Creature Elf Druid
|
||||
PT:2/2
|
||||
S:Mode$ Continuous | Affected$ Creature.Fungus | AffectedZone$ Battlefield | AddPower$ AffectedX | AddToughness$ AffectedX | Description$ Each Fungus creature gets +1/+1 for each spore counter on it.
|
||||
A:AB$ PutCounterAll | Cost$ B G ExileFromGrave<1/Fungus> | ValidCards$ Fungus | CounterType$ SPORE | CounterNum$ 1 | SpellDescription$ Put a spore counter on each Fungus on the battlefield.
|
||||
A:AB$ PutCounterAll | Cost$ B G ExileAnyGrave<1/Fungus> | ValidCards$ Fungus | CounterType$ SPORE | CounterNum$ 1 | SpellDescription$ Put a spore counter on each Fungus on the battlefield.
|
||||
SVar:AffectedX:Count$CardCounters.SPORE
|
||||
SVar:BuffedBy:Fungus
|
||||
Oracle:Each Fungus creature gets +1/+1 for each spore counter on it.\n{B}{G}, Exile a Fungus card from a graveyard: Put a spore counter on each Fungus on the battlefield.
|
||||
|
||||
@@ -244,7 +244,7 @@ public class HumanCostDecision extends CostDecisionMakerBase {
|
||||
}
|
||||
|
||||
CardCollection list;
|
||||
if (cost.sameZone) {
|
||||
if (cost.zoneRestriction != 1) {
|
||||
list = new CardCollection(game.getCardsIn(cost.from));
|
||||
} else {
|
||||
list = new CardCollection(player.getCardsIn(cost.from));
|
||||
@@ -275,7 +275,7 @@ public class HumanCostDecision extends CostDecisionMakerBase {
|
||||
|
||||
if (cost.from == ZoneType.Library) { return exileFromTop(cost, ability, player, c); }
|
||||
if (fromTopGrave) { return exileFromTopGraveType(ability, c, list); }
|
||||
if (!cost.sameZone) { return exileFromMiscZone(cost, ability, c, list); }
|
||||
if (cost.zoneRestriction != 0) { return exileFromMiscZone(cost, ability, c, list); }
|
||||
|
||||
final FCollectionView<Player> players = game.getPlayers();
|
||||
final List<Player> payableZone = new ArrayList<>();
|
||||
|
||||
Reference in New Issue
Block a user