Files
gtav-src/script/dev_ng/singleplayer/scripts/cellphone/appExtraction.sc
T
2025-09-29 00:52:08 +02:00

576 lines
18 KiB
Python
Executable File

//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_misc.sch"
USING "commands_script.sch"
USING "commands_pad.sch"
USING "cellphone_public.sch"
USING "cellphone_private.sch"
USING "dialogue_public.sch"
USING "player_ped_public.sch"
USING "stack_sizes.sch"
USING "mission_repeat_public.sch"
USING "mission_stat_public.sch"
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : appExtraction.sc
// AUTHOR : Steve T
// DESCRIPTION : Used to launch Extraction app from cellphone.
//
//
//
//
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
BOOL b_InitialExtractionSetup = FALSE
PROC Set_Up_Extraction_Buttons_Yes_No()
IF g_b_ToggleButtonLabels
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_POS, 1,
13, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, "CELL_201") //"YES" - Positive
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_NEG, 1,
14, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, "CELL_213") //"NO" - Negative
ELSE
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_POS, 1,
13, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"YES" - Positive
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_NEG, 1,
14, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"NO" - Negative
ENDIF
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_OTHER, 0,
1, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"Error!" - Other
CLEAR_BIT (BitSet_CellphoneDisplay, g_BS_OTHER_OPTION_IS_DISPLAYED)
ENDPROC
PROC Set_Up_Extraction_Buttons_Quit()
IF g_b_ToggleButtonLabels
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_POS, 0,
13, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, "CELL_201") //"YES" - Positive
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_NEG, 1,
14, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, "CELL_213") //"NO" - Negative
ELSE
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_POS, 0,
13, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"YES" - Positive
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_NEG, 1,
14, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"NO" - Negative
ENDIF
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING (SF_MovieIndex, "SET_SOFT_KEYS", BADGER_OTHER, 0,
1, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM) //"Error!" - Other
CLEAR_BIT (BitSet_CellphoneDisplay, g_BS_OTHER_OPTION_IS_DISPLAYED)
ENDPROC
//PURPOSE: This fills the scaleform view state with the co-ordinate sets.
PROC Scaleform_Set_Extraction_Details()
//Temo! Trackify view state used until we get proper scaleform!
/*
BEGIN_SCALEFORM_MOVIE_METHOD (SF_MovieIndex, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (23) //System
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (0) //System
IF IS_BIT_SET (BitSet_CellphoneDisplay_Continued, g_BSC_REMOVE_TRACKIFY_TARGET)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (-99) //Negative angle removes target.
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (0)
ELSE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(45)) //Trackify Screen
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(10.0))
ENDIF
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (100)//(FLOOR(10.0)) //The lower this number the further away the target will be on the radar.
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (1) //Skip the loading screen
IF IS_BIT_SET (BitSet_CellphoneDisplay_Continued, g_BSC_HIDE_TRACKIFY_TARGET_ARROW)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL (FALSE) //Hide arrow on target blip.
ELSE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL (TRUE) //Show arrow on target blip.
ENDIF
IF IS_BIT_SET (BitSet_CellphoneDisplay_Third, g_BSTHIRD_DISPLAY_TRACKIFY_RELATIVE_HEIGHT)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT (10.0)
ENDIF
END_SCALEFORM_MOVIE_METHOD()
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER (SF_MovieIndex, "DISPLAY_VIEW", 23, TO_FLOAT(1))
*/
//LEGACY_SCALEFORM_MOVIE_METHOD_WITH_STRING (SF_MovieIndex, "SET_HEADER", "CELL_4")
/*
{ Added for new Extraction app requested in TODO 2574720 }
[CELL_EXTRACT]
Extraction
[CELL_EXTBYOU]
You
[CELL_EXTBTARG]
Target
[CELL_EXTPRES]
Your Location
[CELL_BODYG]
Bodyguard
*/
//Allows the colours used for each vector component to be set by MP. url:bugstar:2596571
//HUD_COLOURS g_hc_PresX, g_hc_PresY, g_hc_PresZ
//HUD_COLOURS g_hc_BodygX, g_hc_BodygY, g_hc_BodygZ
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"SET_DATA_SLOT_EMPTY", 24)
BEGIN_SCALEFORM_MOVIE_METHOD (SF_MovieIndex, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (24) //Specify view state to be filled.
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (0) //As this is a full screen app, the slot to be filled is always zero.
IF IS_BIT_SET (BitSet_CellphoneTU, g_BSTU_SET_EXTRACTION_PRES_VIEW)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL (TRUE) //Should be (FALSE) according to the hub but that's wrong. This actually means we only want one column to display. This was used for single column onlu
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING ("CELL_EXTPRES") "Your Location - This was used for the single column setup.
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL (FALSE) //Contrary to hub info, this will display both columns.
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING ("CELL_EXTBYOU") //2603763 "You" - needs to be short to fit onscreen.
//Hud colours.
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_PresX))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionPresidentVec.x))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_PresY))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionPresidentVec.y))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_PresZ))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionPresidentVec.z))
//New for 2603763. This TODO requested that we also display the nearest bodyguard when in the President view.
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING ("CELL_BODYG") //"Bodyguard"
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_BodygX))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionBodyguardVec.x))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_BodygY))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionBodyguardVec.y))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_BodygZ))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionBodyguardVec.z))
ELSE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL (FALSE) //Should be TRUE according to the hub. This actually means we want both columns to display.
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING (GET_FILENAME_FOR_AUDIO_CONVERSATION("CELL_EXTBTYOU"))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING ("CELL_EXTBYOU")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_BodygX))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionBodyguardVec.x))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_BodygY))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionBodyguardVec.y))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_BodygZ))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionBodyguardVec.z))
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING (GET_FILENAME_FOR_AUDIO_CONVERSATION("CELL_EXTBTARG"))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING ("CELL_EXTBTARG")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_PresX))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionPresidentVec.x))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_PresY))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionPresidentVec.y))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (ENUM_TO_INT(g_hc_PresZ))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT (FLOOR(g_v_ExtractionPresidentVec.z))
ENDIF
END_SCALEFORM_MOVIE_METHOD()
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER (SF_MovieIndex, "DISPLAY_VIEW", 24, TO_FLOAT(1))
#if IS_DEBUG_BUILD
cdPrintstring ("AppExtraction - Updating Scaleform.")
cdPrintnl()
#endif
ENDPROC
PROC Initialise_Extraction_App()
Scaleform_Set_Extraction_Details()
#if IS_DEBUG_BUILD
cdPrintstring ("AppExtraction - S_P_D appExtraction initialisation...")
cdPrintnl()
#endif
ENDPROC
PROC Refresh_Extraction_App()
Scaleform_Set_Extraction_Details()
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintstring ("AppExtraction - Refresh_Extraction_App triggered!")
cdPrintnl()
#endif
ENDPROC
PROC Cleanup_and_Terminate()
#if IS_DEBUG_BUILD
PRINTNL()
PRINTSTRING ("AppExtraction - appExtraction exiting normally.")
PRINTNL()
cdPrintnl()
cdPrintstring ("AppExtraction - S_P_D appExtraction exiting normally.")
cdPrintnl()
#endif
TERMINATE_THIS_THREAD()
ENDPROC
SCRIPT
//Ensure this script persists during network game
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
IF b_InitialExtractionSetup = FALSE
Set_Up_Extraction_Buttons_Quit()
Initialise_Extraction_App()
b_InitialExtractionSetup = TRUE
SETTIMERA(0) //We don't want to refresh the two sets of co-ordinates every frame. That's too expensive.
ENDIF
WHILE TRUE
WAIT(0)
IF g_Cellphone.PhoneDS <> PDS_ONGOING_CALL //i.e a phonecall is not attempting to get through to the player.
SWITCH g_Cellphone.PhoneDS
CASE PDS_RUNNINGAPP
//Temp widget controlled debug which displays the vectors passed via public functions SET_EXTRACTION_BODYGUARD_VECTOR and SET_EXTRACTION_PRESIDENT_VECTOR.
#if IS_DEBUG_BUILD
IF g_Cellphone_Onscreen_State_Debug
IF IS_BIT_SET (BitSet_CellphoneTU, g_BSTU_ENABLE_MP_PRES_EXTRACTION_APP )
/*
[CELL_EXTBYOU]
You
[CELL_EXTBTARG]
Target
[CELL_EXTPRES]
Your Location
*/
IF IS_BIT_SET (BitSet_CellphoneTU, g_BSTU_SET_EXTRACTION_PRES_VIEW) //If the player is playing as the President we want to display those coords only and have Your Location as the title.
DISPLAY_TEXT_WITH_LITERAL_STRING (0.65, 0.12, "STRING", "President View")
DISPLAY_TEXT_WITH_LITERAL_STRING (0.75, 0.22, "STRING", GET_FILENAME_FOR_AUDIO_CONVERSATION("CELL_EXTPRES"))
DISPLAY_TEXT_WITH_FLOAT (0.85, 0.30, "CELL_500", g_v_ExtractionPresidentVec.x, 1)
DISPLAY_TEXT_WITH_FLOAT (0.85, 0.38, "CELL_501", g_v_ExtractionPresidentVec.y, 1)
DISPLAY_TEXT_WITH_FLOAT (0.85, 0.46, "CELL_502", g_v_ExtractionPresidentVec.z, 1)
ELSE
DISPLAY_TEXT_WITH_LITERAL_STRING (0.65, 0.12, "STRING", "Bodyguard View")
//Playing as a bodyguard, display both columns and have the Bodyguard marked as You and the President marked as the target.
DISPLAY_TEXT_WITH_LITERAL_STRING (0.75, 0.22, "STRING", GET_FILENAME_FOR_AUDIO_CONVERSATION("CELL_EXTBYOU"))
DISPLAY_TEXT_WITH_FLOAT (0.75, 0.30, "CELL_500", g_v_ExtractionBodyguardVec.x, 1)
DISPLAY_TEXT_WITH_FLOAT (0.75, 0.38, "CELL_501", g_v_ExtractionBodyguardVec.y, 1)
DISPLAY_TEXT_WITH_FLOAT (0.75, 0.46, "CELL_502", g_v_ExtractionBodyguardVec.z, 1)
DISPLAY_TEXT_WITH_LITERAL_STRING (0.85, 0.22, "STRING", GET_FILENAME_FOR_AUDIO_CONVERSATION("CELL_EXTBTARG"))
DISPLAY_TEXT_WITH_FLOAT (0.85, 0.30, "CELL_500", g_v_ExtractionPresidentVec.x, 1)
DISPLAY_TEXT_WITH_FLOAT (0.85, 0.38, "CELL_501", g_v_ExtractionPresidentVec.y, 1)
DISPLAY_TEXT_WITH_FLOAT (0.85, 0.46, "CELL_502", g_v_ExtractionPresidentVec.z, 1)
ENDIF
ENDIF
ENDIF
#endif
IF b_InitialExtractionSetup = TRUE
AND TIMERA() > 1500
Refresh_Extraction_App()
SETTIMERA(0) //reset the timer. We don't want to refresh every frame. It's too expensive to update scaleform.
ENDIF
BREAK
CASE PDS_COMPLEXAPP
IF Is_Phone_Control_Just_Pressed (FRONTEND_CONTROL, INT_TO_ENUM (CONTROL_ACTION, PHONE_GO_BACK_INPUT)) //Go back action - user opted to return to full text message list from single message display.
Play_Back_Beep()
g_InputButtonJustPressed = TRUE
IF g_CellPhone.PhoneDS > PDS_AWAY //make sure that the following state assignment cannot interfere with AWAY or DISABLED assignment.
g_Cellphone.PhoneDS = PDS_RUNNINGAPP
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintstring("STATE ASSIGNMENT 23198. AppExtraction assigns PDS_RUNNINGAPP")
cdPrintnl()
#endif
ENDIF
ENDIF
BREAK
DEFAULT
#if IS_DEBUG_BUILD
PRINTSTRING("AppExtraction in default state. Should terminate if exit check in place.")
PRINTNL()
#endif
BREAK
ENDSWITCH
IF CHECK_FOR_APPLICATION_EXIT()
Cleanup_and_Terminate()
ENDIF
ELSE
//This is an important section! It tells this script what to do when a call, be it answerphone or other phonecall, comes through.
//It is important to look at how appTextMessage interacts with any change to this section as it relies upon this script to make a call to any message sender.
BeforeCallPhoneDS = PDS_MAXIMUM //After a call has finished the phone display state usually alters to whatever it was before the call came through.
//We don't really want to go back to the "calling Repeat" screen after an answerphone message so we set it to PDS_MAXIMUM
//here. We could just as easily put the phone completely away if need be.
//NB - This also means that when browsing the Repeats list, if a calls comes through and it terminates then we default
//back to MAXIMUM mode not browsing the Repeats list.
Cleanup_and_Terminate() //Likewise, having this here will make sure this script is terminated should any call come through...
ENDIF
IF CHECK_FOR_ABNORMAL_EXIT()
Cleanup_and_Terminate()
ENDIF
ENDWHILE
ENDSCRIPT