Browse Source

- fixed "get txt" console command
- command "extract" to extract file by name
- command "def2bmp" to convert def into set of frames.

Ivan Savenko 12 years ago
parent
commit
08b2af3ccb
1 changed files with 52 additions and 4 deletions
  1. 52 4
      client/CMT.cpp

+ 52 - 4
client/CMT.cpp

@@ -507,16 +507,21 @@ void processCommand(const std::string &message)
 	else if(message=="get txt")
 	{
         std::cout<<"Command accepted.\t";
-		boost::filesystem::create_directory("Extracted_txts");
+
+		std::string outPath = VCMIDirs::get().localPath() + "/extracted/";
+
 		auto iterator = CResourceHandler::get()->getIterator([](const ResourceID & ident)
 		{
 			return ident.getType() == EResType::TEXT && boost::algorithm::starts_with(ident.getName(), "DATA/");
 		});
 
-		std::string basePath = CResourceHandler::get()->getResourceName(ResourceID("DATA")) + "/Extracted_txts/";
 		while (iterator.hasNext())
 		{
-			std::ofstream file(basePath + iterator->getName() + ".TXT");
+			std::string outName = outPath + iterator->getName();
+
+			boost::filesystem::create_directories(outName.substr(0, outName.find_last_of("/")));
+
+			std::ofstream file(outName + ".TXT");
 			auto text = CResourceHandler::get()->loadData(*iterator);
 
 			file.write((char*)text.first.get(), text.second);
@@ -524,7 +529,7 @@ void processCommand(const std::string &message)
 		}
 
         std::cout << "\rExtracting done :)\n";
-        std::cout << " Extracted files can be found in " << basePath << " directory\n";
+        std::cout << " Extracted files can be found in " << outPath << " directory\n";
 	}
 	else if(cn=="crash")
 	{
@@ -622,6 +627,49 @@ void processCommand(const std::string &message)
 		if(mxname == "pim" && LOCPLINT)
 			LOCPLINT->pim->unlock();
 	}
+	else if(cn == "def2bmp")
+	{
+		std::string URI;
+		readed >> URI;
+		if (CResourceHandler::get()->existsResource(ResourceID("SPRITES/" + URI)))
+		{
+			CDefEssential * cde = CDefHandler::giveDefEss(URI);
+
+			std::string outName = CResourceHandler::get()->getResource(ResourceID("SPRITES/" + URI)).getResourceName();
+			std::string outPath = VCMIDirs::get().localPath() + "/extracted/";
+
+
+			boost::filesystem::create_directories(outPath + outName);
+
+			for (size_t i=0; i<cde->ourImages.size(); i++)
+			{
+				std::string filename = outPath + outName + '/' + boost::lexical_cast<std::string>(i);
+				SDL_SaveBMP(cde->ourImages[i].bitmap, filename.c_str());
+			}
+		}
+		else
+			logGlobal->errorStream() << "File not found!";
+	}
+	else if(cn == "extract")
+	{
+		std::string URI;
+		readed >> URI;
+
+		if (CResourceHandler::get()->existsResource(ResourceID(URI)))
+		{
+			std::string outName = CResourceHandler::get()->getResource(ResourceID(URI)).getResourceName();
+			std::string outPath = VCMIDirs::get().localPath() + "/extracted/";
+			std::string fullPath = outPath + outName;
+
+			auto data = CResourceHandler::get()->loadData(ResourceID(URI));
+
+			boost::filesystem::create_directories(fullPath.substr(0, fullPath.find_last_of("/")));
+			std::ofstream outFile(outPath + outName);
+			outFile.write((char*)data.first.get(), data.second);
+		}
+		else
+			logGlobal->errorStream() << "File not found!";
+	}
 	else if(cn == "setBattleAI")
 	{
 		std::string fname;