Files
2025-09-29 00:52:08 +02:00

2810 lines
109 KiB
Python
Executable File

///// 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("<APP_BUNKER> UA_SET_FAST_TRACK_OVERLAY_ACTIVE_STATE - Active")
SET_BIT(iBS, UA_BS_FAST_TRACK_COMPLETE_OVERLAY_ACTIVE)
ELSE
PRINTLN("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> UNDERGROUND_ARMS_SET_SELL_MISSION_LOCATION new location = City")
ELSE
SET_BIT(iBS,UA_BS_SELECTED_SELL_COUNTRY)
PRINTLN("<APP_BUNKER> 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, "<APP_BUNKER>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, "<APP_BUNKER> 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, "<APP_BUNKER> 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, "<APP_BUNKER> 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, "<APP_BUNKER> 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, "<APP_BUNKER> 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("<APP_BUNKER> 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, "<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> CLEAR_QUOTED_COSTS - clearing quoted FT cost")
iQuotedFTCost = 0
ENDIF
IF iQuotedResupplyCost > 0
PRINTLN("<APP_BUNKER> 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, "<APP_BUNKER> 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("<APP_BUNKER>, 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, "<APP_BUNKER> 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, "<APP_BUNKER> 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("<APP_BUNKER> 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, "<APP_BUNKER> 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, "<APP_BUNKER> DO_LAUNCH_MISSION_TRANSACTION: success!!")
SET_LAST_PURCHASED_FACTORY_MISSION_CATALOGUE_KEY(iItemId)
ENDIF
ELSE
CPRINTLN(DEBUG_INTERNET, "<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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_BUNKER> [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_BUNKER> [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,"<APP_BUNKER> 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("<APP_BUNKER> 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, "<APP_BUNKER> 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, "<APP_BUNKER> 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("<APP_BUNKER> 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, "<APP_BUNKER> 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("<APP_BUNKER> RUN_TRANSACTION_FOR_BUNKER_UPGRADE - Transaction success")
bSuccess = TRUE
ELSE
PRINTLN("<APP_BUNKER> 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("<APP_BUNKER> RUN_TRANSACTION_FOR_BUNKER_UPGRADE - item cost: ",iItemCost)
PRINTLN("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> RUN_REMOVE_RESEARCH_TRANSACTION - Processing remove materials transaction")
IF GET_BASKET_TRANSACTION_SCRIPT_INDEX() = -1
AND eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_DEFAULT
PRINTLN("<APP_BUNKER> 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("<APP_BUNKER> RUN_REMOVE_RESEARCH_TRANSACTION - Remove research transaction failed")
RETURN FALSE
ELIF eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_SUCCESS
PRINTLN("<APP_BUNKER> 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("<APP_BUNKER> RUN_REMOVE_RESEARCH_TRANSACTION - Processing remove research transaction")
IF GET_BASKET_TRANSACTION_SCRIPT_INDEX() = -1
AND eRemoveResearchState = CONTRABAND_TRANSACTION_STATE_DEFAULT
PRINTLN("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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, "<APP_BUNKER> 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, "<APP_BUNKER> DO_CEASE_PRODUCTION_TRANSACTION - Transaction failed to remove product from our bunker")
ENDIF
ELSE
CDEBUG1LN(DEBUG_INTERNET, "<APP_BUNKER> DO_CEASE_PRODUCTION_TRANSACTION - Transaction failed to add remove research")
ENDIF
ELSE
CDEBUG1LN(DEBUG_INTERNET, "<APP_BUNKER> 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("<APP_BUNKER> 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,"<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> WAS_PAID_RESUPPLY_TRANSACTION_SUCCESSFUL - Trans slot: ", iScriptTransactionIndex," is currently running the transaction for bunker")
iAssignedTransactionSlot = iScriptTransactionIndex
BREAKLOOP
ENDIF
ENDREPEAT
IF iAssignedTransactionSlot = -1
ASSERTLN("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> WAS_PAID_RESUPPLY_TRANSACTION_SUCCESSFUL - Transaction success!")
RETURN TRUE
ELSE
PRINTLN("<APP_BUNKER> WAS_PAID_RESUPPLY_TRANSACTION_SUCCESSFUL - Transaction failed!")
RETURN FALSE
ENDIF
ELSE
PRINTLN("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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,"<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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, "<APP_BUNKER> 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, "<APP_BUNKER_TUT> HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED TRUE")
RETURN TRUE
ENDIF
CPRINTLN(DEBUG_INTERNET, "<APP_BUNKER_TUT> 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, "<APP_BUNKER> 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, "<APP_BUNKER_TUT> 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, "<APP_BUNKER_TUT> 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, "<APP_BUNKER_TUT> 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, "<APP_BUNKER> 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, "<APP_BUNKER>[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, "<APP_BUNKER>[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, "<APP_BUNKER>[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, "<APP_BUNKER> Shutting down! No network game is currently active")
SCRIPT_CLEANUP()
ELIF IS_PAUSE_MENU_ACTIVE_EX()
CPRINTLN(DEBUG_INTERNET, "<APP_BUNKER> Shutting down! Player opend the pause menu")
SCRIPT_CLEANUP()
ELIF IS_ENTITY_DEAD(PLAYER_PED_ID())
CDEBUG1LN(DEBUG_SAFEHOUSE, "<APP_BUNKER> 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, "<APP_BUNKER> 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, "<APP_BUNKER> bRunningFmIntroCut is true so cleaning up!")
ENDIF
CDEBUG1LN(DEBUG_SAFEHOUSE, "<APP_BUNKER> 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, "<APP_BUNKER> 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, "<APP_BUNKER> SCRIPT_INITALISE - All help text tutorials have been completed")
ELIF HAS_PLAYER_COMPLETED_FACTORY_SETUP_MISSION(PLAYER_ID(), eOwnedBunker)
CDEBUG1LN(DEBUG_SAFEHOUSE, "<APP_BUNKER> 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, "<APP_BUNKER> started \"", GET_THIS_SCRIPT_NAME(), "\"")
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY("appBunkerBusiness")) > 1
CDEBUG1LN(DEBUG_SAFEHOUSE, "<APP_BUNKER> bunker business script already running! cleaning up.")
SCRIPT_CLEANUP()
ENDIF
SCRIPT_INITALISE()
CDEBUG1LN(DEBUG_SAFEHOUSE, "<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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("<APP_BUNKER> 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, "<APP_BUNKER> \"", GET_THIS_SCRIPT_NAME(), "\" should never reach here. Always terminate with cleanup function.")
ENDSCRIPT