mirror of
https://git.rip/DMCA_FUCKER/re3.git
synced 2024-12-23 17:20:00 +00:00
Merge pull request #686 from erorcun/miami
Stats(except displaying) and PlayerInfo done, Frontend, marker fix
This commit is contained in:
commit
07038ce88e
|
@ -2756,7 +2756,6 @@ cAudioManager::ProcessPlane(cVehicleParams *params)
|
||||||
ProcessCesna(params);
|
ProcessCesna(params);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
debug("Plane Model Id is %d\n, ", params->m_pVehicle->GetModelIndex());
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,8 @@ enum eRadioStation
|
||||||
EMOTION,
|
EMOTION,
|
||||||
WAVE,
|
WAVE,
|
||||||
USERTRACK,
|
USERTRACK,
|
||||||
POLICE_RADIO,
|
NUM_RADIOS = 10,
|
||||||
|
POLICE_RADIO = 10,
|
||||||
//TAXI_RADIO,
|
//TAXI_RADIO,
|
||||||
RADIO_OFF,
|
RADIO_OFF,
|
||||||
};
|
};
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "Particle.h"
|
#include "Particle.h"
|
||||||
#include "ColStore.h"
|
#include "ColStore.h"
|
||||||
#include "Automobile.h"
|
#include "Automobile.h"
|
||||||
|
#include "MBlur.h"
|
||||||
|
|
||||||
uint8 CGameLogic::ActivePlayers;
|
uint8 CGameLogic::ActivePlayers;
|
||||||
uint8 CGameLogic::ShortCutState;
|
uint8 CGameLogic::ShortCutState;
|
||||||
|
@ -343,7 +344,10 @@ CGameLogic::RestorePlayerStuffDuringResurrection(CPlayerPed *pPlayerPed, CVector
|
||||||
pPlayerPed->bIsVisible = true;
|
pPlayerPed->bIsVisible = true;
|
||||||
pPlayerPed->m_bloodyFootprintCountOrDeathTime = 0;
|
pPlayerPed->m_bloodyFootprintCountOrDeathTime = 0;
|
||||||
pPlayerPed->bDoBloodyFootprints = false;
|
pPlayerPed->bDoBloodyFootprints = false;
|
||||||
//TODO(MIAMI): clear drunk stuff
|
pPlayerPed->m_nDrunkenness = 0;
|
||||||
|
pPlayerPed->m_nFadeDrunkenness = 0;
|
||||||
|
CMBlur::ClearDrunkBlur();
|
||||||
|
pPlayerPed->m_nDrunkCountdown = 0;
|
||||||
pPlayerPed->ClearAdrenaline();
|
pPlayerPed->ClearAdrenaline();
|
||||||
pPlayerPed->m_fCurrentStamina = pPlayerPed->m_fMaxStamina;
|
pPlayerPed->m_fCurrentStamina = pPlayerPed->m_fMaxStamina;
|
||||||
if (pPlayerPed->m_pFire)
|
if (pPlayerPed->m_pFire)
|
||||||
|
|
|
@ -1806,7 +1806,7 @@ void CMissionCleanup::Process()
|
||||||
// TODO(MIAMI)
|
// TODO(MIAMI)
|
||||||
//CSpecialFX::bLiftCam = false;
|
//CSpecialFX::bLiftCam = false;
|
||||||
//CSpecialFX::bVideoCam = false;
|
//CSpecialFX::bVideoCam = false;
|
||||||
//CTimeCycle::StopExtraColour(0);
|
CTimeCycle::StopExtraColour(0);
|
||||||
for (int i = 0; i < MISSION_AUDIO_SLOTS; i++)
|
for (int i = 0; i < MISSION_AUDIO_SLOTS; i++)
|
||||||
DMAudio.ClearMissionAudio(i);
|
DMAudio.ClearMissionAudio(i);
|
||||||
CWeather::ReleaseWeather();
|
CWeather::ReleaseWeather();
|
||||||
|
@ -1822,8 +1822,11 @@ void CMissionCleanup::Process()
|
||||||
CWorld::Players[0].m_pPed->m_pWanted->m_bIgnoredByCops = false;
|
CWorld::Players[0].m_pPed->m_pWanted->m_bIgnoredByCops = false;
|
||||||
CWorld::Players[0].m_pPed->m_pWanted->m_bIgnoredByEveryone = false;
|
CWorld::Players[0].m_pPed->m_pWanted->m_bIgnoredByEveryone = false;
|
||||||
CWorld::Players[0].MakePlayerSafe(false);
|
CWorld::Players[0].MakePlayerSafe(false);
|
||||||
//TODO(MIAMI): drunkenness, enable drive by
|
CWorld::Players[0].m_pPed->m_nFadeDrunkenness = 1;
|
||||||
//DMAudio::ShutUpPlayerTalking(0);
|
CWorld::Players[0].m_pPed->m_nDrunkCountdown = 0;
|
||||||
|
// CPad::GetPad(0)->SetDrunkInputDelay(0); // TODO(Miami)
|
||||||
|
CWorld::Players[0].m_bDriveByAllowed = true;
|
||||||
|
// DMAudio::ShutUpPlayerTalking(0); // TODO(Miami)
|
||||||
CVehicle::bDisableRemoteDetonation = false;
|
CVehicle::bDisableRemoteDetonation = false;
|
||||||
CVehicle::bDisableRemoteDetonationOnContact = false;
|
CVehicle::bDisableRemoteDetonationOnContact = false;
|
||||||
CGameLogic::ClearShortCut();
|
CGameLogic::ClearShortCut();
|
||||||
|
@ -5353,7 +5356,7 @@ int8 CRunningScript::ProcessCommands300To399(int32 command)
|
||||||
if (pos.z <= MAP_Z_LOW_LIMIT)
|
if (pos.z <= MAP_Z_LOW_LIMIT)
|
||||||
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);
|
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);
|
||||||
CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp));
|
CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp));
|
||||||
int handle = CRadar::SetCoordBlip(BLIP_COORD, pos, 2, BLIP_DISPLAY_BOTH);
|
int handle = CRadar::SetCoordBlip(BLIP_CONTACT_POINT, pos, 2, BLIP_DISPLAY_BOTH);
|
||||||
CRadar::ChangeBlipScale(handle, 3);
|
CRadar::ChangeBlipScale(handle, 3);
|
||||||
ScriptParams[0] = handle;
|
ScriptParams[0] = handle;
|
||||||
StoreParameters(&m_nIp, 1);
|
StoreParameters(&m_nIp, 1);
|
||||||
|
@ -9792,7 +9795,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
|
||||||
CVector pos = *(CVector*)&ScriptParams[0];
|
CVector pos = *(CVector*)&ScriptParams[0];
|
||||||
if (pos.z <= MAP_Z_LOW_LIMIT)
|
if (pos.z <= MAP_Z_LOW_LIMIT)
|
||||||
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);
|
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);
|
||||||
C3dMarkers::PlaceMarkerSet((uintptr)this + m_nIp, 4, pos, *(float*)&ScriptParams[3],
|
C3dMarkers::PlaceMarkerSet((uintptr)this + m_nIp, MARKERTYPE_CYLINDER, pos, *(float*)&ScriptParams[3],
|
||||||
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A,
|
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A,
|
||||||
SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
|
SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -12722,14 +12725,20 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
|
||||||
case COMMAND_GET_WHEELIE_STATS:
|
case COMMAND_GET_WHEELIE_STATS:
|
||||||
{
|
{
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
static bool bShowed = false;
|
CPlayerInfo* pPlayerInfo = &CWorld::Players[ScriptParams[0]];
|
||||||
if (!bShowed) {
|
ScriptParams[0] = pPlayerInfo->m_nLastTimeCarSpentOnTwoWheels;
|
||||||
debug("GET_WHEELIE_STATS not implemented\n");
|
ScriptParams[1] = *(int*)&pPlayerInfo->m_nLastDistanceCarTravelledOnTwoWheels;
|
||||||
bShowed = true;
|
ScriptParams[2] = pPlayerInfo->m_nLastTimeSpentOnWheelie;
|
||||||
}
|
ScriptParams[3] = *(int*)&pPlayerInfo->m_nLastDistanceTravelledOnWheelie;
|
||||||
for (int i = 0; i < 6; i++)
|
ScriptParams[4] = pPlayerInfo->m_nLastTimeSpentOnStoppie;
|
||||||
ScriptParams[i] = 0;
|
ScriptParams[5] = *(int*)&pPlayerInfo->m_nLastDistanceTravelledOnStoppie;
|
||||||
StoreParameters(&m_nIp, 6);
|
StoreParameters(&m_nIp, 6);
|
||||||
|
pPlayerInfo->m_nLastTimeCarSpentOnTwoWheels = 0;
|
||||||
|
pPlayerInfo->m_nLastDistanceCarTravelledOnTwoWheels = 0.0f;
|
||||||
|
pPlayerInfo->m_nLastTimeSpentOnWheelie = 0;
|
||||||
|
pPlayerInfo->m_nLastDistanceTravelledOnWheelie = 0.0f;
|
||||||
|
pPlayerInfo->m_nLastTimeSpentOnStoppie = 0;
|
||||||
|
pPlayerInfo->m_nLastDistanceTravelledOnStoppie = 0.0f;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
//case COMMAND_DISARM_CHAR:
|
//case COMMAND_DISARM_CHAR:
|
||||||
|
@ -13008,11 +13017,11 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
|
||||||
//case COMMAND_IS_MISSION_AUDIO_LOADING:
|
//case COMMAND_IS_MISSION_AUDIO_LOADING:
|
||||||
case COMMAND_ADD_MONEY_SPENT_ON_WEAPONS:
|
case COMMAND_ADD_MONEY_SPENT_ON_WEAPONS:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
debug("ADD_MONEY_SPENT_ON_WEAPON not implemented\n"); // TODO(MIAMI)
|
CStats::MoneySpentOnWeapons(ScriptParams[0]);
|
||||||
return 0;
|
return 0;
|
||||||
case COMMAND_ADD_MONEY_SPENT_ON_PROPERTY:
|
case COMMAND_ADD_MONEY_SPENT_ON_PROPERTY:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
debug("ADD_MONEY_SPENT_ON_PROPERTY not implemented\n"); // TODO(MIAMI)
|
CStats::MoneySpentOnProperty(ScriptParams[0]);
|
||||||
return 0;
|
return 0;
|
||||||
//case COMMAND_ADD_MONEY_SPENT_ON_AUTO_PAINTING:
|
//case COMMAND_ADD_MONEY_SPENT_ON_AUTO_PAINTING:
|
||||||
case COMMAND_SET_CHAR_ANSWERING_MOBILE:
|
case COMMAND_SET_CHAR_ANSWERING_MOBILE:
|
||||||
|
@ -13041,21 +13050,21 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
|
||||||
//case COMMAND_ADD_LOAN_SHARK_VISITS:
|
//case COMMAND_ADD_LOAN_SHARK_VISITS:
|
||||||
case COMMAND_ADD_STORES_KNOCKED_OFF:
|
case COMMAND_ADD_STORES_KNOCKED_OFF:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
debug("ADD_STORES_KNOCKED_OFF not implemented\n"); // TODO(MIAMI)
|
CStats::NumOfStoresKnockedOff(ScriptParams[0]);
|
||||||
return 0;
|
return 0;
|
||||||
//case COMMAND_ADD_MOVIE_STUNTS:
|
//case COMMAND_ADD_MOVIE_STUNTS:
|
||||||
case COMMAND_ADD_NUMBER_OF_ASSASSINATIONS:
|
case COMMAND_ADD_NUMBER_OF_ASSASSINATIONS:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
debug("ADD_NUMBER_OF_ASSASSINATIONS not implemented\n"); // TODO(MIAMI)
|
CStats::NumOfAssassinations(ScriptParams[0]);
|
||||||
return 0;
|
return 0;
|
||||||
case COMMAND_ADD_PIZZAS_DELIVERED:
|
case COMMAND_ADD_PIZZAS_DELIVERED:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
debug("ADD_PIZZAS_DELIVERED not implemented\n"); // TODO(MIAMI)
|
CStats::NumOfPizzasDelivered(ScriptParams[0]);
|
||||||
return 0;
|
return 0;
|
||||||
//case COMMAND_ADD_GARBAGE_PICKUPS:
|
//case COMMAND_ADD_GARBAGE_PICKUPS:
|
||||||
case COMMAND_ADD_ICE_CREAMS_SOLD:
|
case COMMAND_ADD_ICE_CREAMS_SOLD:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
debug("ADD_ICE_CREAMS_SOLD not implemented\n"); // TODO(MIAMI)
|
CStats::NumOfIceCreamSold(ScriptParams[0]);
|
||||||
return 0;
|
return 0;
|
||||||
//case COMMAND_SET_TOP_SHOOTING_RANGE_SCORE:
|
//case COMMAND_SET_TOP_SHOOTING_RANGE_SCORE:
|
||||||
//case COMMAND_ADD_SHOOTING_RANGE_RANK:
|
//case COMMAND_ADD_SHOOTING_RANGE_RANK:
|
||||||
|
@ -13137,15 +13146,15 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
|
||||||
}
|
}
|
||||||
case COMMAND_SET_PROPERTY_AS_OWNED:
|
case COMMAND_SET_PROPERTY_AS_OWNED:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
debug("SET_PROPERTY_AS_OWNED not implemented\n"); // TODO(MIAMI)
|
CStats::AddPropertyAsOwned(ScriptParams[0]);
|
||||||
return 0;
|
return 0;
|
||||||
case COMMAND_ADD_BLOOD_RING_KILLS:
|
case COMMAND_ADD_BLOOD_RING_KILLS:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
debug("ADD_BLOOD_RING_KILLS not implemented\n"); // TODO(MIAMI)
|
CStats::AddNumBloodRingKills(ScriptParams[0]);
|
||||||
return 0;
|
return 0;
|
||||||
case COMMAND_SET_LONGEST_TIME_IN_BLOOD_RING:
|
case COMMAND_SET_LONGEST_TIME_IN_BLOOD_RING:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
debug("SET_LONGEST_TIME_IN_BLOOD_RING not implemented\n"); // TODO(MIAMI)
|
CStats::LongestTimeInBloodRing(ScriptParams[0]);
|
||||||
return 0;
|
return 0;
|
||||||
case COMMAND_REMOVE_EVERYTHING_FOR_HUGE_CUTSCENE:
|
case COMMAND_REMOVE_EVERYTHING_FOR_HUGE_CUTSCENE:
|
||||||
{
|
{
|
||||||
|
@ -13271,7 +13280,8 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
|
||||||
//case COMMAND_SET_CHAR_OBJ_GOTO_CAR_ON_FOOT:
|
//case COMMAND_SET_CHAR_OBJ_GOTO_CAR_ON_FOOT:
|
||||||
//case COMMAND_GET_CLOSEST_WATER_NODE:
|
//case COMMAND_GET_CLOSEST_WATER_NODE:
|
||||||
case COMMAND_ADD_PORN_LEAFLET_TO_RUBBISH:
|
case COMMAND_ADD_PORN_LEAFLET_TO_RUBBISH:
|
||||||
debug("ADD_PORN_LEAFLET_TO_RUBBISH is not implemented\n"); // TODO(MIAMI)
|
CollectParameters(&m_nIp, 1);
|
||||||
|
CStats::PamphletMissionPassed = ScriptParams[0];
|
||||||
return 0;
|
return 0;
|
||||||
case COMMAND_CREATE_CLOTHES_PICKUP:
|
case COMMAND_CREATE_CLOTHES_PICKUP:
|
||||||
{
|
{
|
||||||
|
@ -13541,7 +13551,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
||||||
switch (command) {
|
switch (command) {
|
||||||
case COMMAND_REGISTER_VIGILANTE_LEVEL:
|
case COMMAND_REGISTER_VIGILANTE_LEVEL:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
debug("REGISTER_VIGILANTE_LEVEL not implemented\n"); // TODO(MIAMI)
|
CStats::RegisterLevelVigilanteMission(ScriptParams[0]);
|
||||||
return 0;
|
return 0;
|
||||||
case COMMAND_CLEAR_ALL_CHAR_ANIMS:
|
case COMMAND_CLEAR_ALL_CHAR_ANIMS:
|
||||||
{
|
{
|
||||||
|
@ -13854,7 +13864,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
||||||
}
|
}
|
||||||
case COMMAND_REGISTER_FIRE_LEVEL:
|
case COMMAND_REGISTER_FIRE_LEVEL:
|
||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
debug("REGISTER_FIRE_LEVEL not implemented\n"); // TODO(MIAMI)
|
CStats::RegisterLevelFireMission(ScriptParams[0]);
|
||||||
return 0;
|
return 0;
|
||||||
case COMMAND_IS_AUSTRALIAN_GAME:
|
case COMMAND_IS_AUSTRALIAN_GAME:
|
||||||
UpdateCompareFlag(false); // should we make some check?
|
UpdateCompareFlag(false); // should we make some check?
|
||||||
|
@ -14007,7 +14017,7 @@ void CTheScripts::DrawScriptSpheres()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
|
for (int i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
|
||||||
if (ScriptSphereArray[i].m_bInUse)
|
if (ScriptSphereArray[i].m_bInUse)
|
||||||
C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, 4, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius,
|
C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, MARKERTYPE_CYLINDER, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius,
|
||||||
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
|
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4894,11 +4894,6 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
|
||||||
|
|
||||||
if (ResetStatics) {
|
if (ResetStatics) {
|
||||||
FOV = DefaultFOV;
|
FOV = DefaultFOV;
|
||||||
|
|
||||||
// TODO(Miami): Remove that when cam is done!
|
|
||||||
// GTA 3 has this in veh. camera
|
|
||||||
if (TheCamera.m_bIdleOn)
|
|
||||||
TheCamera.m_uiTimeWeEnteredIdle = CTimer::GetTimeInMilliseconds();
|
|
||||||
} else {
|
} else {
|
||||||
if (isCar || isBike) {
|
if (isCar || isBike) {
|
||||||
// 0.4f: CAR_FOV_START_SPEED
|
// 0.4f: CAR_FOV_START_SPEED
|
||||||
|
@ -4933,18 +4928,13 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
|
||||||
Rotating = false;
|
Rotating = false;
|
||||||
m_bCollisionChecksOn = true;
|
m_bCollisionChecksOn = true;
|
||||||
|
|
||||||
|
if (!TheCamera.m_bJustCameOutOfGarage) {
|
||||||
// TODO(Miami): Uncomment that when cam is done!
|
Alpha = 0.0f;
|
||||||
|
Beta = car->GetForward().Heading() - HALFPI;
|
||||||
// Garage exit cam is not working well in III...
|
if (TheCamera.m_bCamDirectlyInFront) {
|
||||||
// if (!TheCamera.m_bJustCameOutOfGarage)
|
Beta += PI;
|
||||||
// {
|
}
|
||||||
Alpha = 0.0f;
|
|
||||||
Beta = car->GetForward().Heading() - HALFPI;
|
|
||||||
if (TheCamera.m_bCamDirectlyInFront) {
|
|
||||||
Beta += PI;
|
|
||||||
}
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
BetaSpeed = 0.0;
|
BetaSpeed = 0.0;
|
||||||
AlphaSpeed = 0.0;
|
AlphaSpeed = 0.0;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -318,6 +318,8 @@ enum eCheckHover
|
||||||
HOVEROPTION_DECREASE_SFXVOLUME,
|
HOVEROPTION_DECREASE_SFXVOLUME,
|
||||||
HOVEROPTION_INCREASE_MOUSESENS,
|
HOVEROPTION_INCREASE_MOUSESENS,
|
||||||
HOVEROPTION_DECREASE_MOUSESENS,
|
HOVEROPTION_DECREASE_MOUSESENS,
|
||||||
|
HOVEROPTION_INCREASE_MP3BOOST,
|
||||||
|
HOVEROPTION_DECREASE_MP3BOOST,
|
||||||
HOVEROPTION_NOT_HOVERING,
|
HOVEROPTION_NOT_HOVERING,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -633,7 +635,9 @@ public:
|
||||||
static void PrintErrorMessage();
|
static void PrintErrorMessage();
|
||||||
void PrintStats();
|
void PrintStats();
|
||||||
void Process();
|
void Process();
|
||||||
void ProcessButtonPresses();
|
void ProcessList(bool &optionSelected, bool &goBack);
|
||||||
|
void UserInput();
|
||||||
|
void ProcessButtonPresses(uint8, uint8, uint8, uint8, int8);
|
||||||
void ProcessFileActions();
|
void ProcessFileActions();
|
||||||
void ProcessOnOffMenuOptions();
|
void ProcessOnOffMenuOptions();
|
||||||
void RequestFrontEndShutDown();
|
void RequestFrontEndShutDown();
|
||||||
|
|
|
@ -1179,30 +1179,9 @@ CMenuManager::InitialiseMenuContents(void)
|
||||||
|
|
||||||
STAT_LINE("KGS_EXP", &CStats::KgsOfExplosivesUsed, 0, nil);
|
STAT_LINE("KGS_EXP", &CStats::KgsOfExplosivesUsed, 0, nil);
|
||||||
|
|
||||||
nTemp = (CStats::InstantHitsFiredByPlayer == 0 ? 0 : CStats::InstantHitsHitByPlayer * 100.0f / CStats::InstantHitsFiredByPlayer);
|
|
||||||
STAT_LINE("ACCURA", &nTemp, 0, nil);
|
|
||||||
|
|
||||||
if (CStats::ElBurroTime > 0)
|
|
||||||
STAT_LINE("ELBURRO", &CStats::ElBurroTime, 0, nil);
|
|
||||||
|
|
||||||
if (CStats::Record4x4One > 0)
|
|
||||||
STAT_LINE("FEST_R1", &CStats::Record4x4One, 0, nil);
|
|
||||||
|
|
||||||
if (CStats::Record4x4Two > 0)
|
|
||||||
STAT_LINE("FEST_R2", &CStats::Record4x4Two, 0, nil);
|
|
||||||
|
|
||||||
if (CStats::Record4x4Three > 0)
|
|
||||||
STAT_LINE("FEST_R3", &CStats::Record4x4Three, 0, nil);
|
|
||||||
|
|
||||||
if (CStats::Record4x4Mayhem > 0)
|
|
||||||
STAT_LINE("FEST_RM", &CStats::Record4x4Mayhem, 0, nil);
|
|
||||||
|
|
||||||
if (CStats::LongestFlightInDodo > 0)
|
if (CStats::LongestFlightInDodo > 0)
|
||||||
STAT_LINE("FEST_LF", &CStats::LongestFlightInDodo, 0, nil);
|
STAT_LINE("FEST_LF", &CStats::LongestFlightInDodo, 0, nil);
|
||||||
|
|
||||||
if (CStats::TimeTakenDefuseMission > 0)
|
|
||||||
STAT_LINE("FEST_BD", &CStats::TimeTakenDefuseMission, 0, nil);
|
|
||||||
|
|
||||||
STAT_LINE("CAR_CRU", &CStats::CarsCrushed, 0, nil);
|
STAT_LINE("CAR_CRU", &CStats::CarsCrushed, 0, nil);
|
||||||
|
|
||||||
if (CStats::HighestScores[0] > 0)
|
if (CStats::HighestScores[0] > 0)
|
||||||
|
@ -1231,7 +1210,11 @@ CMenuManager::InitialiseMenuContents(void)
|
||||||
STAT_LINE("FEST_H4", &CStats::HighestScores[4], 0, nil);
|
STAT_LINE("FEST_H4", &CStats::HighestScores[4], 0, nil);
|
||||||
|
|
||||||
STAT_LINE("FESTDFM", &CStats::DistanceTravelledOnFoot, 0, nil);
|
STAT_LINE("FESTDFM", &CStats::DistanceTravelledOnFoot, 0, nil);
|
||||||
STAT_LINE("FESTDCM", &CStats::DistanceTravelledInVehicle, 0, nil);
|
STAT_LINE("FESTDCM", &CStats::DistanceTravelledByCar, 0, nil);
|
||||||
|
STAT_LINE("DISTBIM", &CStats::DistanceTravelledByBike, 0, nil);
|
||||||
|
STAT_LINE("DISTBOM", &CStats::DistanceTravelledByBoat, 0, nil);
|
||||||
|
STAT_LINE("DISTGOM", &CStats::DistanceTravelledByGolfCart, 0, nil);
|
||||||
|
STAT_LINE("DISTHEM", &CStats::DistanceTravelledByHelicoptor, 0, nil);
|
||||||
STAT_LINE("MMRAIN", &CStats::mmRain, 0, nil);
|
STAT_LINE("MMRAIN", &CStats::mmRain, 0, nil);
|
||||||
nTemp = (int32)CStats::MaximumJumpDistance;
|
nTemp = (int32)CStats::MaximumJumpDistance;
|
||||||
STAT_LINE("MXCARDM", &nTemp, 0, nil);
|
STAT_LINE("MXCARDM", &nTemp, 0, nil);
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include "Fluff.h"
|
#include "Fluff.h"
|
||||||
#include "Gangs.h"
|
#include "Gangs.h"
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
|
#include "Stats.h"
|
||||||
|
|
||||||
#ifdef GTA_PS2
|
#ifdef GTA_PS2
|
||||||
#include "eetypes.h"
|
#include "eetypes.h"
|
||||||
|
@ -59,6 +60,7 @@ bool CPad::bDisplayNoControllerMessage;
|
||||||
bool CPad::bObsoleteControllerMessage;
|
bool CPad::bObsoleteControllerMessage;
|
||||||
bool CPad::bOldDisplayNoControllerMessage;
|
bool CPad::bOldDisplayNoControllerMessage;
|
||||||
bool CPad::m_bMapPadOneToPadTwo;
|
bool CPad::m_bMapPadOneToPadTwo;
|
||||||
|
bool CPad::bHasPlayerCheated;
|
||||||
#ifdef GTA_PS2
|
#ifdef GTA_PS2
|
||||||
unsigned char act_direct[6];
|
unsigned char act_direct[6];
|
||||||
unsigned char act_align[6];
|
unsigned char act_align[6];
|
||||||
|
@ -228,6 +230,8 @@ void VehicleCheat(bool something, int model)
|
||||||
CWorld::Add(vehicle);
|
CWorld::Add(vehicle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
CStats::CheatedCount += 1000;
|
||||||
|
CPad::bHasPlayerCheated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlowUpCarsCheat()
|
void BlowUpCarsCheat()
|
||||||
|
@ -287,6 +291,8 @@ void MayhemCheat()
|
||||||
PED_FLAG_GANG2 | PED_FLAG_GANG3 | PED_FLAG_GANG4 | PED_FLAG_GANG5 |
|
PED_FLAG_GANG2 | PED_FLAG_GANG3 | PED_FLAG_GANG4 | PED_FLAG_GANG5 |
|
||||||
PED_FLAG_GANG6 | PED_FLAG_GANG7 | PED_FLAG_GANG8 | PED_FLAG_GANG9 |
|
PED_FLAG_GANG6 | PED_FLAG_GANG7 | PED_FLAG_GANG8 | PED_FLAG_GANG9 |
|
||||||
PED_FLAG_EMERGENCY | PED_FLAG_PROSTITUTE | PED_FLAG_CRIMINAL | PED_FLAG_SPECIAL );
|
PED_FLAG_EMERGENCY | PED_FLAG_PROSTITUTE | PED_FLAG_CRIMINAL | PED_FLAG_SPECIAL );
|
||||||
|
CStats::CheatedCount += 1000;
|
||||||
|
CPad::bHasPlayerCheated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EverybodyAttacksPlayerCheat()
|
void EverybodyAttacksPlayerCheat()
|
||||||
|
@ -294,12 +300,17 @@ void EverybodyAttacksPlayerCheat()
|
||||||
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
||||||
for (int i = PEDTYPE_CIVMALE; i < PEDTYPE_SPECIAL; i++)
|
for (int i = PEDTYPE_CIVMALE; i < PEDTYPE_SPECIAL; i++)
|
||||||
CPedType::AddThreat(i, PED_FLAG_PLAYER1);
|
CPedType::AddThreat(i, PED_FLAG_PLAYER1);
|
||||||
|
|
||||||
|
CStats::CheatedCount += 1000;
|
||||||
|
CPad::bHasPlayerCheated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WeaponsForAllCheat()
|
void WeaponsForAllCheat()
|
||||||
{
|
{
|
||||||
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
||||||
CPopulation::ms_bGivePedsWeapons = !CPopulation::ms_bGivePedsWeapons;
|
CPopulation::ms_bGivePedsWeapons = !CPopulation::ms_bGivePedsWeapons;
|
||||||
|
CStats::CheatedCount += 1000;
|
||||||
|
CPad::bHasPlayerCheated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FastTimeCheat()
|
void FastTimeCheat()
|
||||||
|
@ -380,19 +391,24 @@ void OnlyRenderWheelsCheat()
|
||||||
{
|
{
|
||||||
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
||||||
CVehicle::bWheelsOnlyCheat = !CVehicle::bWheelsOnlyCheat;
|
CVehicle::bWheelsOnlyCheat = !CVehicle::bWheelsOnlyCheat;
|
||||||
|
CStats::CheatedCount += 1000;
|
||||||
|
CPad::bHasPlayerCheated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ChittyChittyBangBangCheat()
|
void ChittyChittyBangBangCheat()
|
||||||
{
|
{
|
||||||
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
||||||
CVehicle::bAllDodosCheat = !CVehicle::bAllDodosCheat;
|
CVehicle::bAllDodosCheat = !CVehicle::bAllDodosCheat;
|
||||||
|
CStats::CheatedCount += 1000;
|
||||||
|
CPad::bHasPlayerCheated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StrongGripCheat()
|
void StrongGripCheat()
|
||||||
{
|
{
|
||||||
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
||||||
CVehicle::bCheat3 = !CVehicle::bCheat3;
|
CVehicle::bCheat3 = !CVehicle::bCheat3;
|
||||||
|
CStats::CheatedCount += 1000;
|
||||||
|
CPad::bHasPlayerCheated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NastyLimbsCheat()
|
void NastyLimbsCheat()
|
||||||
|
@ -404,6 +420,7 @@ void FannyMagnetCheat()
|
||||||
{
|
{
|
||||||
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
||||||
CPed::bFannyMagnetCheat = !CPed::bFannyMagnetCheat;
|
CPed::bFannyMagnetCheat = !CPed::bFannyMagnetCheat;
|
||||||
|
CPad::bHasPlayerCheated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlackCarsCheat()
|
void BlackCarsCheat()
|
||||||
|
@ -437,6 +454,7 @@ void BackToTheFuture(void)
|
||||||
{
|
{
|
||||||
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
||||||
CVehicle::bHoverCheat = !CVehicle::bHoverCheat;
|
CVehicle::bHoverCheat = !CVehicle::bHoverCheat;
|
||||||
|
CPad::bHasPlayerCheated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SuicideCheat(void) {
|
void SuicideCheat(void) {
|
||||||
|
@ -453,6 +471,8 @@ void DoChicksWithGunsCheat(void) {
|
||||||
CStreaming::RemoveCurrentZonesModels();
|
CStreaming::RemoveCurrentZonesModels();
|
||||||
CGangs::SetGangPedModels(GANG_PLAYER, MI_HFYBE, MI_WFYBE);
|
CGangs::SetGangPedModels(GANG_PLAYER, MI_HFYBE, MI_WFYBE);
|
||||||
CGangs::SetGangWeapons(GANG_PLAYER, WEAPONTYPE_M4, WEAPONTYPE_M4);
|
CGangs::SetGangWeapons(GANG_PLAYER, WEAPONTYPE_M4, WEAPONTYPE_M4);
|
||||||
|
CStats::CheatedCount += 1000;
|
||||||
|
CPad::bHasPlayerCheated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -171,6 +171,7 @@ public:
|
||||||
static bool bObsoleteControllerMessage;
|
static bool bObsoleteControllerMessage;
|
||||||
static bool bOldDisplayNoControllerMessage;
|
static bool bOldDisplayNoControllerMessage;
|
||||||
static bool m_bMapPadOneToPadTwo;
|
static bool m_bMapPadOneToPadTwo;
|
||||||
|
static bool bHasPlayerCheated;
|
||||||
|
|
||||||
static CKeyboardState OldKeyState;
|
static CKeyboardState OldKeyState;
|
||||||
static CKeyboardState NewKeyState;
|
static CKeyboardState NewKeyState;
|
||||||
|
|
|
@ -30,7 +30,13 @@
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
#include "ZoneCull.h"
|
#include "ZoneCull.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
#include "Bike.h"
|
||||||
|
#include "Automobile.h"
|
||||||
|
#include "GameLogic.h"
|
||||||
|
|
||||||
|
CVector lastPlayerPos;
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPlayerInfo::SetPlayerSkin(char *skin)
|
CPlayerInfo::SetPlayerSkin(char *skin)
|
||||||
{
|
{
|
||||||
|
@ -38,6 +44,7 @@ CPlayerInfo::SetPlayerSkin(char *skin)
|
||||||
LoadPlayerSkin();
|
LoadPlayerSkin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
const CVector &
|
const CVector &
|
||||||
CPlayerInfo::GetPos()
|
CPlayerInfo::GetPos()
|
||||||
{
|
{
|
||||||
|
@ -50,16 +57,16 @@ CPlayerInfo::GetPos()
|
||||||
return m_pPed->GetPosition();
|
return m_pPed->GetPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPlayerInfo::LoadPlayerSkin()
|
CPlayerInfo::LoadPlayerSkin()
|
||||||
{
|
{
|
||||||
DeletePlayerSkin();
|
DeletePlayerSkin();
|
||||||
|
|
||||||
m_pSkinTexture = CPlayerSkin::GetSkinTexture(m_aSkinName);
|
m_pSkinTexture = CPlayerSkin::GetSkinTexture(m_aSkinName);
|
||||||
if (!m_pSkinTexture)
|
|
||||||
m_pSkinTexture = CPlayerSkin::GetSkinTexture(DEFAULT_SKIN_NAME);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPlayerInfo::DeletePlayerSkin()
|
CPlayerInfo::DeletePlayerSkin()
|
||||||
{
|
{
|
||||||
|
@ -69,6 +76,7 @@ CPlayerInfo::DeletePlayerSkin()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPlayerInfo::KillPlayer()
|
CPlayerInfo::KillPlayer()
|
||||||
{
|
{
|
||||||
|
@ -81,6 +89,7 @@ CPlayerInfo::KillPlayer()
|
||||||
CStats::TimesDied++;
|
CStats::TimesDied++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPlayerInfo::ArrestPlayer()
|
CPlayerInfo::ArrestPlayer()
|
||||||
{
|
{
|
||||||
|
@ -88,11 +97,13 @@ CPlayerInfo::ArrestPlayer()
|
||||||
|
|
||||||
m_WBState = WBSTATE_BUSTED;
|
m_WBState = WBSTATE_BUSTED;
|
||||||
m_nWBTime = CTimer::GetTimeInMilliseconds();
|
m_nWBTime = CTimer::GetTimeInMilliseconds();
|
||||||
|
m_nBustedAudioStatus = BUSTEDAUDIO_NONE;
|
||||||
CDarkel::ResetOnPlayerDeath();
|
CDarkel::ResetOnPlayerDeath();
|
||||||
CMessages::AddBigMessage(TheText.Get("BUSTED"), 5000, 2);
|
CMessages::AddBigMessage(TheText.Get("BUSTED"), 5000, 2);
|
||||||
CStats::TimesArrested++;
|
CStats::TimesArrested++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
bool
|
bool
|
||||||
CPlayerInfo::IsPlayerInRemoteMode()
|
CPlayerInfo::IsPlayerInRemoteMode()
|
||||||
{
|
{
|
||||||
|
@ -109,6 +120,7 @@ CPlayerInfo::PlayerFailedCriticalMission()
|
||||||
CDarkel::ResetOnPlayerDeath();
|
CDarkel::ResetOnPlayerDeath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPlayerInfo::Clear(void)
|
CPlayerInfo::Clear(void)
|
||||||
{
|
{
|
||||||
|
@ -125,6 +137,8 @@ CPlayerInfo::Clear(void)
|
||||||
m_nTrafficMultiplier = 0;
|
m_nTrafficMultiplier = 0;
|
||||||
m_fRoadDensity = 1.0f;
|
m_fRoadDensity = 1.0f;
|
||||||
m_bInRemoteMode = false;
|
m_bInRemoteMode = false;
|
||||||
|
field_D5 = false;
|
||||||
|
field_D6 = false;
|
||||||
m_bUnusedTaxiThing = false;
|
m_bUnusedTaxiThing = false;
|
||||||
m_nUnusedTaxiTimer = 0;
|
m_nUnusedTaxiTimer = 0;
|
||||||
m_nCollectedPackages = 0;
|
m_nCollectedPackages = 0;
|
||||||
|
@ -136,10 +150,25 @@ CPlayerInfo::Clear(void)
|
||||||
m_nSexFrequency = 0;
|
m_nSexFrequency = 0;
|
||||||
m_pHooker = nil;
|
m_pHooker = nil;
|
||||||
m_nTimeTankShotGun = 0;
|
m_nTimeTankShotGun = 0;
|
||||||
field_248 = 0;
|
field_EC = 0;
|
||||||
m_nUpsideDownCounter = 0;
|
m_nUpsideDownCounter = 0;
|
||||||
|
m_nTimeCarSpentOnTwoWheels = 0;
|
||||||
|
m_nDistanceCarTravelledOnTwoWheels = 0;
|
||||||
|
m_nTimeNotFullyOnGround = 0;
|
||||||
|
m_nTimeSpentOnWheelie = 0;
|
||||||
|
m_nDistanceTravelledOnWheelie = 0.0f;
|
||||||
|
m_nTimeSpentOnStoppie = 0;
|
||||||
|
m_nDistanceTravelledOnStoppie = 0.0f;
|
||||||
|
m_nCancelWheelStuntTimer = 0;
|
||||||
|
m_nLastTimeCarSpentOnTwoWheels = 0;
|
||||||
|
m_nLastDistanceCarTravelledOnTwoWheels = 0;
|
||||||
|
m_nLastTimeSpentOnWheelie = 0;
|
||||||
|
m_nLastDistanceTravelledOnWheelie = 0;
|
||||||
|
m_nLastTimeSpentOnStoppie = 0;
|
||||||
|
m_nLastDistanceTravelledOnStoppie = 0;
|
||||||
m_bInfiniteSprint = false;
|
m_bInfiniteSprint = false;
|
||||||
m_bFastReload = false;
|
m_bFastReload = false;
|
||||||
|
m_bFireproof = false;
|
||||||
m_nMaxHealth = m_nMaxArmour = 100;
|
m_nMaxHealth = m_nMaxArmour = 100;
|
||||||
m_bGetOutOfJailFree = false;
|
m_bGetOutOfJailFree = false;
|
||||||
m_bGetOutOfHospitalFree = false;
|
m_bGetOutOfHospitalFree = false;
|
||||||
|
@ -147,11 +176,12 @@ CPlayerInfo::Clear(void)
|
||||||
m_nPreviousTimeRewardedForExplosion = 0;
|
m_nPreviousTimeRewardedForExplosion = 0;
|
||||||
m_nExplosionsSinceLastReward = 0;
|
m_nExplosionsSinceLastReward = 0;
|
||||||
m_nHavocLevel = 0;
|
m_nHavocLevel = 0;
|
||||||
m_fMediaAttention = 0;
|
m_fMediaAttention = 0.0f;
|
||||||
m_nCurrentBustedAudio = 1;
|
m_nCurrentBustedAudio = 1;
|
||||||
m_nBustedAudioStatus = BUSTEDAUDIO_NONE;
|
m_nBustedAudioStatus = BUSTEDAUDIO_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPlayerInfo::BlowUpRCBuggy(bool actually)
|
CPlayerInfo::BlowUpRCBuggy(bool actually)
|
||||||
{
|
{
|
||||||
|
@ -163,6 +193,7 @@ CPlayerInfo::BlowUpRCBuggy(bool actually)
|
||||||
m_pRemoteVehicle->BlowUpCar(FindPlayerPed());
|
m_pRemoteVehicle->BlowUpCar(FindPlayerPed());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPlayerInfo::CancelPlayerEnteringCars(CVehicle *car)
|
CPlayerInfo::CancelPlayerEnteringCars(CVehicle *car)
|
||||||
{
|
{
|
||||||
|
@ -174,6 +205,7 @@ CPlayerInfo::CancelPlayerEnteringCars(CVehicle *car)
|
||||||
m_pPed->ClearObjective();
|
m_pPed->ClearObjective();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPlayerInfo::MakePlayerSafe(bool toggle)
|
CPlayerInfo::MakePlayerSafe(bool toggle)
|
||||||
{
|
{
|
||||||
|
@ -198,8 +230,7 @@ CPlayerInfo::MakePlayerSafe(bool toggle)
|
||||||
CWorld::ExtinguishAllCarFiresInArea(GetPos(), 4000.0f);
|
CWorld::ExtinguishAllCarFiresInArea(GetPos(), 4000.0f);
|
||||||
CReplay::DisableReplays();
|
CReplay::DisableReplays();
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
m_pPed->m_pWanted->m_bIgnoredByEveryone = false;
|
m_pPed->m_pWanted->m_bIgnoredByEveryone = false;
|
||||||
CPad::GetPad(0)->SetEnablePlayerControls(PLAYERCONTROL_PLAYERINFO);
|
CPad::GetPad(0)->SetEnablePlayerControls(PLAYERCONTROL_PLAYERINFO);
|
||||||
m_pPed->bBulletProof = false;
|
m_pPed->bBulletProof = false;
|
||||||
|
@ -214,18 +245,21 @@ CPlayerInfo::MakePlayerSafe(bool toggle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
bool
|
bool
|
||||||
CPlayerInfo::IsRestartingAfterDeath()
|
CPlayerInfo::IsRestartingAfterDeath()
|
||||||
{
|
{
|
||||||
return m_WBState == WBSTATE_WASTED;
|
return m_WBState == WBSTATE_WASTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
bool
|
bool
|
||||||
CPlayerInfo::IsRestartingAfterArrest()
|
CPlayerInfo::IsRestartingAfterArrest()
|
||||||
{
|
{
|
||||||
return m_WBState == WBSTATE_BUSTED;
|
return m_WBState == WBSTATE_BUSTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
// lastCloseness is passed to other calls of this function
|
// lastCloseness is passed to other calls of this function
|
||||||
void
|
void
|
||||||
CPlayerInfo::EvaluateCarPosition(CEntity *carToTest, CPed *player, float carBoundCentrePedDist, float *lastCloseness, CVehicle **closestCarOutput)
|
CPlayerInfo::EvaluateCarPosition(CEntity *carToTest, CPed *player, float carBoundCentrePedDist, float *lastCloseness, CVehicle **closestCarOutput)
|
||||||
|
@ -250,32 +284,7 @@ CPlayerInfo::EvaluateCarPosition(CEntity *carToTest, CPed *player, float carBoun
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// There is something unfinished in here... Sadly all IDBs we have have it unfinished.
|
// --MIAMI: Done
|
||||||
void
|
|
||||||
CPlayerInfo::AwardMoneyForExplosion(CVehicle *wreckedCar)
|
|
||||||
{
|
|
||||||
if (CTimer::GetTimeInMilliseconds() - m_nPreviousTimeRewardedForExplosion < 6000)
|
|
||||||
++m_nExplosionsSinceLastReward;
|
|
||||||
else
|
|
||||||
m_nExplosionsSinceLastReward = 1;
|
|
||||||
|
|
||||||
m_nPreviousTimeRewardedForExplosion = CTimer::GetTimeInMilliseconds();
|
|
||||||
int award = wreckedCar->pHandling->nMonetaryValue * 0.002f;
|
|
||||||
sprintf(gString, "$%d", award);
|
|
||||||
#ifdef MONEY_MESSAGES
|
|
||||||
// This line is a leftover from PS2, I don't know what it was meant to be.
|
|
||||||
// CVector sth(TheCamera.GetPosition() * 4.0f);
|
|
||||||
|
|
||||||
CMoneyMessages::RegisterOne(wreckedCar->GetPosition() + CVector(0.0f, 0.0f, 2.0f), gString, 0, 255, 0, 2.0f, 0.5f);
|
|
||||||
#endif
|
|
||||||
CWorld::Players[CWorld::PlayerInFocus].m_nMoney += award;
|
|
||||||
|
|
||||||
for (int i = m_nExplosionsSinceLastReward; i > 1; --i) {
|
|
||||||
CGeneral::GetRandomNumber();
|
|
||||||
CWorld::Players[CWorld::PlayerInFocus].m_nMoney += award;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CPlayerInfo::SavePlayerInfo(uint8 *buf, uint32 *size)
|
CPlayerInfo::SavePlayerInfo(uint8 *buf, uint32 *size)
|
||||||
{
|
{
|
||||||
|
@ -293,12 +302,19 @@ CPlayerInfo::SavePlayerInfo(uint8 *buf, uint32 *size)
|
||||||
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nTotalPackages);
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nTotalPackages);
|
||||||
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bInfiniteSprint);
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bInfiniteSprint);
|
||||||
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFastReload);
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFastReload);
|
||||||
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFireproof);
|
||||||
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxHealth);
|
||||||
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxArmour);
|
||||||
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfJailFree);
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfJailFree);
|
||||||
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfHospitalFree);
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfHospitalFree);
|
||||||
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bDriveByAllowed);
|
||||||
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_aPlayerName);
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_aPlayerName);
|
||||||
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nBustedAudioStatus);
|
||||||
|
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nCurrentBustedAudio);
|
||||||
#undef CopyToBuf
|
#undef CopyToBuf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPlayerInfo::LoadPlayerInfo(uint8 *buf, uint32 size)
|
CPlayerInfo::LoadPlayerInfo(uint8 *buf, uint32 size)
|
||||||
{
|
{
|
||||||
|
@ -313,12 +329,19 @@ CPlayerInfo::LoadPlayerInfo(uint8 *buf, uint32 size)
|
||||||
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nTotalPackages);
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nTotalPackages);
|
||||||
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bInfiniteSprint);
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bInfiniteSprint);
|
||||||
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFastReload);
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFastReload);
|
||||||
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFireproof);
|
||||||
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxHealth);
|
||||||
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxArmour);
|
||||||
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfJailFree);
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfJailFree);
|
||||||
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfHospitalFree);
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfHospitalFree);
|
||||||
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_aPlayerName)
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bDriveByAllowed);
|
||||||
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_aPlayerName);
|
||||||
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nBustedAudioStatus);
|
||||||
|
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nCurrentBustedAudio)
|
||||||
#undef CopyFromBuf
|
#undef CopyFromBuf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: Done
|
||||||
void
|
void
|
||||||
CPlayerInfo::FindClosestCarSectorList(CPtrList& carList, CPed* ped, float unk1, float unk2, float unk3, float unk4, float* lastCloseness, CVehicle** closestCarOutput)
|
CPlayerInfo::FindClosestCarSectorList(CPtrList& carList, CPed* ped, float unk1, float unk2, float unk3, float unk4, float* lastCloseness, CVehicle** closestCarOutput)
|
||||||
{
|
{
|
||||||
|
@ -333,7 +356,7 @@ CPlayerInfo::FindClosestCarSectorList(CPtrList& carList, CPed* ped, float unk1,
|
||||||
&& (car->GetUp().z > 0.3f || (car->IsVehicle() && ((CVehicle*)car)->m_vehType == VEHICLE_TYPE_BIKE))) {
|
&& (car->GetUp().z > 0.3f || (car->IsVehicle() && ((CVehicle*)car)->m_vehType == VEHICLE_TYPE_BIKE))) {
|
||||||
CVector carCentre = car->GetBoundCentre();
|
CVector carCentre = car->GetBoundCentre();
|
||||||
|
|
||||||
if (Abs(ped->GetPosition().z - carCentre.z) < 2.0f) {
|
if (Abs(ped->GetPosition().z - carCentre.z) < 2.0f || car->IsCar() && carCentre.z < ped->GetPosition().z && ped->GetPosition().z - 4.f < carCentre.z) {
|
||||||
float dist = (ped->GetPosition() - carCentre).Magnitude2D();
|
float dist = (ped->GetPosition() - carCentre).Magnitude2D();
|
||||||
if (dist <= 10.0f && !CCranes::IsThisCarBeingCarriedByAnyCrane(car)) {
|
if (dist <= 10.0f && !CCranes::IsThisCarBeingCarriedByAnyCrane(car)) {
|
||||||
EvaluateCarPosition(car, ped, dist, lastCloseness, closestCarOutput);
|
EvaluateCarPosition(car, ped, dist, lastCloseness, closestCarOutput);
|
||||||
|
@ -367,6 +390,157 @@ CPlayerInfo::Process(void)
|
||||||
if (startTaxiTimer)
|
if (startTaxiTimer)
|
||||||
m_nUnusedTaxiTimer = CTimer::GetTimeInMilliseconds();
|
m_nUnusedTaxiTimer = CTimer::GetTimeInMilliseconds();
|
||||||
|
|
||||||
|
if (!m_pPed->InVehicle()) {
|
||||||
|
m_nTimeCarSpentOnTwoWheels = 0;
|
||||||
|
m_nTimeNotFullyOnGround = 0;
|
||||||
|
m_nTimeSpentOnWheelie = 0;
|
||||||
|
m_nTimeSpentOnStoppie = 0;
|
||||||
|
m_nCancelWheelStuntTimer = 0;
|
||||||
|
} else if (m_pPed->m_pMyVehicle->IsCar()) {
|
||||||
|
CAutomobile *car = (CAutomobile*)m_pPed->m_pMyVehicle;
|
||||||
|
|
||||||
|
if (car->m_nWheelsOnGround < 3)
|
||||||
|
m_nTimeNotFullyOnGround += CTimer::GetTimeInMilliseconds();
|
||||||
|
else
|
||||||
|
m_nTimeNotFullyOnGround = 0;
|
||||||
|
|
||||||
|
if (car->m_aSuspensionSpringRatioPrev[2] == 1.f && car->m_aSuspensionSpringRatioPrev[3] == 1.f) {
|
||||||
|
if (car->m_aSuspensionSpringRatioPrev[0] < 1.0f && car->m_aSuspensionSpringRatioPrev[1] < 1.0f && car->m_fDamageImpulse == 0.0f) {
|
||||||
|
m_nTimeCarSpentOnTwoWheels += CTimer::GetTimeStepInMilliseconds();
|
||||||
|
m_nDistanceCarTravelledOnTwoWheels += car->m_fDistanceTravelled;
|
||||||
|
m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.5f);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (m_nTimeCarSpentOnTwoWheels != 0 && m_nCancelWheelStuntTimer < 500) {
|
||||||
|
m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds();
|
||||||
|
} else {
|
||||||
|
if (m_nTimeCarSpentOnTwoWheels >= 2000) {
|
||||||
|
m_nLastTimeCarSpentOnTwoWheels = m_nTimeCarSpentOnTwoWheels;
|
||||||
|
m_nLastDistanceCarTravelledOnTwoWheels = m_nDistanceCarTravelledOnTwoWheels;
|
||||||
|
if (CStats::Longest2Wheel < m_nTimeCarSpentOnTwoWheels / 1000)
|
||||||
|
CStats::Longest2Wheel = m_nTimeCarSpentOnTwoWheels / 1000;
|
||||||
|
if (CStats::Longest2WheelDist < m_nDistanceCarTravelledOnTwoWheels)
|
||||||
|
CStats::Longest2WheelDist = m_nDistanceCarTravelledOnTwoWheels;
|
||||||
|
}
|
||||||
|
m_nTimeCarSpentOnTwoWheels = 0;
|
||||||
|
m_nDistanceCarTravelledOnTwoWheels = 0;
|
||||||
|
m_nCancelWheelStuntTimer = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (car->m_aSuspensionSpringRatioPrev[0] == 1.0f && car->m_aSuspensionSpringRatioPrev[1] == 1.0f) {
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
if (car->m_aSuspensionSpringRatioPrev[2] < 1.f
|
||||||
|
#else
|
||||||
|
if (car->m_aSuspensionSpringRatioPrev[1] < 1.f
|
||||||
|
#endif
|
||||||
|
&& car->m_aSuspensionSpringRatioPrev[3] < 1.f && 0.0f == car->m_fDamageImpulse) {
|
||||||
|
m_nTimeCarSpentOnTwoWheels += CTimer::GetTimeStepInMilliseconds();
|
||||||
|
m_nDistanceCarTravelledOnTwoWheels += car->m_fDistanceTravelled;
|
||||||
|
m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.2f);
|
||||||
|
|
||||||
|
} else if (m_nTimeCarSpentOnTwoWheels != 0 && m_nCancelWheelStuntTimer < 500) {
|
||||||
|
m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (m_nTimeCarSpentOnTwoWheels >= 2000) {
|
||||||
|
m_nLastTimeCarSpentOnTwoWheels = m_nTimeCarSpentOnTwoWheels;
|
||||||
|
m_nLastDistanceCarTravelledOnTwoWheels = m_nDistanceCarTravelledOnTwoWheels;
|
||||||
|
if (CStats::Longest2Wheel < m_nTimeCarSpentOnTwoWheels / 1000)
|
||||||
|
CStats::Longest2Wheel = m_nTimeCarSpentOnTwoWheels / 1000;
|
||||||
|
if (CStats::Longest2WheelDist < m_nDistanceCarTravelledOnTwoWheels)
|
||||||
|
CStats::Longest2WheelDist = m_nDistanceCarTravelledOnTwoWheels;
|
||||||
|
}
|
||||||
|
m_nTimeCarSpentOnTwoWheels = 0;
|
||||||
|
m_nDistanceCarTravelledOnTwoWheels = 0;
|
||||||
|
m_nCancelWheelStuntTimer = 0;
|
||||||
|
}
|
||||||
|
} else if (m_nTimeCarSpentOnTwoWheels != 0) {
|
||||||
|
if (m_nTimeCarSpentOnTwoWheels >= 2000) {
|
||||||
|
m_nLastTimeCarSpentOnTwoWheels = m_nTimeCarSpentOnTwoWheels;
|
||||||
|
m_nLastDistanceCarTravelledOnTwoWheels = m_nDistanceCarTravelledOnTwoWheels;
|
||||||
|
if (CStats::Longest2Wheel < m_nTimeCarSpentOnTwoWheels / 1000)
|
||||||
|
CStats::Longest2Wheel = m_nTimeCarSpentOnTwoWheels / 1000;
|
||||||
|
if (CStats::Longest2WheelDist < m_nDistanceCarTravelledOnTwoWheels)
|
||||||
|
CStats::Longest2WheelDist = m_nDistanceCarTravelledOnTwoWheels;
|
||||||
|
}
|
||||||
|
m_nTimeCarSpentOnTwoWheels = 0;
|
||||||
|
m_nDistanceCarTravelledOnTwoWheels = 0;
|
||||||
|
m_nCancelWheelStuntTimer = 0;
|
||||||
|
}
|
||||||
|
m_nTimeSpentOnWheelie = 0;
|
||||||
|
m_nTimeSpentOnStoppie = 0;
|
||||||
|
} else if (m_pPed->m_pMyVehicle->IsBike()) {
|
||||||
|
CBike *bike = (CBike*)m_pPed->m_pMyVehicle;
|
||||||
|
if (bike->m_aSuspensionSpringRatioPrev[0] == 1.0f && bike->m_aSuspensionSpringRatioPrev[1] == 1.0f) {
|
||||||
|
if (bike->m_aSuspensionSpringRatioPrev[2] < 1.0f
|
||||||
|
|| (bike->m_aSuspensionSpringRatioPrev[3] < 1.0f && 0.0f == bike->m_fDamageImpulse)) {
|
||||||
|
m_nTimeSpentOnWheelie += CTimer::GetTimeStepInMilliseconds();
|
||||||
|
m_nDistanceTravelledOnWheelie += bike->m_fDistanceTravelled;
|
||||||
|
m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.2f);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (m_nTimeSpentOnWheelie != 0 && m_nCancelWheelStuntTimer < 500) {
|
||||||
|
m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds();
|
||||||
|
} else {
|
||||||
|
if (m_nTimeSpentOnWheelie >= 5000) {
|
||||||
|
m_nLastTimeSpentOnWheelie = m_nTimeSpentOnWheelie;
|
||||||
|
m_nLastDistanceTravelledOnWheelie = m_nDistanceTravelledOnWheelie;
|
||||||
|
if (CStats::LongestWheelie < m_nTimeSpentOnWheelie / 1000)
|
||||||
|
CStats::LongestWheelie = m_nTimeSpentOnWheelie / 1000;
|
||||||
|
if (CStats::LongestWheelieDist < m_nDistanceTravelledOnWheelie)
|
||||||
|
CStats::LongestWheelieDist = m_nDistanceTravelledOnWheelie;
|
||||||
|
}
|
||||||
|
m_nTimeSpentOnWheelie = 0;
|
||||||
|
m_nDistanceTravelledOnWheelie = 0;
|
||||||
|
m_nCancelWheelStuntTimer = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (m_nTimeSpentOnWheelie != 0) {
|
||||||
|
if (m_nTimeSpentOnWheelie >= 5000) {
|
||||||
|
m_nLastTimeSpentOnWheelie = m_nTimeSpentOnWheelie;
|
||||||
|
m_nLastDistanceTravelledOnWheelie = m_nDistanceTravelledOnWheelie;
|
||||||
|
if (CStats::LongestWheelie < m_nTimeSpentOnWheelie / 1000)
|
||||||
|
CStats::LongestWheelie = m_nTimeSpentOnWheelie / 1000;
|
||||||
|
if (CStats::LongestWheelieDist < m_nDistanceTravelledOnWheelie)
|
||||||
|
CStats::LongestWheelieDist = m_nDistanceTravelledOnWheelie;
|
||||||
|
}
|
||||||
|
m_nTimeSpentOnWheelie = 0;
|
||||||
|
m_nDistanceTravelledOnWheelie = 0;
|
||||||
|
m_nCancelWheelStuntTimer = 0;
|
||||||
|
|
||||||
|
} else if (bike->m_aSuspensionSpringRatioPrev[2] == 1.0f && bike->m_aSuspensionSpringRatioPrev[3] == 1.0f
|
||||||
|
&& 0.0f == bike->m_fDamageImpulse) {
|
||||||
|
m_nTimeSpentOnStoppie += CTimer::GetTimeStepInMilliseconds();
|
||||||
|
m_nDistanceTravelledOnStoppie += bike->m_fDistanceTravelled;
|
||||||
|
m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.2f);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (m_nTimeSpentOnStoppie != 0 && m_nCancelWheelStuntTimer < 500) {
|
||||||
|
m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds();
|
||||||
|
} else {
|
||||||
|
if (m_nTimeSpentOnStoppie >= 2000) {
|
||||||
|
m_nLastTimeSpentOnStoppie = m_nTimeSpentOnStoppie;
|
||||||
|
m_nLastDistanceTravelledOnStoppie = m_nDistanceTravelledOnStoppie;
|
||||||
|
if (CStats::LongestStoppie < m_nTimeSpentOnStoppie / 1000)
|
||||||
|
CStats::LongestStoppie = m_nTimeSpentOnStoppie / 1000;
|
||||||
|
if (CStats::LongestStoppieDist < m_nDistanceTravelledOnStoppie)
|
||||||
|
CStats::LongestStoppieDist = m_nDistanceTravelledOnStoppie;
|
||||||
|
}
|
||||||
|
m_nTimeSpentOnStoppie = 0;
|
||||||
|
m_nDistanceTravelledOnStoppie = 0;
|
||||||
|
m_nCancelWheelStuntTimer = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_nTimeCarSpentOnTwoWheels = 0;
|
||||||
|
m_nTimeNotFullyOnGround = 0;
|
||||||
|
} else {
|
||||||
|
m_nTimeCarSpentOnTwoWheels = 0;
|
||||||
|
m_nTimeNotFullyOnGround = 0;
|
||||||
|
m_nTimeSpentOnWheelie = 0;
|
||||||
|
m_nTimeSpentOnStoppie = 0;
|
||||||
|
m_nCancelWheelStuntTimer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// The effect that makes money counter does while earning/losing money
|
// The effect that makes money counter does while earning/losing money
|
||||||
if (m_nVisibleMoney != m_nMoney) {
|
if (m_nVisibleMoney != m_nMoney) {
|
||||||
int diff = m_nMoney - m_nVisibleMoney;
|
int diff = m_nMoney - m_nVisibleMoney;
|
||||||
|
@ -395,7 +569,7 @@ CPlayerInfo::Process(void)
|
||||||
m_fRoadDensity = ThePaths.CalcRoadDensity(playerPos.x, playerPos.y);
|
m_fRoadDensity = ThePaths.CalcRoadDensity(playerPos.x, playerPos.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_fRoadDensity = clamp(m_fRoadDensity, 0.4f, 1.45f);
|
m_fRoadDensity = clamp(m_fRoadDensity, 0.5f, 1.45f);
|
||||||
|
|
||||||
// Because vehicle enter/exit use same key binding.
|
// Because vehicle enter/exit use same key binding.
|
||||||
bool enterOrExitVeh;
|
bool enterOrExitVeh;
|
||||||
|
@ -404,39 +578,31 @@ CPlayerInfo::Process(void)
|
||||||
else
|
else
|
||||||
enterOrExitVeh = CPad::GetPad(0)->GetExitVehicle();
|
enterOrExitVeh = CPad::GetPad(0)->GetExitVehicle();
|
||||||
|
|
||||||
if (enterOrExitVeh && m_pPed->m_nPedState != PED_SNIPER_MODE && m_pPed->m_nPedState != PED_ROCKET_MODE) {
|
if (enterOrExitVeh && m_pPed->m_nPedState != PED_ANSWER_MOBILE && m_pPed->m_nPedState != PED_SNIPER_MODE && m_pPed->m_nPedState != PED_ROCKET_MODE) {
|
||||||
if (m_pPed->bInVehicle) {
|
if (m_pPed->bInVehicle) {
|
||||||
if (!m_pRemoteVehicle) {
|
if (!m_pRemoteVehicle) {
|
||||||
CEntity *surfaceBelowVeh = m_pPed->m_pMyVehicle->m_pCurGroundEntity;
|
CEntity *surfaceBelowVeh = m_pPed->m_pMyVehicle->m_pCurGroundEntity;
|
||||||
if (!surfaceBelowVeh || !CBridge::ThisIsABridgeObjectMovingUp(surfaceBelowVeh->GetModelIndex())) {
|
if (!surfaceBelowVeh || !CBridge::ThisIsABridgeObjectMovingUp(surfaceBelowVeh->GetModelIndex())) {
|
||||||
CVehicle *veh = m_pPed->m_pMyVehicle;
|
CVehicle *veh = m_pPed->m_pMyVehicle;
|
||||||
if (!veh->IsBoat() || veh->m_nDoorLock == CARLOCK_LOCKED_PLAYER_INSIDE) {
|
if (!veh->IsBoat() || veh->m_nDoorLock == CARLOCK_LOCKED_PLAYER_INSIDE) {
|
||||||
|
if (veh->GetStatus() != STATUS_WRECKED && veh->GetStatus() != STATUS_TRAIN_MOVING && veh->m_nDoorLock != CARLOCK_LOCKED_PLAYER_INSIDE) {
|
||||||
// This condition will always return true, else block was probably WIP Miami code.
|
bool canJumpOff = false;
|
||||||
if (veh->m_vehType != VEHICLE_TYPE_BIKE || veh->m_nDoorLock == CARLOCK_LOCKED_PLAYER_INSIDE) {
|
if (veh->m_vehType == VEHICLE_TYPE_BIKE) {
|
||||||
if (veh->GetStatus() != STATUS_WRECKED && veh->GetStatus() != STATUS_TRAIN_MOVING && veh->m_nDoorLock != CARLOCK_LOCKED_PLAYER_INSIDE) {
|
canJumpOff = veh->CanPedJumpOffBike();
|
||||||
if (veh->m_vecMoveSpeed.Magnitude() < 0.17f && CTimer::GetTimeScale() >= 0.5f && !veh->bIsInWater) {
|
} else if (veh->pDriver == m_pPed) {
|
||||||
m_pPed->SetObjective(OBJECTIVE_LEAVE_CAR, veh);
|
canJumpOff = veh->CanPedJumpOutCar();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
CVector sth = 0.7f * veh->GetRight() + veh->GetPosition();
|
|
||||||
bool found = false;
|
|
||||||
float groundZ = CWorld::FindGroundZFor3DCoord(sth.x, sth.y, 2.0f + sth.z, &found);
|
|
||||||
|
|
||||||
if (found)
|
if (canJumpOff || veh->m_vecMoveSpeed.Magnitude() < 0.1f) {
|
||||||
sth.z = 1.0f + groundZ;
|
if (!veh->bIsInWater)
|
||||||
m_pPed->m_nPedState = PED_IDLE;
|
m_pPed->SetObjective(OBJECTIVE_LEAVE_CAR, veh);
|
||||||
m_pPed->SetMoveState(PEDMOVE_STILL);
|
|
||||||
CPed::PedSetOutCarCB(0, m_pPed);
|
} else if (veh->GetStatus() != STATUS_PLAYER && veh != CGameLogic::pShortCutTaxi) {
|
||||||
CAnimManager::BlendAnimation(m_pPed->GetClump(), m_pPed->m_animGroup, ANIM_IDLE_STANCE, 100.0f);
|
veh->AutoPilot.m_nTempAction = TEMPACT_WAIT;
|
||||||
CAnimManager::BlendAnimation(m_pPed->GetClump(), ASSOCGRP_STD, ANIM_FALL_LAND, 100.0f);
|
veh->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 1000;
|
||||||
m_pPed->SetPosition(sth);
|
}
|
||||||
m_pPed->SetMoveState(PEDMOVE_STILL);
|
|
||||||
m_pPed->m_vecMoveSpeed = veh->m_vecMoveSpeed;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// The code in here was under CPed::SetExitBoat in VC, did the same for here.
|
|
||||||
m_pPed->SetExitBoat(veh);
|
m_pPed->SetExitBoat(veh);
|
||||||
m_pPed->bTryingToReachDryLand = true;
|
m_pPed->bTryingToReachDryLand = true;
|
||||||
}
|
}
|
||||||
|
@ -451,14 +617,10 @@ CPlayerInfo::Process(void)
|
||||||
CEntity *surfaceBelow = m_pPed->m_pCurrentPhysSurface;
|
CEntity *surfaceBelow = m_pPed->m_pCurrentPhysSurface;
|
||||||
if (surfaceBelow && surfaceBelow->IsVehicle()) {
|
if (surfaceBelow && surfaceBelow->IsVehicle()) {
|
||||||
carBelow = (CVehicle*)surfaceBelow;
|
carBelow = (CVehicle*)surfaceBelow;
|
||||||
if (carBelow->IsBoat()) {
|
if (carBelow->IsBoat() && carBelow->m_modelIndex != MI_SKIMMER) {
|
||||||
weAreOnBoat = true;
|
weAreOnBoat = true;
|
||||||
m_pPed->bOnBoat = true;
|
m_pPed->bOnBoat = true;
|
||||||
#ifdef VC_PED_PORTS
|
|
||||||
if (carBelow->GetStatus() != STATUS_WRECKED && carBelow->GetUp().z > 0.3f)
|
if (carBelow->GetStatus() != STATUS_WRECKED && carBelow->GetUp().z > 0.3f)
|
||||||
#else
|
|
||||||
if (carBelow->GetStatus() != STATUS_WRECKED)
|
|
||||||
#endif
|
|
||||||
m_pPed->SetSeekBoatPosition(carBelow);
|
m_pPed->SetSeekBoatPosition(carBelow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -506,14 +668,15 @@ CPlayerInfo::Process(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_bInRemoteMode) {
|
if (m_bInRemoteMode) {
|
||||||
uint32 timeWithoutRemoteCar = CTimer::GetTimeInMilliseconds() - m_nTimeLostRemoteCar;
|
uint32 timeWithoutRemoteCar = CTimer::GetTimeInMilliseconds() - m_nTimeLostRemoteCar;
|
||||||
if (CTimer::GetPreviousTimeInMilliseconds() - m_nTimeLostRemoteCar < 1000 && timeWithoutRemoteCar >= 1000 && m_WBState == WBSTATE_PLAYING) {
|
if (CTimer::GetPreviousTimeInMilliseconds() - m_nTimeLostRemoteCar < 1000 && timeWithoutRemoteCar >= 1000 && m_WBState == WBSTATE_PLAYING && field_D6) {
|
||||||
TheCamera.SetFadeColour(0, 0, 0);
|
TheCamera.SetFadeColour(0, 0, 0);
|
||||||
TheCamera.Fade(1.0f, 0);
|
TheCamera.Fade(1.0f, 0);
|
||||||
}
|
}
|
||||||
if (timeWithoutRemoteCar > 2000) {
|
if (timeWithoutRemoteCar > 2000) {
|
||||||
if (m_WBState == WBSTATE_PLAYING) {
|
if (m_WBState == WBSTATE_PLAYING && field_D6) {
|
||||||
TheCamera.RestoreWithJumpCut();
|
TheCamera.RestoreWithJumpCut();
|
||||||
TheCamera.SetFadeColour(0, 0, 0);
|
TheCamera.SetFadeColour(0, 0, 0);
|
||||||
TheCamera.Fade(1.0f, 1);
|
TheCamera.Fade(1.0f, 1);
|
||||||
|
@ -525,6 +688,7 @@ CPlayerInfo::Process(void)
|
||||||
CTimer::Update();
|
CTimer::Update();
|
||||||
}
|
}
|
||||||
m_bInRemoteMode = false;
|
m_bInRemoteMode = false;
|
||||||
|
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->bRemoveFromWorld = true;
|
||||||
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = nil;
|
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = nil;
|
||||||
if (FindPlayerVehicle()) {
|
if (FindPlayerVehicle()) {
|
||||||
FindPlayerVehicle()->SetStatus(STATUS_PLAYER);
|
FindPlayerVehicle()->SetStatus(STATUS_PLAYER);
|
||||||
|
@ -534,11 +698,10 @@ CPlayerInfo::Process(void)
|
||||||
if (!(CTimer::GetFrameCounter() & 31)) {
|
if (!(CTimer::GetFrameCounter() & 31)) {
|
||||||
CVehicle *veh = FindPlayerVehicle();
|
CVehicle *veh = FindPlayerVehicle();
|
||||||
if (veh && m_pPed->bInVehicle && veh->GetUp().z < 0.0f
|
if (veh && m_pPed->bInVehicle && veh->GetUp().z < 0.0f
|
||||||
&& veh->m_vecMoveSpeed.Magnitude() < 0.05f && veh->IsCar() && !veh->bIsInWater) {
|
&& veh->m_vecMoveSpeed.Magnitude() < 0.05f && (veh->IsCar() || veh->IsBoat()) && !veh->bIsInWater) {
|
||||||
|
|
||||||
if (veh->GetUp().z < -0.5f) {
|
if (veh->GetUp().z < -0.5f) {
|
||||||
m_nUpsideDownCounter += 2;
|
m_nUpsideDownCounter += 2;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
m_nUpsideDownCounter++;
|
m_nUpsideDownCounter++;
|
||||||
}
|
}
|
||||||
|
@ -562,8 +725,74 @@ CPlayerInfo::Process(void)
|
||||||
if (veh->pPassengers[i])
|
if (veh->pPassengers[i])
|
||||||
veh->pPassengers[i]->m_nZoneLevel = LEVEL_GENERIC;
|
veh->pPassengers[i]->m_nZoneLevel = LEVEL_GENERIC;
|
||||||
}
|
}
|
||||||
CStats::DistanceTravelledInVehicle += veh->m_fDistanceTravelled;
|
if(veh->m_modelIndex == MI_CADDY)
|
||||||
|
CStats::DistanceTravelledByGolfCart += veh->m_fDistanceTravelled;
|
||||||
|
else {
|
||||||
|
if(veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI)
|
||||||
|
CStats::DistanceTravelledByHelicoptor += veh->m_fDistanceTravelled;
|
||||||
|
if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE)
|
||||||
|
CStats::DistanceTravelledByPlane += veh->m_fDistanceTravelled;
|
||||||
|
if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_CAR)
|
||||||
|
CStats::DistanceTravelledByCar += veh->m_fDistanceTravelled;
|
||||||
|
if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_BIKE)
|
||||||
|
CStats::DistanceTravelledByBike += veh->m_fDistanceTravelled;
|
||||||
|
if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_BOAT)
|
||||||
|
CStats::DistanceTravelledByBoat += veh->m_fDistanceTravelled;
|
||||||
|
|
||||||
|
if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE) {
|
||||||
|
if (veh->m_vecMoveSpeed.Magnitude() > 0.2f) {
|
||||||
|
CStats::FlightTime += CTimer::GetTimeStep() * 16.f; // what a weird choice
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
CStats::DistanceTravelledOnFoot += FindPlayerPed()->m_fDistanceTravelled;
|
CStats::DistanceTravelledOnFoot += FindPlayerPed()->m_fDistanceTravelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_pPed->m_pWanted->m_nWantedLevel && !CTheScripts::IsPlayerOnAMission()) {
|
||||||
|
float maxDelta = 0.0f;
|
||||||
|
static bool movedSignificantly = true;
|
||||||
|
static bool thereIsACarPathNear = true;
|
||||||
|
// there was one more guard without variable's itself???
|
||||||
|
|
||||||
|
if (CTimer::GetTimeInMilliseconds() / 20000 != CTimer::GetPreviousTimeInMilliseconds() / 20000) {
|
||||||
|
float posChange = (lastPlayerPos - FindPlayerCoors()).Magnitude();
|
||||||
|
movedSignificantly = posChange >= 10.0f;
|
||||||
|
lastPlayerPos = FindPlayerCoors();
|
||||||
|
thereIsACarPathNear = ThePaths.FindNodeClosestToCoors(FindPlayerCoors(), PATH_CAR, 60.0f, true, false, false, false) != 0;
|
||||||
|
}
|
||||||
|
switch (m_pPed->m_pWanted->m_nWantedLevel) {
|
||||||
|
case 1:
|
||||||
|
maxDelta = 31.f;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
maxDelta = 62.f;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
maxDelta = 125.f;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
maxDelta = 250.f;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
maxDelta = 500.f;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
maxDelta = 1000.f;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
float increaseDelta = maxDelta - m_fMediaAttention;
|
||||||
|
float increaseAttentionBy = CTimer::GetTimeStep() * 0.0001f * increaseDelta;
|
||||||
|
if (increaseAttentionBy < 0.0f
|
||||||
|
|| movedSignificantly && thereIsACarPathNear && !CCullZones::NoPolice() && !CCullZones::PoliceAbandonCars() && CGame::currArea == AREA_MAIN_MAP) {
|
||||||
|
m_fMediaAttention += increaseAttentionBy;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
m_fMediaAttention = 0.0f;
|
||||||
|
}
|
||||||
|
CStats::HighestChaseValue = Max(m_fMediaAttention, CStats::HighestChaseValue);
|
||||||
|
m_nMoney = Min(999999999, m_nMoney);
|
||||||
|
m_nVisibleMoney = Min(999999999, m_nVisibleMoney);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,19 +45,33 @@ public:
|
||||||
int8 m_WBState; // eWastedBustedState
|
int8 m_WBState; // eWastedBustedState
|
||||||
uint32 m_nWBTime;
|
uint32 m_nWBTime;
|
||||||
bool m_bInRemoteMode;
|
bool m_bInRemoteMode;
|
||||||
|
bool field_D5;
|
||||||
|
bool field_D6;
|
||||||
uint32 m_nTimeLostRemoteCar;
|
uint32 m_nTimeLostRemoteCar;
|
||||||
uint32 m_nTimeLastHealthLoss;
|
uint32 m_nTimeLastHealthLoss;
|
||||||
uint32 m_nTimeLastArmourLoss;
|
uint32 m_nTimeLastArmourLoss;
|
||||||
uint32 m_nTimeTankShotGun;
|
uint32 m_nTimeTankShotGun;
|
||||||
int32 m_nTimeNotFullyOnGround;
|
|
||||||
int32 m_nUpsideDownCounter;
|
int32 m_nUpsideDownCounter;
|
||||||
int32 field_248;
|
int32 field_EC;
|
||||||
|
int32 m_nTimeCarSpentOnTwoWheels;
|
||||||
|
int32 m_nDistanceCarTravelledOnTwoWheels;
|
||||||
|
int32 m_nTimeNotFullyOnGround;
|
||||||
|
int32 m_nTimeSpentOnWheelie;
|
||||||
|
float m_nDistanceTravelledOnWheelie;
|
||||||
|
int32 m_nTimeSpentOnStoppie;
|
||||||
|
float m_nDistanceTravelledOnStoppie;
|
||||||
|
int32 m_nCancelWheelStuntTimer;
|
||||||
|
int32 m_nLastTimeCarSpentOnTwoWheels;
|
||||||
|
int32 m_nLastDistanceCarTravelledOnTwoWheels;
|
||||||
|
int32 m_nLastTimeSpentOnWheelie;
|
||||||
|
int32 m_nLastDistanceTravelledOnWheelie;
|
||||||
|
int32 m_nLastTimeSpentOnStoppie;
|
||||||
|
int32 m_nLastDistanceTravelledOnStoppie;
|
||||||
int16 m_nTrafficMultiplier;
|
int16 m_nTrafficMultiplier;
|
||||||
|
int16 field_12A;
|
||||||
float m_fRoadDensity;
|
float m_fRoadDensity;
|
||||||
uint32 m_nPreviousTimeRewardedForExplosion;
|
uint32 m_nPreviousTimeRewardedForExplosion;
|
||||||
int32 m_nExplosionsSinceLastReward;
|
uint32 m_nExplosionsSinceLastReward;
|
||||||
int32 field_268;
|
|
||||||
int32 field_272;
|
|
||||||
uint32 m_nHavocLevel;
|
uint32 m_nHavocLevel;
|
||||||
float m_fMediaAttention;
|
float m_fMediaAttention;
|
||||||
bool m_bInfiniteSprint;
|
bool m_bInfiniteSprint;
|
||||||
|
@ -76,7 +90,6 @@ public:
|
||||||
void MakePlayerSafe(bool);
|
void MakePlayerSafe(bool);
|
||||||
void LoadPlayerSkin();
|
void LoadPlayerSkin();
|
||||||
void DeletePlayerSkin();
|
void DeletePlayerSkin();
|
||||||
void AwardMoneyForExplosion(CVehicle *vehicle);
|
|
||||||
void SetPlayerSkin(char* skin);
|
void SetPlayerSkin(char* skin);
|
||||||
const CVector &GetPos();
|
const CVector &GetPos();
|
||||||
void Process(void);
|
void Process(void);
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
#define COORDBLIP_MARKER_COLOR_R 252
|
#define COORDBLIP_MARKER_COLOR_R 252
|
||||||
#define COORDBLIP_MARKER_COLOR_G 138
|
#define COORDBLIP_MARKER_COLOR_G 138
|
||||||
#define COORDBLIP_MARKER_COLOR_B 242
|
#define COORDBLIP_MARKER_COLOR_B 242
|
||||||
#define COORDBLIP_MARKER_COLOR_A 255
|
#define COORDBLIP_MARKER_COLOR_A 228
|
||||||
|
|
||||||
#define NUM_MAP_LEGENDS 75
|
#define NUM_MAP_LEGENDS 75
|
||||||
|
|
||||||
|
|
|
@ -3,12 +3,14 @@
|
||||||
#include "Stats.h"
|
#include "Stats.h"
|
||||||
#include "Text.h"
|
#include "Text.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
|
#include "Pad.h"
|
||||||
|
|
||||||
#include <climits>
|
#include <climits>
|
||||||
|
|
||||||
//TODO
|
|
||||||
int32 CStats::SeagullsKilled;
|
int32 CStats::SeagullsKilled;
|
||||||
|
int32 CStats::BoatsExploded;
|
||||||
|
int32 CStats::WantedStarsAttained;
|
||||||
|
int32 CStats::WantedStarsEvaded;
|
||||||
int32 CStats::DaysPassed;
|
int32 CStats::DaysPassed;
|
||||||
int32 CStats::HeadsPopped;
|
int32 CStats::HeadsPopped;
|
||||||
int32 CStats::CommercialPassed;
|
int32 CStats::CommercialPassed;
|
||||||
|
@ -21,8 +23,25 @@ int32 CStats::PedsKilledOfThisType[NUM_PEDTYPES];
|
||||||
int32 CStats::TimesDied;
|
int32 CStats::TimesDied;
|
||||||
int32 CStats::TimesArrested;
|
int32 CStats::TimesArrested;
|
||||||
int32 CStats::KillsSinceLastCheckpoint;
|
int32 CStats::KillsSinceLastCheckpoint;
|
||||||
float CStats::DistanceTravelledInVehicle;
|
float CStats::DistanceTravelledByCar;
|
||||||
|
float CStats::DistanceTravelledByHelicoptor;
|
||||||
|
float CStats::DistanceTravelledByBike;
|
||||||
|
float CStats::DistanceTravelledByBoat;
|
||||||
|
float CStats::DistanceTravelledByPlane;
|
||||||
|
float CStats::DistanceTravelledByGolfCart;
|
||||||
float CStats::DistanceTravelledOnFoot;
|
float CStats::DistanceTravelledOnFoot;
|
||||||
|
int32 CStats::FlightTime;
|
||||||
|
int32 CStats::TimesDrowned;
|
||||||
|
int32 CStats::PhotosTaken;
|
||||||
|
float CStats::LoanSharks;
|
||||||
|
float CStats::StoresKnockedOff;
|
||||||
|
float CStats::MovieStunts;
|
||||||
|
float CStats::Assassinations;
|
||||||
|
float CStats::PizzasDelivered;
|
||||||
|
float CStats::GarbagePickups;
|
||||||
|
float CStats::IceCreamSold;
|
||||||
|
float CStats::TopShootingRangeScore;
|
||||||
|
float CStats::ShootingRank;
|
||||||
int32 CStats::ProgressMade;
|
int32 CStats::ProgressMade;
|
||||||
int32 CStats::TotalProgressInGame;
|
int32 CStats::TotalProgressInGame;
|
||||||
int32 CStats::CarsExploded;
|
int32 CStats::CarsExploded;
|
||||||
|
@ -40,95 +59,153 @@ int32 CStats::MissionsGiven;
|
||||||
int32 CStats::MissionsPassed;
|
int32 CStats::MissionsPassed;
|
||||||
char CStats::LastMissionPassedName[8];
|
char CStats::LastMissionPassedName[8];
|
||||||
int32 CStats::TotalLegitimateKills;
|
int32 CStats::TotalLegitimateKills;
|
||||||
int32 CStats::ElBurroTime;
|
|
||||||
int32 CStats::Record4x4One;
|
|
||||||
int32 CStats::Record4x4Two;
|
|
||||||
int32 CStats::Record4x4Three;
|
|
||||||
int32 CStats::Record4x4Mayhem;
|
|
||||||
int32 CStats::LivesSavedWithAmbulance;
|
int32 CStats::LivesSavedWithAmbulance;
|
||||||
int32 CStats::CriminalsCaught;
|
int32 CStats::CriminalsCaught;
|
||||||
int32 CStats::HighestLevelAmbulanceMission;
|
int32 CStats::HighestLevelAmbulanceMission;
|
||||||
|
int32 CStats::HighestLevelVigilanteMission;
|
||||||
|
int32 CStats::HighestLevelFireMission;
|
||||||
int32 CStats::FiresExtinguished;
|
int32 CStats::FiresExtinguished;
|
||||||
int32 CStats::TimeTakenDefuseMission;
|
|
||||||
int32 CStats::TotalNumberKillFrenzies;
|
int32 CStats::TotalNumberKillFrenzies;
|
||||||
int32 CStats::TotalNumberMissions;
|
int32 CStats::TotalNumberMissions;
|
||||||
int32 CStats::RoundsFiredByPlayer;
|
int32 CStats::RoundsFiredByPlayer;
|
||||||
int32 CStats::KgsOfExplosivesUsed;
|
int32 CStats::KgsOfExplosivesUsed;
|
||||||
int32 CStats::InstantHitsFiredByPlayer;
|
int32 CStats::BulletsThatHit;
|
||||||
int32 CStats::InstantHitsHitByPlayer;
|
|
||||||
int32 CStats::BestTimeBombDefusal;
|
int32 CStats::BestTimeBombDefusal;
|
||||||
int32 CStats::FastestTimes[CStats::TOTAL_FASTEST_TIMES];
|
int32 CStats::FastestTimes[CStats::TOTAL_FASTEST_TIMES];
|
||||||
int32 CStats::HighestScores[CStats::TOTAL_HIGHEST_SCORES];
|
int32 CStats::HighestScores[CStats::TOTAL_HIGHEST_SCORES];
|
||||||
int32 CStats::BestPositions[CStats::TOTAL_BEST_POSITIONS];
|
int32 CStats::BestPositions[CStats::TOTAL_BEST_POSITIONS];
|
||||||
|
bool CStats::PropertyOwned[CStats::TOTAL_PROPERTIES];
|
||||||
|
int32 CStats::NumPropertyOwned;
|
||||||
int32 CStats::PropertyDestroyed;
|
int32 CStats::PropertyDestroyed;
|
||||||
|
float CStats::HighestChaseValue;
|
||||||
|
int32 CStats::CheatedCount;
|
||||||
|
int32 CStats::ShowChaseStatOnScreen;
|
||||||
int32 CStats::PamphletMissionPassed;
|
int32 CStats::PamphletMissionPassed;
|
||||||
|
bool CStats::abSonyCDs[1];
|
||||||
|
int32 CStats::BloodRingKills;
|
||||||
|
int32 CStats::BloodRingTime;
|
||||||
|
float CStats::FavoriteRadioStationList[NUM_RADIOS];
|
||||||
|
|
||||||
int32 CStats::Sprayings;
|
int32 CStats::Sprayings;
|
||||||
float CStats::AutoPaintingBudget;
|
float CStats::AutoPaintingBudget;
|
||||||
int32 CStats::NoMoreHurricanes;
|
int32 CStats::NoMoreHurricanes;
|
||||||
float CStats::FashionBudget;
|
float CStats::FashionBudget;
|
||||||
|
float CStats::PropertyBudget;
|
||||||
|
float CStats::WeaponBudget;
|
||||||
int32 CStats::SafeHouseVisits;
|
int32 CStats::SafeHouseVisits;
|
||||||
int32 CStats::TyresPopped;
|
int32 CStats::TyresPopped;
|
||||||
|
|
||||||
|
int32 CStats::LongestWheelie;
|
||||||
|
int32 CStats::LongestStoppie;
|
||||||
|
int32 CStats::Longest2Wheel;
|
||||||
|
float CStats::LongestWheelieDist;
|
||||||
|
float CStats::LongestStoppieDist;
|
||||||
|
float CStats::Longest2WheelDist;
|
||||||
|
|
||||||
|
// --MIAMI: functions below are done except TODOs, but there are some to be moved from Frontend
|
||||||
|
|
||||||
void CStats::Init()
|
void CStats::Init()
|
||||||
{
|
{
|
||||||
PeopleKilledByOthers = 0;
|
PeopleKilledByOthers = 0;
|
||||||
PeopleKilledByPlayer = 0;
|
PeopleKilledByPlayer = 0;
|
||||||
RoundsFiredByPlayer = 0;
|
|
||||||
CarsExploded = 0;
|
CarsExploded = 0;
|
||||||
|
BoatsExploded = 0;
|
||||||
|
RoundsFiredByPlayer = 0;
|
||||||
|
for (int i = 0; i < NUM_PEDTYPES; i++)
|
||||||
|
PedsKilledOfThisType[i] = 0;
|
||||||
HelisDestroyed = 0;
|
HelisDestroyed = 0;
|
||||||
ProgressMade = 0;
|
ProgressMade = 0;
|
||||||
KgsOfExplosivesUsed = 0;
|
KgsOfExplosivesUsed = 0;
|
||||||
InstantHitsFiredByPlayer = 0;
|
BulletsThatHit = 0;
|
||||||
InstantHitsHitByPlayer = 0;
|
TyresPopped = 0;
|
||||||
HeadsPopped = 0;
|
HeadsPopped = 0;
|
||||||
|
WantedStarsAttained = 0;
|
||||||
|
WantedStarsEvaded = 0;
|
||||||
TimesArrested = 0;
|
TimesArrested = 0;
|
||||||
TimesDied = 0;
|
TimesDied = 0;
|
||||||
DaysPassed = 0;
|
DaysPassed = 0;
|
||||||
NumberOfUniqueJumpsFound = 0;
|
SafeHouseVisits = 0;
|
||||||
MaximumJumpFlips = 0;
|
Sprayings = 0;
|
||||||
MaximumJumpSpins = 0;
|
|
||||||
MaximumJumpDistance = 0;
|
MaximumJumpDistance = 0;
|
||||||
MaximumJumpHeight = 0;
|
MaximumJumpHeight = 0;
|
||||||
|
MaximumJumpFlips = 0;
|
||||||
|
MaximumJumpSpins = 0;
|
||||||
BestStuntJump = 0;
|
BestStuntJump = 0;
|
||||||
|
NumberOfUniqueJumpsFound = 0;
|
||||||
TotalNumberOfUniqueJumps = 0;
|
TotalNumberOfUniqueJumps = 0;
|
||||||
Record4x4One = 0;
|
|
||||||
Record4x4Two = 0;
|
|
||||||
PassengersDroppedOffWithTaxi = 0;
|
|
||||||
Record4x4Three = 0;
|
|
||||||
MoneyMadeWithTaxi = 0;
|
|
||||||
Record4x4Mayhem = 0;
|
|
||||||
LivesSavedWithAmbulance = 0;
|
|
||||||
ElBurroTime = 0;
|
|
||||||
CriminalsCaught = 0;
|
|
||||||
MissionsGiven = 0;
|
MissionsGiven = 0;
|
||||||
HighestLevelAmbulanceMission = 0;
|
|
||||||
MissionsPassed = 0;
|
MissionsPassed = 0;
|
||||||
FiresExtinguished = 0;
|
PassengersDroppedOffWithTaxi = 0;
|
||||||
|
MoneyMadeWithTaxi = 0;
|
||||||
DistanceTravelledOnFoot = 0;
|
DistanceTravelledOnFoot = 0;
|
||||||
TimeTakenDefuseMission = 0;
|
DistanceTravelledByCar = 0;
|
||||||
|
DistanceTravelledByBike = 0;
|
||||||
|
DistanceTravelledByBoat = 0;
|
||||||
|
DistanceTravelledByGolfCart = 0;
|
||||||
|
DistanceTravelledByHelicoptor = 0;
|
||||||
|
DistanceTravelledByPlane = 0; // FIX: Wasn't initialized
|
||||||
|
LivesSavedWithAmbulance = 0;
|
||||||
|
CriminalsCaught = 0;
|
||||||
|
HighestLevelVigilanteMission = 0;
|
||||||
|
HighestLevelAmbulanceMission = 0;
|
||||||
|
HighestLevelFireMission = 0;
|
||||||
|
FiresExtinguished = 0;
|
||||||
|
PhotosTaken = 0;
|
||||||
NumberKillFrenziesPassed = 0;
|
NumberKillFrenziesPassed = 0;
|
||||||
DistanceTravelledInVehicle = 0;
|
|
||||||
TotalNumberKillFrenzies = 0;
|
TotalNumberKillFrenzies = 0;
|
||||||
TotalNumberMissions = 0;
|
TotalNumberMissions = 0;
|
||||||
KillsSinceLastCheckpoint = 0;
|
FlightTime = 0;
|
||||||
TotalLegitimateKills = 0;
|
TimesDrowned = 0;
|
||||||
|
SeagullsKilled = 0;
|
||||||
|
WeaponBudget = 0.0f;
|
||||||
|
FashionBudget = 0.0f;
|
||||||
|
LoanSharks = 0.0f;
|
||||||
|
StoresKnockedOff = 0.0f;
|
||||||
|
MovieStunts = 0.0f;
|
||||||
|
Assassinations = 0.0f;
|
||||||
|
PizzasDelivered = 0.0f;
|
||||||
|
GarbagePickups = 0.0f;
|
||||||
|
IceCreamSold = 0.0f;
|
||||||
|
TopShootingRangeScore = 0.0f;
|
||||||
|
ShootingRank = 0.0f;
|
||||||
|
LongestWheelie = 0;
|
||||||
|
LongestStoppie = 0;
|
||||||
|
Longest2Wheel = 0;
|
||||||
|
LongestWheelieDist = 0.0f;
|
||||||
|
LongestStoppieDist = 0.0f;
|
||||||
|
Longest2WheelDist = 0.0f;
|
||||||
|
PropertyBudget = 0.0f;
|
||||||
|
AutoPaintingBudget = 0.0f;
|
||||||
|
PropertyDestroyed = 0;
|
||||||
|
HighestChaseValue = 0.0f;
|
||||||
|
CheatedCount = 0;
|
||||||
|
|
||||||
for (int i = 0; i < TOTAL_FASTEST_TIMES; i++)
|
for (int i = 0; i < TOTAL_FASTEST_TIMES; i++)
|
||||||
FastestTimes[i] = 0;
|
FastestTimes[i] = 0;
|
||||||
for (int i = 0; i < TOTAL_HIGHEST_SCORES; i++)
|
for (int i = 0; i < TOTAL_HIGHEST_SCORES; i++)
|
||||||
HighestScores[i] = 0;
|
HighestScores[i] = 0;
|
||||||
for (int i = 0; i < TOTAL_BEST_POSITIONS; i++)
|
for (int i = 0; i < TOTAL_BEST_POSITIONS; i++)
|
||||||
BestPositions[i] = INT_MAX;
|
BestPositions[i] = INT_MAX;
|
||||||
for (int i = 0; i < NUM_PEDTYPES; i++)
|
|
||||||
PedsKilledOfThisType[i] = 0;
|
KillsSinceLastCheckpoint = 0;
|
||||||
|
TotalLegitimateKills = 0;
|
||||||
IndustrialPassed = 0;
|
IndustrialPassed = 0;
|
||||||
CommercialPassed = 0;
|
CommercialPassed = 0;
|
||||||
SuburbanPassed = 0;
|
SuburbanPassed = 0;
|
||||||
|
PamphletMissionPassed = 0;
|
||||||
Sprayings = 0;
|
|
||||||
AutoPaintingBudget = 0.0f;
|
|
||||||
NoMoreHurricanes = 0;
|
NoMoreHurricanes = 0;
|
||||||
SafeHouseVisits = 0;
|
ShowChaseStatOnScreen = 0;
|
||||||
|
abSonyCDs[0] = 0;
|
||||||
|
// TODO(Miami): Change this with PopulateFavoriteRadioStationList(); !!
|
||||||
|
for (int i = 0; i < NUM_RADIOS; i++)
|
||||||
|
FavoriteRadioStationList[i] = 0.0f;
|
||||||
|
|
||||||
|
NumPropertyOwned = 0;
|
||||||
|
for (int i = 0; i < TOTAL_PROPERTIES; i++)
|
||||||
|
PropertyOwned[i] = false;
|
||||||
|
|
||||||
|
BloodRingKills = 0;
|
||||||
|
BloodRingTime = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CStats::RegisterFastestTime(int32 index, int32 time)
|
void CStats::RegisterFastestTime(int32 index, int32 time)
|
||||||
|
@ -152,31 +229,6 @@ void CStats::RegisterBestPosition(int32 index, int32 position)
|
||||||
BestPositions[index] = Min(BestPositions[index], position);
|
BestPositions[index] = Min(BestPositions[index], position);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CStats::RegisterElBurroTime(int32 time)
|
|
||||||
{
|
|
||||||
ElBurroTime = (ElBurroTime && ElBurroTime < time) ? ElBurroTime : time;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CStats::Register4x4OneTime(int32 time)
|
|
||||||
{
|
|
||||||
Record4x4One = (Record4x4One && Record4x4One < time) ? Record4x4One : time;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CStats::Register4x4TwoTime(int32 time)
|
|
||||||
{
|
|
||||||
Record4x4Two = (Record4x4Two && Record4x4Two < time) ? Record4x4Two : time;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CStats::Register4x4ThreeTime(int32 time)
|
|
||||||
{
|
|
||||||
Record4x4Three = (Record4x4Three && Record4x4Three < time) ? Record4x4Three : time;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CStats::Register4x4MayhemTime(int32 time)
|
|
||||||
{
|
|
||||||
Record4x4Mayhem = (Record4x4Mayhem && Record4x4Mayhem < time) ? Record4x4Mayhem : time;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CStats::AnotherLifeSavedWithAmbulance()
|
void CStats::AnotherLifeSavedWithAmbulance()
|
||||||
{
|
{
|
||||||
++LivesSavedWithAmbulance;
|
++LivesSavedWithAmbulance;
|
||||||
|
@ -192,16 +244,21 @@ void CStats::RegisterLevelAmbulanceMission(int32 level)
|
||||||
HighestLevelAmbulanceMission = Max(HighestLevelAmbulanceMission, level);
|
HighestLevelAmbulanceMission = Max(HighestLevelAmbulanceMission, level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CStats::RegisterLevelVigilanteMission(int32 level)
|
||||||
|
{
|
||||||
|
HighestLevelVigilanteMission = Max(HighestLevelVigilanteMission, level);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::RegisterLevelFireMission(int32 level)
|
||||||
|
{
|
||||||
|
HighestLevelFireMission = Max(HighestLevelFireMission, level);
|
||||||
|
}
|
||||||
|
|
||||||
void CStats::AnotherFireExtinguished()
|
void CStats::AnotherFireExtinguished()
|
||||||
{
|
{
|
||||||
++FiresExtinguished;
|
++FiresExtinguished;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CStats::RegisterTimeTakenDefuseMission(int32 time)
|
|
||||||
{
|
|
||||||
TimeTakenDefuseMission = (TimeTakenDefuseMission && TimeTakenDefuseMission < time) ? TimeTakenDefuseMission : time;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CStats::AnotherKillFrenzyPassed()
|
void CStats::AnotherKillFrenzyPassed()
|
||||||
{
|
{
|
||||||
++NumberKillFrenziesPassed;
|
++NumberKillFrenziesPassed;
|
||||||
|
@ -221,40 +278,88 @@ wchar *CStats::FindCriminalRatingString()
|
||||||
{
|
{
|
||||||
int rating = FindCriminalRatingNumber();
|
int rating = FindCriminalRatingNumber();
|
||||||
|
|
||||||
if (rating < 10) return TheText.Get("RATNG1");
|
if (rating < 0) {
|
||||||
if (rating < 25) return TheText.Get("RATNG2");
|
if (rating > -500) return TheText.Get("RATNG53");
|
||||||
if (rating < 70) return TheText.Get("RATNG3");
|
if (rating > -2000) return TheText.Get("RATNG54");
|
||||||
if (rating < 150) return TheText.Get("RATNG4");
|
if (rating > -4000) return TheText.Get("RATNG55");
|
||||||
if (rating < 250) return TheText.Get("RATNG5");
|
if (rating > -6000) return TheText.Get("RATNG56");
|
||||||
if (rating < 450) return TheText.Get("RATNG6");
|
return TheText.Get("RATNG57");
|
||||||
if (rating < 700) return TheText.Get("RATNG7");
|
}
|
||||||
if (rating < 1000) return TheText.Get("RATNG8");
|
if (rating < 20) return TheText.Get("RATNG1");
|
||||||
if (rating < 1400) return TheText.Get("RATNG9");
|
if (rating < 50) return TheText.Get("RATNG2");
|
||||||
if (rating < 1900) return TheText.Get("RATNG10");
|
if (rating < 75) return TheText.Get("RATNG3");
|
||||||
if (rating < 2500) return TheText.Get("RATNG11");
|
if (rating < 100) return TheText.Get("RATNG4");
|
||||||
if (rating < 3200) return TheText.Get("RATNG12");
|
if (rating < 120) return TheText.Get("RATNG5");
|
||||||
if (rating < 4000) return TheText.Get("RATNG13");
|
if (rating < 150) return TheText.Get("RATNG6");
|
||||||
if (rating < 5000) return TheText.Get("RATNG14");
|
if (rating < 200) return TheText.Get("RATNG7");
|
||||||
return TheText.Get("RATNG15");
|
if (rating < 240) return TheText.Get("RATNG8");
|
||||||
|
if (rating < 270) return TheText.Get("RATNG9");
|
||||||
|
if (rating < 300) return TheText.Get("RATNG10");
|
||||||
|
if (rating < 335) return TheText.Get("RATNG11");
|
||||||
|
if (rating < 370) return TheText.Get("RATNG12");
|
||||||
|
if (rating < 400) return TheText.Get("RATNG13");
|
||||||
|
if (rating < 450) return TheText.Get("RATNG14");
|
||||||
|
if (rating < 500) return TheText.Get("RATNG15");
|
||||||
|
if (rating < 550) return TheText.Get("RATNG16");
|
||||||
|
if (rating < 600) return TheText.Get("RATNG17");
|
||||||
|
if (rating < 610) return TheText.Get("RATNG18");
|
||||||
|
if (rating < 650) return TheText.Get("RATNG19");
|
||||||
|
if (rating < 700) return TheText.Get("RATNG20");
|
||||||
|
if (rating < 850) return TheText.Get("RATNG21");
|
||||||
|
if (rating < 1000) return TheText.Get("RATNG22");
|
||||||
|
if (rating < 1005) return TheText.Get("RATNG23");
|
||||||
|
if (rating < 1150) return TheText.Get("RATNG24");
|
||||||
|
if (rating < 1300) return TheText.Get(TimesArrested > 0 ? "RATNG25" : "RATNG24");
|
||||||
|
if (rating < 1500) return TheText.Get("RATNG26");
|
||||||
|
if (rating < 1700) return TheText.Get("RATNG27");
|
||||||
|
if (rating < 2000) return TheText.Get("RATNG28");
|
||||||
|
if (rating < 2100) return TheText.Get("RATNG29");
|
||||||
|
if (rating < 2300) return TheText.Get("RATNG30");
|
||||||
|
if (rating < 2500) return TheText.Get("RATNG31");
|
||||||
|
if (rating < 2750) return TheText.Get("RATNG32");
|
||||||
|
if (rating < 3000) return TheText.Get("RATNG33");
|
||||||
|
if (rating < 3500) return TheText.Get("RATNG34");
|
||||||
|
if (rating < 4000) return TheText.Get("RATNG35");
|
||||||
|
if (rating < 5000) return TheText.Get("RATNG36");
|
||||||
|
if (rating < 7500) return TheText.Get("RATNG37");
|
||||||
|
if (rating < 10000) return TheText.Get("RATNG38");
|
||||||
|
if (rating < 20000) return TheText.Get("RATNG39");
|
||||||
|
if (rating < 30000) return TheText.Get("RATNG40");
|
||||||
|
if (rating < 40000) return TheText.Get("RATNG41");
|
||||||
|
if (rating < 50000) return TheText.Get("RATNG42");
|
||||||
|
if (rating < 65000) return TheText.Get("RATNG43");
|
||||||
|
if (rating < 80000) return TheText.Get("RATNG44");
|
||||||
|
if (rating < 100000) return TheText.Get("RATNG45");
|
||||||
|
if (rating < 150000) return TheText.Get("RATNG46");
|
||||||
|
if (rating < 200000) return TheText.Get("RATNG47");
|
||||||
|
if (rating < 300000) return TheText.Get("RATNG48");
|
||||||
|
if (rating < 375000) return TheText.Get("RATNG49");
|
||||||
|
if (rating < 500000) return TheText.Get(FlightTime / 60000 / 60 > 10 ? "RATNG50" : "RATNG49");
|
||||||
|
if (rating < 1000000) return TheText.Get("RATNG51");
|
||||||
|
return TheText.Get(CWorld::Players[CWorld::PlayerInFocus].m_nVisibleMoney > 10000000 ? "RATNG52" : "RATNG51");
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 CStats::FindCriminalRatingNumber()
|
int32 CStats::FindCriminalRatingNumber()
|
||||||
{
|
{
|
||||||
int32 rating;
|
int32 rating;
|
||||||
|
|
||||||
rating = FiresExtinguished + 10 * HighestLevelAmbulanceMission + CriminalsCaught + LivesSavedWithAmbulance
|
rating = FiresExtinguished + 10 * HighestLevelFireMission + 10 * HighestLevelAmbulanceMission
|
||||||
|
+ CriminalsCaught + LivesSavedWithAmbulance
|
||||||
+ 30 * HelisDestroyed + TotalLegitimateKills - 3 * TimesArrested - 3 * TimesDied
|
+ 30 * HelisDestroyed + TotalLegitimateKills - 3 * TimesArrested - 3 * TimesDied
|
||||||
+ CWorld::Players[CWorld::PlayerInFocus].m_nMoney / 5000;
|
+ CWorld::Players[CWorld::PlayerInFocus].m_nMoney / 5000;
|
||||||
if (rating <= 0) rating = 0;
|
if (CPad::bHasPlayerCheated || CheatedCount > 0) {
|
||||||
|
rating -= CheatedCount;
|
||||||
|
if (rating <= -10000)
|
||||||
|
rating = -10000;
|
||||||
|
|
||||||
if (InstantHitsFiredByPlayer > 100)
|
} else if (rating <= 0) {
|
||||||
rating += (float)CStats::InstantHitsHitByPlayer / (float)CStats::InstantHitsFiredByPlayer * 500.0f;
|
rating = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RoundsFiredByPlayer > 100)
|
||||||
|
rating += (float)CStats::BulletsThatHit / (float)CStats::RoundsFiredByPlayer * 500.0f;
|
||||||
if (TotalProgressInGame)
|
if (TotalProgressInGame)
|
||||||
rating += (float)CStats::ProgressMade / (float)CStats::TotalProgressInGame * 1000.0f;
|
rating += (float)CStats::ProgressMade / (float)CStats::TotalProgressInGame * 1000.0f;
|
||||||
if (!IndustrialPassed && rating >= 3521)
|
|
||||||
rating = 3521;
|
|
||||||
if (!CommercialPassed && rating >= 4552)
|
|
||||||
rating = 4552;
|
|
||||||
return rating;
|
return rating;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,11 +371,80 @@ float CStats::GetPercentageProgress()
|
||||||
return Min(percentCompleted, 100.0f);
|
return Min(percentCompleted, 100.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CStats::MoneySpentOnWeapons(int32 money)
|
||||||
|
{
|
||||||
|
WeaponBudget += money;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::MoneySpentOnProperty(int32 money)
|
||||||
|
{
|
||||||
|
PropertyBudget += money;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::MoneySpentOnAutoPainting(int32 money)
|
||||||
|
{
|
||||||
|
AutoPaintingBudget += money;
|
||||||
|
}
|
||||||
|
|
||||||
void CStats::MoneySpentOnFashion(int32 money)
|
void CStats::MoneySpentOnFashion(int32 money)
|
||||||
{
|
{
|
||||||
FashionBudget += money;
|
FashionBudget += money;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CStats::NumOfVisitsFromLoanSharks(int32 num)
|
||||||
|
{
|
||||||
|
LoanSharks += num;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::NumOfStoresKnockedOff(int32 num)
|
||||||
|
{
|
||||||
|
StoresKnockedOff += num;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::NumOfMovieStunts(int32 num)
|
||||||
|
{
|
||||||
|
MovieStunts += num;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::NumOfAssassinations(int32 num)
|
||||||
|
{
|
||||||
|
Assassinations += num;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::NumOfPizzasDelivered(int32 num)
|
||||||
|
{
|
||||||
|
PizzasDelivered += num;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::NumOfGarbagePickups(int32 num)
|
||||||
|
{
|
||||||
|
GarbagePickups += num;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::NumOfIceCreamSold(int32 num)
|
||||||
|
{
|
||||||
|
IceCreamSold += num;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::AddNumBloodRingKills(int32 num)
|
||||||
|
{
|
||||||
|
BloodRingKills += num;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::LongestTimeInBloodRing(int32 time)
|
||||||
|
{
|
||||||
|
if (BloodRingTime < time)
|
||||||
|
BloodRingTime = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStats::AddPropertyAsOwned(int32 id)
|
||||||
|
{
|
||||||
|
if (!PropertyOwned[id]) {
|
||||||
|
PropertyOwned[id] = true;
|
||||||
|
++NumPropertyOwned;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CStats::SaveStats(uint8 *buf, uint32 *size)
|
void CStats::SaveStats(uint8 *buf, uint32 *size)
|
||||||
{
|
{
|
||||||
CheckPointReachedSuccessfully();
|
CheckPointReachedSuccessfully();
|
||||||
|
@ -278,18 +452,23 @@ void CStats::SaveStats(uint8 *buf, uint32 *size)
|
||||||
*size = sizeof(PeopleKilledByPlayer) +
|
*size = sizeof(PeopleKilledByPlayer) +
|
||||||
sizeof(PeopleKilledByOthers) +
|
sizeof(PeopleKilledByOthers) +
|
||||||
sizeof(CarsExploded) +
|
sizeof(CarsExploded) +
|
||||||
|
sizeof(BoatsExploded) +
|
||||||
|
sizeof(TyresPopped) +
|
||||||
sizeof(RoundsFiredByPlayer) +
|
sizeof(RoundsFiredByPlayer) +
|
||||||
sizeof(PedsKilledOfThisType) +
|
sizeof(PedsKilledOfThisType) +
|
||||||
sizeof(HelisDestroyed) +
|
sizeof(HelisDestroyed) +
|
||||||
sizeof(ProgressMade) +
|
sizeof(ProgressMade) +
|
||||||
sizeof(TotalProgressInGame) +
|
sizeof(TotalProgressInGame) +
|
||||||
sizeof(KgsOfExplosivesUsed) +
|
sizeof(KgsOfExplosivesUsed) +
|
||||||
sizeof(InstantHitsFiredByPlayer) +
|
sizeof(BulletsThatHit) +
|
||||||
sizeof(InstantHitsHitByPlayer) +
|
|
||||||
sizeof(HeadsPopped) +
|
sizeof(HeadsPopped) +
|
||||||
|
sizeof(WantedStarsAttained) +
|
||||||
|
sizeof(WantedStarsEvaded) +
|
||||||
sizeof(TimesArrested) +
|
sizeof(TimesArrested) +
|
||||||
sizeof(TimesDied) +
|
sizeof(TimesDied) +
|
||||||
sizeof(DaysPassed) +
|
sizeof(DaysPassed) +
|
||||||
|
sizeof(SafeHouseVisits) +
|
||||||
|
sizeof(Sprayings) +
|
||||||
sizeof(MaximumJumpDistance) +
|
sizeof(MaximumJumpDistance) +
|
||||||
sizeof(MaximumJumpHeight) +
|
sizeof(MaximumJumpHeight) +
|
||||||
sizeof(MaximumJumpFlips) +
|
sizeof(MaximumJumpFlips) +
|
||||||
|
@ -298,50 +477,88 @@ void CStats::SaveStats(uint8 *buf, uint32 *size)
|
||||||
sizeof(NumberOfUniqueJumpsFound) +
|
sizeof(NumberOfUniqueJumpsFound) +
|
||||||
sizeof(TotalNumberOfUniqueJumps) +
|
sizeof(TotalNumberOfUniqueJumps) +
|
||||||
sizeof(MissionsGiven) +
|
sizeof(MissionsGiven) +
|
||||||
sizeof(MissionsPassed) +
|
|
||||||
sizeof(PassengersDroppedOffWithTaxi) +
|
sizeof(PassengersDroppedOffWithTaxi) +
|
||||||
sizeof(MoneyMadeWithTaxi) +
|
sizeof(MoneyMadeWithTaxi) +
|
||||||
sizeof(IndustrialPassed) +
|
sizeof(IndustrialPassed) +
|
||||||
sizeof(CommercialPassed) +
|
sizeof(CommercialPassed) +
|
||||||
sizeof(SuburbanPassed) +
|
sizeof(SuburbanPassed) +
|
||||||
sizeof(ElBurroTime) +
|
sizeof(PamphletMissionPassed) +
|
||||||
|
sizeof(NoMoreHurricanes) +
|
||||||
sizeof(DistanceTravelledOnFoot) +
|
sizeof(DistanceTravelledOnFoot) +
|
||||||
sizeof(DistanceTravelledInVehicle) +
|
sizeof(DistanceTravelledByCar) +
|
||||||
sizeof(Record4x4One) +
|
sizeof(DistanceTravelledByBike) +
|
||||||
sizeof(Record4x4Two) +
|
sizeof(DistanceTravelledByBoat) +
|
||||||
sizeof(Record4x4Three) +
|
sizeof(DistanceTravelledByGolfCart) +
|
||||||
sizeof(Record4x4Mayhem) +
|
sizeof(DistanceTravelledByHelicoptor) +
|
||||||
|
sizeof(DistanceTravelledByPlane) +
|
||||||
sizeof(LivesSavedWithAmbulance) +
|
sizeof(LivesSavedWithAmbulance) +
|
||||||
sizeof(CriminalsCaught) +
|
sizeof(CriminalsCaught) +
|
||||||
sizeof(HighestLevelAmbulanceMission) +
|
|
||||||
sizeof(FiresExtinguished) +
|
sizeof(FiresExtinguished) +
|
||||||
sizeof(TimeTakenDefuseMission) +
|
sizeof(HighestLevelVigilanteMission) +
|
||||||
|
sizeof(HighestLevelAmbulanceMission) +
|
||||||
|
sizeof(HighestLevelFireMission) +
|
||||||
|
sizeof(PhotosTaken) +
|
||||||
sizeof(NumberKillFrenziesPassed) +
|
sizeof(NumberKillFrenziesPassed) +
|
||||||
sizeof(TotalNumberKillFrenzies) +
|
sizeof(TotalNumberKillFrenzies) +
|
||||||
sizeof(TotalNumberMissions) +
|
sizeof(TotalNumberMissions) +
|
||||||
|
sizeof(FlightTime) +
|
||||||
|
sizeof(TimesDrowned) +
|
||||||
|
sizeof(SeagullsKilled) +
|
||||||
|
sizeof(WeaponBudget) +
|
||||||
|
sizeof(FashionBudget) +
|
||||||
|
sizeof(LoanSharks) +
|
||||||
|
sizeof(StoresKnockedOff) +
|
||||||
|
sizeof(MovieStunts) +
|
||||||
|
sizeof(Assassinations) +
|
||||||
|
sizeof(PizzasDelivered) +
|
||||||
|
sizeof(GarbagePickups) +
|
||||||
|
sizeof(IceCreamSold) +
|
||||||
|
sizeof(TopShootingRangeScore) +
|
||||||
|
sizeof(ShootingRank) +
|
||||||
|
sizeof(LongestWheelie) +
|
||||||
|
sizeof(LongestStoppie) +
|
||||||
|
sizeof(Longest2Wheel) +
|
||||||
|
sizeof(LongestWheelieDist) +
|
||||||
|
sizeof(LongestStoppieDist) +
|
||||||
|
sizeof(Longest2WheelDist) +
|
||||||
|
sizeof(PropertyBudget) +
|
||||||
|
sizeof(AutoPaintingBudget) +
|
||||||
|
sizeof(PropertyDestroyed) +
|
||||||
|
sizeof(NumPropertyOwned) +
|
||||||
|
sizeof(BloodRingKills) +
|
||||||
|
sizeof(BloodRingTime) +
|
||||||
|
sizeof(PropertyOwned) +
|
||||||
|
sizeof(HighestChaseValue) +
|
||||||
sizeof(FastestTimes) +
|
sizeof(FastestTimes) +
|
||||||
sizeof(HighestScores) +
|
sizeof(HighestScores) +
|
||||||
sizeof(BestPositions) +
|
sizeof(BestPositions) +
|
||||||
sizeof(KillsSinceLastCheckpoint) +
|
sizeof(KillsSinceLastCheckpoint) +
|
||||||
sizeof(TotalLegitimateKills) +
|
sizeof(TotalLegitimateKills) +
|
||||||
sizeof(LastMissionPassedName);
|
sizeof(LastMissionPassedName) +
|
||||||
|
sizeof(CheatedCount) +
|
||||||
|
sizeof(FavoriteRadioStationList);
|
||||||
|
|
||||||
#define CopyToBuf(buf, data) memcpy(buf, &data, sizeof(data)); buf += sizeof(data);
|
#define CopyToBuf(buf, data) memcpy(buf, &data, sizeof(data)); buf += sizeof(data);
|
||||||
CopyToBuf(buf, PeopleKilledByPlayer);
|
CopyToBuf(buf, PeopleKilledByPlayer);
|
||||||
CopyToBuf(buf, PeopleKilledByOthers);
|
CopyToBuf(buf, PeopleKilledByOthers);
|
||||||
CopyToBuf(buf, CarsExploded);
|
CopyToBuf(buf, CarsExploded);
|
||||||
|
CopyToBuf(buf, BoatsExploded);
|
||||||
|
CopyToBuf(buf, TyresPopped);
|
||||||
CopyToBuf(buf, RoundsFiredByPlayer);
|
CopyToBuf(buf, RoundsFiredByPlayer);
|
||||||
CopyToBuf(buf, PedsKilledOfThisType);
|
CopyToBuf(buf, PedsKilledOfThisType);
|
||||||
CopyToBuf(buf, HelisDestroyed);
|
CopyToBuf(buf, HelisDestroyed);
|
||||||
CopyToBuf(buf, ProgressMade);
|
CopyToBuf(buf, ProgressMade);
|
||||||
CopyToBuf(buf, TotalProgressInGame);
|
CopyToBuf(buf, TotalProgressInGame);
|
||||||
CopyToBuf(buf, KgsOfExplosivesUsed);
|
CopyToBuf(buf, KgsOfExplosivesUsed);
|
||||||
CopyToBuf(buf, InstantHitsFiredByPlayer);
|
CopyToBuf(buf, BulletsThatHit);
|
||||||
CopyToBuf(buf, InstantHitsHitByPlayer);
|
|
||||||
CopyToBuf(buf, HeadsPopped);
|
CopyToBuf(buf, HeadsPopped);
|
||||||
|
CopyToBuf(buf, WantedStarsAttained);
|
||||||
|
CopyToBuf(buf, WantedStarsEvaded);
|
||||||
CopyToBuf(buf, TimesArrested);
|
CopyToBuf(buf, TimesArrested);
|
||||||
CopyToBuf(buf, TimesDied);
|
CopyToBuf(buf, TimesDied);
|
||||||
CopyToBuf(buf, DaysPassed);
|
CopyToBuf(buf, DaysPassed);
|
||||||
|
CopyToBuf(buf, SafeHouseVisits);
|
||||||
|
CopyToBuf(buf, Sprayings);
|
||||||
CopyToBuf(buf, MaximumJumpDistance);
|
CopyToBuf(buf, MaximumJumpDistance);
|
||||||
CopyToBuf(buf, MaximumJumpHeight);
|
CopyToBuf(buf, MaximumJumpHeight);
|
||||||
CopyToBuf(buf, MaximumJumpFlips);
|
CopyToBuf(buf, MaximumJumpFlips);
|
||||||
|
@ -350,33 +567,67 @@ void CStats::SaveStats(uint8 *buf, uint32 *size)
|
||||||
CopyToBuf(buf, NumberOfUniqueJumpsFound);
|
CopyToBuf(buf, NumberOfUniqueJumpsFound);
|
||||||
CopyToBuf(buf, TotalNumberOfUniqueJumps);
|
CopyToBuf(buf, TotalNumberOfUniqueJumps);
|
||||||
CopyToBuf(buf, MissionsGiven);
|
CopyToBuf(buf, MissionsGiven);
|
||||||
CopyToBuf(buf, MissionsPassed);
|
|
||||||
CopyToBuf(buf, PassengersDroppedOffWithTaxi);
|
CopyToBuf(buf, PassengersDroppedOffWithTaxi);
|
||||||
CopyToBuf(buf, MoneyMadeWithTaxi);
|
CopyToBuf(buf, MoneyMadeWithTaxi);
|
||||||
CopyToBuf(buf, IndustrialPassed);
|
CopyToBuf(buf, IndustrialPassed);
|
||||||
CopyToBuf(buf, CommercialPassed);
|
CopyToBuf(buf, CommercialPassed);
|
||||||
CopyToBuf(buf, SuburbanPassed);
|
CopyToBuf(buf, SuburbanPassed);
|
||||||
CopyToBuf(buf, ElBurroTime);
|
CopyToBuf(buf, PamphletMissionPassed);
|
||||||
|
CopyToBuf(buf, NoMoreHurricanes);
|
||||||
CopyToBuf(buf, DistanceTravelledOnFoot);
|
CopyToBuf(buf, DistanceTravelledOnFoot);
|
||||||
CopyToBuf(buf, DistanceTravelledInVehicle);
|
CopyToBuf(buf, DistanceTravelledByCar);
|
||||||
CopyToBuf(buf, Record4x4One);
|
CopyToBuf(buf, DistanceTravelledByBike);
|
||||||
CopyToBuf(buf, Record4x4Two);
|
CopyToBuf(buf, DistanceTravelledByBoat);
|
||||||
CopyToBuf(buf, Record4x4Three);
|
CopyToBuf(buf, DistanceTravelledByGolfCart);
|
||||||
CopyToBuf(buf, Record4x4Mayhem);
|
CopyToBuf(buf, DistanceTravelledByHelicoptor);
|
||||||
|
CopyToBuf(buf, DistanceTravelledByPlane);
|
||||||
CopyToBuf(buf, LivesSavedWithAmbulance);
|
CopyToBuf(buf, LivesSavedWithAmbulance);
|
||||||
CopyToBuf(buf, CriminalsCaught);
|
CopyToBuf(buf, CriminalsCaught);
|
||||||
CopyToBuf(buf, HighestLevelAmbulanceMission);
|
|
||||||
CopyToBuf(buf, FiresExtinguished);
|
CopyToBuf(buf, FiresExtinguished);
|
||||||
CopyToBuf(buf, TimeTakenDefuseMission);
|
CopyToBuf(buf, HighestLevelVigilanteMission);
|
||||||
|
CopyToBuf(buf, HighestLevelAmbulanceMission);
|
||||||
|
CopyToBuf(buf, HighestLevelFireMission);
|
||||||
|
CopyToBuf(buf, PhotosTaken);
|
||||||
CopyToBuf(buf, NumberKillFrenziesPassed);
|
CopyToBuf(buf, NumberKillFrenziesPassed);
|
||||||
CopyToBuf(buf, TotalNumberKillFrenzies);
|
CopyToBuf(buf, TotalNumberKillFrenzies);
|
||||||
CopyToBuf(buf, TotalNumberMissions);
|
CopyToBuf(buf, TotalNumberMissions);
|
||||||
|
CopyToBuf(buf, FlightTime);
|
||||||
|
CopyToBuf(buf, TimesDrowned);
|
||||||
|
CopyToBuf(buf, SeagullsKilled);
|
||||||
|
CopyToBuf(buf, WeaponBudget);
|
||||||
|
CopyToBuf(buf, FashionBudget);
|
||||||
|
CopyToBuf(buf, LoanSharks);
|
||||||
|
CopyToBuf(buf, StoresKnockedOff);
|
||||||
|
CopyToBuf(buf, MovieStunts);
|
||||||
|
CopyToBuf(buf, Assassinations);
|
||||||
|
CopyToBuf(buf, PizzasDelivered);
|
||||||
|
CopyToBuf(buf, GarbagePickups);
|
||||||
|
CopyToBuf(buf, IceCreamSold);
|
||||||
|
CopyToBuf(buf, TopShootingRangeScore);
|
||||||
|
CopyToBuf(buf, ShootingRank);
|
||||||
|
CopyToBuf(buf, LongestWheelie);
|
||||||
|
CopyToBuf(buf, LongestStoppie);
|
||||||
|
CopyToBuf(buf, Longest2Wheel);
|
||||||
|
CopyToBuf(buf, LongestWheelieDist);
|
||||||
|
CopyToBuf(buf, LongestStoppieDist);
|
||||||
|
CopyToBuf(buf, Longest2WheelDist);
|
||||||
|
CopyToBuf(buf, PropertyBudget);
|
||||||
|
CopyToBuf(buf, AutoPaintingBudget);
|
||||||
|
CopyToBuf(buf, PropertyDestroyed);
|
||||||
|
CopyToBuf(buf, NumPropertyOwned);
|
||||||
|
CopyToBuf(buf, BloodRingKills);
|
||||||
|
CopyToBuf(buf, BloodRingTime);
|
||||||
|
CopyToBuf(buf, PropertyOwned);
|
||||||
|
CopyToBuf(buf, HighestChaseValue);
|
||||||
CopyToBuf(buf, FastestTimes);
|
CopyToBuf(buf, FastestTimes);
|
||||||
CopyToBuf(buf, HighestScores);
|
CopyToBuf(buf, HighestScores);
|
||||||
CopyToBuf(buf, BestPositions);
|
CopyToBuf(buf, BestPositions);
|
||||||
CopyToBuf(buf, KillsSinceLastCheckpoint);
|
CopyToBuf(buf, KillsSinceLastCheckpoint);
|
||||||
CopyToBuf(buf, TotalLegitimateKills);
|
CopyToBuf(buf, TotalLegitimateKills);
|
||||||
CopyToBuf(buf, LastMissionPassedName);
|
CopyToBuf(buf, LastMissionPassedName);
|
||||||
|
CopyToBuf(buf, CheatedCount);
|
||||||
|
// TODO(Miami): Set favourite radio stations!!
|
||||||
|
CopyToBuf(buf, FavoriteRadioStationList);
|
||||||
|
|
||||||
assert(buf - buf_start == *size);
|
assert(buf - buf_start == *size);
|
||||||
#undef CopyToBuf
|
#undef CopyToBuf
|
||||||
|
@ -391,18 +642,23 @@ void CStats::LoadStats(uint8 *buf, uint32 size)
|
||||||
CopyFromBuf(buf, PeopleKilledByPlayer);
|
CopyFromBuf(buf, PeopleKilledByPlayer);
|
||||||
CopyFromBuf(buf, PeopleKilledByOthers);
|
CopyFromBuf(buf, PeopleKilledByOthers);
|
||||||
CopyFromBuf(buf, CarsExploded);
|
CopyFromBuf(buf, CarsExploded);
|
||||||
|
CopyFromBuf(buf, BoatsExploded);
|
||||||
|
CopyFromBuf(buf, TyresPopped);
|
||||||
CopyFromBuf(buf, RoundsFiredByPlayer);
|
CopyFromBuf(buf, RoundsFiredByPlayer);
|
||||||
CopyFromBuf(buf, PedsKilledOfThisType);
|
CopyFromBuf(buf, PedsKilledOfThisType);
|
||||||
CopyFromBuf(buf, HelisDestroyed);
|
CopyFromBuf(buf, HelisDestroyed);
|
||||||
CopyFromBuf(buf, ProgressMade);
|
CopyFromBuf(buf, ProgressMade);
|
||||||
CopyFromBuf(buf, TotalProgressInGame);
|
CopyFromBuf(buf, TotalProgressInGame);
|
||||||
CopyFromBuf(buf, KgsOfExplosivesUsed);
|
CopyFromBuf(buf, KgsOfExplosivesUsed);
|
||||||
CopyFromBuf(buf, InstantHitsFiredByPlayer);
|
CopyFromBuf(buf, BulletsThatHit);
|
||||||
CopyFromBuf(buf, InstantHitsHitByPlayer);
|
|
||||||
CopyFromBuf(buf, HeadsPopped);
|
CopyFromBuf(buf, HeadsPopped);
|
||||||
|
CopyFromBuf(buf, WantedStarsAttained);
|
||||||
|
CopyFromBuf(buf, WantedStarsEvaded);
|
||||||
CopyFromBuf(buf, TimesArrested);
|
CopyFromBuf(buf, TimesArrested);
|
||||||
CopyFromBuf(buf, TimesDied);
|
CopyFromBuf(buf, TimesDied);
|
||||||
CopyFromBuf(buf, DaysPassed);
|
CopyFromBuf(buf, DaysPassed);
|
||||||
|
CopyFromBuf(buf, SafeHouseVisits);
|
||||||
|
CopyFromBuf(buf, Sprayings);
|
||||||
CopyFromBuf(buf, MaximumJumpDistance);
|
CopyFromBuf(buf, MaximumJumpDistance);
|
||||||
CopyFromBuf(buf, MaximumJumpHeight);
|
CopyFromBuf(buf, MaximumJumpHeight);
|
||||||
CopyFromBuf(buf, MaximumJumpFlips);
|
CopyFromBuf(buf, MaximumJumpFlips);
|
||||||
|
@ -411,33 +667,66 @@ void CStats::LoadStats(uint8 *buf, uint32 size)
|
||||||
CopyFromBuf(buf, NumberOfUniqueJumpsFound);
|
CopyFromBuf(buf, NumberOfUniqueJumpsFound);
|
||||||
CopyFromBuf(buf, TotalNumberOfUniqueJumps);
|
CopyFromBuf(buf, TotalNumberOfUniqueJumps);
|
||||||
CopyFromBuf(buf, MissionsGiven);
|
CopyFromBuf(buf, MissionsGiven);
|
||||||
CopyFromBuf(buf, MissionsPassed);
|
|
||||||
CopyFromBuf(buf, PassengersDroppedOffWithTaxi);
|
CopyFromBuf(buf, PassengersDroppedOffWithTaxi);
|
||||||
CopyFromBuf(buf, MoneyMadeWithTaxi);
|
CopyFromBuf(buf, MoneyMadeWithTaxi);
|
||||||
CopyFromBuf(buf, IndustrialPassed);
|
CopyFromBuf(buf, IndustrialPassed);
|
||||||
CopyFromBuf(buf, CommercialPassed);
|
CopyFromBuf(buf, CommercialPassed);
|
||||||
CopyFromBuf(buf, SuburbanPassed);
|
CopyFromBuf(buf, SuburbanPassed);
|
||||||
CopyFromBuf(buf, ElBurroTime);
|
CopyFromBuf(buf, PamphletMissionPassed);
|
||||||
|
CopyFromBuf(buf, NoMoreHurricanes);
|
||||||
CopyFromBuf(buf, DistanceTravelledOnFoot);
|
CopyFromBuf(buf, DistanceTravelledOnFoot);
|
||||||
CopyFromBuf(buf, DistanceTravelledInVehicle);
|
CopyFromBuf(buf, DistanceTravelledByCar);
|
||||||
CopyFromBuf(buf, Record4x4One);
|
CopyFromBuf(buf, DistanceTravelledByBike);
|
||||||
CopyFromBuf(buf, Record4x4Two);
|
CopyFromBuf(buf, DistanceTravelledByBoat);
|
||||||
CopyFromBuf(buf, Record4x4Three);
|
CopyFromBuf(buf, DistanceTravelledByGolfCart);
|
||||||
CopyFromBuf(buf, Record4x4Mayhem);
|
CopyFromBuf(buf, DistanceTravelledByHelicoptor);
|
||||||
|
CopyFromBuf(buf, DistanceTravelledByPlane);
|
||||||
CopyFromBuf(buf, LivesSavedWithAmbulance);
|
CopyFromBuf(buf, LivesSavedWithAmbulance);
|
||||||
CopyFromBuf(buf, CriminalsCaught);
|
CopyFromBuf(buf, CriminalsCaught);
|
||||||
CopyFromBuf(buf, HighestLevelAmbulanceMission);
|
|
||||||
CopyFromBuf(buf, FiresExtinguished);
|
CopyFromBuf(buf, FiresExtinguished);
|
||||||
CopyFromBuf(buf, TimeTakenDefuseMission);
|
CopyFromBuf(buf, HighestLevelVigilanteMission);
|
||||||
|
CopyFromBuf(buf, HighestLevelAmbulanceMission);
|
||||||
|
CopyFromBuf(buf, HighestLevelFireMission);
|
||||||
|
CopyFromBuf(buf, PhotosTaken);
|
||||||
CopyFromBuf(buf, NumberKillFrenziesPassed);
|
CopyFromBuf(buf, NumberKillFrenziesPassed);
|
||||||
CopyFromBuf(buf, TotalNumberKillFrenzies);
|
CopyFromBuf(buf, TotalNumberKillFrenzies);
|
||||||
CopyFromBuf(buf, TotalNumberMissions);
|
CopyFromBuf(buf, TotalNumberMissions);
|
||||||
|
CopyFromBuf(buf, FlightTime);
|
||||||
|
CopyFromBuf(buf, TimesDrowned);
|
||||||
|
CopyFromBuf(buf, SeagullsKilled);
|
||||||
|
CopyFromBuf(buf, WeaponBudget);
|
||||||
|
CopyFromBuf(buf, FashionBudget);
|
||||||
|
CopyFromBuf(buf, LoanSharks);
|
||||||
|
CopyFromBuf(buf, StoresKnockedOff);
|
||||||
|
CopyFromBuf(buf, MovieStunts);
|
||||||
|
CopyFromBuf(buf, Assassinations);
|
||||||
|
CopyFromBuf(buf, PizzasDelivered);
|
||||||
|
CopyFromBuf(buf, GarbagePickups);
|
||||||
|
CopyFromBuf(buf, IceCreamSold);
|
||||||
|
CopyFromBuf(buf, TopShootingRangeScore);
|
||||||
|
CopyFromBuf(buf, ShootingRank);
|
||||||
|
CopyFromBuf(buf, LongestWheelie);
|
||||||
|
CopyFromBuf(buf, LongestStoppie);
|
||||||
|
CopyFromBuf(buf, Longest2Wheel);
|
||||||
|
CopyFromBuf(buf, LongestWheelieDist);
|
||||||
|
CopyFromBuf(buf, LongestStoppieDist);
|
||||||
|
CopyFromBuf(buf, Longest2WheelDist);
|
||||||
|
CopyFromBuf(buf, PropertyBudget);
|
||||||
|
CopyFromBuf(buf, AutoPaintingBudget);
|
||||||
|
CopyFromBuf(buf, PropertyDestroyed);
|
||||||
|
CopyFromBuf(buf, NumPropertyOwned);
|
||||||
|
CopyFromBuf(buf, BloodRingKills);
|
||||||
|
CopyFromBuf(buf, BloodRingTime);
|
||||||
|
CopyFromBuf(buf, PropertyOwned);
|
||||||
|
CopyFromBuf(buf, HighestChaseValue);
|
||||||
CopyFromBuf(buf, FastestTimes);
|
CopyFromBuf(buf, FastestTimes);
|
||||||
CopyFromBuf(buf, HighestScores);
|
CopyFromBuf(buf, HighestScores);
|
||||||
CopyFromBuf(buf, BestPositions);
|
CopyFromBuf(buf, BestPositions);
|
||||||
CopyFromBuf(buf, KillsSinceLastCheckpoint);
|
CopyFromBuf(buf, KillsSinceLastCheckpoint);
|
||||||
CopyFromBuf(buf, TotalLegitimateKills);
|
CopyFromBuf(buf, TotalLegitimateKills);
|
||||||
CopyFromBuf(buf, LastMissionPassedName);
|
CopyFromBuf(buf, LastMissionPassedName);
|
||||||
|
CopyFromBuf(buf, CheatedCount);
|
||||||
|
CopyFromBuf(buf, FavoriteRadioStationList);
|
||||||
|
|
||||||
assert(buf - buf_start == size);
|
assert(buf - buf_start == size);
|
||||||
#undef CopyFromBuf
|
#undef CopyFromBuf
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "PedType.h"
|
#include "PedType.h"
|
||||||
|
#include "audio_enums.h"
|
||||||
|
|
||||||
class CStats
|
class CStats
|
||||||
{
|
{
|
||||||
|
@ -8,11 +9,10 @@ public:
|
||||||
enum {
|
enum {
|
||||||
TOTAL_FASTEST_TIMES = 23,
|
TOTAL_FASTEST_TIMES = 23,
|
||||||
TOTAL_HIGHEST_SCORES = 5,
|
TOTAL_HIGHEST_SCORES = 5,
|
||||||
TOTAL_BEST_POSITIONS = 1
|
TOTAL_BEST_POSITIONS = 1,
|
||||||
|
TOTAL_PROPERTIES = 15
|
||||||
};
|
};
|
||||||
//TODO
|
|
||||||
static int32 SeagullsKilled;
|
static int32 SeagullsKilled;
|
||||||
|
|
||||||
static int32 DaysPassed;
|
static int32 DaysPassed;
|
||||||
static int32 HeadsPopped;
|
static int32 HeadsPopped;
|
||||||
static int32 CommercialPassed;
|
static int32 CommercialPassed;
|
||||||
|
@ -25,9 +25,29 @@ public:
|
||||||
static int32 TimesDied;
|
static int32 TimesDied;
|
||||||
static int32 TimesArrested;
|
static int32 TimesArrested;
|
||||||
static int32 KillsSinceLastCheckpoint;
|
static int32 KillsSinceLastCheckpoint;
|
||||||
static float DistanceTravelledInVehicle;
|
static float DistanceTravelledByCar;
|
||||||
|
static float DistanceTravelledByHelicoptor;
|
||||||
|
static float DistanceTravelledByBike;
|
||||||
|
static float DistanceTravelledByBoat;
|
||||||
|
static float DistanceTravelledByPlane;
|
||||||
|
static float DistanceTravelledByGolfCart;
|
||||||
static float DistanceTravelledOnFoot;
|
static float DistanceTravelledOnFoot;
|
||||||
|
static int32 FlightTime;
|
||||||
|
static int32 TimesDrowned;
|
||||||
|
static int32 PhotosTaken;
|
||||||
|
static float LoanSharks;
|
||||||
|
static float StoresKnockedOff;
|
||||||
|
static float MovieStunts;
|
||||||
|
static float Assassinations;
|
||||||
|
static float PizzasDelivered;
|
||||||
|
static float GarbagePickups;
|
||||||
|
static float IceCreamSold;
|
||||||
|
static float TopShootingRangeScore;
|
||||||
|
static float ShootingRank;
|
||||||
static int32 CarsExploded;
|
static int32 CarsExploded;
|
||||||
|
static int32 BoatsExploded;
|
||||||
|
static int32 WantedStarsAttained;
|
||||||
|
static int32 WantedStarsEvaded;
|
||||||
static int32 PeopleKilledByPlayer;
|
static int32 PeopleKilledByPlayer;
|
||||||
static int32 ProgressMade;
|
static int32 ProgressMade;
|
||||||
static int32 TotalProgressInGame;
|
static int32 TotalProgressInGame;
|
||||||
|
@ -44,51 +64,60 @@ public:
|
||||||
static int32 MissionsPassed;
|
static int32 MissionsPassed;
|
||||||
static char LastMissionPassedName[8];
|
static char LastMissionPassedName[8];
|
||||||
static int32 TotalLegitimateKills;
|
static int32 TotalLegitimateKills;
|
||||||
static int32 ElBurroTime;
|
|
||||||
static int32 Record4x4One;
|
|
||||||
static int32 Record4x4Two;
|
|
||||||
static int32 Record4x4Three;
|
|
||||||
static int32 Record4x4Mayhem;
|
|
||||||
static int32 LivesSavedWithAmbulance;
|
static int32 LivesSavedWithAmbulance;
|
||||||
static int32 CriminalsCaught;
|
static int32 CriminalsCaught;
|
||||||
static int32 HighestLevelAmbulanceMission;
|
static int32 HighestLevelAmbulanceMission;
|
||||||
|
static int32 HighestLevelVigilanteMission;
|
||||||
|
static int32 HighestLevelFireMission;
|
||||||
static int32 FiresExtinguished;
|
static int32 FiresExtinguished;
|
||||||
static int32 TimeTakenDefuseMission;
|
|
||||||
static int32 TotalNumberKillFrenzies;
|
static int32 TotalNumberKillFrenzies;
|
||||||
static int32 TotalNumberMissions;
|
static int32 TotalNumberMissions;
|
||||||
static int32 RoundsFiredByPlayer;
|
static int32 RoundsFiredByPlayer;
|
||||||
static int32 KgsOfExplosivesUsed;
|
static int32 KgsOfExplosivesUsed;
|
||||||
static int32 InstantHitsFiredByPlayer;
|
static int32 BulletsThatHit;
|
||||||
static int32 InstantHitsHitByPlayer;
|
|
||||||
static int32 BestTimeBombDefusal;
|
static int32 BestTimeBombDefusal;
|
||||||
static int32 FastestTimes[TOTAL_FASTEST_TIMES];
|
static int32 FastestTimes[TOTAL_FASTEST_TIMES];
|
||||||
static int32 HighestScores[TOTAL_HIGHEST_SCORES];
|
static int32 HighestScores[TOTAL_HIGHEST_SCORES];
|
||||||
static int32 BestPositions[TOTAL_BEST_POSITIONS];
|
static int32 BestPositions[TOTAL_BEST_POSITIONS];
|
||||||
|
static bool PropertyOwned[TOTAL_PROPERTIES];
|
||||||
|
static int32 NumPropertyOwned;
|
||||||
static int32 PropertyDestroyed;
|
static int32 PropertyDestroyed;
|
||||||
|
static float HighestChaseValue;
|
||||||
|
static int32 CheatedCount;
|
||||||
|
static int32 ShowChaseStatOnScreen;
|
||||||
static int32 PamphletMissionPassed;
|
static int32 PamphletMissionPassed;
|
||||||
|
static bool abSonyCDs[1];
|
||||||
|
static int32 BloodRingKills;
|
||||||
|
static int32 BloodRingTime;
|
||||||
|
static float FavoriteRadioStationList[NUM_RADIOS];
|
||||||
static int32 Sprayings;
|
static int32 Sprayings;
|
||||||
static float AutoPaintingBudget;
|
static float AutoPaintingBudget;
|
||||||
static int32 NoMoreHurricanes;
|
static int32 NoMoreHurricanes;
|
||||||
static float FashionBudget;
|
static float FashionBudget;
|
||||||
|
static float PropertyBudget;
|
||||||
|
static float WeaponBudget;
|
||||||
static int32 SafeHouseVisits;
|
static int32 SafeHouseVisits;
|
||||||
static int32 TyresPopped;
|
static int32 TyresPopped;
|
||||||
|
|
||||||
|
static int32 LongestWheelie;
|
||||||
|
static int32 LongestStoppie;
|
||||||
|
static int32 Longest2Wheel;
|
||||||
|
static float LongestWheelieDist;
|
||||||
|
static float LongestStoppieDist;
|
||||||
|
static float Longest2WheelDist;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static void Init(void);
|
static void Init(void);
|
||||||
static void RegisterFastestTime(int32, int32);
|
static void RegisterFastestTime(int32, int32);
|
||||||
static void RegisterHighestScore(int32, int32);
|
static void RegisterHighestScore(int32, int32);
|
||||||
static void RegisterBestPosition(int32, int32);
|
static void RegisterBestPosition(int32, int32);
|
||||||
static void RegisterElBurroTime(int32);
|
|
||||||
static void Register4x4OneTime(int32);
|
|
||||||
static void Register4x4TwoTime(int32);
|
|
||||||
static void Register4x4ThreeTime(int32);
|
|
||||||
static void Register4x4MayhemTime(int32);
|
|
||||||
static void AnotherLifeSavedWithAmbulance();
|
static void AnotherLifeSavedWithAmbulance();
|
||||||
static void AnotherCriminalCaught();
|
static void AnotherCriminalCaught();
|
||||||
static void RegisterLevelAmbulanceMission(int32);
|
static void RegisterLevelAmbulanceMission(int32);
|
||||||
|
static void RegisterLevelVigilanteMission(int32);
|
||||||
|
static void RegisterLevelFireMission(int32);
|
||||||
static void AnotherFireExtinguished();
|
static void AnotherFireExtinguished();
|
||||||
static wchar *FindCriminalRatingString();
|
static wchar *FindCriminalRatingString();
|
||||||
static void RegisterTimeTakenDefuseMission(int32);
|
|
||||||
static void AnotherKillFrenzyPassed();
|
static void AnotherKillFrenzyPassed();
|
||||||
static void SetTotalNumberKillFrenzies(int32);
|
static void SetTotalNumberKillFrenzies(int32);
|
||||||
static void SetTotalNumberMissions(int32);
|
static void SetTotalNumberMissions(int32);
|
||||||
|
@ -99,5 +128,20 @@ public:
|
||||||
static void LoadStats(uint8 *buf, uint32 size);
|
static void LoadStats(uint8 *buf, uint32 size);
|
||||||
static float GetPercentageProgress();
|
static float GetPercentageProgress();
|
||||||
|
|
||||||
|
static void MoneySpentOnWeapons(int32);
|
||||||
|
static void MoneySpentOnProperty(int32);
|
||||||
|
static void MoneySpentOnAutoPainting(int32);
|
||||||
static void MoneySpentOnFashion(int32);
|
static void MoneySpentOnFashion(int32);
|
||||||
|
|
||||||
|
static void NumOfVisitsFromLoanSharks(int32);
|
||||||
|
static void NumOfStoresKnockedOff(int32);
|
||||||
|
static void NumOfMovieStunts(int32);
|
||||||
|
static void NumOfAssassinations(int32);
|
||||||
|
static void NumOfPizzasDelivered(int32);
|
||||||
|
static void NumOfGarbagePickups(int32);
|
||||||
|
static void NumOfIceCreamSold(int32);
|
||||||
|
static void AddNumBloodRingKills(int32);
|
||||||
|
|
||||||
|
static void LongestTimeInBloodRing(int32);
|
||||||
|
static void AddPropertyAsOwned(int32);
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "CopPed.h"
|
#include "CopPed.h"
|
||||||
#include "Wanted.h"
|
#include "Wanted.h"
|
||||||
#include "General.h"
|
#include "General.h"
|
||||||
|
#include "Stats.h"
|
||||||
|
|
||||||
int32 CWanted::MaximumWantedLevel = 6;
|
int32 CWanted::MaximumWantedLevel = 6;
|
||||||
int32 CWanted::nMaximumWantedLevel = 9600;
|
int32 CWanted::nMaximumWantedLevel = 9600;
|
||||||
|
@ -308,7 +309,6 @@ CWanted::ReportCrimeNow(eCrimeType type, const CVector &coors, bool policeDoesnt
|
||||||
UpdateWantedLevel();
|
UpdateWantedLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(Miami): Stats
|
|
||||||
void
|
void
|
||||||
CWanted::UpdateWantedLevel()
|
CWanted::UpdateWantedLevel()
|
||||||
{
|
{
|
||||||
|
@ -318,36 +318,44 @@ CWanted::UpdateWantedLevel()
|
||||||
m_nChaos = nMaximumWantedLevel;
|
m_nChaos = nMaximumWantedLevel;
|
||||||
|
|
||||||
if (m_nChaos >= 0 && m_nChaos < 50) {
|
if (m_nChaos >= 0 && m_nChaos < 50) {
|
||||||
|
if (m_nWantedLevel == 1)
|
||||||
|
++CStats::WantedStarsEvaded;
|
||||||
m_nWantedLevel = 0;
|
m_nWantedLevel = 0;
|
||||||
m_MaximumLawEnforcerVehicles = 0;
|
m_MaximumLawEnforcerVehicles = 0;
|
||||||
m_MaxCops = 0;
|
m_MaxCops = 0;
|
||||||
m_RoadblockDensity = 0;
|
m_RoadblockDensity = 0;
|
||||||
} else if (m_nChaos >= 50 && m_nChaos < 180) {
|
} else if (m_nChaos >= 50 && m_nChaos < 180) {
|
||||||
|
CStats::WantedStarsAttained += 1 - m_nWantedLevel;
|
||||||
m_nWantedLevel = 1;
|
m_nWantedLevel = 1;
|
||||||
m_MaximumLawEnforcerVehicles = 1;
|
m_MaximumLawEnforcerVehicles = 1;
|
||||||
m_MaxCops = 1;
|
m_MaxCops = 1;
|
||||||
m_RoadblockDensity = 0;
|
m_RoadblockDensity = 0;
|
||||||
} else if (m_nChaos >= 180 && m_nChaos < 550) {
|
} else if (m_nChaos >= 180 && m_nChaos < 550) {
|
||||||
|
CStats::WantedStarsAttained += 2 - m_nWantedLevel;
|
||||||
m_nWantedLevel = 2;
|
m_nWantedLevel = 2;
|
||||||
m_MaximumLawEnforcerVehicles = 2;
|
m_MaximumLawEnforcerVehicles = 2;
|
||||||
m_MaxCops = 3;
|
m_MaxCops = 3;
|
||||||
m_RoadblockDensity = 0;
|
m_RoadblockDensity = 0;
|
||||||
} else if (m_nChaos >= 550 && m_nChaos < 1200) {
|
} else if (m_nChaos >= 550 && m_nChaos < 1200) {
|
||||||
|
CStats::WantedStarsAttained += 3 - m_nWantedLevel;
|
||||||
m_nWantedLevel = 3;
|
m_nWantedLevel = 3;
|
||||||
m_MaximumLawEnforcerVehicles = 2;
|
m_MaximumLawEnforcerVehicles = 2;
|
||||||
m_MaxCops = 4;
|
m_MaxCops = 4;
|
||||||
m_RoadblockDensity = 12;
|
m_RoadblockDensity = 12;
|
||||||
} else if (m_nChaos >= 1200 && m_nChaos < 2400) {
|
} else if (m_nChaos >= 1200 && m_nChaos < 2400) {
|
||||||
|
CStats::WantedStarsAttained += 4 - m_nWantedLevel;
|
||||||
m_nWantedLevel = 4;
|
m_nWantedLevel = 4;
|
||||||
m_MaximumLawEnforcerVehicles = 2;
|
m_MaximumLawEnforcerVehicles = 2;
|
||||||
m_MaxCops = 6;
|
m_MaxCops = 6;
|
||||||
m_RoadblockDensity = 18;
|
m_RoadblockDensity = 18;
|
||||||
} else if (m_nChaos >= 2400 && m_nChaos < 4800) {
|
} else if (m_nChaos >= 2400 && m_nChaos < 4800) {
|
||||||
|
CStats::WantedStarsAttained += 5 - m_nWantedLevel;
|
||||||
m_nWantedLevel = 5;
|
m_nWantedLevel = 5;
|
||||||
m_MaximumLawEnforcerVehicles = 3;
|
m_MaximumLawEnforcerVehicles = 3;
|
||||||
m_MaxCops = 8;
|
m_MaxCops = 8;
|
||||||
m_RoadblockDensity = 24;
|
m_RoadblockDensity = 24;
|
||||||
} else if (m_nChaos >= 4800) {
|
} else if (m_nChaos >= 4800) {
|
||||||
|
CStats::WantedStarsAttained += 6 - m_nWantedLevel;
|
||||||
m_nWantedLevel = 6;
|
m_nWantedLevel = 6;
|
||||||
m_MaximumLawEnforcerVehicles = 3;
|
m_MaximumLawEnforcerVehicles = 3;
|
||||||
m_MaxCops = 10;
|
m_MaxCops = 10;
|
||||||
|
@ -494,8 +502,7 @@ CWanted::UpdateCrimesQ(void)
|
||||||
void
|
void
|
||||||
CWanted::Suspend(void)
|
CWanted::Suspend(void)
|
||||||
{
|
{
|
||||||
// TODO(Miami): Stats
|
CStats::WantedStarsEvaded += m_nWantedLevel;
|
||||||
// dwStarsEvaded += m_nWantedLevel;
|
|
||||||
m_nMinChaos = m_nChaos;
|
m_nMinChaos = m_nChaos;
|
||||||
m_nMinWantedLevel = m_nWantedLevel;
|
m_nMinWantedLevel = m_nWantedLevel;
|
||||||
m_nLastTimeSuspended = CTimer::GetTimeInMilliseconds();
|
m_nLastTimeSuspended = CTimer::GetTimeInMilliseconds();
|
||||||
|
|
|
@ -439,7 +439,7 @@ DebugMenuPopulate(void)
|
||||||
DebugMenuEntrySetWrap(e, true);
|
DebugMenuEntrySetWrap(e, true);
|
||||||
e = DebugMenuAddVar("Time & Weather", "New Weather", (int16*)&CWeather::NewWeatherType, nil, 1, 0, 5, weathers);
|
e = DebugMenuAddVar("Time & Weather", "New Weather", (int16*)&CWeather::NewWeatherType, nil, 1, 0, 5, weathers);
|
||||||
DebugMenuEntrySetWrap(e, true);
|
DebugMenuEntrySetWrap(e, true);
|
||||||
DebugMenuAddVarBool8("Time & Weather", "Extracolours On", &CTimeCycle::m_bExtraColourOn, nil);
|
DebugMenuAddVarBool32("Time & Weather", "Extracolours On", &CTimeCycle::m_bExtraColourOn, nil);
|
||||||
DebugMenuAddVar("Time & Weather", "Extracolour", &CTimeCycle::m_ExtraColour, nil, 1, 0, 23, extracols);
|
DebugMenuAddVar("Time & Weather", "Extracolour", &CTimeCycle::m_ExtraColour, nil, 1, 0, 23, extracols);
|
||||||
DebugMenuAddVar("Time & Weather", "Time scale", (float*)&CTimer::GetTimeScale(), nil, 0.1f, 0.0f, 10.0f);
|
DebugMenuAddVar("Time & Weather", "Time scale", (float*)&CTimer::GetTimeScale(), nil, 0.1f, 0.0f, 10.0f);
|
||||||
|
|
||||||
|
|
|
@ -3160,6 +3160,8 @@ CPed::SetStoredObjective(void)
|
||||||
case OBJECTIVE_GOTO_CHAR_ON_FOOT:
|
case OBJECTIVE_GOTO_CHAR_ON_FOOT:
|
||||||
case OBJECTIVE_GOTO_CHAR_ON_FOOT_WALKING:
|
case OBJECTIVE_GOTO_CHAR_ON_FOOT_WALKING:
|
||||||
case OBJECTIVE_HASSLE_CHAR:
|
case OBJECTIVE_HASSLE_CHAR:
|
||||||
|
case OBJECTIVE_FOLLOW_CHAR_IN_FORMATION:
|
||||||
|
case OBJECTIVE_LEAVE_CAR:
|
||||||
case OBJECTIVE_ENTER_CAR_AS_PASSENGER:
|
case OBJECTIVE_ENTER_CAR_AS_PASSENGER:
|
||||||
case OBJECTIVE_ENTER_CAR_AS_DRIVER:
|
case OBJECTIVE_ENTER_CAR_AS_DRIVER:
|
||||||
case OBJECTIVE_GOTO_AREA_ON_FOOT:
|
case OBJECTIVE_GOTO_AREA_ON_FOOT:
|
||||||
|
@ -4730,9 +4732,11 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
|
||||||
} else {
|
} else {
|
||||||
CDarkel::RegisterKillNotByPlayer(this, method);
|
CDarkel::RegisterKillNotByPlayer(this, method);
|
||||||
}
|
}
|
||||||
if (method == WEAPONTYPE_DROWNING)
|
if (method == WEAPONTYPE_DROWNING) {
|
||||||
bIsInTheAir = false;
|
bIsInTheAir = false;
|
||||||
// TODO(Miami): timesDrowned
|
if (FindPlayerPed() == this)
|
||||||
|
CStats::TimesDrowned++;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,9 @@
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include "Shadows.h"
|
#include "Shadows.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
#include "ColStore.h"
|
||||||
|
#include "Coronas.h"
|
||||||
|
#include "Script.h"
|
||||||
|
|
||||||
RwIm3DVertex StreakVertices[4];
|
RwIm3DVertex StreakVertices[4];
|
||||||
RwImVertexIndex StreakIndexList[12];
|
RwImVertexIndex StreakIndexList[12];
|
||||||
|
@ -370,6 +373,8 @@ MarkerAtomicCB(RpAtomic *atomic, void *data)
|
||||||
return atomic;
|
return atomic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --MIAMI: C3dMarker and C3dMarkers done
|
||||||
|
|
||||||
bool
|
bool
|
||||||
C3dMarker::AddMarker(uint32 identifier, uint16 type, float fSize, uint8 r, uint8 g, uint8 b, uint8 a, uint16 pulsePeriod, float pulseFraction, int16 rotateRate)
|
C3dMarker::AddMarker(uint32 identifier, uint16 type, float fSize, uint8 r, uint8 g, uint8 b, uint8 a, uint16 pulsePeriod, float pulseFraction, int16 rotateRate)
|
||||||
{
|
{
|
||||||
|
@ -414,6 +419,7 @@ C3dMarker::DeleteMarkerObject()
|
||||||
m_nIdentifier = 0;
|
m_nIdentifier = 0;
|
||||||
m_nStartTime = 0;
|
m_nStartTime = 0;
|
||||||
m_bIsUsed = false;
|
m_bIsUsed = false;
|
||||||
|
m_bFindZOnNextPlacement = false;
|
||||||
m_nType = MARKERTYPE_INVALID;
|
m_nType = MARKERTYPE_INVALID;
|
||||||
|
|
||||||
frame = RpAtomicGetFrame(m_pAtomic);
|
frame = RpAtomicGetFrame(m_pAtomic);
|
||||||
|
@ -457,6 +463,7 @@ C3dMarkers::Init()
|
||||||
m_aMarkerArray[i].m_pAtomic = nil;
|
m_aMarkerArray[i].m_pAtomic = nil;
|
||||||
m_aMarkerArray[i].m_nType = MARKERTYPE_INVALID;
|
m_aMarkerArray[i].m_nType = MARKERTYPE_INVALID;
|
||||||
m_aMarkerArray[i].m_bIsUsed = false;
|
m_aMarkerArray[i].m_bIsUsed = false;
|
||||||
|
m_aMarkerArray[i].m_bFindZOnNextPlacement = false;
|
||||||
m_aMarkerArray[i].m_nIdentifier = 0;
|
m_aMarkerArray[i].m_nIdentifier = 0;
|
||||||
m_aMarkerArray[i].m_Color.red = 255;
|
m_aMarkerArray[i].m_Color.red = 255;
|
||||||
m_aMarkerArray[i].m_Color.green = 255;
|
m_aMarkerArray[i].m_Color.green = 255;
|
||||||
|
@ -502,8 +509,15 @@ C3dMarkers::Render()
|
||||||
ActivateDirectional();
|
ActivateDirectional();
|
||||||
for (int i = 0; i < NUM3DMARKERS; i++) {
|
for (int i = 0; i < NUM3DMARKERS; i++) {
|
||||||
if (m_aMarkerArray[i].m_bIsUsed) {
|
if (m_aMarkerArray[i].m_bIsUsed) {
|
||||||
if (m_aMarkerArray[i].m_fCameraRange < 120.0f)
|
if (m_aMarkerArray[i].m_fCameraRange < 150.0f) {
|
||||||
m_aMarkerArray[i].Render();
|
m_aMarkerArray[i].Render();
|
||||||
|
if (m_aMarkerArray[i].m_nType == MARKERTYPE_ARROW) {
|
||||||
|
CCoronas::RegisterCorona((uintptr)&m_aMarkerArray[i],
|
||||||
|
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, 192,
|
||||||
|
m_aMarkerArray[i].m_Matrix.GetPosition(), 1.2f * m_aMarkerArray[i].m_fSize, 50.0f * TheCamera.LODDistMultiplier,
|
||||||
|
CCoronas::TYPE_STAR, CCoronas::FLARE_NONE, CCoronas::REFLECTION_OFF, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_ON, 0.0f, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
NumActiveMarkers++;
|
NumActiveMarkers++;
|
||||||
m_aMarkerArray[i].m_bIsUsed = false;
|
m_aMarkerArray[i].m_bIsUsed = false;
|
||||||
} else if (m_aMarkerArray[i].m_pAtomic != nil) {
|
} else if (m_aMarkerArray[i].m_pAtomic != nil) {
|
||||||
|
@ -516,9 +530,9 @@ C3dMarker *
|
||||||
C3dMarkers::PlaceMarker(uint32 identifier, uint16 type, CVector &pos, float size, uint8 r, uint8 g, uint8 b, uint8 a, uint16 pulsePeriod, float pulseFraction, int16 rotateRate)
|
C3dMarkers::PlaceMarker(uint32 identifier, uint16 type, CVector &pos, float size, uint8 r, uint8 g, uint8 b, uint8 a, uint16 pulsePeriod, float pulseFraction, int16 rotateRate)
|
||||||
{
|
{
|
||||||
C3dMarker *pMarker;
|
C3dMarker *pMarker;
|
||||||
|
CVector2D playerPos = FindPlayerCentreOfWorld(0);
|
||||||
pMarker = nil;
|
pMarker = nil;
|
||||||
float dist = Sqrt((pos.x - FindPlayerCentreOfWorld(0).x) * (pos.x - FindPlayerCentreOfWorld(0).x) + (pos.y - FindPlayerCentreOfWorld(0).y) * (pos.y - FindPlayerCentreOfWorld(0).y));
|
float dist = ((CVector2D)pos - playerPos).Magnitude();
|
||||||
|
|
||||||
if (type != MARKERTYPE_ARROW && type != MARKERTYPE_CYLINDER) return nil;
|
if (type != MARKERTYPE_ARROW && type != MARKERTYPE_CYLINDER) return nil;
|
||||||
|
|
||||||
|
@ -591,6 +605,15 @@ C3dMarkers::PlaceMarker(uint32 identifier, uint16 type, CVector &pos, float size
|
||||||
}
|
}
|
||||||
if (type == MARKERTYPE_ARROW)
|
if (type == MARKERTYPE_ARROW)
|
||||||
pMarker->m_Matrix.GetPosition() = pos;
|
pMarker->m_Matrix.GetPosition() = pos;
|
||||||
|
|
||||||
|
if (pMarker->m_bFindZOnNextPlacement) {
|
||||||
|
if ((playerPos - pos).MagnitudeSqr() < sq(100.f) && CColStore::HasCollisionLoaded(CVector2D(pos))) {
|
||||||
|
float z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z + 1.0f, nil);
|
||||||
|
if (z != 0.0f)
|
||||||
|
pMarker->m_Matrix.GetPosition().z = z - 0.05f * size;
|
||||||
|
pMarker->m_bFindZOnNextPlacement = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
pMarker->m_bIsUsed = true;
|
pMarker->m_bIsUsed = true;
|
||||||
return pMarker;
|
return pMarker;
|
||||||
}
|
}
|
||||||
|
@ -600,9 +623,14 @@ C3dMarkers::PlaceMarker(uint32 identifier, uint16 type, CVector &pos, float size
|
||||||
|
|
||||||
pMarker->AddMarker(identifier, type, size, r, g, b, a, pulsePeriod, pulseFraction, rotateRate);
|
pMarker->AddMarker(identifier, type, size, r, g, b, a, pulsePeriod, pulseFraction, rotateRate);
|
||||||
if (type == MARKERTYPE_CYLINDER || type == MARKERTYPE_0 || type == MARKERTYPE_2) {
|
if (type == MARKERTYPE_CYLINDER || type == MARKERTYPE_0 || type == MARKERTYPE_2) {
|
||||||
float z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z + 1.0f, nil);
|
if ((playerPos - pos).MagnitudeSqr() < sq(100.f) && CColStore::HasCollisionLoaded(CVector2D(pos))) {
|
||||||
if (z != 0.0f)
|
float z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z + 1.0f, nil);
|
||||||
pos.z = z - 0.05f * size;
|
if (z != 0.0f)
|
||||||
|
pos.z = z - 0.05f * size;
|
||||||
|
pMarker->m_bFindZOnNextPlacement = false;
|
||||||
|
} else {
|
||||||
|
pMarker->m_bFindZOnNextPlacement = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pMarker->m_Matrix.SetTranslate(pos.x, pos.y, pos.z);
|
pMarker->m_Matrix.SetTranslate(pos.x, pos.y, pos.z);
|
||||||
if (type == MARKERTYPE_2) {
|
if (type == MARKERTYPE_2) {
|
||||||
|
|
|
@ -79,6 +79,7 @@ public:
|
||||||
RpMaterial *m_pMaterial;
|
RpMaterial *m_pMaterial;
|
||||||
uint16 m_nType;
|
uint16 m_nType;
|
||||||
bool m_bIsUsed;
|
bool m_bIsUsed;
|
||||||
|
bool m_bFindZOnNextPlacement;
|
||||||
uint32 m_nIdentifier;
|
uint32 m_nIdentifier;
|
||||||
RwRGBA m_Color;
|
RwRGBA m_Color;
|
||||||
uint16 m_nPulsePeriod;
|
uint16 m_nPulsePeriod;
|
||||||
|
|
|
@ -123,7 +123,7 @@ int32 CTimeCycle::m_nCurrentFogColourGreen;
|
||||||
int32 CTimeCycle::m_nCurrentFogColourBlue;
|
int32 CTimeCycle::m_nCurrentFogColourBlue;
|
||||||
|
|
||||||
int32 CTimeCycle::m_FogReduction;
|
int32 CTimeCycle::m_FogReduction;
|
||||||
bool CTimeCycle::m_bExtraColourOn;
|
int32 CTimeCycle::m_bExtraColourOn;
|
||||||
int32 CTimeCycle::m_ExtraColour;
|
int32 CTimeCycle::m_ExtraColour;
|
||||||
float CTimeCycle::m_ExtraColourInter;
|
float CTimeCycle::m_ExtraColourInter;
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,7 @@ class CTimeCycle
|
||||||
static int32 m_FogReduction;
|
static int32 m_FogReduction;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static bool m_bExtraColourOn;
|
static int32 m_bExtraColourOn;
|
||||||
static int32 m_ExtraColour;
|
static int32 m_ExtraColour;
|
||||||
static float m_ExtraColourInter;
|
static float m_ExtraColourInter;
|
||||||
static int32 m_CurrentStoredValue;
|
static int32 m_CurrentStoredValue;
|
||||||
|
|
|
@ -37,9 +37,10 @@
|
||||||
#include "Weather.h"
|
#include "Weather.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
#include "Zones.h"
|
#include "Zones.h"
|
||||||
|
#include "Timecycle.h"
|
||||||
|
|
||||||
#define BLOCK_COUNT 20
|
#define BLOCK_COUNT 20
|
||||||
#define SIZE_OF_SIMPLEVARS 0xBC
|
#define SIZE_OF_SIMPLEVARS 0xD4
|
||||||
|
|
||||||
const uint32 SIZE_OF_ONE_GAME_IN_BYTES = 201729;
|
const uint32 SIZE_OF_ONE_GAME_IN_BYTES = 201729;
|
||||||
|
|
||||||
|
@ -56,7 +57,7 @@ wchar SlotSaveDate[SLOT_COUNT][70];
|
||||||
int CheckSum;
|
int CheckSum;
|
||||||
eLevelName m_LevelToLoad;
|
eLevelName m_LevelToLoad;
|
||||||
char SaveFileNameJustSaved[260];
|
char SaveFileNameJustSaved[260];
|
||||||
int Slots[SLOT_COUNT+1];
|
int Slots[SLOT_COUNT];
|
||||||
CDate CompileDateAndTime;
|
CDate CompileDateAndTime;
|
||||||
|
|
||||||
bool b_FoundRecentSavedGameWantToLoad;
|
bool b_FoundRecentSavedGameWantToLoad;
|
||||||
|
@ -187,6 +188,14 @@ GenericSave(int file)
|
||||||
WriteDataToBufferPointer(buf, TheCamera.CarZoomIndicator);
|
WriteDataToBufferPointer(buf, TheCamera.CarZoomIndicator);
|
||||||
WriteDataToBufferPointer(buf, TheCamera.PedZoomIndicator);
|
WriteDataToBufferPointer(buf, TheCamera.PedZoomIndicator);
|
||||||
#endif
|
#endif
|
||||||
|
WriteDataToBufferPointer(buf, CGame::currArea);
|
||||||
|
WriteDataToBufferPointer(buf, CVehicle::bAllTaxisHaveNitro);
|
||||||
|
// TODO(Miami): Pad invert Y
|
||||||
|
bool invertY = 0;
|
||||||
|
WriteDataToBufferPointer(buf, invertY);
|
||||||
|
WriteDataToBufferPointer(buf, CTimeCycle::m_ExtraColour);
|
||||||
|
WriteDataToBufferPointer(buf, CTimeCycle::m_bExtraColourOn);
|
||||||
|
WriteDataToBufferPointer(buf, CTimeCycle::m_ExtraColourInter);
|
||||||
assert(buf - work_buff == SIZE_OF_SIMPLEVARS);
|
assert(buf - work_buff == SIZE_OF_SIMPLEVARS);
|
||||||
|
|
||||||
// Save scripts, block is nested within the same block as simple vars for some reason
|
// Save scripts, block is nested within the same block as simple vars for some reason
|
||||||
|
@ -315,6 +324,14 @@ GenericLoad()
|
||||||
ReadDataFromBufferPointer(buf, TheCamera.CarZoomIndicator);
|
ReadDataFromBufferPointer(buf, TheCamera.CarZoomIndicator);
|
||||||
ReadDataFromBufferPointer(buf, TheCamera.PedZoomIndicator);
|
ReadDataFromBufferPointer(buf, TheCamera.PedZoomIndicator);
|
||||||
#endif
|
#endif
|
||||||
|
ReadDataFromBufferPointer(buf, CGame::currArea);
|
||||||
|
ReadDataFromBufferPointer(buf, CVehicle::bAllTaxisHaveNitro);
|
||||||
|
// TODO(Miami): Pad invert Y
|
||||||
|
bool invertY = 0;
|
||||||
|
ReadDataFromBufferPointer(buf, invertY);
|
||||||
|
ReadDataFromBufferPointer(buf, CTimeCycle::m_ExtraColour);
|
||||||
|
ReadDataFromBufferPointer(buf, CTimeCycle::m_bExtraColourOn);
|
||||||
|
ReadDataFromBufferPointer(buf, CTimeCycle::m_ExtraColourInter);
|
||||||
assert(buf - work_buff == SIZE_OF_SIMPLEVARS);
|
assert(buf - work_buff == SIZE_OF_SIMPLEVARS);
|
||||||
#ifdef MISSION_REPLAY
|
#ifdef MISSION_REPLAY
|
||||||
WaitForSave = 0;
|
WaitForSave = 0;
|
||||||
|
|
|
@ -31,7 +31,7 @@ extern wchar SlotFileName[SLOT_COUNT][260];
|
||||||
extern wchar SlotSaveDate[SLOT_COUNT][70];
|
extern wchar SlotSaveDate[SLOT_COUNT][70];
|
||||||
extern int CheckSum;
|
extern int CheckSum;
|
||||||
extern enum eLevelName m_LevelToLoad;
|
extern enum eLevelName m_LevelToLoad;
|
||||||
extern int Slots[SLOT_COUNT+1];
|
extern int Slots[SLOT_COUNT];
|
||||||
|
|
||||||
extern bool b_FoundRecentSavedGameWantToLoad;
|
extern bool b_FoundRecentSavedGameWantToLoad;
|
||||||
extern bool JustLoadedDontFadeInYet;
|
extern bool JustLoadedDontFadeInYet;
|
||||||
|
|
|
@ -88,7 +88,7 @@ void
|
||||||
C_PcSave::PopulateSlotInfo()
|
C_PcSave::PopulateSlotInfo()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < SLOT_COUNT; i++) {
|
for (int i = 0; i < SLOT_COUNT; i++) {
|
||||||
Slots[i + 1] = SLOT_EMPTY;
|
Slots[i] = SLOT_EMPTY;
|
||||||
SlotFileName[i][0] = '\0';
|
SlotFileName[i][0] = '\0';
|
||||||
SlotSaveDate[i][0] = '\0';
|
SlotSaveDate[i][0] = '\0';
|
||||||
}
|
}
|
||||||
|
@ -108,14 +108,14 @@ C_PcSave::PopulateSlotInfo()
|
||||||
if (file != 0) {
|
if (file != 0) {
|
||||||
CFileMgr::Read(file, (char*)&header, sizeof(header));
|
CFileMgr::Read(file, (char*)&header, sizeof(header));
|
||||||
if (strncmp((char*)&header, TopLineEmptyFile, sizeof(TopLineEmptyFile)-1) != 0) {
|
if (strncmp((char*)&header, TopLineEmptyFile, sizeof(TopLineEmptyFile)-1) != 0) {
|
||||||
Slots[i + 1] = SLOT_OK;
|
Slots[i] = SLOT_OK;
|
||||||
memcpy(SlotFileName[i], &header.FileName, sizeof(header.FileName));
|
memcpy(SlotFileName[i], &header.FileName, sizeof(header.FileName));
|
||||||
|
|
||||||
SlotFileName[i][24] = '\0';
|
SlotFileName[i][24] = '\0';
|
||||||
}
|
}
|
||||||
CFileMgr::CloseFile(file);
|
CFileMgr::CloseFile(file);
|
||||||
}
|
}
|
||||||
if (Slots[i + 1] == SLOT_OK) {
|
if (Slots[i] == SLOT_OK) {
|
||||||
if (CheckDataNotCorrupt(i, savename)) {
|
if (CheckDataNotCorrupt(i, savename)) {
|
||||||
SYSTEMTIME st;
|
SYSTEMTIME st;
|
||||||
memcpy(&st, &header.SaveDateTime, sizeof(SYSTEMTIME));
|
memcpy(&st, &header.SaveDateTime, sizeof(SYSTEMTIME));
|
||||||
|
@ -147,7 +147,7 @@ C_PcSave::PopulateSlotInfo()
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
CMessages::InsertNumberInString(TheText.Get("FEC_SLC"), i + 1, -1, -1, -1, -1, -1, SlotFileName[i]);
|
CMessages::InsertNumberInString(TheText.Get("FEC_SLC"), i + 1, -1, -1, -1, -1, -1, SlotFileName[i]);
|
||||||
Slots[i + 1] = SLOT_CORRUPTED;
|
Slots[i] = SLOT_CORRUPTED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1390,7 +1390,7 @@ WinMain(HINSTANCE instance,
|
||||||
RwChar** argv;
|
RwChar** argv;
|
||||||
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, nil, SPIF_SENDCHANGE);
|
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, nil, SPIF_SENDCHANGE);
|
||||||
|
|
||||||
#if 0
|
#if 1
|
||||||
// TODO: make this an option somewhere
|
// TODO: make this an option somewhere
|
||||||
AllocConsole();
|
AllocConsole();
|
||||||
freopen("CONIN$", "r", stdin);
|
freopen("CONIN$", "r", stdin);
|
||||||
|
|
|
@ -113,7 +113,7 @@ void CBulletInfo::Update(void)
|
||||||
CEntity* pHitEntity;
|
CEntity* pHitEntity;
|
||||||
if (CWorld::ProcessLineOfSight(vecOldPos, vecNewPos, point, pHitEntity, true, true, true, true, true, false, false, true)) {
|
if (CWorld::ProcessLineOfSight(vecOldPos, vecNewPos, point, pHitEntity, true, true, true, true, true, false, false, true)) {
|
||||||
if (pBullet->m_pSource && (pHitEntity->IsPed() || pHitEntity->IsVehicle()))
|
if (pBullet->m_pSource && (pHitEntity->IsPed() || pHitEntity->IsVehicle()))
|
||||||
CStats::InstantHitsHitByPlayer++;
|
CStats::BulletsThatHit++;
|
||||||
|
|
||||||
CWeapon::CheckForShootingVehicleOccupant(&pHitEntity, &point, pBullet->m_eWeaponType, vecOldPos, vecNewPos);
|
CWeapon::CheckForShootingVehicleOccupant(&pHitEntity, &point, pBullet->m_eWeaponType, vecOldPos, vecNewPos);
|
||||||
if (pHitEntity->IsPed()) {
|
if (pHitEntity->IsPed()) {
|
||||||
|
|
|
@ -1466,20 +1466,20 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
|
||||||
}
|
}
|
||||||
case ENTITY_TYPE_VEHICLE:
|
case ENTITY_TYPE_VEHICLE:
|
||||||
{
|
{
|
||||||
CStats::InstantHitsHitByPlayer++;
|
CStats::BulletsThatHit++;
|
||||||
DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_VEHICLE, 1.0f);
|
DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_VEHICLE, 1.0f);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ENTITY_TYPE_PED:
|
case ENTITY_TYPE_PED:
|
||||||
{
|
{
|
||||||
CStats::InstantHitsHitByPlayer++;
|
CStats::BulletsThatHit++;
|
||||||
DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_PED, 1.0f);
|
DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_PED, 1.0f);
|
||||||
((CPed*)victim)->Say(SOUND_PED_BULLET_HIT);
|
((CPed*)victim)->Say(SOUND_PED_BULLET_HIT);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ENTITY_TYPE_OBJECT:
|
case ENTITY_TYPE_OBJECT:
|
||||||
{
|
{
|
||||||
CStats::InstantHitsHitByPlayer++;
|
CStats::BulletsThatHit++;
|
||||||
PlayOneShotScriptObject(SCRIPT_SOUND_BULLET_HIT_GROUND_2, point->point);
|
PlayOneShotScriptObject(SCRIPT_SOUND_BULLET_HIT_GROUND_2, point->point);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1862,7 +1862,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
|
||||||
case ENTITY_TYPE_VEHICLE:
|
case ENTITY_TYPE_VEHICLE:
|
||||||
{
|
{
|
||||||
if (!statUpdated) {
|
if (!statUpdated) {
|
||||||
CStats::InstantHitsHitByPlayer++;
|
CStats::BulletsThatHit++;
|
||||||
statUpdated = true;
|
statUpdated = true;
|
||||||
}
|
}
|
||||||
DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_VEHICLE, 1.0f);
|
DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_VEHICLE, 1.0f);
|
||||||
|
@ -1871,7 +1871,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
|
||||||
case ENTITY_TYPE_PED:
|
case ENTITY_TYPE_PED:
|
||||||
{
|
{
|
||||||
if (!statUpdated) {
|
if (!statUpdated) {
|
||||||
CStats::InstantHitsHitByPlayer++;
|
CStats::BulletsThatHit++;
|
||||||
statUpdated = true;
|
statUpdated = true;
|
||||||
}
|
}
|
||||||
DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_PED, 1.0f);
|
DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_PED, 1.0f);
|
||||||
|
@ -1881,7 +1881,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
|
||||||
case ENTITY_TYPE_OBJECT:
|
case ENTITY_TYPE_OBJECT:
|
||||||
{
|
{
|
||||||
if (!statUpdated) {
|
if (!statUpdated) {
|
||||||
CStats::InstantHitsHitByPlayer++;
|
CStats::BulletsThatHit++;
|
||||||
statUpdated = true;
|
statUpdated = true;
|
||||||
}
|
}
|
||||||
PlayOneShotScriptObject(SCRIPT_SOUND_BULLET_HIT_GROUND_2, point.point);
|
PlayOneShotScriptObject(SCRIPT_SOUND_BULLET_HIT_GROUND_2, point.point);
|
||||||
|
@ -2070,9 +2070,6 @@ CWeapon::FireSniper(CEntity *shooter)
|
||||||
|
|
||||||
CBulletInfo::AddBullet(shooter, m_eWeaponType, source, dir);
|
CBulletInfo::AddBullet(shooter, m_eWeaponType, source, dir);
|
||||||
|
|
||||||
if ( shooter == FindPlayerPed() )
|
|
||||||
CStats::InstantHitsFiredByPlayer++;
|
|
||||||
|
|
||||||
if ( shooter == FindPlayerPed() )
|
if ( shooter == FindPlayerPed() )
|
||||||
{
|
{
|
||||||
CPad::GetPad(0)->StartShake_Distance(240, 128,
|
CPad::GetPad(0)->StartShake_Distance(240, 128,
|
||||||
|
|
Loading…
Reference in a new issue