//Compile out Title Update changes to header functions. //Must be before includes. //CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R. USING "rage_builtins.sch" USING "globals.sch" USING "cutscene_public.sch" USING "commands_cutscene.sch" USING "commands_entity.sch" USING "commands_script.sch" USING "script_player.sch" USING "randomChar_public.sch" USING "RC_Helper_Functions.sch" USING "RC_Threat_Public.sch" USING "RC_towing.sch" USING "load_queue_public.sch" // ***************************************************************************************** // ***************************************************************************************** // ***************************************************************************************** // // MISSION NAME : Tonya4.sc // AUTHOR : // DESCRIPTION : // // ***************************************************************************************** // ***************************************************************************************** // ***************************************************************************************** g_structRCScriptArgs sRCLauncherDataLocal LoadQueueLarge sLoadQueue ENUM eRC_MainState MS_INIT, MS_MEET_TONYA, MS_GO_TO_TRUCK, MS_DO_MISSION, MS_FAILED, MS_PASSED ENDENUM ENUM eRC_SubState SS_SETUP = 0, SS_UPDATE, SS_CLEANUP ENDENUM ENUM eRC_FAIL_STATE SS_FAIL_SETUP = 0, SS_FAIL_UPDATE, SS_FAIL_CLEANUP ENDENUM // Mission state eRC_MainState m_eState = MS_INIT eRC_SubState m_eSubState = SS_SETUP eRC_FAIL_STATE m_FailState = SS_FAIL_SETUP STRING sFailReason = "DEFAULT" TOWING_LAUNCH_DATA launchArgs // Mission VEHICLE_INDEX vehTruck VEHICLE_INDEX viPlayerLastVehicle VECTOR vTruckPos = <<401.6370, -1633.3003, 28.2928>> FLOAT fTruckHeading = 231.5304 VECTOR vShitSkipSpawnPosition = <<530.3121, -171.8575, 53.8463>> FLOAT fShitSkipSpawnHeading = 62.9791 BOOL bStartedReplay = FALSE INT iStageToUse //REPLAY VARIABLES VECTOR vPlayerFirstCheckpointPosition = <<-10.7897, -1471.2037, 29.5520>> FLOAT fPlayerFirstCheckpointHeading = 276.1668 // ----------------------------------- // DEBUG MODE // ----------------------------------- #IF IS_DEBUG_BUILD USING "shared_debug.sch" USING "script_debug.sch" USING "select_mission_stage.sch" #ENDIF #IF IS_DEBUG_BUILD BOOL bDoingPSkip = FALSE // BOOL bDoingJSkip = FALSE MissionStageMenuTextStruct sSkipMenu[2] INT iDebugJumpStage = 0 #ENDIF PROC SETUP_DEBUG() #IF IS_DEBUG_BUILD sSkipMenu[0].sTxtLabel = "GO TO TRUCK" sSkipMenu[1].sTxtLabel = "TOWING" #ENDIF ENDPROC // =========================================================================================================== // Termination // =========================================================================================================== // ----------------------------------------------------------------------------------------------------------- // Script Cleanup // ----------------------------------------------------------------------------------------------------------- PROC Script_Cleanup() // Clear the mission title MISSION_FLOW_CLEAR_DISPLAY_MISSION_TITLE() SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(<<-537.087402,129.937668,60.971443>>, <<-397.506165,126.523117,69.542374>>, 30.000000) CPRINTLN(DEBUG_MISSION, "SETTING ROADS BACK TO ORIGINAL AROUND BROKEN DOWN CAR") // If the mission was triggered then additional mission cleanup will be required. IF (Random_Character_Cleanup_If_Triggered()) CPRINTLN(DEBUG_MISSION, DEBUG_MISSION, "...Random Character Script was triggered so additional cleanup required") ENDIF // Cleanup the scene created by the launcher RC_CleanupSceneEntities(sRCLauncherDataLocal, TRUE) // Release tow truck SAFE_RELEASE_VEHICLE(vehTruck) // Remove blips IF DOES_BLIP_EXIST(myVehicleBlip) REMOVE_BLIP(myVehicleBlip) ENDIF REMOVE_SCENARIO_BLOCKING_AREA(sbi01) REMOVE_SCENARIO_BLOCKING_AREA(sbi02) REMOVE_SCENARIO_BLOCKING_AREA(sbi03) // Garage in northern part of the city MISSION_CLEANUP(sLoadQueue) TERMINATE_THIS_THREAD() ENDPROC // ----------------------------------------------------------------------------------------------------------- // Script Pass // ----------------------------------------------------------------------------------------------------------- PROC Script_Passed() Random_Character_Passed(CP_OJ_TOW4) Script_Cleanup() ENDPROC PROC DO_FADE_IN_WITH_WAIT() IF NOT IS_SCREEN_FADED_IN() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) WHILE NOT IS_SCREEN_FADED_IN() WAIT(0) ENDWHILE ENDIF ENDPROC PROC DO_FADE_OUT_WITH_WAIT() IF NOT IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME) WHILE NOT IS_SCREEN_FADED_OUT() WAIT(0) ENDWHILE ENDIF ENDPROC PROC HANDLE_FIRST_RETRY_SETUP() HANDLE_REPLAY_VEHICLE(vVehicleStartPosition, fVehicleStartHeading) IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF NOT IS_REPLAY_BEING_SET_UP() SET_ENTITY_COORDS(PLAYER_PED_ID(), vPlayerFirstCheckpointPosition) SET_ENTITY_HEADING(PLAYER_PED_ID(), fPlayerFirstCheckpointHeading) CPRINTLN(DEBUG_MISSION, "SETTING PLAYER'S POSITION AND HEADING") ENDIF SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH() ENDIF ENDPROC PROC HANDLE_SECOND_RETRY_SETUP() HANDLE_REPLAY_VEHICLE(<<405.7806, -1652.3694, 28.2928>>, 139.8366) REQUEST_MODEL(TOWTRUCK) WHILE NOT HAS_MODEL_LOADED(TOWTRUCK) WAIT(0) CPRINTLN(DEBUG_MISSION, "WAITING ON TOW TRUCK MODEL TO LOAD") ENDWHILE IF NOT DOES_ENTITY_EXIST(myVehicle) myVehicle = CREATE_VEHICLE(TOWTRUCK, vTruckPos, fTruckHeading) SET_VEHICLE_ON_GROUND_PROPERLY(myVehicle) SET_VEHICLE_COLOUR_COMBINATION(myVehicle, 1) CPRINTLN(DEBUG_MISSION, "SETTING VEHICLE COLOR COMBINATION = 1") ENDIF ENDPROC PROC GO_TO_CHECKPOINT_1() IF IS_SCREEN_FADED_OUT() #IF IS_DEBUG_BUILD IF bDoingPSkip //OR bDoingJSkip CPRINTLN(DEBUG_MISSION, "DEBUG: GO_TO_CHECKPOINT_1") CLEAR_PRINTS() CLEAR_HELP() KILL_ANY_CONVERSATION() IF DOES_ENTITY_EXIST(pedTonya) AND NOT IS_ENTITY_DEAD(pedTonya) CLEAR_PED_TASKS_IMMEDIATELY(pedTonya) DELETE_PED(pedTonya) CPRINTLN(DEBUG_MISSION, "DELETING PED - pedTonya") ENDIF IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) ENDIF IF DOES_BLIP_EXIST(myVehicleBlip) REMOVE_BLIP(myVehicleBlip) CPRINTLN(DEBUG_MISSION, "REMOVING BLIP - myVehicleBlip") ENDIF IF DOES_ENTITY_EXIST(vehTruck) DELETE_VEHICLE(vehTruck) CPRINTLN(DEBUG_MISSION, "DELETING VEHICLE - vehTruck") ENDIF IF DOES_BLIP_EXIST(brokenVehicles[0].blipIndex) REMOVE_BLIP(brokenVehicles[0].blipIndex) CPRINTLN(DEBUG_MISSION, "REMOVING BLIP - brokenVehicles[0].blipIndex") ENDIF IF DOES_ENTITY_EXIST(brokenVehicles[0].vehicleIndex) DELETE_VEHICLE(brokenVehicles[0].vehicleIndex) CPRINTLN(DEBUG_MISSION, "DELETING VEHICLE - brokenVehicles[0].vehicleIndex") ENDIF IF DOES_ENTITY_EXIST(brokenVehicles[0].pedIndex) DELETE_PED(brokenVehicles[0].pedIndex) CPRINTLN(DEBUG_MISSION, "DELETING PED - brokenVehicles[0].pedIndex") ENDIF IF DOES_ENTITY_EXIST(brokenVehicles[0].pedIndexPass) DELETE_PED(brokenVehicles[0].pedIndexPass) CPRINTLN(DEBUG_MISSION, "DELETING PED - brokenVehicles[0].pedIndexPass") ENDIF curBrokenCarCount = 0 curCarNameIdx = 0 bSpawnPed = FALSE launchArgs.bInit = TRUE curTutState = TOW_TUTORIAL_VISIBLE_DIA curStage = MISSION_STATE_INTRO bDoingPSkip = FALSE ENDIF #ENDIF HANDLE_FIRST_RETRY_SETUP() CLEAR_AREA(vPlayerFirstCheckpointPosition, 8.0, TRUE) END_REPLAY_SETUP() DO_SCREEN_FADE_IN(500) m_eState = MS_GO_TO_TRUCK CPRINTLN(DEBUG_MISSION, "REPLAY STAGE 1: GOING TO STATE - MS_GO_TO_TRUCK") ENDIF ENDPROC PROC GO_TO_CHECKPOINT_2() IF IS_SCREEN_FADED_OUT() #IF IS_DEBUG_BUILD IF bDoingPSkip //OR bDoingJSkip CPRINTLN(DEBUG_MISSION, "DEBUG: GO_TO_CHECKPOINT_2") IF DOES_ENTITY_EXIST(pedTonya) AND NOT IS_ENTITY_DEAD(pedTonya) CLEAR_PED_TASKS_IMMEDIATELY(pedTonya) DELETE_PED(pedTonya) CPRINTLN(DEBUG_MISSION, "DELETING PED - pedTonya") ENDIF IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) ENDIF IF DOES_BLIP_EXIST(myVehicleBlip) REMOVE_BLIP(myVehicleBlip) CPRINTLN(DEBUG_MISSION, "REMOVING BLIP - myVehicleBlip") ENDIF IF DOES_ENTITY_EXIST(vehTruck) DELETE_VEHICLE(vehTruck) CPRINTLN(DEBUG_MISSION, "DELETING VEHICLE - vehTruck") ENDIF IF DOES_ENTITY_EXIST(myVehicle) DELETE_VEHICLE(myVehicle) CPRINTLN(DEBUG_MISSION, "DELETING VEHICLE - myVehicle") ENDIF IF DOES_BLIP_EXIST(brokenVehicles[0].blipIndex) REMOVE_BLIP(brokenVehicles[0].blipIndex) CPRINTLN(DEBUG_MISSION, "REMOVING BLIP - brokenVehicles[0].blipIndex") ENDIF IF DOES_ENTITY_EXIST(brokenVehicles[0].vehicleIndex) DELETE_VEHICLE(brokenVehicles[0].vehicleIndex) CPRINTLN(DEBUG_MISSION, "DELETING VEHICLE - brokenVehicles[0].vehicleIndex") ENDIF IF DOES_ENTITY_EXIST(brokenVehicles[0].pedIndex) DELETE_PED(brokenVehicles[0].pedIndex) CPRINTLN(DEBUG_MISSION, "DELETING PED - brokenVehicles[0].pedIndex") ENDIF IF DOES_ENTITY_EXIST(brokenVehicles[0].pedIndexPass) DELETE_PED(brokenVehicles[0].pedIndexPass) CPRINTLN(DEBUG_MISSION, "DELETING PED - brokenVehicles[0].pedIndexPass") ENDIF myVehicle = CREATE_VEHICLE(TOWTRUCK, vTruckPos, fTruckHeading) SET_VEHICLE_ON_GROUND_PROPERLY(myVehicle) curBrokenCarCount = 0 curCarNameIdx = 0 bSpawnPed = FALSE curTutState = TOW_TUTORIAL_VISIBLE_DIA curStage = MISSION_STATE_INTRO launchArgs.bInit = TRUE bDoingPSkip = FALSE ENDIF #ENDIF HANDLE_SECOND_RETRY_SETUP() CLEAR_AREA(vPlayerFirstCheckpointPosition, 8.0, TRUE) END_REPLAY_SETUP(myVehicle) SET_GAMEPLAY_CAM_RELATIVE_HEADING(-138.0317) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-0.1190) CPRINTLN(DEBUG_MISSION, "SETTING GAMEPLAY CAM RELATIVE HEADING = -138.0317") CPRINTLN(DEBUG_MISSION, "SETTING GAMEPLAY CAM RELATIVE PITCH = -0.1190") DO_SCREEN_FADE_IN(500) m_eState = MS_DO_MISSION CPRINTLN(DEBUG_MISSION, "REPLAY STAGE 2: GOING TO STATE - MS_DO_MISSION") ELSE CPRINTLN(DEBUG_MISSION, "SCREEN IS NOT FADED OUT") ENDIF ENDPROC PROC GO_TO_CHECKPOINT_3() IF IS_SCREEN_FADED_OUT() STOP_SCRIPTED_CONVERSATION(FALSE) CLEAR_PRINTS() CLEAR_HELP() #IF IS_DEBUG_BUILD IF bDoingPSkip //OR bDoingJSkip CPRINTLN(DEBUG_MISSION, "DEBUG: GO_TO_CHECKPOINT_2") IF DOES_ENTITY_EXIST(pedTonya) AND NOT IS_ENTITY_DEAD(pedTonya) CLEAR_PED_TASKS_IMMEDIATELY(pedTonya) DELETE_PED(pedTonya) CPRINTLN(DEBUG_MISSION, "DELETING PED - pedTonya") ENDIF IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) ENDIF IF DOES_BLIP_EXIST(myVehicleBlip) REMOVE_BLIP(myVehicleBlip) CPRINTLN(DEBUG_MISSION, "REMOVING BLIP - myVehicleBlip") ENDIF IF DOES_ENTITY_EXIST(vehTruck) DELETE_VEHICLE(vehTruck) CPRINTLN(DEBUG_MISSION, "DELETING VEHICLE - vehTruck") ENDIF IF DOES_BLIP_EXIST(brokenVehicles[0].blipIndex) REMOVE_BLIP(brokenVehicles[0].blipIndex) CPRINTLN(DEBUG_MISSION, "REMOVING BLIP - brokenVehicles[0].blipIndex") ENDIF IF DOES_ENTITY_EXIST(brokenVehicles[0].vehicleIndex) DELETE_VEHICLE(brokenVehicles[0].vehicleIndex) CPRINTLN(DEBUG_MISSION, "DELETING VEHICLE - brokenVehicles[0].vehicleIndex") ENDIF IF DOES_ENTITY_EXIST(brokenVehicles[0].pedIndex) DELETE_PED(brokenVehicles[0].pedIndex) CPRINTLN(DEBUG_MISSION, "DELETING PED - brokenVehicles[0].pedIndex") ENDIF IF DOES_ENTITY_EXIST(brokenVehicles[0].pedIndexPass) DELETE_PED(brokenVehicles[0].pedIndexPass) CPRINTLN(DEBUG_MISSION, "DELETING PED - brokenVehicles[0].pedIndexPass") ENDIF bDoingPSkip = FALSE ENDIF #ENDIF INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(TON4_UNHOOK) CPRINTLN(DEBUG_MISSION, "USING SHIT SKIP - NEGATING UNHOOK BONUS") CLEAR_AREA(vPlayerFirstCheckpointPosition, 8.0, TRUE) END_REPLAY_SETUP(myVehicle) vSkipSpawnPosition = vSkipSpawnPosition fSkipSpawnHeading = fSkipSpawnHeading // IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) // SET_ENTITY_COORDS(PLAYER_PED_ID(), vShitSkipSpawnPosition) // SET_ENTITY_HEADING(PLAYER_PED_ID(), fShitSkipSpawnHeading) // CPRINTLN(DEBUG_MISSION, "MOVING PLAYER VIA GO_TO_CHECKPOINT_3") // ENDIF SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) DO_SCREEN_FADE_IN(500) CPRINTLN(DEBUG_MISSION, "TONYA 4: GOING TO STATE - MS_PASSED") m_eState = MS_PASSED ELSE CPRINTLN(DEBUG_MISSION, "SCREEN IS NOT FADED OUT") ENDIF ENDPROC // =========================================================================================================== // DEBUG FUNCTIONS // =========================================================================================================== #IF IS_DEBUG_BUILD PROC JUMP_TO_STAGE(eRC_MainState stage, BOOL bIsDebugJump = FALSE) DO_FADE_OUT_WITH_WAIT() //Update mission checkpoint in case they skipped the stages where it gets set. IF bIsDebugJump SWITCH STAGE CASE MS_GO_TO_TRUCK GO_TO_CHECKPOINT_1() BREAK CASE MS_DO_MISSION GO_TO_CHECKPOINT_2() BREAK ENDSWITCH ENDIF ENDPROC // PURPOSE: Check for Forced Pass or Fail PROC DEBUG_Check_Debug_Keys() eRC_MainState eStage IF LAUNCH_MISSION_STAGE_MENU(sSkipMenu, iDebugJumpStage) IF iDebugJumpStage = 0 eStage = MS_GO_TO_TRUCK ELIF iDebugJumpStage = 1 eStage = MS_DO_MISSION ENDIF bDoingPSkip = TRUE JUMP_TO_STAGE(eStage, TRUE) ENDIF IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)) CPRINTLN(DEBUG_MISSION, "USING P-SKIP") FADE_DOWN() bDoingPSkip = TRUE IF m_eState < MS_DO_MISSION AND (curStage <= MISSION_STATE_CHECK_DISTANCE) GO_TO_CHECKPOINT_1() CPRINTLN(DEBUG_MISSION, "P-SKIP: GO_TO_CHECKPOINT_1") ELIF m_eState = MS_DO_MISSION AND (curStage <= MISSION_STATE_CHECK_DISTANCE) GO_TO_CHECKPOINT_1() CPRINTLN(DEBUG_MISSION, "P-SKIP: GO_TO_CHECKPOINT_1 - 2") ELIF m_eState = MS_DO_MISSION AND (curStage > MISSION_STATE_CHECK_DISTANCE) GO_TO_CHECKPOINT_2() CPRINTLN(DEBUG_MISSION, "P-SKIP: GO_TO_CHECKPOINT_2") ENDIF ENDIF // Check for Pass IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)) IF IS_CUTSCENE_ACTIVE() STOP_CUTSCENE() SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) DISPLAY_RADAR(TRUE) DISPLAY_HUD(TRUE) CLEAR_HELP() SET_WIDESCREEN_BORDERS(FALSE, 0) ENDIF CLEAR_PRINTS() Script_Passed() ENDIF // Check for Fail IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)) CLEAR_HELP() CLEAR_PRINTS() WAIT_FOR_CUTSCENE_TO_STOP() Random_Character_Failed() Script_Cleanup() ENDIF // J-Skip IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)) CLEAR_HELP() CLEAR_PRINTS() IF m_eState < MS_DO_MISSION IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND DOES_ENTITY_EXIST(myVehicle) AND NOT IS_ENTITY_DEAD(myVehicle) SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), myVehicle) SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH() ENDIF ENDIF ENDIF ENDPROC #ENDIF // =========================================================================================================== // MISSION FUNCTIONS & PROCEDURES // =========================================================================================================== PROC HANDLE_TONYA_FAIL_CONDITIONS() IF DOES_ENTITY_EXIST(pedTonya) AND NOT IS_ENTITY_DEAD(pedTonya) IF DO_AGGRO_CHECK(pedTonya, NULL, aggroArgs, aggroReason, FALSE, TRUE, FALSE, TRUE, FALSE) bAggroedTonya = TRUE CPRINTLN(DEBUG_MISSION, "TONYA ATTACKED OUTSIDE TUTORIAL LOOP") TASK_SMART_FLEE_PED(pedTonya, PLAYER_PED_ID(), 1000, -1) ENDIF IF HAS_PLAYER_ABANDONED_TONYA() bAbandonedTonya = TRUE CPRINTLN(DEBUG_MISSION, "PLAYER HAS ABANDONED TONYA - POST TUTORIAL") ENDIF ENDIF ENDPROC FUNC BOOL HANDLE_FAIL_CONDITIONS() // DEBUG_MESSAGE("HANDLE_FAIL_CONDITIONS()") IF m_eState != MS_FAILED IF bFailRc DEBUG_MESSAGE("Fail detected") sFailReason = strFailReason RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Handle mission failed PROC STATE_Failed() SWITCH m_FailState CASE SS_FAIL_SETUP CPRINTLN(DEBUG_MISSION, "INSIDE FAIL SETUP") STOP_SCRIPTED_CONVERSATION(FALSE) // Update with fail reason IF ARE_STRINGS_EQUAL(sFailReason, "DEFAULT") Random_Character_Failed() ELSE Random_Character_Failed_With_Reason(sFailReason, TRUE) ENDIF m_FailState = SS_FAIL_UPDATE BREAK CASE SS_FAIL_UPDATE CPRINTLN(DEBUG_MISSION, "INSIDE FAIL UPDATE") IF GET_MISSION_FLOW_SAFE_TO_CLEANUP() Script_Cleanup() ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Make sure that the player's last vehicle is set as a mission entity so that it wont get cleared up aggeressively by garbage collection while on the mission PROC SAVE_LAST_PLAYER_VEHICLE() VEHICLE_INDEX vehLast IF m_eState > MS_INIT IF NOT IS_PED_INJURED(PLAYER_PED_ID()) vehLast = GET_LAST_DRIVEN_VEHICLE() IF DOES_ENTITY_EXIST(vehLast) IF IS_VEHICLE_DRIVEABLE(vehLast) IF vehLast != viPlayerLastVehicle AND NOT IS_ENTITY_IN_WATER(vehLast) AND NOT IS_ENTITY_A_MISSION_ENTITY(vehLast) //clear out the previous one IF viPlayerLastVehicle != NULL IF IS_ENTITY_A_MISSION_ENTITY(viPlayerLastVehicle) SET_VEHICLE_AS_NO_LONGER_NEEDED(viPlayerLastVehicle) ENDIF ENDIF IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) //set the new vehicle as the current mission entity vehicle viPlayerLastVehicle = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) SET_ENTITY_AS_MISSION_ENTITY(viPlayerLastVehicle) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Franklin heads to truck PROC STATE_GoToTruck() IF IS_FRANKLIN_IN_ANY_TOW_TRUCK(vehTruck, FALSE) CPRINTLN(DEBUG_MISSION, "IS_FRANKLIN_IN_ANY_TOW_TRUCK HAS RETURNED TRUE") IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(GET_PLAYER_INDEX(), 0) CLEAR_PRINTS() ENDIF m_eSubState = SS_CLEANUP ENDIF SWITCH m_eSubState CASE SS_SETUP IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(GET_PLAYER_INDEX(), 0) IF IS_REPEAT_PLAY_ACTIVE() PRINTLN("REPEAT PLAY ACTIVE") IF IS_SCREEN_FADED_OUT() PRINTLN("REPEAT PLAY ACTIVE - FADING IN") DO_SCREEN_FADE_IN(500) ENDIF ENDIF SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(0, "towing_tonya_franklin_travel") // Set objective CLEAR_PRINTS() PRINT("TOW_TUT_INTRUCK", DEFAULT_GOD_TEXT_TIME, 1) // Request tow truck REQUEST_MODEL(TOWTRUCK) IF NOT IS_TIMER_STARTED(tDialogueBufferTimer) START_TIMER_NOW(tDialogueBufferTimer) CPRINTLN(DEBUG_MISSION, "STARTING TIMER - tDialogueBufferTimer") ELSE RESTART_TIMER_NOW(tDialogueBufferTimer) CPRINTLN(DEBUG_MISSION, "RESTARTING TIMER - tDialogueBufferTimer") ENDIF m_eSubState = SS_UPDATE ENDIF BREAK CASE SS_UPDATE IF NOT DOES_ENTITY_EXIST(vehReplayVehicle) IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) vehReplayVehicle = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) SET_ENTITY_AS_MISSION_ENTITY(vehReplayVehicle, TRUE, TRUE) SET_PLAYERS_LAST_VEHICLE(vehReplayVehicle) CPRINTLN(DEBUG_MISSION, "FOUND REPLAY VEHICLE") // IF DOES_ENTITY_EXIST(vehReplayVehicle) AND NOT IS_ENTITY_DEAD(vehReplayVehicle) // CPRINTLN(DEBUG_MISSION, "OVERRIDING REPLAY VEHICLE") // OVERRIDE_REPLAY_CHECKPOINT_VEHICLE(vehReplayVehicle) // ENDIF ENDIF ENDIF ENDIF // Attempt to create tow truck IF NOT DOES_ENTITY_EXIST(vehTruck) REQUEST_MODEL(TOWTRUCK) REQUEST_VEHICLE_ASSET(TOWTRUCK) IF HAS_MODEL_LOADED(TOWTRUCK) AND HAS_VEHICLE_ASSET_LOADED(TOWTRUCK) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vTruckPos, <<50,50,50>>) vehTruck = CREATE_VEHICLE(TOWTRUCK, vVehicleStartPosition, fVehicleStartHeading) myVehicle = vehTruck SET_ENTITY_AS_MISSION_ENTITY(myVehicle) SET_VEH_RADIO_STATION(myVehicle, "RADIO_03_HIPHOP_NEW") CPRINTLN(DEBUG_MISSION, "SETTING STATION - RADIO_03_HIPHOP_NEW") CLEAR_AREA(vVehicleStartPosition, 25.0, TRUE) CPRINTLN(DEBUG_MISSION, "TOO CLOSE TO DEFAULT POSITION, SPAWN TRUCK AT LIQUOR STORE") ELSE vehTruck = CREATE_VEHICLE(TOWTRUCK, vTruckPos, fTruckHeading) myVehicle = vehTruck SET_ENTITY_AS_MISSION_ENTITY(myVehicle) SET_VEH_RADIO_STATION(myVehicle, "RADIO_03_HIPHOP_NEW") CPRINTLN(DEBUG_MISSION, "SETTING STATION - RADIO_03_HIPHOP_NEW") CLEAR_AREA(vTruckPos, 25.0, TRUE, TRUE) CPRINTLN(DEBUG_MISSION, "WE'RE NOT CLOSE ENOUGH TO SEE TRUCK SPAWN IN, USE DEFAULT LOCATION") ENDIF IF DOES_ENTITY_EXIST(vehTruck) // Update blip for truck myVehicleBlip = ADD_BLIP_FOR_ENTITY(vehTruck) SET_BLIP_COLOUR(myVehicleBlip, BLIP_COLOUR_BLUE) SET_BLIP_ROUTE(myVehicleBlip, TRUE) // Release model SET_MODEL_AS_NO_LONGER_NEEDED(TOWTRUCK) ENDIF ENDIF ENDIF // Detect player getting into the tow truck IF NOT IS_ENTITY_DEAD(vehTruck) IF (GET_PED_IN_VEHICLE_SEAT(vehTruck) = PLAYER_PED_ID()) OR IS_FRANKLIN_IN_ANY_TOW_TRUCK(vehTruck, FALSE) m_eSubState = SS_CLEANUP ENDIF ELSE IF DOES_ENTITY_EXIST(vehTruck) DEBUG_MESSAGE("vehTruck is dead") failReason = FAIL_TRANSPORT_DESTROYED MISSION_FAILED() ENDIF ENDIF BREAK CASE SS_CLEANUP IF NOT bWanted // Remove blip IF DOES_BLIP_EXIST(myVehicleBlip) REMOVE_BLIP(myVehicleBlip) ENDIF // Onto the next stage m_eState = MS_DO_MISSION m_eSubState = SS_SETUP ENDIF BREAK ENDSWITCH ENDPROC PROC STATE_Retry() REQUEST_ADDITIONAL_TEXT("TOW", ODDJOB_TEXT_SLOT) // load text for the mission REQUEST_ADDITIONAL_TEXT("DTRSHRD", MINIGAME_TEXT_SLOT) // load text for the mission WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(ODDJOB_TEXT_SLOT) OR NOT HAS_ADDITIONAL_TEXT_LOADED(MINIGAME_TEXT_SLOT) DEBUG_MESSAGE("trying to load string table") WAIT(0) ENDWHILE IF IS_REPLAY_IN_PROGRESS() iStageToUse = Get_Replay_Mid_Mission_Stage() CPRINTLN(DEBUG_MISSION, "REPLAY IS IN PROGRESS, USING STAGE = ", iStageToUse) IF g_bShitskipAccepted IF iStageToUse <= 1 iStageToUse = (iStageToUse + 1) CPRINTLN(DEBUG_MISSION, "TONYA 1 - SHIT SKIP: iStageToUse = ", iStageToUse) ENDIF ENDIF IF iStageToUse = 0 GO_TO_CHECKPOINT_1() ELIF iStageToUse = 1 GO_TO_CHECKPOINT_2() ELIF iStageToUse = 2 GO_TO_CHECKPOINT_3() ENDIF ELSE CPRINTLN(DEBUG_MISSION, "WE'RE NOT DOING A REPLAY - GOING TO STATE - MS_GO_TO_TRUCK") m_eState = MS_GO_TO_TRUCK ENDIF ENDPROC // =========================================================================================================== // Script Loop // =========================================================================================================== SCRIPT(g_structRCScriptArgs sRCLauncherDataIn) sRCLauncherDataLocal = sRCLauncherDataIn RC_TakeEntityOwnership(sRCLauncherDataLocal) RC_CLEANUP_LAUNCHER() launchArgs.nodeType = NODE_TYPE_DYNAMIC launchArgs.launchMode = TOWING_MODE_TRADITIONAL launchArgs.bInit = TRUE launchArgs.bRcVersion = TRUE SET_MISSION_FLAG(TRUE) // Setup callback when player is killed, arrested or goes to multiplayer IF (HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS|FORCE_CLEANUP_FLAG_DEBUG_MENU|FORCE_CLEANUP_FLAG_REPEAT_PLAY)) PRINT_LAUNCHER_DEBUG("Force cleanup [TERMINATING]") Random_Character_Failed() MISSION_CLEANUP(sLoadQueue) Script_Cleanup() ENDIF RANDOM_CHAR_DISPLAY_MISSION_TITLE(RC_TONYA_4) IF NOT IS_REPEAT_PLAY_ACTIVE() g_savedGlobals.sTowingData.iTowingJobsCompleted = 3 CPRINTLN(DEBUG_MISSION, "TOWING RANK = ", g_savedGlobals.sTowingData.iTowingJobsCompleted) ENDIF sbi01 = ADD_SCENARIO_BLOCKING_AREA((<<414.1398, -640.0020, 27.5001>> - <<50,50,50>>), (<<414.1398, -640.0020, 27.5001>> + <<50,50,50>>)) sbi02 = ADD_SCENARIO_BLOCKING_AREA((<<-229.8159, -1171.9999, 21.8557>> - <<50,50,50>>), (<<-229.8159, -1171.9999, 21.8557>> + <<50,50,50>>)) sbi03 = ADD_SCENARIO_BLOCKING_AREA((<<535.2601, -173.7879, 53.5258>> - <<50,50,50>>), (<<535.2601, -173.7879, 53.5258>> + <<50,50,50>>)) SET_ROADS_IN_ANGLED_AREA(<<-537.087402,129.937668,60.971443>>, <<-397.506165,126.523117,69.542374>>, 30.000000, FALSE, FALSE) CPRINTLN(DEBUG_MISSION, "TURNING OFF ROAD NODES AROUND BROKEN DOWN CAR") // SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA((vCarGenPosition - <<15,15,15>>), (vCarGenPosition + <<15,15,15>>), FALSE) // REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA((vCarGenPosition - <<15,15,15>>), (vCarGenPosition + <<15,15,15>>)) SETUP_DEBUG() // Loop within here until the mission passes or fails WHILE(TRUE) WAIT(0) UPDATE_LOAD_QUEUE_LARGE(sLoadQueue) REPLAY_CHECK_FOR_EVENT_THIS_FRAME("RC_TON4") UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene) // Assert check IS_PLAYER_PLAYING(PLAYER_ID()) // Detect if Tonya has been killed/attacked IF HANDLE_FAIL_CONDITIONS() m_eState = MS_FAILED ENDIF UPDATE_LAW(brokenVehicles, bTowHooked, vCurDestObjective, myVehicleBlip, blipImpound, myVehicle, curStage) IF NOT bStartedReplay IF IS_REPLAY_IN_PROGRESS() iStageToUse = Get_Replay_Mid_Mission_Stage() CPRINTLN(DEBUG_MISSION, "START - REPLAY IS IN PROGRESS, USING STAGE = ", iStageToUse) IF NOT g_bShitskipAccepted IF iStageToUse = 0 START_REPLAY_SETUP(vPlayerFirstCheckpointPosition, fPlayerFirstCheckpointHeading) CPRINTLN(DEBUG_MISSION, "CALLING START REPLAY SETUP FOR CHECKPOINT = ", iStageToUse) ELIF iStageToUse = 1 START_REPLAY_SETUP(<<404.1494, -1630.7926, 28.2928>>, 231.5304) CPRINTLN(DEBUG_MISSION, "CALLING START REPLAY SETUP FOR CHECKPOINT = ", iStageToUse) ELIF iStageToUse = 2 START_REPLAY_SETUP(vShitSkipSpawnPosition, fShitSkipSpawnHeading) CPRINTLN(DEBUG_MISSION, "CALLING START REPLAY SETUP FOR CHECKPOINT = ", iStageToUse) ENDIF ELSE IF iStageToUse = 0 START_REPLAY_SETUP(<<404.1494, -1630.7926, 28.2928>>, 231.5304) CPRINTLN(DEBUG_MISSION, "CALLING START REPLAY SETUP FOR CHECKPOINT = ", iStageToUse) ELIF iStageToUse = 1 START_REPLAY_SETUP(vShitSkipSpawnPosition, fShitSkipSpawnHeading) CPRINTLN(DEBUG_MISSION, "CALLING START REPLAY SETUP FOR CHECKPOINT = ", iStageToUse) ENDIF ENDIF CPRINTLN(DEBUG_MISSION, "bStartedReplay = TRUE") bStartedReplay = TRUE ENDIF ENDIF mnExtraModel = mnExtraModel // Needed to compile bCurrentlyTonyaAbandoned = bCurrentlyTonyaAbandoned bPrintAllowTonyaToEnter = bPrintAllowTonyaToEnter // Mission update SWITCH(m_eState) CASE MS_INIT STATE_Retry() BREAK CASE MS_GO_TO_TRUCK STATE_GoToTruck() BREAK CASE MS_DO_MISSION IF DO_TOWING_CORE(launchArgs, sLoadQueue) Script_Passed() ENDIF BREAK CASE MS_FAILED STATE_Failed() BREAK CASE MS_PASSED Script_Passed() BREAK ENDSWITCH // Check debug completion/failure #IF IS_DEBUG_BUILD DEBUG_Check_Debug_Keys() #ENDIF ENDWHILE // Script should never reach here. Always terminate with cleanup function. ENDSCRIPT