From 66d132776e7b5781ad2519786205dfd05e87243e Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sun, 17 Sep 2023 15:23:19 +0400 Subject: [PATCH] Capital Offense - fixed wrong card text, improved performance --- .../src/mage/cards/c/CapitalOffense.java | 47 +++++++++++++------ 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/Mage.Sets/src/mage/cards/c/CapitalOffense.java b/Mage.Sets/src/mage/cards/c/CapitalOffense.java index 314eb2be911..a6209f158a8 100644 --- a/Mage.Sets/src/mage/cards/c/CapitalOffense.java +++ b/Mage.Sets/src/mage/cards/c/CapitalOffense.java @@ -16,7 +16,9 @@ import mage.game.permanent.Permanent; import mage.target.common.TargetCreaturePermanent; import java.util.List; +import java.util.Locale; import java.util.UUID; +import java.util.stream.Collectors; /** * @author spjspj @@ -43,6 +45,22 @@ public final class CapitalOffense extends CardImpl { public CapitalOffense copy() { return new CapitalOffense(this); } + + @Override + public List getRules() { + return prepareLowerCaseRules(super.getRules()); + } + + @Override + public List getRules(Game game) { + return prepareLowerCaseRules(super.getRules(game)); + } + + private List prepareLowerCaseRules(List rules) { + return rules.stream() + .map(s -> s.toLowerCase(Locale.ENGLISH)) + .collect(Collectors.toList()); + } } enum capitaloffensecount implements DynamicValue { @@ -59,25 +77,24 @@ enum capitaloffensecount implements DynamicValue { if (permanent == null) { return 0; } - int capitals = 0; - List cards = CardRepository.instance.findCards(permanent.getName()); - if (cards == null) { + List cardsInfo = CardRepository.instance.findCards(permanent.getName(), 1); + if (cardsInfo.isEmpty()) { return 0; } - for (CardInfo cardInfo : cards) { - Card dummy = cardInfo != null ? cardInfo.getCard() : null; - if (dummy == null) { - return -1 * capitals; - } - for (String line : dummy.getRules()) { - line = line.replaceAll("(?i)", ""); // Ignoring reminder text in italic - line = line.replaceAll("\\{this\\}", permanent.getName()); - capitals += line.length() - line.replaceAll("[A-Z]", "").length(); - } - return -1 * capitals; + + Card card = cardsInfo.get(0).getCard(); + if (card == null) { + return 0; } - return 0; + + String originalRules = card.getRules(game) + .stream() + .map(r -> r.replaceAll("(?i)", "")) + .map(r -> r.replaceAll("\\{this\\}", permanent.getName())) + .collect(Collectors.joining("; ")); + String nonCapitalRules = originalRules.replaceAll("[A-Z]", ""); + return -1 * (originalRules.length() - nonCapitalRules.length()); } @Override