From 881c4348332a150e6f0b6188f3fd786e545493c9 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Thu, 27 Apr 2023 23:40:56 +0300 Subject: [PATCH] Fix list of treasures getting overwriteen leading to weird bugs ... such as having Grail in crypts or getting relics as starting artifact --- lib/CArtHandler.cpp | 49 +++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/lib/CArtHandler.cpp b/lib/CArtHandler.cpp index 3ae91e43b..448ea90b1 100644 --- a/lib/CArtHandler.cpp +++ b/lib/CArtHandler.cpp @@ -740,35 +740,36 @@ void CArtHandler::erasePickedArt(const ArtifactID & id) { CArtifact *art = objects[id]; - if(!(art->aClass & CArtifact::ART_SPECIAL)) + std::vector * artifactList = nullptr; + switch(art->aClass) { - auto & artifactList = treasures; - switch(art->aClass) - { - case CArtifact::ART_MINOR: - artifactList = minors; - break; - case CArtifact::ART_MAJOR: - artifactList = majors; - break; - case CArtifact::ART_RELIC: - artifactList = relics; - break; - } - if(artifactList.empty()) - fillList(artifactList, art->aClass); + case CArtifact::ART_TREASURE: + artifactList = &treasures; + break; + case CArtifact::ART_MINOR: + artifactList = &minors; + break; + case CArtifact::ART_MAJOR: + artifactList = &majors; + break; + case CArtifact::ART_RELIC: + artifactList = &relics; + break; + default: + logMod->warn("Problem: cannot find list for artifact %s, strange class. (special?)", art->getNameTranslated()); + return; + } - auto itr = vstd::find(artifactList, art); - if(itr != artifactList.end()) - { - artifactList.erase(itr); - } - else - logMod->warn("Problem: cannot erase artifact %s from list, it was not present", art->getNameTranslated()); + if(artifactList->empty()) + fillList(*artifactList, art->aClass); + auto itr = vstd::find(*artifactList, art); + if(itr != artifactList->end()) + { + artifactList->erase(itr); } else - logMod->warn("Problem: cannot find list for artifact %s, strange class. (special?)", art->getNameTranslated()); + logMod->warn("Problem: cannot erase artifact %s from list, it was not present", art->getNameTranslated()); } void CArtHandler::fillList( std::vector &listToBeFilled, CArtifact::EartClass artifactClass )