Prechádzať zdrojové kódy

Fixed detection of campaign format

Ivan Savenko 2 rokov pred
rodič
commit
b3ca6c8cee
1 zmenil súbory, kde vykonal 4 pridanie a 4 odobranie
  1. 4 4
      lib/mapping/CCampaignHandler.cpp

+ 4 - 4
lib/mapping/CCampaignHandler.cpp

@@ -117,9 +117,8 @@ std::unique_ptr<CCampaign> CCampaignHandler::getCampaign( const std::string & na
 	auto fileStream = CResourceHandler::get(modName)->load(resourceID);
 
 	std::vector<std::vector<ui8>> files = getFile(std::move(fileStream), false);
-	
-	JsonNode jsonCampaign((const char*)files[0].data(), files[0].size());
-	if(jsonCampaign.isNull())
+
+	if (files[0].front() < uint8_t(' ')) // binary format
 	{
 		CMemoryStream stream(files[0].data(), files[0].size());
 		CBinaryReader reader(&stream);
@@ -128,8 +127,9 @@ std::unique_ptr<CCampaign> CCampaignHandler::getCampaign( const std::string & na
 		for(int g = 0; g < ret->header.numberOfScenarios; ++g)
 			ret->scenarios.emplace_back(readScenarioFromMemory(reader, ret->header));
 	}
-	else
+	else // text format (json)
 	{
+		JsonNode jsonCampaign((const char*)files[0].data(), files[0].size());
 		ret->header = readHeaderFromJson(jsonCampaign, resourceID.getName(), modName, encoding);
 		for(auto & scenario : jsonCampaign["scenarios"].Vector())
 			ret->scenarios.emplace_back(readScenarioFromJson(scenario));