////////////////////////////////////////////////////////// // // 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", "" ); }
/////////////////////////////////////////////////////////////// // // CModelCacheManagerImpl::PreLoad // // Cache all weapons and upgrades // // Peds KB: 64,832 KB 7-312 306 296 valid, 10 not so valid 219 KB/model 4.45/MB // Weapons KB: 470 321-372 52 39 valid, 3 invalid(329,332,340) 470 KB all weapons // Upgrades KB: 2,716 1000-1193 194 all valid 2,716 KB all upgrades // Vehicles(400-499) KB: 14,622 140 KB/model 7/MB // Vehicles(500-599) KB: 14,888 // /////////////////////////////////////////////////////////////// void CModelCacheManagerImpl::PreLoad ( void ) { if ( m_bDonePreLoad ) return; m_bDonePreLoad = true; CTickCount startTicks = CTickCount::Now (); #if 0 for ( uint i = 321 ; i <= 372 ; i++ ) { if ( CClientPedManager::IsValidWeaponModel ( i ) ) AddModelRefCount ( i ); } #endif m_pGame->GetStreaming()->LoadAllRequestedModels ( false ); // Get current limits int bSlowMethod = GetApplicationSettingInt( DIAG_PRELOAD_UPGRADES_SLOW ); int iLowestUnsafeUpgrade = GetApplicationSettingInt( DIAG_PRELOAD_UPGRADES_LOWEST_UNSAFE ); SetApplicationSetting( DIAG_CRASH_EXTRA_MSG, "** AUTO FIXING CRASH (Step 1/2) **\n\n** Please continue and connect to a server **" ); // Crashed during previous PreLoad? if ( WatchDogIsSectionOpen( WD_SECTION_PRELOAD_UPGRADES ) ) { AddReportLog( 8545, SString( "PreLoad Upgrades - Crash detect - bSlowMethod:%d iLowestUnsafeUpgrade:%d", bSlowMethod, iLowestUnsafeUpgrade ) ); iLowestUnsafeUpgrade = GetApplicationSettingInt( DIAG_PRELOAD_UPGRADE_ATTEMPT_ID ); bSlowMethod = 1; SetApplicationSettingInt( DIAG_PRELOAD_UPGRADES_LOWEST_UNSAFE, iLowestUnsafeUpgrade ); SetApplicationSettingInt( DIAG_PRELOAD_UPGRADES_SLOW, bSlowMethod ); SetApplicationSetting( DIAG_CRASH_EXTRA_MSG, "** AUTO FIXING CRASH (Step 2/2) **\n\n** Please continue and connect to a server **" ); } if ( iLowestUnsafeUpgrade == 0 ) iLowestUnsafeUpgrade = 1194; // PreLoad upgrades WatchDogBeginSection( WD_SECTION_PRELOAD_UPGRADES ); { for ( int i = 1000 ; i < iLowestUnsafeUpgrade ; i++ ) { if ( bSlowMethod ) SetApplicationSettingInt( DIAG_PRELOAD_UPGRADE_ATTEMPT_ID, i ); AddModelRefCount ( i ); if ( bSlowMethod ) m_pGame->GetStreaming()->LoadAllRequestedModels ( false ); } m_pGame->GetStreaming()->LoadAllRequestedModels ( false ); } WatchDogCompletedSection( WD_SECTION_PRELOAD_UPGRADES ); SetApplicationSetting( DIAG_CRASH_EXTRA_MSG, "" ); // Report if LowestUnsafeUpgrade has fallen int iPrevHiScore = GetApplicationSettingInt( DIAG_PRELOAD_UPGRADES_HISCORE ); SetApplicationSettingInt( DIAG_PRELOAD_UPGRADES_HISCORE, iLowestUnsafeUpgrade ); if ( iPrevHiScore > iLowestUnsafeUpgrade ) AddReportLog( 8544, SString( "PreLoad Upgrades - LowestUnsafeUpgrade fallen from %d to %d", iPrevHiScore, iLowestUnsafeUpgrade ) ); CTickCount deltaTicks = CTickCount::Now () - startTicks; OutputDebugLine ( SString ( "CModelCacheManagerImpl::PreLoad completed in %d ms", deltaTicks.ToInt () ) ); }