From 0b156f1d26abd336cdfff540a753741359dfb3ef Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 7 Jun 2020 15:23:52 +0300 Subject: [PATCH] some stats tweaks; saves dead again --- src/control/Script.cpp | 2 +- src/core/Stats.cpp | 11 +++++++++++ src/core/Stats.h | 7 +++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/control/Script.cpp b/src/control/Script.cpp index 66aa825d..d7a0486a 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -11956,7 +11956,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command) return 0; case COMMAND_REGISTER_BEST_POSITION: CollectParameters(&m_nIp, 2); - debug("REGISTER_BEST_POSITION not implemented\n"); + CStats::RegisterBestPosition(ScriptParams[0], ScriptParams[1]); return 0; case COMMAND_IS_PLAYER_IN_INFO_ZONE: { diff --git a/src/core/Stats.cpp b/src/core/Stats.cpp index 91f583bd..bc69105b 100644 --- a/src/core/Stats.cpp +++ b/src/core/Stats.cpp @@ -60,6 +60,7 @@ int32 CStats::mmRain; int32 CStats::CarsCrushed; int32 CStats::FastestTimes[CStats::TOTAL_FASTEST_TIMES]; int32 CStats::HighestScores[CStats::TOTAL_HIGHEST_SCORES]; +int32 CStats::BestPositions[CStats::TOTAL_BEST_POSITIONS]; int32 CStats::PropertyDestroyed; int32 CStats::Sprayings; @@ -119,6 +120,8 @@ void CStats::Init() FastestTimes[i] = 0; for (int i = 0; i < TOTAL_HIGHEST_SCORES; i++) HighestScores[i] = 0; + for (int i = 0; i < TOTAL_BEST_POSITIONS; i++) + BestPositions[i] = INT_MAX; for (int i = 0; i < NUM_PEDTYPES; i++) PedsKilledOfThisType[i] = 0; IndustrialPassed = 0; @@ -146,6 +149,12 @@ void CStats::RegisterHighestScore(int32 index, int32 score) HighestScores[index] = Max(HighestScores[index], score); } +void CStats::RegisterBestPosition(int32 index, int32 position) +{ + assert(index >= 0 && index < TOTAL_BEST_POSITIONS); + BestPositions[index] = Min(BestPositions[index], position); +} + void CStats::RegisterElBurroTime(int32 time) { ElBurroTime = (ElBurroTime && ElBurroTime < time) ? ElBurroTime : time; @@ -377,6 +386,7 @@ void CStats::SaveStats(uint8 *buf, uint32 *size) CopyToBuf(buf, TotalNumberMissions); CopyToBuf(buf, FastestTimes); CopyToBuf(buf, HighestScores); + CopyToBuf(buf, BestPositions); CopyToBuf(buf, KillsSinceLastCheckpoint); CopyToBuf(buf, TotalLegitimateKills); CopyToBuf(buf, LastMissionPassedName); @@ -440,6 +450,7 @@ void CStats::LoadStats(uint8 *buf, uint32 size) CopyFromBuf(buf, TotalNumberMissions); CopyFromBuf(buf, FastestTimes); CopyFromBuf(buf, HighestScores); + CopyFromBuf(buf, BestPositions); CopyFromBuf(buf, KillsSinceLastCheckpoint); CopyFromBuf(buf, TotalLegitimateKills); CopyFromBuf(buf, LastMissionPassedName); diff --git a/src/core/Stats.h b/src/core/Stats.h index 33d4ef72..8588fef1 100644 --- a/src/core/Stats.h +++ b/src/core/Stats.h @@ -6,8 +6,9 @@ class CStats { public: enum { - TOTAL_FASTEST_TIMES = 16, - TOTAL_HIGHEST_SCORES = 16 + TOTAL_FASTEST_TIMES = 23, + TOTAL_HIGHEST_SCORES = 5, + TOTAL_BEST_POSITIONS = 1 }; //TODO static int32 SeagullsKilled; @@ -65,6 +66,7 @@ public: static int32 CarsCrushed; static int32 FastestTimes[TOTAL_FASTEST_TIMES]; static int32 HighestScores[TOTAL_HIGHEST_SCORES]; + static int32 BestPositions[TOTAL_BEST_POSITIONS]; static int32 PropertyDestroyed; static int32 Sprayings; static float AutoPaintingBudget; @@ -77,6 +79,7 @@ public: static void Init(void); static void RegisterFastestTime(int32, int32); static void RegisterHighestScore(int32, int32); + static void RegisterBestPosition(int32, int32); static void RegisterElBurroTime(int32); static void Register4x4OneTime(int32); static void Register4x4TwoTime(int32);