mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 21:12:04 -08:00
[SNC] Implemented Riveteers Ascendancy
This commit is contained in:
parent
a3b1b825c0
commit
0b50f15923
8 changed files with 179 additions and 149 deletions
|
|
@ -91,7 +91,7 @@ public class TriggeredAbilities extends ConcurrentHashMap<String, TriggeredAbili
|
|||
}
|
||||
}
|
||||
|
||||
if (ability.checkTrigger(event, game) && ability.checkTriggeredAlready(game)) {
|
||||
if (ability.checkTrigger(event, game) && ability.checkTriggeredAlready(game) && ability.checkUsedAlready(game)) {
|
||||
NumberOfTriggersEvent numberOfTriggersEvent = new NumberOfTriggersEvent(ability, event);
|
||||
if (!game.replaceEvent(numberOfTriggersEvent)) {
|
||||
for (int i = 0; i < numberOfTriggersEvent.getAmount(); i++) {
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@ public interface TriggeredAbility extends Ability {
|
|||
|
||||
boolean checkTriggeredAlready(Game game);
|
||||
|
||||
boolean checkUsedAlready(Game game);
|
||||
|
||||
TriggeredAbility setTriggersOnce(boolean triggersOnce);
|
||||
|
||||
boolean checkInterveningIfClause(Game game);
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|
|||
protected boolean optional;
|
||||
protected boolean leavesTheBattlefieldTrigger;
|
||||
private boolean triggersOnce = false;
|
||||
private boolean doOnlyOnce = false;
|
||||
private GameEvent triggerEvent = null;
|
||||
private String triggerPhrase = null;
|
||||
|
||||
|
|
@ -52,6 +53,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|
|||
this.optional = ability.optional;
|
||||
this.leavesTheBattlefieldTrigger = ability.leavesTheBattlefieldTrigger;
|
||||
this.triggersOnce = ability.triggersOnce;
|
||||
this.doOnlyOnce = ability.doOnlyOnce;
|
||||
this.triggerPhrase = ability.triggerPhrase;
|
||||
}
|
||||
|
||||
|
|
@ -105,6 +107,23 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkUsedAlready(Game game) {
|
||||
if (!doOnlyOnce) {
|
||||
return true;
|
||||
}
|
||||
Integer lastTurnUsed = (Integer) game.getState().getValue(
|
||||
CardUtil.getCardZoneString("lastTurnUsed" + originalId, sourceId, game)
|
||||
);
|
||||
return lastTurnUsed == null || lastTurnUsed != game.getTurnNum();
|
||||
}
|
||||
|
||||
public TriggeredAbility setDoOnlyOnce(boolean doOnlyOnce) {
|
||||
this.optional = true;
|
||||
this.doOnlyOnce = doOnlyOnce;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkInterveningIfClause(Game game) {
|
||||
return true;
|
||||
|
|
@ -112,22 +131,30 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|
|||
|
||||
@Override
|
||||
public boolean resolve(Game game) {
|
||||
if (!checkInterveningIfClause(game)) {
|
||||
return false;
|
||||
}
|
||||
if (isOptional()) {
|
||||
MageObject object = game.getObject(getSourceId());
|
||||
Player player = game.getPlayer(this.getControllerId());
|
||||
if (player != null && object != null) {
|
||||
if (!player.chooseUse(getEffects().getOutcome(this), this.getRule(object.getLogName()), this, game)) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (player == null || object == null
|
||||
|| !player.chooseUse(
|
||||
getEffects().getOutcome(this),
|
||||
this.getRule(object.getLogName()), this, game
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//20091005 - 603.4
|
||||
if (checkInterveningIfClause(game)) {
|
||||
return super.resolve(game);
|
||||
if (!super.resolve(game)) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
if (doOnlyOnce) {
|
||||
game.getState().setValue(CardUtil.getCardZoneString(
|
||||
"lastTurnUsed" + originalId, sourceId, game
|
||||
), game.getTurnNum());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -182,6 +209,9 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|
|||
if (triggersOnce) {
|
||||
sb.append(" This ability triggers only once each turn.");
|
||||
}
|
||||
if (doOnlyOnce) {
|
||||
sb.append(" Do this only once each turn.");
|
||||
}
|
||||
}
|
||||
String prefix;
|
||||
if (abilityWord != null) {
|
||||
|
|
|
|||
|
|
@ -46,10 +46,8 @@ public class GainLifeControllerTriggeredAbility extends TriggeredAbilityImpl {
|
|||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (event.getPlayerId().equals(this.getControllerId())) {
|
||||
if (setTargetPointer) {
|
||||
for (Effect effect : this.getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
|
||||
effect.setValue("gainedLife", event.getAmount());
|
||||
}
|
||||
this.getEffects().setTargetPointer(new FixedTarget(event.getPlayerId()));
|
||||
this.getEffects().setValue("gainedLife", event.getAmount());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -58,6 +56,6 @@ public class GainLifeControllerTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public String getTriggerPhrase() {
|
||||
return "Whenever you gain life, " ;
|
||||
return "Whenever you gain life, ";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue