@@ -1471,6 +1471,42 @@ void _declspec(naked) HOOK_CAnimManager_CreateAnimAssocGroups()
14711471}
14721472
14731473
1474+ // ////////////////////////////////////////////////////////////////////////////////////////
1475+ //
1476+ // Something called from CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask
1477+ //
1478+ // Accessing a temporally not existing vehicle
1479+ // (seems to happen when the driver is slower being thrown out than the jacker enters the vehicle)
1480+ //
1481+ // ////////////////////////////////////////////////////////////////////////////////////////
1482+ #define HOOKPOS_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask 0x6485AC
1483+ #define HOOKSIZE_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask 6
1484+ DWORD RETURN_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask = 0x6485B2 ;
1485+ DWORD RETURN_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask_Invalid = 0x6485E1 ;
1486+ void OnMY_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask ()
1487+ {
1488+ LogEvent ( 817 , " CTaskComplexCarSlowBeDraggedOut" , " " , " CTaskComplexCarSlowBeDraggedOut race condition" );
1489+ }
1490+
1491+ void _declspec (naked) HOOK_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask ()
1492+ {
1493+ _asm
1494+ {
1495+ test eax, eax
1496+ jz invalid_vehicle
1497+
1498+ mov ecx, [eax+460h]
1499+ jmp RETURN_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask
1500+
1501+ invalid_vehicle:
1502+ pushad
1503+ call OnMY_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask
1504+ popad
1505+ jmp RETURN_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask_Invalid
1506+ }
1507+ }
1508+
1509+
14741510// ////////////////////////////////////////////////////////////////////////////////////////
14751511//
14761512// Setup hooks for CrashFixHacks
@@ -1515,6 +1551,7 @@ void CMultiplayerSA::InitHooks_CrashFixHacks ( void )
15151551 EZHookInstallChecked ( CVolumetricShadowMgr_Render );
15161552 EZHookInstallChecked ( CVolumetricShadowMgr_Update );
15171553 EZHookInstallChecked ( CAnimManager_CreateAnimAssocGroups );
1554+ EZHookInstall ( CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask );
15181555
15191556 // Install train crossing crashfix (the temporary variable is required for the template logic)
15201557 void (*temp)() = HOOK_TrainCrossingBarrierCrashFix<RETURN_CObject_Destructor_TrainCrossing_Check, RETURN_CObject_Destructor_TrainCrossing_Invalid>;
0 commit comments