1640 lines
52 KiB
Python
Executable File
1640 lines
52 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 : Tonya1.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_CUTSCENE_SETUP,
|
|
SS_CUTSCENE_LEADIN,
|
|
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
|
|
|
|
MODEL_NAMES mnTonya = IG_TONYA
|
|
|
|
VECTOR vTruckPos = <<401.6370, -1633.3003, 28.2928>>
|
|
VECTOR vCutscenePosition = <<-16.5304, -1473.1208, 29.6110>>
|
|
|
|
FLOAT fTruckHeading = 231.5304
|
|
|
|
INT iStageToUse
|
|
INT iTonyaDialogueStages
|
|
INT iNavmeshBlocking
|
|
|
|
BOOL bTonyaCarJackingConvo = FALSE
|
|
BOOL bPlayedDelayInTruckConvo = FALSE
|
|
BOOL bTonyaGotCarDialogue01 = FALSE
|
|
BOOL bSetupTonyaAI = FALSE
|
|
BOOL bPrintFirstObjective = FALSE
|
|
BOOL bTaskedTonyaToEnterTruck = FALSE
|
|
BOOL bStartedReplay = FALSE
|
|
BOOL bMovedCar = FALSE
|
|
BOOL bIsPlayingConvo = FALSE
|
|
|
|
structTimer tDelayTruckTimer
|
|
structTimer tLeadInTimer
|
|
|
|
//REPLAY VARIABLES
|
|
VECTOR vPlayerFirstCheckpointPosition = <<-10.7897, -1471.2037, 29.5520>>
|
|
FLOAT fPlayerFirstCheckpointHeading = 276.1668
|
|
VECTOR vTonyaFirstCheckpointPosition = <<-14.3934, -1472.6962, 29.5896>>
|
|
FLOAT fTonyaFirstCheckpointHeading = 314.2467
|
|
|
|
VECTOR vSuppressCarGenPosition = <<226.6203, -854.3209, 28.9561>>
|
|
|
|
//VECTOR vPostCutsceneWalkToPos = <<-4.2363, -1469.6809, 29.5495>>
|
|
|
|
// -----------------------------------
|
|
// 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(BOOL bTerminateThread = TRUE)
|
|
|
|
// Clear the mission title
|
|
MISSION_FLOW_CLEAR_DISPLAY_MISSION_TITLE()
|
|
|
|
MISSION_DOORS_SET_DOOR_STATE(sMyDoors[TOWING_GATES_EAST], FALSE)
|
|
MISSION_DOORS_SET_DOOR_STATE(sMyDoors[TOWING_GATES_SOUTH], FALSE)
|
|
|
|
MISSION_DOORS_CLEANUP_DOOR(sMyDoors[TOWING_GATES_EAST])
|
|
MISSION_DOORS_CLEANUP_DOOR(sMyDoors[TOWING_GATES_SOUTH])
|
|
|
|
// Ensure launcher is cleaned up
|
|
RC_CLEANUP_LAUNCHER()
|
|
|
|
// If the mission was triggered then additional mission cleanup will be required.
|
|
IF (Random_Character_Cleanup_If_Triggered())
|
|
CPRINTLN(DEBUG_MISSION, "...Random Character Script was triggered so additional cleanup required")
|
|
ENDIF
|
|
|
|
// Cleanup the scene created by the launcher
|
|
RC_CleanupSceneEntities(sRCLauncherDataLocal, FALSE)
|
|
|
|
// Release tow truck
|
|
SAFE_RELEASE_VEHICLE(vehTruck)
|
|
|
|
// Remove blips
|
|
IF DOES_BLIP_EXIST(myVehicleBlip)
|
|
REMOVE_BLIP(myVehicleBlip)
|
|
ENDIF
|
|
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA((vSuppressCarGenPosition - <<25,25,25>>), (vSuppressCarGenPosition - <<25,25,25>>), TRUE)
|
|
|
|
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, bTerminateThread)
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Pass
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
PROC Script_Passed(BOOL bTerminateThread = TRUE)
|
|
// Unlock Tonya as a contact.
|
|
ADD_CONTACT_TO_PHONEBOOK(CHAR_TOW_TONYA, FRANKLIN_BOOK)
|
|
Random_Character_Passed(CP_OJ_TOW1)
|
|
Script_Cleanup(bTerminateThread)
|
|
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 SETUP_TONYA_AI()
|
|
IF DOES_ENTITY_EXIST(pedTonya) AND NOT IS_ENTITY_DEAD(pedTonya)
|
|
IF NOT IS_PED_IN_GROUP(pedTonya)
|
|
SET_PED_AS_GROUP_MEMBER(pedTonya, PLAYER_GROUP_ID())
|
|
SET_PED_NEVER_LEAVES_GROUP(pedTonya, TRUE)
|
|
SET_PED_GROUP_MEMBER_PASSENGER_INDEX(pedTonya, VS_FRONT_RIGHT)
|
|
// SET_GROUP_FORMATION(PLAYER_GROUP_ID(), FORMATION_SURROUND_FACING_INWARDS)
|
|
SET_PED_CONFIG_FLAG(pedTonya, PCF_ForcedToUseSpecificGroupSeatIndex, TRUE)
|
|
SET_GROUP_FORMATION_SPACING(PLAYER_GROUP_ID(), 2.0)
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
TASK_LOOK_AT_ENTITY(pedTonya, PLAYER_PED_ID(), -1, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
|
|
ENDIF
|
|
CPRINTLN(DEBUG_MISSION, "CALLING - SETUP_TONYA_AI")
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC HANDLE_FIRST_RETRY_SETUP()
|
|
CPRINTLN(DEBUG_MISSION, "INSIDE - 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
|
|
|
|
IF NOT DOES_ENTITY_EXIST(pedTonya)
|
|
REQUEST_MODEL(mnTonya)
|
|
|
|
WHILE NOT HAS_MODEL_LOADED(mnTonya)
|
|
WAIT(0)
|
|
CPRINTLN(DEBUG_MISSION, "WAITING ON TONYA MODEL TO LOAD")
|
|
ENDWHILE
|
|
|
|
pedTonya = CREATE_PED(PEDTYPE_CIVFEMALE, mnTonya, vTonyaFirstCheckpointPosition, fTonyaFirstCheckpointHeading)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedTonya, TRUE)
|
|
|
|
SET_PED_COMPONENT_VARIATION(pedTonya, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(pedTonya, INT_TO_ENUM(PED_COMPONENT,2), 0, 0, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(pedTonya, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(pedTonya, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(pedTonya, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
|
|
|
CPRINTLN(DEBUG_MISSION, "CREATING NEW TONYA - STAGE 0")
|
|
ADD_PED_FOR_DIALOGUE(pedConvo, 3, pedTonya, "TONYA")
|
|
SET_PED_MODEL_IS_SUPPRESSED(mnTonya, TRUE)
|
|
|
|
ADD_RELATIONSHIP_GROUP("instructorRelGroup", relInstructor)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(pedTonya, relInstructor)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_RESPECT, relInstructor, RELGROUPHASH_PLAYER)
|
|
|
|
SET_ENTITY_COORDS(pedTonya, vTonyaFirstCheckpointPosition)
|
|
SET_ENTITY_HEADING(pedTonya, fTonyaFirstCheckpointHeading)
|
|
CPRINTLN(DEBUG_MISSION, "SETTING TONYA'S POSITION AND HEADING")
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC HANDLE_SECOND_RETRY_SETUP()
|
|
CPRINTLN(DEBUG_MISSION, "INSIDE - HANDLE_SECOND_RETRY_SETUP")
|
|
|
|
HANDLE_REPLAY_VEHICLE(<<405.7806, -1652.3694, 28.2928>>, 139.8366)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(pedTonya)
|
|
REQUEST_MODEL(mnTonya)
|
|
REQUEST_MODEL(TOWTRUCK)
|
|
REQUEST_VEHICLE_ASSET(TOWTRUCK)
|
|
|
|
WHILE NOT HAS_MODEL_LOADED(mnTonya)
|
|
OR NOT HAS_MODEL_LOADED(TOWTRUCK)
|
|
OR NOT HAS_VEHICLE_ASSET_LOADED(TOWTRUCK)
|
|
WAIT(0)
|
|
CPRINTLN(DEBUG_MISSION, "WAITING ON TONYA MODEL TO LOAD")
|
|
ENDWHILE
|
|
|
|
pedTonya = CREATE_PED(PEDTYPE_CIVFEMALE, mnTonya, vTonyaFirstCheckpointPosition, fTonyaFirstCheckpointHeading)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedTonya, TRUE)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(myVehicle)
|
|
myVehicle = CREATE_VEHICLE(TOWTRUCK, vTruckPos, fTruckHeading)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(myVehicle)
|
|
CPRINTLN(DEBUG_MISSION, "CREATING TRUCK VIA HANDLE_SECOND_RETRY_SETUP")
|
|
SET_VEHICLE_COLOUR_COMBINATION(myVehicle, 1)
|
|
CPRINTLN(DEBUG_MISSION, "SETTING VEHICLE COLOR COMBINATION = 1")
|
|
ENDIF
|
|
|
|
SET_PED_COMPONENT_VARIATION(pedTonya, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(pedTonya, INT_TO_ENUM(PED_COMPONENT,2), 0, 0, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(pedTonya, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(pedTonya, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(pedTonya, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
|
CPRINTLN(DEBUG_MISSION, "CREATING NEW TONYA - STAGE 1")
|
|
|
|
ADD_PED_FOR_DIALOGUE(pedConvo, 3, pedTonya, "TONYA")
|
|
SET_PED_MODEL_IS_SUPPRESSED(mnTonya, TRUE)
|
|
|
|
ADD_RELATIONSHIP_GROUP("instructorRelGroup", relInstructor)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(pedTonya, relInstructor)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_RESPECT, relInstructor, RELGROUPHASH_PLAYER)
|
|
|
|
SETUP_TONYA_AI()
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC HANDLE_THIRD_RETRY_SETUP()
|
|
CPRINTLN(DEBUG_MISSION, "INSIDE - HANDLE_THIRD_RETRY_SETUP")
|
|
|
|
IF NOT DOES_ENTITY_EXIST(myVehicle)
|
|
REQUEST_MODEL(TOWTRUCK)
|
|
REQUEST_VEHICLE_ASSET(TOWTRUCK)
|
|
|
|
WHILE NOT HAS_MODEL_LOADED(TOWTRUCK)
|
|
OR NOT HAS_VEHICLE_ASSET_LOADED(TOWTRUCK)
|
|
WAIT(0)
|
|
CPRINTLN(DEBUG_MISSION, "WAITING ON TOWTRUCK MODEL TO LOAD")
|
|
ENDWHILE
|
|
|
|
IF NOT DOES_ENTITY_EXIST(myVehicle)
|
|
myVehicle = CREATE_VEHICLE(TOWTRUCK, vTruckPos, fTruckHeading)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(myVehicle)
|
|
CPRINTLN(DEBUG_MISSION, "CREATING TRUCK VIA HANDLE_THIRD_RETRY_SETUP")
|
|
ENDIF
|
|
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")
|
|
ELSE
|
|
IF DOES_ENTITY_EXIST(pedTonya)
|
|
CPRINTLN(DEBUG_MISSION, "TONYA EXISTS")
|
|
ENDIF
|
|
IF NOT IS_ENTITY_DEAD(pedTonya)
|
|
CPRINTLN(DEBUG_MISSION, "TONYA IS NOT DEAD")
|
|
ENDIF
|
|
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
|
|
|
|
bPrintFirstObjective = FALSE
|
|
bDoingPSkip = FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
HANDLE_FIRST_RETRY_SETUP()
|
|
|
|
CLEAR_AREA(vPlayerFirstCheckpointPosition, 8.0, TRUE)
|
|
|
|
END_REPLAY_SETUP()
|
|
|
|
SETUP_TONYA_AI()
|
|
|
|
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
|
|
bPrintFirstObjective = FALSE
|
|
|
|
CPRINTLN(DEBUG_MISSION, "CALLING - HANLDE_PLACING_PLAYER_AND_TONYA_INTO_TOWTRUCK_AND_MOVING")
|
|
HANLDE_PLACING_PLAYER_AND_TONYA_INTO_TOWTRUCK_AND_MOVING()
|
|
|
|
bDoingPSkip = FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
HANDLE_SECOND_RETRY_SETUP()
|
|
|
|
CLEAR_AREA(vPlayerFirstCheckpointPosition, 8.0, TRUE)
|
|
|
|
END_REPLAY_SETUP(myVehicle)
|
|
|
|
IF DOES_ENTITY_EXIST(pedTonya) AND NOT IS_ENTITY_DEAD(pedTonya)
|
|
AND NOT IS_ENTITY_DEAD(myVehicle)
|
|
SET_PED_INTO_VEHICLE(pedTonya, myVehicle, VS_FRONT_RIGHT)
|
|
CPRINTLN(DEBUG_MISSION, "SETTING TONYA INTO THE TRUCK")
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(pedTonya, TRUE)
|
|
ENDIF
|
|
|
|
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(TON1_UNHOOK)
|
|
CPRINTLN(DEBUG_MISSION, "USING SHIT SKIP - NEGATING UNHOOK BONUS")
|
|
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), vSkipSpawnPosition)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), fSkipSpawnHeading)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
HANDLE_THIRD_RETRY_SETUP()
|
|
|
|
CLEAR_AREA(vPlayerFirstCheckpointPosition, 8.0, TRUE)
|
|
|
|
END_REPLAY_SETUP()
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
|
|
DO_SCREEN_FADE_IN(500)
|
|
|
|
CPRINTLN(DEBUG_MISSION, "TONYA 2: GOING TO STATE - MS_PASSED")
|
|
m_eState = MS_PASSED
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, "SCREEN IS NOT FADED OUT")
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// DEBUG FUNCTIONS
|
|
// ===========================================================================================================
|
|
|
|
// debug only
|
|
#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)
|
|
AND DOES_ENTITY_EXIST(pedTonya) AND NOT IS_ENTITY_DEAD(pedTonya)
|
|
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), myVehicle)
|
|
SET_PED_INTO_VEHICLE(pedTonya, myVehicle, VS_FRONT_RIGHT)
|
|
|
|
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) AND curStage < MISSION_STATE_POST_DROPOFF
|
|
IF m_eState < MS_DO_MISSION
|
|
IF HAS_PLAYER_ABANDONED_TONYA(FALSE)
|
|
bAbandonedTonya = TRUE
|
|
CPRINTLN(DEBUG_MISSION, "PLAYER HAS ABANDONED TONYA - POST TUTORIAL - 01")
|
|
ENDIF
|
|
ELSE
|
|
IF HAS_PLAYER_ABANDONED_TONYA()
|
|
bAbandonedTonya = TRUE
|
|
CPRINTLN(DEBUG_MISSION, "PLAYER HAS ABANDONED TONYA - POST TUTORIAL - 02")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
FUNC BOOL HANDLE_FAIL_CONDITIONS()
|
|
// DEBUG_MESSAGE("HANDLE_FAIL_CONDITIONS()")
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
// CPRINTLN(DEBUG_MISSION, "EXITING FAILING CONDITIONS EARLY, BECAUSE A CUT SCENE IS PLAYING")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF m_eState != MS_FAILED
|
|
HANDLE_TONYA_FAIL_CONDITIONS()
|
|
|
|
IF NOT IS_ENTITY_DEAD(pedTonya)
|
|
IF IS_PED_BEING_JACKED(pedTonya)
|
|
IF GET_PEDS_JACKER(pedTonya) = PLAYER_PED_ID()
|
|
sFailReason = "TOW_FAIL_13"
|
|
CPRINTLN(DEBUG_MISSION, "PLAY LINE, TOW_FAIL_13 - PLAYER JACKING TONYA")
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bAbandonedTonya
|
|
sFailReason = "TOW_FAIL_14"
|
|
CPRINTLN(DEBUG_MISSION, "bAbandonedTonya IS TRUE")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(pedTonya)
|
|
IF IS_ENTITY_DEAD(pedTonya)
|
|
sFailReason = "TOW_FAIL_13b"
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(pedTonya) AND NOT IS_ENTITY_DEAD(pedTonya) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF HAS_PLAYER_THREATENED_PED(pedTonya, FALSE, 0, 10, TRUE)
|
|
CPRINTLN(DEBUG_MISSION, "PLAYER HAS THREATENED TONYA")
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
|
|
IF NOT IS_PED_INJURED(pedTonya)
|
|
TASK_SMART_FLEE_PED(pedTonya, PLAYER_PED_ID(), 1000, -1)
|
|
SET_PED_KEEP_TASK(pedTonya, TRUE)
|
|
CPRINTLN(DEBUG_MISSION, "TASKING TONYA TO FLEE")
|
|
ENDIF
|
|
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(pedTonya, PLAYER_PED_ID())
|
|
sFailReason = "TOW_FAIL_13a"
|
|
CPRINTLN(DEBUG_MISSION, "THE PLAYER HAS HURT TONYA - PLAY LINE, TOW_FAIL_13a")
|
|
ELIF IS_PED_SHOOTING(PLAYER_PED_ID())
|
|
sFailReason = "TOW_FAIL_18"
|
|
CPRINTLN(DEBUG_MISSION, "PLAY LINE, TOW_FAIL_18")
|
|
ELSE
|
|
sFailReason = "TOW_FAIL_13"
|
|
CPRINTLN(DEBUG_MISSION, "DEFAULT: PLAY LINE, TOW_FAIL_13")
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bFailRc //IS_BITMASK_AS_ENUM_SET(launchArgs.iTowFlags, TOWING_FLAG_FAILED)
|
|
DEBUG_MESSAGE("Fail detected")
|
|
sFailReason = strFailReason
|
|
RETURN TRUE
|
|
//TODO DAVE: We also need to pass back the failReason so we can print the right string
|
|
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_MEET_TONYA
|
|
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
|
|
|
|
PROC HANDLE_PLAYER_BEING_TOO_CLOSE()
|
|
VECTOR vPlayerPosition, vTonyaPosition
|
|
FLOAT fTempDistance
|
|
|
|
IF m_eSubState < SS_UPDATE
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
vPlayerPosition = GET_ENTITY_COORDS(PLAYER_PED_ID())
|
|
ENDIF
|
|
IF NOT IS_ENTITY_DEAD(pedTonya)
|
|
vTonyaPosition = GET_ENTITY_COORDS(pedTonya)
|
|
ENDIF
|
|
|
|
fTempDistance = VDIST(vPlayerPosition, vTonyaPosition)
|
|
PRINTLN("fTempDistance = ", fTempDistance)
|
|
|
|
IF fTempDistance < 3.0
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), pedTonya, -1, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(PLAYER_PED_ID(), pedTonya)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Temp cutscene where Franklin meets Tonya
|
|
PROC STATE_MeetTonya()
|
|
|
|
HANDLE_PLAYER_BEING_TOO_CLOSE()
|
|
|
|
SWITCH m_eSubState
|
|
|
|
CASE SS_SETUP
|
|
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
bIsPlayingConvo = TRUE
|
|
CPRINTLN(DEBUG_MISSION, "bIsPlayingConvo = TRUE")
|
|
ENDIF
|
|
|
|
IF NOT IS_GAMEPLAY_HINT_ACTIVE()
|
|
IF NOT IS_PED_INJURED(pedTonya)
|
|
SET_GAMEPLAY_ENTITY_HINT(pedTonya, <<0,0,0>>, TRUE, -1, 3000)
|
|
SET_GAMEPLAY_HINT_FOV(25.0)
|
|
SET_GAMEPLAY_HINT_BASE_ORBIT_PITCH_OFFSET(-0.7)
|
|
SET_GAMEPLAY_HINT_CAMERA_RELATIVE_VERTICAL_OFFSET(0.0)
|
|
SET_GAMEPLAY_HINT_CAMERA_BLEND_TO_FOLLOW_PED_MEDIUM_VIEW_MODE(TRUE)
|
|
ENDIF
|
|
ELSE
|
|
STOP_GAMEPLAY_HINT_BEING_CANCELLED_THIS_UPDATE(TRUE)
|
|
ENDIF
|
|
|
|
IF NOT IS_TIMER_STARTED(tLeadInTimer)
|
|
START_TIMER_NOW(tLeadInTimer)
|
|
CPRINTLN(DEBUG_MISSION, "STARTING TIMER - tLeadInTimer")
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), pedTonya, -1, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_DEAD(pedTonya)
|
|
TASK_LOOK_AT_ENTITY(pedTonya, PLAYER_PED_ID(), -1, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
|
|
ENDIF
|
|
|
|
CLEAR_PLAYER_WANTED_LEVEL(PLAYER_ID())
|
|
|
|
REQUEST_CUTSCENE("tonya_mcs_1")
|
|
RC_PLAYER_TRIGGER_SCENE_LOCK_IN()
|
|
|
|
CPRINTLN(DEBUG_MISSION, "GOING TO STATE - SS_CUTSCENE_LEADIN")
|
|
m_eSubState = SS_CUTSCENE_LEADIN
|
|
BREAK
|
|
|
|
CASE SS_CUTSCENE_LEADIN
|
|
IF IS_TIMER_STARTED(tLeadInTimer)
|
|
IF GET_TIMER_IN_SECONDS(tLeadInTimer) > 3.0
|
|
OR ( bIsPlayingConvo AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() )
|
|
OR ( GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), pedTonya) < 3.5 AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() )
|
|
CPRINTLN(DEBUG_MISSION, "GOING TO STATE - SS_CUTSCENE_SETUP")
|
|
m_eSubState = SS_CUTSCENE_SETUP
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CUTSCENE_SETUP
|
|
|
|
IF HAS_CUTSCENE_LOADED_WITH_FAILSAFE()
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
DISABLE_CHEAT(CHEAT_TYPE_ALL, TRUE)
|
|
|
|
CLEAR_HELP(TRUE)
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Franklin", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) //, PLAYER_ONE)
|
|
ENDIF
|
|
IF NOT IS_ENTITY_DEAD(pedTonya)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(pedTonya, "Tonya", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) //, PLAYER_ONE)
|
|
CPRINTLN(DEBUG_MISSION, "REGISTERING TONYA FOR CUTSCENE")
|
|
ENDIF
|
|
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(), FALSE)
|
|
CPRINTLN(DEBUG_MISSION, "TURNING OFF STEALTH MODE")
|
|
ENDIF
|
|
|
|
iNavmeshBlocking = ADD_NAVMESH_BLOCKING_OBJECT(vCutscenePosition, <<5,5,5>>, 0)
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOW)
|
|
|
|
RC_CLEANUP_LAUNCHER()
|
|
START_CUTSCENE()
|
|
CPRINTLN(DEBUG_MISSION, "STARTING CUTSCENE - tonya_mcs_1")
|
|
|
|
IF IS_REPEAT_PLAY_ACTIVE()
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(1500)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
m_eSubState = SS_UPDATE
|
|
ELSE
|
|
REQUEST_CUTSCENE("tonya_mcs_1")
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
IF IS_GAMEPLAY_HINT_ACTIVE()
|
|
STOP_GAMEPLAY_HINT()
|
|
ENDIF
|
|
|
|
IF NOT bMovedCar
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<-11.120177,-1476.167603,28.534128>>, <<-18.045006,-1470.340576,34.634628>>, 7.000000, vVehicleStartPosition, fVehicleStartHeading, <<3.55, 10.59, 5.55>>)
|
|
CPRINTLN(DEBUG_MISSION, "MOVING VEHICLE AT MISSION START")
|
|
bMovedCar = TRUE
|
|
ENDIF
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin")
|
|
REPLAY_STOP_EVENT()
|
|
// Setup peds for dialogue
|
|
// TASK_FOLLOW_NAV_MESH_TO_COORD(PLAYER_PED_ID(), vPostCutsceneWalkToPos, PEDMOVE_WALK)
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK)
|
|
// SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVEBLENDRATIO_WALK, 2000)
|
|
ENDIF
|
|
ENDIF
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Tonya")
|
|
// Setup peds for dialogue
|
|
IF NOT IS_ENTITY_DEAD(pedTonya)
|
|
FORCE_PED_MOTION_STATE(pedTonya, MS_ON_FOOT_WALK)
|
|
CPRINTLN(DEBUG_MISSION, "MAKING TONYA GO FORWARD")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
|
|
SET_ENTITY_PROOFS(PLAYER_PED_ID(), FALSE, FALSE, FALSE, FALSE, FALSE)
|
|
SET_ENTITY_PROOFS(pedTonya, FALSE, FALSE, FALSE, FALSE, FALSE)
|
|
SET_PED_CAN_RAGDOLL(pedTonya, TRUE)
|
|
|
|
DESTROY_ALL_CAMS()
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
WAIT(0)
|
|
DO_SCREEN_FADE_IN(500)
|
|
ENDIF
|
|
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
|
|
IF IS_GAMEPLAY_HINT_ACTIVE()
|
|
STOP_GAMEPLAY_HINT()
|
|
ENDIF
|
|
|
|
DISPLAY_RADAR(TRUE)
|
|
DISPLAY_HUD(TRUE)
|
|
DISABLE_CELLPHONE(FALSE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
DISABLE_CHEAT(CHEAT_TYPE_ALL, FALSE)
|
|
|
|
REMOVE_NAVMESH_BLOCKING_OBJECT(iNavmeshBlocking)
|
|
CPRINTLN(DEBUG_MISSION, "REMOVING iNavmeshBlocking")
|
|
|
|
// Reset cam
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
// Update state
|
|
m_eState = MS_GO_TO_TRUCK
|
|
m_eSubState = SS_SETUP
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC HANDLE_TONYA_DIALOGUE()
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
STOP_SCRIPTED_CONVERSATION(TRUE)
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bCurrentlyTonyaAbandoned
|
|
EXIT
|
|
ENDIF
|
|
|
|
SWITCH iTonyaDialogueStages
|
|
CASE 0
|
|
// Franklin comments right after the cutscene
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION(pedConvo, "TOWAUD", "TONYA_COMM", CONV_PRIORITY_HIGH)
|
|
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
|
|
|
|
CPRINTLN(DEBUG_MISSION, "iTonyaDialogueStages = 1")
|
|
iTonyaDialogueStages = 1
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
//--------------------------------------------------------------------------------------------------------------------------
|
|
CASE 1
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_TIMER_STARTED(tDialogueBufferTimer)
|
|
IF GET_TIMER_IN_SECONDS(tDialogueBufferTimer) > 5.0
|
|
AND GET_TIMER_IN_SECONDS(tDialogueBufferTimer) < 15.0
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())AND NOT IS_ENTITY_DEAD(pedTonya)
|
|
IF NOT IS_MESSAGE_BEING_DISPLAYED()
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
|
|
IF NOT bTonyaGotCarDialogue
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION(pedConvo, "TOWAUD", "TONYA_CAR", CONV_PRIORITY_HIGH)
|
|
CPRINTLN(DEBUG_MISSION, "TONYA - GOT CAR CONVO")
|
|
bTonyaGotCarDialogue = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// CPRINTLN(DEBUG_MISSION, "WE'VE BEEN A CAR AT SOME POINT - 01")
|
|
bTonyaGotCarDialogue = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF GET_TIMER_IN_SECONDS(tDialogueBufferTimer) > 20.0
|
|
IF NOT bTonyaGotCarDialogue01
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())AND NOT IS_ENTITY_DEAD(pedTonya)
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION(pedConvo, "TOWAUD", "TONYA_CAR2", CONV_PRIORITY_HIGH)
|
|
CPRINTLN(DEBUG_MISSION, "TONYA - GOT CAR CONVO2")
|
|
bTonyaGotCarDialogue01 = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
IF NOT bTonyaCarJackingConvo
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF IS_PED_JACKING(PLAYER_PED_ID())
|
|
IF CREATE_CONVERSATION(pedConvo, "TOWAUD", "TONYA_JACK", CONV_PRIORITY_HIGH)
|
|
CPRINTLN(DEBUG_MISSION, "TONYA - JACKING CAR CONVO")
|
|
bTonyaCarJackingConvo = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())AND NOT IS_ENTITY_DEAD(pedTonya)
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_PED_IN_ANY_VEHICLE(pedTonya)
|
|
OR (NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND NOT IS_PED_IN_ANY_VEHICLE(pedTonya) AND GET_TIMER_IN_SECONDS(tDialogueBufferTimer) > 30.0)
|
|
CPRINTLN(DEBUG_MISSION, "iTonyaDialogueStages = 2")
|
|
iTonyaDialogueStages = 2
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
//--------------------------------------------------------------------------------------------------------------------------
|
|
CASE 2
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION(pedConvo, "TOWAUD", "TONYA_TALK", CONV_PRIORITY_HIGH)
|
|
CPRINTLN(DEBUG_MISSION, "iTonyaDialogueStages = 3")
|
|
iTonyaDialogueStages = 3
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
//--------------------------------------------------------------------------------------------------------------------------
|
|
CASE 3
|
|
|
|
BREAK
|
|
//--------------------------------------------------------------------------------------------------------------------------
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC HANDLE_TONYA_GOING_TO_TRUCK()
|
|
SEQUENCE_INDEX iSeq
|
|
|
|
IF NOT bTaskedTonyaToEnterTruck
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF NOT IS_ENTITY_DEAD(pedTonya) AND DOES_ENTITY_EXIST(myVehicle) AND NOT IS_ENTITY_DEAD(myVehicle)
|
|
IF IS_PED_IN_GROUP(pedTonya)
|
|
REMOVE_PED_FROM_GROUP(pedTonya)
|
|
CPRINTLN(DEBUG_MISSION, "REMOVING TONYA FROM PLAYER GROUP")
|
|
ENDIF
|
|
|
|
OPEN_SEQUENCE_TASK(iSeq)
|
|
IF IS_PED_IN_ANY_VEHICLE(pedTonya)
|
|
TASK_LEAVE_ANY_VEHICLE(NULL)
|
|
ENDIF
|
|
TASK_ENTER_VEHICLE(NULL, myVehicle, DEFAULT_TIME_NEVER_WARP, VS_FRONT_RIGHT, PEDMOVEBLENDRATIO_WALK)
|
|
CLOSE_SEQUENCE_TASK(iSeq)
|
|
TASK_PERFORM_SEQUENCE(pedTonya, iSeq)
|
|
CPRINTLN(DEBUG_MISSION, "TASKING TONYA TO ENTER TRUCK")
|
|
CLEAR_SEQUENCE_TASK(iSeq)
|
|
bTaskedTonyaToEnterTruck = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// To Fix Bug # 1895550
|
|
IF bTaskedTonyaToEnterTruck
|
|
IF NOT IS_PED_INJURED(pedTonya) AND NOT IS_ENTITY_DEAD(myVehicle)
|
|
IF NOT IS_PED_IN_VEHICLE(pedTonya, myVehicle)
|
|
IF GET_SCRIPT_TASK_STATUS(pedTonya, SCRIPT_TASK_PERFORM_SEQUENCE) != PERFORMING_TASK
|
|
AND GET_SCRIPT_TASK_STATUS(pedTonya, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK
|
|
TASK_ENTER_VEHICLE(pedTonya, myVehicle, DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT, PEDMOVEBLENDRATIO_WALK)
|
|
CPRINTLN(DEBUG_MISSION, "TASKING TONYA TO ENTER THE TRUCK AGAIN")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Franklin heads to truck with Tonya
|
|
PROC STATE_GoToTruck()
|
|
|
|
SWITCH m_eSubState
|
|
|
|
CASE SS_SETUP
|
|
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(0, "towing_tonya_franklin_travel")
|
|
|
|
ADD_PED_FOR_DIALOGUE(pedConvo, 1, PLAYER_PED_ID(), "FRANKLIN")
|
|
ADD_PED_FOR_DIALOGUE(pedConvo, 3, pedTonya, "TONYA")
|
|
|
|
// Request tow truck
|
|
REQUEST_MODEL(TOWTRUCK)
|
|
REQUEST_VEHICLE_ASSET(TOWTRUCK)
|
|
|
|
// Blip truck location
|
|
IF NOT DOES_BLIP_EXIST(myVehicleBlip)
|
|
myVehicleBlip = ADD_BLIP_FOR_COORD(<<401.6370, -1633.3003, 28.2928>>)
|
|
SET_BLIP_COLOUR(myVehicleBlip, BLIP_COLOUR_BLUE)
|
|
SET_BLIP_ROUTE(myVehicleBlip, TRUE)
|
|
ENDIF
|
|
|
|
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
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 10.0, REPLAY_IMPORTANCE_LOWEST)
|
|
|
|
SETTIMERA(0)
|
|
|
|
CPRINTLN(DEBUG_MISSION, "STATE_GoToTruck: GOING TO STATE - SS_UPDATE")
|
|
m_eSubState = SS_UPDATE
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
|
|
HANDLE_GATE_OPENING()
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
SET_PED_RESET_FLAG(PLAYER_PED_ID(),PRF_ForcePlayerToEnterVehicleThroughDirectDoorOnly,TRUE)
|
|
ENDIF
|
|
|
|
// FORCE_PED_LOAD_COLLISION_IF_PLAYER_IN_SHOP(pedTonya)
|
|
|
|
IF NOT bPrintFirstObjective AND NOT bCurrentlyTonyaAbandoned
|
|
IF TIMERA() > 5000
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
// Set objective
|
|
PRINT("TOW_TUT_INTRUCK", DEFAULT_GOD_TEXT_TIME, 1)
|
|
bPrintFirstObjective = TRUE
|
|
CPRINTLN(DEBUG_MISSION, "bPrintFirstObjective = TRUE")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT bSetupTonyaAI
|
|
SETUP_TONYA_AI()
|
|
CPRINTLN(DEBUG_MISSION, "bSetupTonyaAI = TRUE")
|
|
bSetupTonyaAI = TRUE
|
|
ENDIF
|
|
|
|
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
|
|
|
|
IF NOT bTaskedTonyaToEnterTruck
|
|
HANDLE_TONYA_BLIPPING_TO_ENTER_CAR(vehTruck)
|
|
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)
|
|
|
|
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")
|
|
|
|
CPRINTLN(DEBUG_MISSION, "CREATING TRUCK VIA STATE_GoToTruck")
|
|
CLEAR_AREA(vTruckPos, 25.0, TRUE, TRUE)
|
|
|
|
IF DOES_ENTITY_EXIST(myVehicle)
|
|
|
|
// Remove blip for coord...
|
|
REMOVE_BLIP(myVehicleBlip)
|
|
|
|
// 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
|
|
|
|
// Handle truck conversation
|
|
IF NOT IS_ENTITY_DEAD(pedTonya)
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(pedTonya)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<423.742371,-1652.842163,27.268002>>, <<397.839600,-1630.331665,40.292778>>, 42.000000)
|
|
AND IS_ENTITY_IN_ANGLED_AREA(pedTonya, <<423.742371,-1652.842163,27.268002>>, <<397.839600,-1630.331665,40.292778>>, 42.000000)
|
|
|
|
HANDLE_TONYA_GOING_TO_TRUCK()
|
|
|
|
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT bPlayedTruckDialogue
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION(pedConvo, "TOWAUD", "TONYA_AT_TRK", CONV_PRIORITY_HIGH)
|
|
CPRINTLN(DEBUG_MISSION, "PLAYING ACKNOWLEDGE TRUCK CONVO")
|
|
|
|
IF NOT IS_TIMER_STARTED(tDelayTruckTimer)
|
|
START_TIMER_NOW(tDelayTruckTimer)
|
|
CPRINTLN(DEBUG_MISSION, "STARTING TIMER - tDelayTruckTimer")
|
|
ENDIF
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_LOWEST)
|
|
|
|
bPlayedTruckDialogue = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT IS_ENTITY_DEAD(vehTruck) AND NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehTruck)
|
|
IF NOT bPlayedDelayInTruckConvo
|
|
IF IS_TIMER_STARTED(tDelayTruckTimer)
|
|
IF GET_TIMER_IN_SECONDS(tDelayTruckTimer) > 20
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION(pedConvo, "TOWAUD", "TONYA_WAIT", CONV_PRIORITY_HIGH)
|
|
RESTART_TIMER_NOW(tDelayTruckTimer)
|
|
//bPlayedDelayInTruckConvo = TRUE
|
|
CPRINTLN(DEBUG_MISSION, "bPlayedDelayInTruckConvo = TRUE")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
HANDLE_TONYA_DIALOGUE()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Detect player getting into the tow truck
|
|
IF NOT bTonyaAbandonWarning AND NOT bWanted
|
|
IF NOT IS_ENTITY_DEAD(vehTruck)
|
|
IF ((GET_PED_IN_VEHICLE_SEAT(vehTruck) = PLAYER_PED_ID()) AND IS_PED_IN_VEHICLE(pedTonya, vehTruck))
|
|
OR IS_FRANKLIN_IN_ANY_TOW_TRUCK(vehTruck, TRUE, pedTonya)
|
|
|
|
// Remove blip
|
|
IF DOES_BLIP_EXIST(myVehicleBlip)
|
|
REMOVE_BLIP(myVehicleBlip)
|
|
CPRINTLN(DEBUG_MISSION, "REMOVING TRUCK BLIP - 01")
|
|
ENDIF
|
|
// Remove blip
|
|
IF DOES_BLIP_EXIST(blipTonya)
|
|
REMOVE_BLIP(blipTonya)
|
|
CPRINTLN(DEBUG_MISSION, "REMOVING TONYA BLIP - 01")
|
|
ENDIF
|
|
|
|
CLEAR_THIS_PRINT("TOWT_WAIT")
|
|
|
|
CPRINTLN(DEBUG_MISSION, "STATE_GoToTruck: GOING TO STATE - SS_CLEANUP")
|
|
m_eSubState = SS_CLEANUP
|
|
ELSE
|
|
IF ((GET_PED_IN_VEHICLE_SEAT(vehTruck) = PLAYER_PED_ID()) AND NOT IS_PED_IN_VEHICLE(pedTonya, vehTruck))
|
|
IF NOT bPrintAllowTonyaToEnter
|
|
PRINT("TOWT_WAIT", DEFAULT_GOD_TEXT_TIME, 1)
|
|
bPrintAllowTonyaToEnter = TRUE
|
|
ENDIF
|
|
|
|
SET_VEH_RADIO_STATION(myVehicle, "RADIO_03_HIPHOP_NEW")
|
|
CPRINTLN(DEBUG_MISSION, "TONYA 1: SETTING STATION - RADIO_03_HIPHOP_NEW")
|
|
|
|
// Remove blip
|
|
IF DOES_BLIP_EXIST(myVehicleBlip)
|
|
REMOVE_BLIP(myVehicleBlip)
|
|
CPRINTLN(DEBUG_MISSION, "REMOVING TRUCK BLIP - 02")
|
|
ENDIF
|
|
IF NOT DOES_BLIP_EXIST(blipTonya)
|
|
blipTonya = ADD_BLIP_FOR_ENTITY(pedTonya)
|
|
SET_BLIP_COLOUR(blipTonya, BLIP_COLOUR_BLUE)
|
|
SET_BLIP_SCALE(blipTonya, BLIP_SIZE_PED)
|
|
CPRINTLN(DEBUG_MISSION, "ADDING TONYA BLIP - 01")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, "TRUCK IS DEAD")
|
|
|
|
IF DOES_ENTITY_EXIST(vehTruck)
|
|
DEBUG_MESSAGE("vehTruck is dead")
|
|
failReason = FAIL_TRANSPORT_DESTROYED
|
|
MISSION_FAILED()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
|
|
IF NOT bWanted
|
|
// Onto the next stage
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_LOWEST)
|
|
|
|
m_eState = MS_DO_MISSION
|
|
DEBUG_MESSAGE("GOTO 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_MEET_TONYA")
|
|
m_eState = MS_MEET_TONYA
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC INIT_TONYA()
|
|
REQUEST_ADDITIONAL_TEXT("TOW", ODDJOB_TEXT_SLOT)
|
|
|
|
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(ODDJOB_TEXT_SLOT)
|
|
DEBUG_MESSAGE("trying to load string table")
|
|
RC_PLAYER_TRIGGER_SCENE_LOCK_IN()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// Script Loop
|
|
// ===========================================================================================================
|
|
|
|
SCRIPT(g_structRCScriptArgs sRCLauncherDataIn)
|
|
|
|
sRCLauncherDataLocal = sRCLauncherDataIn
|
|
RC_TakeEntityOwnership(sRCLauncherDataLocal)
|
|
|
|
CPRINTLN(DEBUG_MISSION, "NODE_TYPE_ABANDON VIA TONYA 1 SCRIPT INIT")
|
|
launchArgs.nodeType = NODE_TYPE_ABANDON
|
|
launchArgs.launchMode = TOWING_MODE_TRADITIONAL
|
|
launchArgs.bInit = TRUE
|
|
launchArgs.bRcVersion = TRUE
|
|
|
|
pedTonya = sRCLauncherDataLocal.pedID[0]
|
|
illegalIdx = 12
|
|
bDoTutorial = TRUE
|
|
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
g_savedGlobals.sTowingData.iTowingJobsCompleted = 0
|
|
CPRINTLN(DEBUG_MISSION, "TOWING RANK = ", g_savedGlobals.sTowingData.iTowingJobsCompleted)
|
|
ENDIF
|
|
|
|
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_1)
|
|
|
|
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_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA((vSuppressCarGenPosition - <<25,25,25>>), (vSuppressCarGenPosition + <<25,25,25>>), FALSE)
|
|
REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA((vSuppressCarGenPosition - <<25,25,25>>), (vSuppressCarGenPosition + <<25,25,25>>))
|
|
|
|
SET_AGGRO_FIELDS_TO_NOT_CHECK()
|
|
|
|
SETUP_DEBUG()
|
|
|
|
INIT_TONYA()
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(0.1)
|
|
STOP_SCRIPTED_CONVERSATION(TRUE)
|
|
|
|
// 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_Tonya")
|
|
|
|
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, pedTonya)
|
|
|
|
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(vSkipSpawnPosition, fSkipSpawnHeading)
|
|
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, "SHITSKIP: CALLING START REPLAY SETUP FOR CHECKPOINT = ", iStageToUse)
|
|
ELIF iStageToUse = 1
|
|
START_REPLAY_SETUP(<<404.1494, -1630.7926, 28.2928>>, 231.5304)
|
|
CPRINTLN(DEBUG_MISSION, "SHITSKIP: CALLING START REPLAY SETUP FOR CHECKPOINT = ", iStageToUse)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_MISSION, "bStartedReplay = TRUE")
|
|
bStartedReplay = TRUE
|
|
ELSE
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF m_eState < MS_GO_TO_TRUCK
|
|
SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVEBLENDRATIO_WALK)
|
|
CPRINTLN(DEBUG_MISSION, "SETTING - PEDMOVEBLENDRATIO_WALK")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
mnExtraModel = mnExtraModel // Needed to compile
|
|
|
|
HANDLE_TONYA_FOOTSTEPS()
|
|
HANDLE_TONYA_NO_PUNCHING()
|
|
HANDLE_TONYA_PEDS_FLEE()
|
|
|
|
// Mission update
|
|
SWITCH(m_eState)
|
|
|
|
CASE MS_INIT
|
|
STATE_Retry()
|
|
BREAK
|
|
|
|
CASE MS_MEET_TONYA
|
|
STATE_MeetTonya()
|
|
BREAK
|
|
|
|
CASE MS_GO_TO_TRUCK
|
|
STATE_GoToTruck()
|
|
BREAK
|
|
|
|
CASE MS_DO_MISSION
|
|
IF DO_TOWING_CORE(launchArgs, sLoadQueue)
|
|
REPLAY_RECORD_BACK_FOR_TIME(10.0, 1.0,REPLAY_IMPORTANCE_LOWEST)
|
|
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
|
|
|