mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
- Fix Premature Burial so it works when casting from other's hand
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -129,6 +129,7 @@ forge-ai/src/main/java/forge/ai/ability/ScryAi.java -text
|
||||
forge-ai/src/main/java/forge/ai/ability/SetStateAi.java -text
|
||||
forge-ai/src/main/java/forge/ai/ability/ShuffleAi.java -text
|
||||
forge-ai/src/main/java/forge/ai/ability/SkipTurnAi.java -text
|
||||
forge-ai/src/main/java/forge/ai/ability/StoreMapAi.java -text
|
||||
forge-ai/src/main/java/forge/ai/ability/StoreSVarAi.java -text
|
||||
forge-ai/src/main/java/forge/ai/ability/TapAi.java -text
|
||||
forge-ai/src/main/java/forge/ai/ability/TapAiBase.java -text
|
||||
@@ -396,6 +397,7 @@ forge-game/src/main/java/forge/game/ability/effects/SetInMotionEffect.java -text
|
||||
forge-game/src/main/java/forge/game/ability/effects/SetStateEffect.java -text
|
||||
forge-game/src/main/java/forge/game/ability/effects/ShuffleEffect.java -text
|
||||
forge-game/src/main/java/forge/game/ability/effects/SkipTurnEffect.java -text
|
||||
forge-game/src/main/java/forge/game/ability/effects/StoreMapEffect.java -text
|
||||
forge-game/src/main/java/forge/game/ability/effects/StoreSVarEffect.java -text
|
||||
forge-game/src/main/java/forge/game/ability/effects/TapAllEffect.java -text
|
||||
forge-game/src/main/java/forge/game/ability/effects/TapEffect.java -text
|
||||
|
||||
@@ -121,6 +121,7 @@ public enum SpellApiToAi {
|
||||
apiToClass.put(ApiType.SetState, SetStateAi.class);
|
||||
apiToClass.put(ApiType.Shuffle, ShuffleAi.class);
|
||||
apiToClass.put(ApiType.SkipTurn, SkipTurnAi.class);
|
||||
apiToClass.put(ApiType.StoreMap, StoreMapAi.class);
|
||||
apiToClass.put(ApiType.StoreSVar, StoreSVarAi.class);
|
||||
apiToClass.put(ApiType.Tap, TapAi.class);
|
||||
apiToClass.put(ApiType.TapAll, TapAllAi.class);
|
||||
|
||||
21
forge-ai/src/main/java/forge/ai/ability/StoreMapAi.java
Normal file
21
forge-ai/src/main/java/forge/ai/ability/StoreMapAi.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package forge.ai.ability;
|
||||
|
||||
import forge.ai.SpellAbilityAi;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
public class StoreMapAi extends SpellAbilityAi {
|
||||
|
||||
@Override
|
||||
protected boolean canPlayAI(Player ai, SpellAbility sa) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -120,6 +120,7 @@ public enum ApiType {
|
||||
Shuffle (ShuffleEffect.class),
|
||||
SkipTurn (SkipTurnEffect.class),
|
||||
StoreSVar (StoreSVarEffect.class),
|
||||
StoreMap (StoreMapEffect.class),
|
||||
Tap (TapEffect.class),
|
||||
TapAll (TapAllEffect.class),
|
||||
TapOrUntap (TapOrUntapEffect.class),
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
public class StoreMapEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
final Card source = sa.getHostCard();
|
||||
List<GameEntity> entity = new ArrayList<GameEntity>();
|
||||
List<Object> objects = new ArrayList<Object>();
|
||||
|
||||
if (sa.hasParam("RememberEntity")) {
|
||||
entity.addAll(AbilityUtils.getDefinedPlayers(source, sa.getParam("RememberEntity"), sa));
|
||||
entity.addAll(AbilityUtils.getDefinedCards(source, sa.getParam("RememberEntity"), sa));
|
||||
}
|
||||
|
||||
if (sa.hasParam("RememberObjects")) {
|
||||
String type = sa.hasParam("ObjectType") ? sa.getParam("ObjectType") : "Card";
|
||||
if (type.equals("Card")) {
|
||||
objects.addAll(AbilityUtils.getDefinedCards(source, sa.getParam("RememberObjects"), sa));
|
||||
}
|
||||
}
|
||||
|
||||
for (GameEntity e : entity) {
|
||||
source.addRememberMap(e, objects);
|
||||
}
|
||||
|
||||
if (sa.hasParam("Clear")) {
|
||||
for (GameEntity e : entity) {
|
||||
source.getRememberMap().get(e).clear();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -53,10 +53,13 @@ import forge.game.zone.Zone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.item.IPaperCard;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.CollectionSuppliers;
|
||||
import forge.util.Expressions;
|
||||
import forge.util.Lang;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.maps.HashMapOfLists;
|
||||
import forge.util.maps.MapOfLists;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
@@ -115,6 +118,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
private Map<Long, CardKeywords> changedCardKeywords = new ConcurrentSkipListMap<Long, CardKeywords>();
|
||||
|
||||
private final ArrayList<Object> rememberedObjects = new ArrayList<Object>();
|
||||
private final MapOfLists<GameEntity, Object> rememberMap = new HashMapOfLists<GameEntity, Object>(CollectionSuppliers.<Object>arrayLists());
|
||||
private final ArrayList<Card> imprintedCards = new ArrayList<Card>();
|
||||
private final ArrayList<Card> encodedCards = new ArrayList<Card>();
|
||||
private final List<Card> devouredCards = new ArrayList<Card>();
|
||||
@@ -512,6 +516,13 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
return this.devouredCards;
|
||||
}
|
||||
|
||||
public final void addRememberMap(final GameEntity e, final List<Object> o) {
|
||||
this.rememberMap.addAll(e, o);
|
||||
}
|
||||
public MapOfLists<GameEntity, Object> getRememberMap() {
|
||||
return rememberMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* addRemembered.
|
||||
@@ -6711,6 +6722,16 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
if (!this.getCharacteristics().getManaCost().hasPhyrexian()) {
|
||||
return false;
|
||||
}
|
||||
} else if (property.startsWith("RememberMap")) {
|
||||
System.out.println(source.getRememberMap());
|
||||
for (SpellAbility sa : source.getSpellAbilities()) {
|
||||
for (Player p : AbilityUtils.getDefinedPlayers(source, property.split("RememberMap_")[1], sa)) {
|
||||
if (source.getRememberMap().get(p).contains(this)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} else if (property.equals("IsRemembered")) {
|
||||
if (!source.getRemembered().contains(this)) {
|
||||
return false;
|
||||
|
||||
@@ -5,9 +5,7 @@ import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ILocalRepaint;
|
||||
import forge.menus.ForgeMenu;
|
||||
import forge.menus.LayoutMenu;
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgePreferences;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.toolbox.FButton;
|
||||
import forge.toolbox.FDigitalClock;
|
||||
import forge.toolbox.FSkin;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Name:Premature Burial
|
||||
ManaCost:1 B
|
||||
Types:Sorcery
|
||||
A:SP$ Destroy | Cost$ 1 B | ValidTgts$ Creature.IsRemembered | TgtPrompt$ Select target nonblack creature that entered the battlefield since your last turn ended | SpellDescription$ Destroy target nonblack creature that entered the battlefield since your last turn ended.
|
||||
A:SP$ Destroy | Cost$ 1 B | ValidTgts$ Creature.RememberMap_You | TgtPrompt$ Select target nonblack creature that entered the battlefield since your last turn ended | SpellDescription$ Destroy target nonblack creature that entered the battlefield since your last turn ended.
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.nonBlack | Static$ True | Execute$ TrigRemember
|
||||
SVar:TrigRemember:DB$ Pump | RememberObjects$ TriggeredCard
|
||||
T:Mode$ Phase | Phase$ Cleanup | ValidPlayer$ You | Execute$ TrigCleanup | Static$ True
|
||||
SVar:TrigCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:TrigRemember:DB$ StoreMap | RememberEntity$ Each | RememberObjects$ TriggeredCard | ObjectType$ Card
|
||||
T:Mode$ Phase | Phase$ Cleanup | Execute$ TrigCleanup | Static$ True
|
||||
SVar:TrigCleanup:DB$ StoreMap | RememberEntity$ TriggeredPlayer | Clear$ True
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/premature_burial.jpg
|
||||
Oracle:Destroy target nonblack creature that entered the battlefield since your last turn ended.
|
||||
|
||||
Reference in New Issue
Block a user