mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
TriggerHandler: changed OncePerEffect trigger for better checking
This commit is contained in:
@@ -24,6 +24,7 @@ import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.card.IHasCardView;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.trigger.WrappedAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
@@ -92,7 +93,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
|
||||
|
||||
private final List<ZoneType> zonesToOpen;
|
||||
private final Map<Player, Object> playersWithValidTargets;
|
||||
private final Set<Card> oncePerEffectTriggers = new HashSet<>();
|
||||
private final Set<Trigger> oncePerEffectTriggers = new HashSet<>();
|
||||
|
||||
private final StackItemView view;
|
||||
|
||||
@@ -272,8 +273,12 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
|
||||
return playersWithValidTargets;
|
||||
}
|
||||
|
||||
public final boolean attemptOncePerEffectTrigger(Card hostCard) {
|
||||
return oncePerEffectTriggers.add(hostCard);
|
||||
public final boolean hasOncePerEffectTrigger(Trigger trigger) {
|
||||
return oncePerEffectTriggers.contains(trigger);
|
||||
}
|
||||
|
||||
public final boolean addOncePerEffectTrigger(Trigger trigger) {
|
||||
return oncePerEffectTriggers.add(trigger);
|
||||
}
|
||||
|
||||
public void updateTarget(TargetChoices target) {
|
||||
|
||||
@@ -163,7 +163,7 @@ public class TriggerChangesZone extends Trigger {
|
||||
SpellAbilityStackInstance si = (SpellAbilityStackInstance) runParams2.get("SpellAbilityStackInstance");
|
||||
|
||||
// si == null means the stack is empty
|
||||
return si == null || si.attemptOncePerEffectTrigger(this.getHostCard());
|
||||
return si == null || !si.hasOncePerEffectTrigger(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ public class TriggerDamageDone extends Trigger {
|
||||
SpellAbilityStackInstance si = (SpellAbilityStackInstance) runParams2.get("SpellAbilityStackInstance");
|
||||
|
||||
// si == null means the stack is empty
|
||||
return si == null || si.attemptOncePerEffectTrigger(this.getHostCard());
|
||||
return si == null || !si.hasOncePerEffectTrigger(this);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -31,6 +31,7 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.Ability;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.SpellAbilityStackInstance;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.game.zone.Zone;
|
||||
import forge.game.zone.ZoneType;
|
||||
@@ -328,9 +329,10 @@ public class TriggerHandler {
|
||||
for (final Trigger t : Lists.newArrayList(activeTriggers)) {
|
||||
if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
|
||||
int x = 1;
|
||||
int p = t.getHostCard().getController().getAmountOfKeyword("Panharmonicon");
|
||||
|
||||
if (handlePanharmonicon(t, runParams)) {
|
||||
x += t.getHostCard().getController().getAmountOfKeyword("Panharmonicon");
|
||||
if (p > 0 && handlePanharmonicon(t, runParams)) {
|
||||
x += p;
|
||||
}
|
||||
|
||||
for (int i = 0; i < x; ++i) {
|
||||
@@ -396,10 +398,18 @@ public class TriggerHandler {
|
||||
}
|
||||
}
|
||||
|
||||
int x = 1;
|
||||
if (t.getMapParams().containsKey("OncePerEffect")) {
|
||||
SpellAbilityStackInstance si = (SpellAbilityStackInstance) runParams.get("SpellAbilityStackInstance");
|
||||
if (si != null) {
|
||||
si.addOncePerEffectTrigger(t);
|
||||
}
|
||||
}
|
||||
|
||||
if (handlePanharmonicon(t, runParams)) {
|
||||
x += t.getHostCard().getController().getAmountOfKeyword("Panharmonicon");
|
||||
int x = 1;
|
||||
int p = t.getHostCard().getController().getAmountOfKeyword("Panharmonicon");
|
||||
|
||||
if (p > 0 && handlePanharmonicon(t, runParams)) {
|
||||
x += p;
|
||||
}
|
||||
|
||||
for (int i = 0; i < x; ++i) {
|
||||
|
||||
Reference in New Issue
Block a user