瀏覽代碼

Fix list of treasures getting overwriteen leading to weird bugs

... such as having Grail in crypts or getting relics as starting
artifact
Ivan Savenko 2 年之前
父節點
當前提交
881c434833
共有 1 個文件被更改,包括 28 次插入27 次删除
  1. 28 27
      lib/CArtHandler.cpp

+ 28 - 27
lib/CArtHandler.cpp

@@ -740,35 +740,36 @@ void CArtHandler::erasePickedArt(const ArtifactID & id)
 {
 	CArtifact *art = objects[id];
 
-	if(!(art->aClass & CArtifact::ART_SPECIAL))
-	{
-		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);
-
-		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());
-
+	std::vector<CArtifact*> * artifactList = nullptr;
+	switch(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;
+	}
+
+	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<CArtifact*> &listToBeFilled, CArtifact::EartClass artifactClass )