Fix Descent of the Dragons and March of Souls: Destroy all affected creatures first, then create the tokens

This commit is contained in:
LoneFox 2015-07-12 11:32:09 +03:00
parent 18d1d63cc0
commit 429dde295d
2 changed files with 32 additions and 13 deletions

View file

@ -27,6 +27,7 @@
*/
package mage.sets.dragonsoftarkir;
import java.util.HashMap;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
@ -87,18 +88,27 @@ class DescentOfTheDragonsEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
HashMap<UUID, Integer> playersWithTargets = new HashMap<UUID, Integer>();
for (Target target : source.getTargets()) {
for (UUID permanentId : target.getTargets()) {
Permanent permanent = game.getPermanent(permanentId);
if (permanent != null) {
UUID controllerOfTargetId = permanent.getControllerId();
if (permanent.destroy(source.getSourceId(), game, false)) {
DragonToken dragonToken = new DragonToken();
dragonToken.putOntoBattlefield(1, game, source.getSourceId(), controllerOfTargetId);
if(playersWithTargets.containsKey(controllerOfTargetId)) {
playersWithTargets.put(controllerOfTargetId, playersWithTargets.get(controllerOfTargetId) + 1);
}
else {
playersWithTargets.put(controllerOfTargetId, 1);
}
}
}
}
}
DragonToken dragonToken = new DragonToken();
for(UUID playerId : playersWithTargets.keySet()) {
dragonToken.putOntoBattlefield(playersWithTargets.get(playerId), game, source.getSourceId(), playerId);
}
return true;
}
return false;

View file

@ -27,6 +27,7 @@
*/
package mage.sets.planeshift;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability;
@ -83,16 +84,24 @@ class MarchOfSoulsEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
List<Permanent> creatures = game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(),
source.getControllerId(), source.getSourceId(), game);
for(Permanent p : creatures) {
UUID controllerId = p.getControllerId();
if(p.destroy(source.getSourceId(), game, true)) {
SpiritWhiteToken token = new SpiritWhiteToken();
token.putOntoBattlefield(1, game, source.getSourceId(), controllerId);
}
}
return true;
List<Permanent> creatures = game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(),
source.getControllerId(), source.getSourceId(), game);
HashMap<UUID, Integer> playersWithCreatures = new HashMap<UUID, Integer>();
for(Permanent p : creatures) {
UUID controllerId = p.getControllerId();
if(p.destroy(source.getSourceId(), game, true)) {
if(playersWithCreatures.containsKey(controllerId)) {
playersWithCreatures.put(controllerId, playersWithCreatures.get(controllerId) + 1);
}
else {
playersWithCreatures.put(controllerId, 1);
}
}
}
SpiritWhiteToken token = new SpiritWhiteToken();
for(UUID playerId : playersWithCreatures.keySet()) {
token.putOntoBattlefield(playersWithCreatures.get(playerId), game, source.getSourceId(), playerId);
}
return true;
}
}