📄 logbook.cpp
字号:
if( _tcscmp( Pwd, Pilot.Password) )
{
EncryptPwd();
return FALSE;
}
else
{
EncryptPwd();
return TRUE;
}
}
int LogBookData::SetPassword(_TCHAR *Password)
{
if(_tcslen(Password) <= PASSWORD_LEN)
{
_tcscpy(Pilot.Password,Password);
EncryptPwd();
return TRUE;
}
return FALSE;
}
int LogBookData::GetPassword(_TCHAR *Pwd)
{
if(Pilot.Password[0] == 0)
return FALSE;
EncryptPwd();
_tcscpy( Pwd, Pilot.Password );
EncryptPwd();
return TRUE;
}
_TCHAR nameWrank[MAX_PATH];
_TCHAR *LogBookData::NameWRank(void)
{
if(gStringMgr)
{
_TCHAR *rank = gStringMgr->GetString(gRanksTxt[Rank()]);
_stprintf(nameWrank,"%s %s",rank,Pilot.Name);
return nameWrank;
}
return Name();
}
void LogBookData::UpdateDogfight(short MatchWon, float Hours, short VsHuman ,short Kills, short Killed, short HumanKills, short KilledByHuman )
{
MissionResult = 0;
UpdateFlightHours(Hours);
if(VsHuman)
{
if(MatchWon >= 1)
Pilot.Dogfight.MatchesWonVHum++;
else if(MatchWon <= -1)
Pilot.Dogfight.MatchesLostVHum++;
}
if(MatchWon >= 1)
Pilot.Dogfight.MatchesWon ++;
else if(MatchWon <= -1)
Pilot.Dogfight.MatchesLost++;
if(Kills > 0)
Pilot.Dogfight.Kills += Kills;
if(Killed > 0)
Pilot.Dogfight.Killed += Killed;
if(HumanKills > 0)
Pilot.Dogfight.HumanKills += HumanKills;
if(KilledByHuman > 0)
Pilot.Dogfight.KilledByHuman += KilledByHuman;
SaveData();
}
void LogBookData::UpdateCampaign(CAMP_MISS_STRUCT *MissStats )
{
MissionResult = 0;
UpdateFlightHours(MissStats->FlightHours);
if(MissStats->Flags & CRASH_UNDAMAGED)
{
Pilot.Campaign.TotalScore -= 25;
MissionResult |= CM_CRASH|COURT_MARTIAL;
}
if(MissStats->Flags & EJECT_UNDAMAGED)
{
Pilot.Campaign.TotalScore -= 50;
MissionResult |= CM_EJECT|COURT_MARTIAL;
}
short FrKills = static_cast<short>(MissStats->FriendlyFireKills);
while(FrKills)
{
if(Pilot.Campaign.FriendliesKilled == 0)
{
Pilot.Campaign.TotalScore -= 100;
MissionResult |= CM_FR_FIRE1|COURT_MARTIAL;
}
else if(Pilot.Campaign.FriendliesKilled == 1)
{
Pilot.Campaign.TotalScore -= 200;
MissionResult |= CM_FR_FIRE2|COURT_MARTIAL;
}
else
{
Pilot.Campaign.TotalScore -= 200;
if(MissStats->Flags & FR_HUMAN_KILLED)
{
Pilot.Campaign.TotalScore = 0;
Pilot.Rank = SEC_LT;
MissionResult |= CM_FR_FIRE3|COURT_MARTIAL;
}
else
MissionResult |= CM_FR_FIRE2|COURT_MARTIAL;
}
Pilot.Campaign.FriendliesKilled++;
FrKills--;
}
//calculate new score using complexity, no mission pts if you get court martialed!
if(!(MissionResult & COURT_MARTIAL))
Pilot.Campaign.TotalScore += FloatToInt32(MissStats->Score * MissionComplexity(MissStats) * CampaignDifficulty() *
PlayerOptions.Realism/30.0F + MissStats->FlightHours);
if(Pilot.Campaign.TotalScore < 0)
Pilot.Campaign.TotalScore = 0;
if (!(MissStats->Flags & DONT_SCORE_MISSION))
{
Pilot.Campaign.Missions++;
ShiAssert(MissStats->Score >= 0);
Pilot.Campaign.TotalMissionScore += MissStats->Score;
Pilot.Campaign.TotalScore -= MissStats->WingmenLost * 5;
ShiAssert(MissStats->Kills >= 0);
if(MissStats->Kills > 0)
Pilot.Campaign.Kills += MissStats->Kills;
if(Pilot.Campaign.Kills < 0)
Pilot.Campaign.Kills = 0;
ShiAssert(MissStats->Killed >= 0);
if(MissStats->Killed > 0)
Pilot.Campaign.Killed += MissStats->Killed;
if(Pilot.Campaign.Killed < 0)
Pilot.Campaign.Killed = 0;
ShiAssert(MissStats->HumanKills >= 0);
if(MissStats->HumanKills > 0)
Pilot.Campaign.HumanKills += MissStats->HumanKills;
if(Pilot.Campaign.HumanKills < 0)
Pilot.Campaign.HumanKills = 0;
ShiAssert(MissStats->KilledByHuman >= 0);
if(MissStats->KilledByHuman > 0)
Pilot.Campaign.KilledByHuman += MissStats->KilledByHuman;
if(Pilot.Campaign.KilledByHuman < 0)
Pilot.Campaign.KilledByHuman = 0;
ShiAssert(MissStats->KilledBySelf >= 0);
if(MissStats->KilledBySelf > 0)
Pilot.Campaign.KilledBySelf += MissStats->KilledBySelf;
if(Pilot.Campaign.KilledBySelf < 0)
Pilot.Campaign.KilledBySelf = 0;
ShiAssert(MissStats->GroundUnitsKilled >= 0);
if(MissStats->GroundUnitsKilled > 0)
Pilot.Campaign.AirToGround += MissStats->GroundUnitsKilled;
if(Pilot.Campaign.AirToGround < 0)
Pilot.Campaign.AirToGround = 0;
ShiAssert(MissStats->FeaturesDestroyed >= 0);
if(MissStats->FeaturesDestroyed > 0)
Pilot.Campaign.Static += MissStats->FeaturesDestroyed;
if(Pilot.Campaign.Static < 0)
Pilot.Campaign.Static = 0;
ShiAssert(MissStats->NavalUnitsKilled >= 0);
if( MissStats->NavalUnitsKilled > 0)
Pilot.Campaign.Naval += MissStats->NavalUnitsKilled;
if(Pilot.Campaign.Naval < 0)
Pilot.Campaign.Naval = 0;
if(!(MissionResult & COURT_MARTIAL))
AwardMedals(MissStats);
}
CalcRank();
SaveData();
}
void LogBookData::CalcRank(void)
{
LB_RANK NewRank = SEC_LT;
if((Pilot.Campaign.TotalScore > 3200) && Pilot.Campaign.GamesWon)
{
NewRank = COLONEL;
}
else if( (Pilot.Campaign.TotalScore > 1600) && \
( Pilot.Campaign.GamesWon|| Pilot.Campaign.GamesTied) )
{
NewRank = LT_COL;
}
else if( (Pilot.Campaign.TotalScore > 800) && \
( Pilot.Campaign.GamesWon|| Pilot.Campaign.GamesTied || Pilot.Campaign.GamesLost) )
{
NewRank = MAJOR;
}
else if(Pilot.Campaign.TotalScore > 300)
{
NewRank = CAPTAIN;
}
else if(Pilot.Campaign.TotalScore > 150)
{
NewRank = LEIUTENANT;
}
else
{
NewRank = SEC_LT;
}
if(NewRank > Pilot.Rank )
{
MissionResult |= PROMOTION;
Pilot.Rank = NewRank;
}
}
//returns value from 4 to 6
float LogBookData::MissionComplexity(CAMP_MISS_STRUCT *MissStats)
{
float Duration;
float WeapExpended,ShotsAt,AircrftInPkg;
//determine mission complexity
if(MissStats->FlightHours > 1.5f)
Duration = 1.5f;
else
Duration = MissStats->FlightHours;
if(MissStats->WeaponsExpended > 6)
WeapExpended = 6;
else
WeapExpended = static_cast<float>(MissStats->WeaponsExpended);
if(MissStats->ShotsAtPlayer > 10)
ShotsAt = 10;
else
ShotsAt = static_cast<float>(MissStats->ShotsAtPlayer);
if(MissStats->AircraftInPackage > 8)
AircrftInPkg = 8;
else
AircrftInPkg = static_cast<float>(MissStats->AircraftInPackage);
return (Duration/3.0F + WeapExpended/6.0F + ShotsAt/10.0F + AircrftInPkg/16.0F + 3.0F);
}
//returns value from 16 to 20
float LogBookData::CampaignDifficulty(void)
{
return ( (13.0F - TheCampaign.GroundRatio - TheCampaign.AirRatio -
TheCampaign.AirDefenseRatio - TheCampaign.NavalRatio/4.0F)/39.0F +
(TheCampaign.EnemyAirExp + TheCampaign.EnemyADExp)/12.0F)*5.0F + 15.0F;
}
void LogBookData::AwardMedals(CAMP_MISS_STRUCT *MissStats)
{
if(MissStats->Score >= 3)
{
int MedalPts =0;
if(MissStats->Flags & DESTROYED_PRIMARY)
MedalPts+= 2;
if(MissStats->Flags & LANDED_AIRCRAFT)
MedalPts++;
if(!MissStats->WingmenLost)
MedalPts++;
MedalPts += MissStats->NavalUnitsKilled + MissStats->Kills +
min(10,MissStats->FeaturesDestroyed/2) + min(10,MissStats->GroundUnitsKilled/2);
MedalPts = FloatToInt32(PlayerOptions.Realism * MedalPts * CampaignDifficulty() * MissStats->Score * MissionComplexity(MissStats));
if( (MedalPts > 9600) && (PlayerOptions.Realism > 0.9f) && MissStats->Score >= 4 )
{
MissionResult |= AWARD_MEDAL|MDL_AFCROSS;
Pilot.Medals[AIR_FORCE_CROSS]++;
Pilot.Campaign.TotalScore += 20;
}
else if( (MedalPts > 7800) && (PlayerOptions.Realism > 0.7f))
{
MissionResult |= AWARD_MEDAL|MDL_SILVERSTAR;
Pilot.Medals[SILVER_STAR]++;
Pilot.Campaign.TotalScore += 15;
}
else if(MedalPts > 6000 && (PlayerOptions.Realism > 0.5f))
{
MissionResult |= AWARD_MEDAL|MDL_DIST_FLY;
Pilot.Medals[DIST_FLY_CROSS]++;
Pilot.Campaign.TotalScore += 10;
}
else if(MedalPts > 4800)
{
MissionResult |= AWARD_MEDAL|MDL_AIR_MDL;
Pilot.Medals[AIR_MEDAL]++;
Pilot.Campaign.TotalScore += 5;
}
}
if(MissStats->Killed || MissStats->KilledByHuman || MissStats->KilledBySelf)
{
Pilot.Campaign.ConsecMissions = 0;
}
else
{
if(!PlayerOptions.InvulnerableOn())
Pilot.Campaign.ConsecMissions++;
}
if(Pilot.Campaign.ConsecMissions >= 100)
{
MissionResult |= AWARD_MEDAL|MDL_LONGEVITY;
Pilot.Campaign.ConsecMissions = 0;
Pilot.Medals[LONGEVITY]++;
}
}
void LogBookData::FinishCampaign(short WonLostTied)
{
Pilot.Campaign.TotalScore += 10;
if(WonLostTied > 0)
{
Pilot.Campaign.GamesWon++;
Pilot.Campaign.TotalScore += 10;
Pilot.Medals[KOREA_CAMPAIGN]++;
MissionResult |= AWARD_MEDAL|MDL_KOR_CAMP;
}
else if(WonLostTied < 0)
{
Pilot.Campaign.GamesLost++;
}
else
Pilot.Campaign.GamesTied++;
SaveData();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -