mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
Fixed a problem that not all effects of Smelt-Ward Gatekeeper's was resolved, because target was nor more legal after getting the control of target creature. Problem was cause by commit 80fc87a7f7
. Now both problems should be solved (hopefully).
This commit is contained in:
parent
db99909550
commit
ebb71b7dd7
2 changed files with 15 additions and 8 deletions
|
@ -298,24 +298,35 @@ public abstract class TargetImpl<T extends TargetImpl<T>> implements Target {
|
||||||
@Override
|
@Override
|
||||||
public boolean isLegal(Ability source, Game game) {
|
public boolean isLegal(Ability source, Game game) {
|
||||||
//20101001 - 608.2b
|
//20101001 - 608.2b
|
||||||
|
Set <UUID> illegalTargets = new HashSet<UUID>();
|
||||||
|
int replacedTargets = 0;
|
||||||
for (UUID targetId: targets.keySet()) {
|
for (UUID targetId: targets.keySet()) {
|
||||||
Card card = game.getCard(targetId);
|
Card card = game.getCard(targetId);
|
||||||
if (card != null) {
|
if (card != null) {
|
||||||
if (zoneChangeCounters.containsKey(targetId) && zoneChangeCounters.get(targetId) != card.getZoneChangeCounter()) {
|
if (zoneChangeCounters.containsKey(targetId) && zoneChangeCounters.get(targetId) != card.getZoneChangeCounter()) {
|
||||||
continue; // it's not legal so continue to have a look at other targeted cards
|
illegalTargets.add(targetId);
|
||||||
|
continue; // it's not legal so continue to have a look at other targeted objects
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (game.replaceEvent(GameEvent.getEvent(EventType.TARGET, targetId, source.getId(), source.getControllerId()))) {
|
if (game.replaceEvent(GameEvent.getEvent(EventType.TARGET, targetId, source.getId(), source.getControllerId()))) {
|
||||||
|
replacedTargets++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (canTarget(targetId, source, game)) {
|
if (!canTarget(targetId, source, game)) {
|
||||||
return true;
|
illegalTargets.add(targetId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// remove illegal targets, needed to handle if only a subset of targets was illegal
|
||||||
|
for (UUID targetId: illegalTargets) {
|
||||||
|
targets.remove(targetId);
|
||||||
|
}
|
||||||
|
if (replacedTargets > 0 && replacedTargets == targets.size()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (minNumberOfTargets == 0 && targets.isEmpty()) {
|
if (minNumberOfTargets == 0 && targets.isEmpty()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return targets.size() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -44,16 +44,12 @@ public class FirstTargetPointer implements TargetPointer {
|
||||||
public List<UUID> getTargets(Game game, Ability source) {
|
public List<UUID> getTargets(Game game, Ability source) {
|
||||||
ArrayList<UUID> target = new ArrayList<UUID>();
|
ArrayList<UUID> target = new ArrayList<UUID>();
|
||||||
if (source.getTargets().size() > 0) {
|
if (source.getTargets().size() > 0) {
|
||||||
Target currentTarget = source.getTargets().get(0);
|
|
||||||
for (UUID targetId : source.getTargets().get(0).getTargets()) {
|
for (UUID targetId : source.getTargets().get(0).getTargets()) {
|
||||||
Card card = game.getCard(targetId);
|
Card card = game.getCard(targetId);
|
||||||
if (card != null && zoneChangeCounter.containsKey(targetId)
|
if (card != null && zoneChangeCounter.containsKey(targetId)
|
||||||
&& card.getZoneChangeCounter() != zoneChangeCounter.get(targetId)) {
|
&& card.getZoneChangeCounter() != zoneChangeCounter.get(targetId)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!currentTarget.canTarget(targetId, source, game)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
target.add(targetId);
|
target.add(targetId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue