mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
*Added MayEffectFromOpeningHand keyword. This replaces the hardcoding for Leyline-like effects.
*Converted the Leylines to keyword. *Added Chancellor of the Dross Chancellor of the Forge Chancellor of the Tangle Unfortunately Chancellors of the Annex and Spires have their own problems.
This commit is contained in:
@@ -1635,6 +1635,8 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
sbLong.append(" (This enters the battlefield with ");
|
||||
sbLong.append(numCounters);
|
||||
sbLong.append(" +1/+1 counters on it. When it's put into a graveyard, you may put its +1/+1 counters on target artifact creature.)");
|
||||
} else if (keyword.get(i).startsWith("MayEffectFromOpeningHand")) {
|
||||
continue;
|
||||
} else {
|
||||
if (i != 0 && sb.length() != 0) {
|
||||
sb.append(", ");
|
||||
|
||||
@@ -301,34 +301,38 @@ public class TriggerHandler {
|
||||
}
|
||||
|
||||
Player playerAP = AllZone.getPhase().getPlayerTurn();
|
||||
|
||||
//This is done to allow the list of triggers to be modified while triggers are running.
|
||||
ArrayList<Trigger> registeredTriggersWorkingCopy = new ArrayList<Trigger>(registeredTriggers);
|
||||
ArrayList<Trigger> delayedTriggersWorkingCopy = new ArrayList<Trigger>(delayedTriggers);
|
||||
|
||||
//AP
|
||||
for (int i = 0; i < registeredTriggers.size(); i++) {
|
||||
if (registeredTriggers.get(i).getHostCard().getController().equals(playerAP)) {
|
||||
runSingleTrigger(registeredTriggers.get(i), mode, runParams);
|
||||
for (int i = 0; i < registeredTriggersWorkingCopy.size(); i++) {
|
||||
if (registeredTriggersWorkingCopy.get(i).getHostCard().getController().equals(playerAP)) {
|
||||
runSingleTrigger(registeredTriggersWorkingCopy.get(i), mode, runParams);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < delayedTriggers.size(); i++) {
|
||||
Trigger deltrig = delayedTriggers.get(i);
|
||||
for (int i = 0; i < delayedTriggersWorkingCopy.size(); i++) {
|
||||
Trigger deltrig = delayedTriggersWorkingCopy.get(i);
|
||||
if (deltrig.getHostCard().getController().equals(playerAP)) {
|
||||
if (runSingleTrigger(deltrig, mode, runParams)) {
|
||||
delayedTriggers.remove(i);
|
||||
delayedTriggers.remove(deltrig);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//NAP
|
||||
for (int i = 0; i < registeredTriggers.size(); i++) {
|
||||
if (registeredTriggers.get(i).getHostCard().getController().equals(playerAP.getOpponent())) {
|
||||
runSingleTrigger(registeredTriggers.get(i), mode, runParams);
|
||||
for (int i = 0; i < registeredTriggersWorkingCopy.size(); i++) {
|
||||
if (registeredTriggersWorkingCopy.get(i).getHostCard().getController().equals(playerAP.getOpponent())) {
|
||||
runSingleTrigger(registeredTriggersWorkingCopy.get(i), mode, runParams);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < delayedTriggers.size(); i++) {
|
||||
Trigger deltrig = delayedTriggers.get(i);
|
||||
for (int i = 0; i < delayedTriggersWorkingCopy.size(); i++) {
|
||||
Trigger deltrig = delayedTriggersWorkingCopy.get(i);
|
||||
if (deltrig.getHostCard().getController().equals(playerAP.getOpponent())) {
|
||||
if (runSingleTrigger(deltrig, mode, runParams)) {
|
||||
delayedTriggers.remove(i);
|
||||
delayedTriggers.remove(deltrig);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
package forge.gui.input;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import forge.*;
|
||||
import forge.card.abilityFactory.AbilityFactory;
|
||||
import forge.card.cardFactory.CardFactoryUtil;
|
||||
import forge.card.spellability.SpellAbility;
|
||||
import forge.game.GamePlayerRating;
|
||||
import forge.game.PlayerIndex;
|
||||
import forge.quest.data.QuestData;
|
||||
@@ -84,27 +89,58 @@ public class Input_Mulligan extends Input {
|
||||
}
|
||||
}
|
||||
|
||||
//Human Leylines
|
||||
//Human Leylines & Chancellors
|
||||
ButtonUtil.reset();
|
||||
AbilityFactory af = new AbilityFactory();
|
||||
CardList humanOpeningHand = AllZoneUtil.getPlayerHand(AllZone.getHumanPlayer());
|
||||
|
||||
|
||||
for (Card c : humanOpeningHand) {
|
||||
if (c.getName().startsWith("Leyline")) {
|
||||
if (GameActionUtil.showYesNoDialog(c, "Put onto Battlefield?"))
|
||||
AllZone.getGameAction().moveToPlay(c);
|
||||
ArrayList<String> kws = c.getKeyword();
|
||||
for(int i = 0;i<kws.size();i++) {
|
||||
String kw = kws.get(i);
|
||||
|
||||
if(kw.startsWith("MayEffectFromOpeningHand"))
|
||||
{
|
||||
String effName = kw.split(":")[1];
|
||||
|
||||
SpellAbility effect = af.getAbility(c.getSVar(effName), c);
|
||||
if(GameActionUtil.showYesNoDialog(c, "Use this card's ability?"))
|
||||
{
|
||||
//If we ever let the AI memorize cards in the players hand, this would be a place to do so.
|
||||
AllZone.getGameAction().playSpellAbility_NoStack(effect, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Computer Leylines
|
||||
//Computer Leylines & Chancellors
|
||||
CardList aiOpeningHand = AllZoneUtil.getPlayerHand(AllZone.getComputerPlayer());
|
||||
for (Card c : aiOpeningHand) {
|
||||
if (c.getName().startsWith("Leyline") && !(c.getName().startsWith("Leyline of Singularity")
|
||||
if (!(c.getName().startsWith("Leyline of Singularity")
|
||||
&& AllZoneUtil.getCardsInPlay("Leyline of Singularity").size() > 0)) {
|
||||
AllZone.getGameAction().moveToPlay(c);
|
||||
AllZone.getGameAction().checkStateEffects();
|
||||
ArrayList<String> kws = c.getKeyword();
|
||||
for(int i = 0;i<kws.size();i++) {
|
||||
String kw = kws.get(i);
|
||||
|
||||
if(kw.startsWith("MayEffectFromOpeningHand"))
|
||||
{
|
||||
String effName = kw.split(":")[1];
|
||||
|
||||
SpellAbility effect = af.getAbility(c.getSVar(effName), c);
|
||||
|
||||
if(effect.doTrigger(false)) //Is there a better way for the AI to decide this?
|
||||
{
|
||||
GameActionUtil.showInfoDialg("Computer reveals " + c.getName() + "(" + c.getUniqueNumber() + ").");
|
||||
ComputerUtil.playNoStack(effect);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
AllZone.getGameAction().checkStateEffects();
|
||||
|
||||
|
||||
if (AllZone.getGameAction().isStartCut() && !(humanOpeningHand.contains(AllZone.getGameAction().getHumanCut())
|
||||
|| aiOpeningHand.contains(AllZone.getGameAction().getComputerCut()))) {
|
||||
AllZone.getGameAction().moveTo(AllZone.getZone(Constant.Zone.Library, AllZone.getHumanPlayer()), AllZone.getGameAction().getHumanCut());
|
||||
|
||||
Reference in New Issue
Block a user