////////////////////////////////////////////////////////// // // CInstallManager::_ShowCrashFailDialog // // // ////////////////////////////////////////////////////////// SString CInstallManager::_ShowCrashFailDialog ( void ) { // Crashed before gta game started ? if ( WatchDogIsSectionOpen ( "L1" ) ) WatchDogIncCounter ( "CR1" ); HideSplash (); // Transfer gta-fopen-last info if ( GetApplicationSetting ( "diagnostics", "gta-fopen-fail" ).empty() ) SetApplicationSetting ( "diagnostics", "gta-fopen-fail", GetApplicationSetting ( "diagnostics", "gta-fopen-last" ) ); SetApplicationSetting ( "diagnostics", "gta-fopen-last", "" ); SString strMessage = GetApplicationSetting ( "diagnostics", "last-crash-info" ); SString strReason = GetApplicationSetting ( "diagnostics", "last-crash-reason" ); SetApplicationSetting ( "diagnostics", "last-crash-reason", "" ); if ( strReason == "direct3ddevice-reset" ) { strMessage += _("** The crash was caused by a graphics driver error **\n\n** Please update your graphics drivers **"); } else { strMessage += strReason; } strMessage = strMessage.Replace ( "\r", "" ).Replace ( "\n", "\r\n" ); SString strResult = ShowCrashedDialog ( g_hInstance, strMessage ); HideCrashedDialog (); CheckAndShowFileOpenFailureMessage (); return strResult; }
////////////////////////////////////////////////////////// // // PreLaunchWatchDogs // // // ////////////////////////////////////////////////////////// void PreLaunchWatchDogs ( void ) { assert ( !CreateSingleInstanceMutex () ); // // "L0" is opened before the launch sequence and is closed if MTA shutsdown with no error // "L1" is opened before the launch sequence and is closed if GTA is succesfully started // "CR1" is a counter which is incremented if GTA was not started and MTA shutsdown with an error // // "L2" is opened before the launch sequence and is closed if the GTA loading screen is shown // "CR2" is a counter which is incremented at startup, if the previous run didn't make it to the loading screen // // "L3" is opened before the launch sequence and is closed if the GTA loading screen is shown, or a startup problem is handled elsewhere // // Check for unclean stop on previous run #ifndef MTA_DEBUG if ( WatchDogIsSectionOpen ( "L0" ) ) WatchDogSetUncleanStop ( true ); // Flag to maybe do things differently if MTA exit code on last run was not 0 else #endif WatchDogSetUncleanStop ( false ); SString strCrashFlagFilename = CalcMTASAPath( "mta\\core.log.flag" ); if ( FileExists( strCrashFlagFilename ) ) { FileDelete( strCrashFlagFilename ); WatchDogSetLastRunCrash( true ); // Flag to maybe do things differently if MTA crashed last run } else WatchDogSetLastRunCrash( false ); // Reset counter if gta game was run last time if ( !WatchDogIsSectionOpen ( "L1" ) ) WatchDogClearCounter ( "CR1" ); // If crashed 3 times in a row before starting the game, do something if ( WatchDogGetCounter ( "CR1" ) >= 3 ) { WatchDogReset (); HandleTrouble (); } // Check for possible gta_sa.set problems if ( WatchDogIsSectionOpen ( "L2" ) ) { WatchDogIncCounter ( "CR2" ); // Did not reach loading screen last time WatchDogCompletedSection ( "L2" ); } else WatchDogClearCounter ( "CR2" ); // If didn't reach loading screen 5 times in a row, do something if ( WatchDogGetCounter ( "CR2" ) >= 5 ) { WatchDogClearCounter ( "CR2" ); HandleResetSettings (); } // Clear down freeze on quit detection WatchDogCompletedSection( "Q0" ); WatchDogBeginSection ( "L0" ); // Gets closed if MTA exits with a return code of 0 WatchDogBeginSection ( "L1" ); // Gets closed when online game has started SetApplicationSetting ( "diagnostics", "gta-fopen-fail", "" ); SetApplicationSetting ( "diagnostics", "last-crash-reason", "" ); SetApplicationSetting ( "diagnostics", "gta-fopen-last", "" ); }