///// appBusinessHub ///// Mark Richardson - 26/04/2018 ///// Hacker truck app functionality ///// Scaleform documentation: https://hub.rockstargames.com/pages/viewpage.action?spaceKey=RSGGTAV&title=Hacker+Truck+Desktop+App USING "rage_builtins.sch" USING "globals.sch" USING "cellphone_public.sch" USING "commands_zone.sch" USING "menu_public.sch" USING "net_realty_hangar.sch" USING "net_gang_boss.sch" USING "net_simple_interior.sch" //***********Script CONSTS*********** //Local BS consts CONST_INT NC_BS_OVERLAY_SCREEN_ACTIVE 0 CONST_INT NC_BS_LAUNCHED_MISSION 1 CONST_INT NC_BS_PRINTED_PAUSE_MENU_ACTIVE 2 CONST_INT NC_BS_WAITING_FOR_BUTTON_RETURN_VALUE 3 CONST_INT NC_BS_JOB_OVERLAY_ACTIVE 4 CONST_INT NC_BS_JOB_OVERLAY_SELECTED_SHIPMENT_SIZE 5 CONST_INT NC_BS_SPECIAL_ITEM_ACTIVE 6 CONST_INT NC_BS_IE_COOLDOWN_RUNNING 7 CONST_INT NC_BS_CURRENTLY_PLAYING_TUTORIAL 8 CONST_INT NC_BS_DIALOGUE_TUTORIAL_COMPLETE 9 CONST_INT NC_BS_INITIAL_TUTORIAL_COMPLETE 10 CONST_INT NC_BS_INITIAL_TUTORIAL_COMPLETE_THIS_BOOT 11 CONST_INT NC_BS_DONE_BUSINESS_PURCHASE_TUT_THIS_BOOT 12 CONST_INT ciINPUT_KEYBOARD_DOWN 300 CONST_INT ciINPUT_KEYBOARD_UP 301 CONST_INT ciTYPE_FORMAT_HIDDEN 0 CONST_INT ciTYPE_FORMAT_CURRENCY 1 CONST_INT ciTYPE_FORMAT_TIME 2 CONST_INT MAX_WORKS_JOBS 6 //Enum for button indexes returned by SF ENUM BH_BUTTON_INDEXES BUTTON_OVERLAY_CANCEL = 0, BUTTON_OVERLAY_ACCEPT, BUTTON_LOGIN, BUTTON_HACKER_WORKS_MISSION, BUTTON_AIR_FREIGHT_MISSION, BUTTON_SPECIAL_CARGO_MISSION, BUTTON_VEHICLE_CARGO_MISSION, BUTTON_GUNRUNNING_MISSION, BUTTON_DRUG_BUSINESS_MISSION, BUTTON_JOB1, BUTTON_JOB2, BUTTON_JOB3, BUTTON_JOB4, BUTTON_JOB5, BUTTON_JOB6, BUTTON_JOB7, BUTTON_JOB8, BUTTON_JOB9 ENDENUM //Enum for the current page ID ENUM BH_PAGE_ID PAGE_LOGIN = 0, PAGE_HOME ENDENUM ENUM NC_APP_STAGE_ID NCA_STAGE_IDLE = 0, //Overlay on screen stages NCA_STAGE_CONFIRM_HACKER_WORKS_MISSION_LAUNCH, //Confirm the launch of a hacker works mission NCA_STAGE_CONFIRM_AIR_FREIGHT_MISSION_LAUNCH, //Confirm the launch of a hangar air freight mission NCA_STAGE_CONFIRM_SPECIAL_CARGO_MISSION_LAUNCH, //Confirm the launch of a special cargo mission NCA_STAGE_CONFIRM_VEHICLE_CARGO_MISSION_LAUNCH, //Confirm the launch of a vehicle cargo mission NCA_STAGE_CONFIRM_GUNRUNNING_MISSION_LAUNCH, //Confirm the launch of a gunrunning missionn NCA_STAGE_CONFIRM_DRUG_BUSINESS_MISSION_LAUNCH //Confirm the launch of a biker business mission ENDENUM ENUM NC_MISSION_TYPE NC_BOSS_WORK, NC_AIR_FREIGHT, NC_SPECIAL_CARGO, NC_VEHICLE_CARGO, NC_WEAPONS_CARGO, NC_DRUG_CARGO, NC_COUNT ENDENUM ENUM NC_TT_JOB_NA_REASON NC_TT_NONE = 0, //No reason to block the launch NC_TT_JOB_GENERIC, //No specific reason NC_TT_ON_CD_PRIMARY, //The cooldown is active after just completing this mission NC_TT_ON_CD_GLOBAL, //The coolodown is active after completing another mission NC_TT_NEED_DRONE, //You need to purchase the drone NC_TT_NO_JOB_GANG, //The job is not available due to a gang member being too close NC_TT_NO_JOB_NON_GANG, //The job is not available due to another being too close NC_TT_INSUFFICIENT_GOONS, //The job is not available due to a lack of gang menbers NC_TT_IN_HUB, //The hacker truck is in the hub //Biker NC_TT_NOT_SETUP, //You need to setup your biker business NC_TT_SUPPLIES_FULL, //You do not need supplies NC_TT_SUSPENDED_PROD, //You have suspended production NC_TT_BOUGHT_SUPPLIES, //You have already bought supplies //Smuggler NC_TT_SMUG_CD, //Air freight mission on cooldown NC_TT_SMUG_FULL, //The Hangar is full //Special Cargo NC_TT_SC_FULL, //The warehouse is full NC_TT_SC_ON_CD //The cooldown timer is active ENDENUM CONST_INT ciMAX_JOB_SLOTS 9 //***********Script variables*********** INT iBS = 0 INT iMissionIDToLaunch = -1 INT iSelectedMissionSubVar = -1 INT iJobUpdateStaggeredLoop = 0 //Staggered loop var to prevent updating all jobs in one frame INT iTutorialHelpTime = 0 INT iTutorialDialogueID = -1 STRING sMissionLanuchFailReason = "" BH_PAGE_ID eCurrentPage = PAGE_LOGIN NC_APP_STAGE_ID eCurrentStage = NCA_STAGE_IDLE NC_MISSION_TYPE eCurrentMissionType = NC_BOSS_WORK structPedsForConversation tutPedStruct NC_TT_JOB_NA_REASON eToolTipReason[ciMAX_JOB_SLOTS] //Special cargo tracking variables INT iSelectedSCWarehouse = ciW_Invalid CONTRABAND_SIZE eSelectedShipmentSize = CONTRABAND_SMALL CONTRABAND_TYPE eActiveContrabandType = CONTRABAND_TYPE_INVALID //Hangar mission tracking variables eSMUGGLED_GOODS_TYPE eSelectedHangarGoodsType //Biker business tracking variable FACTORY_ID eSelectedFactory //The Scaleform movie SCALEFORM_INDEX mov SCALEFORM_RETURN_INDEX currentSelectionReturnIndex //Control input variables INT iLeftX INT iLeftY INT iRightX INT iRightY SCRIPT_TIMER stUpdateCDTimer SCRIPT_TIMER stUpdateLockReasonsTimer SCRIPT_TIMER stLoginAnimation SCRIPT_TIMER stTutorialTimer //***********Script functions*********** PROC SCRIPT_CLEANUP(BOOL bDontCleanupBrowserFlag = FALSE, BOOL bPlayExitSound = TRUE) SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov) SET_BROWSER_OPEN(bDontCleanupBrowserFlag) DISABLE_CELLPHONE(FALSE) Unpause_Objective_Text() SET_AUDIO_SCRIPT_CLEANUP_TIME(1000) IF bPlayExitSound PLAY_SOUND_FRONTEND(-1, "Logout", "DLC_GR_MOC_Computer_Sounds") ENDIF IF IS_PC_VERSION() SET_MULTIHEAD_SAFE(FALSE, TRUE, TRUE, TRUE) ENDIF THEFEED_RESUME() IF IS_AUDIO_SCENE_ACTIVE("GTAO_Computer_Screen_Active_Scene") STOP_AUDIO_SCENE("GTAO_Computer_Screen_Active_Scene") ENDIF CLEAR_BIT(g_SimpleInteriorData.iForthBS, BS4_SIMPLE_INTERIOR_NC_DRAW_MISSIONS_SCREEN) TERMINATE_THIS_THREAD() ENDPROC PROC PLAY_CLICK_LINK_SOUND() PLAY_SOUND_FRONTEND(-1, "Select_Mission_Are_You_Sure", "DLC_GR_MOC_Computer_Sounds") ENDPROC PROC PLAY_CLICK_LINK_FAIL_SOUND() PLAY_SOUND_FRONTEND(-1, "Select_Mission_Unavailable", "DLC_GR_MOC_Computer_Sounds") ENDPROC #IF IS_DEBUG_BUILD FUNC STRING DEBUG_GET_BUTTON_NAME(BH_BUTTON_INDEXES eButton) SWITCH eButton CASE BUTTON_OVERLAY_CANCEL RETURN "BUTTON_OVERLAY_CANCEL" CASE BUTTON_OVERLAY_ACCEPT RETURN "BUTTON_OVERLAY_ACCEPT" CASE BUTTON_LOGIN RETURN "BUTTON_LOGIN" CASE BUTTON_HACKER_WORKS_MISSION RETURN "BUTTON_HACKER_WORKS_MISSION" CASE BUTTON_AIR_FREIGHT_MISSION RETURN "BUTTON_AIR_FREIGHT_MISSION" CASE BUTTON_SPECIAL_CARGO_MISSION RETURN "BUTTON_SPECIAL_CARGO_MISSION" CASE BUTTON_VEHICLE_CARGO_MISSION RETURN "BUTTON_VEHICLE_CARGO_MISSION" CASE BUTTON_GUNRUNNING_MISSION RETURN "BUTTON_GUNRUNNING_MISSION" CASE BUTTON_DRUG_BUSINESS_MISSION RETURN "BUTTON_DRUG_BUSINESS_MISSION" CASE BUTTON_JOB1 RETURN "BUTTON_JOB1" CASE BUTTON_JOB2 RETURN "BUTTON_JOB2" CASE BUTTON_JOB3 RETURN "BUTTON_JOB3" CASE BUTTON_JOB4 RETURN "BUTTON_JOB4" CASE BUTTON_JOB5 RETURN "BUTTON_JOB5" CASE BUTTON_JOB6 RETURN "BUTTON_JOB6" CASE BUTTON_JOB7 RETURN "BUTTON_JOB7" CASE BUTTON_JOB8 RETURN "BUTTON_JOB8" CASE BUTTON_JOB9 RETURN "BUTTON_JOB9" ENDSWITCH RETURN "***INVALID***" ENDFUNC FUNC STRING DEBUG_GET_PAGE_NAME(BH_PAGE_ID ePage) SWITCH ePage CASE PAGE_HOME RETURN "PAGE_HOME" CASE PAGE_LOGIN RETURN "PAGE_LOGIN" ENDSWITCH RETURN "***INVALID***" ENDFUNC FUNC STRING NC_APP_GET_APP_STAGE_DEBUG_NAME(NC_APP_STAGE_ID eStage) SWITCH eStage CASE NCA_STAGE_IDLE RETURN "NCA_STAGE_IDLE" CASE NCA_STAGE_CONFIRM_HACKER_WORKS_MISSION_LAUNCH RETURN "NCA_STAGE_CONFIRM_HACKER_WORKS_MISSION_LAUNCH" CASE NCA_STAGE_CONFIRM_AIR_FREIGHT_MISSION_LAUNCH RETURN "NCA_STAGE_CONFIRM_AIR_FREIGHT_MISSION_LAUNCH" CASE NCA_STAGE_CONFIRM_SPECIAL_CARGO_MISSION_LAUNCH RETURN "NCA_STAGE_CONFIRM_SPECIAL_CARGO_MISSION_LAUNCH" CASE NCA_STAGE_CONFIRM_VEHICLE_CARGO_MISSION_LAUNCH RETURN "NCA_STAGE_CONFIRM_VEHICLE_CARGO_MISSION_LAUNCH" CASE NCA_STAGE_CONFIRM_GUNRUNNING_MISSION_LAUNCH RETURN "NCA_STAGE_CONFIRM_GUNRUNNING_MISSION_LAUNCH" CASE NCA_STAGE_CONFIRM_DRUG_BUSINESS_MISSION_LAUNCH RETURN "NCA_STAGE_CONFIRM_DRUG_BUSINESS_MISSION_LAUNCH" ENDSWITCH RETURN "****Invalid****" ENDFUNC FUNC STRING NC_APP_GET_MISSION_TYPE_DEBUG_NAME(NC_MISSION_TYPE eMissionType) SWITCH eMissionType CASE NC_BOSS_WORK RETURN "NC_BOSS_WORK" CASE NC_AIR_FREIGHT RETURN "NC_AIR_FREIGHT" CASE NC_SPECIAL_CARGO RETURN "NC_SPECIAL_CARGO" CASE NC_VEHICLE_CARGO RETURN "NC_VEHICLE_CARGO" CASE NC_WEAPONS_CARGO RETURN "NC_WEAPONS_CARGO" CASE NC_DRUG_CARGO RETURN "NC_DRUG_CARGO" CASE NC_COUNT RETURN "NC_COUNT" ENDSWITCH RETURN "****Invalid****" ENDFUNC FUNC STRING NC_APP_GET_TOOL_TIP_ENUM_DEBUG_NAME(NC_TT_JOB_NA_REASON eReason) SWITCH eReason CASE NC_TT_NONE RETURN "NC_TT_NONE" CASE NC_TT_JOB_GENERIC RETURN "NC_TT_JOB_GENERIC" CASE NC_TT_ON_CD_PRIMARY RETURN "NC_TT_ON_CD_PRIMARY" CASE NC_TT_ON_CD_GLOBAL RETURN "NC_TT_ON_CD_GLOBAL" CASE NC_TT_NEED_DRONE RETURN "NC_TT_NEED_DRONE" CASE NC_TT_NO_JOB_GANG RETURN "NC_TT_NO_JOB_GANG" CASE NC_TT_NO_JOB_NON_GANG RETURN "NC_TT_NO_JOB_NON_GANG" CASE NC_TT_INSUFFICIENT_GOONS RETURN "NC_TT_INSUFFICIENT_GOONS" CASE NC_TT_IN_HUB RETURN "NC_TT_IN_HUB" //Biker CASE NC_TT_NOT_SETUP RETURN "NC_TT_NOT_SETUP" CASE NC_TT_SUPPLIES_FULL RETURN "NC_TT_SUPPLIES_FULL" CASE NC_TT_SUSPENDED_PROD RETURN "NC_TT_SUSPENDED_PROD" CASE NC_TT_BOUGHT_SUPPLIES RETURN "NC_TT_BOUGHT_SUPPLIES" //Smuggler CASE NC_TT_SMUG_CD RETURN "NC_TT_SMUG_CD" CASE NC_TT_SMUG_FULL RETURN "NC_TT_SMUG_FULL" //Special Cargo CASE NC_TT_SC_FULL RETURN "NC_TT_SC_FULL" CASE NC_TT_SC_ON_CD RETURN "NC_TT_SC_ON_CD" ENDSWITCH RETURN "****Invalid****" ENDFUNC #ENDIF PROC NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_JOB_NA_REASON eReason, INT iMissionIndex) IF iMissionIndex < 0 OR iMissionIndex >= ciMAX_JOB_SLOTS CASSERTLN(DEBUG_INTERNET, "NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX - Using invalid index: ", iMissionIndex) EXIT ENDIF PRINTLN(" NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX - Index: ", iMissionIndex, " Reason: ", NC_APP_GET_TOOL_TIP_ENUM_DEBUG_NAME(eReason)) eToolTipReason[iMissionIndex] = eReason ENDPROC FUNC NC_TT_JOB_NA_REASON NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(INT iMissionIndex) IF iMissionIndex < 0 OR iMissionIndex >= ciMAX_JOB_SLOTS CASSERTLN(DEBUG_INTERNET, "NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX - Using invalid index: ", iMissionIndex) RETURN NC_TT_NONE ENDIF RETURN eToolTipReason[iMissionIndex] ENDFUNC FUNC BOOL NC_APP_IS_SPECIAL_ITEM_ACTIVE_FOR_SPECIAL_CARGO() RETURN IS_BIT_SET(iBS, NC_BS_SPECIAL_ITEM_ACTIVE) ENDFUNC PROC SET_FMMC_MISSION_ID(INT iID) iMissionIDToLaunch = iID PRINTLN(" SET_FMMC_MISSION_ID - ID: ", iID) ENDPROC /// PURPOSE: /// Returns if the overlay screen is currently active FUNC BOOL NC_APP_IS_OVERLAY_OPEN() RETURN IS_BIT_SET(iBS, NC_BS_OVERLAY_SCREEN_ACTIVE) ENDFUNC /// PURPOSE: /// Returns the current app stage FUNC NC_APP_STAGE_ID NC_APP_GET_APP_STAGE() RETURN eCurrentStage ENDFUNC /// PURPOSE: /// Sets the current app stage PROC NC_APP_SET_APP_STAGE(NC_APP_STAGE_ID eNewStage) IF eCurrentStage != eNewStage eCurrentStage = eNewStage PRINTLN(" NC_APP_SET_APP_STAGE Setting new stage to: ", NC_APP_GET_APP_STAGE_DEBUG_NAME(eNewStage)) ENDIF ENDPROC /// PURPOSE: /// Returns the current app stage FUNC NC_MISSION_TYPE NC_APP_GET_APP_MISSION_TYPE() RETURN eCurrentMissionType ENDFUNC /// PURPOSE: /// Sets the current app stage PROC NC_APP_SET_MISSION_TYPE(NC_MISSION_TYPE eNewMissionType) IF eCurrentMissionType != eNewMissionType eCurrentMissionType = eNewMissionType PRINTLN(" NC_APP_SET_MISSION_TYPE Setting new type to: ", NC_APP_GET_MISSION_TYPE_DEBUG_NAME(eNewMissionType)) ENDIF ENDPROC PROC OPEN_PAGE(BH_PAGE_ID ePage) IF ePage = PAGE_HOME SET_BIT(g_SimpleInteriorData.iForthBS, BS4_SIMPLE_INTERIOR_NC_DRAW_MISSIONS_SCREEN) ELSE CLEAR_BIT(g_SimpleInteriorData.iForthBS, BS4_SIMPLE_INTERIOR_NC_DRAW_MISSIONS_SCREEN) ENDIF PRINTLN(" OPEN_PAGE - new page = ", DEBUG_GET_PAGE_NAME(ePage)) eCurrentPage = ePage BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_SCREEN") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(ePage)) END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC NC_APP_SET_MISSION_LAUNCH_FAIL_REASON(STRING sReason) sMissionLanuchFailReason = sReason PRINTLN(" NC_APP_SET_MISSION_LAUNCH_FAIL_REASON Setting new fail reason: ", GET_FILENAME_FOR_AUDIO_CONVERSATION(sReason)) ENDPROC PROC NC_APP_CLEAR_MISSION_LAUNCH_FAIL_REASON() sMissionLanuchFailReason = "" PRINTLN(" NC_APP_CLEAR_MISSION_LAUNCH_FAIL_REASON called.") ENDPROC FUNC STRING NC_APP_GET_MISSION_LAUNCH_FAIL_REASON() RETURN sMissionLanuchFailReason ENDFUNC /// PURPOSE: /// Sets the mission unavailable value FUNC BOOL CAN_PLAYER_LAUNCH_BOSS_WORK(INT iMissionToLaunch) // Check that mission is available IF NOT GB_IS_BOSS_MISSION_AVAILABLE(PLAYER_ID(), iMissionToLaunch, FALSE) CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_LAUNCH_BOSS_WORK: NOPE! mission unavailable") INT iReason = GB_GET_BOSS_MISSION_UNAVAILABLE_REASON(PLAYER_ID(), iMissionToLaunch, FALSE) IF iReason = GB_MU_REASON_GOON_CRITICAL_TO_FME IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("HT_BW_L2") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("HT_BW_L3") ELSE NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("HT_BW_L4") ENDIF ELIF iReason = GB_MU_REASON_BOSS_IS_ANIMAL NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R6") ELIF iReason = GB_MU_REASON_GOON_IS_ANIMAL IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G1") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G2") ELSE NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G3") ENDIF ELIF iReason = GB_MU_REASON_GOON_GAMBLING IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G4") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G5") ELSE NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G6") ENDIF ELSE NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("HT_BW_L1") ENDIF RETURN FALSE ENDIF IF NOT GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_LAUNCH_BOSS_WORK: NOPE! GB_IS_PLAYER_BOSS_OF_A_GANG is false") NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("HT_BW_L5") 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, " CAN_PLAYER_LAUNCH_BOSS_WORK: NOPE! player critical to job") NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("HT_BW_L6") RETURN FALSE ENDIF IF NETWORK_IS_ACTIVITY_SESSION() CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_LAUNCH_BOSS_WORK: NOPE! NETWORK_IS_ACTIVITY_SESSION is true") NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("HT_BW_L6") RETURN FALSE ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Sets the mission unavailable value FUNC BOOL CAN_PLAYER_LAUNCH_MISSION(INT iMissionToLaunch) // Check that mission is available IF NOT GB_IS_BOSS_MISSION_AVAILABLE(PLAYER_ID(), iMissionToLaunch, FALSE) CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_LAUNCH_MISSION: NOPE! mission unavailable") INT iReason = GB_GET_BOSS_MISSION_UNAVAILABLE_REASON(PLAYER_ID(), iMissionToLaunch, FALSE) IF iReason = GB_MU_REASON_GOON_CRITICAL_TO_FME IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("UA_ML_F_GOON1") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("UA_ML_F_GOON2") ELSE NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("UA_ML_F_GOON3") ENDIF ELIF iReason = GB_MU_REASON_BOSS_IS_ANIMAL NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R6") ELIF iReason = GB_MU_REASON_GOON_IS_ANIMAL IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G1") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G2") ELSE NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G3") ENDIF ELIF iReason = GB_MU_REASON_GOON_GAMBLING IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G4") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G5") ELSE NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G6") ENDIF ELSE NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R6") ENDIF RETURN FALSE ENDIF IF NOT GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_LAUNCH_MISSION: NOPE! GB_IS_PLAYER_BOSS_OF_A_GANG is false") NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("DBG_BUN_NB") 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, " CAN_PLAYER_LAUNCH_MISSION: NOPE! player critical to job") NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R3") RETURN FALSE ENDIF IF NETWORK_IS_ACTIVITY_SESSION() CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_LAUNCH_MISSION: NOPE! NETWORK_IS_ACTIVITY_SESSION is true") NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R3") RETURN FALSE ENDIF RETURN TRUE ENDFUNC PROC SHOW_OVERLAY(STRING sTitle, STRING sMessage, STRING sAcceptButtonLabel, STRING sCancelButtonLabel, BOOL bPlayFailSound, BOOL bPlayClickSound, NC_APP_STAGE_ID eNewAppStage = NCA_STAGE_IDLE, INT iAdditionalINT = -1, INT iSecondAdditionalINT = -1, STRING sAdditionalString = NULL, STRING sAdditionalString2 = NULL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_OVERLAY") 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) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sCancelButtonLabel) END_SCALEFORM_MOVIE_METHOD() IF bPlayClickSound PLAY_CLICK_LINK_SOUND() ELIF bPlayFailSound PLAY_CLICK_LINK_FAIL_SOUND() ENDIF SET_BIT(iBS, NC_BS_OVERLAY_SCREEN_ACTIVE) NC_APP_SET_APP_STAGE(eNewAppStage) PRINTLN(" SHOW_OVERLAY with title: ", sTitle, " message: ", sMessage, " Accebt button: ", sAcceptButtonLabel, " Cancel button: ", sCancelButtonLabel) ENDPROC PROC HIDE_OVERLAY() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "HIDE_OVERLAY") END_SCALEFORM_MOVIE_METHOD() NC_APP_SET_APP_STAGE(NCA_STAGE_IDLE) CLEAR_BIT(iBS, NC_BS_OVERLAY_SCREEN_ACTIVE) PRINTLN(" 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 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, NC_BS_PRINTED_PAUSE_MENU_ACTIVE) PRINTLN(", SET_INPUT_EXCLUSIVE_AND_ACTIVE called but IS_PAUSE_MENU_ACTIVE_EX returned true") SET_BIT(iBS, NC_BS_PRINTED_PAUSE_MENU_ACTIVE) ENDIF #ENDIF ENDIF ENDPROC PROC RENDER_NC_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() 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 CLOSE_JOB_OVERLAY() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "HIDE_JOB_OVERLAY") END_SCALEFORM_MOVIE_METHOD() CLEAR_BIT(iBS, NC_BS_JOB_OVERLAY_ACTIVE) CLEAR_BIT(iBS, NC_BS_JOB_OVERLAY_SELECTED_SHIPMENT_SIZE) ENDPROC FUNC BOOL IS_JOB_OVERLAY_VISIBLE() RETURN IS_BIT_SET(iBS, NC_BS_JOB_OVERLAY_ACTIVE) ENDFUNC //╒═════════════════════════════════════════════════════════════════════════════╕ //╞═════════════════════════╡ Mission Data Functions ╞══════════════════════════╡ //╘═════════════════════════════════════════════════════════════════════════════╛ FUNC BOOL SHOULD_MISSION_TYPE_BUTTON_BE_UNLOCKED(NC_MISSION_TYPE eMissionType) IF NOT GB_IS_LOCAL_PLAYER_BOSS_OF_A_GANG() RETURN FALSE ENDIF IF MISSION_PC_DID_I_JOIN_A_PRIVATE_SESSION() AND eMissionType != NC_BOSS_WORK RETURN FALSE ENDIF #IF IS_DEBUG_BUILD IF GET_COMMANDLINE_PARAM_EXISTS("scRestrictNCAppToClientJobs") AND eMissionType != NC_BOSS_WORK RETURN FALSE ENDIF #ENDIF SWITCH eMissionType CASE NC_BOSS_WORK RETURN TRUE BREAK CASE NC_AIR_FREIGHT IF DOES_PLAYER_OWN_A_HANGER(PLAYER_ID()) RETURN IS_HANGAR_SETUP_MISSION_COMPLETE() ENDIF BREAK CASE NC_SPECIAL_CARGO RETURN DOES_PLAYER_OWN_A_WAREHOUSE(PLAYER_ID()) AND GB_IS_LOCAL_PLAYER_BOSS_OF_GANG_TYPE(GT_VIP) BREAK CASE NC_VEHICLE_CARGO RETURN DOES_PLAYER_OWN_AN_IE_GARAGE(PLAYER_ID()) AND GB_IS_LOCAL_PLAYER_BOSS_OF_GANG_TYPE(GT_VIP) BREAK CASE NC_WEAPONS_CARGO RETURN DOES_PLAYER_OWN_A_BUNKER(PLAYER_ID()) AND IS_BUSINESS_TYPE_ACTIVE(BUSINESS_TYPE_WEAPONS) AND NOT IS_FACTORY_SHUTDOWN_BY_PLAYER(BUNKER_SAVE_SLOT) BREAK CASE NC_DRUG_CARGO IF DOES_PLAYER_OWN_A_FACTORY(PLAYER_ID()) AND GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL IS_MISSION_TYPE_DISABLED_BY_TUNEABLE(NC_MISSION_TYPE eMissionType) #IF IS_DEBUG_BUILD IF GET_COMMANDLINE_PARAM_EXISTS("scRestrictNCAppToClientJobs") AND eMissionType != NC_BOSS_WORK RETURN TRUE ENDIF #ENDIF SWITCH eMissionType CASE NC_BOSS_WORK IF g_sMPTunables.bBB_HACKER_WORK_CLIENT_WORK_DISABLE_JOB_GLOBAL RETURN TRUE ENDIF BREAK CASE NC_AIR_FREIGHT IF g_sMPTunables.bBB_HACKER_WORK_AIRFREIGHT_CARGO_DISABLE_JOB_GLOBAL RETURN TRUE ENDIF BREAK CASE NC_SPECIAL_CARGO IF g_sMPTunables.bBB_HACKER_WORK_SPECIAL_CARGO_DISABLE_JOB_GLOBAL RETURN TRUE ENDIF BREAK CASE NC_VEHICLE_CARGO IF g_sMPTunables.bBB_HACKER_WORK_VEHICLE_CARGO_DISABLE_JOB_GLOBAL RETURN TRUE ENDIF BREAK CASE NC_WEAPONS_CARGO IF g_sMPTunables.bBB_HACKER_WORK_GUNRUNNING_SUPPLIES_DISABLE_JOB_GLOBAL RETURN TRUE ENDIF BREAK CASE NC_DRUG_CARGO IF g_sMPTunables.bBB_HACKER_WORK_BIKER_SUPPLIES_DISABLE_JOB_GLOBAL RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC UPDATE_PRIMARY_MISSION_WITH_ID(INT iMissionID) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_MISSION") NC_MISSION_TYPE eMissionType = INT_TO_ENUM(NC_MISSION_TYPE, iMissionID) INT iCooldown = 0 BOOL bAvailable = SHOULD_MISSION_TYPE_BUTTON_BE_UNLOCKED(eMissionType) IF eMissionType = NC_VEHICLE_CARGO AND NOT GB_HAS_IE_MISSION_COOLDOWN_TIMER_EXPIRED(VEV_EYE_IN_THE_SKY) iCooldown = (GB_GET_MISSION_COOLDOWN_TIME_REMAINING(VEV_EYE_IN_THE_SKY) + 1) SET_BIT(iBS, NC_BS_IE_COOLDOWN_RUNNING) bAvailable = FALSE ENDIF IF IS_MISSION_TYPE_DISABLED_BY_TUNEABLE(eMissionType) bAvailable = FALSE ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iMissionID) // Mission type SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bAvailable) // Available? SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iCooldown) // Any cooldown running for this mission type END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SEND_PRIMARY_MISSION_AVAILABILITY_TO_SCALEFORM() INT i REPEAT NC_COUNT i UPDATE_PRIMARY_MISSION_WITH_ID(i) ENDREPEAT ENDPROC PROC SEND_ALL_DATA_TO_SCALEFORM() OPEN_PAGE(PAGE_LOGIN) //Base data SEND_PRIMARY_MISSION_AVAILABILITY_TO_SCALEFORM() ENDPROC FUNC INT GET_JOB_ID_FROM_FMMC_ID(INT iFMMCID) SWITCH iFMMCID CASE FMMC_TYPE_FMBB_BANK_JOB RETURN 0 CASE FMMC_TYPE_FMBB_DATA_HACK RETURN 1 CASE FMMC_TYPE_FMBB_INFILTRATION RETURN 2 CASE FMMC_TYPE_FMBB_JEWEL_STORE_GRAB RETURN 3 CASE FMMC_TYPE_FMBB_SECURITY_VAN RETURN 4 CASE FMMC_TYPE_FMBB_TARGET_PURSUIT RETURN 5 ENDSWITCH RETURN -1 ENDFUNC FUNC INT GET_FMMC_ID_FROM_JOB_ID(INT iJobID) SWITCH iJobID CASE 0 RETURN FMMC_TYPE_FMBB_BANK_JOB CASE 1 RETURN FMMC_TYPE_FMBB_DATA_HACK CASE 2 RETURN FMMC_TYPE_FMBB_INFILTRATION CASE 3 RETURN FMMC_TYPE_FMBB_JEWEL_STORE_GRAB CASE 4 RETURN FMMC_TYPE_FMBB_SECURITY_VAN CASE 5 RETURN FMMC_TYPE_FMBB_TARGET_PURSUIT ENDSWITCH RETURN -1 ENDFUNC FUNC INT GET_BOSS_WORK_OR_CHALLENGE_COOLDOWN_TIME_REMAINING(INT iFMMCID) IF IS_FMMC_ID_BBATTLE_BOSS_WORK(iFMMCID) INT i REPEAT ciMAX_FMBB_BOSS_CHALLENGE_CD_TIMERS i IF g_sBattleBossWorksCDVars.sBossWorksCD[i].iFMMCID = iFMMCID IF HAS_NET_TIMER_STARTED(g_sBattleBossWorksCDVars.sBossWorksCD[i].g_stBossWorksCD) RETURN GET_TIME_REMAINING_FROM_SCRIPT_TIMER_IN_SECONDS(g_sBattleBossWorksCDVars.sBossWorksCD[i].g_stBossWorksCD, GET_BUSINESS_BATTLE_BOSS_WORK_COOLDOWN_TIME(i)) ENDIF ENDIF ENDREPEAT IF HAS_NET_TIMER_STARTED(g_sBattleBossWorksCDVars.g_stAllBossWorksCD) RETURN GET_TIME_REMAINING_FROM_SCRIPT_TIMER_IN_SECONDS(g_sBattleBossWorksCDVars.g_stAllBossWorksCD, GET_BUSINESS_BATTLE_BOSS_WORK_GLOBAL_COOLDOWN_TIME()) ENDIF ELIF IS_FMMC_ID_BBATTLE_BOSS_CHALLENGE(iFMMCID) IF iFMMCID = FMMC_TYPE_FMBB_SECURITY_VAN IF HAS_NET_TIMER_STARTED(g_sBattleBossWorksCDVars.g_stSecurityVansCD) RETURN GET_TIME_REMAINING_FROM_SCRIPT_TIMER_IN_SECONDS(g_sBattleBossWorksCDVars.g_stSecurityVansCD, GET_BUSINESS_BATTLE_BOSS_CHALLENGE_COOLDOWN_TIME(iFMMCID)) ELIF HAS_NET_TIMER_STARTED(g_sBattleBossWorksCDVars.g_stAllBossChallengeCD) RETURN GET_TIME_REMAINING_FROM_SCRIPT_TIMER_IN_SECONDS(g_sBattleBossWorksCDVars.g_stAllBossChallengeCD, GET_BUSINESS_BATTLE_BOSS_CHALLENGE_GLOBAL_COOLDOWN_TIME()) ENDIF ELSE IF HAS_NET_TIMER_STARTED(g_sBattleBossWorksCDVars.g_stTargetPursuitCD) RETURN GET_TIME_REMAINING_FROM_SCRIPT_TIMER_IN_SECONDS(g_sBattleBossWorksCDVars.g_stTargetPursuitCD, GET_BUSINESS_BATTLE_BOSS_CHALLENGE_COOLDOWN_TIME(iFMMCID)) ELIF HAS_NET_TIMER_STARTED(g_sBattleBossWorksCDVars.g_stAllBossChallengeCD) RETURN GET_TIME_REMAINING_FROM_SCRIPT_TIMER_IN_SECONDS(g_sBattleBossWorksCDVars.g_stAllBossChallengeCD, GET_BUSINESS_BATTLE_BOSS_CHALLENGE_GLOBAL_COOLDOWN_TIME()) ENDIF ENDIF ENDIF RETURN -1 ENDFUNC FUNC BOOL IS_BOSS_WORK_OR_CHALLENGE_TIMER_RUNNING(INT iFMMCID, NC_TT_JOB_NA_REASON &eCooldownReason) eCooldownReason = NC_TT_ON_CD_PRIMARY IF iFMMCID = FMMC_TYPE_FMBB_SECURITY_VAN IF HAS_NET_TIMER_STARTED(g_sBattleBossWorksCDVars.g_stSecurityVansCD) RETURN TRUE ENDIF ELIF iFMMCID = FMMC_TYPE_FMBB_TARGET_PURSUIT IF HAS_NET_TIMER_STARTED(g_sBattleBossWorksCDVars.g_stTargetPursuitCD) RETURN TRUE ENDIF ENDIF INT i REPEAT ciMAX_FMBB_BOSS_CHALLENGE_CD_TIMERS i IF iFMMCID != -1 AND g_sBattleBossWorksCDVars.sBossWorksCD[i].iFMMCID = iFMMCID RETURN TRUE ENDIF ENDREPEAT eCooldownReason = NC_TT_ON_CD_GLOBAL IF IS_FMMC_ID_BBATTLE_BOSS_WORK(iFMMCID) RETURN HAS_NET_TIMER_STARTED(g_sBattleBossWorksCDVars.g_stAllBossWorksCD) ENDIF RETURN HAS_NET_TIMER_STARTED(g_sBattleBossWorksCDVars.g_stAllBossChallengeCD) ENDFUNC FUNC BOOL RUN_DISTANCE_CHECK_FOR_MISSION_AVAILABILITY(INT iFMMCID) IF iFMMCID = FMMC_TYPE_FMBB_SECURITY_VAN PRINTLN(" RUN_DISTANCE_CHECK_FOR_MISSION_AVAILABILITY - Checking FMMC_TYPE_FMBB_SECURITY_VAN - Returning TRUE") iSelectedMissionSubVar = -1 RETURN TRUE ENDIF IF SELECT_TRUCK_WORK_VARIATION(iFMMCID, iSelectedMissionSubVar) PRINTLN(" RUN_DISTANCE_CHECK_FOR_MISSION_AVAILABILITY - Selected sub variation = ", iSelectedMissionSubVar, " for mission: ", iFMMCID) RETURN TRUE ENDIF PRINTLN(" RUN_DISTANCE_CHECK_FOR_MISSION_AVAILABILITY - RETURN FALSE for mission ", iFMMCID) RETURN FALSE ENDFUNC FUNC BOOL IS_BOSS_MISSION_BLOCKED(INT iFMMCID) #IF IS_DEBUG_BUILD IF GET_COMMANDLINE_PARAM_EXISTS("sc_TerrorByteBW_FLOW_PLAY") IF iFMMCID = FMMC_TYPE_FMBB_TARGET_PURSUIT RETURN TRUE ENDIF ENDIF #ENDIF IF g_sMPTunables.bBB_HACKER_WORK_CLIENT_WORK_DISABLE_JOB_GLOBAL RETURN TRUE ENDIF SWITCH iFMMCID CASE FMMC_TYPE_FMBB_SECURITY_VAN RETURN g_sMPTunables.bBB_HACKER_WORK_HACKER_CHALLENGE_DISABLE_JOB_SECURITY_VANS CASE FMMC_TYPE_FMBB_TARGET_PURSUIT RETURN g_sMPTunables.bBB_HACKER_WORK_HACKER_CHALLENGE_DISABLE_JOB_TARGET_PURSUIT CASE FMMC_TYPE_FMBB_BANK_JOB RETURN g_sMPTunables.bBB_HACKER_WORK_CLIENT_WORK_DISABLE_JOB_BANK_JOB CASE FMMC_TYPE_FMBB_DATA_HACK RETURN g_sMPTunables.bBB_HACKER_WORK_CLIENT_WORK_DISABLE_JOB_DATA_HACK CASE FMMC_TYPE_FMBB_INFILTRATION RETURN g_sMPTunables.bBB_HACKER_WORK_CLIENT_WORK_DISABLE_JOB_INFILTRATION CASE FMMC_TYPE_FMBB_JEWEL_STORE_GRAB RETURN g_sMPTunables.bBB_HACKER_WORK_CLIENT_WORK_DISABLE_JOB_JEWEL_STORE_GRAB ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL IS_NC_BOSS_WORK_AVAILABLE(INT iMissionID, BOOL bCheckCooldownTimer = TRUE) INT iFMMCID = GET_FMMC_ID_FROM_JOB_ID(iMissionID) IF IS_BOSS_MISSION_BLOCKED(iFMMCID) NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_JOB_GENERIC, iMissionID) RETURN FALSE ENDIF IF bCheckCooldownTimer NC_TT_JOB_NA_REASON eCooldownReason IF IS_BOSS_WORK_OR_CHALLENGE_TIMER_RUNNING(iFMMCID, eCooldownReason) NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(eCooldownReason, iMissionID) RETURN FALSE ENDIF ENDIF IF IS_OWNERS_HACKER_TRUCK_INSIDE_BUSINESS_HUB(PLAYER_ID()) NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_IN_HUB, iMissionID) RETURN FALSE ENDIF IF iFMMCID = FMMC_TYPE_FMBB_INFILTRATION OR iFMMCID = FMMC_TYPE_FMBB_JEWEL_STORE_GRAB //Some missions require the drone stationt to be purchased before launch IF NOT IS_PLAYER_HACKER_TRUCK_DRONE_STATION_PURCHASED(PLAYER_ID()) NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_NEED_DRONE, iMissionID) RETURN FALSE ENDIF ENDIF IF iFMMCID = FMMC_TYPE_FMBB_SECURITY_VAN OR iFMMCID = FMMC_TYPE_FMBB_TARGET_PURSUIT //The two challenge missions require a gang boss to have at least one goon IF GB_GET_BOSS_MISSION_UNAVAILABLE_REASON(PLAYER_ID(), iFMMCID) = GB_MU_REASON_NOT_ENOUGH_GOONS NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_INSUFFICIENT_GOONS, iMissionID) RETURN FALSE ENDIF ENDIF IF NOT RUN_DISTANCE_CHECK_FOR_MISSION_AVAILABILITY(GET_FMMC_ID_FROM_JOB_ID(iMissionID)) IF iSelectedMissionSubVar = TRUCK_WORK_SELECT_FAILED_FOR_CLOSE_GANG NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_NO_JOB_GANG, iMissionID) ELSE iSelectedMissionSubVar = -1 NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_NO_JOB_NON_GANG, iMissionID) ENDIF RETURN FALSE ENDIF NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_NONE, iMissionID) RETURN TRUE ENDFUNC FUNC STRING GET_NC_BOSS_WORK_UNAVAILABLE_REASON(INT iMissionID) INT iFMMCID = GET_FMMC_ID_FROM_JOB_ID(iMissionID) IF IS_BOSS_MISSION_BLOCKED(iFMMCID) RETURN "HT_BW_L1" ENDIF IF iFMMCID = FMMC_TYPE_FMBB_INFILTRATION OR iFMMCID = FMMC_TYPE_FMBB_JEWEL_STORE_GRAB //Some missions require the drone stationt to be purchased before launch IF NOT IS_PLAYER_HACKER_TRUCK_DRONE_STATION_PURCHASED(PLAYER_ID()) RETURN "HT_BW_L8" ENDIF ENDIF IF iFMMCID = FMMC_TYPE_FMBB_SECURITY_VAN OR iFMMCID = FMMC_TYPE_FMBB_TARGET_PURSUIT //The two challenge missions require a gang boss to have at least one goon IF GB_GET_BOSS_MISSION_UNAVAILABLE_REASON(PLAYER_ID(), iFMMCID) = GB_MU_REASON_NOT_ENOUGH_GOONS IF GB_IS_LOCAL_PLAYER_BOSS_OF_A_BIKER_GANG() RETURN "HT_BW_L9" ELIF GB_IS_LOCAL_PLAYER_BOSS_OF_A_GANG() IF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) RETURN "HT_BW_L9a" ELSE RETURN "HT_BW_L9b" ENDIF ENDIF ENDIF ENDIF //This is set by RUN_DISTANCE_CHECK_FOR_MISSION_AVAILABILITY if it is -1 then no variations were suitable IF iSelectedMissionSubVar = -1 RETURN "HT_BW_L1" ENDIF RETURN "HT_BW_L1" ENDFUNC PROC OPEN_JOB_LIST_OVERLAY(NC_MISSION_TYPE eMittionType, STRING sTitle) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_JOB_OVERLAY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eMittionType)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTitle) END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC CLEAR_JOB_LIST_OVERLAY_DATA() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "CLEAR_JOBS") END_SCALEFORM_MOVIE_METHOD() INT i REPEAT ciMAX_JOB_SLOTS i NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_NONE, i) ENDREPEAT ENDPROC FUNC TEXT_LABEL_15 GET_TOOL_TIP_TEXT_FOR_MISSION_UNAVAILABLE(NC_TT_JOB_NA_REASON eReason, INT iFMMCID) TEXT_LABEL_15 tlReturn SWITCH eReason CASE NC_TT_NONE tlReturn = "INVALID" BREAK CASE NC_TT_ON_CD_PRIMARY tlReturn = "HT_JOB_CD_0" BREAK CASE NC_TT_NEED_DRONE tlReturn = "HT_JOB_R3" BREAK CASE NC_TT_NO_JOB_NON_GANG tlReturn = "HT_JOB_R2" BREAK CASE NC_TT_IN_HUB tlReturn = "HT_JOB_R6" BREAK CASE NC_TT_JOB_GENERIC tlReturn = "HT_BW_L1" BREAK CASE NC_TT_ON_CD_GLOBAL IF IS_FMMC_ID_BBATTLE_BOSS_WORK(iFMMCID) tlReturn = "HT_JOB_CD_1" ELSE tlReturn = "HT_JOB_CD_2" ENDIF BREAK CASE NC_TT_INSUFFICIENT_GOONS IF GB_IS_LOCAL_PLAYER_BOSS_OF_A_BIKER_GANG() tlReturn = "HT_JOB_R4" ELSE tlReturn = "HT_JOB_R5" ENDIF BREAK CASE NC_TT_NO_JOB_GANG IF GB_IS_LOCAL_PLAYER_BOSS_OF_A_BIKER_GANG() tlReturn = "HT_JOB_R1" ELSE tlReturn = "HT_JOB_R1a" ENDIF BREAK CASE NC_TT_NOT_SETUP tlReturn = "HT_DW_P1_D5" BREAK CASE NC_TT_SUPPLIES_FULL tlReturn = "HT_DW_P1_D7" BREAK CASE NC_TT_SUSPENDED_PROD tlReturn = "HT_DW_P1_D6" BREAK CASE NC_TT_BOUGHT_SUPPLIES tlReturn = "HT_DW_P1_D8" BREAK CASE NC_TT_SC_FULL IF eSelectedShipmentSize = CONTRABAND_SMALL tlReturn = "HT_DW_P1_D9" ELIF eSelectedShipmentSize = CONTRABAND_MEDIUM tlReturn = "HT_DW_P1_D10" ELSE tlReturn = "HT_DW_P1_D11" ENDIF BREAK CASE NC_TT_SC_ON_CD tlReturn = "HT_SC_P1_D3" BREAK ENDSWITCH RETURN tlReturn ENDFUNC FUNC TEXT_LABEL_15 GET_FACTORY_TYPE_PROPERTY_LABEL(FACTORY_TYPE eType, INT iVariation = 0) TEXT_LABEL_15 tlReturn = "*INVAILID*" IF iVariation = 0 SWITCH eType CASE FACTORY_TYPE_CRACK tlReturn = "HAPP_BTYPE_P2" BREAK CASE FACTORY_TYPE_METH tlReturn = "HAPP_BTYPE_P3" BREAK CASE FACTORY_TYPE_WEED tlReturn = "HAPP_BTYPE_P4" BREAK CASE FACTORY_TYPE_FAKE_IDS tlReturn = "HAPP_BTYPE_P5" BREAK CASE FACTORY_TYPE_FAKE_MONEY tlReturn = "HAPP_BTYPE_P6" BREAK ENDSWITCH ELSE SWITCH eType CASE FACTORY_TYPE_CRACK tlReturn = "HAPP_BTYPE_HP2" BREAK CASE FACTORY_TYPE_METH tlReturn = "HAPP_BTYPE_HP3" BREAK CASE FACTORY_TYPE_WEED tlReturn = "HAPP_BTYPE_HP4" BREAK CASE FACTORY_TYPE_FAKE_IDS tlReturn = "HAPP_BTYPE_HP5" BREAK CASE FACTORY_TYPE_FAKE_MONEY tlReturn = "HAPP_BTYPE_HP6" BREAK ENDSWITCH ENDIF RETURN tlReturn ENDFUNC FUNC TEXT_LABEL_15 GET_TOOL_TIP_SUB_STRING_FOR_MISSION_UNAVAILABLE(NC_TT_JOB_NA_REASON eReason, FACTORY_TYPE eType) TEXT_LABEL_15 tlReturn SWITCH eReason CASE NC_TT_SUPPLIES_FULL CASE NC_TT_BOUGHT_SUPPLIES CASE NC_TT_NOT_SETUP CASE NC_TT_SUSPENDED_PROD tlReturn = GET_FACTORY_TYPE_PROPERTY_LABEL(eType, 1) BREAK ENDSWITCH RETURN tlReturn ENDFUNC PROC SETUP_TRUCK_JOB_OVERLAY() CLEAR_JOB_LIST_OVERLAY_DATA() INT i NC_TT_JOB_NA_REASON eCooldownReason REPEAT MAX_WORKS_JOBS i BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_JOB") INT iFMMCID = GET_FMMC_ID_FROM_JOB_ID(i) BOOL bAvailable = IS_NC_BOSS_WORK_AVAILABLE(i, FALSE) eCooldownReason = NC_TT_NONE //Mission name TEXT_LABEL_15 tlName = "HT_BW_T" tlName += i //Description text label TEXT_LABEL_15 tlDesc = "HT_BW_D" tlDesc += i //The challenges reference to the players gang type IF i >= 4 AND GB_IS_LOCAL_PLAYER_BOSS_OF_A_BIKER_GANG() tlDesc += "a" ENDIF INT iShowCooldown = 0 INT iCooldownTime = ciTYPE_FORMAT_HIDDEN IF IS_BOSS_WORK_OR_CHALLENGE_TIMER_RUNNING(iFMMCID, eCooldownReason) iShowCooldown = ciTYPE_FORMAT_TIME iCooldownTime = GET_BOSS_WORK_OR_CHALLENGE_COOLDOWN_TIME_REMAINING(iFMMCID) tlDesc = GET_TOOL_TIP_TEXT_FOR_MISSION_UNAVAILABLE(eCooldownReason, iFMMCID) NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(eCooldownReason, i) ELIF NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(i) != NC_TT_NONE tlDesc = GET_TOOL_TIP_TEXT_FOR_MISSION_UNAVAILABLE(NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(i), iFMMCID) ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlName) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iCooldownTime) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iShowCooldown) //Type format for param above: 0 = Hidden 1 = Cash 2 = Time SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlDesc) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bAvailable) END_SCALEFORM_MOVIE_METHOD() ENDREPEAT OPEN_JOB_LIST_OVERLAY(NC_BOSS_WORK, "HT_BW_MT") SET_BIT(iBS, NC_BS_JOB_OVERLAY_ACTIVE) ENDPROC FUNC BOOL SET_BIKER_MISSION_UNAVAILABLE_REASON(FACTORY_ID eFracotryID, INT iSlot, INT iMissionIndex) IF NOT HAS_PLAYER_COMPLETED_FACTORY_SETUP_MISSION(PLAYER_ID(), eFracotryID) AND NOT IS_DELAY_PRODUCTION_TIMER_RUNNING(iSlot) NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_NOT_SETUP, iMissionIndex) RETURN TRUE ENDIF IF g_iMaterialsTotalForFactory[iSlot] >= g_sMPTunables.iBIKER_RESUPPLY_LAUNCH_SUPPLIES_THRESHOLD NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_SUPPLIES_FULL, iMissionIndex) RETURN TRUE ENDIF IF HAS_PLAYER_SUSPENDED_BIKER_BUSINESS_PRODUCTION(PLAYER_ID(), eFracotryID) NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_SUSPENDED_PROD, iMissionIndex) RETURN TRUE ENDIF IF IS_PAID_RESUPPLY_TIMER_RUNNING(iSlot) NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_BOUGHT_SUPPLIES, iMissionIndex) RETURN TRUE ENDIF NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_NONE, iMissionIndex) RETURN FALSE ENDFUNC PROC SETUP_BIKER_JOB_OVERLAY() CLEAR_JOB_LIST_OVERLAY_DATA() INT i REPEAT FACTORY_TYPE_WEAPONS i BOOL bAvailable = FALSE FACTORY_TYPE eType = INT_TO_ENUM(FACTORY_TYPE, i) FACTORY_ID eFracotryID = FACTORY_ID_INVALID IF DOES_PLAYER_OWN_FACTORY_OF_TYPE(PLAYER_ID(), eType) INT iSlot = GET_SAVE_SLOT_OF_OWNED_FACTORY_TYPE(PLAYER_ID(), eType) eFracotryID = GET_FACTORY_ID_FROM_FACTORY_SLOT(PLAYER_ID(), iSlot) IF NOT SET_BIKER_MISSION_UNAVAILABLE_REASON(eFracotryID, iSlot, i) bAvailable = TRUE ENDIF ENDIF //Mission name TEXT_LABEL_15 tlName = "HT_DW_T" tlName += i //Description text label TEXT_LABEL_15 tlDescSub TEXT_LABEL_15 tlDesc = "HT_DW_D" tlDesc += i NC_TT_JOB_NA_REASON eReason = NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(i) IF NOT DOES_PLAYER_OWN_FACTORY_OF_TYPE(PLAYER_ID(), eType) tlDesc = "HT_DW_P1_D3" tlDescSub = GET_FACTORY_TYPE_PROPERTY_LABEL(eType, 0) ELIF eReason != NC_TT_NONE tlDesc = GET_TOOL_TIP_TEXT_FOR_MISSION_UNAVAILABLE(eReason, -1) tlDescSub = GET_TOOL_TIP_SUB_STRING_FOR_MISSION_UNAVAILABLE(eReason, eType) ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_JOB") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlName) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(-1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ciTYPE_FORMAT_HIDDEN) IF IS_STRING_NULL_OR_EMPTY(tlDescSub) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlDesc) ELSE BEGIN_TEXT_COMMAND_SCALEFORM_STRING(tlDesc) ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(tlDescSub) END_TEXT_COMMAND_SCALEFORM_STRING() ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bAvailable) END_SCALEFORM_MOVIE_METHOD() ENDREPEAT OPEN_JOB_LIST_OVERLAY(NC_DRUG_CARGO, "HT_DW_MT") SET_BIT(iBS, NC_BS_JOB_OVERLAY_ACTIVE) ENDPROC FUNC BOOL DOES_PLAYER_OWN_WAREHOUSE_THAT_HAS_SPACE_TO_STORE_A_SHIPMENT_OF_SIZE(CONTRABAND_SIZE eShipmentSize) INT iNumCratesToStore = ENUM_TO_INT(eShipmentSize) INT i REPEAT GET_COUNT_OF_WAREHOUSES_OWNED() i INT iWarehouseID = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(i) IF GET_WAREHOUSE_REMAINING_CAPACITY(iWarehouseID) >= iNumCratesToStore RETURN TRUE ENDIF ENDREPEAT RETURN FALSE ENDFUNC FUNC TEXT_LABEL_23 GET_CONTRABAND_WAREHOUSE_SIZE_TEXT_LABEL(EWarehouseSize eSize) TEXT_LABEL_23 tlReturn SWITCH eSize CASE eWarehouseSmall tlReturn = "HT_SCW_DS0" BREAK CASE eWarehouseMedium tlReturn = "HT_SCW_DS1" BREAK CASE eWarehouseLarge tlReturn = "HT_SCW_DS2" BREAK ENDSWITCH RETURN tlReturn ENDFUNC /// PURPOSE:Returns the contraband type assigned to the local playere as a text label FUNC TEXT_LABEL_23 GET_NC_APP_CONTRABAND_TYPE_LABEL_FOR_SECURO_APP(CONTRABAND_TYPE contaType) TEXT_LABEL_23 tlContraType = "NC_CONTRATP_" tlContraType += ENUM_TO_INT(contaType) CDEBUG3LN(DEBUG_INTERNET, "GET_WAREHOUSE_CONTRABAND_TYPE_STRING: ", tlContraType) RETURN tlContraType ENDFUNC /// PURPOSE: Returns the text label for the name of the specified warehouse - App version for localised language support /// Validates the warehouse ID before returning its name FUNC STRING GET_WAREHOUSE_NAME_FOR_APP(INT iWarehouse) SWITCH iWarehouse CASE ciW_Elysian_Island_2 RETURN "MP_WHOUSE_HT0" BREAK CASE ciW_La_Puerta_1 RETURN "MP_WHOUSE_HT1" BREAK CASE ciW_La_Mesa_1 RETURN "MP_WHOUSE_HT2" BREAK CASE ciW_Rancho_1 RETURN "MP_WHOUSE_HT3" BREAK CASE ciW_West_Vinewood_1 RETURN "MP_WHOUSE_HT4" BREAK CASE ciW_LSIA_1 RETURN "MP_WHOUSE_HT5" BREAK CASE ciW_Del_Perro_1 RETURN "MP_WHOUSE_HT6" BREAK CASE ciW_LSIA_2 RETURN "MP_WHOUSE_HT7" BREAK CASE ciW_Elysian_Island_1 RETURN "MP_WHOUSE_HT8" BREAK CASE ciW_El_Burro_Heights_1 RETURN "MP_WHOUSE_HT9" BREAK CASE ciW_Elysian_Island_3 RETURN "MP_WHOUSE_HT10" BREAK CASE ciW_La_Mesa_2 RETURN "MP_WHOUSE_HT11" BREAK CASE ciW_Maze_Bank_Arena_1 RETURN "MP_WHOUSE_HT12" BREAK CASE ciW_Strawberry_1 RETURN "MP_WHOUSE_HT13" BREAK CASE ciW_Downtown_Vinewood_1 RETURN "MP_WHOUSE_HT14" BREAK CASE ciW_La_Mesa_3 RETURN "MP_WHOUSE_HT15" BREAK CASE ciW_La_Mesa_4 RETURN "MP_WHOUSE_HT16" BREAK CASE ciW_Cypress_Flats_2 RETURN "MP_WHOUSE_HT17" BREAK CASE ciW_Cypress_Flats_3 RETURN "MP_WHOUSE_HT18" BREAK CASE ciW_Vinewood_1 RETURN "MP_WHOUSE_HT19" BREAK CASE ciW_Rancho_2 RETURN "MP_WHOUSE_HT20" BREAK CASE ciW_Banning_1 RETURN "MP_WHOUSE_HT21" BREAK ENDSWITCH CDEBUG1LN(DEBUG_SAFEHOUSE, "[WHOUSE] GET_WAREHOUSE_NAME_FOR_APP: ", iWarehouse, " valid warehouse found. Returning: empty name") RETURN "" ENDFUNC PROC SETUP_SPECIAL_CARGO_WAREHOUSE_LIST_OVERLAY() CLEAR_JOB_LIST_OVERLAY_DATA() INT i INT iOwnedWHCount = GET_COUNT_OF_WAREHOUSES_OWNED() REPEAT ciMaxOwnedWarehouses i INT iWarehouseID = ciW_Invalid TEXT_LABEL_15 tlWarehouseName = "" TEXT_LABEL_15 tlWarehouseNameSub = "" //Duplicate string for localised languages BOOL bAvailable = (iOwnedWHCount > i) IF bAvailable iWarehouseID = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(i) //Warehouse name tlWarehouseName = GET_WAREHOUSE_NAME(iWarehouseID) tlWarehouseNameSub = GET_WAREHOUSE_NAME_FOR_APP(iWarehouseID) //Do we have the capacity to store a shipment of this size? IF GET_WAREHOUSE_REMAINING_CAPACITY(iWarehouseID) < ENUM_TO_INT(eSelectedShipmentSize) bAvailable = FALSE NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_SC_FULL, i) ENDIF ELSE //We don't own a warehouse in this slot so hide it BREAKLOOP ENDIF //Description text label - Based on the selected shipment size TEXT_LABEL_15 tlDesc = "HT_SCW_D" tlDesc += (ENUM_TO_INT(eSelectedShipmentSize) - 1) TEXT_LABEL_23 tlDescSub = GET_NC_APP_CONTRABAND_TYPE_LABEL_FOR_SECURO_APP(eActiveContrabandType) TEXT_LABEL_23 tlDescSub2 //Tootltip description for a special shipment IF eSelectedShipmentSize = CONTRABAND_SMALL AND NC_APP_IS_SPECIAL_ITEM_ACTIVE_FOR_SPECIAL_CARGO() tlDesc = "HT_SCW_D3" tlDescSub = GET_CONTRABAND_WAREHOUSE_SIZE_TEXT_LABEL(GET_WAREHOUSE_SIZE(iWarehouseID)) ELSE tlDescSub2 = GET_CONTRABAND_WAREHOUSE_SIZE_TEXT_LABEL(GET_WAREHOUSE_SIZE(iWarehouseID)) ENDIF INT buyTimeRem = GET_CONTRABAND_BUY_COOLDOWN(iWarehouseID) INT iTimeFormat = ciTYPE_FORMAT_HIDDEN //If necessary grab the time remaining from the sell mission tuneable timer IF buyTimeRem <= 0 IF NOT GB_HAS_BUY_MISSION_TIMER_EXPIRED() buyTimeRem = g_sMPTunables.iexec_buy_fail_cooldown - ABSI(GET_TIME_DIFFERENCE(INT_TO_NATIVE(TIME_DATATYPE, GET_GAME_TIMER()), g_sGbWorkCoolDownVars.gbBuyCooldownTimer.Timer)) ENDIF ENDIF //Set the mission not available reason IF buyTimeRem > 0 iTimeFormat = ciTYPE_FORMAT_TIME NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_SC_ON_CD, i) ENDIF //Set the tooltip description string IF NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(i) != NC_TT_NONE tlDesc = GET_TOOL_TIP_TEXT_FOR_MISSION_UNAVAILABLE(NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(i), -1) tlDescSub = "" IF NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(i) = NC_TT_SC_FULL tlDescSub = tlWarehouseNameSub ENDIF ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_JOB") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlWarehouseName) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(buyTimeRem) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iTimeFormat) //Type format for param above: 0 = Hidden 1 = Cash 2 = Time //Build the description string IF IS_STRING_NULL_OR_EMPTY(tlDescSub) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlDesc) ELSE BEGIN_TEXT_COMMAND_SCALEFORM_STRING(tlDesc) ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(tlDescSub) IF NOT IS_STRING_NULL_OR_EMPTY(tlDescSub2) ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(tlDescSub2) ENDIF END_TEXT_COMMAND_SCALEFORM_STRING() ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bAvailable) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(-1) END_SCALEFORM_MOVIE_METHOD() ENDREPEAT OPEN_JOB_LIST_OVERLAY(NC_SPECIAL_CARGO, "HT_SC_MTW") SET_BIT(iBS, NC_BS_JOB_OVERLAY_ACTIVE) ENDPROC PROC SETUP_SPECIAL_CARGO_JOB_OVERLAY() CLEAR_JOB_LIST_OVERLAY_DATA() INT i //Store the active contraband type at the time of opening of the overlay eActiveContrabandType = g_eContrabandType IF IS_SPECIAL_CONTRABAND_ITEM_ACTIVE() SET_BIT(iBS, NC_BS_SPECIAL_ITEM_ACTIVE) PRINTLN(" SETUP_SPECIAL_CARGO_JOB_OVERLAY - Open overlay Specail item active for type: ", eActiveContrabandType) ELSE PRINTLN(" SETUP_SPECIAL_CARGO_JOB_OVERLAY - Open overlay for type: ", eActiveContrabandType) CLEAR_BIT(iBS, NC_BS_SPECIAL_ITEM_ACTIVE) ENDIF REPEAT CONTRABAND_LARGE i TEXT_LABEL_23 tlContrabandType = GET_NC_APP_CONTRABAND_TYPE_LABEL_FOR_SECURO_APP(eActiveContrabandType) CONTRABAND_SIZE eShipmentSize = INT_TO_ENUM(CONTRABAND_SIZE, (i + 1)) INT iShipmentCost = GET_CONTRABAND_SHIPMENT_COST(eShipmentSize) INT iShipmentSaleCost = -1 IF eShipmentSize = CONTRABAND_SMALL AND NC_APP_IS_SPECIAL_ITEM_ACTIVE_FOR_SPECIAL_CARGO() CONTRABAND_SPECIAL_ITEM eItem = GET_SPECIAL_ITEM_FROM_CONTRABAND_TYPE(eActiveContrabandType) IF IS_SPECIAL_CONTRABAND_ITEM_ON_SALE(eItem) iShipmentSaleCost = GET_SPECIAL_CONTRABAND_ITEM_COST(eItem) iShipmentCost = GET_SPECIAL_CONTRABAND_ITEM_BASE_COST(eItem) PRINTLN(" Special Contraband shipment available and on sale!") ELSE iShipmentCost = GET_SPECIAL_CONTRABAND_ITEM_COST(eItem) PRINTLN(" Special Contraband shipment available") ENDIF ELSE IF IS_CONTRABAND_SHIPMENT_ON_SALE(eShipmentSize) iShipmentSaleCost = iShipmentCost iShipmentCost = GET_CONTRABAND_BASE_SHIPMENT_COST(eShipmentSize) ENDIF ENDIF //Mission name TEXT_LABEL_15 tlShipmentSize = "HT_SC_T" tlShipmentSize += i //Description text label TEXT_LABEL_15 tlDesc = "HT_SC_D" tlDesc += i IF eShipmentSize = CONTRABAND_SMALL AND NC_APP_IS_SPECIAL_ITEM_ACTIVE_FOR_SPECIAL_CARGO() tlShipmentSize = "HT_SC_T3" tlDesc = "HT_SC_D3" tlContrabandType = "" ENDIF BOOL bAvailable = DOES_PLAYER_OWN_A_WAREHOUSE(PLAYER_ID()) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_JOB") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i) IF IS_STRING_NULL_OR_EMPTY(tlContrabandType) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlShipmentSize) ELSE BEGIN_TEXT_COMMAND_SCALEFORM_STRING(tlShipmentSize) ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(tlContrabandType) END_TEXT_COMMAND_SCALEFORM_STRING() ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iShipmentCost) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ciTYPE_FORMAT_CURRENCY) //Type format for param above: 0 = Hidden 1 = Cash 2 = Time IF eShipmentSize = CONTRABAND_SMALL AND NC_APP_IS_SPECIAL_ITEM_ACTIVE_FOR_SPECIAL_CARGO() SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlDesc) ELSE BEGIN_TEXT_COMMAND_SCALEFORM_STRING(tlDesc) ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(tlContrabandType) END_TEXT_COMMAND_SCALEFORM_STRING() ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bAvailable) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iShipmentSaleCost) END_SCALEFORM_MOVIE_METHOD() ENDREPEAT OPEN_JOB_LIST_OVERLAY(NC_SPECIAL_CARGO, "HT_SC_MT") SET_BIT(iBS, NC_BS_JOB_OVERLAY_ACTIVE) ENDPROC FUNC eSMUGGLED_GOODS_TYPE GET_SMUGGLED_GOOD_TYPE_FOR_APP_INDEX(INT iJobID) SWITCH iJobID CASE 0 RETURN eSGT_NARCOTICS CASE 1 RETURN eSGT_CHEMICALS CASE 2 RETURN eSGT_MEDICAL_SUPPLIES CASE 3 RETURN eSGT_ANIMAL_MATERIALS CASE 4 RETURN eSGT_ART_AND_ANTIQUES CASE 5 RETURN eSGT_JEWELRY_AND_GEMSTONES CASE 6 RETURN eSGT_TOBACCO_AND_ALCOHOL CASE 7 RETURN eSGT_COUNTERFEIT_GOODS CASE 8 RETURN eSGT_MIXED ENDSWITCH RETURN eSGT_INVALID ENDFUNC PROC SETUP_HANGAR_CARGO_JOB_OVERLAY() CLEAR_JOB_LIST_OVERLAY_DATA() INT i REPEAT ciTOTAL_HANGAR_GOODS_TYPES i //Mission name TEXT_LABEL_15 tlName = "HT_AF_T" tlName += i //Second string for localisation purposes TEXT_LABEL_15 tlNameL = "HT_AF_TD" tlNameL += i //Description text label TEXT_LABEL_15 tlDesc = "HT_AF_D" tlDesc += i BOOL bAvailable = DOES_PLAYER_OWN_A_HANGER(PLAYER_ID()) AND HAS_PLAYER_COMPLETED_HANGAR_SETUP(PLAYER_ID()) AND NOT IS_PLAYERS_HANGAR_CONTRABAND_STORAGE_FULL(PLAYER_ID()) INT iTimeFormat = ciTYPE_FORMAT_HIDDEN INT iBuyTimeRem = 0 eSMUGGLED_GOODS_TYPE eType = GET_SMUGGLED_GOOD_TYPE_FOR_APP_INDEX(i) INT iTypeIndex = ENUM_TO_INT(eType) IF eType != eSGT_MIXED AND SMUGGLER_HAS_STEAL_COOLDOWN_STARTED(eType) iBuyTimeRem = GET_TIME_REMAINING_FROM_SCRIPT_TIMER_IN_SECONDS(g_sSmugglerCDVars.stStealCoolDownTimer[iTypeIndex], g_sSmugglerCDVars.iStealCooldownTimes[iTypeIndex]) ENDIF IF iBuyTimeRem > 0 iTimeFormat = ciTYPE_FORMAT_TIME NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_SMUG_CD, i) tlDesc = "HT_JOB_CD_3" ELIF IS_PLAYERS_HANGAR_CONTRABAND_STORAGE_FULL(PLAYER_ID()) tlDesc = "HT_AF_P1_D2" NC_APP_SET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(NC_TT_SMUG_FULL, i) ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_JOB") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlName) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iBuyTimeRem) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iTimeFormat) IF iBuyTimeRem <= 0 SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlDesc) ELSE BEGIN_TEXT_COMMAND_SCALEFORM_STRING(tlDesc) ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(tlNameL) END_TEXT_COMMAND_SCALEFORM_STRING() ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bAvailable) END_SCALEFORM_MOVIE_METHOD() ENDREPEAT OPEN_JOB_LIST_OVERLAY(NC_AIR_FREIGHT, "HT_AF_MT") SET_BIT(iBS, NC_BS_JOB_OVERLAY_ACTIVE) ENDPROC //╒═════════════════════════════════════════════════════════════════════════════╕ //╞═════════════════════════════╡ Input handling ╞══════════════════════════════╡ //╘═════════════════════════════════════════════════════════════════════════════╛ PROC HANDLE_CANCEL_BUTTON_PRESS() IF NC_APP_IS_OVERLAY_OPEN() //Hide the currently shown overlay HIDE_OVERLAY() ELSE IF IS_BIT_SET(iBS, NC_BS_JOB_OVERLAY_SELECTED_SHIPMENT_SIZE) CLEAR_BIT(iBS, NC_BS_JOB_OVERLAY_SELECTED_SHIPMENT_SIZE) //Go back to the special cargo shipment size overlay SETUP_SPECIAL_CARGO_JOB_OVERLAY() ELIF IS_JOB_OVERLAY_VISIBLE() //Go back to the home page CLOSE_JOB_OVERLAY() ELIF eCurrentPage = PAGE_HOME PRINTLN(" [APP_CLOSE] Back pressed not closing the app. page: ", eCurrentPage) SCRIPT_CLEANUP() EXIT ELSE SCRIPT_CLEANUP() ENDIF ENDIF PLAY_SOUND_FRONTEND(-1, "Select_Mission_Cancel", "DLC_GR_MOC_Computer_Sounds") ENDPROC PROC PASS_INPUTS_TO_SCALEFORM() // bCursorInputProcessed = FALSE #IF IS_DEBUG_BUILD CLEAR_BIT(iBS, NC_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 IF IS_USING_CURSOR(FRONTEND_CONTROL) 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(ciINPUT_KEYBOARD_UP))) 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(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 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))) 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))) ENDIF 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) 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_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)) END_SCALEFORM_MOVIE_METHOD() 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) 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() 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)) 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) CPRINTLN(DEBUG_INTERNET," EXITING WEBSITE for Triangle press") SCRIPT_CLEANUP() ENDIF #IF IS_DEBUG_BUILD IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)) SCRIPT_CLEANUP() ENDIF #ENDIF ENDPROC //╒═════════════════════════════════════════════════════════════════════════════╕ //╞════════════════════════╡ Mission Launch Functions ╞═════════════════════════╡ //╘═════════════════════════════════════════════════════════════════════════════╛ FUNC BOOL BUY_SPECIAL_CARGO_MISSION(INT iWarehouseID, CONTRABAND_SIZE ShipmentSize, BOOL bSpecialItem, CONTRABAND_TYPE securoContraType, INT iMissionToLaunch) INT iResultSlot = GET_SAVE_SLOT_FOR_WAREHOUSE(iWarehouseID) TEXT_LABEL_15 tl_15ContrabandName = GET_WAREHOUSE_NAME(iWarehouseID) CPRINTLN(DEBUG_INTERNET, " BUY_SPECIAL_CARGO_MISSION: trying to purchase CONTRABAND #", iWarehouseID, " \"", tl_15ContrabandName, "\"") BOOL bSpeialItemSelected = FALSE INT iShipmentCost = GET_CONTRABAND_SHIPMENT_COST(ShipmentSize) IF bSpecialItem AND ShipmentSize = CONTRABAND_SMALL iShipmentCost = GET_SPECIAL_CONTRABAND_ITEM_COST(GET_SPECIAL_ITEM_FROM_CONTRABAND_TYPE(securoContraType)) bSpeialItemSelected = TRUE ENDIF CPRINTLN(DEBUG_INTERNET, " BUY_SPECIAL_CARGO_MISSION: purchase valid, attempting index #", iWarehouseID) //is it a debit or refund IF iShipmentCost > 0 //do they have enough money IF NOT NETWORK_CAN_SPEND_MONEY(iShipmentCost, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, " BUY_SPECIAL_CARGO_MISSION: purchase failed, player doesn't have sufficient cash") //TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ContrabandName), iShipmentCost) PLAY_SOUND_FRONTEND(-1, "Select_Mission_Unavailable", "DLC_GR_MOC_Computer_Sounds") RETURN FALSE ENDIF ENDIF // Check that mission is available IF NOT CAN_PLAYER_LAUNCH_MISSION(iMissionToLaunch) CPRINTLN(DEBUG_INTERNET, " BUY_SPECIAL_CARGO_MISSION: purchase failed, CAN_PLAYER_LAUNCH_MISSION = FALSE") PLAY_SOUND_FRONTEND(-1, "Select_Mission_Unavailable", "DLC_GR_MOC_Computer_Sounds") RETURN FALSE ENDIF IF USE_SERVER_TRANSACTIONS() /* BuyContrabandMission – This is used to fill/set the CATEGORY_INVENTORY_CONTRABAND_MISSION It deducts money for the ‘purchasing’ of the mission Basket will be < CATEGORY_INVENTORY_CONTRABAND_MISSION, CATEGORY_CONTRABAND_MISSION, price> Validation must make sure the player owns the warehouse this CATEGORY_INVENTORY_CONTRABAND_MISSION is associated with */ INT iItemId = GET_CONTRABAND_MISSION_KEY_FOR_CATALOGUE(TRUE, ENUM_TO_INT(ShipmentSize), bSpeialItemSelected, ENUM_TO_INT(GET_SPECIAL_ITEM_FROM_CONTRABAND_TYPE(securoContraType))) INT iInventoryKey = GET_CONTRABAND_MISSION_INVENTORY_KEY_FOR_CATALOGUE(iResultSlot) INT iProcessSuccess = -1 INT iTransactionStatus = SHOP_BASKET_STAGE_ADD BOOL bProcessingBasket = TRUE /////////////////////////////////////////// /// TRANSACTION FOR CONTRABAND WHILE PROCESSING_SECUROSERVE_CONTRABAND_BASKET(iProcessSuccess, iShipmentCost, iResultSlot, CATEGORY_INVENTORY_CONTRABAND_MISSION, NET_SHOP_ACTION_BUY_CONTRABAND_MISSION, iItemId, iInventoryKey, bProcessingBasket, iTransactionStatus) RENDER_NC_APP() WAIT(0) ENDWHILE SWITCH iProcessSuccess CASE 0 CWARNINGLN(DEBUG_INTERNET, " BUY_SPECIAL_CARGO_MISSION: failed to process transaction") PLAY_SOUND_FRONTEND(-1, "Select_Mission_Unavailable", "DLC_GR_MOC_Computer_Sounds") RETURN FALSE BREAK CASE 2 CPRINTLN(DEBUG_INTERNET, " BUY_SPECIAL_CARGO_MISSION: success!!") // Track this so we can add contraband if the mision was successful. SET_LAST_PURCHASED_BUY_MISSION_CATALOGUE_KEY(iItemId) BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " BUY_SPECIAL_CARGO_MISSION: unknown iProcessSuccess: \"", iProcessSuccess, "\"") BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, " BUY_SPECIAL_CARGO_MISSION: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, " BUY_SPECIAL_CARGO_MISSION: final:$", iShipmentCost) IF iShipmentCost >= 0 AND (iShipmentCost = 0 OR (iShipmentCost > 0 AND (USE_SERVER_TRANSACTIONS() OR NETWORK_CAN_SPEND_MONEY(iShipmentCost,FALSE,TRUE,FALSE)))) IF iShipmentCost > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, iShipmentCost) ENDIF IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_SHOPS, "[CASH] NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED - basket") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF NETWORK_BUY_CONTRABAND_MISSION(iShipmentCost, iWarehouseID, GET_HASH_KEY(tl_15ContrabandName), FALSE, TRUE) CPRINTLN(DEBUG_INTERNET, " BUY_SPECIAL_CARGO_MISSION: Bought contraband ", tl_15ContrabandName, " for $", iShipmentCost) IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF ENDIF RETURN TRUE ENDFUNC FUNC BOOL DO_HANGAR_SOURCE_CARGO_LAUNCH_MISSION_TRANSACTION() IF NOT USE_SERVER_TRANSACTIONS() RETURN TRUE ENDIF CONTRABAND_TRANSACTION_STATE eResult WHILE NOT PROCESS_TRANSACTION_FOR_HANGAR_CONTRABAND_MISSION(eResult, FALSE) RENDER_NC_APP() WAIT(0) ENDWHILE RENDER_NC_APP() RETURN (eResult = CONTRABAND_TRANSACTION_STATE_SUCCESS) ENDFUNC FUNC BOOL DO_FACTORY_LAUNCH_MISSION_TRANSACTION(FACTORY_ID eFactory, INT iMissionID) CPRINTLN(DEBUG_INTERNET, " DO_FACTORY_LAUNCH_MISSION_TRANSACTION: trying to launch mission for bunker: ", GET_OWNED_BUNKER(PLAYER_ID())) // Check that mission is available and the player is in an ok state to launch IF NOT CAN_PLAYER_LAUNCH_MISSION(iMissionID) CPRINTLN(DEBUG_INTERNET, " DO_FACTORY_LAUNCH_MISSION_TRANSACTION: purchase failed, mission not available") RETURN FALSE ENDIF CONTRABAND_TRANSACTION_STATE eTransactionState INT iSaveSlot = GET_SAVE_SLOT_FOR_FACTORY(eFactory) IF USE_SERVER_TRANSACTIONS() /* BuyContrabandMission This is used to fill/set the CATEGORY_INVENTORY_CONTRABAND_MISSION Basket will be < CATEGORY_INVENTORY_CONTRABAND_MISSION, CATEGORY_CONTRABAND_MISSION, price> Validation must make sure the player owns the factory this CATEGORY_INVENTORY_CONTRABAND_MISSION is associated with */ INT iItemId = GET_FACTORY_MISSION_KEY_FOR_CATALOGUE(FALSE) /////////////////////////////////////////// /// TRANSACTION FOR CONTRABAND WHILE NOT PROCESS_TRANSACTION_FOR_CONTRABAND_MISSION(iSaveSlot, iItemId, eTransactionState) WAIT(0) RENDER_NC_APP() ENDWHILE RENDER_NC_APP() IF eTransactionState = CONTRABAND_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, " DO_FACTORY_LAUNCH_MISSION_TRANSACTION: failed to process transaction") PLAY_SOUND_FRONTEND(-1, "Select_Mission_Unavailable", "DLC_GR_MOC_Computer_Sounds") NC_APP_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R6") RETURN FALSE ELIF eTransactionState = CONTRABAND_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, " DO_FACTORY_LAUNCH_MISSION_TRANSACTION: success!!") SET_LAST_PURCHASED_FACTORY_MISSION_CATALOGUE_KEY(iItemId) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, " DO_FACTORY_LAUNCH_MISSION_TRANSACTION: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF RETURN TRUE ENDFUNC FUNC BOOL CHECK_MP_VEH_STEAL_MISSION_AVAILABILITY() CPRINTLN(DEBUG_INTERNET, " LAUNCH_MP_VEH_STEAL_FROM_SECUROSERV: trying to steal vehicle") // Check that mission is available IF NOT GB_IS_BOSS_MISSION_AVAILABLE(PLAYER_ID(), FMMC_TYPE_VEHICLE_EXPORT_BUY , FALSE) CPRINTLN(DEBUG_INTERNET, " LAUNCH_MP_VEH_STEAL_FROM_SECUROSERV: purchase failed, mission not available") RETURN FALSE ENDIF IF GB_IS_PLAYER_CRITICAL_TO_JOB(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " LAUNCH_MP_VEH_STEAL_FROM_SECUROSERV: purchase failed, player is critical") RETURN FALSE ENDIF RETURN TRUE ENDFUNC FUNC BOOL LAUNCH_IE_STEAL_MISSION() //Check we are about to launch a mission with a valid vehicle that we don't own CHECK_IE_VEH_STEAL_LIST_FOR_OWNED_VEHICLES() IF GET_ACTIVE_IE_STEAL_MISSION_VEHICLE() = IE_VEH_INVALID //Shuffle the list SHUFFLE_IE_VEHICLE_LIST_FOR_STEAL_MISSIONS() //Make sure we don't start at a point in the list with an empty slot CHECK_IE_VEH_STEAL_LIST_FOR_OWNED_VEHICLES(TRUE) ENDIF CDEBUG1LN(DEBUG_INTERNET, "[Mission_Launch] LAUNCH_IE_STEAL_MISSION Requesting Mission: FMMC_TYPE_VEHICLE_EXPORT_BUY", " With vehicle: ", GET_STRING_FROM_IE_VEHICLE_ENUM(GET_ACTIVE_IE_STEAL_MISSION_VEHICLE())) IF GET_ACTIVE_IE_STEAL_MISSION_VEHICLE() != IE_VEH_INVALID AND CHECK_MP_VEH_STEAL_MISSION_AVAILABILITY() AND IE_DELIVERY_ACTIVATE_DROPOFF_OF_TYPE_FOR_GANG(VEHICLE_EXPORT_DROPOFF_GB_WAREHOUSE) //Get the mission vehicle IE_VEHICLE_ENUM eMissionVeh = GET_ACTIVE_IE_STEAL_MISSION_VEHICLE() //Launch the mission GB_BOSS_REQUEST_VEHICLE_EXPORT_MISSION_LAUNCH_FROM_SERVER(FMMC_TYPE_VEHICLE_EXPORT_BUY, eMissionVeh, IE_VEH_INVALID, IE_VEH_INVALID, IE_VEH_INVALID) //Set the active vehicle for the next steal mission INCREMENT_ACTIVE_IE_STEAL_MISSION_VEHICLE() RETURN TRUE ELSE #IF IS_DEBUG_BUILD IF GET_ACTIVE_IE_STEAL_MISSION_VEHICLE() = IE_VEH_INVALID CASSERTLN(DEBUG_INTERNET, " LAUNCH_IE_STEAL_MISSION Still trying to launch a mission with an invalid vehicle. This will not work!") ENDIF #ENDIF CDEBUG1LN(DEBUG_INTERNET, "[Mission_Launch] LAUNCH_IE_STEAL_MISSION Couldn't activate warehouse dropoff!") ENDIF RETURN FALSE ENDFUNC PROC SCALEFORM_UPDATE_COOLODOWN_TIMER(INT iIndex, INT iUpdatedTime) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_COOLDOWN") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iIndex) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iUpdatedTime) END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC UPDATE_JOB_OVERLAY_COOLDOWN_TIMERS(NC_MISSION_TYPE eMissionType) INT i, iCooldownTime NC_TT_JOB_NA_REASON eCooldownReason SWITCH eMissionType CASE NC_BOSS_WORK REPEAT MAX_WORKS_JOBS i iCooldownTime = GET_BOSS_WORK_OR_CHALLENGE_COOLDOWN_TIME_REMAINING(GET_FMMC_ID_FROM_JOB_ID(i)) IF IS_BOSS_WORK_OR_CHALLENGE_TIMER_RUNNING(GET_FMMC_ID_FROM_JOB_ID(i), eCooldownReason) SCALEFORM_UPDATE_COOLODOWN_TIMER(i, iCooldownTime) ENDIF ENDREPEAT BREAK CASE NC_SPECIAL_CARGO REPEAT GET_COUNT_OF_WAREHOUSES_OWNED() i iCooldownTime = GET_CONTRABAND_BUY_COOLDOWN(GET_WAREHOUSE_ID_FOR_SAVE_SLOT(i)) IF iCooldownTime <= 0 IF NOT GB_HAS_BUY_MISSION_TIMER_EXPIRED() iCooldownTime = g_sMPTunables.iexec_buy_fail_cooldown - ABSI(GET_TIME_DIFFERENCE(INT_TO_NATIVE(TIME_DATATYPE, GET_GAME_TIMER()), g_sGbWorkCoolDownVars.gbBuyCooldownTimer.Timer)) ENDIF ENDIF IF iCooldownTime >= 0 SCALEFORM_UPDATE_COOLODOWN_TIMER(i, iCooldownTime) ENDIF ENDREPEAT BREAK CASE NC_AIR_FREIGHT REPEAT (ciTOTAL_HANGAR_GOODS_TYPES - 1) i IF SMUGGLER_HAS_STEAL_COOLDOWN_STARTED(GET_SMUGGLED_GOOD_TYPE_FOR_APP_INDEX(i)) INT iTypeIndex iTypeIndex = ENUM_TO_INT(GET_SMUGGLED_GOOD_TYPE_FOR_APP_INDEX(i)) iCooldownTime = GET_TIME_REMAINING_FROM_SCRIPT_TIMER_IN_SECONDS(g_sSmugglerCDVars.stStealCoolDownTimer[iTypeIndex], g_sSmugglerCDVars.iStealCooldownTimes[iTypeIndex]) ELSE iCooldownTime = 0 ENDIF IF iCooldownTime >= 0 SCALEFORM_UPDATE_COOLODOWN_TIMER(i, iCooldownTime) ENDIF ENDREPEAT BREAK ENDSWITCH ENDPROC PROC UPDATE_JOB_OVERLAY_MISSION_LOCKED_REASONS(NC_MISSION_TYPE eMissionType) INT iFMMCID, iSlot, iWarehouseID, buyTimeRem BOOL bUpdate NC_TT_JOB_NA_REASON eCooldownReason NC_TT_JOB_NA_REASON eNewCooldownReason SWITCH eMissionType CASE NC_BOSS_WORK IF iJobUpdateStaggeredLoop = MAX_WORKS_JOBS iJobUpdateStaggeredLoop = 0 REINIT_NET_TIMER(stUpdateLockReasonsTimer) ELSE iFMMCID = GET_FMMC_ID_FROM_JOB_ID(iJobUpdateStaggeredLoop) eCooldownReason = NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(iJobUpdateStaggeredLoop) //Get the current unavailable reason IS_NC_BOSS_WORK_AVAILABLE(iJobUpdateStaggeredLoop, TRUE) IF IS_BOSS_WORK_OR_CHALLENGE_TIMER_RUNNING(iFMMCID, eNewCooldownReason) IF eNewCooldownReason != eCooldownReason bUpdate = TRUE ENDIF ELIF NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(iJobUpdateStaggeredLoop) != eCooldownReason bUpdate = TRUE ENDIF IF bUpdate SETUP_TRUCK_JOB_OVERLAY() REINIT_NET_TIMER(stUpdateLockReasonsTimer) iJobUpdateStaggeredLoop = 0 ELSE iJobUpdateStaggeredLoop ++ ENDIF ENDIF BREAK CASE NC_DRUG_CARGO IF iJobUpdateStaggeredLoop = ENUM_TO_INT(FACTORY_TYPE_WEAPONS) iJobUpdateStaggeredLoop = 0 REINIT_NET_TIMER(stUpdateLockReasonsTimer) ELSE eCooldownReason = NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(iJobUpdateStaggeredLoop) FACTORY_TYPE eType FACTORY_ID eFracotryID eType = INT_TO_ENUM(FACTORY_TYPE, iJobUpdateStaggeredLoop) IF DOES_PLAYER_OWN_FACTORY_OF_TYPE(PLAYER_ID(), eType) iSlot = GET_SAVE_SLOT_OF_OWNED_FACTORY_TYPE(PLAYER_ID(), eType) eFracotryID = GET_FACTORY_ID_FROM_FACTORY_SLOT(PLAYER_ID(), iSlot) SET_BIKER_MISSION_UNAVAILABLE_REASON(eFracotryID, iSlot, iJobUpdateStaggeredLoop) IF NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(iJobUpdateStaggeredLoop) != eCooldownReason bUpdate = TRUE ENDIF ENDIF IF bUpdate SETUP_BIKER_JOB_OVERLAY() REINIT_NET_TIMER(stUpdateLockReasonsTimer) iJobUpdateStaggeredLoop = 0 ELSE iJobUpdateStaggeredLoop ++ ENDIF ENDIF BREAK CASE NC_AIR_FREIGHT IF iJobUpdateStaggeredLoop =ciTOTAL_HANGAR_GOODS_TYPES iJobUpdateStaggeredLoop = 0 REINIT_NET_TIMER(stUpdateLockReasonsTimer) ELSE eSMUGGLED_GOODS_TYPE eType eType = GET_SMUGGLED_GOOD_TYPE_FOR_APP_INDEX(iJobUpdateStaggeredLoop) IF eType != eSGT_MIXED IF SMUGGLER_HAS_STEAL_COOLDOWN_STARTED(eType) bUpdate = (NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(iJobUpdateStaggeredLoop) != NC_TT_SMUG_CD) ELSE IF IS_PLAYERS_HANGAR_CONTRABAND_STORAGE_FULL(PLAYER_ID()) bUpdate = (NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(iJobUpdateStaggeredLoop) != NC_TT_SMUG_FULL) ELSE bUpdate = (NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(iJobUpdateStaggeredLoop) != NC_TT_NONE) ENDIF ENDIF ELSE bUpdate = (NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(iJobUpdateStaggeredLoop) != NC_TT_SMUG_FULL) ENDIF IF bUpdate SETUP_HANGAR_CARGO_JOB_OVERLAY() REINIT_NET_TIMER(stUpdateLockReasonsTimer) iJobUpdateStaggeredLoop = 0 ELSE iJobUpdateStaggeredLoop ++ ENDIF ENDIF BREAK CASE NC_SPECIAL_CARGO IF IS_BIT_SET(iBS, NC_BS_JOB_OVERLAY_SELECTED_SHIPMENT_SIZE) IF iJobUpdateStaggeredLoop = GET_COUNT_OF_WAREHOUSES_OWNED() iJobUpdateStaggeredLoop = 0 REINIT_NET_TIMER(stUpdateLockReasonsTimer) ELSE iWarehouseID = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(iJobUpdateStaggeredLoop) IF GET_WAREHOUSE_REMAINING_CAPACITY(iWarehouseID) < ENUM_TO_INT(eSelectedShipmentSize) bUpdate = (NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(iJobUpdateStaggeredLoop) != NC_TT_SC_FULL) ELSE bUpdate = (NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(iJobUpdateStaggeredLoop) = NC_TT_SC_FULL) ENDIF IF NOT bUpdate buyTimeRem = GET_CONTRABAND_BUY_COOLDOWN(iWarehouseID) IF buyTimeRem <= 0 IF NOT GB_HAS_BUY_MISSION_TIMER_EXPIRED() buyTimeRem = g_sMPTunables.iexec_buy_fail_cooldown - ABSI(GET_TIME_DIFFERENCE(INT_TO_NATIVE(TIME_DATATYPE, GET_GAME_TIMER()), g_sGbWorkCoolDownVars.gbBuyCooldownTimer.Timer)) ENDIF ENDIF IF (NC_APP_GET_TOOL_TIP_REASON_FOR_MISSION_WITH_INDEX(iJobUpdateStaggeredLoop) = NC_TT_SC_ON_CD) bUpdate = (buyTimeRem <= 0) ELSE bUpdate = (buyTimeRem > 0) ENDIF ENDIF IF bUpdate SETUP_SPECIAL_CARGO_WAREHOUSE_LIST_OVERLAY() REINIT_NET_TIMER(stUpdateLockReasonsTimer) iJobUpdateStaggeredLoop = 0 ELSE iJobUpdateStaggeredLoop ++ ENDIF ENDIF ENDIF BREAK DEFAULT iJobUpdateStaggeredLoop = 0 REINIT_NET_TIMER(stUpdateLockReasonsTimer) BREAK ENDSWITCH ENDPROC PROC UPDATE_JOB_OVERLAY_DATA(NC_MISSION_TYPE eMissionType) IF IS_BIT_SET(iBS, NC_BS_JOB_OVERLAY_ACTIVE) IF NOT NC_APP_IS_OVERLAY_OPEN() IF HAS_NET_TIMER_EXPIRED(stUpdateLockReasonsTimer, 1000) UPDATE_JOB_OVERLAY_MISSION_LOCKED_REASONS(eMissionType) ENDIF IF HAS_NET_TIMER_EXPIRED(stUpdateCDTimer, 500) UPDATE_JOB_OVERLAY_COOLDOWN_TIMERS(eMissionType) ENDIF ENDIF ELSE RESET_NET_TIMER(stUpdateLockReasonsTimer) iJobUpdateStaggeredLoop = 0 IF NOT GB_HAS_IE_MISSION_COOLDOWN_TIMER_EXPIRED(VEV_EYE_IN_THE_SKY) OR IS_BIT_SET(iBS, NC_BS_IE_COOLDOWN_RUNNING) IF HAS_NET_TIMER_EXPIRED(stUpdateCDTimer, 500) RESET_NET_TIMER(stUpdateCDTimer) UPDATE_PRIMARY_MISSION_WITH_ID(ENUM_TO_INT(NC_VEHICLE_CARGO)) IF GB_HAS_IE_MISSION_COOLDOWN_TIMER_EXPIRED(VEV_EYE_IN_THE_SKY) CLEAR_BIT(iBS, NC_BS_IE_COOLDOWN_RUNNING) ELSE SET_BIT(iBS, NC_BS_IE_COOLDOWN_RUNNING) ENDIF ENDIF ELSE RESET_NET_TIMER(stUpdateCDTimer) ENDIF ENDIF ENDPROC PROC LAUNCH_MISSION(INT iMissionID) IF iMissionID = FMMC_TYPE_GB_CONTRABAND_BUY BOOL bActivateSpecialItemMission = FALSE IF NC_APP_IS_SPECIAL_ITEM_ACTIVE_FOR_SPECIAL_CARGO() AND eSelectedShipmentSize = CONTRABAND_SMALL bActivateSpecialItemMission = TRUE ENDIF GB_BOSS_REQUEST_CONTRABAND_MISSION_LAUNCH_FROM_SERVER(iMissionID, iSelectedSCWarehouse, eSelectedShipmentSize, eActiveContrabandType, bActivateSpecialItemMission) ELIF iMissionID = FMMC_TYPE_SMUGGLER_BUY IF eSelectedHangarGoodsType = eSGT_MIXED PRINTLN(" LAUNCH_MISSION Mixed type not supported. Choosing random new type") eSelectedHangarGoodsType = INT_TO_ENUM(eSMUGGLED_GOODS_TYPE, GET_RANDOM_INT_IN_RANGE(0, ENUM_TO_INT(eSGT_MIXED))) GB_SET_GLOBAL_NON_BD_BIT0(eGB_GLOBAL_NON_BD_BITSET_0_LAUNCHED_SMUG_MISSION_WHIT_ANY_TYPE) ELSE GB_CLEAR_GLOBAL_NON_BD_BIT0(eGB_GLOBAL_NON_BD_BITSET_0_LAUNCHED_SMUG_MISSION_WHIT_ANY_TYPE) ENDIF PRINTLN(" LAUNCH_MISSION Requesting mission launch of type: ", iMissionID, " with goods type: ", DEBUG_GET_SMUGGLED_GOODS_TYPE_NAME(eSelectedHangarGoodsType)) GB_BOSS_REQUEST_SMUGGLER_MISSION_LAUNCH_FROM_SERVER(iMissionID, FREEMODE_DELIVERY_LOCATION_CITY, eSelectedHangarGoodsType) ELIF iMissionID = FMMC_TYPE_GUNRUNNING_BUY GB_BOSS_REQUEST_GUNRUNNING_MISSION_LAUNCH_FROM_SERVER(iMissionID) ELIF iMissionID = FMMC_TYPE_BIKER_BUY GB_BOSS_REQUEST_ILLICIT_GOODS_MISSION_LAUNCH_FROM_SERVER(iMissionID, eSelectedFactory) ELSE GB_BOSS_REQUEST_MISSION_LAUNCH_FROM_SERVER(iMissionID) ENDIF g_bLaunchedMissionFrmSMPLIntLaptop = TRUE SCRIPT_CLEANUP(DEFAULT, FALSE) ENDPROC //╒═════════════════════════════════════════════════════════════════════════════╕ //╞══════════════════════════╡ Input result Handling ╞══════════════════════════╡ //╘═════════════════════════════════════════════════════════════════════════════╛ PROC RUN_BOSS_WORK_MISSION_LAUNCH_CEHCKS(INT iJobID) INT iFMMCID = GET_FMMC_ID_FROM_JOB_ID(iJobID) IF NOT IS_NC_BOSS_WORK_AVAILABLE(iJobID) PLAY_CLICK_LINK_FAIL_SOUND() ELIF NOT CAN_PLAYER_LAUNCH_BOSS_WORK(iFMMCID) SHOW_OVERLAY("HT_BW_LT", NC_APP_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ELSE TEXT_LABEL_15 tlJob = "HT_BW_T" tlJob += iJobID SHOW_OVERLAY("HT_BW_LT", "HT_BW_L0", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, NCA_STAGE_CONFIRM_HACKER_WORKS_MISSION_LAUNCH, DEFAULT, DEFAULT, tlJob) SET_FMMC_MISSION_ID(iFMMCID) ENDIF ENDPROC PROC RUN_AIR_FREIGHT_MISSION_LAUNCH_CEHCKS(INT iJobID) eSelectedHangarGoodsType = GET_SMUGGLED_GOOD_TYPE_FOR_APP_INDEX(iJobID) IF IS_PLAYERS_HANGAR_CONTRABAND_STORAGE_FULL(PLAYER_ID()) //SHOW_OVERLAY("HT_AF_P1", "HT_AF_P1_D2", "OR_OVRLY_OK", "", TRUE, FALSE) //FAIL: We have 100% supplies already PLAY_CLICK_LINK_FAIL_SOUND() ELIF eSelectedHangarGoodsType != eSGT_MIXED AND SMUGGLER_HAS_STEAL_COOLDOWN_STARTED(eSelectedHangarGoodsType) //SHOW_OVERLAY("HT_AF_P1", "HT_AF_P1_D3", "OR_OVRLY_OK", "", TRUE, FALSE) //FAIL: We are on cooldown for this type PLAY_CLICK_LINK_FAIL_SOUND() ELIF NOT CAN_PLAYER_LAUNCH_MISSION(FMMC_TYPE_SMUGGLER_BUY) SHOW_OVERLAY("HT_AF_P1", NC_APP_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) //FAIL: Not available ELSE TEXT_LABEL_15 tlConfirm = "HAPP_STEAL_C1" TEXT_LABEL_15 tlConfirmSubString = "" IF eSelectedHangarGoodsType != eSGT_MIXED tlConfirm = "HAPP_STEAL_C0" tlConfirmSubString = GET_HANGAR_STOCK_TYPE_TEXT_LABEL(eSelectedHangarGoodsType) ENDIF SHOW_OVERLAY("HT_AF_P1", tlConfirm, "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, NCA_STAGE_CONFIRM_AIR_FREIGHT_MISSION_LAUNCH, DEFAULT, DEFAULT, tlConfirmSubString) ENDIF ENDPROC PROC RUN_SPECIAL_CARGO_MISSION_LAUNCH_CEHCKS(INT iSelectedOption) IF IS_BIT_SET(iBS, NC_BS_JOB_OVERLAY_SELECTED_SHIPMENT_SIZE) iSelectedSCWarehouse = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(iSelectedOption) IF NOT DOES_PLAYER_OWN_WAREHOUSE_THAT_HAS_SPACE_TO_STORE_A_SHIPMENT_OF_SIZE(eSelectedShipmentSize) //SHOW_OVERLAY("HT_SC_P1", "HT_SC_P1_D2", "OR_OVRLY_OK", "", TRUE, FALSE) PLAY_CLICK_LINK_FAIL_SOUND() ELIF IS_CONTRABAND_BUY_COOLDOWN_ACTIVE(iSelectedSCWarehouse) //SHOW_OVERLAY("HT_SC_P1", "HT_SC_P1_D3", "OR_OVRLY_OK", "", TRUE, FALSE) PLAY_CLICK_LINK_FAIL_SOUND() ELIF NOT CAN_PLAYER_LAUNCH_MISSION(FMMC_TYPE_GB_CONTRABAND_BUY) SHOW_OVERLAY("HT_SC_P1", NC_APP_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ELSE TEXT_LABEL_15 tlContrabandLabel = BUILD_BUY_MISSION_CONFIRM_STRING(eActiveContrabandType, eSelectedShipmentSize, NC_APP_IS_SPECIAL_ITEM_ACTIVE_FOR_SPECIAL_CARGO()) SHOW_OVERLAY("HT_SC_P2", tlContrabandLabel, "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, NCA_STAGE_CONFIRM_SPECIAL_CARGO_MISSION_LAUNCH) ENDIF ELSE eSelectedShipmentSize = INT_TO_ENUM(CONTRABAND_SIZE, (iSelectedOption + 1)) IF NOT DOES_PLAYER_OWN_A_WAREHOUSE(PLAYER_ID()) SHOW_OVERLAY("HT_SC_P1", "HT_SC_P1_D1", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF NOT DOES_PLAYER_OWN_WAREHOUSE_THAT_HAS_SPACE_TO_STORE_A_SHIPMENT_OF_SIZE(eSelectedShipmentSize) SHOW_OVERLAY("HT_SC_P1", "HT_SC_P1_D2", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SET_BIT(iBS, NC_BS_JOB_OVERLAY_SELECTED_SHIPMENT_SIZE) PRINTLN(" RUN_SPECIAL_CARGO_MISSION_LAUNCH_CEHCKS - Selected shipment size ", eSelectedShipmentSize, " calling SETUP_SPECIAL_CARGO_WAREHOUSE_LIST_OVERLAY") SETUP_SPECIAL_CARGO_WAREHOUSE_LIST_OVERLAY() PLAY_CLICK_LINK_SOUND() ENDIF ENDIF ENDPROC PROC RUN_VEHICLE_CARGO_MISSION_LAUNCH_CEHCKS() IF NOT GB_IS_BOSS_MISSION_AVAILABLE(PLAYER_ID(), FMMC_TYPE_VEHICLE_EXPORT_BUY, FALSE) INT iFailReason = GB_GET_BOSS_MISSION_UNAVAILABLE_REASON(PLAYER_ID(), FMMC_TYPE_VEHICLE_EXPORT_BUY, FALSE) IF iFailReason = GB_MU_REASON_BOSS_IS_ANIMAL SHOW_OVERLAY("HT_VC_P1", "BKR_TF_R6", "OR_OVRLY_OK", "", TRUE, FALSE) EXIT ELIF iFailReason = GB_MU_REASON_GOON_IS_ANIMAL IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) SHOW_OVERLAY("HT_VC_P1", "GENERAL_MLF_G1", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) SHOW_OVERLAY("HT_VC_P1", "GENERAL_MLF_G2", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SHOW_OVERLAY("HT_VC_P1", "GENERAL_MLF_G3", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF EXIT ELIF iFailReason = GB_MU_REASON_GOON_GAMBLING IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) SHOW_OVERLAY("HT_VC_P1", "GENERAL_MLF_G4", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) SHOW_OVERLAY("HT_VC_P1", "GENERAL_MLF_G5", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SHOW_OVERLAY("HT_VC_P1", "GENERAL_MLF_G6", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF EXIT ENDIF ENDIF IF NOT GB_HAS_IE_MISSION_COOLDOWN_TIMER_EXPIRED(VEV_EYE_IN_THE_SKY) SHOW_OVERLAY("HT_VC_P1", "SEC_V_STEAL_F", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF IS_PLAYERS_IE_GARAGE_FULL(PLAYER_ID(), GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID())) SHOW_OVERLAY("HT_VC_P1", "HT_VC_P1_D2", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SHOW_OVERLAY("SEC_VEH_STEAL", "SEC_VEH_STEALQ", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, NCA_STAGE_CONFIRM_VEHICLE_CARGO_MISSION_LAUNCH) ENDIF ENDPROC PROC RUN_WEAPONS_CARGO_MISSION_LAUNCH_CEHCKS() IF NOT HAS_PLAYER_COMPLETED_FACTORY_SETUP_MISSION(PLAYER_ID(), GET_OWNED_BUNKER(PLAYER_ID())) SHOW_OVERLAY("HT_GR_P1", "HT_GR_P1_D2", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF HAS_PLAYER_SUSPENDED_BUNKER_PRODUCTION() SHOW_OVERLAY("HT_GR_P1", "OR_RESUP_RES", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT] >= g_sMPTunables.iBIKER_RESUPPLY_LAUNCH_SUPPLIES_THRESHOLD //FAIL: We hav 100% supplies already SHOW_OVERLAY("HT_GR_P1", "OR_MIS_NA_B", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF IS_PAID_RESUPPLY_TIMER_RUNNING(BUNKER_SAVE_SLOT) //FAIL: We have already paid for a resupply SHOW_OVERLAY("HT_GR_P1", "OR_MIS_NA_C", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF NOT CAN_PLAYER_LAUNCH_MISSION(FMMC_TYPE_GUNRUNNING_BUY) //FAIL: Not available SHOW_OVERLAY("HT_GR_P1", NC_APP_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SHOW_OVERLAY("HT_GR_P1", "BU_STEAL_SUP", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, NCA_STAGE_CONFIRM_GUNRUNNING_MISSION_LAUNCH) ENDIF ENDPROC PROC RUN_DRUG_CARGO_MISSION_LAUNCH_CEHCKS(INT iJobID) FACTORY_TYPE eFactoryType = INT_TO_ENUM(FACTORY_TYPE, iJobID) IF DOES_PLAYER_OWN_FACTORY_OF_TYPE(PLAYER_ID(), eFactoryType) eSelectedFactory = GET_FACTORY_ID_OF_OWNED_FACTORY_TYPE(PLAYER_ID(), eFactoryType) INT iSaveSlot = GET_PLAYER_SAVE_SLOT_FOR_FACTORY(PLAYER_ID(), eSelectedFactory) IF NOT HAS_PLAYER_COMPLETED_FACTORY_SETUP_MISSION(PLAYER_ID(), eSelectedFactory) AND NOT IS_DELAY_PRODUCTION_TIMER_RUNNING(iSaveSlot) // TEXT_LABEL_15 tlBusinessType = GET_FACTORY_TYPE_PROPERTY_LABEL(eFactoryType) // SHOW_OVERLAY("HT_GR_P1", "HT_DW_P1_D5", "OR_OVRLY_OK", "", TRUE, FALSE, DEFAULT, DEFAULT, DEFAULT, tlBusinessType) PLAY_CLICK_LINK_FAIL_SOUND() ELIF HAS_PLAYER_SUSPENDED_BIKER_BUSINESS_PRODUCTION(PLAYER_ID(), eSelectedFactory) // TEXT_LABEL_15 tlBusinessType = GET_FACTORY_TYPE_PROPERTY_LABEL(eFactoryType) // SHOW_OVERLAY("HT_GR_P1", "HT_DW_P1_D6", "OR_OVRLY_OK", "", TRUE, FALSE, DEFAULT, DEFAULT, DEFAULT, tlBusinessType) PLAY_CLICK_LINK_FAIL_SOUND() ELIF g_iMaterialsTotalForFactory[GET_SAVE_SLOT_FOR_FACTORY(eSelectedFactory)] >= g_sMPTunables.iBIKER_RESUPPLY_LAUNCH_SUPPLIES_THRESHOLD //FAIL: We hav 100% supplies already //SHOW_OVERLAY("HT_DW_P1", "OR_MIS_NA_B", "OR_OVRLY_OK", "", TRUE, FALSE) PLAY_CLICK_LINK_FAIL_SOUND() ELIF IS_PAID_RESUPPLY_TIMER_RUNNING(GET_SAVE_SLOT_FOR_FACTORY(eSelectedFactory)) //FAIL: We have already paid for a resupply //SHOW_OVERLAY("HT_DW_P1", "OR_MIS_NA_C", "OR_OVRLY_OK", "", TRUE, FALSE) PLAY_CLICK_LINK_FAIL_SOUND() ELIF NOT CAN_PLAYER_LAUNCH_MISSION(FMMC_TYPE_BIKER_BUY) //FAIL: Not available SHOW_OVERLAY("HT_DW_P1", NC_APP_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ELSE TEXT_LABEL_15 tlBusinessType = GET_FACTORY_TYPE_PROPERTY_LABEL(eFactoryType, 1) SHOW_OVERLAY("HT_DW_P1", "HT_DW_P1_D4", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, NCA_STAGE_CONFIRM_DRUG_BUSINESS_MISSION_LAUNCH, DEFAULT, DEFAULT, tlBusinessType) ENDIF ELSE //TEXT_LABEL_15 tlBusinessType = GET_FACTORY_TYPE_PROPERTY_LABEL(eFactoryType) //SHOW_OVERLAY("HT_DW_P1", "HT_DW_P1_D3", "OR_OVRLY_OK", "", TRUE, FALSE, DEFAULT, DEFAULT, DEFAULT, tlBusinessType) PLAY_CLICK_LINK_FAIL_SOUND() ENDIF ENDPROC PROC RUN_INITIAL_MISSION_LAUNCH_CHECKS(NC_MISSION_TYPE eMissionType, INT iJobID) SWITCH eMissionType CASE NC_BOSS_WORK RUN_BOSS_WORK_MISSION_LAUNCH_CEHCKS(iJobID) BREAK CASE NC_AIR_FREIGHT RUN_AIR_FREIGHT_MISSION_LAUNCH_CEHCKS(iJobID) BREAK CASE NC_SPECIAL_CARGO RUN_SPECIAL_CARGO_MISSION_LAUNCH_CEHCKS(iJobID) BREAK CASE NC_VEHICLE_CARGO RUN_VEHICLE_CARGO_MISSION_LAUNCH_CEHCKS() BREAK CASE NC_WEAPONS_CARGO RUN_WEAPONS_CARGO_MISSION_LAUNCH_CEHCKS() BREAK CASE NC_DRUG_CARGO RUN_DRUG_CARGO_MISSION_LAUNCH_CEHCKS(iJobID) BREAK ENDSWITCH ENDPROC PROC HANDLE_ACCEPT_OVERLAY_PRESS() IF NC_APP_GET_APP_STAGE() != NCA_STAGE_IDLE PLAY_SOUND_FRONTEND(-1, "Select_Mission_Launch", "DLC_GR_MOC_Computer_Sounds") ENDIF SWITCH NC_APP_GET_APP_STAGE() CASE NCA_STAGE_CONFIRM_HACKER_WORKS_MISSION_LAUNCH IF IS_NC_BOSS_WORK_AVAILABLE(GET_JOB_ID_FROM_FMMC_ID(iMissionIDToLaunch)) AND CAN_PLAYER_LAUNCH_BOSS_WORK(iMissionIDToLaunch) GB_SET_PLAYER_GANG_BOSS_MISSION_VARIATION(iSelectedMissionSubVar) LAUNCH_MISSION(iMissionIDToLaunch) ELSE HIDE_OVERLAY() SHOW_OVERLAY("HT_BW_LT", "HT_BW_L1", "OR_OVRLY_OK", "", TRUE, FALSE) EXIT ENDIF BREAK CASE NCA_STAGE_CONFIRM_AIR_FREIGHT_MISSION_LAUNCH IF DO_HANGAR_SOURCE_CARGO_LAUNCH_MISSION_TRANSACTION() g_sSMUGGLER_Telemetry_data.m_FromHackerTruck = 1 LAUNCH_MISSION(FMMC_TYPE_SMUGGLER_BUY) ENDIF BREAK CASE NCA_STAGE_CONFIRM_SPECIAL_CARGO_MISSION_LAUNCH IF BUY_SPECIAL_CARGO_MISSION(iSelectedSCWarehouse, eSelectedShipmentSize, NC_APP_IS_SPECIAL_ITEM_ACTIVE_FOR_SPECIAL_CARGO(), eActiveContrabandType, FMMC_TYPE_GB_CONTRABAND_BUY) SET_BIT(g_SimpleInteriorData.iFifthBS, BS5_SIMPLE_INTERIOR_LAUNCHED_CARGO_MISSION_FROM_HACKER_TRUCK) LAUNCH_MISSION(FMMC_TYPE_GB_CONTRABAND_BUY) ENDIF BREAK CASE NCA_STAGE_CONFIRM_VEHICLE_CARGO_MISSION_LAUNCH IF IS_PLAYERS_IE_GARAGE_FULL(PLAYER_ID(), GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID())) SHOW_OVERLAY("HT_VC_P1", "SEC_V_STEAL_F", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF LAUNCH_IE_STEAL_MISSION() SET_BIT(g_SimpleInteriorData.iFifthBS, BS5_SIMPLE_INTERIOR_LAUNCHED_VEH_EXP_MISSION_FROM_HACKER_TRUCK) PRINTLN(" HANDLE_ACCEPT_OVERLAY_PRESS - Setting BS5_SIMPLE_INTERIOR_LAUNCHED_VEH_EXP_MISSION_FROM_HACKER_TRUCK") INCREMENT_TOTAL_NUM_STEAL_MISSIONS_STARTED() SET_PLAYER_IS_ON_IE_VEHICLE_STEAL_MISSION(TRUE) SCRIPT_CLEANUP() ELSE SHOW_OVERLAY("SEC_VEH_STEAL", "SEC_MISS_L_F", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE NCA_STAGE_CONFIRM_GUNRUNNING_MISSION_LAUNCH IF DO_FACTORY_LAUNCH_MISSION_TRANSACTION(GET_OWNED_BUNKER(PLAYER_ID()), FMMC_TYPE_GUNRUNNING_BUY) g_sGUNRUN_Telemetry_data.m_FromHackerTruck = 1 LAUNCH_MISSION(FMMC_TYPE_GUNRUNNING_BUY) INCREMENT_BIKER_BUY_MISSION_UNDERTAKEN_COUNT(BUNKER_SAVE_SLOT) ELSE SHOW_OVERLAY("HT_GR_P1", NC_APP_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE NCA_STAGE_CONFIRM_DRUG_BUSINESS_MISSION_LAUNCH IF DO_FACTORY_LAUNCH_MISSION_TRANSACTION(eSelectedFactory, FMMC_TYPE_BIKER_BUY) g_iResupplyingFactory = ENUM_TO_INT(eSelectedFactory) g_sBIK_Telemetry_data.m_FromHackerTruck = 1 LAUNCH_MISSION(FMMC_TYPE_BIKER_BUY) UPDATE_FACTORY_PRODUCTION_ACTIVE_STATE(GET_SAVE_SLOT_FOR_FACTORY(eSelectedFactory), !g_sMPtunables.bStopFactoryProductionOnMissions) INCREMENT_BIKER_BUY_MISSION_UNDERTAKEN_COUNT(GET_SAVE_SLOT_FOR_FACTORY(eSelectedFactory)) ENDIF BREAK CASE NCA_STAGE_IDLE PLAY_SOUND_FRONTEND(-1, "Select_Mission_Unavailable_OK", "DLC_GR_MOC_Computer_Sounds") BREAK ENDSWITCH HIDE_OVERLAY() ENDPROC //////////////////////////////////////////// /// Scaleform methods 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, NC_BS_WAITING_FOR_BUTTON_RETURN_VALUE) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_SELECTION") currentSelectionReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() SET_BIT(iBS, NC_BS_WAITING_FOR_BUTTON_RETURN_VALUE) ENDIF ENDIF ENDPROC PROC CHECK_BUTTON_PRESS() MAINTAIN_CHECKS_FOR_CURRENT_SELECTION_ID() IF IS_BIT_SET(iBS, NC_BS_WAITING_FOR_BUTTON_RETURN_VALUE) IF IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentSelectionReturnIndex) BH_BUTTON_INDEXES eButtonPressed = INT_TO_ENUM(BH_BUTTON_INDEXES, GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentSelectionReturnIndex)) PRINTLN(" CHECK_BUTTON_PRESS button press returned = ", DEBUG_GET_BUTTON_NAME(eButtonPressed), " ID: ", eButtonPressed) SWITCH eButtonPressed CASE BUTTON_OVERLAY_CANCEL HIDE_OVERLAY() PLAY_SOUND_FRONTEND(-1, "Select_Mission_Cancel", "DLC_GR_MOC_Computer_Sounds") BREAK CASE BUTTON_OVERLAY_ACCEPT HANDLE_ACCEPT_OVERLAY_PRESS() BREAK CASE BUTTON_LOGIN OPEN_PAGE(PAGE_HOME) PLAY_SOUND_FRONTEND(-1, "Log_In", "DLC_GR_MOC_Computer_Sounds") BREAK CASE BUTTON_HACKER_WORKS_MISSION IF IS_MISSION_TYPE_DISABLED_BY_TUNEABLE(NC_BOSS_WORK) SHOW_OVERLAY("HT_BW_LT", "HT_BW_DIS", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF GB_IS_LOCAL_PLAYER_BOSS_OF_A_GANG() NC_APP_SET_MISSION_TYPE(NC_BOSS_WORK) SETUP_TRUCK_JOB_OVERLAY() PLAY_CLICK_LINK_SOUND() ELSE SHOW_OVERLAY("HT_BW_LT", "HT_BW_L5", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE BUTTON_AIR_FREIGHT_MISSION IF IS_MISSION_TYPE_DISABLED_BY_TUNEABLE(NC_AIR_FREIGHT) SHOW_OVERLAY("HT_BW_LT", "HT_BW_DIS", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF MISSION_PC_DID_I_JOIN_A_PRIVATE_SESSION() SHOW_OVERLAY("HT_AF_P1", "NC_PRIV_SES_0", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF GB_IS_LOCAL_PLAYER_BOSS_OF_A_GANG() IF DOES_PLAYER_OWN_A_HANGER(PLAYER_ID()) IF HAS_PLAYER_COMPLETED_HANGAR_SETUP_MISSION(PLAYER_ID()) NC_APP_SET_MISSION_TYPE(NC_AIR_FREIGHT) SETUP_HANGAR_CARGO_JOB_OVERLAY() PLAY_CLICK_LINK_SOUND() ELSE SHOW_OVERLAY("HT_AF_P1", "HT_AF_P1_D4", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF ELSE SHOW_OVERLAY("HT_AF_P1", "HT_AF_P1_D1", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF ELSE SHOW_OVERLAY("HT_AF_P1", "HT_BW_L5", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE BUTTON_SPECIAL_CARGO_MISSION IF IS_MISSION_TYPE_DISABLED_BY_TUNEABLE(NC_SPECIAL_CARGO) SHOW_OVERLAY("HT_BW_LT", "HT_BW_DIS", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF MISSION_PC_DID_I_JOIN_A_PRIVATE_SESSION() SHOW_OVERLAY("HT_SC_P1", "NC_PRIV_SES_1", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF GB_IS_LOCAL_PLAYER_BOSS_OF_GANG_TYPE(GT_VIP) IF DOES_PLAYER_OWN_A_WAREHOUSE(PLAYER_ID()) NC_APP_SET_MISSION_TYPE(NC_SPECIAL_CARGO) SETUP_SPECIAL_CARGO_JOB_OVERLAY() PLAY_CLICK_LINK_SOUND() ELSE SHOW_OVERLAY("HT_SC_P1", "HT_SC_P1_D1", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF ELSE SHOW_OVERLAY("HT_BW_LT", "HT_BW_L11", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE BUTTON_VEHICLE_CARGO_MISSION IF IS_MISSION_TYPE_DISABLED_BY_TUNEABLE(NC_VEHICLE_CARGO) SHOW_OVERLAY("HT_BW_LT", "HT_BW_DIS", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF MISSION_PC_DID_I_JOIN_A_PRIVATE_SESSION() SHOW_OVERLAY("HT_VC_P1", "NC_PRIV_SES_2", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF GB_IS_LOCAL_PLAYER_BOSS_OF_GANG_TYPE(GT_VIP) IF DOES_PLAYER_OWN_AN_IE_GARAGE(PLAYER_ID()) NC_APP_SET_MISSION_TYPE(NC_VEHICLE_CARGO) RUN_INITIAL_MISSION_LAUNCH_CHECKS(NC_VEHICLE_CARGO, -1) ELSE SHOW_OVERLAY("HT_VC_P1", "HT_VC_P1_D1", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF ELSE SHOW_OVERLAY("HT_VC_P1", "HT_BW_L10", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE BUTTON_GUNRUNNING_MISSION IF IS_MISSION_TYPE_DISABLED_BY_TUNEABLE(NC_WEAPONS_CARGO) SHOW_OVERLAY("HT_BW_LT", "HT_BW_DIS", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF MISSION_PC_DID_I_JOIN_A_PRIVATE_SESSION() SHOW_OVERLAY("HT_GR_P1", "NC_PRIV_SES_3", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF GB_IS_LOCAL_PLAYER_BOSS_OF_A_GANG() IF DOES_PLAYER_OWN_A_BUNKER(PLAYER_ID()) NC_APP_SET_MISSION_TYPE(NC_WEAPONS_CARGO) RUN_INITIAL_MISSION_LAUNCH_CHECKS(NC_WEAPONS_CARGO, -1) ELSE SHOW_OVERLAY("HT_GR_P1", "HT_GR_P1_D1", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF ELSE SHOW_OVERLAY("HT_GR_P1", "HT_BW_L5", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE BUTTON_DRUG_BUSINESS_MISSION IF IS_MISSION_TYPE_DISABLED_BY_TUNEABLE(NC_DRUG_CARGO) SHOW_OVERLAY("HT_BW_LT", "HT_BW_DIS", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF MISSION_PC_DID_I_JOIN_A_PRIVATE_SESSION() SHOW_OVERLAY("HT_DW_P1", "NC_PRIV_SES_4", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF GB_IS_LOCAL_PLAYER_BOSS_OF_A_BIKER_GANG() IF DOES_PLAYER_OWN_A_BIKER_FACTORY(PLAYER_ID()) NC_APP_SET_MISSION_TYPE(NC_DRUG_CARGO) SETUP_BIKER_JOB_OVERLAY() PLAY_CLICK_LINK_SOUND() ELIF DOES_PLAYER_OWN_CLUBHOUSE(PLAYER_ID()) SHOW_OVERLAY("HT_DW_P1", "HT_DW_P1_D2", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SHOW_OVERLAY("HT_DW_P1", "HT_DW_P1_D1", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF ELSE SHOW_OVERLAY("HT_DW_P1", "HT_BW_L7", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE BUTTON_JOB1 CASE BUTTON_JOB2 CASE BUTTON_JOB3 CASE BUTTON_JOB4 CASE BUTTON_JOB5 CASE BUTTON_JOB6 CASE BUTTON_JOB7 CASE BUTTON_JOB8 CASE BUTTON_JOB9 INT iJobID iJobID = ENUM_TO_INT(eButtonPressed) - ENUM_TO_INT(BUTTON_JOB1) RUN_INITIAL_MISSION_LAUNCH_CHECKS(eCurrentMissionType, iJobID) BREAK ENDSWITCH CLEAR_BIT(iBS, NC_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_NC_APP_DIALOGUE_TUT_1) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_2) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_3) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_4) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_5) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_6) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_7) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_8) CPRINTLN(DEBUG_INTERNET, " HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED TRUE") RETURN TRUE ENDIF CPRINTLN(DEBUG_INTERNET, " HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED FALSE") RETURN FALSE ENDFUNC FUNC BOOL HAVE_ALL_INITIAL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() IF GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_1) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_2) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_3) CPRINTLN(DEBUG_INTERNET, " HAVE_ALL_INITIAL_DIALOGUE_TUTORIALS_BEEN_COMPLETED TRUE") RETURN TRUE ENDIF CPRINTLN(DEBUG_INTERNET, " HAVE_ALL_INITIAL_DIALOGUE_TUTORIALS_BEEN_COMPLETED FALSE") RETURN FALSE ENDFUNC FUNC STRING NC_TUT_GET_ROOT_LABEL(INT iTutorialID) SWITCH iTutorialID CASE 0 RETURN "PAIFM_APPINT" //Intro - Home CASE 1 RETURN "PAIFM_APPBL" //Main screen - Old jobs CASE 2 RETURN "PAIFM_APPCJ" //Main screen - Client jobs list CASE 3 RETURN "PAIFM_REMBL1" CASE 4 RETURN "PAIFM_REMBL2" CASE 5 RETURN "PAIFM_REMBL3" CASE 6 RETURN "PAIFM_REMBB1" CASE 7 RETURN "PAIFM_REMBB2" CASE 8 RETURN "PAIFM_REMBB3" ENDSWITCH CASSERTLN(DEBUG_SAFEHOUSE, "NC_TUT_GET_ROOT_LABEL: Invalid tutorial ID: ", iTutorialID) RETURN "PAIFM_APPINT" ENDFUNC PROC NC_APP_START_TUTORIAL_DIALOGUE(INT iTutorialID) IF CREATE_CONVERSATION(tutPedStruct, "PAIFMAU", NC_TUT_GET_ROOT_LABEL(iTutorialID), CONV_PRIORITY_HIGH) CPRINTLN(DEBUG_INTERNET, " Created tutorial converstion: ", iTutorialID) iTutorialDialogueID = -1 ENDIF ENDPROC PROC HUB_APP_RUN_TUTORIAL_DIALOGUE() //Start the dialogue IF iTutorialDialogueID != -1 NC_APP_START_TUTORIAL_DIALOGUE(iTutorialDialogueID) ENDIF ENDPROC FUNC BOOL SHOULD_APP_PLAY_NC_BUSINESS_REMINDER_DIALOGUE() IF GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_4) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_5) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_6) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_7) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_8) RETURN FALSE ENDIF RETURN TRUE ENDFUNC PROC INCREMENT_NC_BUSINESS_REMINDER_DIALOGUE_STAT() IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_4) SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_4, TRUE) EXIT ENDIF IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_5) SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_5, TRUE) EXIT ENDIF IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_6) SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_6, TRUE) EXIT ENDIF IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_7) SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_7, TRUE) EXIT ENDIF IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_8) SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_8, TRUE) EXIT ENDIF ENDPROC FUNC BOOL SHOULD_APP_PLAY_NC_BUSINESS_PURCHASE_REMINDER_DIALOGUE() IF GET_PLAYER_OWNED_BUSINESS_COUNT(PLAYER_ID()) = 0 RETURN NOT DOES_PLAYER_OWN_AN_IE_GARAGE(PLAYER_ID()) ENDIF RETURN FALSE ENDFUNC FUNC INT GET_BUSINESS_REMINDER_DIALOGUE_TUTORIAL_ID(BOOL bPurchaseDialogue) INT iMinTut = 3 INT iMaxTut = 6 IF bPurchaseDialogue iMinTut = 6 iMaxTut = 9 ENDIF RETURN GET_RANDOM_INT_IN_RANGE(iMinTut, iMaxTut) ENDFUNC PROC HUB_APP_SELECT_DIALOGUE_TUTORIAL() BOOL bStartNewDialogue IF NOT IS_BIT_SET(iBS, NC_BS_CURRENTLY_PLAYING_TUTORIAL) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF IS_BIT_SET(iBS, NC_BS_INITIAL_TUTORIAL_COMPLETE) IF IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, ENUM_TO_INT(eWTBS2_NC_BUSINESS_TUT)) OR IS_BIT_SET(iBS, NC_BS_DONE_BUSINESS_PURCHASE_TUT_THIS_BOOT) PRINTLN(" HUB_APP_SELECT_DIALOGUE_TUTORIAL - Setting NC_BS_DIALOGUE_TUTORIAL_COMPLETE for done business reminder. Purch this app boot? ", IS_BIT_SET(iBS, NC_BS_DONE_BUSINESS_PURCHASE_TUT_THIS_BOOT)) SET_BIT(iBS, NC_BS_DIALOGUE_TUTORIAL_COMPLETE) EXIT ELIF IS_BIT_SET(g_SimpleInteriorData.iForthBS, BS4_SIMPLE_INTERIOR_NC_DRAW_MISSIONS_SCREEN) IF NOT IS_BIT_SET(iBS, NC_BS_INITIAL_TUTORIAL_COMPLETE_THIS_BOOT) IF SHOULD_APP_PLAY_NC_BUSINESS_PURCHASE_REMINDER_DIALOGUE() IF NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, ENUM_TO_INT(eWTBS2_NC_BUSINESS_PURCHASE_TUT)) bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = GET_BUSINESS_REMINDER_DIALOGUE_TUTORIAL_ID(TRUE) PRINTLN(" HUB_APP_SELECT_DIALOGUE_TUTORIAL - Doing business purchase reminder") SET_BIT(g_iWebsiteTutorialDisplayedBS2, ENUM_TO_INT(eWTBS2_NC_BUSINESS_PURCHASE_TUT)) SET_BIT(iBS, NC_BS_DONE_BUSINESS_PURCHASE_TUT_THIS_BOOT) ELSE PRINTLN(" HUB_APP_SELECT_DIALOGUE_TUTORIAL - Skipping business purchase reminder for BS: ", eWTBS2_NC_BUSINESS_PURCHASE_TUT) SET_BIT(iBS, NC_BS_DONE_BUSINESS_PURCHASE_TUT_THIS_BOOT) ENDIF ELIF SHOULD_APP_PLAY_NC_BUSINESS_REMINDER_DIALOGUE() bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = GET_BUSINESS_REMINDER_DIALOGUE_TUTORIAL_ID(FALSE) INCREMENT_NC_BUSINESS_REMINDER_DIALOGUE_STAT() PRINTLN(" HUB_APP_SELECT_DIALOGUE_TUTORIAL - Doing business reminder") SET_BIT(g_iWebsiteTutorialDisplayedBS2, ENUM_TO_INT(eWTBS2_NC_BUSINESS_TUT)) ENDIF ENDIF ENDIF ELSE IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_1) //First login bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = 0 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_1, TRUE) ENDIF IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_2) AND NOT bStartNewDialogue //Collections page bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = 1 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_2, TRUE) ENDIF IF IS_BIT_SET(iBS, NC_BS_JOB_OVERLAY_ACTIVE) AND eCurrentMissionType = NC_BOSS_WORK AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_3) AND NOT bStartNewDialogue //Collections page bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = 2 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NC_APP_DIALOGUE_TUT_3, TRUE) ENDIF ENDIF ENDIF IF bStartNewDialogue SET_BIT(iBS, NC_BS_CURRENTLY_PLAYING_TUTORIAL) CPRINTLN(DEBUG_INTERNET, " HUB_APP_SELECT_DIALOGUE_TUTORIAL Running tutorial for: ", iTutorialHelpTime, " seconds. Tutorial ID: ", iTutorialDialogueID) ELIF IS_BIT_SET(iBS, NC_BS_CURRENTLY_PLAYING_TUTORIAL) IF NOT HAS_NET_TIMER_STARTED(stTutorialTimer) START_NET_TIMER(stTutorialTimer) CPRINTLN(DEBUG_INTERNET, " HUB_APP_SELECT_DIALOGUE_TUTORIAL Starting timer time: ", iTutorialHelpTime, " Tutorial ID: ", iTutorialDialogueID) ELIF HAS_NET_TIMER_EXPIRED(stTutorialTimer, iTutorialHelpTime) CLEAR_BIT(iBS, NC_BS_CURRENTLY_PLAYING_TUTORIAL) iTutorialHelpTime = 0 RESET_NET_TIMER(stTutorialTimer) CPRINTLN(DEBUG_INTERNET, " HUB_APP_SELECT_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, NC_BS_DIALOGUE_TUTORIAL_COMPLETE) ENDIF //The first three tutorials must have run before we try and play the business reminders IF HAVE_ALL_INITIAL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, NC_BS_INITIAL_TUTORIAL_COMPLETE) SET_BIT(iBS, NC_BS_INITIAL_TUTORIAL_COMPLETE_THIS_BOOT) ENDIF 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() OR IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE) CPRINTLN(DEBUG_INTERNET, " 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_SCREEN_FADING_OUT() PRINTLN(" Shutting down! External script is fading out the screen") SCRIPT_CLEANUP() ELIF AM_I_TRANSITION_SESSIONS_STARTING_ON_CALL() PRINTLN(" Shutting down! starting an on call job") SCRIPT_CLEANUP() ENDIF ENDPROC PROC NC_APP_SETUP_TUTORIAL_DIALOGUE() IF HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() PRINTLN(" NC_APP_SETUP_TUTORIAL_DIALOGUE setting NC_BS_DIALOGUE_TUTORIAL_COMPLETE") SET_BIT(iBS, NC_BS_DIALOGUE_TUTORIAL_COMPLETE) ELSE IF HAVE_ALL_INITIAL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() PRINTLN(" NC_APP_SETUP_TUTORIAL_DIALOGUE setting NC_BS_INITIAL_TUTORIAL_COMPLETE") SET_BIT(iBS, NC_BS_INITIAL_TUTORIAL_COMPLETE) ENDIF SET_USE_DLC_DIALOGUE(TRUE) ADD_PED_FOR_DIALOGUE(tutPedStruct, 2, NULL, "PAIGE") CPRINTLN(DEBUG_INTERNET, " NC_APP_SETUP_TUTORIAL_DIALOGUE ped added for dialogue") ENDIF ENDPROC PROC SCRIPT_INITALISE() RUN_CLEANUP_CHECKS() mov = REQUEST_SCALEFORM_MOVIE("hacker_truck_desktop") WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(mov)) WAIT(0) ENDWHILE HANG_UP_AND_PUT_AWAY_PHONE(TRUE) DISABLE_CELLPHONE(TRUE) Pause_Objective_Text() THEFEED_PAUSE() SET_BROWSER_OPEN(TRUE) // Default cleanup 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 //Store the active contraband type at the time of opening the app eActiveContrabandType = g_eContrabandType SEND_ALL_DATA_TO_SCALEFORM() START_NET_TIMER(stLoginAnimation) IF IS_PC_VERSION() SET_MULTIHEAD_SAFE(TRUE, TRUE, TRUE, TRUE) ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("GTAO_Computer_Screen_Active_Scene") START_AUDIO_SCENE("GTAO_Computer_Screen_Active_Scene") ENDIF //Once all the tutorial are complete we no longer need this function NC_APP_SETUP_TUTORIAL_DIALOGUE() //Hold for one frame before we move into the while loop WAIT(0) ENDPROC #IF IS_DEBUG_BUILD BOOL bRender = TRUE #ENDIF //FEATURE_BUSINESS_BATTLES //***********SCRIPT*********** SCRIPT PRINTLN(" started \"", GET_THIS_SCRIPT_NAME(), "\"") IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY("appBusinessHub")) > 1 PRINTLN(" Business hub app script already running! cleaning up.") SCRIPT_CLEANUP() ENDIF NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME() SCRIPT_INITALISE() /// main update loop WHILE IS_BROWSER_OPEN() RUN_CLEANUP_CHECKS() #IF IS_DEBUG_BUILD IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_1) bRender = !bRender PRINTLN(" bRender toggled to ", bRender) ENDIF #ENDIF IF NOT IS_BIT_SET(iBS, NC_BS_DIALOGUE_TUTORIAL_COMPLETE) HUB_APP_SELECT_DIALOGUE_TUTORIAL() HUB_APP_RUN_TUTORIAL_DIALOGUE() ENDIF //Update any activley displayed cooldowns UPDATE_JOB_OVERLAY_DATA(eCurrentMissionType) //Render the scaleform movie #IF IS_DEBUG_BUILD IF bRender #ENDIF RENDER_NC_APP() #IF IS_DEBUG_BUILD ENDIF #ENDIF //Pass control inputs to scaleform PASS_INPUTS_TO_SCALEFORM() //Handle the return values of player input CHECK_BUTTON_PRESS() //Prevent first person view behind the scenes: url:bugstar:4825468 DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE() IF HAS_NET_TIMER_STARTED(stLoginAnimation) AND HAS_NET_TIMER_EXPIRED(stLoginAnimation, 1800) SET_BIT(g_SimpleInteriorData.iForthBS, BS4_SIMPLE_INTERIOR_NC_DRAW_MISSIONS_SCREEN) eCurrentPage = PAGE_HOME 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.") ENDSCRIPT