⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logbook.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "sim\include\stdhdr.h"
#include <tchar.h>
#include <time.h>
#include "logbook.h"
#include "F4find.h"
#include "classtbl.h"
#include "PlayerOp.h"
#include "chandler.h"
#include "uicomms.h"
#include "campmiss.h"
#include "F4Thread.h"
#include "cmpclass.h"
#include "textids.h"
#include "F4Version.h"

#pragma warning(disable : 4244)  // for all the short += short's

class LogBookData LogBook;

#define _USE_REGISTRY_ 1
#define BAD_READ 2

int MissionResult = 0;
extern int LogState;

void EncryptBuffer(uchar startkey,uchar *buffer,long length);
void DecryptBuffer(uchar startkey,uchar *buffer,long length);

extern long gRanksTxt[NUM_RANKS];

LogBookData::LogBookData(void)
{
	Initialize();
}

int LogBookData::Load(void)
{
#if _USE_REGISTRY_
	DWORD type, size;
	HKEY theKey;
	long retval;

	retval = RegOpenKeyEx(HKEY_LOCAL_MACHINE, FALCON_REGISTRY_KEY,
		0, KEY_ALL_ACCESS, &theKey);
	size = _NAME_LEN_;
	retval = RegQueryValueEx(theKey, "PilotName", 0, &type, (LPBYTE)Pilot.Name, &size);
	size = _CALLSIGN_LEN_;
	retval = RegQueryValueEx(theKey, "PilotCallsign", 0, &type, (LPBYTE)Pilot.Callsign, &size);
	RegCloseKey(theKey);

	if(retval != ERROR_SUCCESS)
	{
		MonoPrint(_T("Failed to get registry entries.\n"));
		Initialize();
		return FALSE;
	}

	if( !LoadData(Callsign()) )
	{		
		return FALSE;
	}
	
#else
	Initialize();
	return FALSE;
#endif
	
	return TRUE;
}

LogBookData::~LogBookData(void)
{
	Cleanup();
}

	
void LogBookData::Initialize (void)
{
	char path[MAX_PATH];
	if(gStringMgr)
		_tcscpy(Pilot.Name,gStringMgr->GetString(TXT_JOE_PILOT));
	else
		_tcscpy(Pilot.Name,_T("Joe Pilot"));
	_tcscpy(Pilot.Callsign,_T("Viper"));
	_tcscpy(Pilot.OptionsFile,_T("Default"));
	_tcscpy(Pilot.Password,_T(""));
	EncryptPwd();
	Pilot.Rank = SEC_LT;
	Pilot.AceFactor = 1.0f;
	Pilot.FlightHours = 0.0F;
	memset(&Pilot.Campaign,0,sizeof(CAMP_STATS));
	memset(&Pilot.Dogfight,0,sizeof(DF_STATS));
	memset(Pilot.Medals,0,sizeof(uchar)*NUM_MEDALS);
	Pilot.Picture[0] = 0;
	Pilot.PictureResource = NOFACE;
	Pilot.Patch[0] = 0;
	Pilot.PatchResource = NOPATCH;
	Pilot.Personal[0] = 0;
	Pilot.Squadron[0] = 0;
	Pilot.voice = 0;
	
	SYSTEMTIME systime;
//	_TCHAR buf[COMM_LEN + 1];
//	time_t ltime;
//	struct tm *today;

//	time( &ltime );
//	today = localtime( &ltime );
//	strftime( buf, COMM_LEN, "%x", today);
	// german hack... no time
	GetSystemTime(&systime);
	if (gLangIDNum != F4LANG_ENGLISH)
	{
		_stprintf(Pilot.Commissioned,"%02d.%02d.%02d",systime.wDay,systime.wMonth,systime.wYear%100);
	}
	else
	{
		_stprintf(Pilot.Commissioned,"%02d/%02d/%02d",systime.wMonth,systime.wDay,systime.wYear%100);
	}
	Pilot.CheckSum=0;
	if(gCommsMgr)
	{
		sprintf(path,"%s\\config\\%s.plc",FalconDataDirectory,Pilot.Callsign);
		gCommsMgr->SetStatsFile(path);
	}
}

void LogBookData::Clear (void)
{
	char path[MAX_PATH];
	_stprintf(path,_T("%s\\config\\%s.rul"),FalconDataDirectory,Pilot.Callsign);
	remove(path);
	_stprintf(path,_T("%s\\config\\%s.pop"),FalconDataDirectory,Pilot.Callsign);
	remove(path);
	_stprintf(path,_T("%s\\config\\%s.lbk"),FalconDataDirectory,Pilot.Callsign);
	remove(path);
	_stprintf(path,_T("%s\\config\\%s.plc"),FalconDataDirectory,Pilot.Callsign);
	remove(path);
	Initialize();
	/*
	Pilot.Rank = SEC_LT;
	Pilot.AceFactor = 1.0f;
	Pilot.FlightHours = 0.0F;
	memset(&Pilot.Campaign,0,sizeof(CAMP_STATS));
	memset(&Pilot.Dogfight,0,sizeof(DF_STATS));
	memset(Pilot.Medals,0,sizeof(uchar)*NUM_MEDALS);
	Pilot.Picture[0] = 0;
	Pilot.Patch[0] = 0;
	Pilot.Personal[0] = 0;
	Pilot.voice = 0;
	_TCHAR buf[COMM_LEN];
	_tstrdate(buf);
	_tcscpy(Pilot.Commissioned,buf);
	*/

}

void LogBookData::Cleanup (void)
{
}


int LogBookData::LoadData (_TCHAR *callsign)
{
	DWORD size;
	FILE *fp;
	size_t		success = 0;
	_TCHAR		path[_MAX_PATH];

	ShiAssert(callsign);

	_stprintf(path,_T("%s\\config\\%s.lbk"),FalconDataDirectory,callsign);
	
	fp = _tfopen(path,_T("rb"));
	if(!fp)
	{
		MonoPrint(_T("Couldn't open %s's logbook.\n"),callsign);
		Initialize();
		return FALSE;
	}
	
	fseek(fp,0,SEEK_END);
	size = ftell(fp);
	fseek(fp,0,SEEK_SET);

	if(size != sizeof(LB_PILOT))
	{
		MonoPrint(_T("%s's logbook is old file format.\n"),callsign);
		fclose(fp);
		Initialize();
		return FALSE;
	}

	success = fread(&Pilot, sizeof(LB_PILOT), 1, fp);
	fclose(fp);
	if(success != 1)
	{
		MonoPrint(_T("Failed to read %s's logbook.\n"),callsign);
		Initialize();
		return BAD_READ;
	}

	DecryptBuffer(0x58,(uchar*)&Pilot,sizeof(LB_PILOT));


	if(Pilot.CheckSum) // Somebody changed the data... init
	{
		MonoPrint("Failed checksum");
		Initialize();
		return(FALSE);
	}
	if(gCommsMgr)
	{
		sprintf(path,"%s\\config\\%s.plc",FalconDataDirectory,callsign);
		gCommsMgr->SetStatsFile(path);
	}	

	if(this == &LogBook)
	{
		FalconLocalSession->SetPlayerName(NameWRank());
	 	FalconLocalSession->SetPlayerCallsign(Callsign());
		FalconLocalSession->SetAceFactor(AceFactor());
		FalconLocalSession->SetInitAceFactor(AceFactor());
		FalconLocalSession->SetVoiceID(static_cast<uchar>(Voice()));
		PlayerOptions.LoadOptions ();
		LoadAllRules(Callsign());
		LogState |= LB_LOADED_ONCE;
	}

	return TRUE;
}

int LogBookData::LoadData (LB_PILOT *NewPilot)
{
	if(NewPilot)
	{
		memcpy(&Pilot,NewPilot,sizeof(LB_PILOT));
		if(this == &LogBook)
		{
			FalconLocalSession->SetPlayerName(NameWRank());
	 		FalconLocalSession->SetPlayerCallsign(Callsign());
			FalconLocalSession->SetAceFactor(AceFactor());
			FalconLocalSession->SetInitAceFactor(AceFactor());
			FalconLocalSession->SetVoiceID(static_cast<uchar>(Voice()));
			PlayerOptions.LoadOptions ();
			LoadAllRules(Callsign());
			LogState |= LB_LOADED_ONCE;
		}
		return TRUE;
	}
	return FALSE;
}

int LogBookData::SaveData(void)
{
	FILE		*fp;
	_TCHAR		path[_MAX_PATH];
	
	_stprintf(path,_T("%s\\config\\%s.lbk"),FalconDataDirectory,Pilot.Callsign);

	if((fp = _tfopen(path,_T("wb"))) == NULL)
	{
		MonoPrint(_T("Couldn't save logbook"));
		return FALSE;
	}

	EncryptBuffer(0x58,(uchar*)&Pilot,sizeof(LB_PILOT));
	
	fwrite(&Pilot, sizeof(LB_PILOT), 1, fp);
	fclose(fp);

	DecryptBuffer(0x58,(uchar*)&Pilot,sizeof(LB_PILOT));

	if(gCommsMgr)
	{
		sprintf(path,"%s\\config\\%s.plc",FalconDataDirectory,Pilot.Callsign);
		gCommsMgr->SetStatsFile(path);
	}

#if _USE_REGISTRY_
	DWORD size;
	HKEY theKey;
	long retval;

	retval = RegOpenKeyEx(HKEY_LOCAL_MACHINE, FALCON_REGISTRY_KEY,
		0, KEY_ALL_ACCESS, &theKey);
	size = _NAME_LEN_;
	if(retval == ERROR_SUCCESS)
		retval = RegSetValueEx  (theKey, "PilotName", 0, REG_BINARY, (LPBYTE)Name(), size);	
	size = _CALLSIGN_LEN_;
	if(retval == ERROR_SUCCESS)
		retval = RegSetValueEx  (theKey, "PilotCallsign", 0, REG_BINARY, (LPBYTE)Callsign(), size);	
	RegCloseKey(theKey);
#endif

	if(this == &LogBook)
	{
		FalconLocalSession->SetPlayerName(NameWRank());
	 	FalconLocalSession->SetPlayerCallsign(Callsign());
		FalconLocalSession->SetAceFactor(AceFactor());
		FalconLocalSession->SetInitAceFactor(LogBook.AceFactor());
		FalconLocalSession->SetVoiceID(static_cast<uchar>(Voice()));
	}

	return TRUE;
}





short	LogBookData::TotalKills(void)  
{
	return static_cast<short>(Pilot.Campaign.Kills + Pilot.Dogfight.Kills);
}

short	LogBookData::TotalKilled(void) 
{
	return static_cast<short>(Pilot.Campaign.Killed + Pilot.Dogfight.Killed);
}

//static char XorMask[]="Falcon 4.0 Fun for the whole Family!!!";
//static char YorMask[]="Makes other sims look like shit!";

void LogBookData::Encrypt(void)
{
#if 0 // This has been replaced by a routine with a checksum to make sure the user isn't modifying the data file
	int i;
	char *ptr;

	ptr=(char *)&Pilot;

	for(i=0;i<sizeof(LB_PILOT);i++)
	{
		*ptr ^= XorMask[i % strlen(XorMask)];
		*ptr ^= YorMask[i % strlen(YorMask)];
		ptr++;
	}
#endif
}

static char PwdMask[]="Who needs a password!";
static char PwdMask2[]="Repent, Falcon is coming!";

void LogBookData::EncryptPwd(void)
{
	int i;
	char *ptr;

	ptr=(char *)Pilot.Password;

	for(i=0;i<PASSWORD_LEN;i++)
	{
		*ptr ^= PwdMask[i % strlen(PwdMask)];
		*ptr ^= PwdMask2[i % strlen(PwdMask2)];
		ptr++;
	}
}

int LogBookData::CheckPassword(_TCHAR *Pwd)
{
	//if(Pilot.Password[0] == 0)
		//return TRUE;

	EncryptPwd();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -