void backupSharedSaveFile() { char szBackupName[MAX_PATH]; char szSaveName[MAX_PATH]; D2FogGetSavePath( szSaveName, MAX_PATH-30); strcat(szSaveName, "_LOD_"); strcat(szSaveName, sharedStashFilename); strcat(szSaveName,".sss"); D2FogGetSavePath( szBackupName, MAX_PATH-30); strcat(szBackupName, "_LOD_"); strcat(szBackupName, sharedStashFilename); strcat(szBackupName,".sss.backup"); CopyFile(szSaveName, szBackupName, true); if (separateHardSoftStash) { D2FogGetSavePath( szSaveName, MAX_PATH-30); strcat(szSaveName, "_LOD_HC_"); strcat(szSaveName, sharedStashFilename); strcat(szSaveName,".sss"); D2FogGetSavePath( szBackupName, MAX_PATH-30); strcat(szBackupName, "_LOD_HC_"); strcat(szBackupName, sharedStashFilename); strcat(szBackupName,".sss.backup"); CopyFile(szSaveName, szBackupName, true); } }
void writeSharedSaveFile(char* name, BYTE* data, DWORD size, bool isHardcore) { char szTempName[MAX_PATH]; char szSaveName[MAX_PATH]; //Get temporary savefile name. D2FogGetSavePath( szTempName, MAX_PATH-30); strcat(szTempName, separateHardSoftStash && isHardcore? "_LOD_HC_" : "_LOD_"); strcat(szTempName, sharedStashFilename); strcat(szTempName,".ss~"); log_msg("Shared temporary file for saving : %s\n", szTempName); //Write data in savefile. FILE* customSaveFile = fopen(szTempName, "wb+"); fwrite(data, size, 1, customSaveFile); fclose(customSaveFile); //Get real savefile name. D2FogGetSavePath( szSaveName, MAX_PATH-30); strcat(szSaveName, separateHardSoftStash && isHardcore? "_LOD_HC_" : "_LOD_"); strcat(szSaveName, sharedStashFilename); strcat(szSaveName,".sss"); log_msg("Shared file for saving : %s\n", szSaveName); // if (!MoveFileEx(szTempName, szSaveName, MOVEFILE_WRITE_THROUGH|MOVEFILE_REPLACE_EXISTING)) DeleteFile(szSaveName); if (!MoveFile(szTempName, szSaveName)) log_box("Could not create the shared save file."); }
void writeExtendedSaveFile(char* name, BYTE* data, DWORD size) { char szTempName[MAX_PATH]; char szSaveName[MAX_PATH]; //Get temporary savefile name. D2FogGetSavePath(szTempName, MAX_PATH); strcat(szTempName, name); strcat(szTempName, ".d2~"); log_msg("Extended temporary file for saving : %s\n",szTempName); //Write data in savefile. FILE* customSaveFile = fopen(szTempName, "wb+"); fwrite(data, size, 1, customSaveFile); fclose(customSaveFile); //Get real savefile name. D2FogGetSavePath(szSaveName, MAX_PATH); strcat(szSaveName, name); strcat(szSaveName, ".d2x"); log_msg("Extended file for saving : %s\n",szSaveName); // if (!MoveFileEx(szTempName, szSaveName, MOVEFILE_WRITE_THROUGH|MOVEFILE_REPLACE_EXISTING)) DeleteFile(szSaveName); if (!MoveFile(szTempName, szSaveName)) log_box("Could not create the extended save file."); }
void backupExtendedSaveFile(char* name) { char szBackupName[MAX_PATH]; char szSaveName[MAX_PATH]; D2FogGetSavePath(szSaveName, MAX_PATH); strcat(szSaveName, name); strcat(szSaveName, ".d2x"); D2FogGetSavePath(szBackupName, MAX_PATH); strcat(szBackupName, name); strcat(szBackupName, ".d2x.backup"); CopyFile(szSaveName, szBackupName, true); }
void listAllCubeFormula() { log_msg("\n\n********** Print all cube formula **********\n"); char filename[MAX_PATH]; D2FogGetSavePath(filename, MAX_PATH); strcat(filename, CUBEFORMULA_FILE); FILE* file = fopen(filename, "w"); if (!file) { log_msg("Failed to open save file.\n"); return; } int nbLines = D2GetNbCubeMainBIN(); log_msg("nbLines : %d\n",nbLines); WCHAR buf[512]; // Print BOM UTF-16 //buf[0] = 0xFEFF; //buf[1] = NULL; //write(buf, 2, 2, file); // Print BOM UTF-8 //printf(file, ""); int len = 0; int nbCubeReceipt = 0; for (int i=0; i<nbLines; i++) { DWORD res = 1; len = 0; buf[len] = NULL; res = print(D2GetCubeMainBIN(i), buf, &len, 512); //wcstombs(bufa, buf, 1024); if (res) { nbCubeReceipt++; fwprintf(file, L"%3u: %s\n", i, buf); } } fclose(file); log_msg("\n********** Printing over **********\n\n"); }
BYTE * readExtendedSaveFile(char* name, DWORD* size)//WORKS { char filename[512]; BYTE* data; d2_assert(!name, "Bad file name (NULL)", __FILE__, __LINE__); D2FogGetSavePath( filename, 512-5); strncat(filename, name, 512 - strlen(filename) - 5); strcat(filename, ".d2x"); log_msg("Extended file to read : %s\n",filename); FILE* file = fopen(filename, "rb"); if (file) { fseek(file, 0, SEEK_END); *size = ftell(file); fseek(file, 0, SEEK_SET); data = (BYTE*)D2FogMemAlloc(*size,__FILE__,__LINE__,0); DWORD nbRead = fread(data, 1, *size, file); fclose(file); d2_assert(nbRead != *size , "nbRead from extented save file != size", __FILE__, __LINE__); } else { log_msg("Can't open extented save file in mode \"rb\" (is not an error if it's a new player)\n"); DWORD maxSize = 100; data = (BYTE*)D2FogMemAlloc(maxSize,__FILE__,__LINE__,0); *size = 14; *((DWORD*)&data[0]) = FILE_EXTENDED; //"CSTM" *((WORD *)&data[4]) = FILE_VERSION; *((DWORD*)&data[6]) = 0;// not used *((DWORD*)&data[10]) = 0;// number of stash TCustomDll* currentDll = customDlls; while (currentDll) { currentDll->initExtendedSaveFile(&data, &maxSize, size); currentDll=currentDll->nextDll; } } return data; }
//6FC8CE8A |. E8 A16BFAFF CALL D2Game.6FC33A30 //$+C0 > 1F 00 00 00 03 00 00 06 ..... // 28 0010 1000 BYTE* readSharedSaveFile(char* name, DWORD* size) { char filename[512]; BYTE* data=NULL; BYTE isHardCore=0; FILE* file=NULL; if (separateHardSoftStash)//Get hardcore flag { D2FogGetSavePath( filename, 512-strlen(name)-5); strcat(filename,name); strcat(filename,".d2s"); log_msg("Normal file to read if it's hardcore character : %s\n",filename); file = fopen(filename, "rb"); if (file) { fseek(file, 0x24, SEEK_SET); DWORD nbRead = fread(&isHardCore, 1, 1, file); isHardCore = (nbRead==1)? ((isHardCore & 4) == 4) : 0; fclose(file); file=NULL; } log_msg("%s is a HardCore character = %d\n",name,isHardCore); } if (active_sharedStash) { D2FogGetSavePath( filename, 512-strlen("_LOD_HC_SharedStashSave")-5); strcat(filename,isHardCore? "_LOD_HC_" : "_LOD_"); strcat(filename, sharedStashFilename); strcat(filename,".sss"); log_msg("Shared file to read : %s\n",filename); file = fopen(filename, "rb"); } if (file) { fseek(file, 0, SEEK_END); *size = ftell(file); fseek(file, 0, SEEK_SET); data = (BYTE*)D2FogMemAlloc(*size,__FILE__,__LINE__,0); DWORD nbRead = fread(data, 1, *size, file); fclose(file); d2_assert(nbRead != *size , "nbRead from shared save file != size", __FILE__, __LINE__); } else { log_msg("Can't open shared save file in mode \"rb\" (is not an error if it's the first start of the mod)\n"); *size = 14; DWORD maxSize = 100; data = (BYTE*)D2FogMemAlloc(maxSize,__FILE__,__LINE__,0); *((DWORD *)&data[0]) = FILE_SHAREDSTASH; *((WORD *)&data[4]) = FILE_VERSION; *((DWORD *)&data[6]) = 0; *((DWORD *)&data[10]) = 0;// number of stash TCustomDll* currentDll = customDlls; while (currentDll) { currentDll->initSharedSaveFile(&data, &maxSize, size); currentDll=currentDll->nextDll; } } return data; }