mirror of
https://github.com/magefree/mage.git
synced 2025-12-22 03:22:00 -08:00
cheats: added default commands to take and remove control over another player (related to #12878)
This commit is contained in:
parent
c076f4925f
commit
5626c5f932
4 changed files with 46 additions and 4 deletions
|
|
@ -24,6 +24,8 @@ import mage.game.command.Plane;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.game.permanent.token.Token;
|
import mage.game.permanent.token.Token;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
|
import mage.target.Target;
|
||||||
|
import mage.target.TargetPlayer;
|
||||||
import mage.util.CardUtil;
|
import mage.util.CardUtil;
|
||||||
import mage.util.MultiAmountMessage;
|
import mage.util.MultiAmountMessage;
|
||||||
import mage.util.RandomUtil;
|
import mage.util.RandomUtil;
|
||||||
|
|
@ -66,6 +68,8 @@ public final class SystemUtil {
|
||||||
// [@mana add] -> MANA ADD
|
// [@mana add] -> MANA ADD
|
||||||
private static final String COMMAND_CARDS_ADD_TO_HAND = "@card add to hand";
|
private static final String COMMAND_CARDS_ADD_TO_HAND = "@card add to hand";
|
||||||
private static final String COMMAND_LANDS_ADD_TO_BATTLEFIELD = "@lands add";
|
private static final String COMMAND_LANDS_ADD_TO_BATTLEFIELD = "@lands add";
|
||||||
|
private static final String COMMAND_OPPONENT_UNDER_CONTROL_START = "@opponent under control start";
|
||||||
|
private static final String COMMAND_OPPONENT_UNDER_CONTROL_END = "@opponent under control end";
|
||||||
private static final String COMMAND_MANA_ADD = "@mana add"; // TODO: not implemented
|
private static final String COMMAND_MANA_ADD = "@mana add"; // TODO: not implemented
|
||||||
private static final String COMMAND_RUN_CUSTOM_CODE = "@run custom code"; // TODO: not implemented
|
private static final String COMMAND_RUN_CUSTOM_CODE = "@run custom code"; // TODO: not implemented
|
||||||
private static final String COMMAND_SHOW_OPPONENT_HAND = "@show opponent hand";
|
private static final String COMMAND_SHOW_OPPONENT_HAND = "@show opponent hand";
|
||||||
|
|
@ -80,6 +84,8 @@ public final class SystemUtil {
|
||||||
supportedCommands.put(COMMAND_CARDS_ADD_TO_HAND, "CARDS: ADD TO HAND");
|
supportedCommands.put(COMMAND_CARDS_ADD_TO_HAND, "CARDS: ADD TO HAND");
|
||||||
supportedCommands.put(COMMAND_MANA_ADD, "MANA ADD");
|
supportedCommands.put(COMMAND_MANA_ADD, "MANA ADD");
|
||||||
supportedCommands.put(COMMAND_LANDS_ADD_TO_BATTLEFIELD, "LANDS: ADD TO BATTLEFIELD");
|
supportedCommands.put(COMMAND_LANDS_ADD_TO_BATTLEFIELD, "LANDS: ADD TO BATTLEFIELD");
|
||||||
|
supportedCommands.put(COMMAND_OPPONENT_UNDER_CONTROL_START, "OPPONENT CONTROL: ENABLE");
|
||||||
|
supportedCommands.put(COMMAND_OPPONENT_UNDER_CONTROL_END, "OPPONENT CONTROL: DISABLE");
|
||||||
supportedCommands.put(COMMAND_RUN_CUSTOM_CODE, "RUN CUSTOM CODE");
|
supportedCommands.put(COMMAND_RUN_CUSTOM_CODE, "RUN CUSTOM CODE");
|
||||||
supportedCommands.put(COMMAND_SHOW_OPPONENT_HAND, "SHOW OPPONENT HAND");
|
supportedCommands.put(COMMAND_SHOW_OPPONENT_HAND, "SHOW OPPONENT HAND");
|
||||||
supportedCommands.put(COMMAND_SHOW_OPPONENT_LIBRARY, "SHOW OPPONENT LIBRARY");
|
supportedCommands.put(COMMAND_SHOW_OPPONENT_LIBRARY, "SHOW OPPONENT LIBRARY");
|
||||||
|
|
@ -301,6 +307,8 @@ public final class SystemUtil {
|
||||||
// add default commands
|
// add default commands
|
||||||
initLines.add(0, String.format("[%s]", COMMAND_LANDS_ADD_TO_BATTLEFIELD));
|
initLines.add(0, String.format("[%s]", COMMAND_LANDS_ADD_TO_BATTLEFIELD));
|
||||||
initLines.add(1, String.format("[%s]", COMMAND_CARDS_ADD_TO_HAND));
|
initLines.add(1, String.format("[%s]", COMMAND_CARDS_ADD_TO_HAND));
|
||||||
|
initLines.add(2, String.format("[%s]", COMMAND_OPPONENT_UNDER_CONTROL_START));
|
||||||
|
initLines.add(3, String.format("[%s]", COMMAND_OPPONENT_UNDER_CONTROL_END));
|
||||||
|
|
||||||
// collect all commands
|
// collect all commands
|
||||||
CommandGroup currentGroup = null;
|
CommandGroup currentGroup = null;
|
||||||
|
|
@ -544,6 +552,34 @@ public final class SystemUtil {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case COMMAND_OPPONENT_UNDER_CONTROL_START: {
|
||||||
|
Target target = new TargetPlayer().withNotTarget(true).withChooseHint("to take under your control");
|
||||||
|
if (feedbackPlayer.chooseTarget(Outcome.GainControl, target, fakeSourceAbilityTemplate, game)) {
|
||||||
|
Player targetPlayer = game.getPlayer(target.getFirstTarget());
|
||||||
|
if (targetPlayer != null && targetPlayer != feedbackPlayer) {
|
||||||
|
CardUtil.takeControlUnderPlayerStart(game, fakeSourceAbilityTemplate, feedbackPlayer, targetPlayer, false);
|
||||||
|
// allow priority play again in same step (for better cheat UX)
|
||||||
|
targetPlayer.resetPassed();
|
||||||
|
}
|
||||||
|
// workaround for refresh priority dialog like avatar click (cheats called from priority in 99%)
|
||||||
|
game.firePriorityEvent(feedbackPlayer.getId());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case COMMAND_OPPONENT_UNDER_CONTROL_END: {
|
||||||
|
Target target = new TargetPlayer().withNotTarget(true).withChooseHint("to free from your control");
|
||||||
|
if (feedbackPlayer.chooseTarget(Outcome.GainControl, target, fakeSourceAbilityTemplate, game)) {
|
||||||
|
Player targetPlayer = game.getPlayer(target.getFirstTarget());
|
||||||
|
if (targetPlayer != null && targetPlayer != feedbackPlayer && !targetPlayer.isGameUnderControl()) {
|
||||||
|
CardUtil.takeControlUnderPlayerEnd(game, fakeSourceAbilityTemplate, feedbackPlayer, targetPlayer);
|
||||||
|
}
|
||||||
|
// workaround for refresh priority dialog like avatar click (cheats called from priority in 99%)
|
||||||
|
game.firePriorityEvent(feedbackPlayer.getId());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
String mes = String.format("Unknown system command: %s", runGroup.name);
|
String mes = String.format("Unknown system command: %s", runGroup.name);
|
||||||
errorsList.add(mes);
|
errorsList.add(mes);
|
||||||
|
|
@ -551,7 +587,6 @@ public final class SystemUtil {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sendCheatCommandsFeedback(game, feedbackPlayer, errorsList);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -248,7 +248,6 @@ public class Turn implements Serializable {
|
||||||
// add new under control
|
// add new under control
|
||||||
TurnMod newControllerMod = game.getState().getTurnMods().useNextNewController(activePlayerId);
|
TurnMod newControllerMod = game.getState().getTurnMods().useNextNewController(activePlayerId);
|
||||||
if (newControllerMod != null && !newControllerMod.getNewControllerId().equals(activePlayerId)) {
|
if (newControllerMod != null && !newControllerMod.getNewControllerId().equals(activePlayerId)) {
|
||||||
// set player under new control
|
|
||||||
// game logs added in child's call (controlPlayersTurn)
|
// game logs added in child's call (controlPlayersTurn)
|
||||||
game.getPlayer(newControllerMod.getNewControllerId()).controlPlayersTurn(game, activePlayerId, newControllerMod.getInfo());
|
game.getPlayer(newControllerMod.getNewControllerId()).controlPlayersTurn(game, activePlayerId, newControllerMod.getInfo());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,14 @@ public class TurnMods extends ArrayList<TurnMod> implements Serializable, Copyab
|
||||||
}
|
}
|
||||||
|
|
||||||
public TurnMod useNextNewController(UUID playerId) {
|
public TurnMod useNextNewController(UUID playerId) {
|
||||||
|
// 720.1a
|
||||||
|
// Multiple player-controlling effects that affect the same player overwrite each other.
|
||||||
|
// The last one to be created is the one that works.
|
||||||
|
//
|
||||||
|
// 720.1b
|
||||||
|
// If a turn is skipped, any pending player-controlling effects wait until the player
|
||||||
|
// who would be affected actually takes a turn.
|
||||||
|
|
||||||
TurnMod lastNewControllerMod = null;
|
TurnMod lastNewControllerMod = null;
|
||||||
|
|
||||||
// find last/actual mod
|
// find last/actual mod
|
||||||
|
|
|
||||||
|
|
@ -1380,7 +1380,7 @@ public final class CardUtil {
|
||||||
public static void takeControlUnderPlayerEnd(Game game, Ability source, Player controller, Player playerUnderControl) {
|
public static void takeControlUnderPlayerEnd(Game game, Ability source, Player controller, Player playerUnderControl) {
|
||||||
playerUnderControl.setGameUnderYourControl(true, false);
|
playerUnderControl.setGameUnderYourControl(true, false);
|
||||||
if (!playerUnderControl.getTurnControlledBy().equals(controller.getId())) {
|
if (!playerUnderControl.getTurnControlledBy().equals(controller.getId())) {
|
||||||
game.informPlayers(controller + " return control of the turn to " + playerUnderControl.getLogName() + CardUtil.getSourceLogName(game, source));
|
game.informPlayers(controller.getLogName() + " return control of the turn to " + playerUnderControl.getLogName() + CardUtil.getSourceLogName(game, source));
|
||||||
controller.getPlayersUnderYourControl().remove(playerUnderControl.getId());
|
controller.getPlayersUnderYourControl().remove(playerUnderControl.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue