1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +02:00

Fix list of treasures getting overwriteen leading to weird bugs

... such as having Grail in crypts or getting relics as starting
artifact
This commit is contained in:
Ivan Savenko
2023-04-27 23:40:56 +03:00
parent fb739e7186
commit 881c434833

View File

@@ -740,35 +740,36 @@ void CArtHandler::erasePickedArt(const ArtifactID & id)
{ {
CArtifact *art = objects[id]; CArtifact *art = objects[id];
if(!(art->aClass & CArtifact::ART_SPECIAL)) std::vector<CArtifact*> * artifactList = nullptr;
{
auto & artifactList = treasures;
switch(art->aClass) switch(art->aClass)
{ {
case CArtifact::ART_TREASURE:
artifactList = &treasures;
break;
case CArtifact::ART_MINOR: case CArtifact::ART_MINOR:
artifactList = minors; artifactList = &minors;
break; break;
case CArtifact::ART_MAJOR: case CArtifact::ART_MAJOR:
artifactList = majors; artifactList = &majors;
break; break;
case CArtifact::ART_RELIC: case CArtifact::ART_RELIC:
artifactList = relics; artifactList = &relics;
break; break;
default:
logMod->warn("Problem: cannot find list for artifact %s, strange class. (special?)", art->getNameTranslated());
return;
} }
if(artifactList.empty())
fillList(artifactList, art->aClass);
auto itr = vstd::find(artifactList, art); if(artifactList->empty())
if(itr != artifactList.end()) fillList(*artifactList, art->aClass);
auto itr = vstd::find(*artifactList, art);
if(itr != artifactList->end())
{ {
artifactList.erase(itr); artifactList->erase(itr);
} }
else else
logMod->warn("Problem: cannot erase artifact %s from list, it was not present", art->getNameTranslated()); logMod->warn("Problem: cannot erase artifact %s from list, it was not present", art->getNameTranslated());
}
else
logMod->warn("Problem: cannot find list for artifact %s, strange class. (special?)", art->getNameTranslated());
} }
void CArtHandler::fillList( std::vector<CArtifact*> &listToBeFilled, CArtifact::EartClass artifactClass ) void CArtHandler::fillList( std::vector<CArtifact*> &listToBeFilled, CArtifact::EartClass artifactClass )