Fixed potential NPE errors in getPhase usage (fixed Berserker's Frenzy, etc)

This commit is contained in:
Oleg Agafonov 2023-03-25 16:01:27 +04:00
parent cfd7464b49
commit a15a0daa04
81 changed files with 162 additions and 130 deletions

View file

@ -248,7 +248,7 @@ public class ComputerPlayer6 extends ComputerPlayer /*implements Player*/ {
}
val = minimaxAB(node, depth - 1, alpha, beta);
} else {
logger.trace("Add Action -- alpha: " + alpha + " beta: " + beta + " depth:" + depth + " step:" + game.getTurn().getStepType() + " for player:" + game.getPlayer(game.getActivePlayerId()).getName());
logger.trace("Add Action -- alpha: " + alpha + " beta: " + beta + " depth:" + depth + " step:" + game.getTurnStepType() + " for player:" + game.getPlayer(game.getActivePlayerId()).getName());
if (allPassed(game)) {
if (!game.getStack().isEmpty()) {
resolve(node, depth, game);
@ -291,7 +291,7 @@ public class ComputerPlayer6 extends ComputerPlayer /*implements Player*/ {
}
}
node.setScore(val);
logger.trace("returning -- score: " + val + " depth:" + depth + " step:" + game.getTurn().getStepType() + " for player:" + game.getPlayer(node.getPlayerId()).getName());
logger.trace("returning -- score: " + val + " depth:" + depth + " step:" + game.getTurnStepType() + " for player:" + game.getPlayer(node.getPlayerId()).getName());
return val;
}

View file

@ -45,10 +45,10 @@ public class ComputerPlayer7 extends ComputerPlayer6 {
logger.info("======================= Turn: " + game.getTurnNum() + " [" + game.getPlayer(game.getActivePlayerId()).getName() + "] =========================================");
}
logState(game);
logger.debug("Priority -- Step: " + (game.getTurn().getStepType() + " ").substring(0, 25) + " ActivePlayer-" + game.getPlayer(game.getActivePlayerId()).getName() + " PriorityPlayer-" + name);
logger.debug("Priority -- Step: " + (game.getTurnStepType() + " ").substring(0, 25) + " ActivePlayer-" + game.getPlayer(game.getActivePlayerId()).getName() + " PriorityPlayer-" + name);
game.getState().setPriorityPlayerId(playerId);
game.firePriorityEvent(playerId);
switch (game.getTurn().getStepType()) {
switch (game.getTurnStepType()) {
case UPKEEP:
case DRAW:
pass(game);

View file

@ -1266,7 +1266,7 @@ public class ComputerPlayer extends PlayerImpl implements Player {
if (game.isMainPhase() && game.getStack().isEmpty()) {
playLand(game);
}
switch (game.getTurn().getStepType()) {
switch (game.getTurnStepType()) {
case UPKEEP:
findPlayables(game);
break;
@ -1331,7 +1331,7 @@ public class ComputerPlayer extends PlayerImpl implements Player {
}
} else {
//respond to opponent events
switch (game.getTurn().getStepType()) {
switch (game.getTurnStepType()) {
case UPKEEP:
findPlayables(game);
break;

View file

@ -61,7 +61,7 @@ public class ComputerPlayerMCTS extends ComputerPlayer implements Player {
@Override
public boolean priority(Game game) {
if (game.getStep().getType() == PhaseStep.UPKEEP) {
if (game.getTurnStepType() == PhaseStep.UPKEEP) {
if (!lastPhase.equals(game.getTurn().getValue(game.getTurnNum()))) {
logList(game.getTurn().getValue(game.getTurnNum()) + name + " hand: ", new ArrayList(hand.getCards(game)));
lastPhase = game.getTurn().getValue(game.getTurnNum());
@ -236,7 +236,7 @@ public class ComputerPlayerMCTS extends ComputerPlayer implements Player {
if (root.getNumChildren() > 0)
nodeSizeRatio = root.getVisits() / root.getNumChildren();
// logger.info("Ratio: " + nodeSizeRatio);
PhaseStep curStep = game.getStep().getType();
PhaseStep curStep = game.getTurnStepType();
if (action == NextAction.SELECT_ATTACKERS || action == NextAction.SELECT_BLOCKERS) {
if (nodeSizeRatio < THINK_MIN_RATIO) {
thinkTime = maxThinkTime;

View file

@ -89,7 +89,7 @@ public class MCTSNode {
if (game.getStep().getStepPart() == StepPart.PRIORITY) {
playerId = game.getPriorityPlayerId();
} else {
if (game.getStep().getType() == PhaseStep.DECLARE_BLOCKERS) {
if (game.getTurnStepType() == PhaseStep.DECLARE_BLOCKERS) {
playerId = game.getCombat().getDefenders().iterator().next();
} else {
playerId = game.getActivePlayerId();
@ -129,7 +129,7 @@ public class MCTSNode {
}
switch (player.getNextAction()) {
case PRIORITY:
// logger.info("Priority for player:" + player.getName() + " turn: " + game.getTurnNum() + " phase: " + game.getPhase().getType() + " step: " + game.getStep().getType());
// logger.info("Priority for player:" + player.getName() + " turn: " + game.getTurnNum() + " phase: " + game.getTurnPhaseType() + " step: " + game.getTurnStepType());
List<Ability> abilities;
if (!USE_ACTION_CACHE)
abilities = player.getPlayableOptions(game);

View file

@ -1022,7 +1022,7 @@ public class HumanPlayer extends PlayerImpl {
boolean quickStop = false;
if (isGameUnderControl()) { // TODO: remove to enable quick stop for controlling player
// if was attacked - always stop BEFORE blocker step (to cast extra spells)
if (game.getTurn().getStepType() == PhaseStep.DECLARE_ATTACKERS
if (game.getTurnStepType() == PhaseStep.DECLARE_ATTACKERS
&& game.getCombat().getPlayerDefenders(game).contains(playerId)) {
FilterCreatureForCombatBlock filter = filterCreatureForCombatBlock.copy();
filter.add(new ControllerIdPredicate(playerId));
@ -1044,7 +1044,7 @@ public class HumanPlayer extends PlayerImpl {
}
if (passedUntilEndStepBeforeMyTurn) {
if (game.getTurn().getStepType() != PhaseStep.END_TURN) {
if (game.getTurnStepType() != PhaseStep.END_TURN) {
// other step
if (passWithManaPoolCheck(game)) {
return false;
@ -1080,8 +1080,8 @@ public class HumanPlayer extends PlayerImpl {
}
if (passedUntilNextMain) {
if (game.getTurn().getStepType() == PhaseStep.POSTCOMBAT_MAIN
|| game.getTurn().getStepType() == PhaseStep.PRECOMBAT_MAIN) {
if (game.getTurnStepType() == PhaseStep.POSTCOMBAT_MAIN
|| game.getTurnStepType() == PhaseStep.PRECOMBAT_MAIN) {
// it's main step
if (!skippedAtLeastOnce
|| (!playerId.equals(game.getActivePlayerId())
@ -1103,7 +1103,7 @@ public class HumanPlayer extends PlayerImpl {
}
if (passedUntilEndOfTurn) {
if (game.getTurn().getStepType() == PhaseStep.END_TURN) {
if (game.getTurnStepType() == PhaseStep.END_TURN) {
// it's end of turn step
if (!skippedAtLeastOnce
|| (playerId.equals(game.getActivePlayerId())
@ -1271,16 +1271,16 @@ public class HumanPlayer extends PlayerImpl {
try {
if (playerId.equals(game.getActivePlayerId())) {
return !controllingPlayer.getUserData().getUserSkipPrioritySteps().getYourTurn().isPhaseStepSet(game.getStep().getType());
return !controllingPlayer.getUserData().getUserSkipPrioritySteps().getYourTurn().isPhaseStepSet(game.getTurnStepType());
} else {
return !controllingPlayer.getUserData().getUserSkipPrioritySteps().getOpponentTurn().isPhaseStepSet(game.getStep().getType());
return !controllingPlayer.getUserData().getUserSkipPrioritySteps().getOpponentTurn().isPhaseStepSet(game.getTurnStepType());
}
} catch (NullPointerException ex) {
if (controllingPlayer.getUserData() != null) {
if (controllingPlayer.getUserData().getUserSkipPrioritySteps() != null) {
if (game.getStep() != null) {
if (game.getStep().getType() == null) {
logger.error("game.getStep().getType() == null");
if (game.getTurnStepType() == null) {
logger.error("game.getTurnStepType() == null");
}
} else {
logger.error("game.getStep() == null");
@ -2659,7 +2659,7 @@ public class HumanPlayer extends PlayerImpl {
}
// TODO: chooseUse and other dialogs must be under controlling player
if (!chooseUse(Outcome.Detriment, GameLog.getPlayerConfirmColoredText("You still have mana in your mana pool. Pass regardless?")
+ GameLog.getSmallSecondLineText(activePlayerText + " / " + game.getStep().getType().toString() + priorityPlayerText), null, game)) {
+ GameLog.getSmallSecondLineText(activePlayerText + " / " + game.getTurnStepType().toString() + priorityPlayerText), null, game)) {
sendPlayerAction(PlayerAction.PASS_PRIORITY_CANCEL_ALL_ACTIONS, game, null);
return false;
}