mirror of
https://github.com/magefree/mage.git
synced 2025-12-24 20:41:58 -08:00
Fixed that a planeswalker that left the battlefield was not correctly removed from combat.
This commit is contained in:
parent
ff298938c1
commit
9f35637e6d
4 changed files with 68 additions and 12 deletions
|
|
@ -1110,6 +1110,17 @@ public class Combat implements Serializable, Copyable<Combat> {
|
|||
}
|
||||
}
|
||||
|
||||
public boolean removePlaneswalkerFromCombat(UUID planeswalkerId, Game game, boolean withInfo) {
|
||||
boolean result = false;
|
||||
for (CombatGroup group : groups) {
|
||||
if (group.getDefenderId().equals(planeswalkerId)) {
|
||||
group.removeAttackedPlaneswalker(planeswalkerId);
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean removeFromCombat(UUID creatureId, Game game, boolean withInfo) {
|
||||
boolean result = false;
|
||||
Permanent creature = game.getPermanent(creatureId);
|
||||
|
|
|
|||
|
|
@ -503,19 +503,25 @@ public class CombatGroup implements Serializable, Copyable<CombatGroup> {
|
|||
return defenderIsPlaneswalker;
|
||||
}
|
||||
|
||||
public boolean removeAttackedPlaneswalker(UUID planeswalkerId) {
|
||||
if (defenderIsPlaneswalker && defenderId.equals(planeswalkerId)) {
|
||||
defenderId = null;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean remove(UUID creatureId) {
|
||||
boolean result = false;
|
||||
if (attackers.contains(creatureId)) {
|
||||
attackers.remove(creatureId);
|
||||
result = true;
|
||||
} else {
|
||||
if (blockers.contains(creatureId)) {
|
||||
blockers.remove(creatureId);
|
||||
result = true;
|
||||
//20100423 - 509.2a
|
||||
if (blockerOrder.contains(creatureId)) {
|
||||
blockerOrder.remove(creatureId);
|
||||
}
|
||||
} else if (blockers.contains(creatureId)) {
|
||||
blockers.remove(creatureId);
|
||||
result = true;
|
||||
//20100423 - 509.2a
|
||||
if (blockerOrder.contains(creatureId)) {
|
||||
blockerOrder.remove(creatureId);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -1091,10 +1091,8 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
|
|||
if (!oneCanBeAttacked) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (!canAttackCheckRestrictionEffects(defenderId, game)) {
|
||||
return false;
|
||||
}
|
||||
} else if (!canAttackCheckRestrictionEffects(defenderId, game)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !abilities.containsKey(DefenderAbility.getInstance().getId())
|
||||
|
|
@ -1223,6 +1221,10 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
|
|||
public boolean removeFromCombat(Game game, boolean withInfo) {
|
||||
if (this.isAttacking() || this.blocking > 0) {
|
||||
return game.getCombat().removeFromCombat(objectId, game, withInfo);
|
||||
} else if (getCardType().contains(CardType.PLANESWALKER)) {
|
||||
if (game.getCombat().getDefenders().contains(getId())) {
|
||||
game.getCombat().removePlaneswalkerFromCombat(objectId, game, withInfo);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue