📄 logbook.cpp
字号:
#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( <ime );
// today = localtime( <ime );
// 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 + -