Fix doOnlyOnce clause on triggered abilities

This commit is contained in:
PurpleCrowbar 2023-03-01 10:06:43 +00:00
parent 242490373e
commit 2b77d53f81
2 changed files with 4 additions and 3 deletions

View file

@ -91,7 +91,7 @@ public class TriggeredAbilities extends ConcurrentHashMap<String, TriggeredAbili
} }
} }
if (ability.checkTrigger(event, game) && ability.checkTriggeredAlready(game) && ability.checkUsedAlready(game)) { if (ability.checkTrigger(event, game) && ability.checkTriggeredAlready(game) && !ability.checkUsedAlready(game)) {
NumberOfTriggersEvent numberOfTriggersEvent = new NumberOfTriggersEvent(ability, event); NumberOfTriggersEvent numberOfTriggersEvent = new NumberOfTriggersEvent(ability, event);
if (!game.replaceEvent(numberOfTriggersEvent)) { if (!game.replaceEvent(numberOfTriggersEvent)) {
for (int i = 0; i < numberOfTriggersEvent.getAmount(); i++) { for (int i = 0; i < numberOfTriggersEvent.getAmount(); i++) {

View file

@ -111,12 +111,12 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
@Override @Override
public boolean checkUsedAlready(Game game) { public boolean checkUsedAlready(Game game) {
if (!doOnlyOnce) { if (!doOnlyOnce) {
return true; return false;
} }
Integer lastTurnUsed = (Integer) game.getState().getValue( Integer lastTurnUsed = (Integer) game.getState().getValue(
CardUtil.getCardZoneString("lastTurnUsed" + originalId, sourceId, game) CardUtil.getCardZoneString("lastTurnUsed" + originalId, sourceId, game)
); );
return lastTurnUsed == null || lastTurnUsed != game.getTurnNum(); return lastTurnUsed != null && lastTurnUsed == game.getTurnNum();
} }
public TriggeredAbility setDoOnlyOnce(boolean doOnlyOnce) { public TriggeredAbility setDoOnlyOnce(boolean doOnlyOnce) {
@ -139,6 +139,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
MageObject object = game.getObject(getSourceId()); MageObject object = game.getObject(getSourceId());
Player player = game.getPlayer(this.getControllerId()); Player player = game.getPlayer(this.getControllerId());
if (player == null || object == null if (player == null || object == null
|| (doOnlyOnce && checkUsedAlready(game))
|| !player.chooseUse( || !player.chooseUse(
getEffects().getOutcome(this), getEffects().getOutcome(this),
this.getRule(object.getLogName()), this, game this.getRule(object.getLogName()), this, game