From 2f1d2a9f4bfd533e75e9c047dacf7dac582a3efa Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 12 Feb 2024 09:46:38 +0000 Subject: [PATCH] Survey: Don't transmit invalid realtime duration --- src/gfx.cpp | 1 + src/openttd.cpp | 5 ++++- src/openttd.h | 1 + src/survey.cpp | 6 +++++- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index fdc49ba5a5..c21b83070d 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -58,6 +58,7 @@ bool _check_special_modes; std::atomic _exit_game; GameMode _game_mode; SwitchMode _switch_mode; ///< The next mainloop command. +bool _switch_mode_time_valid = false; std::chrono::steady_clock::time_point _switch_mode_time; ///< The time when the switch mode was requested. PauseMode _pause_mode; uint32_t _pause_countdown; diff --git a/src/openttd.cpp b/src/openttd.cpp index e427d67935..235a24f6b6 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1371,7 +1371,10 @@ void SwitchToMode(SwitchMode new_mode) if (_game_mode == GM_NORMAL && new_mode != SM_SAVE_GAME) _survey.Transmit(NetworkSurveyHandler::Reason::LEAVE); /* Keep track when we last switch mode. Used for survey, to know how long someone was in a game. */ - if (new_mode != SM_SAVE_GAME) _switch_mode_time = std::chrono::steady_clock::now(); + if (new_mode != SM_SAVE_GAME) { + _switch_mode_time = std::chrono::steady_clock::now(); + _switch_mode_time_valid = true; + } switch (new_mode) { case SM_EDITOR: // Switch to scenario editor diff --git a/src/openttd.h b/src/openttd.h index b8e1cb42e4..bf28ceafc9 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -61,6 +61,7 @@ enum ExtraDisplayOptions { extern GameMode _game_mode; extern SwitchMode _switch_mode; extern bool _check_special_modes; +extern bool _switch_mode_time_valid; extern std::chrono::steady_clock::time_point _switch_mode_time; extern std::atomic _exit_game; extern bool _save_config; diff --git a/src/survey.cpp b/src/survey.cpp index afd7ef2f7c..f45470c7c0 100644 --- a/src/survey.cpp +++ b/src/survey.cpp @@ -290,7 +290,11 @@ void SurveyCompanies(nlohmann::json &survey) void SurveyTimers(nlohmann::json &survey) { survey["ticks"] = _scaled_tick_counter; - survey["seconds"] = std::chrono::duration_cast(std::chrono::steady_clock::now() - _switch_mode_time).count(); + if (_switch_mode_time_valid) { + survey["seconds"] = std::chrono::duration_cast(std::chrono::steady_clock::now() - _switch_mode_time).count(); + } else { + survey["seconds"] = 0; + } survey["calendar"] = fmt::format("{:04}-{:02}-{:02} ({})", _cur_date_ymd.year, _cur_date_ymd.month + 1, _cur_date_ymd.day, _date_fract); }