1082 lines
39 KiB
Python
Executable File
1082 lines
39 KiB
Python
Executable File
///// appCovertOps
|
|
///// Mark Richardson - 27/03/17
|
|
///// Covert Ops WVM mission launching functionality
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
|
|
USING "cellphone_public.sch"
|
|
USING "commands_zone.sch"
|
|
USING "menu_public.sch"
|
|
USING "svm_mission_flow.sch"
|
|
|
|
//***********Script CONSTS***********
|
|
|
|
//Local BS consts
|
|
CONST_INT WVM_BS_WAITING_FOR_BUTTON_RETURN_VALUE 0
|
|
CONST_INT WVM_BS_OVERLAY_SCREEN_ACTIVE 1
|
|
CONST_INT WVM_BS_MISSION_IMAGES_DOWNLOADED 2
|
|
CONST_INT WVM_BS_DIALOGUE_TUTORIAL_COMPLETE 3
|
|
CONST_INT WVM_BS_CURRENTLY_PLAYING_TUTORIAL 4
|
|
CONST_INT WVM_BS_FIRST_MISSION_UNLOCKED 5
|
|
CONST_INT WVM_BS_HELP_TEXT_DONE_THIS_BOOT 6
|
|
CONST_INT WVM_BS_ALL_MISSIONS_UNLOCKED 7
|
|
|
|
CONST_INT ciINPUT_KEYBOARD_DOWN 300
|
|
CONST_INT ciINPUT_KEYBOARD_UP 301
|
|
|
|
//Enum for button indexes returned by SF
|
|
ENUM WVM_BUTTON_INDEXES
|
|
BUTTON_LOGIN = 100,
|
|
BUTTON_OVERLAY_ACCEPT = 101,
|
|
BUTTON_OVERLAY_CANCEL = 102,
|
|
|
|
//SVM mission buttons
|
|
BUTTON_WVM_1 = 0,
|
|
BUTTON_WVM_2 = 1,
|
|
BUTTON_WVM_3 = 2,
|
|
BUTTON_WVM_4 = 3,
|
|
BUTTON_WVM_5 = 4,
|
|
BUTTON_WVM_6 = 5,
|
|
BUTTON_WVM_7 = 6,
|
|
BUTTON_WVM_8 = 7
|
|
ENDENUM
|
|
|
|
//Enum for the current page ID
|
|
ENUM WVM_PAGE_ID
|
|
PAGE_LOGIN = 0,
|
|
PAGE_HOME
|
|
ENDENUM
|
|
|
|
ENUM WVM_APP_STAGE_ID
|
|
WVM_STAGE_IDLE = 0,
|
|
|
|
//Overlay on screen stages
|
|
WVM_STAGE_CONFIRM_WVM_LAUNCH //Confirm the launch of a setup mission
|
|
|
|
ENDENUM
|
|
|
|
//***********Script variables***********
|
|
|
|
INT iBS = 0
|
|
INT iWVMToLaunch = -1
|
|
INT iTutorialHelpTime = 0
|
|
INT iTutorialDialogueID = -1
|
|
INT iMissionsCompleted = 0
|
|
STRING sMissionLanuchFailReason = ""
|
|
|
|
//Mission downloaded data
|
|
FMMC_PLANNING_MISSION_HEADER_DESCRIPTIONS sWVMDescriptions
|
|
|
|
WVM_PAGE_ID eCurrentPage = PAGE_LOGIN
|
|
WVM_APP_STAGE_ID eCurrentStage = WVM_STAGE_IDLE
|
|
|
|
SCRIPT_TIMER stDescriptionLoadTO
|
|
SCRIPT_TIMER stTutorialTimer
|
|
|
|
structPedsForConversation tutPedStruct
|
|
|
|
//The Scaleform movie
|
|
SCALEFORM_INDEX mov
|
|
SCALEFORM_RETURN_INDEX currentSelectionReturnIndex
|
|
SCALEFORM_RETURN_INDEX currentPageReturnIndex
|
|
|
|
//Control input variables
|
|
INT iLeftX
|
|
INT iLeftY
|
|
INT iRightX
|
|
INT iRightY
|
|
|
|
//***********Script functions***********
|
|
PROC SCRIPT_CLEANUP(BOOL bCleanupPlayerControl = FALSE, BOOL bDontCleanupBrowserFlag = FALSE)
|
|
|
|
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov)
|
|
|
|
SET_BROWSER_OPEN(bDontCleanupBrowserFlag)
|
|
|
|
DISABLE_CELLPHONE(FALSE)
|
|
|
|
Unpause_Objective_Text()
|
|
|
|
SET_AUDIO_SCRIPT_CLEANUP_TIME(1000)
|
|
PLAY_SOUND_FRONTEND(-1, "Logout", "DLC_GR_MOC_Computer_Sounds")
|
|
|
|
IF IS_PC_VERSION()
|
|
SET_MULTIHEAD_SAFE(FALSE, TRUE, TRUE, TRUE)
|
|
ENDIF
|
|
|
|
IF bCleanupPlayerControl
|
|
NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
ENDIF
|
|
|
|
THEFEED_RESUME()
|
|
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
FUNC STRING COVERT_OPS_GET_APP_STAGE_DEBUG_NAME(WVM_APP_STAGE_ID eStage)
|
|
SWITCH eStage
|
|
CASE WVM_STAGE_IDLE RETURN "WVM_STAGE_IDLE"
|
|
CASE WVM_STAGE_CONFIRM_WVM_LAUNCH RETURN "WVM_STAGE_CONFIRM_WVM_LAUNCH"
|
|
ENDSWITCH
|
|
|
|
RETURN "****Invalid****"
|
|
ENDFUNC
|
|
#ENDIF
|
|
|
|
/// PURPOSE:
|
|
/// Returns the current app stage
|
|
FUNC WVM_APP_STAGE_ID COVERT_OPS_GET_APP_STAGE()
|
|
RETURN eCurrentStage
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Sets the current app stage
|
|
PROC COVERT_OPS_SET_APP_STAGE(WVM_APP_STAGE_ID eNewStage)
|
|
IF eCurrentStage != eNewStage
|
|
eCurrentStage = eNewStage
|
|
PRINTLN("<APP_CO> COVERT_OPS_SET_APP_STAGE Setting new stage to: ", COVERT_OPS_GET_APP_STAGE_DEBUG_NAME(eNewStage))
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Returns if the overlay screen is currently active
|
|
FUNC BOOL COVERT_OPS_IS_OVERLAY_OPEN()
|
|
RETURN IS_BIT_SET(iBS, WVM_BS_OVERLAY_SCREEN_ACTIVE)
|
|
ENDFUNC
|
|
|
|
PROC COVERT_OPS_SET_MISSION_LAUNCH_FAIL_REASON(STRING sReason)
|
|
sMissionLanuchFailReason = sReason
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN("<APP_CO> COVERT_OPS_SET_MISSION_LAUNCH_FAIL_REASON Setting new fail reason: ", GET_FILENAME_FOR_AUDIO_CONVERSATION(sReason))
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
FUNC INT GET_REORDERED_WVM_MISSION_ID(INT iMissionID)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
IF GET_COMMANDLINE_PARAM_EXISTS("sc_GR_FLOW_PLAY_WVM_ORDER")
|
|
|
|
SWITCH iMissionID
|
|
CASE ciWVM_FLOW_MISSION_WVM_DUNE3 RETURN ciWVM_FLOW_MISSION_WVM_HALFTRACK
|
|
CASE ciWVM_FLOW_MISSION_WVM_HALFTRACK RETURN ciWVM_FLOW_MISSION_WVM_OPPRESSOR_1
|
|
CASE ciWVM_FLOW_MISSION_WVM_TRAILERSMALL RETURN ciWVM_FLOW_MISSION_WVM_APC
|
|
CASE ciWVM_FLOW_MISSION_WVM_APC RETURN ciWVM_FLOW_MISSION_WVM_TRAILERSMALL
|
|
CASE ciWVM_FLOW_MISSION_WVM_TRAILERLARGE RETURN ciWVM_FLOW_MISSION_WVM_OPPRESSOR_2
|
|
CASE ciWVM_FLOW_MISSION_WVM_TAMPA RETURN ciWVM_FLOW_MISSION_WVM_DUNE3
|
|
CASE ciWVM_FLOW_MISSION_WVM_OPPRESSOR_1 RETURN ciWVM_FLOW_MISSION_WVM_TAMPA
|
|
CASE ciWVM_FLOW_MISSION_WVM_OPPRESSOR_2 RETURN ciWVM_FLOW_MISSION_WVM_TRAILERLARGE
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
|
|
#ENDIF
|
|
|
|
RETURN iMissionID
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Sets the current app stage
|
|
PROC COVERT_OPS_SET_MISSION_TO_LAUNCH(INT iMissionID)
|
|
IF iWVMToLaunch != GET_REORDERED_WVM_MISSION_ID(iMissionID)
|
|
iWVMToLaunch = GET_REORDERED_WVM_MISSION_ID(iMissionID)
|
|
PRINTLN("<APP_CO> COVERT_OPS_SET_MISSION_TO_LAUNCH Setting new mission to: ", iWVMToLaunch)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC COVERT_OPS_CLEAR_MISSION_LAUNCH_FAIL_REASON()
|
|
sMissionLanuchFailReason = ""
|
|
PRINTLN("<APP_CO> COVERT_OPS_CLEAR_MISSION_LAUNCH_FAIL_REASON called.")
|
|
ENDPROC
|
|
|
|
FUNC STRING COVERT_OPS_GET_MISSION_LAUNCH_FAIL_REASON()
|
|
RETURN sMissionLanuchFailReason
|
|
ENDFUNC
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
FUNC BOOL SHOULD_WVM_MISSION_BE_AUTO_UNLOCKED(INT iMissionID)
|
|
|
|
IF NOT GET_COMMANDLINE_PARAM_EXISTS("sc_GUNRUNFlowPlayVariations")
|
|
AND NOT GET_COMMANDLINE_PARAM_EXISTS("sc_GUNRUNUnlockMobileOps")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
SWITCH iMissionID
|
|
CASE ciWVM_FLOW_MISSION_WVM_DUNE3 RETURN TRUE
|
|
CASE ciWVM_FLOW_MISSION_WVM_HALFTRACK RETURN TRUE
|
|
CASE ciWVM_FLOW_MISSION_WVM_TRAILERSMALL RETURN TRUE
|
|
CASE ciWVM_FLOW_MISSION_WVM_APC RETURN TRUE
|
|
CASE ciWVM_FLOW_MISSION_WVM_TRAILERLARGE RETURN TRUE
|
|
CASE ciWVM_FLOW_MISSION_WVM_TAMPA RETURN TRUE
|
|
CASE ciWVM_FLOW_MISSION_WVM_OPPRESSOR_1 RETURN TRUE
|
|
CASE ciWVM_FLOW_MISSION_WVM_OPPRESSOR_2 RETURN TRUE
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
#ENDIF
|
|
|
|
FUNC BOOL HAS_LOCAL_PLAYER_UNLOCKED_WVM_MISSION(INT iMissionID)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF SHOULD_WVM_MISSION_BE_AUTO_UNLOCKED(iMissionID)
|
|
RETURN TRUE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN (iMissionsCompleted >= GET_WVM_UNLOCK_VALUE(iMissionID))
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Sets the mission unavailable value
|
|
FUNC BOOL CAN_PLAYER_LAUNCH_MISSION(INT iWVMissionToLaunch)
|
|
// // Check that mission is available
|
|
// IF NOT GB_IS_BOSS_MISSION_AVAILABLE(PLAYER_ID(), iMissionToLaunch, FALSE)
|
|
// CPRINTLN(DEBUG_INTERNET, "<APP_CO>CAN_PLAYER_LAUNCH_MISSION: NOPE! mission unavailable")
|
|
// COVERT_OPS_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R6")
|
|
// RETURN FALSE
|
|
// ENDIF
|
|
|
|
// IF NOT GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID())
|
|
// CPRINTLN(DEBUG_INTERNET, "<APP_CO> CAN_PLAYER_LAUNCH_MISSION: NOPE! GB_IS_PLAYER_BOSS_OF_A_GANG is false")
|
|
// COVERT_OPS_SET_MISSION_LAUNCH_FAIL_REASON("DBG_BUN_NB")
|
|
// RETURN FALSE
|
|
// ENDIF
|
|
|
|
IF iWVMissionToLaunch < 0
|
|
OR iWVMissionToLaunch >= ciWVM_FLOW_MISSION_MAX
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO> CAN_PLAYER_LAUNCH_MISSION: NOPE! mission to launch is invalid: ", iWVMissionToLaunch)
|
|
COVERT_OPS_SET_MISSION_LAUNCH_FAIL_REASON("SVM_MIS_FL")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT HAS_LOCAL_PLAYER_UNLOCKED_WVM_MISSION(iWVMissionToLaunch)
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO> CAN_PLAYER_LAUNCH_MISSION: NOPE! mission not unlocked: ", iWVMissionToLaunch)
|
|
COVERT_OPS_SET_MISSION_LAUNCH_FAIL_REASON("WVM_MIS_FNA")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// Check we're not taking part in some other mission
|
|
IF GB_IS_PLAYER_CRITICAL_TO_JOB(PLAYER_ID())
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO> CAN_PLAYER_LAUNCH_MISSION: NOPE! player critical to job")
|
|
COVERT_OPS_SET_MISSION_LAUNCH_FAIL_REASON("WVM_MIS_FL2")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NETWORK_IS_ACTIVITY_SESSION()
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO> CAN_PLAYER_LAUNCH_MISSION: NOPE! NETWORK_IS_ACTIVITY_SESSION is true")
|
|
COVERT_OPS_SET_MISSION_LAUNCH_FAIL_REASON("SVM_MIS_FL")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF iWVMissionToLaunch = ciWVM_FLOW_MISSION_WVM_OPPRESSOR_2 //Fail this mission is not available until you've completed ciWVM_FLOW_MISSION_WVM_OPPRESSOR_1
|
|
AND NOT WVM_IS_SPECIAL_VEHICLE_UNLOCKED(ciWVM_FLOW_MISSION_WVM_OPPRESSOR_1)
|
|
#IF IS_DEBUG_BUILD
|
|
AND NOT SHOULD_WVM_MISSION_BE_AUTO_UNLOCKED(iWVMissionToLaunch)
|
|
#ENDIF
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO> CAN_PLAYER_LAUNCH_MISSION: NOPE! we have not completed ciWVM_FLOW_MISSION_WVM_OPPRESSOR_1. Launch mission = ", iWVMissionToLaunch)
|
|
COVERT_OPS_SET_MISSION_LAUNCH_FAIL_REASON("WVM_MIS_FDB")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
PROC HIDE_OVERLAY()
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "HIDE_OVERLAY")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
COVERT_OPS_SET_APP_STAGE(WVM_STAGE_IDLE)
|
|
CLEAR_BIT(iBS, WVM_BS_OVERLAY_SCREEN_ACTIVE)
|
|
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> HIDE_OVERLAY")
|
|
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 RENDER_COVERT_OPS_APP()
|
|
|
|
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()
|
|
|
|
IF g_bInMultiplayer
|
|
SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_MP_CASH)//1544427
|
|
SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_MP_MESSAGE)
|
|
SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE)
|
|
SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH)
|
|
ENDIF
|
|
|
|
THEFEED_HIDE_THIS_FRAME()
|
|
|
|
ENABLE_CONTROL_ACTION(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 PASS_INPUTS_TO_SCALEFORM()
|
|
|
|
// bCursorInputProcessed = FALSE
|
|
|
|
ENABLE_CONTROL_ACTION(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
|
|
|
|
ENABLE_CONTROL_ACTION(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
|
|
|
|
IF IS_USING_CURSOR(FRONTEND_CONTROL)
|
|
ENABLE_CONTROL_ACTION(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(ciINPUT_KEYBOARD_UP)))
|
|
ENDIF
|
|
|
|
ENABLE_CONTROL_ACTION(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(ciINPUT_KEYBOARD_DOWN)))
|
|
ENDIF
|
|
|
|
IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN)
|
|
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_RELEASE_EVENT", TO_FLOAT(ENUM_TO_INT(ciINPUT_KEYBOARD_DOWN)))
|
|
ENDIF
|
|
|
|
IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_UP)
|
|
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_RELEASE_EVENT", TO_FLOAT(ENUM_TO_INT(ciINPUT_KEYBOARD_UP)))
|
|
ENDIF
|
|
ELSE
|
|
ENABLE_CONTROL_ACTION(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)))
|
|
// bCursorInputProcessed = TRUE
|
|
ENDIF
|
|
|
|
ENABLE_CONTROL_ACTION(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)))
|
|
//bCursorInputProcessed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENABLE_CONTROL_ACTION(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
|
|
ENABLE_CONTROL_ACTION(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
|
|
ENABLE_CONTROL_ACTION(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
|
|
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
|
|
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_CANCEL)))
|
|
IF eCurrentPage = PAGE_LOGIN
|
|
OR eCurrentPage = PAGE_HOME
|
|
IF NOT COVERT_OPS_IS_OVERLAY_OPEN()
|
|
SCRIPT_CLEANUP(TRUE)
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> [APP_CLOSE] 2 Back pressed not closing the app. page: ", eCurrentPage, " overlay: ", COVERT_OPS_IS_OVERLAY_OPEN())
|
|
ENDIF
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> [APP_CLOSE] Back pressed not closing the app. page: ", eCurrentPage, " overlay: ", COVERT_OPS_IS_OVERLAY_OPEN())
|
|
ENDIF
|
|
|
|
IF COVERT_OPS_IS_OVERLAY_OPEN()
|
|
PLAY_SOUND_FRONTEND(-1, "Select_Mission_Cancel", "DLC_GR_MOC_Computer_Sounds")
|
|
HIDE_OVERLAY()
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENABLE_CONTROL_ACTION(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
|
|
ENABLE_CONTROL_ACTION(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_CURSOR(FRONTEND_CONTROL)
|
|
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))
|
|
|
|
//bCursorInputProcessed = TRUE
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
ENABLE_CONTROL_ACTION(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
|
|
|
|
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL)
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL)
|
|
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_CANCEL)))
|
|
|
|
IF eCurrentPage = PAGE_LOGIN
|
|
OR eCurrentPage = PAGE_HOME
|
|
IF NOT COVERT_OPS_IS_OVERLAY_OPEN()
|
|
SCRIPT_CLEANUP(TRUE)
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> [APP_CLOSE] 2 Back pressed not closing the app. page: ", eCurrentPage, " overlay: ", COVERT_OPS_IS_OVERLAY_OPEN())
|
|
ENDIF
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> [APP_CLOSE] Back pressed not closing the app. page: ", eCurrentPage, " overlay: ", COVERT_OPS_IS_OVERLAY_OPEN())
|
|
ENDIF
|
|
|
|
IF COVERT_OPS_IS_OVERLAY_OPEN()
|
|
PLAY_SOUND_FRONTEND(-1, "Select_Mission_Cancel", "DLC_GR_MOC_Computer_Sounds")
|
|
HIDE_OVERLAY()
|
|
ENDIF
|
|
ENDIf
|
|
|
|
ELSE
|
|
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_X)
|
|
ENABLE_CONTROL_ACTION(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()
|
|
|
|
// bCursorInputProcessed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_X)
|
|
ENABLE_CONTROL_ACTION(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))
|
|
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()
|
|
|
|
// IF NOT bUsingScrollWheel
|
|
// bCursorInputProcessed = TRUE
|
|
// ENDIF
|
|
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)
|
|
CPRINTLN(DEBUG_INTERNET,"<APP_CO> EXITING WEBSITE for Triangle press")
|
|
SCRIPT_CLEANUP(TRUE)
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
|
|
SCRIPT_CLEANUP(TRUE)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL GET_DESCRIPTION_FOR_WVM(INT iMissionDecHash)
|
|
BOOL bDescriptionReady = TRUE
|
|
CACHED_MISSION_DESCRIPTION_LOAD_VARS sMissionDescLoadVars
|
|
|
|
IF iMissionDecHash != 0
|
|
WHILE NOT REQUEST_AND_LOAD_CACHED_DESCRIPTION_FOR_HEIST(iMissionDecHash, sMissionDescLoadVars)
|
|
PRINTLN("<APP_CO> DOWNLOAD_PLANNING_MISSION_HEADER_DATA - GET_DESCRIPTION_FOR_WVM - IS_HEIST_DESCRIPTION_READY - Waiting on sub HASH: ", iMissionDecHash)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
IF NOT sMissionDescLoadVars.bSucess
|
|
bDescriptionReady = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bDescriptionReady
|
|
PRINTLN("<APP_CO> [BDEC] * DOWNLOAD_PLANNING_MISSION_HEADER_DATA - GET_DESCRIPTION_FOR_WVM - All description strings are available; beginning dump: ")
|
|
STRING sText
|
|
INT iStartCharacterIndex, iStringLengthInCharacters, iArrayIndex, i
|
|
BOOL bFinishedCopying
|
|
|
|
//Clear the previously saved data
|
|
REPEAT FMMC_NUM_LABELS_FOR_DESCRIPTION i
|
|
sWVMDescriptions.tl63MissionDecription[i] = ""
|
|
ENDREPEAT
|
|
|
|
//Get the cached description:
|
|
sText = UGC_GET_CACHED_DESCRIPTION_WITH_NO_TRANSLATION_CHECK(iMissionDecHash, INVITE_MAX_DESCRIPTION_LENGTH)
|
|
iStringLengthInCharacters = GET_LENGTH_OF_LITERAL_STRING(sText)
|
|
PRINTLN("<APP_CO> [BDEC] DOWNLOAD_PLANNING_MISSION_HEADER_DATA - GET_DESCRIPTION_FOR_PLANNING_MISSION_HEADER_DATA - [", sText, "] - iStringLengthInCharacters = ", iStringLengthInCharacters)
|
|
//Copy this string into chunks using a byte limit
|
|
WHILE NOT bFinishedCopying
|
|
//If we've got to the end of the string then we're done
|
|
IF iStartCharacterIndex >= iStringLengthInCharacters
|
|
PRINTLN("<APP_CO> [BDEC] DOWNLOAD_PLANNING_MISSION_HEADER_DATA - GET_DESCRIPTION_FOR_PLANNING_MISSION_HEADER_DATA - IS_HEIST_DESCRIPTION_READY = ", sWVMDescriptions.tl63MissionDecription[0], sWVMDescriptions.tl63MissionDecription[1], sWVMDescriptions.tl63MissionDecription[2], sWVMDescriptions.tl63MissionDecription[3],
|
|
sWVMDescriptions.tl63MissionDecription[4], sWVMDescriptions.tl63MissionDecription[5], sWVMDescriptions.tl63MissionDecription[6], sWVMDescriptions.tl63MissionDecription[7])
|
|
bFinishedCopying = TRUE
|
|
ELSE
|
|
//If we're over the array size then we done
|
|
IF iArrayIndex >= FMMC_NUM_LABELS_FOR_DESCRIPTION
|
|
PRINTLN("<APP_CO> bFinishedCopying (iArrayIndex >= FMMC_NUM_LABELS_FOR_DESCRIPTION)")
|
|
bFinishedCopying = TRUE
|
|
ELSE
|
|
//Get the next chunk
|
|
sWVMDescriptions.tl63MissionDecription[iArrayIndex] = GET_CHARACTER_FROM_AUDIO_CONVERSATION_FILENAME_WITH_BYTE_LIMIT(sText, iStartCharacterIndex, iStringLengthInCharacters, 63)
|
|
//Print
|
|
PRINTLN("<APP_CO> [BDEC]DOWNLOAD_PLANNING_MISSION_HEADER_DATA - GET_DESCRIPTION_FOR_PLANNING_MISSION_HEADER_DATA - g_HeistPrePlanningClient.sPlanningData.sMissionData.tl63MissionDecription[", iArrayIndex, "] = ", sWVMDescriptions.tl63MissionDecription[iArrayIndex])
|
|
//Get the length of the chunk that we've just grabbed so we can move start position
|
|
iStartCharacterIndex += GET_LENGTH_OF_LITERAL_STRING(sWVMDescriptions.tl63MissionDecription[iArrayIndex])
|
|
PRINTLN("iStartCharacterIndex is now ", iStartCharacterIndex)
|
|
//Move to the next array
|
|
iArrayIndex++
|
|
PRINTLN("<APP_CO> iArrayIndex is now ", iArrayIndex)
|
|
ENDIF
|
|
ENDIF
|
|
ENDWHILE
|
|
ENDIF
|
|
|
|
RETURN bDescriptionReady
|
|
ENDFUNC
|
|
|
|
PROC SEND_WVM_MISSION_DATA_TO_SCALEFORM(INT iMissionID)
|
|
|
|
iMissionsCompleted = GET_BIKER_RESUPPLY_COMPLETE_TOTAL_FOR_FACTORY(GET_ACTIVE_CHARACTER_SLOT(), BUNKER_SAVE_SLOT)
|
|
|
|
INT i
|
|
INT iArrayPos = SVM_FLOW_GET_NEXT_AVAILABLE_MISSION_CONTENT_ARRAY_POS(GET_REORDERED_WVM_MISSION_ID(iMissionID), ciFLOW_MISSION_TYPE_WVM)
|
|
INT iMissionUnlockCount = GET_WVM_UNLOCK_VALUE(iMissionID)
|
|
BOOL bMissionUnlocked = (iMissionsCompleted >= iMissionUnlockCount)
|
|
STRING sTextureHandle = TEXT_LABEL_TO_STRING(g_txtWVMThumbnails[GET_REORDERED_WVM_MISSION_ID(iMissionID)])
|
|
FLOAT fMissionRPMultiplier = 0.0
|
|
FLOAT fMissionCashMultiplier = 0.0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF SHOULD_WVM_MISSION_BE_AUTO_UNLOCKED(iMissionID)
|
|
bMissionUnlocked = TRUE
|
|
iMissionUnlockCount = 0
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF bMissionUnlocked
|
|
IF iMissionID = ciWVM_FLOW_MISSION_WVM_APC
|
|
PRINTLN("<APP_BUNKER> SEND_WVM_MISSION_DATA_TO_SCALEFORM First mission unlocked. Using auto unlock param? ", SHOULD_WVM_MISSION_BE_AUTO_UNLOCKED(iMissionID))
|
|
SET_BIT(iBS, WVM_BS_FIRST_MISSION_UNLOCKED)
|
|
ENDIF
|
|
|
|
iMissionUnlockCount = 0
|
|
|
|
IF iMissionID = ciWVM_FLOW_MISSION_WVM_OPPRESSOR_2
|
|
IF NOT WVM_IS_SPECIAL_VEHICLE_UNLOCKED(ciWVM_FLOW_MISSION_WVM_OPPRESSOR_1)
|
|
#IF IS_DEBUG_BUILD
|
|
AND NOT SHOULD_WVM_MISSION_BE_AUTO_UNLOCKED(iMissionID)
|
|
#ENDIF
|
|
iMissionUnlockCount = -1
|
|
bMissionUnlocked = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
CLEAR_BIT(iBS, WVM_BS_ALL_MISSIONS_UNLOCKED)
|
|
ENDIF
|
|
|
|
//If we have a valid mision request the description
|
|
IF iArrayPos != -1
|
|
IF NOT IS_CLOUD_DOWN_CLOUD_LOADER()
|
|
WHILE NOT GET_DESCRIPTION_FOR_WVM(g_FMMC_ROCKSTAR_CREATED.sMissionHeaderVars[iArrayPos].iMissionDecHash)
|
|
|
|
IF NOT HAS_NET_TIMER_STARTED(stDescriptionLoadTO)
|
|
START_NET_TIMER(stDescriptionLoadTO)
|
|
ELIF HAS_NET_TIMER_EXPIRED(stDescriptionLoadTO, 750)
|
|
iArrayPos = -1
|
|
CASSERTLN(DEBUG_INTERNET, "<APP_CO> SEND_WVM_MISSION_DATA_TO_SCALEFORM Description failed to load! using fallback")
|
|
BREAKLOOP
|
|
ENDIF
|
|
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> SEND_WVM_MISSION_DATA_TO_SCALEFORM waiting on descriptions to load using GET_DESCRIPTION_FOR_WVM")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
RESET_NET_TIMER(stDescriptionLoadTO)
|
|
|
|
IF iArrayPos != -1
|
|
GET_XP_MULTIPLIER_AND_CASH_MULTIPLIER_BASED_ON_MISSION_TYPE(fMissionRPMultiplier, fMissionCashMultiplier, FMMC_TYPE_MISSION, FMMC_TYPE_MISSION_CONTACT, DEFAULT, DEFAULT, GET_HASH_KEY(g_FMMC_ROCKSTAR_CREATED.sMissionHeaderVars[iArrayPos].tlName))
|
|
ENDIF
|
|
|
|
IF fMissionRPMultiplier = 1.0
|
|
fMissionRPMultiplier = 0.0
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> SEND_WVM_MISSION_DATA_TO_SCALEFORM Mission RP multiplier set to: ", fMissionRPMultiplier)
|
|
ENDIF
|
|
IF fMissionCashMultiplier = 1.0
|
|
fMissionCashMultiplier = 0.0
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> SEND_WVM_MISSION_DATA_TO_SCALEFORM Mission cash multiplier set to: ", fMissionCashMultiplier)
|
|
ENDIF
|
|
ELSE
|
|
iArrayPos = -1
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> SEND_WVM_MISSION_DATA_TO_SCALEFORM cloud down. Using fallback")
|
|
ENDIF
|
|
ELSE
|
|
CASSERTLN(DEBUG_INTERNET, "<APP_CO> SEND_WVM_MISSION_DATA_TO_SCALEFORM Description failed to load because iArrayPos is -1")
|
|
ENDIF
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_MISSION")
|
|
// Mission ID
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iMissionID)
|
|
|
|
IF iArrayPos != -1
|
|
// Mission name
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(g_FMMC_ROCKSTAR_CREATED.sMissionHeaderVars[iArrayPos].tlMissionName)
|
|
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("FMMC_OFFLN_HD")
|
|
//Add the text description for the mission grabbed above
|
|
REPEAT FMMC_NUM_LABELS_FOR_DESCRIPTION i
|
|
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(sWVMDescriptions.tl63MissionDecription[i])
|
|
ENDREPEAT
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
ELSE
|
|
//Fallback on the old descriptions
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
|
|
ENDIF
|
|
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sTextureHandle) // TXD
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iMissionUnlockCount) // Unlock count
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bMissionUnlocked) // Enabled
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(FLOOR(fMissionCashMultiplier)) // Cash bonus
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(FLOOR(fMissionRPMultiplier)) // RP bonus
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDPROC
|
|
|
|
PROC SEND_INITIAL_DATA_TO_SCALEFORM()
|
|
|
|
INT i
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_PLAYER_DATA")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(GET_PLAYER_NAME(PLAYER_ID())) // Local players name
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
//Base data
|
|
REPEAT ciWVM_FLOW_MISSION_MAX i
|
|
SEND_WVM_MISSION_DATA_TO_SCALEFORM(i)
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
////////////////////////////////////////////
|
|
/// Scaleform methods
|
|
|
|
PROC SHOW_OVERLAY(STRING sTitle, STRING sMessage, STRING sAcceptButtonLabel, STRING sCancelButtonLabel, INT iadditionalINT = -1, WVM_APP_STAGE_ID eNewAppStage = WVM_STAGE_IDLE)
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_OVERLAY")
|
|
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTitle)
|
|
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sMessage)
|
|
IF iadditionalINT != -1
|
|
ADD_TEXT_COMPONENT_INTEGER(iadditionalINT)
|
|
ENDIF
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sAcceptButtonLabel)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sCancelButtonLabel)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
SET_BIT(iBS, WVM_BS_OVERLAY_SCREEN_ACTIVE)
|
|
COVERT_OPS_SET_APP_STAGE(eNewAppStage)
|
|
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> SHOW_OVERLAY with message: ", sMessage, " Accebt button: ", sAcceptButtonLabel, " Cancel button: ", sCancelButtonLabel)
|
|
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, WVM_BS_WAITING_FOR_BUTTON_RETURN_VALUE)
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_SELECTION")
|
|
currentSelectionReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_SCREEN_ID")
|
|
currentPageReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE()
|
|
|
|
SET_BIT(iBS, WVM_BS_WAITING_FOR_BUTTON_RETURN_VALUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
FUNC STRING DEBUG_GET_BUTTON_NAME(WVM_BUTTON_INDEXES eButton)
|
|
SWITCH eButton
|
|
CASE BUTTON_LOGIN RETURN "BUTTON_LOGIN"
|
|
CASE BUTTON_OVERLAY_CANCEL RETURN "BUTTON_OVERLAY_CANCEL"
|
|
CASE BUTTON_OVERLAY_ACCEPT RETURN "BUTTON_OVERLAY_ACCEPT"
|
|
CASE BUTTON_WVM_1 RETURN "BUTTON_WVM_1"
|
|
CASE BUTTON_WVM_2 RETURN "BUTTON_WVM_2"
|
|
CASE BUTTON_WVM_3 RETURN "BUTTON_WVM_3"
|
|
CASE BUTTON_WVM_4 RETURN "BUTTON_WVM_4"
|
|
CASE BUTTON_WVM_5 RETURN "BUTTON_WVM_5"
|
|
CASE BUTTON_WVM_6 RETURN "BUTTON_WVM_6"
|
|
CASE BUTTON_WVM_7 RETURN "BUTTON_WVM_7"
|
|
ENDSWITCH
|
|
|
|
RETURN "***INVALID***"
|
|
ENDFUNC
|
|
#ENDIF
|
|
|
|
/// PURPOSE:
|
|
/// Checks if we can launch a sell mission and sets up the overlay screen with the necessary text
|
|
PROC RUN_INITIAL_WVM_MISSION_CHECKS(INT iMissionID)
|
|
|
|
IF NOT CAN_PLAYER_LAUNCH_MISSION(iMissionID) //FAIL: Not available
|
|
SHOW_OVERLAY("WVM_MIS_TI", COVERT_OPS_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "")
|
|
PLAY_SOUND_FRONTEND(-1, "Select_Mission_Unavailable", "DLC_GR_MOC_Computer_Sounds")
|
|
ELSE
|
|
COVERT_OPS_SET_MISSION_TO_LAUNCH(iMissionID)
|
|
SHOW_OVERLAY("WVM_MIS_TI", "SVM_MIS_L", "WHOUSE_CONF", "WHOUSE_CANC", DEFAULT, WVM_STAGE_CONFIRM_WVM_LAUNCH)
|
|
PLAY_SOUND_FRONTEND(-1, "Select_Mission_Are_You_Sure", "DLC_GR_MOC_Computer_Sounds")
|
|
ENDIF
|
|
|
|
COVERT_OPS_CLEAR_MISSION_LAUNCH_FAIL_REASON()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Handles the player pressing confirm on the overlay screen
|
|
PROC HANDLE_ACCEPT_OVERLAY_PRESS()
|
|
|
|
SWITCH COVERT_OPS_GET_APP_STAGE()
|
|
CASE WVM_STAGE_CONFIRM_WVM_LAUNCH
|
|
PLAY_SOUND_FRONTEND(-1, "Select_Mission_Launch", "DLC_GR_MOC_Computer_Sounds")
|
|
SVM_FLOW_LAUNCH_NEXT_AVAILABLE_MISSION(g_sTransitionSessionData.ciCam, iWVMToLaunch, ciFLOW_MISSION_TYPE_WVM)
|
|
SCRIPT_CLEANUP()
|
|
BREAK
|
|
|
|
CASE WVM_STAGE_IDLE
|
|
PLAY_SOUND_FRONTEND(-1, "Select_Mission_Unavailable_OK", "DLC_GR_MOC_Computer_Sounds")
|
|
//Do Nothing
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
HIDE_OVERLAY()
|
|
ENDPROC
|
|
|
|
PROC CHECK_BUTTON_PRESS()
|
|
MAINTAIN_CHECKS_FOR_CURRENT_SELECTION_ID()
|
|
|
|
IF IS_BIT_SET(iBS, WVM_BS_WAITING_FOR_BUTTON_RETURN_VALUE)
|
|
IF IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentSelectionReturnIndex)
|
|
AND IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentPageReturnIndex)
|
|
WVM_BUTTON_INDEXES eButtonPressed = INT_TO_ENUM(WVM_BUTTON_INDEXES, GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentSelectionReturnIndex))
|
|
WVM_PAGE_ID ePage = INT_TO_ENUM(WVM_PAGE_ID, GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentPageReturnIndex))
|
|
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> CHECK_BUTTON_PRESS button press returned = ", DEBUG_GET_BUTTON_NAME(eButtonPressed), " ID: ", eButtonPressed, " current page: ", ePage)
|
|
|
|
SWITCH eButtonPressed
|
|
CASE BUTTON_OVERLAY_CANCEL
|
|
PLAY_SOUND_FRONTEND(-1, "Select_Mission_Cancel", "DLC_GR_MOC_Computer_Sounds")
|
|
HIDE_OVERLAY()
|
|
BREAK
|
|
CASE BUTTON_OVERLAY_ACCEPT
|
|
HANDLE_ACCEPT_OVERLAY_PRESS()
|
|
BREAK
|
|
|
|
CASE BUTTON_WVM_1
|
|
CASE BUTTON_WVM_2
|
|
CASE BUTTON_WVM_3
|
|
CASE BUTTON_WVM_4
|
|
CASE BUTTON_WVM_5
|
|
CASE BUTTON_WVM_6
|
|
CASE BUTTON_WVM_7
|
|
CASE BUTTON_WVM_8
|
|
RUN_INITIAL_WVM_MISSION_CHECKS(ENUM_TO_INT(eButtonPressed))
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
eCurrentPage = ePage
|
|
|
|
CLEAR_BIT(iBS, WVM_BS_WAITING_FOR_BUTTON_RETURN_VALUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
/// Dialogue tutorials
|
|
|
|
FUNC BOOL HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED()
|
|
IF (GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_CO_TRUCK_TUT_1) OR IS_BIT_SET(iBS, WVM_BS_FIRST_MISSION_UNLOCKED))
|
|
AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_CO_TRUCK_TUT_2)
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO_TUT> HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED TRUE")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO_TUT> HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED FALSE")
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC STRING CO_TUT_GET_ROOT_LABEL(INT iTutorialID)
|
|
SWITCH iTutorialID
|
|
CASE 0 RETURN "GNRC_WVMPCT1" //No unlocked missions
|
|
CASE 1 RETURN "GNRC_WVMPCT2" //First mission unlocked
|
|
ENDSWITCH
|
|
|
|
CASSERTLN(DEBUG_SAFEHOUSE, "CO_TUT_GET_ROOT_LABEL: Invalid tutorial ID: ", iTutorialID)
|
|
RETURN "GNRC_WVMPCT1"
|
|
ENDFUNC
|
|
|
|
PROC CO_START_TUTORIAL_DIALOGUE(INT iTutorialID)
|
|
IF CREATE_CONVERSATION(tutPedStruct, "GNRCAUD", CO_TUT_GET_ROOT_LABEL(iTutorialID), CONV_PRIORITY_HIGH)
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO> Created tutorial converstion: ", iTutorialID)
|
|
iTutorialDialogueID = -1
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CO_RUN_TUTORIAL_DIALOGUE()
|
|
//Start the dialogue
|
|
IF iTutorialDialogueID != -1
|
|
CO_START_TUTORIAL_DIALOGUE(iTutorialDialogueID)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL HAVE_ALL_HELP_TEXT_TUTORIALS_BEEN_DONE()
|
|
IF GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_MO_TUT_1)
|
|
AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_MO_TUT_2)
|
|
AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_MO_TUT_3)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC INCREMENT_TIMES_HELP_MESSAGE_HAS_DISPLAYED()
|
|
IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_MO_TUT_1)
|
|
SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_MO_TUT_1, TRUE)
|
|
ELIF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_MO_TUT_2)
|
|
SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_MO_TUT_2, TRUE)
|
|
ELSE
|
|
SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_MO_TUT_3, TRUE)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC RUN_HELP_TEXT_TUTORIAL()
|
|
IF NOT IS_BIT_SET(iBS, WVM_BS_ALL_MISSIONS_UNLOCKED)
|
|
AND NOT IS_BIT_SET(iBS, WVM_BS_HELP_TEXT_DONE_THIS_BOOT)
|
|
AND eCurrentPage = PAGE_HOME
|
|
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT HAVE_ALL_HELP_TEXT_TUTORIALS_BEEN_DONE()
|
|
|
|
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
PRINT_HELP("WVM_LAUNCH_TUT", 9000)
|
|
SET_BIT(iBS, WVM_BS_HELP_TEXT_DONE_THIS_BOOT)
|
|
INCREMENT_TIMES_HELP_MESSAGE_HAS_DISPLAYED()
|
|
ENDIF
|
|
|
|
ELSE
|
|
SET_BIT(iBS, WVM_BS_HELP_TEXT_DONE_THIS_BOOT)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CO_SELECT_APP_DIALOGUE_TUTORIAL()
|
|
|
|
BOOL bStartNewDialogue
|
|
|
|
IF NOT IS_BIT_SET(iBS, WVM_BS_CURRENTLY_PLAYING_TUTORIAL)
|
|
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
AND eCurrentPage = PAGE_HOME
|
|
IF NOT IS_BIT_SET(iBS, WVM_BS_FIRST_MISSION_UNLOCKED)
|
|
|
|
IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_CO_TRUCK_TUT_1)
|
|
//No missions unlocked
|
|
bStartNewDialogue = TRUE
|
|
iTutorialHelpTime = 9000
|
|
iTutorialDialogueID = 0
|
|
SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_CO_TRUCK_TUT_1, TRUE)
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_CO_TRUCK_TUT_2)
|
|
//Missions unlocked
|
|
bStartNewDialogue = TRUE
|
|
iTutorialHelpTime = 9000
|
|
iTutorialDialogueID = 1
|
|
SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_CO_TRUCK_TUT_2, TRUE)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bStartNewDialogue
|
|
SET_BIT(iBS, WVM_BS_CURRENTLY_PLAYING_TUTORIAL)
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO_TUT> CO_SELECT_APP_DIALOGUE_TUTORIAL Running tutorial for: ", iTutorialHelpTime, " seconds. Tutorial ID: ", iTutorialDialogueID)
|
|
ELIF IS_BIT_SET(iBS, WVM_BS_CURRENTLY_PLAYING_TUTORIAL)
|
|
IF NOT HAS_NET_TIMER_STARTED(stTutorialTimer)
|
|
START_NET_TIMER(stTutorialTimer)
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO_TUT> CO_SELECT_APP_DIALOGUE_TUTORIAL Starting timer time: ", iTutorialHelpTime, " Tutorial ID: ", iTutorialDialogueID)
|
|
ELIF HAS_NET_TIMER_EXPIRED(stTutorialTimer, iTutorialHelpTime)
|
|
CLEAR_BIT(iBS, WVM_BS_CURRENTLY_PLAYING_TUTORIAL)
|
|
iTutorialHelpTime = 0
|
|
RESET_NET_TIMER(stTutorialTimer)
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO_TUT> CO_SELECT_APP_DIALOGUE_TUTORIAL Starting timer expired time: ", iTutorialHelpTime, " Tutorial ID: ", iTutorialDialogueID)
|
|
|
|
//Once all the tutorial are complete we no longer need this function
|
|
IF HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED()
|
|
SET_BIT(iBS, WVM_BS_DIALOGUE_TUTORIAL_COMPLETE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC CO_SETUP_TUTORIAL_DIALOGUE()
|
|
IF HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED()
|
|
SET_BIT(iBS, WVM_BS_DIALOGUE_TUTORIAL_COMPLETE)
|
|
ELSE
|
|
SET_USE_DLC_DIALOGUE(TRUE)
|
|
|
|
ADD_PED_FOR_DIALOGUE(tutPedStruct, 2, NULL, "AGENT14")
|
|
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_CO> CO_SETUP_TUTORIAL_DIALOGUE ped added for dialogue")
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Check for any flags that mean this script should terminate
|
|
PROC RUN_CLEANUP_CHECKS()
|
|
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> Shutting down! No network game is currently active")
|
|
SCRIPT_CLEANUP()
|
|
ELIF IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> Shutting down! Player is injured or dead")
|
|
SCRIPT_CLEANUP()
|
|
ELIF IS_PAUSE_MENU_ACTIVE_EX()
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> Shutting down! Pause menu active")
|
|
SCRIPT_CLEANUP(TRUE)
|
|
ELIF NOT IS_PLAYER_IN_ANY_SIMPLE_INTERIOR(PLAYER_ID())
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> Shutting down! Player is no longer in a simple interior")
|
|
SCRIPT_CLEANUP()
|
|
ELIF IS_PLAYER_WALKING_IN_OR_OUT_OF_SIMPLE_INTERIOR(PLAYER_ID())
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> Shutting down! Pause is transitioning in or out of a simple interior")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SCRIPT_INITALISE()
|
|
RUN_CLEANUP_CHECKS()
|
|
|
|
mov = REQUEST_SCALEFORM_MOVIE("COVERT_OPS")
|
|
|
|
WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(mov))
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
SET_BIT(iBS, WVM_BS_ALL_MISSIONS_UNLOCKED)
|
|
HANG_UP_AND_PUT_AWAY_PHONE(TRUE)
|
|
DISABLE_CELLPHONE(TRUE)
|
|
|
|
Pause_Objective_Text()
|
|
THEFEED_PAUSE()
|
|
|
|
SET_BROWSER_OPEN(TRUE)
|
|
|
|
NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
// Default cleanup
|
|
IF HAS_FORCE_CLEANUP_OCCURRED()
|
|
OR MPGlobalsAmbience.bRunningFmIntroCut
|
|
IF MPGlobalsAmbience.bRunningFmIntroCut
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> bRunningFmIntroCut is true so cleaning up!")
|
|
ENDIF
|
|
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> DEFAULT CLEANUP")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
SET_BROWSER_OPEN(TRUE)
|
|
|
|
SEND_INITIAL_DATA_TO_SCALEFORM()
|
|
CO_SETUP_TUTORIAL_DIALOGUE()
|
|
|
|
IF IS_PC_VERSION()
|
|
SET_MULTIHEAD_SAFE(TRUE, TRUE, TRUE, TRUE)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//FEATURE_GUNRUNNING
|
|
|
|
//***********SCRIPT***********
|
|
SCRIPT
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> started \"", GET_THIS_SCRIPT_NAME(), "\"")
|
|
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY("appCovertOps")) > 1
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> bunker business script already running! cleaning up.")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
SCRIPT_INITALISE()
|
|
CDEBUG1LN(DEBUG_INTERNET, "<APP_CO> SCRIPT_INITALISE done!")
|
|
|
|
/// main update loop
|
|
WHILE IS_BROWSER_OPEN()
|
|
RUN_CLEANUP_CHECKS()
|
|
|
|
RENDER_COVERT_OPS_APP()
|
|
PASS_INPUTS_TO_SCALEFORM()
|
|
CHECK_BUTTON_PRESS()
|
|
|
|
IF NOT IS_BIT_SET(iBS, WVM_BS_DIALOGUE_TUTORIAL_COMPLETE)
|
|
CO_SELECT_APP_DIALOGUE_TUTORIAL()
|
|
CO_RUN_TUTORIAL_DIALOGUE()
|
|
ELSE
|
|
RUN_HELP_TEXT_TUTORIAL()
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
// Script should never reach here. Always terminate with cleanup function.
|
|
CASSERTLN(DEBUG_INTERNET, "<APP_CO> \"", GET_THIS_SCRIPT_NAME(), "\" should never reach here. Always terminate with cleanup function.")
|
|
ENDSCRIPT
|