/*================================================================= File created by Yohann NICOLAS. Add an extra save file for each characters. =================================================================*/ /* #include "common.h" #include #define BUFFER_SIZE 0x4000 #define FILE_VERSION 0x3130 //"01" #define FILE_SAVETYPE 0x544E4C43 //"CLNT" BYTE * openClientSaveFile(char* name, DWORD* size) { 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, ".clt"); log_msg("Client 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 client save file != size", __FILE__, __LINE__); } else { log_msg("Can't open client save file in mode \"rb\" (is not an error if it's a new player)\n"); *size = 6; data = (BYTE*)D2FogMemAlloc(*size,__FILE__,__LINE__,0); *((DWORD*)&data[0]) = FILE_SAVETYPE; //"CSTM" *((WORD *)&data[4]) = FILE_VERSION; } return data; } DWORD loadClientSaveFile() { Unit* ptChar = D2GetClientPlayer(); DWORD size=0; log_msg("Load client file\n"); if (!ptChar || !PCPlayerData) return 0; BYTE* data = openClientSaveFile(PCPlayerData->name,&size); if (!data) return 0; DWORD curSize = 0; log_msg("Load client file.\n"); if (*(DWORD*)&data[curSize] != FILE_SAVETYPE) { log_msg("loadClientSaveFile -> bad header\n"); D2FogMemDeAlloc(data,__FILE__,__LINE__,0); return 9; } curSize += 4; if (*(WORD *)&data[curSize] != FILE_VERSION) { log_msg("loadClientSaveFile -> bad file version\n"); D2FogMemDeAlloc(data,__FILE__,__LINE__,0); return 9; } curSize += 2; D2FogMemDeAlloc(data,__FILE__,__LINE__,0); return 0; } DWORD saveClientSaveFile() { DWORD curSize = 0; BYTE data[BUFFER_SIZE]; char szTempName[MAX_PATH]; char szSaveName[MAX_PATH]; FILE* customSaveFile; Unit* ptChar = D2GetClientPlayer(); D2FogGetSavePath( (char*)data, BUFFER_SIZE); sprintf( szTempName, "%s%s.cl~", data, PCPlayerData->name ); log_msg("Client tmp file for saving : %s\n",szTempName); customSaveFile = fopen(szTempName, "wb+"); *(DWORD *)&data[curSize] = FILE_SAVETYPE; curSize += 4; *(WORD *)&data[curSize] = FILE_VERSION; curSize += 2; fwrite(data, curSize, 1, customSaveFile); fclose(customSaveFile); D2FogGetSavePath( (char*)data, BUFFER_SIZE); sprintf( szSaveName, "%s%s.clt", data, PCPlayerData->name ); log_msg("Client save 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 client save file."); return 1; } /*================================= END OF FILE =================================*/