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:
LevelX2 2013-12-21 16:33:49 +01:00
parent db99909550
commit ebb71b7dd7
2 changed files with 15 additions and 8 deletions

View file

@ -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

View file

@ -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);
} }
} }