예제 #1
0
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);
	}
}
예제 #2
0
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.");
}
예제 #3
0
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.");
}
예제 #4
0
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);
}
예제 #5
0
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");
}
예제 #6
0
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;
}
예제 #7
0
//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;
}