diff --git a/src/crashlog.cpp b/src/crashlog.cpp index f93e41162c..7cfd8a09fb 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -523,7 +523,10 @@ char *CrashLog::FillDesyncCrashLog(char *buffer, const char *last, const DesyncE flag_check(DesyncExtraInfo::DEIF_DBL_RAND, "D")); } - buffer += seprintf(buffer, last, "In game date: %i-%02i-%02i (%i, %i) (DL: %u)\n", _cur_date_ymd.year, _cur_date_ymd.month + 1, _cur_date_ymd.day, _date_fract, _tick_skip_counter, _settings_game.economy.day_length_factor); + extern uint32 _frame_counter; + + buffer += seprintf(buffer, last, "In game date: %i-%02i-%02i (%i, %i) (DL: %u), %08X\n", + _cur_date_ymd.year, _cur_date_ymd.month + 1, _cur_date_ymd.day, _date_fract, _tick_skip_counter, _settings_game.economy.day_length_factor, _frame_counter); if (_game_load_time != 0) { buffer += seprintf(buffer, last, "Game loaded at: %i-%02i-%02i (%i, %i), %s", _game_load_cur_date_ymd.year, _game_load_cur_date_ymd.month + 1, _game_load_cur_date_ymd.day, _game_load_date_fract, _game_load_tick_skip_counter, asctime(gmtime(&_game_load_time))); @@ -532,11 +535,12 @@ char *CrashLog::FillDesyncCrashLog(char *buffer, const char *last, const DesyncE extern Date _last_sync_date; extern DateFract _last_sync_date_fract; extern uint8 _last_sync_tick_skip_counter; + extern uint32 _last_sync_frame_counter; YearMonthDay ymd; ConvertDateToYMD(_last_sync_date, &ymd); - buffer += seprintf(buffer, last, "Last sync at: %i-%02i-%02i (%i, %i)", - ymd.year, ymd.month + 1, ymd.day, _last_sync_date_fract, _last_sync_tick_skip_counter); + buffer += seprintf(buffer, last, "Last sync at: %i-%02i-%02i (%i, %i), %08X", + ymd.year, ymd.month + 1, ymd.day, _last_sync_date_fract, _last_sync_tick_skip_counter, _last_sync_frame_counter); } if (info.client_id >= 0) { buffer += seprintf(buffer, last, "Client #%d, \"%s\"\n", info.client_id, info.client_name != nullptr ? info.client_name : ""); @@ -584,7 +588,10 @@ char *CrashLog::FillInconsistencyLog(char *buffer, const char *last, const Incon buffer += WriteScopeLog(buffer, last); #endif - buffer += seprintf(buffer, last, "In game date: %i-%02i-%02i (%i, %i) (DL: %u)\n", _cur_date_ymd.year, _cur_date_ymd.month + 1, _cur_date_ymd.day, _date_fract, _tick_skip_counter, _settings_game.economy.day_length_factor); + extern uint32 _frame_counter; + + buffer += seprintf(buffer, last, "In game date: %i-%02i-%02i (%i, %i) (DL: %u), %08X\n", + _cur_date_ymd.year, _cur_date_ymd.month + 1, _cur_date_ymd.day, _date_fract, _tick_skip_counter, _settings_game.economy.day_length_factor, _frame_counter); if (_game_load_time != 0) { buffer += seprintf(buffer, last, "Game loaded at: %i-%02i-%02i (%i, %i), %s", _game_load_cur_date_ymd.year, _game_load_cur_date_ymd.month + 1, _game_load_cur_date_ymd.day, _game_load_date_fract, _game_load_tick_skip_counter, asctime(gmtime(&_game_load_time))); @@ -593,11 +600,12 @@ char *CrashLog::FillInconsistencyLog(char *buffer, const char *last, const Incon extern Date _last_sync_date; extern DateFract _last_sync_date_fract; extern uint8 _last_sync_tick_skip_counter; + extern uint32 _last_sync_frame_counter; YearMonthDay ymd; ConvertDateToYMD(_last_sync_date, &ymd); - buffer += seprintf(buffer, last, "Last sync at: %i-%02i-%02i (%i, %i)", - ymd.year, ymd.month + 1, ymd.day, _last_sync_date_fract, _last_sync_tick_skip_counter); + buffer += seprintf(buffer, last, "Last sync at: %i-%02i-%02i (%i, %i), %08X", + ymd.year, ymd.month + 1, ymd.day, _last_sync_date_fract, _last_sync_tick_skip_counter, _last_sync_frame_counter); } buffer += seprintf(buffer, last, "\n"); diff --git a/src/network/network.cpp b/src/network/network.cpp index 28f0f75bf9..92adbe4285 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -87,6 +87,7 @@ uint32 _sync_frame; ///< The frame to perform the sync check. Date _last_sync_date; ///< The game date of the last successfully received sync frame DateFract _last_sync_date_fract; ///< " uint8 _last_sync_tick_skip_counter; ///< " +uint32 _last_sync_frame_counter; ///< " bool _network_first_time; ///< Whether we have finished joining or not. CompanyMask _network_company_passworded; ///< Bitmask of the password status of all companies. @@ -661,6 +662,7 @@ static void NetworkInitialize(bool close_admins = true) _last_sync_date = 0; _last_sync_date_fract = 0; _last_sync_tick_skip_counter = 0; + _last_sync_frame_counter = 0; } /** Non blocking connection to query servers for their game info. */ diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 45873841a6..506417f8ce 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -336,6 +336,7 @@ void ClientNetworkGameSocketHandler::ClientError(NetworkRecvStatus res) _last_sync_date = _date; _last_sync_date_fract = _date_fract; _last_sync_tick_skip_counter = _tick_skip_counter; + _last_sync_frame_counter = _sync_frame; /* If this is the first time we have a sync-frame, we * need to let the server know that we are ready and at the same diff --git a/src/network/network_internal.h b/src/network/network_internal.h index d10cd9304d..dad05bac13 100644 --- a/src/network/network_internal.h +++ b/src/network/network_internal.h @@ -84,6 +84,7 @@ extern uint32 _sync_frame; extern Date _last_sync_date; extern DateFract _last_sync_date_fract; extern uint8 _last_sync_tick_skip_counter; +extern uint32 _last_sync_frame_counter; extern bool _network_first_time; /* Vars needed for the join-GUI */ extern NetworkJoinStatus _network_join_status;