///// appBunkerBusiness ///// Mark Richardson - 17/02/17 ///// Bunker app functionality USING "rage_builtins.sch" USING "globals.sch" USING "cellphone_public.sch" USING "commands_zone.sch" USING "menu_public.sch" USING "net_realty_biker_warehouse.sch" USING "net_gang_boss.sch" USING "net_simple_interior.sch" //***********Script CONSTS*********** //Local BS consts CONST_INT UA_BS_WAITING_FOR_BUTTON_RETURN_VALUE 0 CONST_INT UA_BS_OVERLAY_SCREEN_ACTIVE 1 CONST_INT UA_BS_SELECTED_SELL_CITY 2 CONST_INT UA_BS_SELECTED_SELL_COUNTRY 3 CONST_INT UA_BS_LAUNCHED_MISSION 4 CONST_INT UA_BS_PRINTED_PAUSE_MENU_ACTIVE 5 CONST_INT UA_BS_CURRENTLY_PLAYING_TUTORIAL 6 CONST_INT UA_BS_DIALOGUE_TUTORIAL_COMPLETE 7 CONST_INT UA_BS_DONE_SETUP_MISSION_HELP 8 CONST_INT UA_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP 9 CONST_INT UA_BS_HELP_TEXT_TUTORIAL_COMPLETE 10 CONST_INT UA_BS_CONTROLS_APP_CONTROLS_DISABLED 11 //Controls get disabled when we're running the FT research animation CONST_INT UA_BS_WAITING_FOR_APP_DIABLED_RESPONSE 12 CONST_INT UA_BS_FAST_TRACK_COMPLETE_OVERLAY_ACTIVE 13 CONST_INT UA_BS_FAST_TRACK_ALL_COMPLETE_OVERLAY_SHOWN 14 //Special overaly if the player fast tracks their final project CONST_INT UA_BS_FAST_TRACK_COST_OVERLAY_ACTIVE 15 //Tracking the research overlay to see if it ticks over > 100% CONST_INT ciINPUT_KEYBOARD_DOWN 300 CONST_INT ciINPUT_KEYBOARD_UP 301 //Button state consts CONST_INT UA_BUTTON_STATE_HIDDEN 0 CONST_INT UA_BUTTON_STATE_DISABLED 1 CONST_INT UA_BUTTON_STATE_ENABLED 2 //Research state consts (Used to avoid ENUM_TO_INT()) CONST_INT UA_RESEARCH_STATE_INACTIVE 0 CONST_INT UA_RESEARCH_STATE_LOCKED 1 CONST_INT UA_RESEARCH_STATE_UNLOCKED 2 //Enum for button indexes returned by SF ENUM UA_BUTTON_INDEXES BUTTON_OVERLAY_CANCEL = 0, BUTTON_OVERLAY_ACCEPT, BUTTON_NAV_SETUP, BUTTON_NAV_RESUPPLY, BUTTON_NAV_RESEARCH, BUTTON_NAV_STAFF, BUTTON_NAV_UPGRADES, BUTTON_NAV_SHUT_DOWN, BUTTON_NAV_RESTART, BUTTON_SELL_STOCK_COUNTRY, BUTTON_SELL_STOCK_CITY, BUTTON_BUY_SUPPLIES, BUTTON_STEAL_SUPPLIES, BUTTON_UPGRADE_1, BUTTON_UPGRADE_2, BUTTON_UPGRADE_3, BUTTON_STAFF_MANUFACTURING, BUTTON_STAFF_RESEARCH, BUTTON_STAFF_BOTH, BUTTON_RESEARCH, BUTTON_VIEW_UNLOCKS, BUTTON_NAV_SELL, BUTTON_UNLOCK_1, BUTTON_UNLOCK_2, BUTTON_UNLOCK_3, BUTTON_UNLOCK_4, BUTTON_UNLOCK_5, BUTTON_UNLOCK_6, BUTTON_SORT_UNLOCKS_ALL = 1000, BUTTON_SORT_UNLOCKS_UNLOCKED = 1001, BUTTON_SORT_UNLOCKS_LOCKED = 1002 ENDENUM //Enum for the current page ID ENUM UA_PAGE_ID PAGE_LOGIN = 0, PAGE_HOME, PAGE_RESUPPLY, PAGE_RESEARCH, PAGE_STAFF, PAGE_UPGRADES, PAGE_UNLOCKS, PAGE_SELL ENDENUM ENUM UA_APP_STAGE_ID UA_STAGE_IDLE = 0, //Overlay on screen stages UA_STAGE_CONFIRM_SETUP_LAUNCH, //Confirm the launch of a setup mission UA_STAGE_CONFIRM_SELL_LAUNCH, //Confirm the launch of a sell mission UA_STAGE_CONFIRM_BUY_LAUNCH, //Confirm the launch of a sell mission UA_STAGE_FAIL_OVERLAY, //Overlay screen for failed mission launches or transactions UA_STAGE_GANG_SIZE_WARNING, //Overlay screen warning the player to hire more gang members UA_STAGE_CONFIRM_SHUTDOWN, //Confirm business shutdown UA_STAGE_CONFIRM_STARTUP, //Confirm production restart UA_STAGE_CONFIRM_PAID_RESUPPLY, //Confirm the purhase of supplies instead of doing a steal mission UA_STAGE_CONFIRM_WEAPONS_PROD, //Confirm switch to weapons production UA_STAGE_CONFIRM_WEAPONS_RESEARCH, //Confirm switch to weapons research UA_STAGE_CONFIRM_MIXED_PROD, //Confirm switch to mixed production UA_STAGE_CONFIRM_PURCHASE_STAFF, //Confirm staff upgrade purchase UA_STAGE_CONFIRM_PURCHASE_SECURITY, //Confirm security upgrade purchase UA_STAGE_CONFIRM_PURCHASE_EQUIPMENT,//Confirm equipment upgrade purchase UA_STAGE_ONFIRM_FT_RESEARCH //Confirm fast track research progress ENDENUM //***********Script variables*********** INT iBS = 0 INT iTransactionState = -1 INT iCurrentMaterialTotal = 0 INT iCurrentProductTotal = 0 INT iCurrentResearchTotal = 0 INT iTutorialDialogueID = -1 INT iTutorialHelpTime = 0 INT iUATutorialBS1 = -1 INT iUATutorialBS2 = -1 INT iQuotedFTCost = 0 INT iQuotedResupplyCost = 0 STRING sMissionLanuchFailReason = "" FACTORY_ID eOwnedBunker = FACTORY_ID_INVALID UA_PAGE_ID eCurrentPage = PAGE_LOGIN UA_APP_STAGE_ID eCurrentStage = UA_STAGE_IDLE FACTORY_UPGRADE_ID eJustPurchasedUpgrade = UPGRADE_ID_INVALID CONTRABAND_TRANSACTION_STATE eTransactionState = CONTRABAND_TRANSACTION_STATE_DEFAULT CONTRABAND_TRANSACTION_STATE eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_DEFAULT BUNKER_RESEARCH_ITEMS eFTUnlockedItem = RESEARCH_ITEM_INVALID FACTORY_PRODUCTION_MODE eInitialProductionMode SCRIPT_TIMER stExitDelay SCRIPT_TIMER stTutorialTimer SCRIPT_TIMER stHelpTextTutorialTimer SCRIPT_TIMER stTransactionTO structPedsForConversation tutPedStruct //The Scaleform movie SCALEFORM_INDEX mov SCALEFORM_RETURN_INDEX currentSelectionReturnIndex SCALEFORM_RETURN_INDEX currentPageReturnIndex SCALEFORM_RETURN_INDEX AppIsDeactivatedReturnIndex //Control input variables INT iLeftX INT iLeftY INT iRightX INT iRightY //***********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, "Exit", "DLC_GR_Disruption_Logistics_Sounds") ENDIF IF IS_PC_VERSION() SET_MULTIHEAD_SAFE(FALSE, TRUE, TRUE, TRUE) ENDIF THEFEED_RESUME() FACTORY_PRODUCTION_MODE eCurrentProdMode = GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) IF IS_PC_VERSION() IF IS_AUDIO_SCENE_ACTIVE("GTAO_Computer_Screen_Active_Scene") STOP_AUDIO_SCENE("GTAO_Computer_Screen_Active_Scene") ENDIF ENDIF IF eInitialProductionMode != eCurrentProdMode TEXT_LABEL_15 tlProdTicker SWITCH eCurrentProdMode CASE PRODUCTION_MODE_GOODS tlProdTicker = "UA_TICK_MAN" BREAK CASE PRODUCTION_MODE_RESEARCH tlProdTicker = "UA_TICK_RES" BREAK CASE PRODUCTION_MODE_MIXED tlProdTicker = "UA_TICK_BOTH" BREAK ENDSWITCH PRINT_TICKER(tlProdTicker) ENDIF g_sBusAppManagement.iRenderHandShakeFC = -1 TERMINATE_THIS_THREAD() ENDPROC PROC PLAY_CLICK_LINK_SOUND() PLAY_SOUND_FRONTEND(-1, "Click_Link", "DLC_GR_Disruption_Logistics_Sounds") ENDPROC FUNC BOOL UA_IS_FAST_TRACK_OVERLAY_ACTIVE() RETURN IS_BIT_SET(iBS, UA_BS_FAST_TRACK_COMPLETE_OVERLAY_ACTIVE) ENDFUNC PROC UA_SET_FAST_TRACK_OVERLAY_ACTIVE_STATE(BOOL bActive) IF bActive PRINTLN(" UA_SET_FAST_TRACK_OVERLAY_ACTIVE_STATE - Active") SET_BIT(iBS, UA_BS_FAST_TRACK_COMPLETE_OVERLAY_ACTIVE) ELSE PRINTLN(" UA_SET_FAST_TRACK_OVERLAY_ACTIVE_STATE - Closed") CLEAR_BIT(iBS, UA_BS_FAST_TRACK_COMPLETE_OVERLAY_ACTIVE) ENDIF ENDPROC FUNC BOOL UA_ARE_CONTROLS_DISABLED() RETURN IS_BIT_SET(iBS, UA_BS_CONTROLS_APP_CONTROLS_DISABLED) ENDFUNC FUNC BOOL HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() IF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdFactoryData[BUNKER_SAVE_SLOT].iProductionStage > 0 OR IS_DELAY_PRODUCTION_TIMER_RUNNING(BUNKER_SAVE_SLOT) RETURN TRUE ENDIF RETURN FALSE ENDFUNC #IF IS_DEBUG_BUILD FUNC STRING DEBUG_GET_BUTTON_NAME(UA_BUTTON_INDEXES eButton) SWITCH eButton CASE BUTTON_OVERLAY_CANCEL RETURN "BUTTON_OVERLAY_CANCEL" CASE BUTTON_OVERLAY_ACCEPT RETURN "BUTTON_OVERLAY_ACCEPT" CASE BUTTON_NAV_SETUP RETURN "BUTTON_NAV_SETUP" CASE BUTTON_NAV_RESUPPLY RETURN "BUTTON_NAV_RESUPPLY" CASE BUTTON_NAV_RESEARCH RETURN "BUTTON_NAV_RESEARCH" CASE BUTTON_NAV_STAFF RETURN "BUTTON_NAV_STAFF" CASE BUTTON_NAV_UPGRADES RETURN "BUTTON_NAV_UPGRADES" CASE BUTTON_NAV_SHUT_DOWN RETURN "BUTTON_NAV_SHUT_DOWN" CASE BUTTON_NAV_RESTART RETURN "BUTTON_NAV_RESTART" CASE BUTTON_SELL_STOCK_COUNTRY RETURN "BUTTON_SELL_STOCK_COUNTRY" CASE BUTTON_SELL_STOCK_CITY RETURN "BUTTON_SELL_STOCK_CITY" CASE BUTTON_BUY_SUPPLIES RETURN "BUTTON_BUY_SUPPLIES" CASE BUTTON_STEAL_SUPPLIES RETURN "BUTTON_STEAL_SUPPLIES" CASE BUTTON_UPGRADE_1 RETURN "BUTTON_UPGRADE_1" CASE BUTTON_UPGRADE_2 RETURN "BUTTON_UPGRADE_2" CASE BUTTON_UPGRADE_3 RETURN "BUTTON_UPGRADE_3" CASE BUTTON_STAFF_MANUFACTURING RETURN "BUTTON_STAFF_MANUFACTURING" CASE BUTTON_STAFF_RESEARCH RETURN "BUTTON_STAFF_RESEARCH" CASE BUTTON_STAFF_BOTH RETURN "BUTTON_STAFF_BOTH" CASE BUTTON_RESEARCH RETURN "BUTTON_RESEARCH" CASE BUTTON_VIEW_UNLOCKS RETURN "BUTTON_VIEW_UNLOCKS" CASE BUTTON_NAV_SELL RETURN "BUTTON_NAV_SELL" CASE BUTTON_UNLOCK_1 RETURN "BUTTON_UNLOCK_1" CASE BUTTON_UNLOCK_2 RETURN "BUTTON_UNLOCK_2" CASE BUTTON_UNLOCK_3 RETURN "BUTTON_UNLOCK_3" CASE BUTTON_UNLOCK_4 RETURN "BUTTON_UNLOCK_4" CASE BUTTON_UNLOCK_5 RETURN "BUTTON_UNLOCK_5" CASE BUTTON_UNLOCK_6 RETURN "BUTTON_UNLOCK_6" CASE BUTTON_SORT_UNLOCKS_ALL RETURN "BUTTON_SORT_UNLOCKS_ALL" CASE BUTTON_SORT_UNLOCKS_UNLOCKED RETURN "BUTTON_SORT_UNLOCKS_UNLOCKED" CASE BUTTON_SORT_UNLOCKS_LOCKED RETURN "BUTTON_SORT_UNLOCKS_LOCKED" ENDSWITCH RETURN "***INVALID***" ENDFUNC FUNC STRING DEBUG_GET_PAGE_NAME(UA_PAGE_ID ePage) SWITCH ePage CASE PAGE_LOGIN RETURN "PAGE_LOGIN" CASE PAGE_HOME RETURN "PAGE_HOME" CASE PAGE_RESUPPLY RETURN "PAGE_RESUPPLY" CASE PAGE_RESEARCH RETURN "PAGE_RESEARCH" CASE PAGE_STAFF RETURN "PAGE_STAFF" CASE PAGE_UPGRADES RETURN "PAGE_UPGRADES" CASE PAGE_UNLOCKS RETURN "PAGE_UNLOCKS" CASE PAGE_SELL RETURN "PAGE_SELL" ENDSWITCH RETURN "***INVALID***" ENDFUNC FUNC STRING UNDERGROUND_ARMS_GET_APP_STAGE_DEBUG_NAME(UA_APP_STAGE_ID eStage) SWITCH eStage CASE UA_STAGE_IDLE RETURN "UA_STAGE_IDLE" CASE UA_STAGE_CONFIRM_SETUP_LAUNCH RETURN "UA_STAGE_CONFIRM_SETUP_LAUNCH" CASE UA_STAGE_CONFIRM_SELL_LAUNCH RETURN "UA_STAGE_CONFIRM_SELL_LAUNCH" CASE UA_STAGE_CONFIRM_BUY_LAUNCH RETURN "UA_STAGE_CONFIRM_BUY_LAUNCH" CASE UA_STAGE_FAIL_OVERLAY RETURN "UA_STAGE_FAIL_OVERLAY" CASE UA_STAGE_GANG_SIZE_WARNING RETURN "UA_STAGE_GANG_SIZE_WARNING" CASE UA_STAGE_CONFIRM_SHUTDOWN RETURN "UA_STAGE_CONFIRM_SHUTDOWN" CASE UA_STAGE_CONFIRM_STARTUP RETURN "UA_STAGE_CONFIRM_STARTUP" CASE UA_STAGE_CONFIRM_PAID_RESUPPLY RETURN "UA_STAGE_CONFIRM_PAID_RESUPPLY" CASE UA_STAGE_CONFIRM_WEAPONS_PROD RETURN "UA_STAGE_CONFIRM_WEAPONS_PROD" CASE UA_STAGE_CONFIRM_WEAPONS_RESEARCH RETURN "UA_STAGE_CONFIRM_WEAPONS_RESEARCH" CASE UA_STAGE_CONFIRM_MIXED_PROD RETURN "UA_STAGE_CONFIRM_MIXED_PROD" CASE UA_STAGE_CONFIRM_PURCHASE_STAFF RETURN "UA_STAGE_CONFIRM_PURCHASE_STAFF" CASE UA_STAGE_CONFIRM_PURCHASE_SECURITY RETURN "UA_STAGE_CONFIRM_PURCHASE_SECURITY" CASE UA_STAGE_CONFIRM_PURCHASE_EQUIPMENT RETURN "UA_STAGE_CONFIRM_PURCHASE_EQUIPMENT" CASE UA_STAGE_ONFIRM_FT_RESEARCH RETURN "UA_STAGE_ONFIRM_FT_RESEARCH" ENDSWITCH RETURN "****Invalid****" ENDFUNC #ENDIF PROC SWAP_INT(INT &a, INT &b, INT bSwap) b = a a = bSwap ENDPROC /// PURPOSE: /// Returns the current app stage FUNC UA_APP_STAGE_ID UNDERGROUND_ARMS_GET_APP_STAGE() RETURN eCurrentStage ENDFUNC /// PURPOSE: /// Sets the current app stage PROC UNDERGROUND_ARMS_SET_APP_STAGE(UA_APP_STAGE_ID eNewStage) IF eCurrentStage != eNewStage eCurrentStage = eNewStage PRINTLN(" UNDERGROUND_ARMS_SET_APP_STAGE Setting new stage to: ", UNDERGROUND_ARMS_GET_APP_STAGE_DEBUG_NAME(eNewStage)) ENDIF ENDPROC /// PURPOSE: /// Returns if the overlay screen is currently active FUNC BOOL UNDERGROUND_ARMS_IS_OVERLAY_OPEN() RETURN IS_BIT_SET(iBS, UA_BS_OVERLAY_SCREEN_ACTIVE) ENDFUNC PROC UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON(STRING sReason) sMissionLanuchFailReason = sReason #IF IS_DEBUG_BUILD PRINTLN(" UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON Setting new fail reason: ", GET_FILENAME_FOR_AUDIO_CONVERSATION(sReason)) #ENDIF ENDPROC PROC UNDERGROUND_ARMS_CLEAR_MISSION_LAUNCH_FAIL_REASON() sMissionLanuchFailReason = "" PRINTLN(" UNDERGROUND_ARMS_CLEAR_MISSION_LAUNCH_FAIL_REASON called.") ENDPROC FUNC STRING UNDERGROUND_ARMS_GET_MISSION_LAUNCH_FAIL_REASON() RETURN sMissionLanuchFailReason ENDFUNC PROC UNDERGROUND_ARMS_CLEAR_MISSION_LOCATION() CLEAR_BIT(iBS, UA_BS_SELECTED_SELL_COUNTRY) CLEAR_BIT(iBS, UA_BS_SELECTED_SELL_CITY) PRINTLN(" UNDERGROUND_ARMS_CLEAR_MISSION_LOCATION called.") ENDPROC PROC UNDERGROUND_ARMS_SET_SELL_MISSION_LOCATION(FREEMODE_DELIVERY_LOCATION eLocation) UNDERGROUND_ARMS_CLEAR_MISSION_LOCATION() IF eLocation = FREEMODE_DELIVERY_LOCATION_CITY SET_BIT(iBS, UA_BS_SELECTED_SELL_CITY) PRINTLN(" UNDERGROUND_ARMS_SET_SELL_MISSION_LOCATION new location = City") ELSE SET_BIT(iBS,UA_BS_SELECTED_SELL_COUNTRY) PRINTLN(" UNDERGROUND_ARMS_SET_SELL_MISSION_LOCATION new location = countryside") ENDIF ENDPROC FUNC FREEMODE_DELIVERY_LOCATION UNDERGROUND_ARMS_GET_SELL_MISSION_LOCATION() IF IS_BIT_SET(iBS, UA_BS_SELECTED_SELL_CITY) #IF IS_DEBUG_BUILD IF IS_BIT_SET(iBS, UA_BS_SELECTED_SELL_COUNTRY) CASSERTLN(DEBUG_INTERNET, "GET_SELL_MISSION_LOCATION Both locations set!") ENDIF #ENDIF RETURN FREEMODE_DELIVERY_LOCATION_CITY ELIF IS_BIT_SET(iBS, UA_BS_SELECTED_SELL_COUNTRY) #IF IS_DEBUG_BUILD IF IS_BIT_SET(iBS, UA_BS_SELECTED_SELL_CITY) CASSERTLN(DEBUG_INTERNET, "GET_SELL_MISSION_LOCATION Both locations set!") ENDIF #ENDIF RETURN FREEMODE_DELIVERY_LOCATION_COUNTRYSIDE ENDIF CASSERTLN(DEBUG_INTERNET, "GET_SELL_MISSION_LOCATION No locations set! Returning countryside mission") RETURN FREEMODE_DELIVERY_LOCATION_COUNTRYSIDE 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(), FMMC_TYPE_GB_CONTRABAND_BUY, FALSE) IF iReason = GB_MU_REASON_GOON_CRITICAL_TO_FME IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("UA_ML_F_GOON1") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("UA_ML_F_GOON2") ELSE UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("UA_ML_F_GOON3") ENDIF ELIF iReason = GB_MU_REASON_GOON_IS_ANIMAL IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G1") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G2") ELSE UNDERGROUND_ARMS_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()) UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G4") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G5") ELSE UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G6") ENDIF ELSE UNDERGROUND_ARMS_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") UNDERGROUND_ARMS_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") UNDERGROUND_ARMS_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") UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R3") RETURN FALSE ENDIF IF g_iFactorySetupDelayTimers[BUNKER_SAVE_SLOT] != 0 CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_LAUNCH_MISSION: NOPE! still waiting on the setup transaction") UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R6") RETURN FALSE ENDIF RETURN TRUE ENDFUNC PROC SHOW_OVERLAY(STRING sMessage, STRING sAcceptButtonLabel, STRING sCancelButtonLabel, BOOL bPlayFailSound, BOOL bPlayClickSound, INT iadditionalINT = -1, UA_APP_STAGE_ID eNewAppStage = UA_STAGE_IDLE, STRING sOptionalImageTXD = NULL, STRING sOptionalTitle = NULL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_OVERLAY") BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sMessage) IF iadditionalINT != -1 ADD_TEXT_COMPONENT_INTEGER(iadditionalINT) ENDIF END_TEXT_COMMAND_SCALEFORM_STRING() SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sAcceptButtonLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sCancelButtonLabel) IF NOT IS_STRING_NULL_OR_EMPTY(sOptionalImageTXD) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sOptionalImageTXD) ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(sOptionalTitle) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sOptionalTitle) ENDIF END_SCALEFORM_MOVIE_METHOD() IF bPlayClickSound PLAY_SOUND_FRONTEND(-1, "Click_Link", "DLC_GR_Disruption_Logistics_Sounds") ELIF bPlayFailSound PLAY_SOUND_FRONTEND(-1, "Click_Fail", "DLC_GR_Disruption_Logistics_Sounds") ENDIF UNDERGROUND_ARMS_SET_APP_STAGE(eNewAppStage) SET_BIT(iBS, UA_BS_OVERLAY_SCREEN_ACTIVE) CDEBUG1LN(DEBUG_INTERNET, " SHOW_OVERLAY with message: ", sMessage, " Accebt button: ", sAcceptButtonLabel, " Cancel button: ", sCancelButtonLabel, " image: ", sOptionalImageTXD, " title: ", sOptionalTitle) ENDPROC PROC UA_CALL_SCALEFORM_SET_RESEARCH(INT iResearchCost, INT iProgress, TEXT_LABEL_23 tlTexture, TEXT_LABEL_15 tlUpgradeDesc, TEXT_LABEL_15 tlUpgradeHead, INT iResearchState , INT iBasePrice ) PRINTLN(" UA_CALL_SCALEFORM_SET_RESEARCH state: ", iResearchState, " passing texture: ", tlTexture, " description: ", tlUpgradeDesc, " title: ", tlUpgradeHead, " Research progress: ", iProgress, "% cost: ", iResearchCost) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_RESEARCH") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iResearchCost) // Fast track cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iProgress) // research progress SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(tlTexture) // Texture to display SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iResearchState) // Current research state SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlUpgradeDesc) // Description overlayed onto the texture above SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlUpgradeHead) // Above image heading SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iBasePrice) // Fast track sale cost END_SCALEFORM_MOVIE_METHOD() ENDPROC FUNC TEXT_LABEL_23 GET_RESEARCH_UNLOCK_TXD(BUNKER_RESEARCH_ITEMS eResearchItem, BOOL bLockedVersion = FALSE) TEXT_LABEL_23 tlReturnTexture = "UA_UNLOCK_" tlReturnTexture += (ENUM_TO_INT(eResearchItem) + 1) IF bLockedVersion tlReturnTexture += "_LOCKED" ENDIF RETURN tlReturnTexture ENDFUNC FUNC TEXT_LABEL_15 GET_RESEARCH_UNLOCK_DESCRIPTION(BUNKER_RESEARCH_ITEMS eResearchItem, BOOL bLockedVersion = FALSE) TEXT_LABEL_15 tlReturnDesc = "RES_UNLCK_D_" tlReturnDesc += ENUM_TO_INT(eResearchItem) IF bLockedVersion tlReturnDesc = "RES_UNLCK_LCK_D" ENDIF RETURN tlReturnDesc ENDFUNC ///Special function to ask scaleform to display the newly unlocked research item after the fast track animation PROC SEND_BUNKER_RESEARCH_FT_UNLOCKED_ITEM_TO_SCALEFORM(BUNKER_RESEARCH_ITEMS eUnlockedItem) INT iResearchProgress = GET_FACTORY_RESEARCH_TOTAL_AS_PERCENTAGE(PLAYER_ID(), eOwnedBunker) INT iResearchState = UA_RESEARCH_STATE_UNLOCKED INT iCost = GET_BUNKER_RESEARCH_FT_COST(iCurrentResearchTotal, FALSE) INT iBasePrice = GET_BUNKER_RESEARCH_FT_COST(iCurrentResearchTotal, TRUE) TEXT_LABEL_23 tlCurrentUpgradeTexture = "" TEXT_LABEL_15 tlCurrentUpgradeDesc = "" TEXT_LABEL_15 tlCurrentUpgradeHead = "" IF eUnlockedItem = RESEARCH_ITEM_INVALID CASSERTLN(DEBUG_INTERNET, " SEND_BUNKER_RESEARCH_FT_UNLOCKED_ITEM_TO_SCALEFORM given invalid item") EXIT ENDIF tlCurrentUpgradeTexture = GET_RESEARCH_UNLOCK_TXD(eUnlockedItem) tlCurrentUpgradeDesc = "RES_UNLCK_FT_D2" tlCurrentUpgradeHead = "RES_NEXT_PROJ" IF iCost < iBasePrice SWAP_INT(iCost, iBasePrice, iBasePrice) ELSE iBasePrice = -1 ENDIF PRINTLN(" SEND_BUNKER_RESEARCH_FT_UNLOCKED_ITEM_TO_SCALEFORM callig research update for item: ", eUnlockedItem) UA_CALL_SCALEFORM_SET_RESEARCH(iCost, iResearchProgress, tlCurrentUpgradeTexture, tlCurrentUpgradeDesc, tlCurrentUpgradeHead, iResearchState , iBasePrice ) ENDPROC PROC ADD_INDIVIDUAL_RESEARCH_UNLOCK_TO_SF(BUNKER_RESEARCH_ITEMS eItem) INT iUnlocked = UA_BUTTON_STATE_ENABLED BOOL bUnlocked = IS_RESEARCH_ITEM_UNLOCKED(eItem) TEXT_LABEL_23 tlTexture = GET_RESEARCH_UNLOCK_TXD(eItem, !bUnlocked) TEXT_LABEL_15 tlTitle = "RES_UNLCK_T_" TEXT_LABEL_15 tlDesc = GET_RESEARCH_UNLOCK_DESCRIPTION(eItem, !bUnlocked) tlTitle += ENUM_TO_INT(eItem) IF NOT bUnlocked tlTitle = "RES_UNLCK_LCK" iUnlocked = UA_BUTTON_STATE_DISABLED ENDIF PRINTLN(" ADD_INDIVIDUAL_RESEARCH_UNLOCK_TO_SF - Adding: ", GET_RESEARCH_ITEM_NAME_FOR_DEBUG(eItem), " at index: ", eItem, " unlocked? ", bUnlocked, " label: ", tlTitle, " texture: ", tlTexture) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_RESEARCH_UNLOCKABLE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iUnlocked) // Button state SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(tlTexture) // texture SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlTitle) // Title SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlDesc) // Description SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eItem)) // Reference index - Used to update individual unlocks later END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC CLEAR_QUOTED_COSTS() IF iQuotedFTCost > 0 PRINTLN(" CLEAR_QUOTED_COSTS - clearing quoted FT cost") iQuotedFTCost = 0 ENDIF IF iQuotedResupplyCost > 0 PRINTLN(" CLEAR_QUOTED_COSTS - clearing quoted resupply cost") iQuotedResupplyCost = 0 ENDIF ENDPROC PROC HIDE_OVERLAY() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "HIDE_OVERLAY") END_SCALEFORM_MOVIE_METHOD() UNDERGROUND_ARMS_SET_APP_STAGE(UA_STAGE_IDLE) CLEAR_BIT(iBS, UA_BS_OVERLAY_SCREEN_ACTIVE) IF UA_IS_FAST_TRACK_OVERLAY_ACTIVE() UA_SET_FAST_TRACK_OVERLAY_ACTIVE_STATE(FALSE) IF eFTUnlockedItem != RESEARCH_ITEM_INVALID ADD_INDIVIDUAL_RESEARCH_UNLOCK_TO_SF(eFTUnlockedItem) eFTUnlockedItem = RESEARCH_ITEM_INVALID ENDIF //Show the special overlay if the player has unlocked all research items IF NOT IS_BIT_SET(iBS, UA_BS_FAST_TRACK_ALL_COMPLETE_OVERLAY_SHOWN) AND HAS_LOCAL_PLAYER_UNLOCKED_ALL_AVAILABLE_BUNKER_RESEARCH_ITEMS() SET_BIT(iBS, UA_BS_FAST_TRACK_ALL_COMPLETE_OVERLAY_SHOWN) UA_SET_FAST_TRACK_OVERLAY_ACTIVE_STATE(TRUE) SHOW_OVERLAY("UA_RES_DONE", "WHOUSE_CONF", "", FALSE, FALSE, DEFAULT, DEFAULT, "ua_research", "UA_RES_DONE_T") ENDIF ENDIF CLEAR_BIT(iBS, UA_BS_FAST_TRACK_COST_OVERLAY_ACTIVE) CLEAR_QUOTED_COSTS() CDEBUG1LN(DEBUG_INTERNET, " 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, UA_BS_PRINTED_PAUSE_MENU_ACTIVE) PRINTLN(", SET_INPUT_EXCLUSIVE_AND_ACTIVE called but IS_PAUSE_MENU_ACTIVE_EX returned true") SET_BIT(iBS, UA_BS_PRINTED_PAUSE_MENU_ACTIVE) ENDIF #ENDIF ENDIF ENDPROC PROC RENDER_BUNKER_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() g_sBusAppManagement.iRenderHandShakeFC = GET_FRAME_COUNT() ENDPROC FUNC BOOL DO_LAUNCH_MISSION_TRANSACTION(INT iMissionID) CPRINTLN(DEBUG_INTERNET, " DO_LAUNCH_MISSION_TRANSACTION: trying to launch mission for bunker: ", eOwnedBunker) BOOL bSelling = (iMissionID = FMMC_TYPE_GUNRUNNING_SELL) // 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, " SELL_MP_CONTRABAND_FROM_APP: purchase failed, mission not available") RETURN FALSE ENDIF 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 */ RESET_NET_TIMER(stTransactionTO) INT iItemId = GET_FACTORY_MISSION_KEY_FOR_CATALOGUE(bSelling) /////////////////////////////////////////// /// TRANSACTION FOR CONTRABAND WHILE NOT PROCESS_TRANSACTION_FOR_CONTRABAND_MISSION(BUNKER_SAVE_SLOT, iItemId, eTransactionState) WAIT(0) RENDER_BUNKER_APP() IF eTransactionState = CONTRABAND_TRANSACTION_STATE_DEFAULT IF NOT HAS_NET_TIMER_STARTED(stTransactionTO) START_NET_TIMER(stTransactionTO) ELIF HAS_NET_TIMER_EXPIRED(stTransactionTO, 7500) RESET_NET_TIMER(stTransactionTO) PRINTLN(" DO_LAUNCH_MISSION_TRANSACTION - Failed to start a transaction") UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R6") RETURN FALSE ENDIF ENDIF ENDWHILE RESET_NET_TIMER(stTransactionTO) RENDER_BUNKER_APP() IF eTransactionState = CONTRABAND_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, " DO_LAUNCH_MISSION_TRANSACTION: failed to process transaction") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") UNDERGROUND_ARMS_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R6") RETURN FALSE ELIF eTransactionState = CONTRABAND_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, " DO_LAUNCH_MISSION_TRANSACTION: success!!") SET_LAST_PURCHASED_FACTORY_MISSION_CATALOGUE_KEY(iItemId) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, " DO_LAUNCH_MISSION_TRANSACTION: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF RETURN TRUE ENDFUNC PROC DO_MISSION_LAUNCH_COMMON_FUNCTIONALITY() //DO_SCREEN_FADE_OUT(500) TRIGGER_EXIT_FROM_SIMPLE_INTERIOR_NOW() g_bLaunchedMissionFrmLaptop = TRUE g_sGUNRUN_Telemetry_data.m_FromHackerTruck = 0 SET_BIT(iBS, UA_BS_LAUNCHED_MISSION) ENDPROC PROC LAUNCH_MISSION(INT iMissionType, FREEMODE_DELIVERY_LOCATION eLocation) PRINTLN(" LAUNCH_MISSION Requesting mission launch of type: ", iMissionType, " with location: ", eLocation) GB_BOSS_REQUEST_GUNRUNNING_MISSION_LAUNCH_FROM_SERVER(iMissionType, eLocation) DO_MISSION_LAUNCH_COMMON_FUNCTIONALITY() ENDPROC /// PURPOSE: /// Does not use the standard function because of the new missions with a new FMMC type: REQUEST_LAUNCH_ANY_GUNRUNNING_RESUPPLY PROC LAUNCH_BUY_MISSION() PRINTLN(" LAUNCH_BUY_MISSION Requesting mission launch") REQUEST_LAUNCH_ANY_GUNRUNNING_RESUPPLY() DO_MISSION_LAUNCH_COMMON_FUNCTIONALITY() ENDPROC PROC HANDLE_CANCEL_BUTTON_PRESS() IF UA_ARE_CONTROLS_DISABLED() PRINTLN(" HANDLE_CANCEL_BUTTON_PRESS not allowing as HANDLE_CANCEL_BUTTON_PRESS is true") EXIT ENDIF CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_CANCEL))) IF eCurrentPage = PAGE_LOGIN OR eCurrentPage = PAGE_HOME IF NOT UNDERGROUND_ARMS_IS_OVERLAY_OPEN() SCRIPT_CLEANUP() ELSE CDEBUG1LN(DEBUG_INTERNET, " [APP_CLOSE] 2 Back pressed not closing the app. page: ", eCurrentPage, " overlay: ", UNDERGROUND_ARMS_IS_OVERLAY_OPEN()) ENDIF ELIF !UNDERGROUND_ARMS_IS_OVERLAY_OPEN() eCurrentPage = PAGE_HOME CDEBUG1LN(DEBUG_INTERNET, " [APP_CLOSE] Back pressed not closing the app. page: ", eCurrentPage) ENDIF IF UNDERGROUND_ARMS_IS_OVERLAY_OPEN() OR UA_IS_FAST_TRACK_OVERLAY_ACTIVE() HIDE_OVERLAY() ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Back", "DLC_Biker_Computer_Sounds") ENDPROC PROC PASS_INPUTS_TO_SCALEFORM() // bCursorInputProcessed = FALSE #IF IS_DEBUG_BUILD CLEAR_BIT(iBS, UA_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))) // bCursorInputProcessed = TRUE 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))) //bCursorInputProcessed = TRUE 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)) //bCursorInputProcessed = TRUE 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() // bCursorInputProcessed = TRUE 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() // IF NOT bUsingScrollWheel // bCursorInputProcessed = TRUE // ENDIF ENDIF IF (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y)) AND NOT IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) CPRINTLN(DEBUG_INTERNET," 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 FUNC INT GET_PERCENTAGE_AS_INT(INT a, INT b) RETURN CEIL((TO_FLOAT(a)/TO_FLOAT(b)) * 100) ENDFUNC PROC SEND_BUNKER_DATA_TO_SCALEFORM() VECTOR vBunkerLocation = GET_BUNKER_COORDS(eOwnedBunker) INT iProductPercentage = GET_PRODUCT_TOTAL_FOR_FACTORY(PLAYER_ID(), eOwnedBunker) INT iResearchTotal = GET_FACTORY_RESEARCH_TOTAL_AS_PERCENTAGE(PLAYER_ID(), eOwnedBunker) INT iSuppliesLevel = g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT] FACTORY_STATUS eStatus = GET_FACTORY_STATUS(eOwnedBunker) STRING sBunkerName = GET_FACTORY_NAME_FROM_ID(eOwnedBunker) TEXT_LABEL_23 tlBunkerTexture = "UA_BUNKER_TXD_" FACTORY_PRODUCTION_MODE eProductionMode = GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) tlBunkerTexture += ENUM_TO_INT(eOwnedBunker - FACTORY_ID_BUNKER_1) INT iActiveCharachterSlot = GET_ACTIVE_CHARACTER_SLOT() INT iSellUndertakenForLS = GET_BIKER_SELL_UNDERTAKEN_FOR_LS(iActiveCharachterSlot, BUNKER_SAVE_SLOT) INT iSellMissionsCompletedLS = GET_BIKER_SELL_COMPLETE_FOR_LS(iActiveCharachterSlot, BUNKER_SAVE_SLOT) INT iSellUndertakenForBC = GET_BIKER_SELL_UNDERTAKEN_FOR_BC(iActiveCharachterSlot, BUNKER_SAVE_SLOT) INT iSellMissionsCompletedBC = GET_BIKER_SELL_COMPLETE_FOR_BC(iActiveCharachterSlot, BUNKER_SAVE_SLOT) INT iBuyMissionsCompleted = GET_BIKER_RESUPPLY_COMPLETE_TOTAL_FOR_FACTORY(iActiveCharachterSlot, BUNKER_SAVE_SLOT) INT iBuyMissionsUndertaken = GET_BIKER_RESUPPLY_UNDERTAKEN_TOTAL_FOR_FACTORY(iActiveCharachterSlot, BUNKER_SAVE_SLOT) INT iSellSuccessLS = GET_PERCENTAGE_AS_INT(iSellMissionsCompletedLS, iSellUndertakenForLS) INT iSellSuccessBC = GET_PERCENTAGE_AS_INT(iSellMissionsCompletedBC, iSellUndertakenForBC) INT iBuySuccess = GET_PERCENTAGE_AS_INT(iBuyMissionsCompleted, iBuyMissionsUndertaken) INT iEarnings = GET_BIKER_MISSION_EARNINGS(eOwnedBunker) //Clamp the values just in case iProductPercentage = CLAMP_INT(iProductPercentage, 0, 100) iResearchTotal = CLAMP_INT(iResearchTotal, 0, 100) iSuppliesLevel = CLAMP_INT(iSuppliesLevel, 0, 100) iBuySuccess = CLAMP_INT(iBuySuccess, 0, 100) iSellSuccessBC = CLAMP_INT(iSellSuccessBC, 0, 100) iSellSuccessLS = CLAMP_INT(iSellSuccessLS, 0, 100) //url:bugstar:3588917 - Bunker Business App - Location of the Chumash bunker is listed as Pacific Ocean IF eOwnedBunker = FACTORY_ID_BUNKER_12 vBunkerLocation = <<-3101.2871, 1362.6764, 19.2333>> ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_STATS") SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(GET_PLAYER_NAME(PLAYER_ID())) // username SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(GB_GET_PLAYER_ORGANIZATION_NAME_AS_A_STRING(PLAYER_ID())) // organization name SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(tlBunkerTexture) // reference to bunker image SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sBunkerName) // Bunker name SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_NAME_OF_ZONE(vBunkerLocation)) // location SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eStatus)) // status SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iProductPercentage) // stock level (percent) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iResearchTotal) // research progress (percent) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSuppliesLevel) // supplies level (percent) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iEarnings) // total earnings SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellMissionsCompletedLS + iSellMissionsCompletedBC) // total sales SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iBuySuccess) // resupply success rate (percent) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellSuccessBC) // sell success rate BC (percent) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellSuccessLS) // sell success rate LS (percent) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(BUNKER_GET_NUMBER_OF_WEAPONS_MANUFACTURED()) // num units manufactured SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_LOCAL_PLAYER_COUNT_OF_RESEARCH_ITEMS_UNLOCKED()) // num research unlocked SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_COUNT_OF_RESEARCH_ITEMS_AVAILABLE_TO_LOCAL_PLAYER()) // num research total SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eProductionMode)) // Staff distribution END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SET_SELL_PRICES() INT iProductQuantity = GET_PRODUCT_TOTAL_FOR_FACTORY(PLAYER_ID(), eOwnedBunker) INT iTotalProductValue = GET_FACTORY_TOTAL_PRODUCT_VALUE(PLAYER_ID(), eOwnedBunker, iProductQuantity, TRUE #IF IS_DEBUG_BUILD , TRUE #ENDIF) FLOAT fModifiedProdValueBC = (TO_FLOAT(iTotalProductValue) * g_sMPTunables.FGR_SELL_PRODUCT_LOCAL_MODIFIER) FLOAT fModifiedProdValue = (TO_FLOAT(iTotalProductValue) * g_sMPTunables.FGR_SELL_PRODUCT_FAR_MODIFIER) INT iProdValue = ROUND(fModifiedProdValueBC) INT iProdValueCity = ROUND(fModifiedProdValue) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_SELL_PRICES") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iProdValueCity) // Sell to the city product value SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iProdValue) // Sell to BC product value END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SET_RESUPPLY_STATE() INT iResupplyCost = GET_FACTORY_PAID_RESUPPLY_COST(FALSE, g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT], TRUE) INT iBasePrice = GET_FACTORY_PAID_RESUPPLY_COST(TRUE, g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT], TRUE) IF iResupplyCost < iBasePrice SWAP_INT(iResupplyCost, iBasePrice, iBasePrice) ELSE iBasePrice = -1 ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_RESUPPLIES") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iResupplyCost) // resupply cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(UA_BUTTON_STATE_ENABLED) // resupply button state SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(UA_BUTTON_STATE_ENABLED) // steal button state SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iBasePrice) END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SEND_BUNKER_UPGRADES_DATA_TO_SCALEFORM() INT iEquipmentUpgrCost = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_EQUIPMENT, eOwnedBunker) INT iStaffUpgrCost = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_STAFF, eOwnedBunker) INT iSecurityUpgrCost = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_SECURITY, eOwnedBunker) INT iEquipmentUpgrBaseCost = g_sMPTunables.iGR_BUNKER_GUNRUNNING_BUSINESS_UPGRADES_EQUIPMENT_UPGRADE_BASE INT iSecurityUpgrBaseCost = g_sMPTunables.iGR_BUNKER_GUNRUNNING_BUSINESS_UPGRADES_SECURITY_UPGRADE_BASE INT iStaffUpgrBaseCost = g_sMPTunables.iGR_BUNKER_GUNRUNNING_BUSINESS_UPGRADES_STAFF_UPGRADE_BASE //If we own the upgrades pass -1 to show a purchased text label instead of the price IF DOES_PLAYER_OWN_FACTORY_UPGRADE(PLAYER_ID(), eOwnedBunker, UPGRADE_ID_EQUIPMENT) iEquipmentUpgrCost = -1 iEquipmentUpgrBaseCost = -1 ELSE IF iEquipmentUpgrCost < iEquipmentUpgrBaseCost SWAP_INT(iEquipmentUpgrCost, iEquipmentUpgrBaseCost, iEquipmentUpgrBaseCost) ELSE iEquipmentUpgrBaseCost = -1 ENDIF ENDIF IF DOES_PLAYER_OWN_FACTORY_UPGRADE(PLAYER_ID(), eOwnedBunker, UPGRADE_ID_STAFF) iStaffUpgrCost = -1 iStaffUpgrBaseCost = -1 ELSE IF iStaffUpgrCost < iStaffUpgrBaseCost SWAP_INT(iStaffUpgrCost, iStaffUpgrBaseCost, iStaffUpgrBaseCost) ELSE iStaffUpgrBaseCost = -1 ENDIF ENDIF IF DOES_PLAYER_OWN_FACTORY_UPGRADE(PLAYER_ID(), eOwnedBunker, UPGRADE_ID_SECURITY) iSecurityUpgrCost = -1 iSecurityUpgrBaseCost = -1 ELSE IF iSecurityUpgrCost < iSecurityUpgrBaseCost SWAP_INT(iSecurityUpgrCost, iSecurityUpgrBaseCost, iSecurityUpgrBaseCost) ELSE iSecurityUpgrBaseCost = -1 ENDIF ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_UPGRADES") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iEquipmentUpgrCost) // upgrade 1 cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(UA_BUTTON_STATE_ENABLED) // upgrade 1 button state SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iStaffUpgrCost) // upgrade 2 cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(UA_BUTTON_STATE_ENABLED) // upgrade 2 button state SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSecurityUpgrCost) // upgrade 3 cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(UA_BUTTON_STATE_ENABLED) // upgrade 3 button state SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iEquipmentUpgrBaseCost) // upgrade 1 sale price SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iStaffUpgrBaseCost) // upgrade 2 sale price SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSecurityUpgrBaseCost) // upgrade 3 sale price END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SEND_BUNKER_RESEARCH_STATE_TO_SCALEFORM() INT iResearchProgress = GET_FACTORY_RESEARCH_TOTAL_AS_PERCENTAGE(PLAYER_ID(), eOwnedBunker) INT iResearchState = UA_RESEARCH_STATE_INACTIVE INT iCost = GET_BUNKER_RESEARCH_FT_COST(iCurrentResearchTotal) INT iBasePrice = GET_BUNKER_RESEARCH_FT_COST(iCurrentResearchTotal, TRUE) TEXT_LABEL_23 tlCurrentUpgradeTexture = "" TEXT_LABEL_15 tlCurrentUpgradeDesc = "RES_UNLCK_FT_D1" TEXT_LABEL_15 tlCurrentUpgradeHead = "RES_UNLCK_LCK" BUNKER_RESEARCH_ITEMS eCurrentResearchItem = GET_RESEARCH_ITEM_IN_PROGRESS() IF iCost < iBasePrice SWAP_INT(iCost, iBasePrice, iBasePrice) ELSE iBasePrice = -1 ENDIF IF eCurrentResearchItem = RESEARCH_ITEM_INVALID //Set the texture and description tlCurrentUpgradeDesc = "DL_NO_PROJECT_D" tlCurrentUpgradeHead = "DL_NO_PROJECT_T" ELIF iResearchProgress = 0 AND GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) = PRODUCTION_MODE_GOODS //Set the texture and description tlCurrentUpgradeDesc = "RES_UNLCK_FT_D5" tlCurrentUpgradeHead = "DL_NO_PROJECT_T" ELIF iResearchProgress < 100 IF iResearchProgress <= 0 tlCurrentUpgradeHead = "RES_NEXT_PROJ" IF GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) = PRODUCTION_MODE_GOODS tlCurrentUpgradeDesc = "RES_UNLCK_FT_D3" ELSE tlCurrentUpgradeDesc = "RES_UNLCK_FT_D2" ENDIF ELSE IF GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) = PRODUCTION_MODE_GOODS tlCurrentUpgradeDesc = "RES_UNLCK_FT_D4" ENDIF tlCurrentUpgradeHead = "RES_CUR_PROJ" ENDIF iResearchState = UA_RESEARCH_STATE_LOCKED tlCurrentUpgradeTexture = "UA_UNLOCK_" tlCurrentUpgradeTexture += (ENUM_TO_INT(eCurrentResearchItem) + 1) ELIF iResearchProgress >= 100 iResearchState = UA_RESEARCH_STATE_UNLOCKED tlCurrentUpgradeTexture = "UA_UNLOCK_" tlCurrentUpgradeDesc = "RES_UNLCK_D_" tlCurrentUpgradeHead = "RES_CUR_PROJ" tlCurrentUpgradeDesc += ENUM_TO_INT(eCurrentResearchItem) tlCurrentUpgradeTexture += (ENUM_TO_INT(eCurrentResearchItem) + 1) ENDIF PRINTLN(" SEND_BUNKER_RESEARCH_STATE_TO_SCALEFORM callig research update for item: ", eCurrentResearchItem) UA_CALL_SCALEFORM_SET_RESEARCH(iCost, iResearchProgress, tlCurrentUpgradeTexture, tlCurrentUpgradeDesc, tlCurrentUpgradeHead, iResearchState , iBasePrice ) ENDPROC PROC ADD_RESEARCH_UNLOCKABLES_TO_SF() INT i REPEAT RESEARCH_ITEM_MAX i IF NOT BLOCK_RESEARCH_ITEM(INT_TO_ENUM(BUNKER_RESEARCH_ITEMS, i)) ADD_INDIVIDUAL_RESEARCH_UNLOCK_TO_SF(INT_TO_ENUM(BUNKER_RESEARCH_ITEMS, i)) ENDIF ENDREPEAT ENDPROC FUNC INT GET_BUTTON_STATE_INT(UA_BUTTON_INDEXES eButton) SWITCH eButton CASE BUTTON_NAV_SETUP IF HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() RETURN UA_BUTTON_STATE_HIDDEN ELSE RETURN UA_BUTTON_STATE_ENABLED ENDIF BREAK CASE BUTTON_SELL_STOCK_CITY IF NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() RETURN UA_BUTTON_STATE_DISABLED ENDIF BREAK CASE BUTTON_SELL_STOCK_COUNTRY IF NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() RETURN UA_BUTTON_STATE_DISABLED ENDIF BREAK CASE BUTTON_NAV_RESTART IF NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() OR NOT HAS_PLAYER_SUSPENDED_BUNKER_PRODUCTION() RETURN UA_BUTTON_STATE_HIDDEN ENDIF BREAK CASE BUTTON_NAV_SHUT_DOWN IF NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() OR HAS_PLAYER_SUSPENDED_BUNKER_PRODUCTION() RETURN UA_BUTTON_STATE_HIDDEN ENDIF BREAK CASE BUTTON_NAV_UPGRADES IF NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() RETURN UA_BUTTON_STATE_HIDDEN ENDIF BREAK CASE BUTTON_NAV_RESEARCH IF NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() RETURN UA_BUTTON_STATE_HIDDEN ELIF HAS_PLAYER_SUSPENDED_BUNKER_PRODUCTION() RETURN UA_BUTTON_STATE_DISABLED ENDIF BREAK CASE BUTTON_NAV_STAFF IF NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() RETURN UA_BUTTON_STATE_HIDDEN ENDIF BREAK CASE BUTTON_NAV_RESUPPLY IF NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() RETURN UA_BUTTON_STATE_HIDDEN ELIF HAS_PLAYER_SUSPENDED_BUNKER_PRODUCTION() RETURN UA_BUTTON_STATE_DISABLED ENDIF BREAK CASE BUTTON_NAV_SELL IF NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() RETURN UA_BUTTON_STATE_HIDDEN ELIF GET_FACTORY_PRODUCT_TOTAL_AS_PERCENTAGE(eOwnedBunker, PLAYER_ID()) <= 0 RETURN UA_BUTTON_STATE_DISABLED ENDIF BREAK CASE BUTTON_RESEARCH IF NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() OR GET_FACTORY_RESEARCH_TOTAL_AS_PERCENTAGE(PLAYER_ID(), eOwnedBunker) < 1 OR GET_FACTORY_RESEARCH_TOTAL_AS_PERCENTAGE(PLAYER_ID(), eOwnedBunker) > 99 OR UA_ARE_CONTROLS_DISABLED() RETURN UA_BUTTON_STATE_DISABLED ENDIF BREAK CASE BUTTON_BUY_SUPPLIES IF NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() OR g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT] >= g_sMPTunables.iBIKER_RESUPPLY_LAUNCH_SUPPLIES_THRESHOLD RETURN UA_BUTTON_STATE_DISABLED ENDIF BREAK ENDSWITCH RETURN UA_BUTTON_STATE_ENABLED ENDFUNC PROC UPDATE_BUTTON_ENABLED_STATE() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_BUTTON_STATES") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_BUTTON_STATE_INT(BUTTON_NAV_SETUP)) // setup SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_BUTTON_STATE_INT(BUTTON_NAV_RESUPPLY)) // resupply SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_BUTTON_STATE_INT(BUTTON_NAV_RESEARCH)) // research SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_BUTTON_STATE_INT(BUTTON_NAV_STAFF)) // staff SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_BUTTON_STATE_INT(BUTTON_NAV_UPGRADES)) // upgrades SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_BUTTON_STATE_INT(BUTTON_NAV_SHUT_DOWN)) // shut down SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_BUTTON_STATE_INT(BUTTON_NAV_RESTART)) // restart SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_BUTTON_STATE_INT(BUTTON_NAV_SELL)) // sell BC SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_BUTTON_STATE_INT(BUTTON_RESEARCH)) // Fast track research SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_BUTTON_STATE_INT(BUTTON_BUY_SUPPLIES)) // Buy supplies END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SEND_ALL_DATA_TO_SCALEFORM(BOOL bInitalise = FALSE) //Base data SEND_BUNKER_DATA_TO_SCALEFORM() //Resupply mission availablity SET_RESUPPLY_STATE() //Upgrades stats SEND_BUNKER_UPGRADES_DATA_TO_SCALEFORM() //Sell prices SET_SELL_PRICES() //Current research state SEND_BUNKER_RESEARCH_STATE_TO_SCALEFORM() //Add unlockable items IF bInitalise ADD_RESEARCH_UNLOCKABLES_TO_SF() ENDIF //Enable relevant buttons UPDATE_BUTTON_ENABLED_STATE() ENDPROC //////////////////////////////////////////// /// Scaleform methods PROC SHOW_PAGE(UA_PAGE_ID eNewPage) IF eCurrentPage != eNewPage CDEBUG1LN(DEBUG_INTERNET, " SHOW_PAGE setting page to: ", DEBUG_GET_PAGE_NAME(eNewPage), " from: ", DEBUG_GET_PAGE_NAME(eCurrentPage)) eCurrentPage = eNewPage BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_SCREEN") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eNewPage)) END_SCALEFORM_MOVIE_METHOD() ENDIF ENDPROC FUNC BOOL IS_ACCEPT_BUTTON_INPUT_JUST_PRESSED() IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC MAINTAIN_CHECKS_FOR_CURRENT_SELECTION_ID() IF IS_ACCEPT_BUTTON_INPUT_JUST_PRESSED() IF NOT IS_BIT_SET(iBS, UA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_SELECTION") currentSelectionReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_SCREEN_ID") currentPageReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() SET_BIT(iBS, UA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) ENDIF ENDIF ENDPROC FUNC BOOL RUN_TRANSACTION_FOR_BUNKER_UPGRADE(FACTORY_UPGRADE_ID eUpgrade) BOOL bSuccess = TRUE BOOL bDeleteTransaction = TRUE TEXT_LABEL_63 tlUpgradeName //Grab the item hash GENERATE_FACTORY_MOD_KEY_FOR_CATALOGUE(tlUpgradeName, FACTORY_TYPE_WEAPONS, eUpgrade, 1) INT iItemCost = GET_FACTORY_UPGRADE_COST(eUpgrade, eOwnedBunker) INT iUpgradeID = ENUM_TO_INT(eUpgrade) INT iInventoryKey = GET_FACTORY_MOD_INVENTORY_KEY_FOR_CATALOGUE(BUNKER_SAVE_SLOT, (iUpgradeID + 1)) //+ 1 because 0 will give us the setup mission key INT iItemHash = GET_HASH_KEY(tlUpgradeName) CDEBUG1LN(DEBUG_INTERNET, " RUN_TRANSACTION_FOR_BUNKER_UPGRADE: Purchase upgrade: ", eUpgrade, " Inventory Key: ", iInventoryKey, " Item Hash: ", iItemHash) IF USE_SERVER_TRANSACTIONS() bSuccess = FALSE WHILE NOT PROCESS_GENERIC_ITEM_TRANSACTION(CATEGORY_INVENTORY_WAREHOUSE_INTERIOR, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemHash, 1, iItemCost, iTransactionState, iInventoryKey) WAIT(0) RENDER_BUNKER_APP() PRINTLN(" RUN_TRANSACTION_FOR_BUNKER_UPGRADE - Processing transaction") IF iTransactionState = GENERIC_TRANSACTION_STATE_PENDING AND GET_BASKET_TRANSACTION_SCRIPT_INDEX() = -1 iTransactionState = GENERIC_TRANSACTION_STATE_FAILED CDEBUG1LN(DEBUG_SAFEHOUSE, " RUN_TRANSACTION_FOR_BUNKER_UPGRADE - Transaction failed due to index = -1. Unable to purchase upgrade: ", eUpgrade) bDeleteTransaction = FALSE BREAKLOOP ENDIF ENDWHILE RENDER_BUNKER_APP() IF (iTransactionState = GENERIC_TRANSACTION_STATE_SUCCESS) PRINTLN(" RUN_TRANSACTION_FOR_BUNKER_UPGRADE - Transaction success") bSuccess = TRUE ELSE PRINTLN(" RUN_TRANSACTION_FOR_BUNKER_UPGRADE - Transaction fail") ENDIF iTransactionState = GENERIC_TRANSACTION_STATE_DEFAULT ENDIF IF bSuccess IF iItemCost > 0 SPEND_BUSINESS_PROPERTY data data.m_businessID = GET_HASH_KEY(GET_FACTORY_NAME_FROM_ID(eOwnedBunker)) data.m_businessType = ENUM_TO_INT(FACTORY_TYPE_WEAPONS) data.m_businessUpgradeType = ENUM_TO_INT(eUpgrade) PRINTLN(" RUN_TRANSACTION_FOR_BUNKER_UPGRADE - item cost: ",iItemCost) PRINTLN(" RUN_TRANSACTION_FOR_BUNKER_UPGRADE - Call NETWORK_SPENT_UPGRADE_BUSINESS_PROPERTY") NETWORK_SPENT_UPGRADE_BUSINESS_PROPERTY(iItemCost,data, FALSE, TRUE) ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF RETURN TRUE ENDIF IF bDeleteTransaction AND USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF RETURN FALSE ENDFUNC FUNC BOOL RUN_REMOVE_RESEARCH_TRANSACTION() INT iStatMaterialsTotal = GET_MP_INT_CHARACTER_STAT(GET_STAT_ENUM_FOR_FACTORY_MATERIALS_TOTAL_SLOT(BUNKER_SAVE_SLOT)) INT iMaterialToRemove = (iStatMaterialsTotal - g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT]) INT iMaterialsUsedByMixedProd = CALCULATE_MATERIAL_USED_SO_FAR(BUNKER_SAVE_SLOT, eOwnedBunker, FALSE) iMaterialToRemove -= iMaterialsUsedByMixedProd PRINTLN("RUN_REMOVE_RESEARCH_TRANSACTION - production mixed. ", (iMaterialToRemove + iMaterialsUsedByMixedProd), " - ", iMaterialsUsedByMixedProd, " = ", iMaterialToRemove) WHILE g_ProductionTimestamp_slot != -1 WAIT(0) RENDER_BUNKER_APP() IF NOT HAS_NET_TIMER_STARTED(stTransactionTO) START_NET_TIMER(stTransactionTO) ELIF HAS_NET_TIMER_EXPIRED(stTransactionTO, 5000) RESET_NET_TIMER(stTransactionTO) PRINTLN(" RUN_REMOVE_RESEARCH_TRANSACTION - Failed to start a transaction") RETURN FALSE ENDIF ENDWHILE RESET_NET_TIMER(stTransactionTO) //Prevent freemode trying to run a transaction for this or any other business g_ProductionTimestamp_slot = 31 IF USE_SERVER_TRANSACTIONS() IF iMaterialToRemove > 0 WHILE NOT PROCESS_TRANSACTION_FOR_GENERATE_PRODUCT(BUNKER_SAVE_SLOT, 1, -(iMaterialToRemove), eRemoveResearchState, TRUE) RENDER_BUNKER_APP() PRINTLN(" RUN_REMOVE_RESEARCH_TRANSACTION - Processing remove materials transaction") IF GET_BASKET_TRANSACTION_SCRIPT_INDEX() = -1 AND eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_DEFAULT PRINTLN(" RUN_REMOVE_RESEARCH_TRANSACTION - Remove research transaction failed transaction index = -1") RETURN FALSE ENDIF WAIT(0) ENDWHILE RENDER_BUNKER_APP() IF eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_FAILED PRINTLN(" RUN_REMOVE_RESEARCH_TRANSACTION - Remove research transaction failed") RETURN FALSE ELIF eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_SUCCESS PRINTLN(" RUN_REMOVE_RESEARCH_TRANSACTION - Transaction success") ENDIF UPDATE_FACTORY_MATERIALS_TOTAL_BD(BUNKER_SAVE_SLOT, GET_MP_INT_CHARACTER_STAT(GET_STAT_ENUM_FOR_FACTORY_MATERIALS_TOTAL_SLOT(BUNKER_SAVE_SLOT)) #IF IS_DEBUG_BUILD , "RUN_REMOVE_RESEARCH_TRANSACTION - 2" #ENDIF) IF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdFactoryData[BUNKER_SAVE_SLOT].iMaterialsTotal < 0 UPDATE_FACTORY_MATERIALS_TOTAL_BD(BUNKER_SAVE_SLOT, 0 #IF IS_DEBUG_BUILD , "RUN_REMOVE_RESEARCH_TRANSACTION - 1" #ENDIF) ENDIF ENDIF //Reset the transaction variable eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_DEFAULT WHILE NOT PROCESS_TRANSACTION_FOR_REMOVE_RESEARCH(BUNKER_SAVE_SLOT, eRemoveResearchState) RENDER_BUNKER_APP() PRINTLN(" RUN_REMOVE_RESEARCH_TRANSACTION - Processing remove research transaction") IF GET_BASKET_TRANSACTION_SCRIPT_INDEX() = -1 AND eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_DEFAULT PRINTLN(" RUN_REMOVE_RESEARCH_TRANSACTION - Remove research transaction failed") RETURN FALSE ENDIF WAIT(0) ENDWHILE IF eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_FAILED eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_DEFAULT PRINTLN(" RUN_REMOVE_RESEARCH_TRANSACTION - Remove research transaction failed") RETURN FALSE ENDIF SET_FACTORY_TIME_STAGE(PLAYER_ID(), eOwnedBunker, 0) INITIALISE_BIKER_PRODUCTION_TIMESTAMP(BUNKER_SAVE_SLOT, FALSE, TRUE) RESET_NET_TIMER(g_stResearchTimer) RENDER_BUNKER_APP() ELSE INT iProductVar = (GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBunkerResearchTotal + 1) UPDATE_FACTORY_MATERIALS_TOTAL_BD(BUNKER_SAVE_SLOT, (GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdFactoryData[BUNKER_SAVE_SLOT].iMaterialsTotal - (iMaterialToRemove)) #IF IS_DEBUG_BUILD , "RUN_REMOVE_RESEARCH_TRANSACTION - 4" #ENDIF) IF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdFactoryData[BUNKER_SAVE_SLOT].iMaterialsTotal < 0 UPDATE_FACTORY_MATERIALS_TOTAL_BD(BUNKER_SAVE_SLOT, 0 #IF IS_DEBUG_BUILD , "RUN_REMOVE_RESEARCH_TRANSACTION - 3" #ENDIF) ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_RESEARCHTOTALFORFACTORY5, iProductVar) SET_MP_INT_CHARACTER_STAT(GET_STAT_ENUM_FOR_FACTORY_MATERIALS_TOTAL_SLOT(BUNKER_SAVE_SLOT), GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdFactoryData[BUNKER_SAVE_SLOT].iMaterialsTotal) SET_FACTORY_TIME_STAGE(PLAYER_ID(), eOwnedBunker, 0) INITIALISE_BIKER_PRODUCTION_TIMESTAMP(BUNKER_SAVE_SLOT, FALSE, TRUE) RESET_NET_TIMER(g_stResearchTimer) IF g_sMPTunables.bBIKER_DO_Production_SAVE g_b_BikeAppStatChangeMajor = TRUE ENDIF PRINTLN(" RUN_REMOVE_RESEARCH_TRANSACTION - Done for console.") ENDIF RETURN TRUE ENDFUNC PROC DO_CEASE_PRODUCTION_TRANSACTION() IF USE_SERVER_TRANSACTIONS() INT iResearchTotal = GET_MP_INT_CHARACTER_STAT(MP_STAT_RESEARCHTOTALFORFACTORY5) PRINTLN(" DO_CEASE_PRODUCTION_TRANSACTION - Checking if we should remove product. MP_STAT_RESEARCHTOTALFORFACTORY5 Total = ", iResearchTotal) //Remove any research progress IF iResearchTotal > 0 WHILE NOT PROCESS_TRANSACTION_FOR_REMOVE_RESEARCH(BUNKER_SAVE_SLOT, eRemoveResearchState) WAIT(0) RENDER_BUNKER_APP() ENDWHILE RENDER_BUNKER_APP() ENDIF IF eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_SUCCESS OR iResearchTotal <= 0 eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_DEFAULT eTransactionState = CONTRABAND_TRANSACTION_STATE_DEFAULT INT iProductTotal = GET_MP_INT_CHARACTER_STAT(MP_STAT_PRODTOTALFORFACTORY5) PRINTLN(" DO_CEASE_PRODUCTION_TRANSACTION - Checking if we should remove product. MP_STAT_PRODTOTALFORFACTORY5 Total = ", iProductTotal) //Now remove any produced goods IF iProductTotal > 0 WHILE NOT PROCESS_TRANSACTION_FOR_REMOVE_PRODUCT(BUNKER_SAVE_SLOT, iProductTotal, 0, REMOVE_CONTRA_ATTACKED, eTransactionState) WAIT(0) RENDER_BUNKER_APP() ENDWHILE RENDER_BUNKER_APP() ENDIF IF eTransactionState = CONTRABAND_TRANSACTION_STATE_SUCCESS OR iProductTotal <= 0 CDEBUG1LN(DEBUG_INTERNET, " DO_CEASE_PRODUCTION_TRANSACTION - Transaction Success! stopping production at our bunker") CEASE_FACTORY_PRODUCTION(PLAYER_ID(), eOwnedBunker, TRUE, FALSE, FALSE, TRUE) INCREMENT_TIMES_FACTORY_PRODUCTION_HALTED(BUNKER_SAVE_SLOT, FALSE, FALSE) ELSE CDEBUG1LN(DEBUG_INTERNET, " DO_CEASE_PRODUCTION_TRANSACTION - Transaction failed to remove product from our bunker") ENDIF ELSE CDEBUG1LN(DEBUG_INTERNET, " DO_CEASE_PRODUCTION_TRANSACTION - Transaction failed to add remove research") ENDIF ELSE CDEBUG1LN(DEBUG_INTERNET, " DO_CEASE_PRODUCTION_TRANSACTION - Stopping production at our bunker - CONSOLE") CEASE_FACTORY_PRODUCTION(PLAYER_ID(), eOwnedBunker, TRUE, FALSE, FALSE, TRUE) INCREMENT_TIMES_FACTORY_PRODUCTION_HALTED(BUNKER_SAVE_SLOT, FALSE, FALSE) ENDIF ENDPROC /// PURPOSE: /// Checks if we can launch a set-up mission and sets up the overlay screen with the necessary text PROC RUN_INITIAL_SETUP_MISSION_LAUNCH_CHECKS() IF NOT CAN_PLAYER_LAUNCH_MISSION(FMMC_TYPE_GUNRUNNING_BUY) //FAIL: Not available SHOW_OVERLAY(UNDERGROUND_ARMS_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE, DEFAULT, UA_STAGE_FAIL_OVERLAY) ELSE SHOW_OVERLAY("BU_BUS_SETUP", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, UA_STAGE_CONFIRM_SETUP_LAUNCH) ENDIF UNDERGROUND_ARMS_CLEAR_MISSION_LAUNCH_FAIL_REASON() ENDPROC /// PURPOSE: /// Checks if we can launch a sell mission and sets up the overlay screen with the necessary text PROC RUN_INITIAL_SELL_MISSION_CHECKS() IF IS_FACTORY_EMPTY(eOwnedBunker) //FAIL: Empty Factory SHOW_OVERLAY("DL_BUS_EMPTY", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF NOT CAN_PLAYER_LAUNCH_MISSION(FMMC_TYPE_GUNRUNNING_SELL) //FAIL: Not available SHOW_OVERLAY(UNDERGROUND_ARMS_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ELIF GET_FACTORY_PRODUCT_TOTAL_AS_PERCENTAGE(eOwnedBunker, PLAYER_ID()) > 25 SHOW_OVERLAY("OR_SELL_GDB", "OR_OVRLY_OK", "", FALSE, TRUE, DEFAULT, UA_STAGE_GANG_SIZE_WARNING) ELSE #IF FEATURE_DLC_1_2022 IF DID_I_JOIN_A_PRIVATE_SESSION() IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_APP_SELL_GOODS_HELP_TEXT_GUNRUNNING) IF NOT IS_THIS_PRINT_BEING_DISPLAYED("APP_SG_HELP") PRINT_HELP("APP_SG_HELP") ENDIF SET_PACKED_STAT_BOOL (PACKED_MP_BOOL_APP_SELL_GOODS_HELP_TEXT_GUNRUNNING, TRUE) ENDIF ENDIF #ENDIF //#IF FEATURE_DLC_1_2022 SHOW_OVERLAY("UA_SELL_GD", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, UA_STAGE_CONFIRM_SELL_LAUNCH) ENDIF UNDERGROUND_ARMS_CLEAR_MISSION_LAUNCH_FAIL_REASON() ENDPROC /// PURPOSE: /// Checks if a setup or resupply mission is available and shows the relevant overlay screen PROC RUN_INITIAL_RESUPPLY_MISSION_CHECKS() IF g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT] >= g_sMPTunables.iBIKER_RESUPPLY_LAUNCH_SUPPLIES_THRESHOLD //FAIL: We hav 100% supplies already SHOW_OVERLAY("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("OR_MIS_NA_C", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF NOT CAN_PLAYER_LAUNCH_MISSION(FMMC_TYPE_GUNRUNNING_BUY) //FAIL: Not available SHOW_OVERLAY(UNDERGROUND_ARMS_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SHOW_OVERLAY("BU_STEAL_SUP", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, UA_STAGE_CONFIRM_BUY_LAUNCH) ENDIF UNDERGROUND_ARMS_CLEAR_MISSION_LAUNCH_FAIL_REASON() ENDPROC /// PURPOSE: /// Checks if we can buy supplies for the business and calculates the cost to show the player PROC SETUP_PURCHASE_SUPPLIES_OVERLAY() INT iMaterialsTotal = g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT] INT iCost = GET_FACTORY_PAID_RESUPPLY_COST(FALSE, iMaterialsTotal, TRUE) IF g_sMPTunables.BGR_DISABLE_PURCHASE_SUPPLIES SHOW_OVERLAY("OR_BS_PAY_NA", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF HAS_PLAYER_SUSPENDED_BUNKER_PRODUCTION() SHOW_OVERLAY("OR_RESUP_RES", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT] >= g_sMPTunables.iBIKER_RESUPPLY_LAUNCH_SUPPLIES_THRESHOLD SHOW_OVERLAY("OR_MIS_NA_B", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF IS_PAID_RESUPPLY_TIMER_RUNNING(BUNKER_SAVE_SLOT) SHOW_OVERLAY("OR_MIS_NA_C", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF NOT NETWORK_CAN_SPEND_MONEY(iCost, FALSE, TRUE, FALSE) SHOW_OVERLAY("OR_BS_PAY_NM", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE iQuotedResupplyCost = iCost SHOW_OVERLAY("OR_BUY_SUP", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, iCost, UA_STAGE_CONFIRM_PAID_RESUPPLY) ENDIF ENDPROC /// PURPOSE: /// Brings up the relevant overlay for restarting production PROC SETUP_RESTART_PRODUCTION_OVERLAY() IF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdFactoryData[BUNKER_SAVE_SLOT].iProductionStage <= 0 SHOW_OVERLAY("OR_BS_NOT_SETUP", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT] <= 0 IF GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) = PRODUCTION_MODE_GOODS SHOW_OVERLAY("UA_START_PRD_N1", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, UA_STAGE_CONFIRM_STARTUP) ELIF GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) = PRODUCTION_MODE_RESEARCH SHOW_OVERLAY("UA_START_PRD_N2", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, UA_STAGE_CONFIRM_STARTUP) ELSE SHOW_OVERLAY("UA_START_PRD_N3", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, UA_STAGE_CONFIRM_STARTUP) ENDIF ELSE IF GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) = PRODUCTION_MODE_GOODS SHOW_OVERLAY("UA_START_PROD1", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, UA_STAGE_CONFIRM_STARTUP) ELIF GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) = PRODUCTION_MODE_RESEARCH SHOW_OVERLAY("UA_START_PROD2", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, UA_STAGE_CONFIRM_STARTUP) ELSE SHOW_OVERLAY("UA_START_PROD3", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, UA_STAGE_CONFIRM_STARTUP) ENDIF ENDIF ENDPROC /// PURPOSE: /// Brings up the relevant overlay for switching production mode PROC SETUP_SWITCH_TO_WEAPONS_PRODUCTION_OVERLAY() IF GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) = PRODUCTION_MODE_GOODS SHOW_OVERLAY("UA_MODE_S_FAIL1", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SHOW_OVERLAY("UA_MODE_S_CON_A", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, FALSE, DEFAULT, UA_STAGE_CONFIRM_WEAPONS_PROD) ENDIF ENDPROC /// PURPOSE: /// Brings up the relevant overlay for switching production mode PROC SETUP_SWITCH_TO_WEAPONS_RESEARCH_OVERLAY() IF GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) = PRODUCTION_MODE_RESEARCH SHOW_OVERLAY("UA_MODE_S_FAIL2", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF HAS_LOCAL_PLAYER_UNLOCKED_ALL_AVAILABLE_BUNKER_RESEARCH_ITEMS() SHOW_OVERLAY("UA_MODE_S_FAIL4", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SHOW_OVERLAY("UA_MODE_S_CON_B", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, FALSE, DEFAULT, UA_STAGE_CONFIRM_WEAPONS_RESEARCH) ENDIF ENDPROC /// PURPOSE: /// Brings up the relevant overlay for switching production mode PROC SETUP_SWITCH_TO_MIXED_PRODUCTION_OVERLAY() IF GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) = PRODUCTION_MODE_MIXED SHOW_OVERLAY("UA_MODE_S_FAIL3", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF HAS_LOCAL_PLAYER_UNLOCKED_ALL_AVAILABLE_BUNKER_RESEARCH_ITEMS() SHOW_OVERLAY("UA_MODE_S_FAIL4", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SHOW_OVERLAY("UA_MODE_S_CON_C", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, FALSE, DEFAULT, UA_STAGE_CONFIRM_MIXED_PROD) ENDIF ENDPROC PROC SETUP_NAVIGATE_TO_UPGRADES_OVERLAY() IF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdFactoryData[BUNKER_SAVE_SLOT].iProductionStage <= 0 SHOW_OVERLAY("OR_UPGR_NS", "OR_OVRLY_OK", "", TRUE, FALSE) // ELIF HAS_PLAYER_SUSPENDED_BUNKER_PRODUCTION() // SHOW_OVERLAY("OR_UPGR_RES", "OR_OVRLY_OK", "") ENDIF ENDPROC /// PURPOSE: /// Checks if an upgrade is available to purchase and shows the relevant overlay screen PROC RUN_INITIAL_UPGRADE_PURCHASE_CHECKS(FACTORY_UPGRADE_ID eUpgrade) UA_APP_STAGE_ID eNewStage = UA_STAGE_CONFIRM_PURCHASE_STAFF IF eUpgrade = UPGRADE_ID_EQUIPMENT eNewStage = UA_STAGE_CONFIRM_PURCHASE_EQUIPMENT ELIF eUpgrade = UPGRADE_ID_SECURITY eNewStage = UA_STAGE_CONFIRM_PURCHASE_SECURITY ENDIF IF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdFactoryData[BUNKER_SAVE_SLOT].iProductionStage <= 0 SHOW_OVERLAY("OR_UPGR_NS", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF IS_FACTORY_UPGRADE_DISABLED(eUpgrade, eOwnedBunker) SHOW_OVERLAY("OR_UPGR_NA", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF DOES_PLAYER_OWN_FACTORY_UPGRADE(PLAYER_ID(), eOwnedBunker, eUpgrade) SHOW_OVERLAY("OR_UPGR_OWN", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF NETWORK_CAN_SPEND_MONEY(GET_FACTORY_UPGRADE_COST(eUpgrade, eOwnedBunker), FALSE, TRUE, FALSE) SHOW_OVERLAY("OR_BUY_UPGR", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, eNewStage) ELSE SHOW_OVERLAY("OR_UPG_NO_MONEY", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF ENDPROC PROC RUN_INITIAL_FAST_TRACK_RESEARCH_CHECKS() INT iFTResearchCost = GET_BUNKER_RESEARCH_FT_COST(iCurrentResearchTotal) IF iCurrentResearchTotal = 0 OR GET_FACTORY_RESEARCH_TOTAL_AS_PERCENTAGE(PLAYER_ID(), eOwnedBunker) = 0 IF GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) = PRODUCTION_MODE_GOODS SHOW_OVERLAY("UA_FTR_FAIL_NR1", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF iCurrentMaterialTotal = 0 SHOW_OVERLAY("UA_FTR_FAIL_NR2", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SHOW_OVERLAY("UA_FTR_FAIL_NR", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF ELIF IS_FACTORY_RESEARCH_FULL(PLAYER_ID(), eOwnedBunker) SHOW_OVERLAY("UA_FTR_FAIL_FUL", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF HAS_LOCAL_PLAYER_UNLOCKED_ALL_AVAILABLE_RESEARCH_ITEMS() OR GET_RESEARCH_ITEM_IN_PROGRESS() = RESEARCH_ITEM_INVALID SHOW_OVERLAY("UA_FTR_FAIL_NR", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF NOT NETWORK_CAN_SPEND_MONEY(iFTResearchCost, FALSE, TRUE, FALSE) SHOW_OVERLAY("UA_FTR_FAIL_NM", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SET_BIT(iBS, UA_BS_FAST_TRACK_COST_OVERLAY_ACTIVE) PRINTLN("Setting - UA_BS_FAST_TRACK_COST_OVERLAY_ACTIVE") iQuotedFTCost = iFTResearchCost PRINTLN(" RUN_INITIAL_FAST_TRACK_RESEARCH_CHECKS - Confirm FT research for $", iFTResearchCost, " Cached research total = ", iCurrentResearchTotal, " broadcast total: ", GET_FACTORY_RESEARCH_TOTAL_AS_PERCENTAGE(PLAYER_ID(), eOwnedBunker)) SHOW_OVERLAY("UA_FTR_CONF", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, iFTResearchCost, UA_STAGE_ONFIRM_FT_RESEARCH) ENDIF ENDPROC PROC RUN_INITIAL_SHUT_DOWN_BUSINESS_CHECKS() IF GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) = FMMC_TYPE_GUNRUNNING_BUY OR IS_PAID_RESUPPLY_TIMER_RUNNING(BUNKER_SAVE_SLOT) SHOW_OVERLAY("UA_CANT_SDOWN", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) = FMMC_TYPE_GUNRUNNING_DEFEND SHOW_OVERLAY("UA_CANT_SDOWN1", "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SHOW_OVERLAY("OR_STOP_PRODG", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, UA_STAGE_CONFIRM_SHUTDOWN) ENDIF ENDPROC PROC PURCHASE_BUNKER_UPGRADE(FACTORY_UPGRADE_ID eUpgrade) PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") CDEBUG1LN(DEBUG_INTERNET," PURCHASE_BUNKER_UPGRADE: ", GET_FACTORY_UPGRADE_NAME(eUpgrade), " for business: ", eOwnedBunker) SET_LOCAL_PLAYER_OWN_FACTORY_UPGRADE(eOwnedBunker, eUpgrade, TRUE) #IF NOT FEATURE_CASINO_HEIST DO_SCREEN_FADE_OUT(200) eJustPurchasedUpgrade = eUpgrade #ENDIF #IF FEATURE_CASINO_HEIST IF IS_PLAYER_IN_ARCADE_PROPERTY(PLAYER_ID()) SEND_ALL_DATA_TO_SCALEFORM() ELSE DO_SCREEN_FADE_OUT(200) eJustPurchasedUpgrade = eUpgrade ENDIF #ENDIF ENDPROC PROC MAINTAIN_FT_ANIMATION_CHECKS() IF IS_BIT_SET(iBS, UA_BS_CONTROLS_APP_CONTROLS_DISABLED) IF NOT IS_BIT_SET(iBS, UA_BS_WAITING_FOR_APP_DIABLED_RESPONSE) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "APP_IS_DEACTIVATED") AppIsDeactivatedReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() SET_BIT(iBS, UA_BS_WAITING_FOR_APP_DIABLED_RESPONSE) ELSE IF IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(AppIsDeactivatedReturnIndex) BOOL bActive = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_BOOL(AppIsDeactivatedReturnIndex) IF bActive SET_BIT(iBS, UA_BS_CONTROLS_APP_CONTROLS_DISABLED) ELSE PRINTLN(" UA_BS_CONTROLS_APP_CONTROLS_DISABLED is now set to false") CLEAR_BIT(iBS, UA_BS_CONTROLS_APP_CONTROLS_DISABLED) TEXT_LABEL_15 tlMessage = GET_RESEARCH_UNLOCK_DESCRIPTION(eFTUnlockedItem) TEXT_LABEL_15 tlDescription = GET_RESEARCH_UNLOCK_TXD(eFTUnlockedItem) UA_SET_FAST_TRACK_OVERLAY_ACTIVE_STATE(TRUE) SHOW_OVERLAY(tlMessage, "WHOUSE_CONF", "", FALSE, FALSE, DEFAULT, DEFAULT, tlDescription, "UA_FT_TITLE") ENDIF CLEAR_BIT(iBS, UA_BS_WAITING_FOR_APP_DIABLED_RESPONSE) ENDIF ENDIF #IF IS_DEBUG_BUILD IF IS_BIT_SET(iBS, UA_BS_CONTROLS_APP_CONTROLS_DISABLED) PRINTLN(" UA_BS_CONTROLS_APP_CONTROLS_DISABLED = TRUE") ENDIF #ENDIF ENDIF ENDPROC INT iAssignedTransactionSlot = -1 INT iTransactionID = -1 FUNC BOOL WAS_PAID_RESUPPLY_TRANSACTION_SUCCESSFUL() IF NOT USE_SERVER_TRANSACTIONS() RETURN TRUE ENDIF STRUCT_SHOP_TRANSACTION_EVENT Event SCRIPT_TIMER stTransactionTimeOut //Clear any old data iAssignedTransactionSlot = -1 iTransactionID = -1 INT iScriptTransactionIndex INT iCount //First find the transaction relevant to us REPEAT SHOPPING_TRANSACTION_MAX_NUMBER iScriptTransactionIndex IF g_cashTransactionData[iScriptTransactionIndex].eEssentialData.eTransactionService = SERVICE_SPEND_BUSINESS PRINTLN(" WAS_PAID_RESUPPLY_TRANSACTION_SUCCESSFUL - Trans slot: ", iScriptTransactionIndex," is currently running the transaction for bunker") iAssignedTransactionSlot = iScriptTransactionIndex BREAKLOOP ENDIF ENDREPEAT IF iAssignedTransactionSlot = -1 ASSERTLN(" Failed to determine transaction slot for resupply transaction") WAIT(0) RENDER_BUNKER_APP() RETURN FALSE ENDIF WHILE NOT HAS_NET_TIMER_EXPIRED(stTransactionTimeOut, 15000) IF iTransactionID = -1 IF g_cashTransactionData[iAssignedTransactionSlot].eEssentialData.iTransactionId != NET_SHOP_INVALID_ID iTransactionID = g_cashTransactionData[iAssignedTransactionSlot].eEssentialData.iTransactionId PRINTLN(" WAS_PAID_RESUPPLY_TRANSACTION_SUCCESSFUL - Awaiting transaction result. transaction ID assigned: ", iTransactionID) ENDIF ENDIF REPEAT GET_NUMBER_OF_EVENTS(SCRIPT_EVENT_QUEUE_NETWORK) iCount IF GET_EVENT_AT_INDEX(SCRIPT_EVENT_QUEUE_NETWORK, iCount) = EVENT_NETWORK_SHOP_TRANSACTION IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, Event, SIZE_OF(Event)) IF Event.m_Id = iTransactionID AND Event.m_Id != -1 IF Event.m_ResultCode = 0 PRINTLN(" WAS_PAID_RESUPPLY_TRANSACTION_SUCCESSFUL - Transaction success!") RETURN TRUE ELSE PRINTLN(" WAS_PAID_RESUPPLY_TRANSACTION_SUCCESSFUL - Transaction failed!") RETURN FALSE ENDIF ELSE PRINTLN(" WAS_PAID_RESUPPLY_TRANSACTION_SUCCESSFUL - Event non matching transaction ID. Event: ", Event.m_Id, " stored ID: ", iTransactionID) ENDIF ENDIF ENDIF ENDREPEAT WAIT(0) RENDER_BUNKER_APP() ENDWHILE WAIT(0) RENDER_BUNKER_APP() PRINTLN(" WAS_PAID_RESUPPLY_TRANSACTION_SUCCESSFUL - timer expired with no transaction event!") RETURN FALSE ENDFUNC /// PURPOSE: /// Handles the player pressing confirm on the overlay screen PROC HANDLE_ACCEPT_OVERLAY_PRESS() SWITCH UNDERGROUND_ARMS_GET_APP_STAGE() CASE UA_STAGE_CONFIRM_SETUP_LAUNCH IF DO_LAUNCH_MISSION_TRANSACTION(FMMC_TYPE_GUNRUNNING_BUY) //Launch a setup mission PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") INCREMENT_BIKER_BUY_MISSION_UNDERTAKEN_COUNT(BUNKER_SAVE_SLOT) GB_SET_PLAYER_GANG_BOSS_MISSION_VARIATION(ENUM_TO_INT(GRV_SETUP)) LAUNCH_MISSION(FMMC_TYPE_GUNRUNNING_BUY, FREEMODE_DELIVERY_LOCATION_CITY) ELSE SHOW_OVERLAY(UNDERGROUND_ARMS_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE UA_STAGE_CONFIRM_BUY_LAUNCH IF DO_LAUNCH_MISSION_TRANSACTION(FMMC_TYPE_GUNRUNNING_BUY) PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") LAUNCH_BUY_MISSION() INCREMENT_BIKER_BUY_MISSION_UNDERTAKEN_COUNT(BUNKER_SAVE_SLOT) ELSE SHOW_OVERLAY(UNDERGROUND_ARMS_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE UA_STAGE_CONFIRM_SELL_LAUNCH IF DO_LAUNCH_MISSION_TRANSACTION(FMMC_TYPE_GUNRUNNING_SELL) PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") LAUNCH_MISSION(FMMC_TYPE_GUNRUNNING_SELL, UNDERGROUND_ARMS_GET_SELL_MISSION_LOCATION()) INCREMENT_BUNKER_SELL_MISSION_COUNT(UNDERGROUND_ARMS_GET_SELL_MISSION_LOCATION()) UNDERGROUND_ARMS_CLEAR_MISSION_LOCATION() SET_BIT(g_SimpleInteriorData.iSecondBS, BS2_SIMPLE_INTERIOR_HOLD_EXIT_FADE_IN_UNTIL_MISSION_OK) PRINTLN(" Sell mission launch - set BS2_SIMPLE_INTERIOR_HOLD_EXIT_FADE_IN_UNTIL_MISSION_OK") ELSE SHOW_OVERLAY(UNDERGROUND_ARMS_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE UA_STAGE_FAIL_OVERLAY //HIDE_OVERLAY() BREAK CASE UA_STAGE_GANG_SIZE_WARNING HIDE_OVERLAY() SHOW_OVERLAY("UA_SELL_GD", "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, UA_STAGE_CONFIRM_SELL_LAUNCH) EXIT BREAK CASE UA_STAGE_CONFIRM_PAID_RESUPPLY PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") TRIGGER_PAYMENT_FOR_FACTORY_SUPPLIES(eOwnedBunker, iQuotedResupplyCost) IF WAS_PAID_RESUPPLY_TRANSACTION_SUCCESSFUL() CLEAR_QUOTED_COSTS() START_PAID_RESUPPLY_TIMER(BUNKER_SAVE_SLOT) SHOW_OVERLAY("OR_RSP_PAID", "OR_OVRLY_OK", "", TRUE, FALSE) //Refresh the current factory data SEND_ALL_DATA_TO_SCALEFORM() //Show help CLEAR_HELP(TRUE) IF IS_FACTORY_EMPTY(eOwnedBunker) PRINT_HELP("UA_PSUP_OTW0", 8000) ELSE PRINT_HELP("UA_PSUP_OTW1", 8000) ENDIF ELSE CLEAR_QUOTED_COSTS() SHOW_OVERLAY("UA_PSUP_FAIL", "OR_OVRLY_OK", "", TRUE, FALSE, DEFAULT) EXIT ENDIF BREAK CASE UA_STAGE_CONFIRM_SHUTDOWN PLAY_SOUND_FRONTEND(-1, "Business_Shutdown", "DLC_GR_Disruption_Logistics_Sounds") //Cease/Start production IF IS_PLAYERS_FACTORY_PRODUCTION_ACTIVATED(PLAYER_ID(), BUNKER_SAVE_SLOT) OR IS_DELAY_PRODUCTION_TIMER_RUNNING(BUNKER_SAVE_SLOT) DO_CEASE_PRODUCTION_TRANSACTION() UPDATE_CEASE_PRODUCTION_STAT(BUNKER_SAVE_SLOT, TRUE) SEND_BUNKER_BUSINESS_METRIC(FALSE, RESEARCH_ITEM_INVALID, TRUE, FALSE, FALSE, GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker)) IF DOES_PLAYER_OWN_A_BUSINESS_HUB(PLAYER_ID()) IF DOES_BUSINESS_TYPE_HAVE_STAFF_MEMBER_ASSIGNED(BUSINESS_TYPE_WEAPONS) INT iStaffID iStaffID = GET_STAFF_MEMBER_ASSIGNED_TO_BUSINESS(BUSINESS_TYPE_WEAPONS) CLEAR_HUB_STAFF_MEMBER_ASSIGNMENT(iStaffID) SET_BIT(g_iHubAppFactoryShutDownHelp, BUNKER_SAVE_SLOT) ENDIF ENDIF ENDIF SEND_ALL_DATA_TO_SCALEFORM() SHOW_PAGE(PAGE_HOME) BREAK CASE UA_STAGE_CONFIRM_STARTUP PLAY_SOUND_FRONTEND(-1, "Business_Restart", "DLC_GR_Disruption_Logistics_Sounds") CDEBUG1LN(DEBUG_INTERNET," Begin production at business: ", eOwnedBunker) START_BIKER_DELAY_PRODUCTION_TIMER(BUNKER_SAVE_SLOT) //Refresh the current factory data SEND_ALL_DATA_TO_SCALEFORM() UPDATE_CEASE_PRODUCTION_STAT(BUNKER_SAVE_SLOT, FALSE) SEND_ALL_DATA_TO_SCALEFORM() BREAK CASE UA_STAGE_CONFIRM_MIXED_PROD PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") SWITCH_FACTORY_PRODUCTION_MODE(eOwnedBunker, PRODUCTION_MODE_MIXED) SEND_BUNKER_DATA_TO_SCALEFORM() SEND_BUNKER_RESEARCH_STATE_TO_SCALEFORM() SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_ASSIGNED_STAFF_TO_RESEARCH, TRUE) BROADCAST_GENERAL_EVENT(GENERAL_EVENT_RESET_BUNKER_FACTORY_PEDS, All_PLAYERS()) BREAK CASE UA_STAGE_CONFIRM_WEAPONS_PROD PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") SWITCH_FACTORY_PRODUCTION_MODE(eOwnedBunker, PRODUCTION_MODE_GOODS) SEND_BUNKER_DATA_TO_SCALEFORM() SEND_BUNKER_RESEARCH_STATE_TO_SCALEFORM() BROADCAST_GENERAL_EVENT(GENERAL_EVENT_RESET_BUNKER_FACTORY_PEDS, All_PLAYERS()) BREAK CASE UA_STAGE_CONFIRM_WEAPONS_RESEARCH PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") SWITCH_FACTORY_PRODUCTION_MODE(eOwnedBunker, PRODUCTION_MODE_RESEARCH) SEND_BUNKER_DATA_TO_SCALEFORM() SEND_BUNKER_RESEARCH_STATE_TO_SCALEFORM() SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_ASSIGNED_STAFF_TO_RESEARCH, TRUE) BROADCAST_GENERAL_EVENT(GENERAL_EVENT_RESET_BUNKER_FACTORY_PEDS, All_PLAYERS()) BREAK CASE UA_STAGE_CONFIRM_PURCHASE_STAFF IF IS_FACTROY_UPGRADE_AVAILABLE(UPGRADE_ID_STAFF, eOwnedBunker) PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") IF RUN_TRANSACTION_FOR_BUNKER_UPGRADE(UPGRADE_ID_STAFF) PURCHASE_BUNKER_UPGRADE(UPGRADE_ID_STAFF) BROADCAST_GENERAL_EVENT(GENERAL_EVENT_RESET_BUNKER_FACTORY_PEDS, All_PLAYERS()) ENDIF ENDIF BREAK CASE UA_STAGE_CONFIRM_PURCHASE_SECURITY IF IS_FACTROY_UPGRADE_AVAILABLE(UPGRADE_ID_SECURITY, eOwnedBunker) PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") IF RUN_TRANSACTION_FOR_BUNKER_UPGRADE(UPGRADE_ID_SECURITY) PURCHASE_BUNKER_UPGRADE(UPGRADE_ID_SECURITY) SIMPLE_INTERIOR_SET_UPDATE_EXIT_LOCATE_COORDS(TRUE) BROADCAST_GENERAL_EVENT(GENERAL_EVENT_RESET_BUNKER_FACTORY_PEDS, All_PLAYERS()) ENDIF ENDIF BREAK CASE UA_STAGE_CONFIRM_PURCHASE_EQUIPMENT IF IS_FACTROY_UPGRADE_AVAILABLE(UPGRADE_ID_EQUIPMENT, eOwnedBunker) PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") IF RUN_TRANSACTION_FOR_BUNKER_UPGRADE(UPGRADE_ID_EQUIPMENT) PURCHASE_BUNKER_UPGRADE(UPGRADE_ID_EQUIPMENT) BROADCAST_GENERAL_EVENT(GENERAL_EVENT_RESET_BUNKER_FACTORY_PEDS, All_PLAYERS()) ENDIF ENDIF BREAK CASE UA_STAGE_ONFIRM_FT_RESEARCH IF NOT NETWORK_CAN_SPEND_MONEY(GET_BUNKER_RESEARCH_FT_COST(iCurrentResearchTotal), FALSE, TRUE, FALSE) HIDE_OVERLAY() SHOW_OVERLAY("UA_FTR_FAIL_NM", "OR_OVRLY_OK", "", TRUE, FALSE) EXIT ELSE PLAY_SOUND_FRONTEND(-1, "Click_Special", "DLC_GR_Disruption_Logistics_Sounds") PRINTLN(" FT Research unlock complete - Begin update stats and unlocks") //Save this out here as HIDE_OVERLAY clears this value INT iCost iCost = iQuotedFTCost //Remove research for PC IF NOT RUN_REMOVE_RESEARCH_TRANSACTION() g_ProductionTimestamp_slot = -1 HIDE_OVERLAY() SHOW_OVERLAY("UA_TRANS_FAIL", "OR_OVRLY_OK", "", TRUE, FALSE) PRINTLN(" RUN_REMOVE_RESEARCH_TRANSACTION - Remove research transaction failed") EXIT ENDIF g_ProductionTimestamp_slot = -1 //Hide the overlay now as scaleform updates are ignored for a few seconds when we call ACTIVATE_FAST_TRACK HIDE_OVERLAY() eFTUnlockedItem = GET_RESEARCH_ITEM_IN_PROGRESS() SET_BIT(iBS, UA_BS_CONTROLS_APP_CONTROLS_DISABLED) UPDATE_BUTTON_ENABLED_STATE() //Start the fast-track animation BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ACTIVATE_FAST_TRACK") END_SCALEFORM_MOVIE_METHOD() //Pay for research TRIGGER_PAYMENT_FOR_BUNKER_RESEARCH_FT(iCurrentResearchTotal, iCost) //Update our totals GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBunkerResearchTotal = 0 //Update the stat SET_MP_INT_CHARACTER_STAT(MP_STAT_RESEARCHTOTALFORFACTORY5, 0) //Reset the research time INITIALISE_BIKER_PRODUCTION_TIMESTAMP(BUNKER_SAVE_SLOT, FALSE, TRUE) //Unlock something SET_BUNKER_RESEARCH_ITEM_AS_UNLOCKED(TRUE) //Tell scaleform about the new unlock SEND_ALL_DATA_TO_SCALEFORM(FALSE) //Request a save g_b_BikeAppStatChangeMajor = TRUE //Check if we're all done with research IF HAS_LOCAL_PLAYER_UNLOCKED_ALL_AVAILABLE_BUNKER_RESEARCH_ITEMS() PRINTLN(" HANDLE_ACCEPT_OVERLAY_PRESS - [BUNKER] - Research complete & all research items now unlocked.") SWITCH_FACTORY_PRODUCTION_MODE(eOwnedBunker, PRODUCTION_MODE_GOODS) ENDIF EXIT ENDIF BREAK DEFAULT PLAY_CLICK_LINK_SOUND() BREAK ENDSWITCH HIDE_OVERLAY() ENDPROC PROC CHECK_BUTTON_PRESS() MAINTAIN_CHECKS_FOR_CURRENT_SELECTION_ID() MAINTAIN_FT_ANIMATION_CHECKS() IF IS_BIT_SET(iBS, UA_BS_WAITING_FOR_BUTTON_RETURN_VALUE) IF IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentSelectionReturnIndex) AND IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentPageReturnIndex) UA_BUTTON_INDEXES eButtonPressed = INT_TO_ENUM(UA_BUTTON_INDEXES, GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentSelectionReturnIndex)) UA_PAGE_ID ePageReturned = INT_TO_ENUM(UA_PAGE_ID, GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentPageReturnIndex)) CDEBUG1LN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS button press returned = ", DEBUG_GET_BUTTON_NAME(eButtonPressed), " ID: ", eButtonPressed, " current page returned = ", DEBUG_GET_PAGE_NAME(ePageReturned)) eCurrentPage = ePageReturned SWITCH eButtonPressed CASE BUTTON_OVERLAY_CANCEL PLAY_CLICK_LINK_SOUND() HIDE_OVERLAY() BREAK CASE BUTTON_OVERLAY_ACCEPT HANDLE_ACCEPT_OVERLAY_PRESS() BREAK CASE BUTTON_NAV_SETUP RUN_INITIAL_SETUP_MISSION_LAUNCH_CHECKS() BREAK CASE BUTTON_NAV_RESUPPLY IF NOT HAS_PLAYER_SUSPENDED_BUNKER_PRODUCTION() PLAY_CLICK_LINK_SOUND() SHOW_PAGE(PAGE_RESUPPLY) ELSE SHOW_OVERLAY("OR_RESUP_RES", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE BUTTON_NAV_RESEARCH IF NOT HAS_PLAYER_SUSPENDED_BUNKER_PRODUCTION() PLAY_CLICK_LINK_SOUND() SHOW_PAGE(PAGE_RESEARCH) ELSE SHOW_OVERLAY("OR_RESEA_RES", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE BUTTON_NAV_STAFF PLAY_CLICK_LINK_SOUND() SHOW_PAGE(PAGE_STAFF) BREAK CASE BUTTON_NAV_UPGRADES IF HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() PLAY_CLICK_LINK_SOUND() SHOW_PAGE(PAGE_UPGRADES) ELSE SETUP_NAVIGATE_TO_UPGRADES_OVERLAY() ENDIF BREAK CASE BUTTON_NAV_SHUT_DOWN RUN_INITIAL_SHUT_DOWN_BUSINESS_CHECKS() BREAK CASE BUTTON_NAV_RESTART SETUP_RESTART_PRODUCTION_OVERLAY() BREAK CASE BUTTON_SELL_STOCK_COUNTRY UNDERGROUND_ARMS_SET_SELL_MISSION_LOCATION(FREEMODE_DELIVERY_LOCATION_COUNTRYSIDE) RUN_INITIAL_SELL_MISSION_CHECKS() BREAK CASE BUTTON_SELL_STOCK_CITY UNDERGROUND_ARMS_SET_SELL_MISSION_LOCATION(FREEMODE_DELIVERY_LOCATION_CITY) RUN_INITIAL_SELL_MISSION_CHECKS() BREAK CASE BUTTON_BUY_SUPPLIES SETUP_PURCHASE_SUPPLIES_OVERLAY() BREAK CASE BUTTON_STEAL_SUPPLIES RUN_INITIAL_RESUPPLY_MISSION_CHECKS() BREAK CASE BUTTON_UPGRADE_1 RUN_INITIAL_UPGRADE_PURCHASE_CHECKS(UPGRADE_ID_EQUIPMENT) BREAK CASE BUTTON_UPGRADE_2 RUN_INITIAL_UPGRADE_PURCHASE_CHECKS(UPGRADE_ID_STAFF) BREAK CASE BUTTON_UPGRADE_3 RUN_INITIAL_UPGRADE_PURCHASE_CHECKS(UPGRADE_ID_SECURITY) BREAK CASE BUTTON_STAFF_MANUFACTURING SETUP_SWITCH_TO_WEAPONS_PRODUCTION_OVERLAY() BREAK CASE BUTTON_STAFF_RESEARCH SETUP_SWITCH_TO_WEAPONS_RESEARCH_OVERLAY() BREAK CASE BUTTON_STAFF_BOTH SETUP_SWITCH_TO_MIXED_PRODUCTION_OVERLAY() BREAK CASE BUTTON_RESEARCH RUN_INITIAL_FAST_TRACK_RESEARCH_CHECKS() BREAK CASE BUTTON_NAV_SELL IF GET_FACTORY_PRODUCT_TOTAL_AS_PERCENTAGE(eOwnedBunker, PLAYER_ID()) > 0 PLAY_CLICK_LINK_SOUND() SHOW_PAGE(PAGE_SELL) ELSE SHOW_OVERLAY("DL_BUS_EMPTY", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE BUTTON_VIEW_UNLOCKS PLAY_CLICK_LINK_SOUND() SHOW_PAGE(PAGE_UNLOCKS) BREAK CASE BUTTON_SORT_UNLOCKS_ALL CASE BUTTON_SORT_UNLOCKS_UNLOCKED CASE BUTTON_SORT_UNLOCKS_LOCKED PLAY_CLICK_LINK_SOUND() BREAK ENDSWITCH CLEAR_BIT(iBS, UA_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_UA_BUNKER_TUT_1) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_UA_BUNKER_TUT_2) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_UA_BUNKER_TUT_3) 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 STRING UA_TUT_GET_ROOT_LABEL(INT iTutorialID) SWITCH iTutorialID CASE 0 RETURN "GNRC_LAPTU1" //First login - Pre-setup mission CASE 1 RETURN "GNRC_LAPTU2" //Main page - Post-setup CASE 2 RETURN "GNRC_LAPTU3" //Staff management page ENDSWITCH CASSERTLN(DEBUG_SAFEHOUSE, "UA_TUT_GET_ROOT_LABEL: Invalid tutorial ID: ", iTutorialID) RETURN "GNRC_LAPTU1" ENDFUNC PROC UA_START_TUTORIAL_DIALOGUE(INT iTutorialID) IF CREATE_CONVERSATION(tutPedStruct, "GNRCAUD", UA_TUT_GET_ROOT_LABEL(iTutorialID), CONV_PRIORITY_HIGH) CPRINTLN(DEBUG_INTERNET, " Created tutorial converstion: ", iTutorialID) iTutorialDialogueID = -1 ENDIF ENDPROC PROC UA_RUN_TUTORIAL_DIALOGUE() //Start the dialogue IF iTutorialDialogueID != -1 UA_START_TUTORIAL_DIALOGUE(iTutorialDialogueID) ENDIF ENDPROC PROC UA_PRINT_TUTORIAL_HELP(STRING sStringToDisplay, INT HelpTime) BEGIN_TEXT_COMMAND_DISPLAY_HELP(sStringToDisplay) END_TEXT_COMMAND_DISPLAY_HELP(HELP_TEXT_SLOT_STANDARD, FALSE, TRUE, HelpTime) ENDPROC PROC UA_SELECT_APP_DIALOGUE_TUTORIAL() BOOL bStartNewDialogue IF NOT IS_BIT_SET(iBS, UA_BS_CURRENTLY_PLAYING_TUTORIAL) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF eCurrentPage = PAGE_HOME IF NOT IS_BIT_SET(iBS, UA_BS_DONE_SETUP_MISSION_HELP) AND NOT HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_UA_BUNKER_TUT_1) CLEAR_HELP() UA_PRINT_TUTORIAL_HELP("DL_WEAP_SETUP", 9000) SET_BIT(iBS, UA_BS_DONE_SETUP_MISSION_HELP) ENDIF IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_UA_BUNKER_TUT_1) //First login bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = 0 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_UA_BUNKER_TUT_1, TRUE) ELIF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_UA_BUNKER_TUT_2) AND HAS_PLAYER_COMPLETED_BUNKER_SETUP_MISSION() //Buyers Page bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = 1 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_UA_BUNKER_TUT_2, TRUE) ENDIF ELIF eCurrentPage = PAGE_STAFF AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_UA_BUNKER_TUT_3) //Collections page bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = 2 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_UA_BUNKER_TUT_3, TRUE) ENDIF ENDIF IF bStartNewDialogue SET_BIT(iBS, UA_BS_CURRENTLY_PLAYING_TUTORIAL) CPRINTLN(DEBUG_INTERNET, " UA_SELECT_APP_DIALOGUE_TUTORIAL Running tutorial for: ", iTutorialHelpTime, " seconds. Tutorial ID: ", iTutorialDialogueID) ELIF IS_BIT_SET(iBS, UA_BS_CURRENTLY_PLAYING_TUTORIAL) IF NOT HAS_NET_TIMER_STARTED(stTutorialTimer) START_NET_TIMER(stTutorialTimer) CPRINTLN(DEBUG_INTERNET, " UA_SELECT_APP_DIALOGUE_TUTORIAL Starting timer time: ", iTutorialHelpTime, " Tutorial ID: ", iTutorialDialogueID) ELIF HAS_NET_TIMER_EXPIRED(stTutorialTimer, iTutorialHelpTime) CLEAR_BIT(iBS, UA_BS_CURRENTLY_PLAYING_TUTORIAL) iTutorialHelpTime = 0 RESET_NET_TIMER(stTutorialTimer) CPRINTLN(DEBUG_INTERNET, " UA_SELECT_APP_DIALOGUE_TUTORIAL Starting timer expired time: ", iTutorialHelpTime, " Tutorial ID: ", iTutorialDialogueID) //Once all the tutorial are complete we no longer need this function IF HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, UA_BS_DIALOGUE_TUTORIAL_COMPLETE) ENDIF ENDIF ENDIF ENDPROC PROC UA_SETUP_TUTORIAL_DIALOGUE() IF HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, UA_BS_DIALOGUE_TUTORIAL_COMPLETE) ELSE SET_USE_DLC_DIALOGUE(TRUE) ADD_PED_FOR_DIALOGUE(tutPedStruct, 2, NULL, "AGENT14") CPRINTLN(DEBUG_INTERNET, " UA_SETUP_TUTORIAL_DIALOGUE ped added for dialogue") ENDIF ENDPROC PROC UPDATE_UA_WEBSITE_TUTORIAL_BS() iUATutorialBS1 = GET_MP_INT_CHARACTER_STAT(MP_STAT_IMP_EXP_COMP_TUTORIALS1) iUATutorialBS2 = GET_MP_INT_CHARACTER_STAT(MP_STAT_IMP_EXP_COMP_TUTORIALS2) ENDPROC FUNC BOOL HAS_UA_WEBSITE_TUT_BEEN_DONE(INT &iStatBSOne, INT &iStatBSTwo, IE_WEBSITE_TUTORIAL_ENUM eTutorial) //Wrapped the call to this unction to avaoid confusion //We're using this system to save on adding additional stats/packed stats RETURN HAS_IE_WEBSITE_TUT_BEEN_DONE(iStatBSOne, iStatBSTwo, eTutorial) ENDFUNC PROC INCREMENT_NUM_TIMES_UA_WEB_TUT_HAS_PLAYED(INT &iStatBSOne, INT &iStatBSTwo, IE_WEBSITE_TUTORIAL_ENUM eTutorial) //Wrapped the call to this unction to avaoid confusion //We're using this system to save on adding additional stats/packed stats INCREMENT_NUM_TIMES_IE_WEB_TUT_HAS_PLAYED(iStatBSOne, iStatBSTwo, eTutorial) ENDPROC FUNC BOOL HAVE_ALL_UA_HELP_TUTORIALS_BEEN_COMPLETED() IF HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_RESUPPLY) AND HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_RESEARCH) AND HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_FAST_TRACK) AND HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_VIEW_UNLOCKS) AND HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_SELL_STOCK) AND HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_MANAGE_STAFF) AND HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_BUY_UPGRADES) RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_UA_HELP_TUTORIAL_BE_DISPLAYED(eWEBSITE_TUTORIAL_BS_INDEX eTutorialID) INT iTutorialID = ENUM_TO_INT(eTutorialID) SWITCH eTutorialID CASE eWTBS_BNK_TUT_RESUPPLY IF NOT HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_RESUPPLY) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND eCurrentPage = PAGE_RESUPPLY RETURN TRUE ENDIF BREAK CASE eWTBS_BNK_TUT_RESEARCH IF NOT HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_RESEARCH) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND eCurrentPage = PAGE_RESEARCH RETURN TRUE ENDIF BREAK CASE eWTBS_BNK_TUT_FAST_TRACK IF iCurrentResearchTotal > 0 AND NOT HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_FAST_TRACK) AND (HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_RESEARCH) OR IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_BNK_TUT_RESEARCH))) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND eCurrentPage = PAGE_RESEARCH RETURN TRUE ENDIF BREAK CASE eWTBS_BNK_TUT_VIEW_UNLOCKS IF NOT HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_VIEW_UNLOCKS) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND eCurrentPage = PAGE_UNLOCKS RETURN TRUE ENDIF BREAK CASE eWTBS_BNK_TUT_SELL_STOCK IF NOT HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_SELL_STOCK) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND eCurrentPage = PAGE_SELL RETURN TRUE ENDIF BREAK CASE eWTBS_BNK_TUT_MANAGE_STAFF IF NOT HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_MANAGE_STAFF) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND eCurrentPage = PAGE_STAFF RETURN TRUE ENDIF BREAK CASE eWTBS_BNK_TUT_BUY_UPGRADES IF NOT HAS_UA_WEBSITE_TUT_BEEN_DONE(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_BUY_UPGRADES) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND eCurrentPage = PAGE_UPGRADES RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC UA_RUN_APP_HELP_TEXT_TUTORIAL() STRING sHelp IF NOT IS_BIT_SET(iBS, UA_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) AND IS_BIT_SET(iBS, UA_BS_DONE_SETUP_MISSION_HELP) IF SHOULD_UA_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_BNK_TUT_RESUPPLY) sHelp = "UA_TUT_RESUP" iTutorialHelpTime = 9000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_BNK_TUT_RESUPPLY)) INCREMENT_NUM_TIMES_UA_WEB_TUT_HAS_PLAYED(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_RESUPPLY) ELIF SHOULD_UA_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_BNK_TUT_RESEARCH) sHelp = "UA_TUT_RESEA" iTutorialHelpTime = 9000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_BNK_TUT_RESEARCH)) INCREMENT_NUM_TIMES_UA_WEB_TUT_HAS_PLAYED(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_RESEARCH) ELIF SHOULD_UA_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_BNK_TUT_FAST_TRACK) sHelp = "UA_TUT_FTR" iTutorialHelpTime = 8000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_BNK_TUT_FAST_TRACK)) INCREMENT_NUM_TIMES_UA_WEB_TUT_HAS_PLAYED(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_FAST_TRACK) ELIF SHOULD_UA_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_BNK_TUT_VIEW_UNLOCKS) sHelp = "UA_TUT_UNLOCK" iTutorialHelpTime = 11000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_BNK_TUT_VIEW_UNLOCKS)) INCREMENT_NUM_TIMES_UA_WEB_TUT_HAS_PLAYED(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_VIEW_UNLOCKS) ELIF SHOULD_UA_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_BNK_TUT_SELL_STOCK) sHelp = "UA_TUT_SELL" iTutorialHelpTime = 9000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_BNK_TUT_SELL_STOCK)) INCREMENT_NUM_TIMES_IE_WEB_TUT_HAS_PLAYED(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_SELL_STOCK) ELIF SHOULD_UA_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_BNK_TUT_MANAGE_STAFF) sHelp = "UA_TUT_STAFF" iTutorialHelpTime = 9000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_BNK_TUT_MANAGE_STAFF)) INCREMENT_NUM_TIMES_UA_WEB_TUT_HAS_PLAYED(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_MANAGE_STAFF) ELIF SHOULD_UA_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_BNK_TUT_BUY_UPGRADES) sHelp = "UA_TUT_UPGR" iTutorialHelpTime = 8500 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_BNK_TUT_BUY_UPGRADES)) INCREMENT_NUM_TIMES_UA_WEB_TUT_HAS_PLAYED(iUATutorialBS1, iUATutorialBS2, DL_WEB_TUT_BUY_UPGRADES) ENDIF ENDIF IF NOT IS_BIT_SET(iBS, UA_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) AND NOT IS_STRING_NULL_OR_EMPTY(sHelp) //Display the relevant help text UA_PRINT_TUTORIAL_HELP(sHelp, iTutorialHelpTime) SET_BIT(iBS, UA_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) CPRINTLN(DEBUG_INTERNET, "[TUTORIAL] UA_RUN_APP_HELP_TEXT_TUTORIAL Printing: sHelp: ", sHelp, " time: ", iTutorialHelpTime) ELIF IS_BIT_SET(iBS, UA_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) IF NOT HAS_NET_TIMER_STARTED(stHelpTextTutorialTimer) START_NET_TIMER(stHelpTextTutorialTimer) CPRINTLN(DEBUG_INTERNET, "[TUTORIAL] UA_RUN_APP_HELP_TEXT_TUTORIAL Starting timer for: ", sHelp, " time: ", iTutorialHelpTime) ELIF HAS_NET_TIMER_EXPIRED(stHelpTextTutorialTimer, iTutorialHelpTime) CLEAR_BIT(iBS, UA_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) iTutorialHelpTime = 0 RESET_NET_TIMER(stHelpTextTutorialTimer) CPRINTLN(DEBUG_INTERNET, "[TUTORIAL] UA_RUN_APP_HELP_TEXT_TUTORIAL Starting timer expired for: ", sHelp, " time: ", iTutorialHelpTime) IF HAVE_ALL_UA_HELP_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, UA_BS_HELP_TEXT_TUTORIAL_COMPLETE) 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() CDEBUG1LN(DEBUG_SAFEHOUSE, " Shutting down! No network game is currently active") SCRIPT_CLEANUP() ELIF IS_PAUSE_MENU_ACTIVE_EX() CPRINTLN(DEBUG_INTERNET, " Shutting down! Player opend the pause menu") SCRIPT_CLEANUP() ELIF IS_ENTITY_DEAD(PLAYER_PED_ID()) CDEBUG1LN(DEBUG_SAFEHOUSE, " Shutting down! Player is injured or dead") SCRIPT_CLEANUP() ENDIF ENDPROC PROC MAINTAIN_BUNKER_TOTALS() IF ((GET_FRAME_COUNT() % 30) = 0) AND NOT UA_ARE_CONTROLS_DISABLED() AND NOT UA_IS_FAST_TRACK_OVERLAY_ACTIVE() INT iNewMaterialTotal = g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT] INT iNewProductTotal = GET_FACTORY_PRODUCT_TOTAL_AS_PERCENTAGE(eOwnedBunker, PLAYER_ID()) INT iNewResearchTotal = GET_FACTORY_RESEARCH_TOTAL_AS_PERCENTAGE(PLAYER_ID(), eOwnedBunker) BOOL bUpdateSF = FALSE IF iNewMaterialTotal != iCurrentMaterialTotal iCurrentMaterialTotal = iNewMaterialTotal bUpdateSF = TRUE ENDIF IF iNewProductTotal != iCurrentProductTotal iCurrentProductTotal = iNewProductTotal bUpdateSF = TRUE ENDIF IF iNewResearchTotal != iCurrentResearchTotal iCurrentResearchTotal = iNewResearchTotal bUpdateSF = TRUE ENDIF IF bUpdateSF = TRUE CDEBUG1LN(DEBUG_SAFEHOUSE, " MAINTAIN_BUNKER_TOTALS Current totals updated") SEND_ALL_DATA_TO_SCALEFORM() ENDIF ENDIF ENDPROC PROC SCRIPT_INITALISE() RUN_CLEANUP_CHECKS() mov = REQUEST_SCALEFORM_MOVIE("DISRUPTION_LOGISTICS") 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 CDEBUG1LN(DEBUG_SAFEHOUSE, " bRunningFmIntroCut is true so cleaning up!") ENDIF CDEBUG1LN(DEBUG_SAFEHOUSE, " DEFAULT CLEANUP") SCRIPT_CLEANUP() ENDIF SET_BROWSER_OPEN(TRUE) eOwnedBunker = GET_OWNED_BUNKER(PLAYER_ID()) //Update our known totals iCurrentMaterialTotal = g_iMaterialsTotalForFactory[BUNKER_SAVE_SLOT] iCurrentProductTotal = GET_FACTORY_PRODUCT_TOTAL_AS_PERCENTAGE(eOwnedBunker, PLAYER_ID()) iCurrentResearchTotal = GET_FACTORY_RESEARCH_TOTAL_AS_PERCENTAGE(PLAYER_ID(), eOwnedBunker) eInitialProductionMode = GET_FACTORY_PRODUCTION_MODE(PLAYER_ID(), eOwnedBunker) CDEBUG1LN(DEBUG_SAFEHOUSE, " SCRIPT_INITALISE Current totals updated. Materials: ", iCurrentMaterialTotal, " Product: ", iCurrentProductTotal, " Research: ", iCurrentResearchTotal, " Production mode: ", eInitialProductionMode) SEND_ALL_DATA_TO_SCALEFORM(TRUE) UPDATE_UA_WEBSITE_TUTORIAL_BS() UA_SETUP_TUTORIAL_DIALOGUE() IF HAVE_ALL_UA_HELP_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, UA_BS_HELP_TEXT_TUTORIAL_COMPLETE) CDEBUG1LN(DEBUG_SAFEHOUSE, " SCRIPT_INITALISE - All help text tutorials have been completed") ELIF HAS_PLAYER_COMPLETED_FACTORY_SETUP_MISSION(PLAYER_ID(), eOwnedBunker) CDEBUG1LN(DEBUG_SAFEHOUSE, " SCRIPT_INITALISE - Tutorial - Setup mission complete") SET_BIT(iBS, UA_BS_DONE_SETUP_MISSION_HELP) ENDIF IF IS_PC_VERSION() SET_MULTIHEAD_SAFE(TRUE, TRUE, TRUE, TRUE) IF NOT IS_AUDIO_SCENE_ACTIVE("GTAO_Computer_Screen_Active_Scene") START_AUDIO_SCENE("GTAO_Computer_Screen_Active_Scene") ENDIF ENDIF //UPDATE INVALID RESEARCH IF NECESSARY ENDPROC PROC MAINTAIN_FT_COST_OVERLAY_CHECKS() IF IS_BIT_SET(iBS, UA_BS_FAST_TRACK_COST_OVERLAY_ACTIVE) IF UNDERGROUND_ARMS_IS_OVERLAY_OPEN() IF IS_FACTORY_RESEARCH_FULL(PLAYER_ID(), eOwnedBunker) PLAY_CLICK_LINK_SOUND() HIDE_OVERLAY() PRINTLN("MAINTAIN_FT_COST_OVERLAY_CHECKS - overlay open - research full - Closing - UA_BS_FAST_TRACK_COST_OVERLAY_ACTIVE") ENDIF ENDIF ENDIF ENDPROC //FEATURE_GUNRUNNING //***********SCRIPT*********** SCRIPT CDEBUG1LN(DEBUG_INTERNET, " started \"", GET_THIS_SCRIPT_NAME(), "\"") IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY("appBunkerBusiness")) > 1 CDEBUG1LN(DEBUG_SAFEHOUSE, " bunker business script already running! cleaning up.") SCRIPT_CLEANUP() ENDIF SCRIPT_INITALISE() CDEBUG1LN(DEBUG_SAFEHOUSE, " Initalisation complete. Bunker = ", eOwnedBunker) /// main update loop WHILE IS_BROWSER_OPEN() RUN_CLEANUP_CHECKS() IF NOT IS_BIT_SET(iBS, UA_BS_DIALOGUE_TUTORIAL_COMPLETE) UA_SELECT_APP_DIALOGUE_TUTORIAL() UA_RUN_TUTORIAL_DIALOGUE() ENDIF IF NOT IS_BIT_SET(iBS, UA_BS_HELP_TEXT_TUTORIAL_COMPLETE) UA_RUN_APP_HELP_TEXT_TUTORIAL() ENDIF RENDER_BUNKER_APP() PASS_INPUTS_TO_SCALEFORM() MAINTAIN_BUNKER_TOTALS() MAINTAIN_FT_COST_OVERLAY_CHECKS() IF eJustPurchasedUpgrade = UPGRADE_ID_INVALID AND NOT IS_BIT_SET(iBS, UA_BS_LAUNCHED_MISSION) CHECK_BUTTON_PRESS() ELSE //for: url:bugstar:3015579 IF NOT HAS_NET_TIMER_STARTED(stExitDelay) START_NET_TIMER(stExitDelay) PRINTLN(" Started exit delay timer for upgrade purchase, setup mission or resupply mission") ELIF HAS_NET_TIMER_EXPIRED(stExitDelay, 200) IF NOT IS_BIT_SET(iBS, UA_BS_LAUNCHED_MISSION) SET_PLAYER_HAS_JUST_PURCHASED_FACTORY_UPGRADE(PLAYER_ID(), eOwnedBunker, eJustPurchasedUpgrade, TRUE) PRINTLN(" exit delay timer expired for upgrade purchase, setup mission or resupply mission") SCRIPT_CLEANUP(DEFAULT, FALSE) ELIF NOT g_SimpleInteriorData.bTriggerExit AND IS_SCREEN_FADED_OUT() PRINTLN(" Triggering simple interior exit") TRIGGER_EXIT_FROM_SIMPLE_INTERIOR_NOW() g_bLaunchedMissionFrmLaptop = TRUE SCRIPT_CLEANUP() ENDIF ENDIF ENDIF WAIT(0) ENDWHILE // Script should never reach here. Always terminate with cleanup function. CASSERTLN(DEBUG_SAFEHOUSE, " \"", GET_THIS_SCRIPT_NAME(), "\" should never reach here. Always terminate with cleanup function.") ENDSCRIPT