From ba794c2b600565edd541a996b8e373d5d57441c6 Mon Sep 17 00:00:00 2001 From: BruebachL <44814898+BruebachL@users.noreply.github.com> Date: Sun, 24 Aug 2025 05:34:41 +0200 Subject: [PATCH] Add a guard in case the printing info is empty for a related card. (#6087) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Took 4 hours 19 minutes Co-authored-by: Lukas BrĂ¼bach --- cockatrice/src/game/cards/card_database.cpp | 15 ++++++++++++++- cockatrice/src/game/player/player.cpp | 13 ++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/cockatrice/src/game/cards/card_database.cpp b/cockatrice/src/game/cards/card_database.cpp index f88cb497a..e32519de1 100644 --- a/cockatrice/src/game/cards/card_database.cpp +++ b/cockatrice/src/game/cards/card_database.cpp @@ -460,8 +460,21 @@ bool CardDatabase::isPreferredPrinting(const CardRef &cardRef) const ExactCard CardDatabase::getCardFromSameSet(const QString &cardName, const PrintingInfo &otherPrinting) const { + // The source card does not have a printing defined, which means we can't get a card from the same set. + if (otherPrinting == PrintingInfo()) { + return getCard({cardName}); + } + + // The source card does have a printing defined, which means we can attempt to get a card from the same set. PrintingInfo relatedPrinting = getSpecificPrinting(cardName, otherPrinting.getSet()->getCorrectedShortName(), ""); - return ExactCard(guessCard({cardName}).getCardPtr(), relatedPrinting); + ExactCard relatedCard = ExactCard(guessCard({cardName}).getCardPtr(), relatedPrinting); + + // We didn't find a card from the same set, just try to find any card with the same name. + if (!relatedCard) { + return getCard({cardName}); + } + + return relatedCard; } void CardDatabase::refreshCachedReverseRelatedCards() diff --git a/cockatrice/src/game/player/player.cpp b/cockatrice/src/game/player/player.cpp index ccdf3e68f..24075c3c1 100644 --- a/cockatrice/src/game/player/player.cpp +++ b/cockatrice/src/game/player/player.cpp @@ -1899,6 +1899,11 @@ void Player::actCreateRelatedCard() if (createRelatedFromRelation(sourceCard, cardRelation) && cardRelation->getCanCreateAnother()) { ExactCard relatedCard = CardDatabaseManager::getInstance()->getCardFromSameSet( cardRelation->getName(), sourceCard->getCard().getPrinting()); + + if (!relatedCard) { + return; + } + setLastToken(relatedCard.getCardPtr()); } } @@ -2064,6 +2069,10 @@ void Player::createCard(const CardItem *sourceCard, ExactCard relatedCard = CardDatabaseManager::getInstance()->getCardFromSameSet(cardInfo->getName(), sourceCard->getCard().getPrinting()); + if (!relatedCard) { + return; + } + switch (attachType) { case CardRelation::DoesNotAttach: cmd.set_target_zone("table"); @@ -4169,9 +4178,7 @@ void Player::addRelatedCardActions(const CardItem *card, QMenu *cardMenu) for (const CardRelation *cardRelation : relatedCards) { ExactCard relatedCard = CardDatabaseManager::getInstance()->getCardFromSameSet(cardRelation->getName(), card->getCard().getPrinting()); - if (!relatedCard) { - relatedCard = CardDatabaseManager::getInstance()->getCard({cardRelation->getName()}); - } + if (!relatedCard) { continue; }