946 lines
28 KiB
Python
Executable File
946 lines
28 KiB
Python
Executable File
|
|
//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
|