*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:
Hellfish
2011-09-11 17:44:07 +00:00
parent 08a4813af4
commit b7bf5e1967
14 changed files with 107 additions and 53 deletions

View File

@@ -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(", ");

View File

@@ -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--;
}
}

View File

@@ -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());