From 35b00c3da152871997b9337d733ad2e46f56b093 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 9 Jun 2023 06:48:59 +0400 Subject: [PATCH] Fixed game errors for non started games (some cards uses dynamic hints with non-protected code) --- .../mage/game/permanent/PermanentImpl.java | 7 +++- Mage/src/main/java/mage/util/CardUtil.java | 41 ++++++++++--------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/Mage/src/main/java/mage/game/permanent/PermanentImpl.java b/Mage/src/main/java/mage/game/permanent/PermanentImpl.java index 622cf4ad4e8..cd4701442db 100644 --- a/Mage/src/main/java/mage/game/permanent/PermanentImpl.java +++ b/Mage/src/main/java/mage/game/permanent/PermanentImpl.java @@ -275,6 +275,11 @@ public abstract class PermanentImpl extends CardImpl implements Permanent { rules.addAll(info.values()); } + if (game == null || game.getPhase() == null) { + // dynamic hints for started game only + return rules; + } + // ability hints List abilityHints = new ArrayList<>(); if (HintUtils.ABILITY_HINTS_ENABLE) { @@ -290,7 +295,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent { // restrict hints List restrictHints = new ArrayList<>(); - if (game != null && HintUtils.RESTRICT_HINTS_ENABLE) { + if (HintUtils.RESTRICT_HINTS_ENABLE) { // restrict for (Map.Entry> entry : game.getContinuousEffects().getApplicableRestrictionEffects(this, game).entrySet()) { for (Ability ability : entry.getValue()) { diff --git a/Mage/src/main/java/mage/util/CardUtil.java b/Mage/src/main/java/mage/util/CardUtil.java index a1e7323d4b2..f320664ceb8 100644 --- a/Mage/src/main/java/mage/util/CardUtil.java +++ b/Mage/src/main/java/mage/util/CardUtil.java @@ -1116,31 +1116,34 @@ public final class CardUtil { try { List rules = rulesSource.getRules(cardName); - if (game != null) { + if (game == null || game.getPhase() == null) { + // dynamic hints for started game only + return rules; + } - // debug state - rules.addAll(game.getState().getCardState(cardId).getInfo().values()); + // debug state + rules.addAll(game.getState().getCardState(cardId).getInfo().values()); - // ability hints - List abilityHints = new ArrayList<>(); - if (HintUtils.ABILITY_HINTS_ENABLE) { - for (Ability ability : hintsSource) { - for (Hint hint : ability.getHints()) { - String s = hint.getText(game, ability); - if (s != null && !s.isEmpty()) { - abilityHints.add(s); - } + // ability hints + List abilityHints = new ArrayList<>(); + if (HintUtils.ABILITY_HINTS_ENABLE) { + for (Ability ability : hintsSource) { + for (Hint hint : ability.getHints()) { + String s = hint.getText(game, ability); + if (s != null && !s.isEmpty()) { + abilityHints.add(s); } } } - - // restrict hints only for permanents, not cards - // total hints - if (!abilityHints.isEmpty()) { - rules.add(HintUtils.HINT_START_MARK); - HintUtils.appendHints(rules, abilityHints); - } } + + // restrict hints only for permanents, not cards + // total hints + if (!abilityHints.isEmpty()) { + rules.add(HintUtils.HINT_START_MARK); + HintUtils.appendHints(rules, abilityHints); + } + return rules; } catch (Exception e) { logger.error("Exception in rules generation for card: " + cardName, e);