* Sacrifice cost - Fixed a bug that made wrongly sacrificing invalid, because sacrificed permanent did not go to graveyard (e.g. Rest in Peace in play).

This commit is contained in:
LevelX2 2014-04-05 02:46:21 +02:00
parent 816812f695
commit 042552aa1e
2 changed files with 8 additions and 12 deletions

View file

@ -64,10 +64,7 @@ public class SacrificeSourceCost extends CostImpl<SacrificeSourceCost> {
return false;
}
Permanent permanent = game.getPermanent(sourceId);
if (permanent != null) {
return true;
}
return false;
return permanent != null;
}
@Override

View file

@ -826,15 +826,14 @@ public abstract class PermanentImpl<T extends PermanentImpl<T>> extends CardImpl
public boolean sacrifice(UUID sourceId, Game game) {
//20091005 - 701.13
if (!game.replaceEvent(GameEvent.getEvent(EventType.SACRIFICE_PERMANENT, objectId, sourceId, controllerId))) {
// Commander replacement effect does not prevent successful sacrifice
if (moveToZone(Zone.GRAVEYARD, sourceId, game, true) || game.getState().getZone(this.getId()).equals(Zone.COMMAND)) {
Player player = game.getPlayer(getControllerId());
if (player != null) {
game.informPlayers(new StringBuilder(player.getName()).append(" sacrificed ").append(this.getName()).toString());
}
game.fireEvent(GameEvent.getEvent(EventType.SACRIFICED_PERMANENT, objectId, sourceId, controllerId));
return true;
// Commander replacement effect or Rest in Peace (exile instead of graveyard) in play does not prevent successful sacrifice
moveToZone(Zone.GRAVEYARD, sourceId, game, true);
Player player = game.getPlayer(getControllerId());
if (player != null) {
game.informPlayers(new StringBuilder(player.getName()).append(" sacrificed ").append(this.getName()).toString());
}
game.fireEvent(GameEvent.getEvent(EventType.SACRIFICED_PERMANENT, objectId, sourceId, controllerId));
return true;
}
return false;
}