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); }