dftry pseudo-tool, dfhack can recognize 40d again, but the old API class isn't there at all. bees and wax.
							parent
							
								
									de9400d5e8
								
							
						
					
					
						commit
						4a83f07bdd
					
				| @ -0,0 +1,133 @@ | ||||
| #include <iostream> | ||||
| #include <fstream> | ||||
| #include <strstream> | ||||
| #include <DFHack.h> | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| bool getNumber (string prompt, int & output, int def, bool pdef = true) | ||||
| { | ||||
|     cout << prompt; | ||||
|     if(pdef) | ||||
|         cout << ", default=" << def << endl; | ||||
|     while (1) | ||||
|     { | ||||
|         string select; | ||||
|         cout << ">>"; | ||||
|         std::getline(cin, select); | ||||
|         if(select.empty()) | ||||
|         { | ||||
|             output = def; | ||||
|             break; | ||||
|         } | ||||
|         else if( sscanf(select.c_str(), "%d", &output) == 1 ) | ||||
|         { | ||||
|             break; | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             continue; | ||||
|         } | ||||
|     } | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| bool splitvector(const vector<uint64_t> & in, vector<uint64_t> & out1, vector<uint64_t> & out2) | ||||
| { | ||||
|     size_t length = in.size(); | ||||
|     if(length > 1) | ||||
|     { | ||||
|         size_t split = length / 2; | ||||
|         out1.clear(); | ||||
|         out2.clear(); | ||||
|         out1.insert(out1.begin(),in.begin(),in.begin() + split); | ||||
|         out2.insert(out2.begin(),in.begin() + split,in.end()); | ||||
|         return true; | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
| void printvector (const vector<uint64_t> &in) | ||||
| { | ||||
|     cout << "[" << endl; | ||||
|     for(int i = 0; i < in.size(); i++) | ||||
|     { | ||||
|         cout << hex << in[i] << endl; | ||||
|     } | ||||
|     cout << "]" << endl; | ||||
| } | ||||
| 
 | ||||
| bool tryvals (DFHack::Context * DF, const vector<uint64_t> &in, uint8_t current, uint8_t testing) | ||||
| { | ||||
|     DF->Suspend(); | ||||
|     DFHack::Process * p = DF->getProcess(); | ||||
|     for(int i = 0; i < in.size(); i++) | ||||
|     { | ||||
|         p->writeByte(in[i],testing); | ||||
|     } | ||||
|     DF->Resume(); | ||||
|     int result; | ||||
|     while (!getNumber("Is the change good? 0 for no, positive for yes.",result,0)); | ||||
|     DF->Suspend(); | ||||
|     for(int i = 0; i < in.size(); i++) | ||||
|     { | ||||
|         p->writeByte(in[i],current); | ||||
|     } | ||||
|     DF->Resume(); | ||||
|     if(result) | ||||
|         return true; | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
| bool dotry (DFHack::Context * DF, const vector<uint64_t> &in, uint8_t current, uint8_t testing) | ||||
| { | ||||
|     vector <uint64_t> a, b; | ||||
|     bool found = false; | ||||
|     if(!tryvals(DF,in,current,testing)) | ||||
|         return false; | ||||
|     if(splitvector(in, a,b)) | ||||
|     { | ||||
|         if(dotry(DF, a, current, testing)) | ||||
|             return true; | ||||
|         if(dotry(DF, b, current, testing)) | ||||
|             return true; | ||||
|         return false; | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
| int main() | ||||
| { | ||||
|     vector <uint64_t> addresses; | ||||
|     vector <uint64_t> a1; | ||||
|     vector <uint64_t> a2; | ||||
|     vector <uint8_t> values; | ||||
|     string line; | ||||
| 
 | ||||
|     DFHack::ContextManager CM("Memory.xml"); | ||||
|     DFHack::Context * DF = CM.getSingleContext(); | ||||
|     if(!DF) | ||||
|         return 1; | ||||
|     DF->Resume(); | ||||
| 
 | ||||
|     ifstream fin("siege.txt"); | ||||
|     if(!fin.is_open()) | ||||
|         return 1; | ||||
|     do | ||||
|     { | ||||
|         getline(fin,line); | ||||
|         stringstream input (line); | ||||
|         input << hex; | ||||
|         uint64_t value; | ||||
|         input >> value; | ||||
|         if(value) | ||||
|         { | ||||
|             cout << hex << value << endl; | ||||
|             addresses.push_back(value); | ||||
|         } | ||||
|     } while (!fin.eof()); | ||||
|     int val_current,val_testing; | ||||
|     while (!getNumber("Insert current value",val_current,1)); | ||||
|     while (!getNumber("Insert testing value",val_testing,0)); | ||||
|     dotry(DF, addresses,val_current,val_testing); | ||||
|     return 0; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue