USING "rage_builtins.sch" USING "globals.sch" USING "cellphone_public.sch" USING "net_transition_sessions.sch" USING "net_objective_text.sch" USING "net_gang_boss_private.sch" USING "svm_mission_flow.sch" USING "menu_cursor_public.sch" //***********Script CONSTS*********** CONST_INT FAA_BS_PRINTED_PAUSE_MENU_ACTIVE 0 CONST_INT FAA_BS_DISPLAY_ROLLOVER_HELP 1 CONST_INT FAA_BS_OVERLAY_SCREEN_ACTIVE 2 CONST_INT FAA_BS_CURSOR_INPUT_PROCESSED 3 CONST_INT FAA_BS_WAITING_FOR_BUTTON_RETURN_VALUE 4 CONST_INT FAA_BS_WAITING_FOR_ROLLOVER_RETURN_VALUE 5 CONST_INT FAA_BS_FADE_TO_EXIT 6 CONST_INT FAA_BS_DIALOGUE_TUTORIAL_COMPLETE 7 CONST_INT FAA_BS_CURRENTLY_PLAYING_TUTORIAL 8 CONST_INT FAA_BS_DIALOGUE_TUTORIAL_COMPLETE_THIS_BOOT 9 CONST_INT FAA_BS_PRINTED_INTRO_PLEASE_WAIT 10 CONST_INT FAA_BS_PRINTED_DL_PLEASE_WAIT 11 CONST_INT FAA_BS_PRINTED_CONTINUE_STORY_HELP 12 CONST_INT FAA_BS_TRIGGER_BONUS_BILLBOARD_DIALOGUE 13 CONST_INT FAA_BS_OPENED_SEC_CONTRACT_PAGE_W_ACTIVE_CD 14 CONST_INT FAA_BS_DISPLAYING_LEAK_OVERVIEW 15 CONST_INT FAA_BS_INTRO_MISSION_LAUNCH_PREPARED 16 CONST_INT FAA_BS_SETUP_MISSION_LAUNCH_PREPARED 17 CONST_INT ciINPUT_KEYBOARD_DOWN 300 CONST_INT ciINPUT_KEYBOARD_UP 301 //Dialogue consts CONST_INT F_APP_D_INTRO 0 CONST_INT F_APP_D_SEC_CON 1 CONST_INT F_APP_D_SEC_CON2 2 CONST_INT F_APP_D_SEC_CON3 3 CONST_INT F_APP_D_SETUP 4 CONST_INT F_APP_D_SETUP_2 5 CONST_INT F_APP_D_SELECT_LEAK 6 CONST_INT F_APP_D_PARTY_P_INT 7 CONST_INT F_APP_D_BILL_G_INT 8 CONST_INT F_APP_D_HOOD_P_INT 9 CONST_INT F_APP_D_PARTY_P_M2 10 CONST_INT F_APP_D_PARTY_P_F 11 CONST_INT F_APP_D_HOOD_P_M2 12 CONST_INT F_APP_D_HOOD_P_F 13 CONST_INT F_APP_D_BILL_G_M2 14 CONST_INT F_APP_D_BILL_G_F 15 //Enum for the current page ID ENUM FAA_PAGE_INDEX FAA_PAGE_LOGIN, FAA_PAGE_HOME, FAA_PAGE_DATA_LEAK_SELECTION, FAA_PAGE_SECURITY_CONTRACT_SELECTION, FAA_PAGE_DATA_RECOVERY ENDENUM //Enum for button indexes returned by SF ENUM FAA_BUTTON_INDEXES BUTTON_OVERLAY_CANCEL = 201, BUTTON_OVERLAY_ACCEPT, BUTTON_HOME_SECURITY_CONTRACT, BUTTON_HOME_VIP_CONTRACT, BUTTON_DATA_LEAK_1, BUTTON_DATA_LEAK_2, BUTTON_DATA_LEAK_3, BUTTON_DATA_LEAK_TAB_1, BUTTON_DATA_LEAK_TAB_2, BUTTON_DATA_LEAK_TAB_3, BUTTON_SECURITY_CONTRACT_1, BUTTON_SECURITY_CONTRACT_2, BUTTON_SECURITY_CONTRACT_3, BUTTON_INTRO_MISSION, BUTTON_SETUP_MISSION, BUTTON_LOGIN, BUTTON_DATA_LEAK_ACCEPT, BUTTON_SECURITY_CONTRACT_ACCEPT, BUTTON_SECURITY_PAGE_VIP_CONTRACT, //Security page - VIP contract button BUTTON_VIP_PAGE_SEC_CONTRACT, //VIP page - Security contract button BUTTON_DREC_PAGE_SEC_CONTRACT, //Data recovery page - Security contract button BUTTON_DATA_RECOVERY, BUTTON_DATA_RECOVERY_START ENDENUM //Enum for the current state of the script ENUM FAA_APP_STAGE_ID FAA_STAGE_IDLE = 0, FAA_STAGE_SEC_CONTRACT_SELECTED, //Overlay on screen stages FAA_STAGE_STRAND_CONFIRM //Overlay asking the player to confirm their choice of strand ENDENUM ENUM SECURITY_CONTRACT_DIFFICULTY SCD_NORMAL = 1, SCD_HARD = 2, SCD_VS = 3 ENDENUM ENUM FAA_INPUT_SOUNDS FAA_IS_NAV_UP_DOWN, FAA_IS_NAV_LEFT_RIGHT, FAA_IS_NAV_BLOCKED, FAA_IS_SELECT, FAA_IS_BACK, FAA_IS_EXIT, FAA_IS_ERROR, FAA_IS_LOGIN, FAA_IS_LAUNCH_MISSION, FAA_IS_BOOT ENDENUM //***********Script VARIABLES*********** INT iBS INT iSelectedSecurityContract INT iSelectedDataLeakInStrand FIXER_STRANDS eSelectedDataLeakStrand //Input cache values INT iLeftX, iLeftY, iRightX, iRightY //Dialogue tutorial INT iTutorialHelpTime = 0 INT iDialogueRequestID = -1 INT iDialoguePlayingID = -1 STRING sTutTextAfterDialogue = "" SCRIPT_TIMER stTutorialTimer STRING sRolloverHelp STRING sOverlayMethod FIXER_HQ_ID eThisFixerHQ FAA_APP_STAGE_ID eCurrentStage FAA_PAGE_INDEX eCurrentPage FAA_BUTTON_INDEXES eButtonLastHighlighted FIXER_STRANDS eCurrentlyDisplayedStrand = FS_NONE //The Scaleform movie SCALEFORM_INDEX mov //Data return indexes SCALEFORM_RETURN_INDEX currentSelectionReturnIndex SCALEFORM_RETURN_INDEX currentRollOverReturnIndex INT iRolloverReturnTimeOut = 0 #IF IS_DEBUG_BUILD BOOL bRender = TRUE #ENDIF //***********Debug Helper functions*********** #IF IS_DEBUG_BUILD FUNC STRING DEBUG_GET_BUTTON_NAME(FAA_BUTTON_INDEXES eButton) SWITCH eButton CASE BUTTON_OVERLAY_CANCEL RETURN "BUTTON_OVERLAY_CANCEL" CASE BUTTON_OVERLAY_ACCEPT RETURN "BUTTON_OVERLAY_ACCEPT" CASE BUTTON_HOME_SECURITY_CONTRACT RETURN "BUTTON_HOME_SECURITY_CONTRACT" CASE BUTTON_HOME_VIP_CONTRACT RETURN "BUTTON_HOME_VIP_CONTRACT" CASE BUTTON_DATA_LEAK_1 RETURN "BUTTON_DATA_LEAK_1" CASE BUTTON_DATA_LEAK_2 RETURN "BUTTON_DATA_LEAK_2" CASE BUTTON_DATA_LEAK_3 RETURN "BUTTON_DATA_LEAK_3" CASE BUTTON_DATA_LEAK_TAB_1 RETURN "BUTTON_DATA_LEAK_TAB_1" CASE BUTTON_DATA_LEAK_TAB_2 RETURN "BUTTON_DATA_LEAK_TAB_2" CASE BUTTON_DATA_LEAK_TAB_3 RETURN "BUTTON_DATA_LEAK_TAB_3" CASE BUTTON_SECURITY_CONTRACT_1 RETURN "BUTTON_SECURITY_CONTRACT_1" CASE BUTTON_SECURITY_CONTRACT_2 RETURN "BUTTON_SECURITY_CONTRACT_2" CASE BUTTON_SECURITY_CONTRACT_3 RETURN "BUTTON_SECURITY_CONTRACT_3" CASE BUTTON_INTRO_MISSION RETURN "BUTTON_INTRO_MISSION" CASE BUTTON_SETUP_MISSION RETURN "BUTTON_SETUP_MISSION" CASE BUTTON_LOGIN RETURN "BUTTON_LOGIN" CASE BUTTON_DATA_LEAK_ACCEPT RETURN "BUTTON_DATA_LEAK_ACCEPT" CASE BUTTON_SECURITY_CONTRACT_ACCEPT RETURN "BUTTON_SECURITY_CONTRACT_ACCEPT" CASE BUTTON_SECURITY_PAGE_VIP_CONTRACT RETURN "BUTTON_SECURITY_PAGE_VIP_CONTRACT" CASE BUTTON_VIP_PAGE_SEC_CONTRACT RETURN "BUTTON_VIP_PAGE_SEC_CONTRACT" CASE BUTTON_DREC_PAGE_SEC_CONTRACT RETURN "BUTTON_DREC_PAGE_SEC_CONTRACT" CASE BUTTON_DATA_RECOVERY RETURN "BUTTON_DATA_RECOVERY" CASE BUTTON_DATA_RECOVERY_START RETURN "BUTTON_DATA_RECOVERY_START" ENDSWITCH RETURN "***INVALID***" ENDFUNC FUNC STRING FIXER_APP_GET_APP_STAGE_DEBUG_NAME(FAA_APP_STAGE_ID eStage) SWITCH eStage CASE FAA_STAGE_IDLE RETURN "FAA_STAGE_IDLE" CASE FAA_STAGE_SEC_CONTRACT_SELECTED RETURN "FAA_STAGE_SEC_CONTRACT_SELECTED" CASE FAA_STAGE_STRAND_CONFIRM RETURN "FAA_STAGE_STRAND_CONFIRM" ENDSWITCH RETURN "****Invalid****" ENDFUNC FUNC STRING FIXER_APP_GET_APP_PAGE_DEBUG_NAME(FAA_PAGE_INDEX ePage) SWITCH ePage CASE FAA_PAGE_LOGIN RETURN "FAA_PAGE_LOGIN" CASE FAA_PAGE_HOME RETURN "FAA_PAGE_HOME" CASE FAA_PAGE_DATA_LEAK_SELECTION RETURN "FAA_PAGE_DATA_LEAK_SELECTION" CASE FAA_PAGE_SECURITY_CONTRACT_SELECTION RETURN "FAA_PAGE_SECURITY_CONTRACT_SELECTION" CASE FAA_PAGE_DATA_RECOVERY RETURN "FAA_PAGE_DATA_RECOVERY" ENDSWITCH RETURN "****Invalid****" ENDFUNC #ENDIF //***********Core Script functions*********** PROC FIXER_APP_PLAY_INPUT_SOUND(FAA_INPUT_SOUNDS eSound) STRING sSoundName SWITCH eSound CASE FAA_IS_NAV_UP_DOWN sSoundName = "Nav_Up_Down" BREAK CASE FAA_IS_NAV_LEFT_RIGHT sSoundName = "Nav_Left_Right" BREAK CASE FAA_IS_NAV_BLOCKED sSoundName = "Nav_Blocked" BREAK CASE FAA_IS_SELECT sSoundName = "Select" BREAK CASE FAA_IS_BACK sSoundName = "Back" BREAK CASE FAA_IS_EXIT sSoundName = "Exit" BREAK CASE FAA_IS_ERROR sSoundName = "Error" BREAK CASE FAA_IS_LOGIN sSoundName = "Key_Hit" BREAK CASE FAA_IS_LAUNCH_MISSION sSoundName = "Launch_Mission" BREAK CASE FAA_IS_BOOT sSoundName = "Boot" BREAK ENDSWITCH PLAY_SOUND_FRONTEND(-1, sSoundName, "DLC_Fixer_Agency_Computer_Soundset") ENDPROC PROC CLEAR_ROLLOVER_HELP() IF IS_BIT_SET(iBS, FAA_BS_DISPLAY_ROLLOVER_HELP) CLEAR_HELP() sRolloverHelp = "" CLEAR_BIT(iBS, FAA_BS_DISPLAY_ROLLOVER_HELP) PRINTLN(" CLEAR_ROLLOVER_HELP") ENDIF ENDPROC PROC SCRIPT_CLEANUP(BOOL bPlayExitSound = TRUE, BOOL bLaunchingMission = FALSE) SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov) IF IS_AUDIO_SCENE_ACTIVE("DLC_Fixer_Office_Room_Use_PC_Scene") STOP_AUDIO_SCENE("DLC_Fixer_Office_Room_Use_PC_Scene") ENDIF DISABLE_CELLPHONE(FALSE) Unpause_Objective_Text() SET_AUDIO_SCRIPT_CLEANUP_TIME(1000) IF bPlayExitSound IF bLaunchingMission FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_LAUNCH_MISSION) ELSE FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_EXIT) ENDIF ENDIF IF IS_PC_VERSION() SET_MULTIHEAD_SAFE(FALSE, TRUE, TRUE, TRUE) ENDIF THEFEED_RESUME() CLEAR_ROLLOVER_HELP() CLEAR_BIT(GlobalplayerBD[NATIVE_TO_INT(PLAYER_ID())].SimpleInteriorBD.iBSTwo, BS_SIMPLE_INTERIOR_GLOBAL_BS_SIX_FIXER_HQ_COMPUTER_IN_USE) g_bFHQAppOpen = FALSE TERMINATE_THIS_THREAD() ENDPROC PROC SET_INPUT_EXCLUSIVE_AND_ENABLED(CONTROL_TYPE eType, CONTROL_ACTION eAction, BOOL bEnableRelatedActions = TRUE) IF NOT IS_PAUSE_MENU_ACTIVE_EX() SET_INPUT_EXCLUSIVE(eType, eAction) ENABLE_CONTROL_ACTION(eType, eAction, bEnableRelatedActions) ELSE #IF IS_DEBUG_BUILD IF NOT IS_BIT_SET(iBS, FAA_BS_PRINTED_PAUSE_MENU_ACTIVE) PRINTLN(", SET_INPUT_EXCLUSIVE_AND_ACTIVE called but IS_PAUSE_MENU_ACTIVE_EX returned true") SET_BIT(iBS, FAA_BS_PRINTED_PAUSE_MENU_ACTIVE) ENDIF #ENDIF ENDIF ENDPROC /// PURPOSE: /// Returns if the overlay screen is currently active FUNC BOOL FIXER_APP_IS_OVERLAY_OPEN() RETURN IS_BIT_SET(iBS, FAA_BS_OVERLAY_SCREEN_ACTIVE) ENDFUNC /// PURPOSE: /// Returns the current app stage FUNC FAA_APP_STAGE_ID FIXER_APP_GET_APP_STAGE() RETURN eCurrentStage ENDFUNC /// PURPOSE: /// Sets the current app stage PROC FIXER_APP_SET_APP_STAGE(FAA_APP_STAGE_ID eNewStage) IF eCurrentStage != eNewStage eCurrentStage = eNewStage PRINTLN(" FIXER_APP_SET_APP_STAGE Setting new stage to: ", FIXER_APP_GET_APP_STAGE_DEBUG_NAME(eNewStage)) ENDIF ENDPROC /// PURPOSE: /// Returns the current app stage FUNC FAA_PAGE_INDEX FIXER_APP_GET_APP_CURRENT_PAGE() RETURN eCurrentPage ENDFUNC /// PURPOSE: /// Sets the current app page PROC FIXER_APP_SET_APP_PAGE(FAA_PAGE_INDEX eNewPage) IF eCurrentPage != eNewPage eCurrentPage = eNewPage PRINTLN(" FIXER_APP_SET_APP_PAGE Setting new stage to: ", FIXER_APP_GET_APP_PAGE_DEBUG_NAME(eNewPage)) ENDIF IF eNewPage != FAA_PAGE_SECURITY_CONTRACT_SELECTION CLEAR_BIT(iBS, FAA_BS_OPENED_SEC_CONTRACT_PAGE_W_ACTIVE_CD) PRINTLN(" FIXER_APP_SET_APP_PAGE - Clear FAA_BS_OPENED_SEC_CONTRACT_PAGE_W_ACTIVE_CD") ENDIF ENDPROC /// PURPOSE: /// Checks if the specified dialogue is playing FUNC BOOL FIXER_APP_IS_DIALOGUE_PLAYING(INT iDialogueID) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() RETURN iDialoguePlayingID = iDialogueID ENDIF RETURN FALSE ENDFUNC PROC SET_SELECTED_DATA_LEAK_STRAND_MISSION(INT iMission) #IF IS_DEBUG_BUILD IF iMission != iSelectedDataLeakInStrand PRINTLN(" SET_SELECTED_DATA_LEAK_STRAND_MISSION - New selected leak mission: ", iSelectedDataLeakInStrand) ENDIF #ENDIF iSelectedDataLeakInStrand = iMission ENDPROC PROC SET_SELECTED_DATA_LEAK_STRAND(FIXER_STRANDS eNewStrand) #IF IS_DEBUG_BUILD IF eNewStrand != eSelectedDataLeakStrand PRINTLN(" SET_SELECTED_DATA_LEAK_STRAND - New selected strand: ", eSelectedDataLeakStrand) ENDIF #ENDIF eSelectedDataLeakStrand = eNewStrand ENDPROC PROC UPDATE_CURRENTLY_DISPLAYED_STRAND(FIXER_STRANDS eStrand) eCurrentlyDisplayedStrand = eStrand PRINTLN(" UPDATE_CURRENTLY_DISPLAYED_STRAND - Strand: ", eCurrentlyDisplayedStrand) ENDPROC PROC SET_DISPLAYING_LEAK_OVERVIEW(BOOL bDisplaying) IF bDisplaying SET_BIT(iBS, FAA_BS_DISPLAYING_LEAK_OVERVIEW) ELSE CLEAR_BIT(iBS, FAA_BS_DISPLAYING_LEAK_OVERVIEW) ENDIF PRINTLN(" SET_DISPLAYING_LEAK_OVERVIEW - bDisplaying: ", bDisplaying) ENDPROC PROC CLEAR_REPLAY_MISSION_PREPARED_FLAGS() CLEAR_BIT(iBS, FAA_BS_INTRO_MISSION_LAUNCH_PREPARED) CLEAR_BIT(iBS, FAA_BS_SETUP_MISSION_LAUNCH_PREPARED) PRINTLN(" CLEAR_REPLAY_MISSION_PREPARED_FLAGS - flags cleared") ENDPROC PROC SET_REPLAY_INTRO_MISSION_PREPARED_FLAG() CLEAR_REPLAY_MISSION_PREPARED_FLAGS() SET_BIT(iBS, FAA_BS_INTRO_MISSION_LAUNCH_PREPARED) PRINTLN(" SET_REPLAY_INTRO_MISSION_PREPARED_FLAG - flag set") ENDPROC PROC SET_REPLAY_SETUP_MISSION_PREPARED_FLAG() CLEAR_REPLAY_MISSION_PREPARED_FLAGS() SET_BIT(iBS, FAA_BS_SETUP_MISSION_LAUNCH_PREPARED) PRINTLN(" SET_REPLAY_SETUP_MISSION_PREPARED_FLAG - flag set") ENDPROC //***********Mission information lookups*********** FUNC STRING GET_INTRO_MISSION_TITLE() RETURN "FIX_APP_DATA_R1_T" ENDFUNC FUNC STRING GET_INTRO_MISSION_DESCRIPTION() RETURN "FIX_APP_DATA_R1_D" ENDFUNC FUNC STRING GET_INTRO_MISSION_TEXTURE() RETURN "MISSION_ON_COURSE" ENDFUNC FUNC STRING GET_SETUP_MISSION_TITLE() RETURN "FIX_APP_DATA_R2_T" ENDFUNC FUNC STRING GET_SETUP_MISSION_DESCRIPTION() RETURN "FIX_APP_DATA_R2_D" ENDFUNC FUNC STRING GET_SETUP_MISSION_TEXTURE() RETURN "SETUP_DATA_RECOVERY" ENDFUNC FUNC STRING GET_SECURITY_CONTRACT_TITLE(FIXER_SECURITY_CONTRACTS fixerSecurityContracts) SWITCH fixerSecurityContracts CASE FSC_PACKAGE_RECOVERY RETURN "FXR_STSTART_RP" BREAK CASE FSC_VEHICLE_RECOVERY RETURN "FXR_STSTART_RV" BREAK CASE FSC_ASSAULT RETURN "FXR_STSTART_AS" BREAK CASE FSC_RESCUE RETURN "FXR_STSTART_RE" BREAK CASE FSC_PROTECT RETURN "FXR_STSTART_PR" BREAK CASE FSC_TAIL_AND_DESTROY RETURN "FXR_STSTART_TD" BREAK ENDSWITCH RETURN "" ENDFUNC FUNC STRING GET_SECURITY_CONTRACT_DESCRIPTION(FIXER_SECURITY_CONTRACTS fixerSecurityContracts) SWITCH fixerSecurityContracts CASE FSC_PACKAGE_RECOVERY RETURN "FXR_STSTART_RP_D" BREAK CASE FSC_VEHICLE_RECOVERY RETURN "FXR_STSTART_RV_D" BREAK CASE FSC_ASSAULT RETURN "FXR_STSTART_AS_D" BREAK CASE FSC_RESCUE RETURN "FXR_STSTART_RE_D" BREAK CASE FSC_PROTECT RETURN "FXR_STSTART_PR_D" BREAK CASE FSC_TAIL_AND_DESTROY RETURN "FXR_STSTART_TD_D" BREAK ENDSWITCH RETURN "" ENDFUNC FUNC STRING GET_SECURITY_CONTRACT_KEY_STAT_LABEL(FIXER_SECURITY_CONTRACTS fixerSecurityContracts) SWITCH fixerSecurityContracts CASE FSC_PACKAGE_RECOVERY RETURN "FIX_A_STAT_VAR" BREAK CASE FSC_VEHICLE_RECOVERY RETURN "FIX_A_STAT_VHR" BREAK CASE FSC_ASSAULT RETURN "FIX_A_STAT_GE" BREAK CASE FSC_RESCUE RETURN "FIX_A_STAT_VIP" BREAK CASE FSC_PROTECT RETURN "FIX_A_STAT_AP" BREAK CASE FSC_TAIL_AND_DESTROY RETURN "FIX_A_STAT_AD" BREAK ENDSWITCH RETURN "" ENDFUNC FUNC SECURITY_CONTRACT_DIFFICULTY GET_SECURITY_CONTRACT_DIFFICULTY(INT iSlot) SWITCH GET_PLAYER_FIXER_SECURITY_CONTRACT_DIFFICULTY(PLAYER_ID(), iSlot) CASE FSCD_DEFAULT RETURN SCD_NORMAL BREAK CASE FSCD_HARD RETURN SCD_HARD BREAK CASE FSCD_HARD_WITH_RIVALS RETURN SCD_VS BREAK ENDSWITCH RETURN SCD_NORMAL ENDFUNC FUNC BOOL FIXER_APP_IS_DATA_LEAK_LOCKED(FIXER_STRANDS eStrandChecked) IF GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) = FS_NONE RETURN FALSE ENDIF IF GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) != eStrandChecked SWITCH eStrandChecked CASE FS_PARTY_PROMOTER RETURN NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_MISSION) BREAK CASE FS_BILLIONAIRE_GAMES RETURN NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_MISSION) BREAK CASE FS_HOOD_PASS RETURN NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_MISSION) BREAK ENDSWITCH ENDIF RETURN FALSE ENDFUNC FUNC STRING GET_STRAND_INVESTIGATION_MISSION_TITLE(FIXER_STRANDS eStrand, INT iMission) SWITCH eStrand CASE FS_PARTY_PROMOTER SWITCH iMission CASE 0 RETURN "FIX_APP_DATA_L1_T1" BREAK CASE 1 RETURN "FIX_APP_DATA_L1_T2" BREAK CASE 2 RETURN "FIX_APP_DATA_L1_T3" BREAK ENDSWITCH BREAK CASE FS_BILLIONAIRE_GAMES SWITCH iMission CASE 0 RETURN "FIX_APP_DATA_L2_T1" BREAK CASE 1 RETURN "FIX_APP_DATA_L2_T2" BREAK CASE 2 RETURN "FIX_APP_DATA_L2_T3" BREAK ENDSWITCH BREAK CASE FS_HOOD_PASS SWITCH iMission CASE 0 RETURN "FIX_APP_DATA_L3_T1" BREAK CASE 1 RETURN "FIX_APP_DATA_L3_T2" BREAK CASE 2 RETURN "FIX_APP_DATA_L3_T3" BREAK ENDSWITCH BREAK ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING GET_STRAND_INVESTIGATION_MISSION_TEXTURE(FIXER_STRANDS eStrand, INT iMission) SWITCH eStrand CASE FS_PARTY_PROMOTER SWITCH iMission CASE 0 RETURN "DATA_LEAK_1_NIGHTCLUB" BREAK CASE 1 RETURN "DATA_LEAK_1_MARINA" BREAK CASE 2 RETURN "MISSION_VINEWOOD" BREAK ENDSWITCH BREAK CASE FS_BILLIONAIRE_GAMES SWITCH iMission CASE 0 RETURN "DATA_LEAK_2_COUNTRY" BREAK CASE 1 RETURN "DATA_LEAK_2_GUEST_LIST" BREAK CASE 2 RETURN "MISSION_RICHMAN_LEAK" BREAK ENDSWITCH BREAK CASE FS_HOOD_PASS SWITCH iMission CASE 0 RETURN "DATA_LEAK_3_DAVIS" BREAK CASE 1 RETURN "DATA_LEAK_3_BALLAS" BREAK CASE 2 RETURN "MISSION_SOUTH_CENTRAL" BREAK ENDSWITCH BREAK ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING GET_STRAND_OVERVIEW_DESCRIPTION(FIXER_STRANDS eStrand) SWITCH eStrand CASE FS_PARTY_PROMOTER RETURN "FIX_APP_DL1_D_B" BREAK CASE FS_BILLIONAIRE_GAMES RETURN "FIX_APP_DL2_D_B" BREAK CASE FS_HOOD_PASS RETURN "FIX_APP_DL3_D_B" BREAK ENDSWITCH RETURN "" ENDFUNC FUNC STRING GET_STRAND_INVESTIGATION_MISSION_DESCRIPTION(FIXER_STRANDS eStrand, INT iMission) SWITCH eStrand CASE FS_PARTY_PROMOTER SWITCH iMission CASE 0 RETURN "FIX_APP_DATA_L1_D1" BREAK CASE 1 RETURN "FIX_APP_DATA_L1_D2" BREAK CASE 2 RETURN "FIX_APP_DATA_L1_D3" BREAK ENDSWITCH BREAK CASE FS_BILLIONAIRE_GAMES SWITCH iMission CASE 0 RETURN "FIX_APP_DATA_L2_D1" BREAK CASE 1 RETURN "FIX_APP_DATA_L2_D2" BREAK CASE 2 RETURN "FIX_APP_DATA_L2_D3" BREAK ENDSWITCH BREAK CASE FS_HOOD_PASS SWITCH iMission CASE 0 RETURN "FIX_APP_DATA_L3_D1" BREAK CASE 1 RETURN "FIX_APP_DATA_L3_D2" BREAK CASE 2 RETURN "FIX_APP_DATA_L3_D3" BREAK ENDSWITCH BREAK ENDSWITCH RETURN "UNKNOWN" ENDFUNC /// PURPOSE: /// Returns the lable to be used for a given mission in a strand to indicate the objective e.g. Investigated FUNC STRING GET_STRAND_INVESTIGATION_OBJECTIVE(FIXER_STRANDS eStrand, INT iMission) SWITCH eStrand CASE FS_PARTY_PROMOTER SWITCH iMission CASE 0 RETURN "FIX_APP_INVEST" BREAK CASE 1 RETURN "FIX_APP_INVEST" BREAK CASE 2 RETURN "FIX_APP_RECOVR" BREAK ENDSWITCH BREAK CASE FS_BILLIONAIRE_GAMES SWITCH iMission CASE 0 RETURN "FIX_APP_INVEST" BREAK CASE 1 RETURN "FIX_APP_INVEST" BREAK CASE 2 RETURN "FIX_APP_RECOVR" BREAK ENDSWITCH BREAK CASE FS_HOOD_PASS SWITCH iMission CASE 0 RETURN "FIX_APP_INVEST" BREAK CASE 1 RETURN "FIX_APP_INVEST" BREAK CASE 2 RETURN "FIX_APP_RECOVR" BREAK ENDSWITCH BREAK ENDSWITCH RETURN "UNKNOWN" ENDFUNC FUNC STRING GET_STRAND_SELECTION_PROMPT_MESSAGE(FIXER_STRANDS eStrand) SWITCH eStrand CASE FS_PARTY_PROMOTER RETURN "FIX_APP_DL1_D" BREAK CASE FS_BILLIONAIRE_GAMES RETURN "FIX_APP_DL2_D" BREAK CASE FS_HOOD_PASS RETURN "FIX_APP_DL3_D" BREAK ENDSWITCH RETURN "" ENDFUNC FUNC STRING GET_STRAND_SELECTION_PROMPT_TITLE(FIXER_STRANDS eStrand) SWITCH eStrand CASE FS_PARTY_PROMOTER RETURN "FIX_APP_DL1_T" BREAK CASE FS_BILLIONAIRE_GAMES RETURN "FIX_APP_DL2_T" BREAK CASE FS_HOOD_PASS RETURN "FIX_APP_DL3_T" BREAK ENDSWITCH RETURN "" ENDFUNC FUNC BOOL IS_STRAND_INVESTIGATION_MISSION_LOCKED(FIXER_STRANDS eStrand, INT iMission) SWITCH eStrand CASE FS_PARTY_PROMOTER SWITCH iMission CASE 0 RETURN FALSE BREAK CASE 1 IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_1) AND g_eFixerDisableMissionLaunchReason != FMLDR_PP1_COMPLETED_TEXT AND g_eFixerDisableMissionLaunchReason != FMLDR_PP2_UNLOCKED_CALL RETURN FALSE ENDIF BREAK CASE 2 IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_2) AND g_eFixerDisableMissionLaunchReason != FMLDR_PP2_COMPLETED_TEXT AND g_eFixerDisableMissionLaunchReason != FMLDR_PPF_UNLOCKED_CALL RETURN FALSE ENDIF BREAK ENDSWITCH BREAK CASE FS_BILLIONAIRE_GAMES SWITCH iMission CASE 0 RETURN FALSE BREAK CASE 1 IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_1) AND g_eFixerDisableMissionLaunchReason != FMLDR_BG1_COMPLETED_TEXT AND g_eFixerDisableMissionLaunchReason != FMLDR_BG2_UNLOCKED_CALL RETURN FALSE ENDIF BREAK CASE 2 IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_2) AND g_eFixerDisableMissionLaunchReason != FMLDR_BG2_COMPLETED_TEXT AND g_eFixerDisableMissionLaunchReason != FMLDR_BGF_UNLOCKED_CALL RETURN FALSE ENDIF BREAK ENDSWITCH BREAK CASE FS_HOOD_PASS SWITCH iMission CASE 0 RETURN FALSE BREAK CASE 1 IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_1) AND g_eFixerDisableMissionLaunchReason != FMLDR_HP1_COMPLETED_TEXT AND g_eFixerDisableMissionLaunchReason != FMLDR_HP2_UNLOCKED_CALL RETURN FALSE ENDIF BREAK CASE 2 IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_2) AND g_eFixerDisableMissionLaunchReason != FMLDR_HP2_COMPLETED_TEXT AND g_eFixerDisableMissionLaunchReason != FMLDR_HPF_UNLOCKED_CALL RETURN FALSE ENDIF BREAK ENDSWITCH BREAK ENDSWITCH RETURN TRUE ENDFUNC FUNC BOOL IS_STRAND_INVESTIGATION_MISSION_COMPLETE(FIXER_STRANDS eStrand, INT iMission) SWITCH eStrand CASE FS_PARTY_PROMOTER SWITCH iMission CASE 0 RETURN HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_1) BREAK CASE 1 RETURN HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_2) BREAK CASE 2 RETURN HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_MISSION) BREAK ENDSWITCH BREAK CASE FS_BILLIONAIRE_GAMES SWITCH iMission CASE 0 RETURN HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_1) BREAK CASE 1 RETURN HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_2) BREAK CASE 2 RETURN HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_MISSION) BREAK ENDSWITCH BREAK CASE FS_HOOD_PASS SWITCH iMission CASE 0 RETURN HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_1) BREAK CASE 1 RETURN HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_2) BREAK CASE 2 RETURN HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_MISSION) BREAK ENDSWITCH BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC INT GET_DATA_LEAK_COPIES_FOUND() INT i = 0 i += BOOL_TO_INT(HAS_PLAYER_COMPLETED_FIXER_STORY_MISSION(PLAYER_ID(), FSM_BILLIONAIRE_GAMES_MISSION)) i += BOOL_TO_INT(HAS_PLAYER_COMPLETED_FIXER_STORY_MISSION(PLAYER_ID(), FSM_HOOD_PASS_MISSION)) i += BOOL_TO_INT(HAS_PLAYER_COMPLETED_FIXER_STORY_MISSION(PLAYER_ID(), FSM_PARTY_PROMOTER_MISSION)) RETURN i ENDFUNC //***********Scaleform wrappers*********** PROC SHOW_LOGIN_SCREEN() FIXER_APP_SET_APP_PAGE(FAA_PAGE_LOGIN) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_LOGIN_SCREEN") SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(GET_PLAYER_NAME(PLAYER_ID())) END_SCALEFORM_MOVIE_METHOD() ENDPROC FUNC BOOL HAS_PLAYER_STARTED_A_STRAND_OR_COMPLETED_FIXER_STORY() IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_INTRO_MISSION() AND HAS_LOCAL_PLAYER_COMPLETED_FIXER_SETUP_MISSION() IF g_eFixerDisableMissionLaunchReason = FMLDR_POST_SETUP_MISSION_CALL RETURN FALSE ENDIF IF GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) != FS_NONE RETURN TRUE ENDIF ENDIF IF HAS_PLAYER_COMPLETED_FIXER_STORY_AS_LEADER(PLAYER_ID()) RETURN TRUE ENDIF IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_MISSION) OR HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_MISSION) OR HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_MISSION) RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL DOES_PLAYER_NEED_TO_MEET_FRANKLIN_AT_GOLF_COURSE() IF HAS_LOCAL_PLAYER_UNLOCKED_FIXER_STORY() AND NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_INTRO_MISSION() RETURN IS_BIT_SET(g_sFixerFlow.Bitset2, ciFIXER_FLOW_BITSET2__FRANKLIN_GOLF_COURSE_CALL_DONE) ENDIF RETURN FALSE ENDFUNC FUNC BOOL DOES_PLAYER_NEED_TO_MEET_IMANI_AFTER_INTRO() IF HAS_LOCAL_PLAYER_UNLOCKED_FIXER_STORY() AND HAS_LOCAL_PLAYER_COMPLETED_FIXER_INTRO_MISSION() RETURN NOT HAS_LOCAL_PLAYER_VIEWED_FIXER_HQ_POST_SETUP_CUTSCENE() ENDIF RETURN FALSE ENDFUNC FUNC BOOL DOES_PLAYER_NEED_TO_WAIT_FOR_IMANI_TO_ANALYSE_FIB_DATA() IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_SETUP_MISSION() AND NOT HAS_PLAYER_STARTED_FIXER_STORY_INVESTIGATIONS(PLAYER_ID()) RETURN NOT IS_BIT_SET(g_sFixerFlow.Bitset2, ciFIXER_FLOW_BITSET2__INVESTIGATIONS_CALL_DONE) ENDIF RETURN FALSE ENDFUNC FUNC STRING FIXER_APP_GET_VIP_BUTTON_LOCKED_REASON(BOOL &bContractLocked) STRING sLockedVipLabel bContractLocked = FALSE IF IS_FIXER_STORY_ON_COOLDOWN(TRUE) sLockedVipLabel = "FIX_VIP_LOCK3" bContractLocked = TRUE ELIF NOT HAS_PLAYER_STARTED_A_STRAND_OR_COMPLETED_FIXER_STORY() IF DOES_PLAYER_NEED_TO_MEET_FRANKLIN_AT_GOLF_COURSE() sLockedVipLabel = "FIX_VIP_LOCK" bContractLocked = TRUE ELIF DOES_PLAYER_NEED_TO_MEET_IMANI_AFTER_INTRO() sLockedVipLabel = "FIX_VIP_LOCK1" bContractLocked = TRUE ELIF NOT HAS_LOCAL_PLAYER_UNLOCKED_FIXER_STORY() OR NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_INTRO_MISSION() sLockedVipLabel = "FIX_VIP_INTRO" bContractLocked = TRUE ELIF DOES_PLAYER_NEED_TO_WAIT_FOR_IMANI_TO_ANALYSE_FIB_DATA() sLockedVipLabel = "FIX_VIP_LOCK2" bContractLocked = TRUE ENDIF ENDIF RETURN sLockedVipLabel ENDFUNC PROC SHOW_HOME_SCREEN() FIXER_APP_SET_APP_PAGE(FAA_PAGE_HOME) FIXER_APP_SET_APP_STAGE(FAA_STAGE_IDLE) BOOL bvipContractLocked STRING sLockedVipLabel = FIXER_APP_GET_VIP_BUTTON_LOCKED_REASON(bvipContractLocked) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_HOME_SCREEN") //Security Contract title SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("FIX_APP_SECU_T") //Vip Contract title SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("FIX_APP_VIP_T") //VIP Contract Locked SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bvipContractLocked) //VIP contract locked messaging IF bvipContractLocked SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sLockedVipLabel) ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("") ENDIF END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SCALEFORM_MOVIE_METHOD_ADD_PARAM_ENUM(ENUM_TO_INT enumValue) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(enumValue)) ENDPROC PROC MOVE_CURSOR_TO_BUTTON(FAA_BUTTON_INDEXES eButton) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_CURRENT_SELECTION") SCALEFORM_MOVIE_METHOD_ADD_PARAM_ENUM(eButton) END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SHOW_SPEAKER_ICON(BOOL bShow) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_SPEAKER") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bShow) END_SCALEFORM_MOVIE_METHOD() ENDPROC /// PURPOSE: /// Updates the security contract selection screen with the top stat information. UPDATE_SECURITY_CONTRACT_SCREEN should be called immediately after SHOW_SECURITY_CONTRACT_SCREEN to populate the top stat. PROC UPDATE_SECURITY_CONTRACTS_SELECTION_SCREEN_STATS(BOOL bTopStatVisible = FALSE, INT iSelectedContract = 0) FIXER_SECURITY_CONTRACTS fixerSecurityContract = GET_PLAYER_FIXER_SECURITY_CONTRACT_IN_SLOT(PLAYER_ID(), iSelectedContract) STRING sStatOneLabel = GET_SECURITY_CONTRACT_KEY_STAT_LABEL(fixerSecurityContract) INT iStatOneValue = GET_LOCAL_PLAYER_NUM_COMPLETIONS_OF_FIXER_SECURITY_CONTRACT(fixerSecurityContract) BOOL bStatOneVisible = bTopStatVisible STRING sStatTwoLabel = "FAPP_CONTRACTS_COMPLETE" INT iStatTwoValue = GET_LOCAL_PLAYER_NUM_FIXER_SECURITY_CONTRACTS_COMPLETED() BOOL bStatTwoVisible = TRUE STRING sStatThreeLabel = "FAPP_EARNINGS" INT iStatThreeValue = GET_PLAYER_TOTAL_FIXER_SECURITY_CONTRACT_EARNINGS(PLAYER_ID()) BOOL bStatThreeVisible = TRUE BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_SECURITY_CONTRACT_SELECTION_SCREEN") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sStatOneLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iStatOneValue) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bStatOneVisible) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sStatTwoLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iStatTwoValue) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bStatTwoVisible) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sStatThreeLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iStatThreeValue) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bStatThreeVisible) END_SCALEFORM_MOVIE_METHOD() ENDPROC /// PURPOSE: /// Shows the security contract selection screen. UPDATE_SECURITY_CONTRACT_SCREEN should be called immediately after SHOW_SECURITY_CONTRACT_SCREEN to populate the top stat. PROC SHOW_SECURITY_CONTRACTS_SELECTION_SCREEN() FIXER_APP_SET_APP_PAGE(FAA_PAGE_SECURITY_CONTRACT_SELECTION) INT iSecContractsCompleted = GET_LOCAL_PLAYER_NUM_FIXER_SECURITY_CONTRACTS_COMPLETED() INT iSecContractsEarnings = GET_PLAYER_TOTAL_FIXER_SECURITY_CONTRACT_EARNINGS(PLAYER_ID()) INT ivaluablesRecovered = GET_PLAYER_NUM_COMPLETIONS_OF_FIXER_SECURITY_CONTRACT(PLAYER_ID(), FSC_PACKAGE_RECOVERY) BOOL bVipContractLocked = FALSE STRING sLockedVipLabel = FIXER_APP_GET_VIP_BUTTON_LOCKED_REASON(bvipContractLocked) //Security contract one FIXER_SECURITY_CONTRACTS fixerSecurityContracts = GET_PLAYER_FIXER_SECURITY_CONTRACT_IN_SLOT(PLAYER_ID(), 0) STRING sContractOneTitle = GET_SECURITY_CONTRACT_TITLE(fixerSecurityContracts) STRING sContractOneDesc = GET_SECURITY_CONTRACT_DESCRIPTION(fixerSecurityContracts) STRING sContractOneTexture = "SEC_VIP_LANDING_IMAGE" INT iContractOnePayment = GET_FIXER_SECURITY_CONTRACT_REWARD(0) SECURITY_CONTRACT_DIFFICULTY eContractOneDifficulty = GET_SECURITY_CONTRACT_DIFFICULTY(0) //Security contract two fixerSecurityContracts = GET_PLAYER_FIXER_SECURITY_CONTRACT_IN_SLOT(PLAYER_ID(), 1) STRING sContractTwoTitle = GET_SECURITY_CONTRACT_TITLE(fixerSecurityContracts) STRING sContractTwoDesc = GET_SECURITY_CONTRACT_DESCRIPTION(fixerSecurityContracts) STRING sContractTwoTexture = "SEC_VIP_LANDING_IMAGE" INT iContractTwoPayment = GET_FIXER_SECURITY_CONTRACT_REWARD(1) SECURITY_CONTRACT_DIFFICULTY eContractTwodifficulty = GET_SECURITY_CONTRACT_DIFFICULTY(1) //Security Contract three fixerSecurityContracts = GET_PLAYER_FIXER_SECURITY_CONTRACT_IN_SLOT(PLAYER_ID(), 2) STRING sContractThreeTitle = GET_SECURITY_CONTRACT_TITLE(fixerSecurityContracts) STRING sContractThreeDesc = GET_SECURITY_CONTRACT_DESCRIPTION(fixerSecurityContracts) STRING sContractThreeTexture = "SEC_VIP_LANDING_IMAGE" INT iContractThreePayment = GET_FIXER_SECURITY_CONTRACT_REWARD(2) SECURITY_CONTRACT_DIFFICULTY eContractThreeDifficulty = GET_SECURITY_CONTRACT_DIFFICULTY(2) UNUSED_PARAMETER(sLockedVipLabel) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_SECURITY_CONTRACT_SELECTION_SCREEN") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSecContractsCompleted) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSecContractsEarnings) //Security contract one SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sContractOneTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sContractOneDesc) SCALEFORM_MOVIE_METHOD_ADD_PARAM_ENUM(eContractOneDifficulty) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sContractOneTexture) //Security contract two SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sContractTwoTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sContractTwoDesc) SCALEFORM_MOVIE_METHOD_ADD_PARAM_ENUM(eContractTwodifficulty) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sContractTwoTexture) //Security contract three SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sContractThreeTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sContractThreeDesc) SCALEFORM_MOVIE_METHOD_ADD_PARAM_ENUM(eContractThreeDifficulty) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sContractThreeTexture) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ivaluablesRecovered) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iContractOnePayment) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iContractTwoPayment) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iContractThreePayment) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bVipContractLocked) END_SCALEFORM_MOVIE_METHOD() UPDATE_SECURITY_CONTRACTS_SELECTION_SCREEN_STATS() ENDPROC /// PURPOSE: /// Toggles the button functionality between the menu items on the left and the tabs on the right. Automatically moves the cursor to the first unlocked item and highlights it. PROC SET_MISSION_SCREEN_TABS_ENABLED(BOOL bEnabled) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ENABLE_TABS") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bEnabled) END_SCALEFORM_MOVIE_METHOD() ENDPROC /// PURPOSE: /// Updates the enabled state of start button and its text. By default the start button will start disabled and with the text "START" PROC UPDATE_MISSION_SCREEN_START_BUTTON(STRING sButtonLabel, BOOL bEnabled) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_START_BUTTON") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sButtonLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bEnabled) END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SETUP_START_MISSION_BUTTON_SECURITY_CONTRACTS(BOOL bEnabled) UPDATE_MISSION_SCREEN_START_BUTTON("FIX_APP_ACC_CON", bEnabled) ENDPROC /// PURPOSE: /// Update the tab information and stats. this is intended to be called when a security contract is clicked. /// PARAMS: /// iMission - The index of the mission selected in the menu PROC SCALEFORM_SELECT_SECURITY_CONTRACT(INT iMission) FIXER_APP_SET_APP_STAGE(FAA_STAGE_SEC_CONTRACT_SELECTED) FIXER_SECURITY_CONTRACTS fixerSecurityContracts = GET_PLAYER_FIXER_SECURITY_CONTRACT_IN_SLOT(PLAYER_ID(), iMission) STRING sTitle = GET_SECURITY_CONTRACT_TITLE(fixerSecurityContracts) STRING sDescription = GET_SECURITY_CONTRACT_DESCRIPTION(fixerSecurityContracts) STRING sImage = "SEC_VIP_LANDING_IMAGE" INT iPayment = GET_FIXER_SECURITY_CONTRACT_REWARD(iMission) SECURITY_CONTRACT_DIFFICULTY eDifficulty = GET_SECURITY_CONTRACT_DIFFICULTY(iMission) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_SECURITY_CONTRACT_SELECTION_TAB") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sDescription) SCALEFORM_MOVIE_METHOD_ADD_PARAM_ENUM(eDifficulty) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sImage) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iPayment) END_SCALEFORM_MOVIE_METHOD() IF ARE_FIXER_SECURITY_CONTRACTS_ON_COOLDOWN() PRINTLN(" SCALEFORM_SELECT_SECURITY_CONTRACT - Set FAA_BS_OPENED_SEC_CONTRACT_PAGE_W_ACTIVE_CD") SET_BIT(iBS, FAA_BS_OPENED_SEC_CONTRACT_PAGE_W_ACTIVE_CD) IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("FXR_NX_SEC_WAIT") PRINT_HELP("FXR_NX_SEC_WAIT") ENDIF SETUP_START_MISSION_BUTTON_SECURITY_CONTRACTS(FALSE) ELSE SETUP_START_MISSION_BUTTON_SECURITY_CONTRACTS(TRUE) ENDIF ENDPROC PROC SF_UPDATE_TAB_DATA(STRING sTabDescription, STRING sTabImage, STRING sObjectiveFoundLabel, BOOL bShowObjective, BOOL bMissionComplete, BOOL bCheckboxVisible, STRING sStatusLabel) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_TAB_DATA") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTabDescription) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sTabImage) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sObjectiveFoundLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bShowObjective) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bMissionComplete) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bCheckboxVisible) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sStatusLabel) END_SCALEFORM_MOVIE_METHOD() ENDPROC /// PURPOSE: /// Updates the description, images, the copy found label, and the copy found tick mark. This should be called when a tab is selected. PROC UPDATE_DATA_LEAK_TAB_DATA(FIXER_STRANDS eStrand, INT iMission, INT iOverrideForLeakOverview = -1) STRING sTabDescription = GET_STRAND_INVESTIGATION_MISSION_DESCRIPTION(eStrand, iMission) STRING sTabImage = GET_STRAND_INVESTIGATION_MISSION_TEXTURE(eStrand, iMission) STRING sObjectiveFoundLabel = GET_STRAND_INVESTIGATION_OBJECTIVE(eStrand, iMission) BOOL bObjectiveComplete = IS_STRAND_INVESTIGATION_MISSION_COMPLETE(eStrand, iMission) STRING sStatusLabel = "" IF iOverrideForLeakOverview != -1 sTabImage = GET_STRAND_INVESTIGATION_MISSION_TEXTURE(eStrand, iOverrideForLeakOverview) sTabDescription = GET_STRAND_OVERVIEW_DESCRIPTION(eStrand) ENDIF CLEAR_REPLAY_MISSION_PREPARED_FLAGS() SF_UPDATE_TAB_DATA(sTabDescription, sTabImage, sObjectiveFoundLabel, bObjectiveComplete, bObjectiveComplete, TRUE, sStatusLabel) ENDPROC PROC UPDATE_REPLAY_MISSION_TAB_DATA(FAA_BUTTON_INDEXES eButton) //Intro mission STRING sMissionDescription = GET_INTRO_MISSION_DESCRIPTION() STRING sMissionTexture = GET_INTRO_MISSION_TEXTURE() IF eButton = BUTTON_SETUP_MISSION //Setup mission sMissionDescription = GET_SETUP_MISSION_DESCRIPTION() sMissionTexture = GET_SETUP_MISSION_TEXTURE() SET_REPLAY_SETUP_MISSION_PREPARED_FLAG() ELSE SET_REPLAY_INTRO_MISSION_PREPARED_FLAG() ENDIF SF_UPDATE_TAB_DATA(sMissionDescription, sMissionTexture, "FIX_APP_INVEST", FALSE, TRUE, FALSE, "") ENDPROC /// PURPOSE: /// Updates the locked state of the menu items. PROC UPDATE_DATA_LEAK_STRAND_LOCK_STATE() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_MENU_LOCKED_STATES") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FIXER_APP_IS_DATA_LEAK_LOCKED(FS_PARTY_PROMOTER)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FIXER_APP_IS_DATA_LEAK_LOCKED(FS_BILLIONAIRE_GAMES)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FIXER_APP_IS_DATA_LEAK_LOCKED(FS_HOOD_PASS)) END_SCALEFORM_MOVIE_METHOD() ENDPROC /// PURPOSE: /// Updates the data leak screen. Updates the tabs and related data. UPDATE_DATA_LEAK_SCREEN should be called immediately after SHOW_DATA_LEAK_SCREEN to populate the tabs. PROC UPDATE_DATA_LEAK(STRING sTabOneTitle, BOOL bTabOneLocked, BOOL bTabOneComplete, STRING sTabTwoTitle, BOOL bTabTwoLocked, BOOL bTabTwoComplete, STRING sTabThreeTitle, BOOL bTabThreeLocked, BOOL bTabThreeComplete, INT iStrandTotalPayment, INT iMissionItemsFound) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_DATA_LEAK_SCREEN") //First Tab SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTabOneTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bTabOneLocked) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bTabOneComplete) //Second Tab SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTabTwoTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bTabTwoLocked) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bTabTwoComplete) //Third Tab SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTabThreeTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bTabThreeLocked) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bTabThreeComplete) //Strand general data SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iStrandTotalPayment) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iMissionItemsFound) END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC UPDATE_DATA_LEAK_SCREEN_WITH_STRAND(FIXER_STRANDS eStrand) STRING sTabOneTitle = GET_STRAND_INVESTIGATION_MISSION_TITLE(eStrand, 0) BOOL bTabOneLocked = IS_STRAND_INVESTIGATION_MISSION_LOCKED(eStrand, 0) BOOL bTabOneComplete = IS_STRAND_INVESTIGATION_MISSION_COMPLETE(eStrand, 0) STRING sTabTwoTitle = GET_STRAND_INVESTIGATION_MISSION_TITLE(eStrand, 1) BOOL bTabTwoLocked = IS_STRAND_INVESTIGATION_MISSION_LOCKED(eStrand, 1) BOOL bTabTwoComplete = IS_STRAND_INVESTIGATION_MISSION_COMPLETE(eStrand, 1) STRING sTabThreeTitle = GET_STRAND_INVESTIGATION_MISSION_TITLE(eStrand, 2) BOOL bTabThreeLocked = IS_STRAND_INVESTIGATION_MISSION_LOCKED(eStrand, 2) BOOL bTabThreeComplete = IS_STRAND_INVESTIGATION_MISSION_COMPLETE(eStrand, 2) INT iStrandTotalPayment = GET_FIXER_FINALE_CASH_REWARD() INT iMissionItemsFound = GET_DATA_LEAK_COPIES_FOUND() UPDATE_DATA_LEAK(sTabOneTitle, bTabOneLocked, bTabOneComplete, sTabTwoTitle, bTabTwoLocked, bTabTwoComplete, sTabThreeTitle, bTabThreeLocked, bTabThreeComplete, iStrandTotalPayment, iMissionItemsFound) ENDPROC /// PURPOSE:. /// If one is active then the next mission up will be returned /// If there are no more missions or we are waiting for a flow call before the next mission can launch then -1 is returned FUNC INT GET_NEXT_MISISON_IN_STRAND(FIXER_STRANDS eStrand) IF eStrand != FS_NONE IF IS_STRAND_INVESTIGATION_MISSION_COMPLETE(eStrand, 2) RETURN -1 ELIF IS_STRAND_INVESTIGATION_MISSION_COMPLETE(eStrand, 1) IF NOT IS_STRAND_INVESTIGATION_MISSION_LOCKED(eStrand, 2) RETURN 2 ENDIF ELIF IS_STRAND_INVESTIGATION_MISSION_COMPLETE(eStrand, 0) IF NOT IS_STRAND_INVESTIGATION_MISSION_LOCKED(eStrand, 1) RETURN 1 ENDIF ELSE RETURN 0 ENDIF ENDIF RETURN -1 ENDFUNC FUNC FAA_BUTTON_INDEXES FIXER_APP_GET_BUTTON_FOR_DATA_LEAK(FIXER_STRANDS eStrand) SWITCH eStrand CASE FS_PARTY_PROMOTER RETURN BUTTON_DATA_LEAK_1 BREAK CASE FS_BILLIONAIRE_GAMES RETURN BUTTON_DATA_LEAK_2 BREAK CASE FS_HOOD_PASS RETURN BUTTON_DATA_LEAK_3 BREAK ENDSWITCH RETURN BUTTON_LOGIN ENDFUNC FUNC FIXER_STORY_MISSIONS FIXER_APP_GET_FINAL_MISSION_ID_FOR_DATA_LEAK_STRAND(FIXER_STRANDS eStrand) SWITCH eStrand CASE FS_PARTY_PROMOTER RETURN FSM_PARTY_PROMOTER_MISSION BREAK CASE FS_BILLIONAIRE_GAMES RETURN FSM_BILLIONAIRE_GAMES_MISSION BREAK CASE FS_HOOD_PASS RETURN FSM_HOOD_PASS_MISSION BREAK ENDSWITCH RETURN FSM_NONE ENDFUNC FUNC FIXER_STRANDS FIXER_APP_GET_DATA_LEAK_FROM_BUTTON(FAA_BUTTON_INDEXES eButton) SWITCH eButton CASE BUTTON_DATA_LEAK_1 RETURN FS_PARTY_PROMOTER BREAK CASE BUTTON_DATA_LEAK_2 RETURN FS_BILLIONAIRE_GAMES BREAK CASE BUTTON_DATA_LEAK_3 RETURN FS_HOOD_PASS BREAK ENDSWITCH RETURN FS_NONE ENDFUNC /// PURPOSE: /// When on the data leak screen this will move the cursor to the appropriate mission tab PROC MOVE_CURSOR_TO_MISSION_TAB(INT iMission) FAA_BUTTON_INDEXES eButton SWITCH iMission CASE 0 eButton = BUTTON_DATA_LEAK_TAB_1 BREAK CASE 1 eButton = BUTTON_DATA_LEAK_TAB_2 BREAK CASE 2 eButton = BUTTON_DATA_LEAK_TAB_3 BREAK ENDSWITCH MOVE_CURSOR_TO_BUTTON(eButton) ENDPROC /// PURPOSE: /// Sets up the data leak screen with default data PROC SETUP_DEFAULT_MISSION_TAB_DATA() INT iStrandTotalPayment = GET_FIXER_FINALE_CASH_REWARD() INT iMissionItemsFound = GET_DATA_LEAK_COPIES_FOUND() UPDATE_DATA_LEAK("", TRUE, FALSE, "", TRUE, FALSE, "", TRUE, FALSE, iStrandTotalPayment, iMissionItemsFound) ENDPROC /// PURPOSE: /// Shows the data leak screen. Setups all the menu items and labels. UPDATE_DATA_LEAK_SCREEN should be called immediately after SHOW_DATA_LEAK_SCREEN to populate the tabs. PROC SHOW_DATA_LEAK_SCREEN() FIXER_APP_SET_APP_PAGE(FAA_PAGE_DATA_LEAK_SELECTION) //Intro mission STRING sIntroTitle = GET_INTRO_MISSION_TITLE() STRING sIntroDesc = GET_INTRO_MISSION_DESCRIPTION() STRING sIntroTexture = GET_INTRO_MISSION_TEXTURE() //Setup mission STRING sSetupTitle = GET_SETUP_MISSION_TITLE() STRING sSetupDesc = GET_SETUP_MISSION_DESCRIPTION() STRING sSetupTexture = GET_SETUP_MISSION_TEXTURE() //Data Leak One STRING sDataleakOneTitle = "FIX_APP_DL1_T" STRING sDataleakOneDesc = GET_STRAND_OVERVIEW_DESCRIPTION(FS_PARTY_PROMOTER) STRING sDataLeakOneTexture = "MISSION_VINEWOOD" BOOL bDataLeakOneLocked = FIXER_APP_IS_DATA_LEAK_LOCKED(FS_PARTY_PROMOTER) BOOL bDataLeakOneComplete = HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_MISSION) //Data Leak Two STRING sDataleakTwoTitle = "FIX_APP_DL2_T" STRING sDataleakTwoDesc = GET_STRAND_OVERVIEW_DESCRIPTION(FS_BILLIONAIRE_GAMES) STRING sDataLeakTwoTexture = "MISSION_RICHMAN_LEAK" BOOL bDataLeakTwoLocked = FIXER_APP_IS_DATA_LEAK_LOCKED(FS_BILLIONAIRE_GAMES) BOOL bDataLeakTwoComplete = HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_MISSION) //Data Leak Three STRING sDataleakThreeTitle = "FIX_APP_DL3_T" STRING sDataleakThreeDesc = GET_STRAND_OVERVIEW_DESCRIPTION(FS_HOOD_PASS) STRING sDataLeakThreeTexture = "MISSION_SOUTH_CENTRAL" BOOL bDataLeakThreeLocked = FIXER_APP_IS_DATA_LEAK_LOCKED(FS_HOOD_PASS) BOOL bDataLeakThreeComplete = HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_MISSION) BOOL bReplayAvailable = HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_AS_LEADER() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_DATA_LEAK_SCREEN") //Data leak one SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sDataleakOneTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sDataleakOneDesc) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bDataLeakOneLocked) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bDataLeakOneComplete) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sDataLeakOneTexture) //Data leak two SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sDataleakTwoTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sDataleakTwoDesc) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bDataLeakTwoLocked) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bDataLeakTwoComplete) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sDataLeakTwoTexture) //Data leak three SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sDataleakThreeTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sDataleakThreeDesc) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bDataLeakThreeLocked) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bDataLeakThreeComplete) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sDataLeakThreeTexture) //Replay SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bReplayAvailable) //Intro mission SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sIntroTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sIntroDesc) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sIntroTexture) //Setup mission SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sSetupTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sSetupDesc) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sSetupTexture) END_SCALEFORM_MOVIE_METHOD() //should be called immediately after SHOW_DATA_LEAK_SCREEN to populate the tabs FIXER_STRANDS eActiveStrand = GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) INT iActiveMission = GET_NEXT_MISISON_IN_STRAND(eActiveStrand) //Setup the page as appropriate SWITCH eActiveStrand CASE FS_NONE //Default data to have the screen display correctly SETUP_DEFAULT_MISSION_TAB_DATA() IF NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_MISSION) UPDATE_DATA_LEAK_TAB_DATA(FS_PARTY_PROMOTER, 2, 0) UPDATE_CURRENTLY_DISPLAYED_STRAND(FS_PARTY_PROMOTER) MOVE_CURSOR_TO_BUTTON(BUTTON_DATA_LEAK_1) ELIF NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_MISSION) UPDATE_DATA_LEAK_TAB_DATA(FS_BILLIONAIRE_GAMES, 2, 0) UPDATE_CURRENTLY_DISPLAYED_STRAND(FS_BILLIONAIRE_GAMES) MOVE_CURSOR_TO_BUTTON(BUTTON_DATA_LEAK_2) ELSE UPDATE_DATA_LEAK_TAB_DATA(FS_HOOD_PASS, 2, 0) UPDATE_CURRENTLY_DISPLAYED_STRAND(FS_HOOD_PASS) MOVE_CURSOR_TO_BUTTON(BUTTON_DATA_LEAK_3) ENDIF SET_DISPLAYING_LEAK_OVERVIEW(TRUE) UPDATE_MISSION_SCREEN_START_BUTTON("FAPP_ACCEPT", FALSE) BREAK DEFAULT //Set the primary screen with the current data UPDATE_DATA_LEAK_SCREEN_WITH_STRAND(eActiveStrand) //Enable tab selection SET_MISSION_SCREEN_TABS_ENABLED(TRUE) IF iActiveMission != -1 //Auto setup the mission information for the relevant mission UPDATE_DATA_LEAK_TAB_DATA(eActiveStrand, iActiveMission) SET_SELECTED_DATA_LEAK_STRAND_MISSION(iActiveMission) SET_DISPLAYING_LEAK_OVERVIEW(FALSE) UPDATE_CURRENTLY_DISPLAYED_STRAND(eActiveStrand) MOVE_CURSOR_TO_MISSION_TAB(iActiveMission) ELSE //If no active or available misison then default to strand overview UPDATE_DATA_LEAK_TAB_DATA(eActiveStrand, 2, 0) //Default cursor placement MOVE_CURSOR_TO_BUTTON(FIXER_APP_GET_BUTTON_FOR_DATA_LEAK(eActiveStrand)) //Keep script data up to date SET_DISPLAYING_LEAK_OVERVIEW(TRUE) UPDATE_CURRENTLY_DISPLAYED_STRAND(eActiveStrand) //Disable the start button IF IS_STRAND_INVESTIGATION_MISSION_COMPLETE(eActiveStrand, 2) UPDATE_MISSION_SCREEN_START_BUTTON("FIX_APP_MIS_COM", FALSE) ELSE UPDATE_MISSION_SCREEN_START_BUTTON("FAPP_ACCEPT", FALSE) ENDIF ENDIF //Set the strand to make sure we are launching from the appropriate strand SET_SELECTED_DATA_LEAK_STRAND(eActiveStrand) BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Show the data recovery screen for launching the setup mission PROC SHOW_DATA_RECOVERY_SCREEN() STRING sMissionTitle = "FIX_APP_VIP_SETUP_T" STRING sMissionDescription = "FIX_APP_VIP_SETUP_D" STRING sMissionTexture = "SETUP_DATA_RECOVERY" STRING sInvestigateLabel = "" STRING sMissionStartLabel = "FAPP_ACCEPT" INT iEarnings = 0 BOOL bComplete = FALSE //Should always be false - we will only show this screen once BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_DATA_RECOVERY_SCREEN") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sMissionTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sMissionDescription) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bComplete) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sMissionTexture) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iEarnings) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sInvestigateLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sMissionStartLabel) END_SCALEFORM_MOVIE_METHOD() FIXER_APP_SET_APP_PAGE(FAA_PAGE_DATA_RECOVERY) MOVE_CURSOR_TO_BUTTON(BUTTON_DATA_RECOVERY) ENDPROC //***********Mission Launching*********** FUNC BOOL LAUNCH_FIXER_STORY_NSTANCED_MISSION(FIXER_STORY_MISSIONS eMission) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_LAUNCH_MISSION) INT iArrayPos = GET_FIXER_STORY_MISSION_ARRAY_POS(eMission) IF iArrayPos = -1 #IF IS_DEBUG_BUILD PRINTLN("[TS][FIXER] LAUNCH_FIXER_STORY_NSTANCED_MISSION - iArrayPos = -1. Candidate args present? ", GET_STRING_FROM_BOOL(GET_COMMANDLINE_PARAM_EXISTS("sc_UseRockstarCandidateMissions"))) #ENDIF RETURN FALSE ENDIF TEXT_LABEL_23 tlName = g_FMMC_ROCKSTAR_CREATED.sMissionHeaderVars[iArrayPos].tlName INT iType = g_FMMC_ROCKSTAR_CREATED.sMissionHeaderVars[iArrayPos].iType INT iMaxPlayers = g_FMMC_ROCKSTAR_CREATED.sMissionHeaderVars[iArrayPos].iMaxPlayers PRINTLN("[TS] ****************************************************") PRINTLN("[TS] * [FIXER] * LAUNCH_FIXER_STORY_NSTANCED_MISSION tlName = ", tlName, "- ", GET_CLOUD_TIME_AS_INT(), ", F - ", GET_FRAME_COUNT(), " *") PRINTLN("[TS] ****************************************************") PRINTLN("[TS][FIXER] LAUNCH_FIXER_STORY_NSTANCED_MISSION - eMission = ", FIXER_STORY_MISSIONS_TO_STRING(eMission)) PRINTLN("[TS][FIXER] LAUNCH_FIXER_STORY_NSTANCED_MISSION - iArrayPos = ", iArrayPos) PRINTLN("[TS][FIXER] LAUNCH_FIXER_STORY_NSTANCED_MISSION - tlName = ", tlName) PRINTLN("[TS][FIXER] LAUNCH_FIXER_STORY_NSTANCED_MISSION - iType = ", iType) PRINTLN("[TS][FIXER] LAUNCH_FIXER_STORY_NSTANCED_MISSION - iMaxPlayers = ", iMaxPlayers) SET_PLAYER_LEAVING_CORONA_VECTOR(GET_PLAYER_PERCEIVED_COORDS(PLAYER_ID())) NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_NO_COLLISION | NSPC_CAN_BE_TARGETTED | NSPC_FREEZE_POSITION | NSPC_USE_PLAYER_FADE_OUT) g_TransitionSessionNonResetVars.bSaveBeforeCoronaVehicle = TRUE SET_MP_DECORATOR_BIT(PLAYER_ID(), MP_DECORATOR_BS_INVALID_TO_SPECTATE) CLEAR_PAUSE_MENU_IS_USING_UGC() SET_TRANSITION_SESSIONS_SKIP_JOB_WARNING() iType = FMMC_TYPE_FIXER_STORY_MISSION SET_FM_JOB_ENTERY_TYPE(ciMISSION_ENTERY_TYPE_FIXER_APP) SET_TRANSITION_SESSIONS_LAUNCHING_FIXER_STORY_MISSION_FROM_APP() SET_PLAYER_LAUNCHING_FIXER_STORY_MISSION_IN_AGENCY() IF (AM_I_TRANSITION_SESSIONS_STARTING_ON_CALL() OR SHOULD_TRANSITION_SESSIONS_CLEAN_UP_ON_CALL_NOW()) SET_TRANSITION_SESSIONS_CLEAN_UP_ON_CALL_NOW() PRINTLN("[TS][FIXER] LAUNCH_FIXER_STORY_NSTANCED_MISSION - On call, setting to clean up on call") //If we are ELSE g_SimpleInteriorData.bAcceptedSimpleIntSameSessionHeistInv = TRUE SET_TRANSITION_SESSIONS_QUICK_MATCH_TYPE(iType) IF GB_GET_NUM_GOONS_IN_LOCAL_GANG() <= 3 SMV_FLOW_SET_LAUNCHING_SMV_IN_OFFICE() ENDIF SET_GAMER_HANDLE_OF_PLAYER_LAUNCHING_SMPL_INT_HEIST(GET_GAMER_HANDLE_PLAYER(PLAYER_ID())) SET_MY_TRANSITION_SESSION_CONTENT_ID(tlName) SET_TRANSITION_SESSIONS_QUICK_MATCH_MAX_PLAYERS(iMaxPlayers) CLEAR_TRANSITION_SESSIONS_NEED_TO_SKYCAM_UP_NOT_WARP() SET_TRANSITION_SESSIONS_STARTING_QUICK_MATCH() CLEAR_TRANSITION_SESSIONS_NEED_TO_WARP_TO_START_SKYCAM() CLEAR_TRANSITION_SESSIONS_CORONA_CONTROLLER_MAINTAIN_CAMERA() SET_TRANSITION_SESSIONS_FORCE_ME_HOST_QUICK_MATCH() VECTOR vCamPosTemp BOOL bTemp VECTOR vZero = << 0.0, 0.0, 0.0 >> INT iSetupBS SET_BIT(iSetupBS, ciCORONA_CAMERA_SETUP_BS_FIXER_STORY) SETUP_CORONA_CAMERA(g_sTransitionSessionData.ciCam, FMMC_TYPE_MISSION, 0, vZero, vCamPosTemp, vZero, TRUE, FALSE, vCamPosTemp, bTemp, bTemp, FALSE, iSetupBS) TOGGLE_RENDERPHASES(FALSE) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].iFmLauncherGameState = FMMC_LAUNCHER_STATE_LOAD_MISSION_FOR_TRANSITION_SESSION PRINTLN("[TS][FIXER] LAUNCH_FIXER_STORY_NSTANCED_MISSION - Found mission at set vars, good to go!") SCRIPT_CLEANUP(FALSE, FALSE) RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC FIXER_LAUNCH_VIP_SETUP_MISSION() g_bLaunchedMissionFrmLaptop = TRUE // NeilF: commented out due to url:bugstar:7428366. The missio script will need to call TRIGGER_EXIT_FROM_SIMPLE_INTERIOR_NOW() on players that // dont' get warped into the heli, or just let them leave the agency on their own. //TRIGGER_EXIT_FROM_SIMPLE_INTERIOR_NOW() REQUEST_LAUNCH_GB_MISSION(FMMC_TYPE_FIXER_VIP, ENUM_TO_INT(FVV_SETUP)) SCRIPT_CLEANUP(TRUE, TRUE) ENDPROC PROC FIXER_LAUNCH_SECURITY_CONTRACT(INT iSlot) g_bSecuroQuickExitOfficeChair = TRUE g_bLaunchedMissionFrmLaptop = TRUE REQUEST_LAUNCH_GB_MISSION(FMMC_TYPE_FIXER_SECURITY, ENUM_TO_INT(GET_PLAYER_FIXER_SECURITY_CONTRACT_IN_SLOT(PLAYER_ID(), iSlot))) SCRIPT_CLEANUP(TRUE, TRUE) ENDPROC PROC FIXER_LAUNCH_DATA_LEAK_INVESTIGATION(FIXER_VIP_VARIATION fixVipVar) g_bLaunchedMissionFrmLaptop = TRUE g_bSecuroQuickExitOfficeChair = TRUE REQUEST_LAUNCH_GB_MISSION(FMMC_TYPE_FIXER_VIP, ENUM_TO_INT(fixVipVar)) SCRIPT_CLEANUP(TRUE, TRUE) ENDPROC PROC FIXER_CHECK_AND_LAUNCH_SELECTED_DATA_LEAK(FIXER_STRANDS eStrand, INT iMission) IF IS_FIXER_MISSION_LAUNCH_DISABLED() PRINTLN(" FIXER_CHECK_AND_LAUNCH_SELECTED_DATA_LEAK Launch blocked for IS_FIXER_MISSION_LAUNCH_DISABLED") FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) EXIT ENDIF SWITCH eStrand CASE FS_PARTY_PROMOTER SWITCH iMission CASE 0 // Launch investigation 1 IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_1) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELSE FIXER_LAUNCH_DATA_LEAK_INVESTIGATION(FVV_NIGHTCLUB) ENDIF BREAK CASE 1 // Launch investigation 2 IF NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_1) OR HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_2) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELSE FIXER_LAUNCH_DATA_LEAK_INVESTIGATION(FVV_YACHT) ENDIF BREAK CASE 2 // Launch investigation finale IF NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_1) OR NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_2) OR HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_MISSION) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELSE LAUNCH_FIXER_STORY_NSTANCED_MISSION(FSM_PARTY_PROMOTER_MISSION) ENDIF BREAK ENDSWITCH BREAK CASE FS_BILLIONAIRE_GAMES SWITCH iMission CASE 0 // Launch investigation 1 IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_1) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELSE FIXER_LAUNCH_DATA_LEAK_INVESTIGATION(FVV_LIMO) ENDIF BREAK CASE 1 // Launch investigation 2 IF NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_1) OR HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_2) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELSE FIXER_LAUNCH_DATA_LEAK_INVESTIGATION(FVV_WAY_IN) ENDIF BREAK CASE 2 // Launch investigation finale IF NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_1) OR NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_2) OR HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_MISSION) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELSE LAUNCH_FIXER_STORY_NSTANCED_MISSION(FSM_BILLIONAIRE_GAMES_MISSION) ENDIF BREAK ENDSWITCH BREAK CASE FS_HOOD_PASS SWITCH iMission CASE 0 // Launch investigation 1 IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_1) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELSE FIXER_LAUNCH_DATA_LEAK_INVESTIGATION(FVV_FAMILIES) ENDIF BREAK CASE 1 // Launch investigation 2 IF NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_1) OR HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_2) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELSE FIXER_LAUNCH_DATA_LEAK_INVESTIGATION(FVV_BALLAS) ENDIF BREAK CASE 2 // Launch investigation finale IF NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_1) OR NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_2) OR HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_MISSION) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELSE LAUNCH_FIXER_STORY_NSTANCED_MISSION(FSM_HOOD_PASS_MISSION) ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ENDPROC //***********Script functions*********** PROC SHOW_OVERLAY(STRING sTitle, STRING sMessage, STRING sAcceptButtonLabel, STRING sCancelButtonLabel, BOOL bPlayFailSound, BOOL bPlayClickSound, FAA_APP_STAGE_ID eNewAppStage = FAA_STAGE_IDLE, INT iAdditionalINT = -1, INT iSecondAdditionalINT = -1, STRING sAdditionalString = NULL, STRING sAdditionalString2 = NULL) sOverlayMethod = "SHOW_OVERLAY_TWO_BUTTON" IF IS_STRING_NULL_OR_EMPTY(sCancelButtonLabel) sOverlayMethod = "SHOW_OVERLAY_ONE_BUTTON" ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, sOverlayMethod) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTitle) //Build the string we need to display BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sMessage) //These parameters need to be given in the correct order(May need a new function if more are added) IF NOT IS_STRING_NULL_OR_EMPTY(sAdditionalString) //Add the first int if needed IF iadditionalINT != -1 ADD_TEXT_COMPONENT_INTEGER(iadditionalINT) ENDIF //Add the string ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(sAdditionalString) //Add the extra int if needed IF iSecondAdditionalINT != -1 //For messages that use all available parameters: Int-String-Int ADD_TEXT_COMPONENT_INTEGER(iSecondAdditionalINT) ENDIF //Add the extra string if needed IF NOT IS_STRING_NULL_OR_EMPTY(sAdditionalString2) ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(sAdditionalString2) ENDIF ELSE IF iadditionalINT != -1 ADD_TEXT_COMPONENT_INTEGER(iadditionalINT) ENDIF ENDIF END_TEXT_COMMAND_SCALEFORM_STRING() SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sAcceptButtonLabel) IF NOT IS_STRING_NULL_OR_EMPTY(sCancelButtonLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sCancelButtonLabel) ENDIF END_SCALEFORM_MOVIE_METHOD() IF bPlayClickSound FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_SELECT) ELIF bPlayFailSound FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_ERROR) ENDIF SET_BIT(iBS, FAA_BS_OVERLAY_SCREEN_ACTIVE) FIXER_APP_SET_APP_STAGE(eNewAppStage) CLEAR_ROLLOVER_HELP() PRINTLN(" SHOW_OVERLAY with method: ", sOverlayMethod, " title: ", sTitle, " message: ", sMessage, " Accept button: ", sAcceptButtonLabel, " Cancel button: ", sCancelButtonLabel) ENDPROC PROC HIDE_OVERLAY() STRING sCloseOverlayMethod = "HIDE_OVERLAY_ONE_BUTTON" IF GET_HASH_KEY(sOverlayMethod) = HASH("SHOW_OVERLAY_TWO_BUTTON") sCloseOverlayMethod = "HIDE_OVERLAY_TWO_BUTTON" ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, sCloseOverlayMethod) END_SCALEFORM_MOVIE_METHOD() FIXER_APP_SET_APP_STAGE(FAA_STAGE_IDLE) CLEAR_BIT(iBS, FAA_BS_OVERLAY_SCREEN_ACTIVE) PRINTLN(" HIDE_OVERLAY") ENDPROC PROC HANDLE_CANCEL_BUTTON_PRESS() IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) EXIT ELIF IS_BIT_SET(iBS, FAA_BS_FADE_TO_EXIT) EXIT ENDIF IF FIXER_APP_IS_OVERLAY_OPEN() //Hide any overlay HIDE_OVERLAY() ELIF FIXER_APP_GET_APP_STAGE() = FAA_STAGE_SEC_CONTRACT_SELECTED //Go home for now, but could do something different here if asked SHOW_HOME_SCREEN() ELIF FIXER_APP_GET_APP_CURRENT_PAGE() != FAA_PAGE_HOME AND FIXER_APP_GET_APP_CURRENT_PAGE() != FAA_PAGE_LOGIN //Go back to the home page SHOW_HOME_SCREEN() ELSE SCRIPT_CLEANUP() ENDIF CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_CANCEL))) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_BACK) ENDPROC PROC PASS_INPUTS_TO_SCALEFORM() CLEAR_BIT(iBS, FAA_BS_CURSOR_INPUT_PROCESSED) #IF IS_DEBUG_BUILD CLEAR_BIT(iBS, FAA_BS_PRINTED_PAUSE_MENU_ACTIVE) #ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_LB) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LB) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_LB))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_RB) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RB) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_RB))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_UP))) SET_BIT(iBS, FAA_BS_CURSOR_INPUT_PROCESSED) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_DOWN))) SET_BIT(iBS, FAA_BS_CURSOR_INPUT_PROCESSED) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_LEFT))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_RIGHT))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_ACCEPT))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) AND NOT IS_BIT_SET(iBS, FAA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) HANDLE_CANCEL_BUTTON_PRESS() ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_X) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_X) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_X))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_Y) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_Y))) ENDIF IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) UPDATE_MENU_CURSOR_GLOBALS() // Only set the mouse position if it's moved - this fixes a conflict between the mouse and navigating using keyboard. IF g_fMenuCursorXMoveDistance !=0 OR g_fMenuCursoryMoveDistance !=0 BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_X)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_Y)) END_SCALEFORM_MOVIE_METHOD() SET_BIT(iBS, FAA_BS_CURSOR_INPUT_PROCESSED) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_ACCEPT))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) AND NOT IS_BIT_SET(iBS, FAA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) HANDLE_CANCEL_BUTTON_PRESS() ENDIF ELSE SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_X) SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_Y) INT iLeftXNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_X) INT iLeftYNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_Y) IF (iLeftXNew != 127) OR (iLeftX != 127) OR (iLeftYNew != 127) OR (iLeftY != 127) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") iLeftX = iLeftXNew iLeftY = iLeftYNew SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iLeftX) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iLeftY) END_SCALEFORM_MOVIE_METHOD() SET_BIT(iBS, FAA_BS_CURSOR_INPUT_PROCESSED) ENDIF ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_X) SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_Y) INT iRightXNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_X) INT iRightYNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_Y) IF (iRightXNew != 127) OR (iRightX != 127) OR (iRightYNew != 127) OR (iRightY != 127) BOOL bUsingScrollWheel = (IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN)) IF NOT bUsingScrollWheel bUsingScrollWheel = (IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP)) SET_BIT(iBS, FAA_BS_CURSOR_INPUT_PROCESSED) ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") iRightX = iRightXNew iRightY = iRightYNew SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iRightX) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iRightY) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bUsingScrollWheel) END_SCALEFORM_MOVIE_METHOD() ENDIF IF (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y)) AND NOT IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELIF NOT IS_BIT_SET(iBS, FAA_BS_FADE_TO_EXIT) CPRINTLN(DEBUG_INTERNET," EXITING WEBSITE for Triangle press") SCRIPT_CLEANUP() ENDIF ENDIF #IF IS_DEBUG_BUILD IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)) SCRIPT_CLEANUP() ENDIF #ENDIF ENDPROC /// PURPOSE: /// Check for any flags that mean this script should terminate PROC RUN_CLEANUP_CHECKS() IF NOT NETWORK_IS_GAME_IN_PROGRESS() PRINTLN(" Shutting down! No network game is currently active") SCRIPT_CLEANUP() ELIF IS_PAUSE_MENU_ACTIVE_EX() PRINTLN(" Shutting down! Player opend the pause menu") SCRIPT_CLEANUP() ELIF IS_ENTITY_DEAD(PLAYER_PED_ID()) PRINTLN(" Shutting down! Player is injured or dead") SCRIPT_CLEANUP() ELIF IS_PLAYER_WALKING_IN_OR_OUT_OF_SIMPLE_INTERIOR(PLAYER_ID()) g_SimpleInteriorData.eInteriorToPauseBlockedEntryHelp = GET_SIMPLE_INTERIOR_PLAYER_IS_WALKING_IN_OR_OUT_FROM(PLAYER_ID()) PRINTLN(" Shutting down! Player is walking out. MAINTAIN_HELP_FOR_REASON_FOR_BLOCKED_ENTRY - Set blocker for interior: ", g_SimpleInteriorData.eInteriorToPauseBlockedEntryHelp) SCRIPT_CLEANUP() ELIF SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE() PRINTLN(" Shutting down! SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE") SCRIPT_CLEANUP() ENDIF ENDPROC PROC DISPLAY_APP_ROLLOVER_HELP(STRING sHelp) IF IS_BIT_SET(iBS, FAA_BS_DISPLAY_ROLLOVER_HELP) IF GET_HASH_KEY(sRolloverHelp) != GET_HASH_KEY(sHelp) PRINTLN(" DISPLAY_APP_ROLLOVER_HELP - Switching help message to: ", sHelp) PRINT_HELP_FOREVER(sHelp) sRolloverHelp = sHelp ENDIF ELSE PRINTLN(" DISPLAY_APP_ROLLOVER_HELP - New help message: ", sHelp) PRINT_HELP_FOREVER(sHelp) sRolloverHelp = sHelp SET_BIT(iBS, FAA_BS_DISPLAY_ROLLOVER_HELP) ENDIF ENDPROC FUNC BOOL IS_ACCEPT_BUTTON_INPUT_JUST_PRESSED() IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC MAINTAIN_CHECKS_FOR_CURRENT_SELECTION_ID() IF IS_ACCEPT_BUTTON_INPUT_JUST_PRESSED() IF NOT IS_BIT_SET(iBS, FAA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_SELECTION") currentSelectionReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() SET_BIT(iBS, FAA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) ENDIF ENDIF ENDPROC PROC SET_SELECTED_SECUITY_CONTRACT(FAA_BUTTON_INDEXES eHighlightedButton) #IF IS_DEBUG_BUILD INT iCurrentValue = iSelectedSecurityContract #ENDIF SWITCH eHighlightedButton CASE BUTTON_SECURITY_CONTRACT_1 iSelectedSecurityContract = 0 BREAK CASE BUTTON_SECURITY_CONTRACT_2 iSelectedSecurityContract = 1 BREAK CASE BUTTON_SECURITY_CONTRACT_3 iSelectedSecurityContract = 2 BREAK ENDSWITCH #IF IS_DEBUG_BUILD IF iCurrentValue != iSelectedSecurityContract PRINTLN(" SET_SELECTED_SECUITY_CONTRACT - New selected contract: ", iSelectedSecurityContract) ENDIF #ENDIF ENDPROC PROC MAINTAIN_CHECKS_FOR_CURRENT_ROLLOVER_ID() IF NOT IS_BIT_SET(iBS, FAA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) AND NOT FIXER_APP_IS_OVERLAY_OPEN() IF NOT IS_BIT_SET(iBS, FAA_BS_WAITING_FOR_ROLLOVER_RETURN_VALUE) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_ROLLOVER") currentRollOverReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() //Add a safety timeout of 20 frames iRolloverReturnTimeOut = 20 SET_BIT(iBS, FAA_BS_WAITING_FOR_ROLLOVER_RETURN_VALUE) ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles the player input when the accept input is pressed PROC HANDLE_OVERLAY_ACCEPT_PRESSED() SWITCH FIXER_APP_GET_APP_STAGE() CASE FAA_STAGE_STRAND_CONFIRM //Set & save the selected strand SET_CURRENT_FIXER_STRAND(eSelectedDataLeakStrand, TRUE) //Tell the app which strand we have selected UPDATE_DATA_LEAK_SCREEN_WITH_STRAND(eSelectedDataLeakStrand) //Lock the other options UPDATE_DATA_LEAK_STRAND_LOCK_STATE() //Fill out the scren with information for the first mission in the strand UPDATE_DATA_LEAK_TAB_DATA(eSelectedDataLeakStrand, 0) //Enable the tab buttons SET_MISSION_SCREEN_TABS_ENABLED(TRUE) //Enable the start button for mission selection UPDATE_MISSION_SCREEN_START_BUTTON("FAPP_ACCEPT", TRUE) //Move the cursor MOVE_CURSOR_TO_BUTTON(BUTTON_DATA_LEAK_ACCEPT) IF HAS_PLAYER_COMPLETED_FIXER_STORY_AS_LEADER(PLAYER_ID()) AND NOT GET_FIXER_MATCH_HISTORY_PLAYSTATS_HAVE_BEEN_GENERATED() SET_BIT(g_sFixerFlow.Bitset2, ciFIXER_FLOW_BITSET2__GENERATE_PLAYSTATS) PRINTLN("[FIXER_TELEM] ciFIXER_FLOW_BITSET2__GENERATE_PLAYSTATS set.") ENDIF HIDE_OVERLAY() BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Handles selection of a mission from the currently selected data leak PROC HANDLE_DATA_LEAK_BUTTON_SELECTION(FAA_BUTTON_INDEXES eButtonPressed) FIXER_STRANDS eStrand = FIXER_APP_GET_DATA_LEAK_FROM_BUTTON(eButtonPressed) FIXER_STORY_MISSIONS eFinalStrandMission = FIXER_APP_GET_FINAL_MISSION_ID_FOR_DATA_LEAK_STRAND(eStrand) UPDATE_CURRENTLY_DISPLAYED_STRAND(eStrand) IF GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) = eStrand OR HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(eFinalStrandMission) //Update script leak cache SET_SELECTED_DATA_LEAK_STRAND(eStrand) IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(eFinalStrandMission) //If we have already done the final mission in this strand then enable all tabs for selection as an overview //Update scaleform with leak info UPDATE_DATA_LEAK_SCREEN_WITH_STRAND(eStrand) UPDATE_MISSION_SCREEN_START_BUTTON("FIX_APP_MIS_COM", FALSE) SET_MISSION_SCREEN_TABS_ENABLED(TRUE) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_SELECT) ELSE //We are on this strand so highlight the active mission INT iActiveMission = GET_NEXT_MISISON_IN_STRAND(eStrand) IF iActiveMission = -1 FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELSE UPDATE_DATA_LEAK_TAB_DATA(eStrand, iActiveMission) SET_SELECTED_DATA_LEAK_STRAND_MISSION(iActiveMission) SET_DISPLAYING_LEAK_OVERVIEW(FALSE) MOVE_CURSOR_TO_MISSION_TAB(iActiveMission) UPDATE_MISSION_SCREEN_START_BUTTON("FAPP_ACCEPT", TRUE) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_SELECT) ENDIF ENDIF ELIF GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) = FS_NONE //Show select strand confirm STRING sOverlayTitle = GET_STRAND_SELECTION_PROMPT_TITLE(eStrand) STRING sOverlayMessage = GET_STRAND_SELECTION_PROMPT_MESSAGE(eStrand) SHOW_OVERLAY(sOverlayTitle,sOverlayMessage, "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, FAA_STAGE_STRAND_CONFIRM) MOVE_CURSOR_TO_BUTTON(BUTTON_OVERLAY_ACCEPT) SET_SELECTED_DATA_LEAK_STRAND(eStrand) ELSE //This strand is currently unavailable while another strand is active PRINT_HELP("FXR_VIP_STRAND2") FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ENDIF ENDPROC /// PURPOSE: /// Handles selection of one of the data leak options /// Sets up the movie to display the appropriate information /// Sets up script to launch a mission from this leak PROC HANDLE_DATA_LEAK_MISSION_BUTTON_SELECTION(FAA_BUTTON_INDEXES eButtonPressed) INT iMissionID = 0 IF eButtonPressed = BUTTON_DATA_LEAK_TAB_2 iMissionID = 1 ELIF eButtonPressed = BUTTON_DATA_LEAK_TAB_3 iMissionID = 2 ENDIF SET_DISPLAYING_LEAK_OVERVIEW(FALSE) UPDATE_DATA_LEAK_TAB_DATA(eSelectedDataLeakStrand, iMissionID) SET_SELECTED_DATA_LEAK_STRAND_MISSION(iMissionID) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_SELECT) IF IS_STRAND_INVESTIGATION_MISSION_COMPLETE(eSelectedDataLeakStrand, iMissionID) UPDATE_MISSION_SCREEN_START_BUTTON("FIX_APP_MIS_COM", FALSE) ELSE UPDATE_MISSION_SCREEN_START_BUTTON("FAPP_ACCEPT", TRUE) ENDIF ENDPROC /// PURPOSE: /// Handles selection of a security contract /// Asks the movie to display the appropriate contract /// Sets the script up for launching this mission PROC HANDLE_SECURITY_CONTRACT_BUTTON_SELECTION(FAA_BUTTON_INDEXES eButtonPressed) INT iContractID = 0 IF eButtonPressed = BUTTON_SECURITY_CONTRACT_2 iContractID = 1 ELIF eButtonPressed = BUTTON_SECURITY_CONTRACT_3 iContractID = 2 ENDIF SET_SELECTED_SECUITY_CONTRACT(eButtonPressed) SCALEFORM_SELECT_SECURITY_CONTRACT(iContractID) UPDATE_SECURITY_CONTRACTS_SELECTION_SCREEN_STATS(TRUE, iContractID) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_SELECT) ENDPROC FUNC BOOL IS_BUTTON_INPUT_ALLOWED_DURING_DIALOGUE(FAA_BUTTON_INDEXES eButtonPressed) SWITCH eButtonPressed CASE BUTTON_SECURITY_CONTRACT_1 CASE BUTTON_SECURITY_CONTRACT_2 CASE BUTTON_SECURITY_CONTRACT_3 RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC CHECK_BUTTON_PRESS() MAINTAIN_CHECKS_FOR_CURRENT_SELECTION_ID() MAINTAIN_CHECKS_FOR_CURRENT_ROLLOVER_ID() //Check if we clicked a button IF IS_BIT_SET(iBS, FAA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) IF IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentSelectionReturnIndex) FAA_BUTTON_INDEXES eButtonPressed = INT_TO_ENUM(FAA_BUTTON_INDEXES, GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentSelectionReturnIndex)) IF NOT IS_SCREEN_FADED_IN() PRINTLN(" CHECK_BUTTON_PRESS button press returned a value but the screen is not faded in") CLEAR_BIT(iBS, FAA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) EXIT ELIF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND NOT IS_BUTTON_INPUT_ALLOWED_DURING_DIALOGUE(eButtonPressed) PRINTLN(" CHECK_BUTTON_PRESS button press returned = ", DEBUG_GET_BUTTON_NAME(eButtonPressed), " ID: ", eButtonPressed, " ignore input for dialogue.") //Do not allow input while we are running the tutorial IF FIXER_APP_IS_DIALOGUE_PLAYING(F_APP_D_INTRO) IF NOT IS_BIT_SET(iBS, FAA_BS_PRINTED_INTRO_PLEASE_WAIT) //Please wait until dialogue is complete PRINT_HELP("FIX_HQ_APP_WAIT") SET_BIT(iBS, FAA_BS_PRINTED_INTRO_PLEASE_WAIT) ENDIF ENDIF FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) CLEAR_BIT(iBS, FAA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) EXIT ELSE PRINTLN(" CHECK_BUTTON_PRESS button press returned = ", DEBUG_GET_BUTTON_NAME(eButtonPressed), " ID: ", eButtonPressed) ENDIF SWITCH eButtonPressed CASE BUTTON_OVERLAY_ACCEPT HANDLE_OVERLAY_ACCEPT_PRESSED() BREAK CASE BUTTON_OVERLAY_CANCEL HIDE_OVERLAY() BREAK CASE BUTTON_LOGIN SHOW_HOME_SCREEN() SET_BIT(GlobalplayerBD[NATIVE_TO_INT(PLAYER_ID())].SimpleInteriorBD.iBSTwo, BS_SIMPLE_INTERIOR_GLOBAL_BS_SIX_FIXER_HQ_COMPUTER_IN_USE) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_SELECT) BREAK //Setup CASE BUTTON_DATA_RECOVERY //Do nothing for now BREAK CASE BUTTON_DATA_RECOVERY_START PRINTLN(" HANDLE_OVERLAY_ACCEPT_PRESSED - Launching setup mission") SET_BIT(iBS, FAA_BS_FADE_TO_EXIT) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_LAUNCH_MISSION) BREAK //Security contracts CASE BUTTON_HOME_SECURITY_CONTRACT CASE BUTTON_VIP_PAGE_SEC_CONTRACT CASE BUTTON_DREC_PAGE_SEC_CONTRACT SHOW_SECURITY_CONTRACTS_SELECTION_SCREEN() FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_SELECT) SCALEFORM_SELECT_SECURITY_CONTRACT(0) UPDATE_SECURITY_CONTRACTS_SELECTION_SCREEN_STATS(TRUE, 0) BREAK CASE BUTTON_SECURITY_CONTRACT_ACCEPT //Start the mission FIXER_LAUNCH_SECURITY_CONTRACT(iSelectedSecurityContract) BREAK CASE BUTTON_SECURITY_CONTRACT_1 CASE BUTTON_SECURITY_CONTRACT_2 CASE BUTTON_SECURITY_CONTRACT_3 HANDLE_SECURITY_CONTRACT_BUTTON_SELECTION(eButtonPressed) BREAK //VIP CASE BUTTON_HOME_VIP_CONTRACT CASE BUTTON_SECURITY_PAGE_VIP_CONTRACT IF HAS_LOCAL_PLAYER_UNLOCKED_FIXER_STORY() AND HAS_LOCAL_PLAYER_COMPLETED_FIXER_INTRO_MISSION() AND HAS_LOCAL_PLAYER_VIEWED_FIXER_HQ_POST_SETUP_CUTSCENE() AND NOT IS_FIXER_STORY_ON_COOLDOWN(TRUE) IF NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_SETUP_MISSION() //Offer up the setup mission SHOW_DATA_RECOVERY_SCREEN() FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_SELECT) ELIF NOT HAS_PLAYER_STARTED_FIXER_STORY_INVESTIGATIONS(PLAYER_ID()) AND NOT IS_BIT_SET(g_sFixerFlow.Bitset2, ciFIXER_FLOW_BITSET2__INVESTIGATIONS_CALL_DONE) //Wait for the flow call following setup first FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ELSE SHOW_DATA_LEAK_SCREEN() FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_SELECT) ENDIF ELSE FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_NAV_BLOCKED) ENDIF BREAK //Data leaks CASE BUTTON_DATA_LEAK_1 CASE BUTTON_DATA_LEAK_2 CASE BUTTON_DATA_LEAK_3 HANDLE_DATA_LEAK_BUTTON_SELECTION(eButtonPressed) BREAK //Data leak missions CASE BUTTON_DATA_LEAK_TAB_1 CASE BUTTON_DATA_LEAK_TAB_2 CASE BUTTON_DATA_LEAK_TAB_3 HANDLE_DATA_LEAK_MISSION_BUTTON_SELECTION(eButtonPressed) BREAK //Mission start button - Data leak page CASE BUTTON_DATA_LEAK_ACCEPT IF IS_BIT_SET(iBS, FAA_BS_INTRO_MISSION_LAUNCH_PREPARED) IF NOT LAUNCH_FIXER_STORY_NSTANCED_MISSION(FSM_INTRO) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_ERROR) ENDIF ELIF IS_BIT_SET(iBS, FAA_BS_SETUP_MISSION_LAUNCH_PREPARED) PRINTLN(" CHECK_BUTTON_PRESS - BUTTON_DATA_LEAK_ACCEPT - Launching setup mission") SET_BIT(iBS, FAA_BS_FADE_TO_EXIT) FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_LAUNCH_MISSION) ELSE FIXER_CHECK_AND_LAUNCH_SELECTED_DATA_LEAK(eSelectedDataLeakStrand, iSelectedDataLeakInStrand) ENDIF BREAK CASE BUTTON_INTRO_MISSION CASE BUTTON_SETUP_MISSION MOVE_CURSOR_TO_BUTTON(BUTTON_DATA_LEAK_ACCEPT) BREAK ENDSWITCH CLEAR_BIT(iBS, FAA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles selection of a mission from the currently selected data leak PROC HANDLE_DATA_LEAK_BUTTON_ROLLOVER(FAA_BUTTON_INDEXES eButtonHighlighted) FIXER_STRANDS eStrand = FIXER_APP_GET_DATA_LEAK_FROM_BUTTON(eButtonHighlighted) FIXER_STORY_MISSIONS eFinalStrandMission = FIXER_APP_GET_FINAL_MISSION_ID_FOR_DATA_LEAK_STRAND(eStrand) IF eCurrentlyDisplayedStrand = eStrand AND IS_BIT_SET(iBS, FAA_BS_DISPLAYING_LEAK_OVERVIEW) EXIT ELSE UPDATE_CURRENTLY_DISPLAYED_STRAND(eStrand) ENDIF SET_DISPLAYING_LEAK_OVERVIEW(TRUE) //Update script leak cache IF g_bUpdateLeakStrandOnRollover SET_SELECTED_DATA_LEAK_STRAND(eStrand) ENDIF IF GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(FALSE) = eStrand OR HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(eFinalStrandMission) //Update scaleform with leak info UPDATE_DATA_LEAK_SCREEN_WITH_STRAND(eStrand) SET_MISSION_SCREEN_TABS_ENABLED(TRUE) IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(eFinalStrandMission) //If we have already doen the final mission in this strand then enable all tabs for selection as an overview UPDATE_MISSION_SCREEN_START_BUTTON("FIX_APP_MIS_COM", FALSE) SET_MISSION_SCREEN_TABS_ENABLED(TRUE) UPDATE_DATA_LEAK_TAB_DATA(eStrand, 2, 2) ELSE UPDATE_MISSION_SCREEN_START_BUTTON("FAPP_ACCEPT", FALSE) UPDATE_DATA_LEAK_TAB_DATA(eStrand, 2, 0) ENDIF ELSE SETUP_DEFAULT_MISSION_TAB_DATA() UPDATE_MISSION_SCREEN_START_BUTTON("FAPP_ACCEPT", FALSE) SET_MISSION_SCREEN_TABS_ENABLED(FALSE) UPDATE_DATA_LEAK_TAB_DATA(eStrand, 2, 0) ENDIF ENDPROC PROC MAINTAIN_ROLLOVER_FUNCTIONALITY() IF IS_BIT_SET(iBS, FAA_BS_WAITING_FOR_ROLLOVER_RETURN_VALUE) IF IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentRollOverReturnIndex) FAA_BUTTON_INDEXES eButtonHighlighted = INT_TO_ENUM(FAA_BUTTON_INDEXES, GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentRollOverReturnIndex)) IF eButtonHighlighted != eButtonLastHighlighted PRINTLN(" MAINTAIN_ROLLOVER_FUNCTIONALITY - New highlighted button: ", DEBUG_GET_BUTTON_NAME(eButtonHighlighted), " ID: ", eButtonHighlighted) IF NOT FIXER_APP_IS_OVERLAY_OPEN() SWITCH eButtonHighlighted CASE BUTTON_INTRO_MISSION CASE BUTTON_SETUP_MISSION SET_DISPLAYING_LEAK_OVERVIEW(FALSE) UPDATE_REPLAY_MISSION_TAB_DATA(eButtonHighlighted) UPDATE_MISSION_SCREEN_START_BUTTON("FAPP_ACCEPT", TRUE) BREAK CASE BUTTON_DATA_LEAK_1 CASE BUTTON_DATA_LEAK_2 CASE BUTTON_DATA_LEAK_3 HANDLE_DATA_LEAK_BUTTON_ROLLOVER(eButtonHighlighted) BREAK ENDSWITCH ELSE PRINTLN(" MAINTAIN_ROLLOVER_FUNCTIONALITY - Ignore rollover return value - FIXER_APP_IS_OVERLAY_OPEN") ENDIF ENDIF eButtonLastHighlighted = eButtonHighlighted iRolloverReturnTimeOut = 0 CLEAR_BIT(iBS, FAA_BS_WAITING_FOR_ROLLOVER_RETURN_VALUE) ELSE //Have a timeout because there are instances where we can get stuck with this command and IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY //will no longer return true because it has thrown out currentRollOverReturnIndex //Found when using the debug pause iRolloverReturnTimeOut -- IF iRolloverReturnTimeOut = 0 PRINTLN("MAINTAIN_ROLLOVER_FUNCTIONALITY - waiting for return value timed out. Clear") CLEAR_BIT(iBS, FAA_BS_WAITING_FOR_ROLLOVER_RETURN_VALUE) ELSE PRINTLN("MAINTAIN_ROLLOVER_FUNCTIONALITY - waiting for return value") ENDIF ENDIF ENDIF ENDPROC PROC APP_CONTROL_DISABLE() SET_CLEAR_ON_CALL_HUD_THIS_FRAME() IF (NOT IS_SYSTEM_UI_BEING_DISPLAYED()) AND (NOT IS_PAUSE_MENU_ACTIVE()) DISABLE_ALL_CONTROL_ACTIONS(PLAYER_CONTROL) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE) ENDIF ENDPROC PROC HIDE_CASH_HUD_IN_APP() HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_MP_CASH) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) ENDPROC PROC RENDER_FIXER_APP() #IF IS_DEBUG_BUILD IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_1) bRender = !bRender PRINTLN(" bRender toggled to ", bRender) ENDIF IF !bRender EXIT ENDIF #ENDIF HIDE_HUD_AND_RADAR_THIS_FRAME() HIDE_SCRIPTED_HUD_COMPONENT_THIS_FRAME(HUD_MP_RANK_BAR) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) APP_CONTROL_DISABLE() HIDE_CASH_HUD_IN_APP() THEFEED_HIDE_THIS_FRAME() SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL,INPUT_FRONTEND_PAUSE) SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) DRAW_RECT_FROM_CORNER(0.0, 0.0, 1.0, 1.0, 0, 0, 0, 255) SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,255) REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() DISABLE_ALL_MP_HUD_THIS_FRAME() ENDPROC PROC SEND_ALL_DATA_TO_SCALEFORM() SHOW_LOGIN_SCREEN() ENDPROC //////////////////////////////////////////////////////////////////////////// /// Dialogue tutorial FUNC BOOL FIXER_APP_TUT_IS_ROOT_FOR_FRANKLIN(INT iTutorialID) SWITCH iTutorialID CASE F_APP_D_INTRO //Intro - Home - Franklin CASE F_APP_D_SEC_CON //Intro - Security Contracts - Franklin CASE F_APP_D_SEC_CON2 //Intro - Security Contracts pt2 - Franklin CASE F_APP_D_SEC_CON3 //Intro - Security Contracts pt3 - Franklin RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL FIXER_APP_TUT_IS_ROOT_FOR_FRANKLIN_AND_IMANI(INT iTutorialID) SWITCH iTutorialID CASE F_APP_D_PARTY_P_M2 //VIP - Party promoter mission 2 intro - Imani & Franklin CASE F_APP_D_BILL_G_M2 //VIP - Billionaire games mission 2 intro - Imani & Franklin RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC STRING FIXER_APP_TUT_GET_ROOT_LABEL(INT iTutorialID) SWITCH iTutorialID CASE F_APP_D_INTRO RETURN "FXFR_FOC_1" BREAK //Intro - Home - Franklin CASE F_APP_D_SEC_CON RETURN "FXFR_FOC_2" BREAK //Intro - Security Contracts - Franklin CASE F_APP_D_SEC_CON2 RETURN "FXFR_FOC_3" BREAK //Intro - Security Contracts pt2 - Franklin CASE F_APP_D_SEC_CON3 RETURN "FXFR_FOC_4" BREAK //Intro - Security Contracts pt3 - Franklin CASE F_APP_D_SETUP RETURN "FXIM_FL_1" BREAK //Home - Setup description - Imani CASE F_APP_D_SETUP_2 RETURN "FXIM_FL_2" BREAK //Home - Setup description part 2 - Imani CASE F_APP_D_SELECT_LEAK RETURN "FXIM_FL_4" BREAK //VIP - Select leak intro - Imani CASE F_APP_D_PARTY_P_INT RETURN "FXIM_FL_5" BREAK //VIP - Party promoter strand intro - Imani CASE F_APP_D_BILL_G_INT RETURN "FXIM_FL_6" BREAK //VIP - Billionaire games strand intro - Imani CASE F_APP_D_HOOD_P_INT RETURN "FXIM_FL_7" BREAK //VIP - Hood pass strand intro - Imani CASE F_APP_D_PARTY_P_M2 RETURN "FXIM_FL_8" BREAK //VIP - Party promoter mission 2 intro - Imani & Franklin CASE F_APP_D_PARTY_P_F RETURN "FXIM_FL_9" BREAK //VIP - Party promoter finale intro - Imani CASE F_APP_D_HOOD_P_M2 RETURN "FXIM_FL_10" BREAK //VIP - Hood pass mission 2 intro - Imani CASE F_APP_D_HOOD_P_F RETURN "FXIM_FL_11" BREAK //VIP - Hood pass finale intro - Imani CASE F_APP_D_BILL_G_M2 RETURN "FXIM_FL_12" BREAK //VIP - Billionaire games mission 2 intro - Imani & Franklin CASE F_APP_D_BILL_G_F RETURN "FXIM_FL_13" BREAK //VIP - Billionaire games finale intro - Imani ENDSWITCH CASSERTLN(DEBUG_INTERNET, "FIXER_APP_TUT_GET_ROOT_LABEL: Invalid tutorial ID: ", iTutorialID) RETURN "FXFR_FOC_1" ENDFUNC PROC SET_ACTIVE_APP_DIALOGUE() iDialoguePlayingID = iDialogueRequestID iDialogueRequestID = -1 SHOW_SPEAKER_ICON(TRUE) ENDPROC PROC FIXER_APP_START_TUTORIAL_DIALOGUE(INT iTutorialID) structPedsForConversation sDialogue IF FIXER_APP_TUT_IS_ROOT_FOR_FRANKLIN_AND_IMANI(iTutorialID) ADD_PED_FOR_DIALOGUE(sDialogue, 2, NULL, "FIX_IMANI") ADD_PED_FOR_DIALOGUE(sDialogue, 3, NULL, "FIX_FRANKLIN") IF CREATE_CONVERSATION(sDialogue, "FXIMAUD", FIXER_APP_TUT_GET_ROOT_LABEL(iTutorialID), CONV_PRIORITY_HIGH) CPRINTLN(DEBUG_INTERNET, " Created Franklin & Imani tutorial converstion: ", iTutorialID, " Root: ", FIXER_APP_TUT_GET_ROOT_LABEL(iTutorialID)) SET_ACTIVE_APP_DIALOGUE() ENDIF ELIF FIXER_APP_TUT_IS_ROOT_FOR_FRANKLIN(iTutorialID) ADD_PED_FOR_DIALOGUE(sDialogue, 2, NULL, "FIX_FRANKLIN") IF CREATE_CONVERSATION(sDialogue, "FXFRAUD", FIXER_APP_TUT_GET_ROOT_LABEL(iTutorialID), CONV_PRIORITY_HIGH) CPRINTLN(DEBUG_INTERNET, " Created Franklin tutorial converstion: ", iTutorialID, " Root: ", FIXER_APP_TUT_GET_ROOT_LABEL(iTutorialID)) SET_ACTIVE_APP_DIALOGUE() ENDIF ELSE ADD_PED_FOR_DIALOGUE(sDialogue, 2, NULL, "FIX_IMANI") IF CREATE_CONVERSATION(sDialogue, "FXIMAUD", FIXER_APP_TUT_GET_ROOT_LABEL(iTutorialID), CONV_PRIORITY_HIGH) CPRINTLN(DEBUG_INTERNET, " Created Imani tutorial converstion: ", iTutorialID, " Root: ", FIXER_APP_TUT_GET_ROOT_LABEL(iTutorialID)) SET_ACTIVE_APP_DIALOGUE() ENDIF ENDIF ENDPROC PROC FIXER_APP_RUN_TUTORIAL_DIALOGUE() //Start the dialogue IF iDialogueRequestID != -1 FIXER_APP_START_TUTORIAL_DIALOGUE(iDialogueRequestID) ENDIF ENDPROC PROC MAINTAIN_SECURITY_CONTRACT_COOLDOWN_EXPIRATION() IF IS_BIT_SET(iBS, FAA_BS_OPENED_SEC_CONTRACT_PAGE_W_ACTIVE_CD) IF NOT ARE_FIXER_SECURITY_CONTRACTS_ON_COOLDOWN() PRINTLN(" MAINTAIN_SECURITY_CONTRACT_COOLDOWN_EXPIRATION - timer expired - Clear FAA_BS_OPENED_SEC_CONTRACT_PAGE_W_ACTIVE_CD") CLEAR_BIT(iBS, FAA_BS_OPENED_SEC_CONTRACT_PAGE_W_ACTIVE_CD) IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("FXR_NX_SEC_WAIT") CLEAR_HELP() ENDIF IF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_SECURITY_CONTRACT_SELECTION SETUP_START_MISSION_BUTTON_SECURITY_CONTRACTS(TRUE) ENDIF ENDIF ENDIF ENDPROC PROC FIXER_APP_RUN_HELP_TUTORIAL() IF NOT IS_BIT_SET(iBS, FAA_BS_CURRENTLY_PLAYING_TUTORIAL) AND NOT IS_STRING_NULL_OR_EMPTY(sTutTextAfterDialogue) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() PRINT_HELP(sTutTextAfterDialogue) sTutTextAfterDialogue = "" ENDIF IF NOT IS_BIT_SET(iBS, FAA_BS_PRINTED_DL_PLEASE_WAIT) AND IS_FIXER_MISSION_LAUNCH_DISABLED() IF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_DATA_LEAK_SELECTION SWITCH g_eFixerDisableMissionLaunchReason CASE FMLDR_PP2_UNLOCKED_CALL CASE FMLDR_PPF_UNLOCKED_CALL CASE FMLDR_BG2_UNLOCKED_CALL CASE FMLDR_BGF_UNLOCKED_CALL CASE FMLDR_HP2_UNLOCKED_CALL CASE FMLDR_HPF_UNLOCKED_CALL PRINT_HELP("FXR_NX_MIS_WAIT") SET_BIT(iBS, FAA_BS_PRINTED_DL_PLEASE_WAIT) BREAK ENDSWITCH ENDIF ENDIF IF NOT IS_BIT_SET(iBS, FAA_BS_PRINTED_CONTINUE_STORY_HELP) IF NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_MISSION) OR NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_MISSION) OR NOT HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_MISSION) OR IS_FIXER_STORY_ON_COOLDOWN(TRUE) SET_BIT(iBS, FAA_BS_PRINTED_CONTINUE_STORY_HELP) EXIT ENDIF IF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_DATA_LEAK_SELECTION IF HAS_PLAYER_COMPLETED_FIXER_STORY_AS_LEADER(PLAYER_ID()) //We have finished the story. IF NOT HAS_PLAYER_COMPLETED_FIXER_STRAND(PLAYER_ID(), FS_FIRE_IN_THE_BOOTH) PRINT_HELP("FXRAP_FIN_WAIT3") ELIF NOT HAS_PLAYER_COMPLETED_FIXER_STRAND(PLAYER_ID(), FS_FINALE) PRINT_HELP("FXRAP_FIN_WAIT5") ENDIF SET_BIT(iBS, FAA_BS_PRINTED_CONTINUE_STORY_HELP) ELSE //We have finished the three data leaks. Show appropriate help IF NOT HAS_LOCAL_PLAYER_VIEWED_FIXER_HQ_POST_DATALEAK_CUTSCENE() PRINT_HELP("FXR_AP_FIN_WAIT") ELIF NOT HAS_PLAYER_COMPLETED_FIXER_STRAND(PLAYER_ID(), FS_FIRE_IN_THE_BOOTH) IF IS_BIT_SET(g_sFixerFlow.Bitset, ciFIXER_FLOW_BITSET__FIRE_IN_BOOTH_READY_CALL_DONE) PRINT_HELP("FXRAP_FIN_WAIT3") ELSE PRINT_HELP("FXRAP_FIN_WAIT2") ENDIF ELIF NOT HAS_PLAYER_COMPLETED_FIXER_STRAND(PLAYER_ID(), FS_FINALE) IF IS_BIT_SET(g_sFixerFlow.Bitset, ciFIXER_FLOW_BITSET__FINALE_READY_CALL_DONE) PRINT_HELP("FXRAP_FIN_WAIT5") ELSE PRINT_HELP("FXRAP_FIN_WAIT4") ENDIF ENDIF SET_BIT(iBS, FAA_BS_PRINTED_CONTINUE_STORY_HELP) ENDIF ENDIF ENDIF ENDPROC PROC SET_HELP_TO_DISPLAY_AFTER_DIALOGUE(STRING sHelp) sTutTextAfterDialogue = sHelp PRINTLN(DEBUG_INTERNET, " SET_HELP_TO_DISPLAY_AFTER_DIALOGUE - Text label: ", sTutTextAfterDialogue) ENDPROC FUNC BOOL HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_FRANKLIN_DIALOGUE_0) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_FRANKLIN_DIALOGUE_1) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_FRANKLIN_DIALOGUE_2) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_SETUP) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_STRAND) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_PARTY) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_PARTY_2) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_PARTY_F) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_BILL) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_BILL_2) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_BILL_F) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_HOOD) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_HOOD_2) AND GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_HOOD_F) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_BS_IMANI_D_APP_SETUP_2) RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC FIXER_APP_SELECT_DIALOGUE_TUTORIAL() BOOL bStartNewDialogue IF NOT IS_BIT_SET(iBS, FAA_BS_CURRENTLY_PLAYING_TUTORIAL) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_HOME AND NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_FRANKLIN_DIALOGUE_0) //Main intro bStartNewDialogue = TRUE iTutorialHelpTime = 28500 iDialogueRequestID = F_APP_D_INTRO SET_HELP_TO_DISPLAY_AFTER_DIALOGUE("FIX_VIP_TUT1") SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_FRANKLIN_DIALOGUE_0, TRUE) ELIF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_SECURITY_CONTRACT_SELECTION AND NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_FRANKLIN_DIALOGUE_1) //Security contracts explanation bStartNewDialogue = TRUE iTutorialHelpTime = 30000 iDialogueRequestID = F_APP_D_SEC_CON SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_FRANKLIN_DIALOGUE_1, TRUE) ELIF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_SECURITY_CONTRACT_SELECTION AND NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_FRANKLIN_DIALOGUE_2) //Security contracts explanation part 2 bStartNewDialogue = TRUE iTutorialHelpTime = 18500 iDialogueRequestID = F_APP_D_SEC_CON2 IF g_sMPTunables.bFIXER_ENABLE_SF_BILLBOARDS SET_BIT(iBS, FAA_BS_TRIGGER_BONUS_BILLBOARD_DIALOGUE) ELSE SET_HELP_TO_DISPLAY_AFTER_DIALOGUE("FIX_VIP_TUT2") ENDIF SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_FRANKLIN_DIALOGUE_2, TRUE) ELIF IS_BIT_SET(iBS, FAA_BS_TRIGGER_BONUS_BILLBOARD_DIALOGUE) //Security contracts explanation part 3 bStartNewDialogue = TRUE iTutorialHelpTime = 12000 iDialogueRequestID = F_APP_D_SEC_CON3 SET_HELP_TO_DISPLAY_AFTER_DIALOGUE("FIX_VIP_TUT2") CLEAR_BIT(iBS, FAA_BS_TRIGGER_BONUS_BILLBOARD_DIALOGUE) ELIF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_HOME AND HAS_LOCAL_PLAYER_VIEWED_FIXER_HQ_POST_SETUP_CUTSCENE() AND NOT (GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_SETUP) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_BS_IMANI_D_APP_SETUP_2)) IF HAS_LOCAL_PLAYER_UNLOCKED_FIXER_STORY() AND HAS_LOCAL_PLAYER_COMPLETED_FIXER_INTRO_MISSION() IF HAS_LOCAL_PLAYER_COMPLETED_FIXER_SETUP_MISSION() SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_SETUP, TRUE) SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_BS_IMANI_D_APP_SETUP_2, TRUE) ELSE IF NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_SETUP) //Imani - Setup mision description bStartNewDialogue = TRUE iTutorialHelpTime = 25000 iDialogueRequestID = F_APP_D_SETUP SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_SETUP, TRUE) ELIF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_BS_IMANI_D_APP_SETUP_2) //Imani - Setup mision description part 2 bStartNewDialogue = TRUE iTutorialHelpTime = 11300 iDialogueRequestID = F_APP_D_SETUP_2 SET_HELP_TO_DISPLAY_AFTER_DIALOGUE("FIX_VIP_TUT3") SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_BS_IMANI_D_APP_SETUP_2, TRUE) ENDIF ENDIF ENDIF ELIF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_DATA_LEAK_SELECTION AND NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_STRAND) //Imani - Select strand first intro bStartNewDialogue = TRUE iTutorialHelpTime = 17250 iDialogueRequestID = F_APP_D_SELECT_LEAK SET_HELP_TO_DISPLAY_AFTER_DIALOGUE("FIX_VIP_TUT4") SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_STRAND, TRUE) ELIF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_DATA_LEAK_SELECTION AND GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) = FS_PARTY_PROMOTER AND NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_PARTY) //Imani - Party promoter strand intro bStartNewDialogue = TRUE iTutorialHelpTime = 11000 iDialogueRequestID = F_APP_D_PARTY_P_INT SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_PARTY, TRUE) ELIF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_DATA_LEAK_SELECTION AND GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) = FS_BILLIONAIRE_GAMES AND NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_BILL) // Billionaire games strand intro - Imani bStartNewDialogue = TRUE iTutorialHelpTime = 13000 iDialogueRequestID = F_APP_D_BILL_G_INT SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_BILL, TRUE) ELIF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_DATA_LEAK_SELECTION AND GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) = FS_HOOD_PASS AND NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_HOOD) // Hood pass strand intro - Imani bStartNewDialogue = TRUE iTutorialHelpTime = 11000 iDialogueRequestID = F_APP_D_HOOD_P_INT SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_HOOD, TRUE) ELIF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_DATA_LEAK_SELECTION AND GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) = FS_PARTY_PROMOTER AND eSelectedDataLeakStrand = FS_PARTY_PROMOTER IF iSelectedDataLeakInStrand = 1 IF NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_PARTY_2) AND HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_1) //Imani - Party promoter mission 2 intro bStartNewDialogue = TRUE iTutorialHelpTime = 29600 iDialogueRequestID = F_APP_D_PARTY_P_M2 SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_PARTY_2, TRUE) ENDIF ELIF iSelectedDataLeakInStrand = 2 IF NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_PARTY_F) AND HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_2) //Imani - Party promoter finale intro bStartNewDialogue = TRUE iTutorialHelpTime = 6000 iDialogueRequestID = F_APP_D_PARTY_P_F SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_PARTY_F, TRUE) ENDIF ENDIF ELIF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_DATA_LEAK_SELECTION AND GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) = FS_HOOD_PASS AND eSelectedDataLeakStrand = FS_HOOD_PASS IF iSelectedDataLeakInStrand = 1 IF NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_HOOD_2) AND HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_1) //Imani - Hood pass mission 2 intro bStartNewDialogue = TRUE iTutorialHelpTime = 9500 iDialogueRequestID = F_APP_D_HOOD_P_M2 SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_HOOD_2, TRUE) ENDIF ELIF iSelectedDataLeakInStrand = 2 IF NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_HOOD_F) AND HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_2) //Imani - Hood Pass finale intro bStartNewDialogue = TRUE iTutorialHelpTime = 7250 iDialogueRequestID = F_APP_D_HOOD_P_F SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_HOOD_F, TRUE) ENDIF ENDIF ELIF FIXER_APP_GET_APP_CURRENT_PAGE() = FAA_PAGE_DATA_LEAK_SELECTION AND GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) = FS_BILLIONAIRE_GAMES AND eSelectedDataLeakStrand = FS_BILLIONAIRE_GAMES IF iSelectedDataLeakInStrand = 1 IF NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_BILL_2) AND HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_1) //Imani - Billionaire games mission 2 intro bStartNewDialogue = TRUE iTutorialHelpTime = 29000 iDialogueRequestID = F_APP_D_BILL_G_M2 SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_BILL_2, TRUE) ENDIF ELIF iSelectedDataLeakInStrand = 2 IF NOT GET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_BILL_F) AND HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_2) //Imani - Billionaire games finale intro bStartNewDialogue = TRUE iTutorialHelpTime = 4250 iDialogueRequestID = F_APP_D_BILL_G_F SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BS_IMANI_D_APP_BILL_F, TRUE) ENDIF ENDIF ENDIF ENDIF IF bStartNewDialogue SET_BIT(iBS, FAA_BS_CURRENTLY_PLAYING_TUTORIAL) PRINTLN(" FIXER_APP_SELECT_DIALOGUE_TUTORIAL Running tutorial for: ", iTutorialHelpTime, " seconds. Tutorial ID: ", iDialogueRequestID) ELIF IS_BIT_SET(iBS, FAA_BS_CURRENTLY_PLAYING_TUTORIAL) IF NOT HAS_NET_TIMER_STARTED(stTutorialTimer) START_NET_TIMER(stTutorialTimer) PRINTLN(" FIXER_APP_SELECT_DIALOGUE_TUTORIAL Starting timer time: ", iTutorialHelpTime, " Tutorial ID: ", iDialogueRequestID) ELIF HAS_NET_TIMER_EXPIRED(stTutorialTimer, iTutorialHelpTime) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() CLEAR_BIT(iBS, FAA_BS_CURRENTLY_PLAYING_TUTORIAL) iDialoguePlayingID = -1 iTutorialHelpTime = 0 RESET_NET_TIMER(stTutorialTimer) SHOW_SPEAKER_ICON(FALSE) PRINTLN(" FIXER_APP_SELECT_DIALOGUE_TUTORIAL Starting timer expired time: ", iTutorialHelpTime, " Tutorial ID: ", iDialogueRequestID) //Once all the tutorial are complete we no longer need this function IF HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, FAA_BS_DIALOGUE_TUTORIAL_COMPLETE) SET_BIT(iBS, FAA_BS_DIALOGUE_TUTORIAL_COMPLETE_THIS_BOOT) ENDIF ENDIF ENDIF ENDPROC PROC FIXER_APP_SETUP_TUTORIAL_DIALOGUE() IF HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, FAA_BS_DIALOGUE_TUTORIAL_COMPLETE) ELSE SET_USE_DLC_DIALOGUE(TRUE) PRINTLN(" FIXER_APP_SETUP_TUTORIAL_DIALOGUE peds added for dialogue") ENDIF ENDPROC #IF IS_DEBUG_BUILD PROC DEBUG_PRINT_FIXER_FLOW_STATE() PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_UNLOCKED_FIXER_STORY = ", HAS_LOCAL_PLAYER_UNLOCKED_FIXER_STORY()) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_COMPLETED_FIXER_INTRO_MISSION = ", HAS_LOCAL_PLAYER_COMPLETED_FIXER_INTRO_MISSION()) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_COMPLETED_FIXER_SETUP_MISSION = ", HAS_LOCAL_PLAYER_COMPLETED_FIXER_SETUP_MISSION()) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_PLAYER_STARTED_FIXER_STORY_INVESTIGATIONS = ", HAS_PLAYER_STARTED_FIXER_STORY_INVESTIGATIONS(PLAYER_ID())) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_VIEWED_FIXER_HQ_POST_SETUP_CUTSCENE = ", HAS_LOCAL_PLAYER_VIEWED_FIXER_HQ_POST_SETUP_CUTSCENE()) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_PLAYER_STARTED_A_STRAND_OR_COMPLETED_FIXER_STORY = ", HAS_PLAYER_STARTED_A_STRAND_OR_COMPLETED_FIXER_STORY()) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - ciFIXER_FLOW_BITSET2__INVESTIGATIONS_CALL_DONE = ", IS_BIT_SET(g_sFixerFlow.Bitset2, ciFIXER_FLOW_BITSET2__INVESTIGATIONS_CALL_DONE)) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - ciFIXER_FLOW_BITSET2__FRANKLIN_GOLF_COURSE_CALL_DONE = ", IS_BIT_SET(g_sFixerFlow.Bitset2, ciFIXER_FLOW_BITSET2__FRANKLIN_GOLF_COURSE_CALL_DONE)) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - ciFIXER_FLOW_BITSET2__FRANKLIN_MEET_IMANI_CALL_DONE = ", IS_BIT_SET(g_sFixerFlow.Bitset2, ciFIXER_FLOW_BITSET2__FRANKLIN_MEET_IMANI_CALL_DONE)) PRINTLN("") PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE) = ", GET_LOCAL_PLAYER_CURRENT_FIXER_STRAND(TRUE)) IF IS_FIXER_MISSION_LAUNCH_DISABLED() PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - IS_FIXER_MISSION_LAUNCH_DISABLED() ", FIXER_MISSION_LAUNCH_DISABLE_REASON_TO_STRING(g_eFixerDisableMissionLaunchReason)) ELSE PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - IS_FIXER_MISSION_LAUNCH_DISABLED() = FALSE") ENDIF PRINTLN("") PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION - FSM_PARTY_PROMOTER_INVESTIGATION_1 = ", HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_1)) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION - FSM_PARTY_PROMOTER_INVESTIGATION_2 = ", HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_INVESTIGATION_2)) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION - FSM_PARTY_PROMOTER_MISSION = ", HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_PARTY_PROMOTER_MISSION)) PRINTLN("") PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION - FSM_BILLIONAIRE_GAMES_INVESTIGATION_1 = ", HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_1)) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION - FSM_BILLIONAIRE_GAMES_INVESTIGATION_2 = ", HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_INVESTIGATION_2)) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION - FSM_BILLIONAIRE_GAMES_MISSION = ", HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_BILLIONAIRE_GAMES_MISSION)) PRINTLN("") PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION - FSM_HOOD_PASS_INVESTIGATION_1 = ", HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_1)) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION - FSM_HOOD_PASS_INVESTIGATION_2 = ", HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_INVESTIGATION_2)) PRINTLN(" DEBUG_PRINT_FIXER_FLOW_STATE - HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION - FSM_HOOD_PASS_MISSION = ", HAS_LOCAL_PLAYER_COMPLETED_FIXER_STORY_MISSION(FSM_HOOD_PASS_MISSION)) PRINTLN("") ENDPROC #ENDIF PROC SCRIPT_INITALISE() // pregame cleanup RUN_CLEANUP_CHECKS() IF HAS_FORCE_CLEANUP_OCCURRED() OR MPGlobalsAmbience.bRunningFmIntroCut IF MPGlobalsAmbience.bRunningFmIntroCut PRINTLN(" bRunningFmIntroCut is true so cleaning up!") ENDIF PRINTLN(" DEFAULT CLEANUP") SCRIPT_CLEANUP() ENDIF mov = REQUEST_SCALEFORM_MOVIE("FIXER_APP") WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(mov)) HIDE_CASH_HUD_IN_APP() WAIT(0) ENDWHILE HANG_UP_AND_PUT_AWAY_PHONE(TRUE) DISABLE_CELLPHONE(TRUE) HIDE_CASH_HUD_IN_APP() Pause_Objective_Text() THEFEED_PAUSE() //Grab the current property eThisFixerHQ = eThisFixerHQ // Fixing release compiler error eThisFixerHQ = GET_FIXER_HQ_ID_FROM_SIMPLE_INTERIOR_ID(GET_SIMPLE_INTERIOR_PLAYER_IS_IN(PLAYER_ID())) SEND_ALL_DATA_TO_SCALEFORM() FIXER_APP_PLAY_INPUT_SOUND(FAA_IS_BOOT) FIXER_APP_SETUP_TUTORIAL_DIALOGUE() IF IS_PC_VERSION() SET_MULTIHEAD_SAFE(TRUE, TRUE, TRUE, TRUE) ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("DLC_Fixer_Office_Room_Use_PC_Scene") START_AUDIO_SCENE("DLC_Fixer_Office_Room_Use_PC_Scene") ENDIF g_bFHQAppOpen = TRUE #IF IS_DEBUG_BUILD DEBUG_PRINT_FIXER_FLOW_STATE() #ENDIF #IF FEATURE_GEN9_EXCLUSIVE SET_MP_BOOL_CHARACTER_STAT(MP_STAT_DARKNETACCESSED, TRUE) #ENDIF ENDPROC #IF IS_DEBUG_BUILD PROC CREATE_WIDGETS() START_WIDGET_GROUP("appFixerSecurity") ADD_BIT_FIELD_WIDGET("iBS", iBS) STOP_WIDGET_GROUP() ENDPROC #ENDIF //***********SCRIPT*********** SCRIPT PRINTLN(" started \"", GET_THIS_SCRIPT_NAME(), "\"") IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY("appFixerSecurity")) > 1 PRINTLN(" Fixer HQ app script already running! cleaning up.") SCRIPT_CLEANUP() ENDIF NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME() SCRIPT_INITALISE() PRINTLN(" Initalisation complete. Fixer HQ = ", eThisFixerHQ) WAIT(0) CLEAR_HELP() #IF IS_DEBUG_BUILD CREATE_WIDGETS() #ENDIF /// main update loop WHILE g_bFHQAppOpen RUN_CLEANUP_CHECKS() RENDER_FIXER_APP() PASS_INPUTS_TO_SCALEFORM() FIXER_APP_RUN_HELP_TUTORIAL() IF NOT IS_BIT_SET(iBS, FAA_BS_DIALOGUE_TUTORIAL_COMPLETE) FIXER_APP_SELECT_DIALOGUE_TUTORIAL() FIXER_APP_RUN_TUTORIAL_DIALOGUE() ENDIF IF NOT IS_BIT_SET(iBS, FAA_BS_FADE_TO_EXIT) CHECK_BUTTON_PRESS() MAINTAIN_ROLLOVER_FUNCTIONALITY() MAINTAIN_SECURITY_CONTRACT_COOLDOWN_EXPIRATION() ELIF IS_BIT_SET(iBS, FAA_BS_FADE_TO_EXIT) IF IS_SCREEN_FADED_OUT() FIXER_LAUNCH_VIP_SETUP_MISSION() ELIF NOT IS_SCREEN_FADING_OUT() DO_SCREEN_FADE_OUT(500) ENDIF ENDIF WAIT(0) ENDWHILE // Script should never reach here. Always terminate with cleanup function. CASSERTLN(DEBUG_INTERNET, " \"", GET_THIS_SCRIPT_NAME(), "\" should never reach here. Always terminate with cleanup function.") #ENDIF ENDSCRIPT