forked from External/mage
game: turn modification improves:
- fixed miss phase changed events and logs in some use cases; - added source info in turn modification logs; - added game logs for take and lost control of the spell (example: Word of Command) - added game logs for skip step; - added game logs for extra step; - added game logs for skip phase;
This commit is contained in:
parent
e724166569
commit
3d3358cd05
14 changed files with 279 additions and 149 deletions
|
|
@ -1,19 +1,19 @@
|
|||
|
||||
package mage.game.turn;
|
||||
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.TurnPhase;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.TurnPhase;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public abstract class Phase implements Serializable {
|
||||
|
|
@ -81,15 +81,25 @@ public abstract class Phase implements Serializable {
|
|||
if (game.isPaused() || game.checkIfGameIsOver()) {
|
||||
return false;
|
||||
}
|
||||
if (game.getTurn().isEndTurnRequested() && step.getType()!=PhaseStep.CLEANUP) {
|
||||
if (game.getTurn().isEndTurnRequested() && step.getType() != PhaseStep.CLEANUP) {
|
||||
continue;
|
||||
}
|
||||
currentStep = step;
|
||||
if (!game.getState().getTurnMods().skipStep(activePlayerId, getStep().getType())) {
|
||||
TurnMod skipStepMod = game.getState().getTurnMods().useNextSkipStep(activePlayerId, getStep().getType());
|
||||
if (skipStepMod == null) {
|
||||
playStep(game);
|
||||
if (game.executingRollback()) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
Player player = game.getPlayer(skipStepMod.getPlayerId());
|
||||
if (player != null) {
|
||||
game.informPlayers(String.format("%s skips %s step%s",
|
||||
player.getLogName(),
|
||||
skipStepMod.getSkipStep().toString(),
|
||||
skipStepMod.getInfo()
|
||||
));
|
||||
}
|
||||
}
|
||||
if (!game.isSimulation() && checkStopOnStepOption(game)) {
|
||||
return false;
|
||||
|
|
@ -135,11 +145,21 @@ public abstract class Phase implements Serializable {
|
|||
return false;
|
||||
}
|
||||
currentStep = step;
|
||||
if (!game.getState().getTurnMods().skipStep(activePlayerId, currentStep.getType())) {
|
||||
TurnMod skipStepMod = game.getState().getTurnMods().useNextSkipStep(activePlayerId, currentStep.getType());
|
||||
if (skipStepMod == null) {
|
||||
playStep(game);
|
||||
if (game.executingRollback()) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
Player player = game.getPlayer(skipStepMod.getPlayerId());
|
||||
if (player != null) {
|
||||
game.informPlayers(String.format("%s skips %s step%s",
|
||||
player.getLogName(),
|
||||
skipStepMod.getSkipStep().toString(),
|
||||
skipStepMod.getInfo()
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -219,12 +239,22 @@ public abstract class Phase implements Serializable {
|
|||
|
||||
private void playExtraSteps(Game game, PhaseStep afterStep) {
|
||||
while (true) {
|
||||
Step extraStep = game.getState().getTurnMods().extraStep(activePlayerId, afterStep);
|
||||
if (extraStep == null) {
|
||||
TurnMod extraStepMod = game.getState().getTurnMods().useNextExtraStep(activePlayerId, afterStep);
|
||||
if (extraStepMod == null) {
|
||||
return;
|
||||
}
|
||||
currentStep = extraStepMod.getExtraStep();
|
||||
Player player = game.getPlayer(extraStepMod.getPlayerId());
|
||||
if (player != null && player.canRespond()) {
|
||||
game.informPlayers(String.format("%s takes an extra %s step%s",
|
||||
player.getLogName(),
|
||||
extraStepMod.getExtraStep().toString(),
|
||||
extraStepMod.getInfo()
|
||||
));
|
||||
playStep(game);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
currentStep = extraStep;
|
||||
playStep(game);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue