USING "rage_builtins.sch" USING "globals.sch" USING "cellphone_public.sch" USING "commands_zone.sch" USING "website_private.sch" USING "net_realty_warehouse.sch" USING "net_gang_boss.sch" USING "net_simple_interior_ie_garage.sch" USING "net_realty_vehicle_garage.sch" USING "net_ie_dropoff_public.sch" USING "SVM_MISSION_FLOW.sch" USING "net_script_tunables_new.sch" USING "gb_vehicle_export_freemode_header.sch" SCALEFORM_INDEX mov SCALEFORM_RETURN_INDEX currentSelectionReturnIndex, currentWarehouseReturnIndex, currentCurrentScreenReturnIndex, buyWindowOpenReturnIndex ///////////////////////////// /// Consts /// //Page ID's CONST_INT ciLoginPageID 0 CONST_INT ciWarehouseStatsPageID 1 CONST_INT ciWarehouseMapPageID 2 CONST_INT ciBranchPageID 3 CONST_INT ciVehicleWHStatsPageID 4 CONST_INT ciVehicleWHMapPageID 5 CONST_INT ciSVMPageID 6 //Bit set consts CONST_INT SEC_BS_DISPLAY_OVERLAY_WARNING 0 CONST_INT SEC_BS_DISPLAY_OVERLAY_CONFIRM 1 CONST_INT SEC_BS_PRUCHASE_IE_WH_SELECTED 2 CONST_INT SEC_BS_LAUNCH_STEAL_MIS_SELECTED 3 CONST_INT SEC_BS_IE_TRANSACTION_FAILED 4 CONST_INT SEC_BS_OVERLAY_ACTIVE 5 CONST_INT SEC_BS_PROPERTY_PURCHASED_THIS_RUN 6 //Set to true if we've purchased anything during this run of the script CONST_INT SEC_BS_PROCESSING_BASKET 7 CONST_INT SEC_BS_PROCESSING_CONTRA_BASKET_FAILED 8 CONST_INT SEC_BS_PROCESSING_WH_BASKET_DONE 9 CONST_INT SEC_BS_BUY_WAREHOUSE_CONFIRMED 10 CONST_INT SEC_BS_SELL_CONTRABAND_CONFIRMED 11 CONST_INT SEC_BS_CHECK_PAGE_ID 12 CONST_INT SEC_BS_CURRENTLY_INSIDE_WAREHOUSE 13 CONST_INT SEC_BS_CURRENTLY_PLAYING_TUTORIAL 14 CONST_INT SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP 15 CONST_INT SEC_BS_SIDE_PANEL_SHOWING 16 CONST_INT SEC_BS_CHECK_SIDE_BAR 17 CONST_INT SEC_BS_PURCHASE_FAILED_NO_MONEY 18 CONST_INT SEC_BS_JUST_PURCHASED_WAREHOUSE 19 CONST_INT SEC_BS_WAITING_FOR_BUTTON_RETURN_VALUE 20 CONST_INT SEC_BS_SHOW_CASH_CHANGE_HUD 21 CONST_INT SEC_BS_DISPLAYING_LOGIN_PAGE 22 CONST_INT SEC_BS_DISPLAYING_PURCHASE_WH_TUT 23 CONST_INT SEC_BS_DIALOGUE_TUTORIAL_COMPLETE 24 CONST_INT SEC_BS_HELP_TEXT_TUTORIAL_COMPLETE 25 CONST_INT SEC_BS_DELAY_APP_EXIT_FOR_CONVERSATION 26 CONST_INT SEC_BS_BUY_MISSION_ON_COOLDOWN 27 CONST_INT SEC_BS_SELL_MISSION_ON_COOLDOWN 28 CONST_INT SEC_BS_BUY_COOLDOWN_HELP_PLAYED 29 CONST_INT SEC_BS_SELL_COOLDOWN_HELP_PLAYED 30 CONST_INT SEC_BS_COOLDOWN_HELP_DISPLAYING 31 //End of Bit set 1 CONST_INT SEC_BS2_SPECIAL_ITEM 0 CONST_INT SEC_BS2_PA_IS_MALE 1 CONST_INT SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES 2 CONST_INT SEC_BS2_FINISHED_SHOWING_NAG_SCREEN_LF 3 //Set to true to make sure we don't close the overlay screen after the browser nag screen is closed CONST_INT SEC_BS2_DONE_MP_INTRO_HELP_1 4 CONST_INT SEC_BS2_DONE_MP_INTRO_HELP_2 5 CONST_INT SEC_BS2_DONE_MP_INTRO_HELP_3 6 //End of bit set 2 ENUM enumItemConsumed inputConsumed_0 = 0, inputConsumed_1, inputConsumed_BUY_WAREHOUSE = 3007, inputConsumed_BUY_SMALL_SHIPMENT = 3008, inputConsumed_BUY_MEDIUM_SHIPMENT = 3009, inputConsumed_BUY_LARGE_SHIPMENT = 3010, inputConsumed_SELL = 3011, inputConsumed_CONFIRM = 3012, //Overlay screen confirm inputConsumed_STEAL_VEHICLE = 4001, inputConsumed_VEH_STAT_ACCEPT = 4003, //Accept button on the vehicle stat screen overlay inputConsumed_VEH_STAT_CANCEL = 4004, //Cancel button on the vehicle stat screen overlay inputConsumed_BUY_VEH_WH = 5005, inputConsumed_MAP_STEAL_VEHICLE = 5006, inputConsumed_VEH_MAP_ACCEPT = 5007, //Accept button on the map screen overlay inputConsumed_VEH_MAP_CANCEL = 5008, //Cancel button on the map screen overlay inputConsumed_SVM_MAP_ACCEPT = 6002, //Accept button on the special vehicle screen inputConsumed_SVM_MAP_CANCEL = 6003, //Cancel button on the special vehicle screen inputConsumed_SVM_LAUNCH = 6999, //Any of the special vehilce options inputConsumed_END ENDENUM enumItemConsumed currentButtonPressStage = inputConsumed_1 ///////////////////////////// /// Variables /// INT iBS, iBS2 INT iCurrentSelectedWarehouse = -1 CONTRABAND_SIZE eCurrentSelectedShipmentSize = CONTRABAND_INVALID //Contraband details at the time of opening the app CONTRABAND_TYPE securoContraType = CONTRABAND_TYPE_INVALID structPedsForConversation tutPedStruct //Cooldown help text vars INT iWarehouseSellCooldownBS = 0 INT iCooldownExpierdCheckFC = 0 INT iJustPurchasedWHID = 0 INT iTutorialDialogueID = -1 INT iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iMissionUnavailableReason = -1 INT iCurrentlyInsideWarehouse = ciW_Invalid INT iCurrentPageID = ciLoginPageID INT iPlayerLoop = 0 INT iTutorialHelpTime = 0 INT iCratesToSell = 0 INT iContrabandBuyerID = 0 INT iCooldownTimeLastUpdate = 0 //The cooldown time we sent to SF last update INT iLeftX, iLeftY INT iRightX, iRightY //Used for the replace warehouse menu when trading in INT iWHOrder[ciMaxOwnedWarehouses] FLOAT iCursorX = 0.0 FLOAT iCursorY = 0.0 FLOAT iCursorXLast = 0.0 FLOAT iCursorYLast = 0.0 //Used to check if the player has moved too far from the laptop object VECTOR vPlayerCoords //Used to maintain a list of organisations for the securoserv app INT iActiveUsers[MAX_NUM_GANGS] //Needed so we can remove this user from the list if they leave the game TEXT_LABEL_63 tlUserList[MAX_NUM_GANGS] //Used for the tutorial SCRIPT_TIMER sTutorialTimer //USed to block the cash hud when we don't need it SCRIPT_TIMER stCashChangeHUDTimer ///////////////////////////// /// Variables for the IE parts of the SF movie /// //An offset value to make sure we give SF unique ID's for the IE warehouses vs the old warehouses INT iWarehouseOffset = (ciMaxWarehouses + 1) INT iSVMToLaunch = -1 //The special vehicle mission we have selected INT iIETutorialBS1 = -1 INT iIETutorialBS2 = -1 FMMC_PLANNING_MISSION_HEADER_DESCRIPTIONS sSVMDescriptions IE_GARAGE_INTERIORS eSelectedInterior = IE_INTERIOR_BASIC #IF IS_DEBUG_BUILD BOOL bDrawDebugStuff = FALSE #ENDIF ENUM SEC_OVERLAY_PROMPT SEC_OVERLAY_NO_VEH_FOUND = 0, SEC_OVERLAY_WHOUSE_FULL, SEC_OVERLAY_GOON_ANIMAL, SEC_OVERLAY_GOON_GAMBLING ENDENUM PROC CLEANUP_SECUROSERVE(BOOL bCloseHubApp = FALSE) CPRINTLN(DEBUG_INTERNET, " cleanup \"", GET_THIS_SCRIPT_NAME(), "\"") SET_BROWSER_OPEN(FALSE) SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov) DISABLE_CELLPHONE(FALSE) IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) g_bSecuroDelayOfficeChairExit = TRUE SET_AUDIO_SCRIPT_CLEANUP_TIME(1000) PLAY_SOUND_FRONTEND(-1, "Logout", "GTAO_Exec_SecuroServ_Computer_Sounds") ELSE NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) ENDIF STOP_AUDIO_SCENE("GTAO_Computer_Screen_Active_Scene") Unpause_Objective_Text() THEFEED_RESUME() SET_USE_DLC_DIALOGUE(FALSE) IF IS_PC_VERSION() SET_MULTIHEAD_SAFE(FALSE, TRUE, TRUE, TRUE) ENDIF IF IS_BIT_SET(iBS, SEC_BS_PROPERTY_PURCHASED_THIS_RUN) AND NOT USE_SERVER_TRANSACTIONS() REQUEST_SAVE(SSR_REASON_PURCHASE_PROPERTY, STAT_SAVETYPE_END_SHOPPING) ENDIF CLEAR_BIT(iBS, SEC_BS_DISPLAY_OVERLAY_WARNING) CLEAR_BIT(iBS, SEC_BS_DISPLAY_OVERLAY_CONFIRM) IF bCloseHubApp AND WAS_BUSINESS_APP_SRIPT_LAUNCHED_FROM_HUB_APP() g_sBusAppManagement.bCloseHubApp = TRUE ENDIF g_sBusAppManagement.iRenderHandShakeFC = -1 TERMINATE_THIS_THREAD() ENDPROC FUNC INT GET_WAREHOUSE_INDEX_FROM_SCALEFORM_INDEX(INT iScaleformID) RETURN (iScaleformID+1) ENDFUNC FUNC INT GET_SCALEFORM_INDEX_FROM_WAREHOUSE_INDEX(INT iWarehouseID) RETURN (iWarehouseID-1) ENDFUNC FUNC BOOL ARE_SELL_MISSIONS_DISABLED() RETURN g_sMPTunables.bexec_disable_sell_missions ENDFUNC /// PURPOSE: /// Grabs the name of our gang. If we're checking the local player we need to /// avoid the restricted account checks: 2770221 FUNC STRING GET_PLAYER_ORGANISATION_NAME(PLAYER_INDEX piPlayer) IF piPlayer = PLAYER_ID() PLAYER_INDEX playerID = GB_GET_THIS_PLAYER_GANG_BOSS(piPlayer) IF playerID != INVALID_PLAYER_INDEX() STRING stReturn = GB_TO_STRING(GlobalplayerBD_FM_3[NATIVE_TO_INT(playerID)].sMagnateGangBossData.tlGangName) IF IS_STRING_NULL_OR_EMPTY(stReturn) RETURN GET_DEFAULT_GANG_NAME(playerID) ELSE RETURN stReturn ENDIF ENDIF ENDIF RETURN GB_GET_PLAYER_ORGANIZATION_NAME_AS_A_STRING(piPlayer) ENDFUNC FUNC STRING GET_SPECIAL_ITEM_TXD_LABEL(INT iWarehouse) CONTRABAND_SPECIAL_ITEM eSpecialItem = GET_FIRST_SPECIAL_ITEM_IN_WAREHOUSE(iWarehouse) SWITCH eSpecialItem CASE CONTRABAND_ITEM_EXTRA_LARGE_DIAMOND RETURN "ah_sell_crt_2" CASE CONTRABAND_ITEM_FILM_REEL RETURN "ah_sell_crt_3" CASE CONTRABAND_ITEM_ORNAMENTAL_EGG RETURN "ah_sell_crt_4" CASE CONTRABAND_ITEM_GOLDEN_MINIGUN RETURN "ah_sell_crt_5" CASE CONTRABAND_ITEM_SASQUATCH_HIDE RETURN "ah_sell_crt_6" CASE CONTRABAND_ITEM_RARE_POCKET_WATCH RETURN "ah_sell_crt_7" ENDSWITCH RETURN "" ENDFUNC PROC UPDATE_IE_MISSION_COOLDOWN() //Get the time remaining (In seconds) INT iCurrentTimeRemaining = (GB_GET_MISSION_COOLDOWN_TIME_REMAINING(VEV_EYE_IN_THE_SKY) + 1) INT iTimeToPassScaleform = -1 IF GB_HAS_IE_MISSION_COOLDOWN_TIMER_EXPIRED(VEV_EYE_IN_THE_SKY) IF iCooldownTimeLastUpdate != 0 iTimeToPassScaleform = 0 iCooldownTimeLastUpdate = 0 ENDIF ELIF iCooldownTimeLastUpdate != iCurrentTimeRemaining iTimeToPassScaleform = iCurrentTimeRemaining iCooldownTimeLastUpdate = iCurrentTimeRemaining ENDIF IF iTimeToPassScaleform != -1 CDEBUG2LN(DEBUG_INTERNET, " UPDATE_IE_MISSION_COOLDOWN sending uptated time of: ", iTimeToPassScaleform) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_COOLDOWN") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iTimeToPassScaleform) END_SCALEFORM_MOVIE_METHOD() ENDIF ENDPROC FUNC STRING GET_SEC_OVERLAY_PROMPT(SEC_OVERLAY_PROMPT sPrompt) SWITCH sPrompt CASE SEC_OVERLAY_NO_VEH_FOUND RETURN "SEC_MISS_L_F" CASE SEC_OVERLAY_WHOUSE_FULL RETURN "SEC_WHOUSE_FULL" CASE SEC_OVERLAY_GOON_ANIMAL RETURN "GENERAL_MLF_G2" CASE SEC_OVERLAY_GOON_GAMBLING RETURN "GENERAL_MLF_G5" ENDSWITCH RETURN "" ENDFUNC FUNC BOOL SHOULD_SVM_MISSION_BE_ADDED_TO_SELECTION(INT iMission) // #IF IS_DEBUG_BUILD // IF GET_COMMANDLINE_PARAM_EXISTS("sc_ImpExpFlowPlayVariations") // RETURN TRUE // ENDIF // #ENDIF #IF FEATURE_CASINO_HEIST IF WAS_BUSINESS_APP_SRIPT_LAUNCHED_FROM_HUB_APP() RETURN FALSE ENDIF #ENDIF UNUSED_PARAMETER(iMission) RETURN TRUE ENDFUNC FUNC BOOL GET_DESCRIPTION_FOR_SVM(INT iMissionDecHash) BOOL bDescriptionReady = TRUE CACHED_MISSION_DESCRIPTION_LOAD_VARS sMissionDescLoadVars IF iMissionDecHash != 0 WHILE NOT REQUEST_AND_LOAD_CACHED_DESCRIPTION_FOR_HEIST(iMissionDecHash, sMissionDescLoadVars) PRINTLN(" DOWNLOAD_PLANNING_MISSION_HEADER_DATA - GET_DESCRIPTION_FOR_SVM - IS_HEIST_DESCRIPTION_READY - Waiting on sub HASH: ", iMissionDecHash) WAIT(0) ENDWHILE IF NOT sMissionDescLoadVars.bSucess bDescriptionReady = FALSE ENDIF ENDIF IF bDescriptionReady PRINTLN(" [BDEC] * DOWNLOAD_PLANNING_MISSION_HEADER_DATA - GET_DESCRIPTION_FOR_SVM - All description strings are available; beginning dump: ") STRING sText INT iStartCharacterIndex, iStringLengthInCharacters, iArrayIndex, i BOOL bFinishedCopying //Clear the previously saved data REPEAT FMMC_NUM_LABELS_FOR_DESCRIPTION i sSVMDescriptions.tl63MissionDecription[i] = "" ENDREPEAT //Get the cached description: sText = UGC_GET_CACHED_DESCRIPTION_WITH_NO_TRANSLATION_CHECK(iMissionDecHash, INVITE_MAX_DESCRIPTION_LENGTH) iStringLengthInCharacters = GET_LENGTH_OF_LITERAL_STRING(sText) PRINTLN(" [BDEC] DOWNLOAD_PLANNING_MISSION_HEADER_DATA - GET_DESCRIPTION_FOR_PLANNING_MISSION_HEADER_DATA - [", sText, "] - iStringLengthInCharacters = ", iStringLengthInCharacters) //Copy this string into chunks using a byte limit WHILE NOT bFinishedCopying //If we've got to the end of the string then we're done IF iStartCharacterIndex >= iStringLengthInCharacters PRINTLN(" [BDEC] DOWNLOAD_PLANNING_MISSION_HEADER_DATA - GET_DESCRIPTION_FOR_PLANNING_MISSION_HEADER_DATA - IS_HEIST_DESCRIPTION_READY = ", sSVMDescriptions.tl63MissionDecription[0], sSVMDescriptions.tl63MissionDecription[1], sSVMDescriptions.tl63MissionDecription[2], sSVMDescriptions.tl63MissionDecription[3], sSVMDescriptions.tl63MissionDecription[4], sSVMDescriptions.tl63MissionDecription[5], sSVMDescriptions.tl63MissionDecription[6], sSVMDescriptions.tl63MissionDecription[7]) bFinishedCopying = TRUE ELSE //If we're over the array size then we done IF iArrayIndex >= FMMC_NUM_LABELS_FOR_DESCRIPTION PRINTLN(" bFinishedCopying (iArrayIndex >= FMMC_NUM_LABELS_FOR_DESCRIPTION)") bFinishedCopying = TRUE ELSE //Get the next chunk sSVMDescriptions.tl63MissionDecription[iArrayIndex] = GET_CHARACTER_FROM_AUDIO_CONVERSATION_FILENAME_WITH_BYTE_LIMIT(sText, iStartCharacterIndex, iStringLengthInCharacters, 63) //Print PRINTLN(" [BDEC]DOWNLOAD_PLANNING_MISSION_HEADER_DATA - GET_DESCRIPTION_FOR_PLANNING_MISSION_HEADER_DATA - g_HeistPrePlanningClient.sPlanningData.sMissionData.tl63MissionDecription[", iArrayIndex, "] = ", sSVMDescriptions.tl63MissionDecription[iArrayIndex]) //Get the length of the chunk that we've just grabbed so we can move start position iStartCharacterIndex += GET_LENGTH_OF_LITERAL_STRING(sSVMDescriptions.tl63MissionDecription[iArrayIndex]) PRINTLN("iStartCharacterIndex is now ", iStartCharacterIndex) //Move to the next array iArrayIndex++ PRINTLN(" iArrayIndex is now ", iArrayIndex) ENDIF ENDIF ENDWHILE ENDIF RETURN bDescriptionReady ENDFUNC PROC POPULATE_SPECIAL_VEH_DATA(INT iMissionID, INT iVehicleMissionsCompleted, BOOL bFallback = FALSE) INT i INT iSpecialVehID = iMissionID INT iCountOfMissionsToUnock = GET_SVM_UNLOCK_VALUE(iMissionID) INT iArrayPos = SVM_FLOW_GET_NEXT_AVAILABLE_MISSION_CONTENT_ARRAY_POS(iMissionID) FLOAT fMissionCashMultiplier = 0.0 FLOAT fMissionRPMultiplier = 0.0 TEXT_LABEL tlMissionName = GET_SVM_MISSION_NAME(iMissionID) BOOL bMissionUnlocked = (iVehicleMissionsCompleted >= iCountOfMissionsToUnock) IF bMissionUnlocked AND AM_I_TRANSITION_SESSIONS_STARTING_ON_CALL() bMissionUnlocked = FALSE ENDIF STRING sTextureHandle SCRIPT_TIMER stDescriptionLoadTO IF bFallback sTextureHandle = GET_SVM_SCALEFORM_TXD(iMissionID) CDEBUG1LN(DEBUG_INTERNET, "[SECURO] POPULATE_SPECIAL_VEH_DATA - bFallback = ", BOOL_TO_INT(bFallback), " , using alternate SVM image.") ELSE sTextureHandle = TEXT_LABEL_TO_STRING(g_txtSVMThumbnails[iMissionID]) ENDIF #IF IS_DEBUG_BUILD IF GET_COMMANDLINE_PARAM_EXISTS("sc_SvmFlowAlwaysAvailable") bMissionUnlocked = TRUE ENDIF #ENDIF IF bMissionUnlocked iCountOfMissionsToUnock = 0 ENDIF //If we have a valid mision request the description IF iArrayPos != -1 IF NOT IS_CLOUD_DOWN_CLOUD_LOADER() WHILE NOT GET_DESCRIPTION_FOR_SVM(g_FMMC_ROCKSTAR_CREATED.sMissionHeaderVars[iArrayPos].iMissionDecHash) IF NOT HAS_NET_TIMER_STARTED(stDescriptionLoadTO) START_NET_TIMER(stDescriptionLoadTO) ELIF HAS_NET_TIMER_EXPIRED(stDescriptionLoadTO, 750) iArrayPos = -1 CASSERTLN(DEBUG_INTERNET, " POPULATE_SPECIAL_VEH_DATA Description failed to load! using fallback") BREAKLOOP ENDIF CDEBUG1LN(DEBUG_INTERNET, " POPULATE_SPECIAL_VEH_DATA waiting on descriptions to load using GET_DESCRIPTION_FOR_SVM") WAIT(0) ENDWHILE IF iArrayPos != -1 GET_XP_MULTIPLIER_AND_CASH_MULTIPLIER_BASED_ON_MISSION_TYPE(fMissionRPMultiplier, fMissionCashMultiplier, FMMC_TYPE_MISSION, FMMC_TYPE_MISSION_CONTACT, DEFAULT, DEFAULT, GET_HASH_KEY(g_FMMC_ROCKSTAR_CREATED.sMissionHeaderVars[iArrayPos].tlName)) ENDIF IF fMissionRPMultiplier = 1.0 fMissionRPMultiplier = 0.0 ELSE CDEBUG1LN(DEBUG_INTERNET, " POPULATE_SPECIAL_VEH_DATA Mission RP multiplier set to: ", fMissionRPMultiplier) ENDIF IF fMissionCashMultiplier = 1.0 fMissionCashMultiplier = 0.0 ELSE CDEBUG1LN(DEBUG_INTERNET, " POPULATE_SPECIAL_VEH_DATA Mission cash multiplier set to: ", fMissionCashMultiplier) ENDIF ELSE iArrayPos = -1 CDEBUG1LN(DEBUG_INTERNET, " POPULATE_SPECIAL_VEH_DATA cloud down. Using fallback") ENDIF ELSE CASSERTLN(DEBUG_INTERNET, " POPULATE_SPECIAL_VEH_DATA Description failed to load because iArrayPos is -1") ENDIF //Documentation here: https://hub.take2games.com/display/RSGGTAV/SecuroServ+App BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_SPECIAL_VEHICLE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSpecialVehID) // Mission ID SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlMissionName) // Mission/Vehicle name IF iArrayPos != -1 BEGIN_TEXT_COMMAND_SCALEFORM_STRING("FMMC_OFFLN_HD") //Add the text description for the mission grabbed above REPEAT FMMC_NUM_LABELS_FOR_DESCRIPTION i ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(sSVMDescriptions.tl63MissionDecription[i]) ENDREPEAT END_TEXT_COMMAND_SCALEFORM_STRING() ELSE //Fallback on the old descriptions SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("") // Fallback Mission description ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_TEXTURE_NAME_STRING(sTextureHandle) // TXD reference SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iCountOfMissionsToUnock) // Count of regular missions to unlock this SVM SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bMissionUnlocked) // If we've unlocked the mission or not SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(FLOOR(fMissionCashMultiplier)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(FLOOR(fMissionRPMultiplier)) END_SCALEFORM_MOVIE_METHOD() ENDPROC /// PURPOSE: /// /// PARAMS: /// eIEWarehouse - The warehouse we check to see if is on sale /// eIEWarehouseInterior - The interior we check to see if is on sale /// bIncludeWHCost - Pass true if the cost of the WH shuld be added /// bsalePrice - Pass true if you need the sale price of the vehicle warehouse /// RETURNS: /// The price of the interior passed incluing sale discounts and office base price if required FUNC INT GET_IE_WH_COST_WITH_INTERIOR(IMPORT_EXPORT_GARAGES eIEWarehouse, IE_GARAGE_INTERIORS eIEWarehouseInterior, BOOL bIncludeWHCost, BOOl bsalePrice) INT iTotalCost BOOL bOwnedWH = (eIEWarehouse = GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID())) IF bsalePrice IF (IS_IE_GARAGE_ON_SALE(eIEWarehouse) & bIncludeWHCost) OR IS_IE_GARAGE_INTERIOR_ON_SALE(eIEWarehouseInterior, bOwnedWH) iTotalCost += GET_IE_GARAGE_INTERIOR_COST(eIEWarehouseInterior, bOwnedWH) IF bIncludeWHCost iTotalCost += GET_IE_GARAGE_COST(eIEWarehouse) ENDIF ELSE iTotalCost = -1 ENDIF ELSE IF bIncludeWHCost IF IS_IE_GARAGE_ON_SALE(eIEWarehouse) iTotalCost += GET_IE_GARAGE_BASE_COST(eIEWarehouse) ELSE iTotalCost += GET_IE_GARAGE_COST(eIEWarehouse) ENDIF ENDIF IF IS_IE_GARAGE_INTERIOR_ON_SALE(eIEWarehouseInterior, bOwnedWH) iTotalCost += GET_IE_GARAGE_INTERIOR_BASE_COST(eIEWarehouseInterior, bOwnedWH) ELSE iTotalCost += GET_IE_GARAGE_INTERIOR_COST(eIEWarehouseInterior, bOwnedWH) ENDIF ENDIF RETURN iTotalCost ENDFUNC /// PURPOSE: /// Returns the minimum sale value of all vehicles in a players vehicle warehouse FUNC INT GET_IE_WAREHOUSE_VEHICLE_STOCK_VALUE() INT i, iTotalValue //Send data for the players owned vehicles REPEAT ciMAX_IE_OWNED_VEHICLES i IE_VEHICLE_ENUM eTempVeh = INT_TO_ENUM(IE_VEHICLE_ENUM, GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdIEgarageData.iWarehouseVehicles[i]) IF ENUM_TO_INT(eTempVeh) > ciIE_COVER_VEHICLE_INDEX eTempVeh = INT_TO_ENUM(IE_VEHICLE_ENUM, (ENUM_TO_INT(eTempVeh) - ciIE_COVER_VEHICLE_INDEX)) ENDIF IF eTempVeh > IE_VEH_INVALID AND eTempVeh < IE_VEHICLE_COUNT iTotalValue += GET_VEHICLE_EXPORT_VEHICLE_BASE_VALUE(GET_MODEL_NAME_FROM_IE_VEHICLE(eTempVeh), IE_DROPOFF_PRIVATE_BUYER_1, FALSE) ENDIF ENDREPEAT RETURN iTotalValue ENDFUNC PROC POPULATE_MP_SECUROSERV_SITE_VEH_WH_PIN(IMPORT_EXPORT_GARAGES eIEWarehouse, INT iCollectedVehCount) IF eIEWarehouse = IE_GARAGE_STRAWBERRY EXIT ENDIF VECTOR vCoord = GET_IE_GARAGE_MAP_MIDPOINT(GET_SIMPLE_INTERIOR_ID_FROM_IMPORT_EXPORT_GARAGE_ID(eIEWarehouse)) BOOL bIsOwned = (GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID()) = eIEWarehouse) INT iVehWHID = (ENUM_TO_INT(eIEWarehouse) + iWarehouseOffset) INT iWHCostWithBasicInterior = GET_IE_WH_COST_WITH_INTERIOR(eIEWarehouse, IE_INTERIOR_BASIC, !bIsOwned, FALSE) INT iWHSaleCostWithBasicInterior = GET_IE_WH_COST_WITH_INTERIOR(eIEWarehouse, IE_INTERIOR_BASIC, !bIsOwned, TRUE) INT iWHCostWithUrbanInterior = GET_IE_WH_COST_WITH_INTERIOR(eIEWarehouse, IE_INTERIOR_URBAN, !bIsOwned, FALSE) INT iWHSaleCostWithUrbanInterior = GET_IE_WH_COST_WITH_INTERIOR(eIEWarehouse, IE_INTERIOR_URBAN, !bIsOwned, TRUE) INT iWHCostWithBrandedInterior = GET_IE_WH_COST_WITH_INTERIOR(eIEWarehouse, IE_INTERIOR_BRANDED, !bIsOwned, FALSE) INT iWHSaleCostWithBrandedInterior = GET_IE_WH_COST_WITH_INTERIOR(eIEWarehouse, IE_INTERIOR_BRANDED, !bIsOwned, TRUE) TEXT_LABEL tlName = GET_IE_GARAGE_NAME_LABEL(eIEWarehouse) TEXT_LABEL locationLabel = GET_NAME_OF_ZONE(vCoord) TEXT_LABEL descriptionLabel = GET_IE_GARAGE_DESCRIPTION(eIEWarehouse) TEXT_LABEL txdLabel = GET_IE_GARAGE_TXD(eIEWarehouse) INT iVehicleCapacity = 40 INT iNumVehiclesStored = iCollectedVehCount INT iValueOfVehiclesStored = 0 INT iOwnedInterior = -1 FLOAT fStealCooldown = 0.0 IF NOT bIsOwned iNumVehiclesStored = 0 ENDIF IF eIEWarehouse = IE_GARAGE_LISA OR eIEWarehouse = IE_GARAGE_LISA2 locationLabel = "WH_LISA_1" ENDIF IF bIsOwned iOwnedInterior = ENUM_TO_INT(GET_PLAYERS_OWND_IE_WAREHOUSE_INTERIOR(PLAYER_ID())) //The basic interior has a 0 or $125000 cost depending on if we're renovating or not iWHCostWithBasicInterior = GET_IE_GARAGE_INTERIOR_BASE_COST(IE_INTERIOR_BASIC, TRUE) //Get the value of all owned vehicles iValueOfVehiclesStored = GET_IE_WAREHOUSE_VEHICLE_STOCK_VALUE() CPRINTLN(DEBUG_INTERNET, " POPULATE_MP_SECUROSERV_SITE_VEH_WH_PIN Passing owned interior: ", iOwnedInterior, " value of owned vehicles: ", iValueOfVehiclesStored) ENDIF IF NOT GB_HAS_IE_MISSION_COOLDOWN_TIMER_EXPIRED(VEV_EYE_IN_THE_SKY) fStealCooldown = TO_FLOAT(GB_GET_MISSION_COOLDOWN_TIME_REMAINING(VEV_EYE_IN_THE_SKY)) CDEBUG1LN(DEBUG_INTERNET, " POPULATE_MP_SECUROSERV_SITE_VEH_WH_PIN Cooldown timer running. iTimeRemaining = ", fStealCooldown) ENDIF //Documentation here: https://hub.take2games.com/display/RSGGTAV/SecuroServ+App BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_VEHICLE_WAREHOUSE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iVehWHID) // Vehicle WH ID SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(vCoord.x) // X position in world coordinates SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(vCoord.y) // Y position in world coordinates SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iWHCostWithBasicInterior) // Purchase cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iWHSaleCostWithBasicInterior) // On sale purchase cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iWHCostWithUrbanInterior) // Purchase cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iWHSaleCostWithUrbanInterior) // On sale purchase cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iWHCostWithBrandedInterior) // Purchase cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iWHSaleCostWithBrandedInterior) // On sale purchase cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlName) // Warehouse name text label SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(locationLabel) // Warehouse location text label SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(descriptionLabel) // Warehouse description text label SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(txdLabel) // Warehouse image txd reference SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bIsOwned) // Is warehouse owned by player? SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iVehicleCapacity) // Warehouse capacity SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iNumVehiclesStored) // Number of vehicles currently stored SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iValueOfVehiclesStored) // Lifetime earnings SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fStealCooldown) // Steal cooldown time remaining SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iOwnedInterior) // Lifetime earnings END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC POPULATE_MP_SECUROSERV_SITE_PIN(INT iWarehouse) TEXT_LABEL nameLabel = GET_WAREHOUSE_NAME(iWarehouse) VECTOR vCoord = GET_WAREHOUSE_COORDS(iWarehouse) TEXT_LABEL locationLabel = GET_NAME_OF_ZONE(vCoord) TEXT_LABEL descriptionLabel = GET_WAREHOUSE_DESCRIPTION(iWarehouse) TEXT_LABEL txdLabel = GET_WAREHOUSE_TXD(iWarehouse) INT purchaseCost = GET_WAREHOUSE_COST(iWarehouse) BOOL isOwned = DOES_LOCAL_PLAYER_OWN_WAREHOUSE(iWarehouse) EWarehouseSize eSize = GET_WAREHOUSE_SIZE(iWarehouse) INT capacity = GET_WAREHOUSE_MAX_CAPACITY(iWarehouse) INT amountStored = GET_CONTRABAND_UNITS_TOTAL_FOR_WAREHOUSE(iWarehouse) INT iSellValue = 0 INT buyTimeRem = GET_CONTRABAND_BUY_COOLDOWN(iWarehouse) INT iWarehouseSlot = -1 INT iSalePrice = -1 INT iSellTimeRem = -1 //If necessary grab the time remaining from the sell mission tuneable timer IF buyTimeRem <= 0 IF NOT GB_HAS_BUY_MISSION_TIMER_EXPIRED() buyTimeRem = g_sMPTunables.iexec_buy_fail_cooldown - ABSI(GET_TIME_DIFFERENCE(INT_TO_NATIVE(TIME_DATATYPE, GET_GAME_TIMER()), g_sGbWorkCoolDownVars.gbBuyCooldownTimer.Timer)) ENDIF ENDIF IF buyTimeRem > 0 SET_BIT(iBS, SEC_BS_BUY_MISSION_ON_COOLDOWN) SET_BIT(iWarehouseSellCooldownBS, iWarehouse) ENDIF IF DOES_LOCAL_PLAYER_OWN_WAREHOUSE(iWarehouse) iWarehouseSlot = GET_SAVE_SLOT_FOR_WAREHOUSE(iWarehouse) iSellValue = (GB_GET_PER_CRATE_CASH_REWARD(amountStored) * amountStored) + GB_CALCULATE_SPECIAL_ITEM_REWARD(iWarehouse) ENDIF //url:bugstar:2803928 IF iWarehouse = ciW_LSIA_1 OR iWarehouse = ciW_LSIA_2 locationLabel = "WH_LISA_1" ENDIF IF IS_WAREHOUSE_ON_SALE(iWarehouse) CDEBUG1LN(DEBUG_SAFEHOUSE, "Warehouse on sale: ", iWarehouse) iSalePrice = purchaseCost purchaseCost = GET_WAREHOUSE_BASE_COST(iWarehouse) ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_WAREHOUSE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_SCALEFORM_INDEX_FROM_WAREHOUSE_INDEX(iWarehouse)) // Warehouse ID SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(vCoord.x) // X position in world coordinates SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(vCoord.y) // Y position in world coordinates SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(purchaseCost) // Purchase cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(nameLabel) // Warehouse name text label SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(locationLabel) // Warehouse location text label SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(descriptionLabel) // Warehouse description text label SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(txdLabel) // Warehouse image txd reference SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(isOwned) // Is warehouse owned by player? SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eSize)) // Warehouse size - 0:Small, 1:Medium, 2:Large SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(capacity) // Warehouse capacity in units of contraband SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(amountStored) // How many units of contraband the player currently has in the warehouse SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellValue) // Value of the contraband currently stored in the warehouse. SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellTimeRem) // if > 0 this adds a timer to the Sell contraband buttons SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(buyTimeRem) // if > 0 this adds a timer to the buy buttons SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iWarehouseSlot) // if > -1 this controls the order in which owned warehouses are added to the graph SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSalePrice) // if > -1 this tells securoServ that the item is on sale END_SCALEFORM_MOVIE_METHOD() TEXT_LABEL_23 tlContrabandType = GET_WAREHOUSE_CONTRABAND_TYPE_LABEL_FOR_SECURO_APP(g_eContrabandType) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_WAREHOUSE_SHIPMENTS") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_SCALEFORM_INDEX_FROM_WAREHOUSE_INDEX(iWarehouse)) // Warehouse ID INT iSmallShipmentCost = GET_CONTRABAND_SHIPMENT_COST(CONTRABAND_SMALL) INT iMediumShipmentCost = GET_CONTRABAND_SHIPMENT_COST(CONTRABAND_MEDIUM) INT iLargeShipmentCost = GET_CONTRABAND_SHIPMENT_COST(CONTRABAND_LARGE) INT iSmallShipmentSize = ENUM_TO_INT(CONTRABAND_SMALL) INT iMedShipmentSize = ENUM_TO_INT(CONTRABAND_MEDIUM) INT iSmallShipmentSaleCost = -1 INT iMediumShipmentSaleCost = -1 INT iLargeShipmentSaleCost = -1 IF IS_CONTRABAND_SHIPMENT_ON_SALE(CONTRABAND_MEDIUM) CDEBUG1LN(DEBUG_SAFEHOUSE, "Medi Contraband shipment on sale") iMediumShipmentSaleCost = iMediumShipmentCost iMediumShipmentCost = GET_CONTRABAND_BASE_SHIPMENT_COST(CONTRABAND_MEDIUM) ENDIF IF IS_CONTRABAND_SHIPMENT_ON_SALE(CONTRABAND_LARGE) CDEBUG1LN(DEBUG_SAFEHOUSE, "LARGE Contraband shipment on sale") iLargeShipmentSaleCost = iLargeShipmentCost iLargeShipmentCost = GET_CONTRABAND_BASE_SHIPMENT_COST(CONTRABAND_LARGE) ENDIF IF IS_BIT_SET(iBS2, SEC_BS2_SPECIAL_ITEM) CONTRABAND_SPECIAL_ITEM eItem = GET_SPECIAL_ITEM_FROM_CONTRABAND_TYPE(securoContraType) IF IS_SPECIAL_CONTRABAND_ITEM_ON_SALE(eItem) CDEBUG1LN(DEBUG_SAFEHOUSE, "Special Contraband shipment on sale") iSmallShipmentSaleCost = GET_SPECIAL_CONTRABAND_ITEM_COST(eItem) iSmallShipmentCost = GET_SPECIAL_CONTRABAND_ITEM_BASE_COST(eItem) ELSE CDEBUG1LN(DEBUG_SAFEHOUSE, "Special Contraband shipment available") iSmallShipmentCost = GET_SPECIAL_CONTRABAND_ITEM_COST(eItem) ENDIF ELIF IS_CONTRABAND_SHIPMENT_ON_SALE(CONTRABAND_SMALL) CDEBUG1LN(DEBUG_SAFEHOUSE, "Small Contraband shipment on sale") iSmallShipmentSaleCost = iSmallShipmentCost iSmallShipmentCost = GET_CONTRABAND_BASE_SHIPMENT_COST(CONTRABAND_SMALL) ENDIF #IF FEATURE_GEN9_EXCLUSIVE IF IS_PLAYER_ON_MP_INTRO() //Remove the smaller shipment sizes as they would all be free iSmallShipmentSize = -1 iMedShipmentSize = -1 //Set the price to free iLargeShipmentSaleCost = -1 iLargeShipmentCost = 0 ENDIF #ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSmallShipmentSize) // smallShipmentSize int How many units of contraband are in a small shipment for this warehouse. -1 is used to indicate that this shipment size isn't available. SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSmallShipmentCost) // smallShipmentCost int How much a small shipment costs to purchase. SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tlContrabandType) // smallShipmentType string A description of what the small shipment is (eg "guns", "jewels" etc) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iMedShipmentSize) // mediumShipmentSize int How many units of contraband are in a medium shipment for this warehouse. -1 is used to indicate that this shipment size isn't available. SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iMediumShipmentCost) // mediumShipmentCost int How much a medium shipment costs to purchase. SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("") // No longer used (Empty string requested) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(CONTRABAND_LARGE)) // largeShipmentSize int How many units of contraband are in a large shipment for this warehouse. -1 is used to indicate that this shipment size isn't available. SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iLargeShipmentCost) // largeShipmentCost int How much a large shipment costs to purchase. SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(IS_BIT_SET(iBS2, SEC_BS2_SPECIAL_ITEM)) // Is special item active for the one crate option SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSmallShipmentSaleCost) // Small shipment sale cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iMediumShipmentSaleCost) // Medium shipment sale cost SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iLargeShipmentSaleCost) // Large shipment salecost END_SCALEFORM_MOVIE_METHOD() ENDPROC FUNC BOOL SHOULD_WAREHOUSE_PIN_BE_ADDED_TO_MAP(INT iWarehouse) IF NOT IS_WAREHOUSE_DISABLED_BY_TUNEABLE(iWarehouse) #IF FEATURE_CASINO_HEIST AND NOT WAS_BUSINESS_APP_SRIPT_LAUNCHED_FROM_HUB_APP() #ENDIF IF GET_COUNT_OF_WAREHOUSES_OWNED() < ciMaxOwnedWarehouses OR GET_WAREHOUSE_SIZE(iWarehouse) = eWarehouseLarge RETURN TRUE ELIF GET_WAREHOUSE_SIZE(iWarehouse) = eWarehouseMedium AND GET_SMALLEST_OWNED_WAREHOUSE() = eWarehouseMedium RETURN TRUE ELIF GET_SMALLEST_OWNED_WAREHOUSE() = eWarehouseSmall RETURN TRUE ENDIF ELIF DOES_LOCAL_PLAYER_OWN_WAREHOUSE(iWarehouse) RETURN TRUE ENDIF CDEBUG1LN(DEBUG_INTERNET, "[WHOUSE] SHOULD_WAREHOUSE_PIN_BE_ADDED_TO_MAP RETURNING FALSE for warehouse: ", iWarehouse) RETURN FALSE ENDFUNC PROC GET_CONTRABAND_BUYER_INFO(INT &iSellVal, TEXT_LABEL_63 &sBuyerOrg, TEXT_LABEL_63 &sQuantity, INT ibuyerNo, INT amountStored) BOOL bPlural INT iSpecialCount = GET_COUNT_OF_SPECIAL_ITEMS_IN_WAREHOUSE(iCurrentlyInsideWarehouse) INT NonSpecialContraTotal = amountStored - iSpecialCount IF NOT IS_WAREHOUSE_EMPTY(iCurrentlyInsideWarehouse) AND (ibuyerNo = 0 OR NonSpecialContraTotal >= 2 AND ibuyerNo < 2 OR NonSpecialContraTotal > 2 AND ibuyerNo <= 2 OR ibuyerNo = 3 AND DOES_WAREHOUSE_CONTAIN_A_SPECIAL_ITEM(iCurrentlyInsideWarehouse)) AND (amountStored != iSpecialCount OR ibuyerNo = 3) INT iItemCount INT iSaveSlot = GET_SAVE_SLOT_FOR_WAREHOUSE(iCurrentlyInsideWarehouse) sQuantity = "" //Because we're just setting the values, satisfy the compiler :( UNUSED_PARAMETER(sBuyerOrg) UNUSED_PARAMETER(sQuantity) SWITCH ibuyerNo CASE 0 iItemCount = ROUND(NonSpecialContraTotal * (TO_FLOAT(g_sMPTunables.iEXEC_SELL_BUYER1_AMOUNT) / 100)) iSellVal = GB_GET_PER_CRATE_CASH_REWARD(iItemCount) * iItemCount sBuyerOrg = GET_CONTRABAND_BUYER_COMPANY(g_iContrabandBuyerOneID[iSaveSlot]) sQuantity = iItemCount bPlural = (iItemCount > 1) BREAK CASE 1 iItemCount = ROUND(NonSpecialContraTotal * (TO_FLOAT(g_sMPTunables.iEXEC_SELL_BUYER2_AMOUNT) / 100)) iSellVal = GB_GET_PER_CRATE_CASH_REWARD(iItemCount) * iItemCount sBuyerOrg = GET_CONTRABAND_BUYER_COMPANY(g_iContrabandBuyerTwoID[iSaveSlot]) sQuantity = iItemCount bPlural = (iItemCount > 1) BREAK CASE 2 iItemCount = ROUND(NonSpecialContraTotal * (TO_FLOAT(g_sMPTunables.iEXEC_SELL_BUYER3_AMOUNT) / 100)) iSellVal = GB_GET_PER_CRATE_CASH_REWARD(iItemCount) * iItemCount sBuyerOrg = GET_CONTRABAND_BUYER_COMPANY(g_iContrabandBuyerThreeID[iSaveSlot]) sQuantity = iItemCount bPlural = (iItemCount > 1) BREAK CASE 3 iSellVal = GB_CALCULATE_SPECIAL_ITEM_REWARD(iCurrentlyInsideWarehouse) sBuyerOrg = GET_CONTRABAND_BUYER_COMPANY(g_iContrabandBuyerFourID[iSaveSlot]) BREAK ENDSWITCH IF g_sMPTunables.benable_control_payout_Executive_Office_SpecialCargo IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_RECEIVED_BOOSTED_EXEC_SPECIAL_CARGO_SELL_PAYOUT) PRINTLN("[BOOSTED_PAYOUTS] Giving booseted payout for exex special cargo. From: ", iSellVal, " to: ", (iSellVal * g_sMPTunables.icash_control_payout_Executive_Office_SpecialCargo)) iSellVal *= g_sMPTunables.icash_control_payout_Executive_Office_SpecialCargo ENDIF ENDIF IF ibuyerNo = 3 sQuantity += GET_FILENAME_FOR_AUDIO_CONVERSATION("CBUYERCRS") ELSE IF bPlural sQuantity += GET_FILENAME_FOR_AUDIO_CONVERSATION("CBUYERCRP") ELSE sQuantity += GET_FILENAME_FOR_AUDIO_CONVERSATION("CBUYERCR") ENDIF ENDIF ELSE iSellVal = -1 sBuyerOrg = "" sQuantity = "" ENDIF ENDPROC FUNC VECTOR GET_OFFICE_FRONT_DOOR_POS(INT iCurrentProperty) SWITCH iCurrentProperty CASE PROPERTY_OFFICE_1 RETURN <<-1582.5367, -556.0219, 33.9540>> CASE PROPERTY_OFFICE_2_BASE RETURN <<-1373.8700, -502.7115, 32.1574>> CASE PROPERTY_OFFICE_3 RETURN <<-117.5296, -605.7157, 35.2857>> CASE PROPERTY_OFFICE_4 RETURN <<-74.7579, -818.4601, 325.1753>> ENDSWITCH RETURN <<0.0, 0.0, 0.0>> ENDFUNC PROC APP_SECURO_SHOW_PAGE(INT iPageID) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "showScreen") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iPageID) END_SCALEFORM_MOVIE_METHOD() iCurrentPageID = iPageID PRINTLN(" APP_SECURO_SHOW_PAGE - Open page: ", iPageID) ENDPROC PROC POPULATE_MP_SECUROSERV_SITE_PIN_MAP(BOOL bCanAccessApp) securoContraType = g_eContrabandType IF IS_SPECIAL_CONTRABAND_ITEM_ACTIVE() SET_BIT(iBS2, SEC_BS2_SPECIAL_ITEM) ENDIF IF IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) TEXT_LABEL nameLabel = GET_WAREHOUSE_NAME(iCurrentlyInsideWarehouse) VECTOR vCoord = GET_WAREHOUSE_COORDS(iCurrentlyInsideWarehouse) TEXT_LABEL locationLabel = GET_NAME_OF_ZONE(vCoord) TEXT_LABEL txdLabel = "" TEXT_LABEL_63 sBuyerOrg = "" TEXT_LABEL_63 sQuantity = "" EWarehouseSize eSize = GET_WAREHOUSE_SIZE(iCurrentlyInsideWarehouse) INT capacity = GET_WAREHOUSE_MAX_CAPACITY(iCurrentlyInsideWarehouse) INT amountStored = GET_CONTRABAND_UNITS_TOTAL_FOR_WAREHOUSE(iCurrentlyInsideWarehouse) INT iSellValue = -1 INT iSpecialItemCount = GET_COUNT_OF_SPECIAL_ITEMS_IN_WAREHOUSE(iCurrentlyInsideWarehouse) //Grab this time here to make sure all timers are consistent INT iSellTimeRem = GET_CONTRABAND_SELL_COOLDOWN(iCurrentlyInsideWarehouse) //If necessary grab the time remaining from the sell mission tuneable timer IF iSellTimeRem <= 0 IF NOT GB_HAS_SELL_MISSION_TIMER_EXPIRED() iSellTimeRem = g_sMPTunables.iexec_sell_fail_cooldown - ABSI(GET_TIME_DIFFERENCE(INT_TO_NATIVE(TIME_DATATYPE, GET_GAME_TIMER()), g_sGbWorkCoolDownVars.gbSellCooldownTimer.Timer)) ENDIF ENDIF IF iSellTimeRem > 0 SET_BIT(iBS, SEC_BS_SELL_MISSION_ON_COOLDOWN) ENDIF IF DOES_WAREHOUSE_CONTAIN_A_SPECIAL_ITEM(iCurrentlyInsideWarehouse) txdLabel = GET_SPECIAL_ITEM_TXD_LABEL(iCurrentlyInsideWarehouse) ENDIF GET_CONTRABAND_BUYER_INFO(iSellValue, sBuyerOrg, sQuantity, 0, amountStored) CDEBUG1LN(DEBUG_INTERNET, "iCurrentlyInsideWarehouse: ", iCurrentlyInsideWarehouse, " nameLabel: ", nameLabel, " locationLabel: ", locationLabel, " txdLabel: ", txdLabel, " eSize: ", eSize, " capacity: ", capacity, " amountStored: ", amountStored ) INT iSellMissionsComplete = GET_SELL_MISSION_COMPLETED_COUNT() INT iSellCompletionPercentage = FLOOR(CLAMP((TO_FLOAT(iSellMissionsComplete) / TO_FLOAT(GET_SELL_MISSION_UNDERTAKEN_COUNT())) * 100, 0, 100)) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_PLAYER_DATA") SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(GET_PLAYER_NAME(PLAYER_ID())) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(GET_PLAYER_ORGANISATION_NAME(PLAYER_ID())) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(iSellCompletionPercentage)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellMissionsComplete) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_LIFETIME_CONTRABAND_EARNINGS()) END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_BUYER_DATA") //Buyer 1 SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sBuyerOrg) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sQuantity) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellValue) //Buyer 2 GET_CONTRABAND_BUYER_INFO(iSellValue, sBuyerOrg, sQuantity, 1,amountStored) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sBuyerOrg) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sQuantity) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellValue) //Buyer 3 GET_CONTRABAND_BUYER_INFO(iSellValue, sBuyerOrg, sQuantity, 2, amountStored) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sBuyerOrg) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sQuantity) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellValue) //Buyer 4 GET_CONTRABAND_BUYER_INFO(iSellValue, sBuyerOrg, sQuantity, 3, amountStored) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sBuyerOrg) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sQuantity) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellValue) END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_WAREHOUSE_DATA") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(nameLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(locationLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(txdLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eSize)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(capacity) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(amountStored) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellValue) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSpecialItemCount) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellTimeRem) END_SCALEFORM_MOVIE_METHOD() ELSE // Set the login username and the flag to indicate whether they can access the app or not /* SET_PLAYER_DATA gamerTag string The username displayed in the login panel. gamerHasAccess bool Flag to determine whether the map screen (true) or the access denied overlay (false) is shown after pressing the log in button. totalEarnings float How much money the player has made from their warehouses. collectionsCompleted int How many collections the player has completed. collectionSuccessRate float Percentage of collections that were successful. salesCompleted int How many sales the player has completed. salesSuccessRate float Percentage of sales that were successful. organisation string The player's organisation name. numVehiclesStolen int How many vehicles the player has stolen. stealVehiclesSuccess float Percentage of successful vehicle steals. vehiclesExported int How many vehicles the player has successfully exported. exportVehiclesSuccess float Percentage of successful vehicle exports. totalVehicleEarnings int How much money the player has made from exporting vehicles. bCanAccessSVMMissions bool Informs SF as to if the player has unlocked the SVM missions vOfficePosition.x float Players x pos in world coords vOfficePosition.y float Players y pos in world coords */ VECTOR vOfficePosition = GET_OFFICE_FRONT_DOOR_POS(GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_0)) INT iBuyMissionsComplete = GET_BUY_MISSION_COMPLETED_COUNT() INT iSellMissionsComplete = GET_SELL_MISSION_COMPLETED_COUNT() INT iBuyCompletionPercentage = FLOOR(CLAMP((TO_FLOAT(iBuyMissionsComplete) / TO_FLOAT(GET_BUY_MISSION_UNDERTAKEN_COUNT())) * 100, 0, 100)) INT iSellCompletionPercentage = FLOOR(CLAMP((TO_FLOAT(iSellMissionsComplete) / TO_FLOAT(GET_SELL_MISSION_UNDERTAKEN_COUNT())) * 100, 0, 100)) INT iNumVehStolen = GET_TOTAL_NUM_VEHICLES_STOLEN() INT iNumVehExported = GET_TOTAL_NUM_EXPORT_MISSIONS_COMPLETED() INT iTotalExportEarnings = GET_TOTAL_EXPORT_EARNINGS() INT iStealCompletionPercentage = FLOOR(CLAMP((TO_FLOAT(iNumVehStolen) / TO_FLOAT(GET_TOTAL_NUM_STEAL_MISSIONS_STARTED())) * 100, 0, 100)) INT iExportCompletionPercentage = FLOOR(CLAMP((TO_FLOAT(GET_TOTAL_NUM_EXPORT_MISSIONS_COMPLETED()) / TO_FLOAT(GET_TOTAL_NUM_EXPORT_MISSIONS_STARTED())) * 100, 0, 100)) INT iSVMUnlockCount = GET_MINIMUM_STOLEN_VEH_COUNT_TO_UNLOCK_SVM() BOOL bCanAccessSVMMissions = (iNumVehStolen >= iSVMUnlockCount) CDEBUG1LN(DEBUG_INTERNET, " POPULATE_MP_SECUROSERV_SITE_PIN_MAP: Minimum stolen vehicles to unlock SVM section: ", iSVMUnlockCount, " iNumVehStolen: ", iNumVehStolen) #IF IS_DEBUG_BUILD IF GET_COMMANDLINE_PARAM_EXISTS("sc_SvmFlowAlwaysAvailable") bCanAccessSVMMissions = TRUE ENDIF #ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_PLAYER_DATA") SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(GET_PLAYER_NAME(PLAYER_ID())) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bCanAccessApp) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(GET_LIFETIME_CONTRABAND_EARNINGS())) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iBuyMissionsComplete) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(iBuyCompletionPercentage)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellMissionsComplete) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(iSellCompletionPercentage)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(GET_PLAYER_ORGANISATION_NAME(PLAYER_ID())) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iNumVehStolen) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(iStealCompletionPercentage)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iNumVehExported) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(iExportCompletionPercentage)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iTotalExportEarnings) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bCanAccessSVMMissions) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(vOfficePosition.x) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(vOfficePosition.y) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) #IF FEATURE_GEN9_EXCLUSIVE SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(!IS_PLAYER_ON_MP_INTRO()) #ENDIF END_SCALEFORM_MOVIE_METHOD() INT iWarehouse FOR iWarehouse = 1 TO ciMaxWarehouses IF SHOULD_WAREHOUSE_PIN_BE_ADDED_TO_MAP(iWarehouse) POPULATE_MP_SECUROSERV_SITE_PIN(iWarehouse) ENDIF ENDFOR //Populate the map with the IE warehouses INT iIEWarehouse, iMission INT iCollectedVehCount = GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdIEgarageData.iVehicleTotal FOR iIEWarehouse = 1 TO (ENUM_TO_INT(IE_GARAGE_UPPER_LIMIT) -1) #IF FEATURE_CASINO_HEIST IF NOT WAS_BUSINESS_APP_SRIPT_LAUNCHED_FROM_HUB_APP() OR ENUM_TO_INT(GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID())) = iIEWarehouse #ENDIF POPULATE_MP_SECUROSERV_SITE_VEH_WH_PIN(INT_TO_ENUM(IMPORT_EXPORT_GARAGES, iIEWarehouse), iCollectedVehCount) #IF FEATURE_CASINO_HEIST ENDIF #ENDIF ENDFOR REPEAT ciMAX_AT_FLOW_MISSIONS iMission IF SHOULD_SVM_MISSION_BE_ADDED_TO_SELECTION(iMission) POPULATE_SPECIAL_VEH_DATA(iMission, iNumVehStolen, g_bSVMThumbnailFallback) ENDIF ENDREPEAT ENDIF ENDPROC /// PURPOSE: /// Initalises the iActiveUsers array to -1 PROC INIT_ACTIVE_USER_LIST() INT i = 0 REPEAT GB_GET_MAX_NUM_GANGS() i CDEBUG1LN(DEBUG_SAFEHOUSE, "[securo] INIT_ACTIVE_USER_LIST Setting value: ", i, " of app active user list to -1") iActiveUsers[i] = -1 ENDREPEAT ENDPROC /// PURPOSE: /// Checks a local array for the current player in the loop (iPlayerLoop) FUNC BOOL IS_PLAYER_IN_ACTIVE_GANG_LIST() INT i = 0 REPEAT GB_GET_MAX_NUM_GANGS() i IF iActiveUsers[i] = iPlayerLoop RETURN TRUE ENDIF ENDREPEAT RETURN FALSE ENDFUNC /// PURPOSE: /// Adds a player to the local array and calls the relevant scaleform method PROC ADD_PLAYER_TO_ACTIVE_ORGANISATION_LIST(PLAYER_INDEX piPlayer, INT iPlayerID) INT i = 0 STRING sPlayerName = GET_PLAYER_NAME(piPlayer) IF ARE_STRINGS_EQUAL(sPlayerName, "**Invalid**") CDEBUG1LN(DEBUG_SAFEHOUSE, "[SECURO] ADD_PLAYER_TO_ACTIVE_ORGANISATION_LIST. tried to add **Invalid** player to list") EXIT ENDIF INT iIter INT iMaxNumGoons = GB_MAX_GANG_GOONS_EXEC TEXT_LABEL_63 tlGoons[GB_MAX_GANG_GOONS_EXEC] REPEAT iMaxNumGoons iIter PLAYER_INDEX piGoon = GlobalplayerBD_FM_3[iPlayerID].sMagnateGangBossData.GangMembers[iIter] IF piGoon != INVALID_PLAYER_INDEX() tlGoons[iIter] = GET_PLAYER_NAME(piGoon) ELSE tlGoons[iIter] = "" ENDIF ENDREPEAT //Make sure there are no spaces in the list REPEAT iMaxNumGoons iIter IF IS_STRING_NULL_OR_EMPTY(tlGoons[iIter]) IF iIter != iMaxNumGoons INT j FOR j = iIter TO (iMaxNumGoons -1) IF NOT IS_STRING_NULL_OR_EMPTY(tlGoons[j]) tlGoons[iIter] = tlGoons[j] tlGoons[j] = "" j = (iMaxNumGoons -1) CDEBUG1LN(DEBUG_INTERNET, "ADD_PLAYER_TO_ACTIVE_ORGANISATION_LIST Updating list order Empty player slot: ", iIter, " Moving Goon: ", j, " down the list") ENDIF ENDFOR ENDIF ENDIF ENDREPEAT BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_ACTIVE_USER") SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sPlayerName) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(GET_PLAYER_ORGANISATION_NAME(piPlayer)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(tlGoons[0]) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(tlGoons[1]) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(tlGoons[2]) END_SCALEFORM_MOVIE_METHOD() REPEAT GB_GET_MAX_NUM_GANGS() i IF iActiveUsers[i] = -1 iActiveUsers[i] = iPlayerID tlUserList[i] = sPlayerName CDEBUG1LN(DEBUG_SAFEHOUSE, "[SECURO] ADD_PLAYER_TO_ACTIVE_ORGANISATION_LIST. Adding: ", tlUserList[i], " to slot: ", i) EXIT ENDIF ENDREPEAT CDEBUG1LN(DEBUG_SAFEHOUSE, "[SECURO] ADD_PLAYER_TO_ACTIVE_ORGANISATION_LIST. We have more players to add than GB_GET_MAX_NUM_GANGS: ", GB_GET_MAX_NUM_GANGS()) ENDPROC /// PURPOSE: /// Removes a player from the local array and calls the relevant scaleform method PROC REMOVE_PLAYER_FROM_ACTIVE_ORGANISATION_LIST() INT i = 0 INT iIndex = -1 REPEAT GB_GET_MAX_NUM_GANGS() i IF iActiveUsers[i] = iPlayerLoop iActiveUsers[i] = -1 iIndex = i ENDIF ENDREPEAT IF iIndex != -1 AND iIndex < GB_GET_MAX_NUM_GANGS() CDEBUG1LN(DEBUG_SAFEHOUSE, "[SECURO] REMOVE_PLAYER_FROM_ACTIVE_ORGANISATION_LIST. index: ", iIndex) CDEBUG1LN(DEBUG_SAFEHOUSE, "[SECURO] REMOVE_PLAYER_FROM_ACTIVE_ORGANISATION_LIST. removing: ", tlUserList[iIndex]) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "REMOVE_ACTIVE_USER") SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(tlUserList[iIndex]) END_SCALEFORM_MOVIE_METHOD() tlUserList[iIndex] = "" ELSE CASSERTLN(DEBUG_SAFEHOUSE, "[SECURO] REMOVE_PLAYER_FROM_ACTIVE_ORGANISATION_LIST. Can't find player to remove: ", iIndex) ENDIF ENDPROC /// PURPOSE: One player per frame loop to check gang status /// Maintains the list of organizations to be displayed in the app PROC MAINTAIN_ACTIVE_ORGANIZATION_LIST() PLAYER_INDEX pPlayer = INT_TO_NATIVE(PLAYER_INDEX, iPlayerLoop) IF NETWORK_IS_PLAYER_ACTIVE(pPlayer) AND GB_IS_PLAYER_BOSS_OF_A_GANG(pPlayer) AND NOT GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(pPlayer) //AND NOT GB_ARE_PLAYER_BOSS_PRIVILIGES_SUSPENDED_BD(PLAYER_ID()) IF NOT IS_PLAYER_IN_ACTIVE_GANG_LIST() CDEBUG1LN(DEBUG_SAFEHOUSE, "[securo] Adding player: ", iPlayerLoop, " to app active user list") ADD_PLAYER_TO_ACTIVE_ORGANISATION_LIST(pPlayer, iPlayerLoop) ENDIF ELSE IF IS_PLAYER_IN_ACTIVE_GANG_LIST() CDEBUG1LN(DEBUG_SAFEHOUSE, "[securo] Removing player: ", iPlayerLoop, " from app active user list") REMOVE_PLAYER_FROM_ACTIVE_ORGANISATION_LIST() ENDIF ENDIF iPlayerLoop ++ IF iPlayerLoop = NUM_NETWORK_PLAYERS iPlayerLoop = 0 ENDIF ENDPROC PROC SECUROSERVE_CONTROL_DISABLE() SET_CLEAR_ON_CALL_HUD_THIS_FRAME() IF (NOT IS_SYSTEM_UI_BEING_DISPLAYED()) AND (NOT IS_PAUSE_MENU_ACTIVE()) DISABLE_ALL_CONTROL_ACTIONS(PLAYER_CONTROL) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE) ENDIF ENDPROC PROC RENDER_SECUROSERVE() 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) SECUROSERVE_CONTROL_DISABLE() IF IS_BIT_SET(iBS, SEC_BS_SHOW_CASH_CHANGE_HUD) SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_MP_CASH) SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_MP_MESSAGE) SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH) ENDIF THEFEED_HIDE_THIS_FRAME() ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_PAUSE) SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) DRAW_RECT_FROM_CORNER(0.0, 0.0, 1.0, 1.0, 0, 0, 0, 255) SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,255) REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() DISABLE_ALL_MP_HUD_THIS_FRAME() g_sBusAppManagement.iRenderHandShakeFC = GET_FRAME_COUNT() ENDPROC FUNC BOOL IS_MAP_SIDEBAR_OPEN() RETURN IS_BIT_SET(iBS, SEC_BS_SIDE_PANEL_SHOWING) ENDFUNC PROC CLEAR_OVERLAY_WARNING_BS() IF IS_BIT_SET(iBS, SEC_BS_DISPLAY_OVERLAY_WARNING) CLEAR_BIT(iBS, SEC_BS_DISPLAY_OVERLAY_WARNING) ENDIF IF IS_BIT_SET(iBS, SEC_BS_DISPLAY_OVERLAY_CONFIRM) CLEAR_BIT(iBS, SEC_BS_DISPLAY_OVERLAY_CONFIRM) ENDIF ENDPROC PROC CLOSE_OVERLAY_SCREEN(BOOL bPlaySound = FALSE, BOOL bClearIEPurAndStealBitSet = FALSE) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "HIDE_OVERLAY") END_SCALEFORM_MOVIE_METHOD() CLEAR_OVERLAY_WARNING_BS() IF bPlaySound PLAY_SOUND_FRONTEND(-1, "Popup_Cancel", "GTAO_Exec_SecuroServ_Computer_Sounds" ) ENDIF IF bClearIEPurAndStealBitSet IF IS_BIT_SET(iBS, SEC_BS_LAUNCH_STEAL_MIS_SELECTED) CDEBUG1LN(DEBUG_INTERNET, " CLOSE_OVERLAY_SCREEN clearing bit SEC_BS_LAUNCH_STEAL_MIS_SELECTED") CLEAR_BIT(iBS, SEC_BS_LAUNCH_STEAL_MIS_SELECTED) ENDIF IF IS_BIT_SET(iBS, SEC_BS_PRUCHASE_IE_WH_SELECTED) CDEBUG1LN(DEBUG_INTERNET, " CLOSE_OVERLAY_SCREEN clearing bit SEC_BS_PRUCHASE_IE_WH_SELECTED") CLEAR_BIT(iBS, SEC_BS_PRUCHASE_IE_WH_SELECTED) ENDIF ENDIF CLEAR_BIT(iBS2, SEC_BS2_FINISHED_SHOWING_NAG_SCREEN_LF) CLEAR_BIT(iBS, SEC_BS_OVERLAY_ACTIVE) ENDPROC /// PURPOSE: /// Shows a popup message over the top of the current screen /// PARAMS: /// sTitleBar - Top bar textlable /// sDescription - Description text label /// sButton1 - Left side button text label (Moves to center if "" is passed for sButton2) /// sButton2 - Pass "" to show no button. Right side button text label /// bSuccess - True = Green False = Red overlay screen /// bInteriorsOverlay - If true brings up the interior overlay instead of the standard screen /// iAdditionalINT - Set to a value !-1 to add an additional INT to the overlay description PROC START_OVERLAY_SCREEN(STRING sTitleBar, STRING sDescription, String sButton1, String sButton2, BOOL bSuccess , BOOL bInteriorsOverlay = FALSE, INT iAdditionalINT = -1 ) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_OVERLAY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTitleBar) BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sDescription) IF iadditionalINT != -1 ADD_TEXT_COMPONENT_INTEGER(iadditionalINT) ENDIF END_TEXT_COMMAND_SCALEFORM_STRING() SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sButton1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sButton2) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bSuccess) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bInteriorsOverlay) END_SCALEFORM_MOVIE_METHOD() SET_BIT(iBS, SEC_BS_OVERLAY_ACTIVE) ENDPROC PROC PASS_DPAD_INPUTS_TO_SCALEFORM() ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_UP) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_UP))) ENDIF ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_DOWN))) ENDIF ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_LEFT))) ENDIF ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_RIGHT))) ENDIF ENDPROC PROC PASS_ANALOGUE_STICK_INPUTS_TO_SF(BOOL BPassInLeftStickInput, BOOL BPassInRightStickInput) IF BPassInLeftStickInput ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_X) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_Y) INT iLeftXNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_X) INT iLeftYNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_Y) IF (iLeftXNew != 127) OR (iLeftX != 127) OR (iLeftYNew != 127) OR (iLeftY != 127) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") iLeftX = iLeftXNew iLeftY = iLeftYNew SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iLeftX) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iLeftY) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) END_SCALEFORM_MOVIE_METHOD() ENDIF ENDIF IF BPassInRightStickInput ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_X) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_Y) INT iRightXNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_X) INT iRightYNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_Y) IF (iRightXNew != 127) OR (iRightX != 127) OR (iRightYNew != 127) OR (iRightY != 127) BOOL bUsingScrollWheel = (IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN)) IF NOT bUsingScrollWheel bUsingScrollWheel = (IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP)) ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") iRightX = iRightXNew iRightY = iRightYNew SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iRightX) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iRightY) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bUsingScrollWheel) END_SCALEFORM_MOVIE_METHOD() ENDIF ENDIF ENDPROC PROC PASS_CURSOR_INPUT_TO_SF() iCursorX = GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X ) iCursorY = GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y ) IF iCursorX != iCursorXLast OR iCursorY != iCursorYLast BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(iCursorX) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(iCursorY) END_SCALEFORM_MOVIE_METHOD() iCursorXLast = iCursorX iCursorYLast = iCursorY ENDIF ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_CURSOR_ACCEPT))) ENDIF ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) IF iCurrentPageID != ciVehicleWHStatsPageID AND iCurrentPageID != ciSVMPageID OR NOT IS_BIT_SET(iBS, SEC_BS_OVERLAY_ACTIVE) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_CANCEL))) ENDIF IF iCurrentPageID = ciBranchPageID OR iCurrentPageID = ciLoginPageID CPRINTLN(DEBUG_INTERNET," CURRENT PAGE ID is:", iCurrentPageID, "EXITING WEBSITE") CLEANUP_SECUROSERVE() ENDIF ENDIF IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) IF IS_BIT_SET(iBS2, SEC_BS2_FINISHED_SHOWING_NAG_SCREEN_LF) CLEAR_BIT(iBS2, SEC_BS2_FINISHED_SHOWING_NAG_SCREEN_LF) ELIF IS_BIT_SET(iBS, SEC_BS_OVERLAY_ACTIVE) CPRINTLN(DEBUG_INTERNET," CURRENT PAGE ID is:", iCurrentPageID, " and bOverlayActive Closing overlay") CLOSE_OVERLAY_SCREEN(TRUE, TRUE) ELIF IS_MAP_SIDEBAR_OPEN() CLEAR_BIT(iBS, SEC_BS_SIDE_PANEL_SHOWING) ENDIF ENDIF ENDPROC PROC PASS_WAREHOUSE_INPUTS_TO_SCALEFORM() ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_ACCEPT))) ENDIF ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_CANCEL))) CLEANUP_SECUROSERVE() 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," CURRENT PAGE ID is:", iCurrentPageID, " EXITING WEBSITE for Triangle press") CLEANUP_SECUROSERVE() ENDIF PASS_DPAD_INPUTS_TO_SCALEFORM() // Mouse cursor control IF IS_USING_CURSOR(FRONTEND_CONTROL) PASS_CURSOR_INPUT_TO_SF() IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) CLEANUP_SECUROSERVE() ENDIF ELSE PASS_ANALOGUE_STICK_INPUTS_TO_SF(TRUE, TRUE) ENDIF ENDPROC PROC PASS_INPUTS_TO_SCALEFORM() IF g_bBrowserGoToStoreTrigger CPRINTLN(DEBUG_INTERNET, "APP_SECURO g_bBrowserGoToStoreTrigger()") IF g_bBrowserNagScreenState CPRINTLN(DEBUG_INTERNET, "APP_SECURO g_bBrowserNagScreenState()") IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) OR (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_ACCEPT) AND NOT IS_WARNING_MESSAGE_ACTIVE()) g_bBrowserNagScreenState = FALSE g_bBrowserGoToStoreTrigger = FALSE CLEAR_BIT(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) SET_LAST_VIEWED_SHOP_ITEM(g_iBrowserGoToStoreItemHash, g_iBrowserGoToStoreItemPrice, 0) OPEN_COMMERCE_STORE("", "", SPL_PHONE) WHILE IS_COMMERCE_STORE_OPEN() RENDER_SECUROSERVE() WAIT(0) ENDWHILE ELIF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL) OR (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_CANCEL) AND NOT IS_WARNING_MESSAGE_ACTIVE()) CPRINTLN(DEBUG_INTERNET, "APP_SECURO canceled, bailing") PLAY_SOUND_FRONTEND(-1, "BACK","HUD_FRONTEND_DEFAULT_SOUNDSET") g_bBrowserNagScreenState = FALSE g_bBrowserGoToStoreTrigger = FALSE CLEAR_BIT(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) SET_BIT(iBS2, SEC_BS2_FINISHED_SHOWING_NAG_SCREEN_LF) ENDIF ENDIF EXIT ENDIF ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_LB) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LB) IF iCurrentPageID = ciVehicleWHMapPageID IF DOES_PLAYER_OWN_AN_IE_GARAGE(PLAYER_ID()) IF IS_BIT_SET(iBS2, SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES) CLEAR_BIT(iBS2, SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES) ELSE SET_BIT(iBS2, SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES) ENDIF ENDIF ENDIF CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_LB))) ENDIF ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RB) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RB) IF iCurrentPageID = ciVehicleWHMapPageID IF DOES_PLAYER_OWN_AN_IE_GARAGE(PLAYER_ID()) IF IS_BIT_SET(iBS2, SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES) CLEAR_BIT(iBS2, SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES) ELSE SET_BIT(iBS2, SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES) ENDIF ENDIF ENDIF CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_RB))) ENDIF // NB: Using IS_CONTROL_PRESSED for continuous zooming out on map. ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_LT) IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_LT))) ENDIF IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_LT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_RELEASE_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_LT))) ENDIF // NB: Using IS_CONTROL_PRESSED for continuous zooming in on map. ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RT) IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_RT))) ENDIF IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_RT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_RELEASE_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_RT))) ENDIF PASS_DPAD_INPUTS_TO_SCALEFORM() ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) IF IS_BIT_SET(iBS, SEC_BS_CHECK_PAGE_ID) CPRINTLN(DEBUG_INTERNET," Accept cancel input for SEC_BS_CHECK_PAGE_ID") ELSE CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_ACCEPT))) ENDIF ENDIF ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) IF IS_BIT_SET(iBS, SEC_BS_CHECK_PAGE_ID) CPRINTLN(DEBUG_INTERNET," Reject cancel input for SEC_BS_CHECK_PAGE_ID") ELSE #IF FEATURE_CASINO_HEIST IF WAS_BUSINESS_APP_SRIPT_LAUNCHED_FROM_HUB_APP() AND g_sBusAppManagement.bRunningPrimaryApp AND NOT IS_BIT_SET(iBS, SEC_BS_OVERLAY_ACTIVE) IF iCurrentPageID = ciVehicleWHStatsPageID OR iCurrentPageID = ciWarehouseStatsPageID CPRINTLN(DEBUG_INTERNET," Opened from hub app: CURRENT PAGE ID is:", iCurrentPageID, " EXITING WEBSITE") CLEANUP_SECUROSERVE() ENDIF ENDIF #ENDIF IF iCurrentPageID != ciVehicleWHStatsPageID AND iCurrentPageID != ciSVMPageID OR NOT IS_BIT_SET(iBS, SEC_BS_OVERLAY_ACTIVE) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_CANCEL))) ENDIF IF iCurrentPageID = ciBranchPageID OR iCurrentPageID = ciLoginPageID CPRINTLN(DEBUG_INTERNET," CURRENT PAGE ID is:", iCurrentPageID, " EXITING WEBSITE") CLEANUP_SECUROSERVE() ENDIF ENDIF ENDIF IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) IF IS_BIT_SET(iBS2, SEC_BS2_FINISHED_SHOWING_NAG_SCREEN_LF) CLEAR_BIT(iBS2, SEC_BS2_FINISHED_SHOWING_NAG_SCREEN_LF) ELIF IS_BIT_SET(iBS, SEC_BS_OVERLAY_ACTIVE) CPRINTLN(DEBUG_INTERNET," CURRENT PAGE ID is:", iCurrentPageID, " and bOverlayActive Closing overlay") CLOSE_OVERLAY_SCREEN(TRUE, TRUE) ELIF IS_MAP_SIDEBAR_OPEN() CLEAR_BIT(iBS, SEC_BS_SIDE_PANEL_SHOWING) ENDIF IF IS_BIT_SET(iBS2, SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES) CLEAR_BIT(iBS2, SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES) ENDIF ENDIF ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_X) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_X) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_X))) ENDIF IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_RELEASE_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_ACCEPT))) ENDIF ENDIF // Mouse cursor control IF IS_USING_CURSOR(FRONTEND_CONTROL) PASS_CURSOR_INPUT_TO_SF() IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_RELEASE_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_CURSOR_ACCEPT))) ENDIF ENDIF IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_RELEASE_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_CURSOR_CANCEL))) ENDIF ENDIF IF iCurrentPageID = ciSVMPageID //This allows us to have different functionality for a zoom in/out map vs a scrolling list like the SVM page PASS_ANALOGUE_STICK_INPUTS_TO_SF(FALSE, TRUE) ELSE // NB: Using IS_CONTROL_PRESSED for continuous zooming out on map. ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP) IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_CURSOR_SCROLL_UP))) ENDIF // NB: Using IS_CONTROL_PRESSED for continuous zooming in on map. ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN) IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_CURSOR_SCROLL_DOWN))) ENDIF ENDIF ELSE PASS_ANALOGUE_STICK_INPUTS_TO_SF(TRUE, TRUE) 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," CURRENT PAGE ID is:", iCurrentPageID, " EXITING WEBSITE for Triangle press") CLEANUP_SECUROSERVE() ENDIF #IF IS_DEBUG_BUILD IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)) CLEANUP_SECUROSERVE() ENDIF #ENDIF ENDPROC PROC ADD_WAREHOUSE_MENU_HELP_KEY_INPUT(REPLACE_MP_VEH_OR_PROP_MENU &control, INT iNewWarehouse) REMOVE_MENU_HELP_KEYS() IF GET_WAREHOUSE_ID_FOR_SAVE_SLOT(control.iCurrentVertSel) <= 0 OR ARE_WAREHOUSES_SUITABLE_FOR_TRADE(GET_WAREHOUSE_ID_FOR_SAVE_SLOT(control.iCurrentVertSel), iNewWarehouse) ADD_MENU_HELP_KEY_INPUT(INPUT_CELLPHONE_SELECT, "BB_SELECT") ENDIF ADD_MENU_HELP_KEY_INPUT(INPUT_CELLPHONE_CANCEL, "BB_BACK") //ADD_MENU_HELP_KEY_GROUP( INPUTGROUP_FRONTEND_DPAD_UD,"HUD_INPUT1C") ENDPROC PROC SETUP_REPLACE_WAREHOUSE_MENU(REPLACE_MP_VEH_OR_PROP_MENU &control, INT iNewWarehouse) INT iMenuCounter INT i INT iOwnedCount = GET_COUNT_OF_WAREHOUSES_OWNED() CLEAR_MENU_DATA() IF NOT IS_BIT_SET(control.iButtonBS,PROP_BUTTON_BS_GIVEN_CONFIRMATION) REPEAT ciMaxOwnedWarehouses i iWHOrder[i] = iOwnedCount ENDREPEAT SET_MENU_ITEM_LAYOUT(MENU_ITEM_TEXT,MENU_ITEM_TEXT) SET_MENU_ITEM_JUSTIFICATION(FONT_LEFT, FONT_RIGHT) SET_MENU_ITEM_TOGGLEABLE(FALSE, FALSE) SET_MENU_TITLE("REP_WHOUSE_0") INT iWarehouse FOR i = (ciMaxOwnedWarehouses - 1) TO 0 STEP -1 iWarehouse = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(i) CPRINTLN(DEBUG_INTERNET, "SETUP_REPLACE_WAREHOUSE_MENU: GET_OWNED_WAREHOUSE(",i,") = ",iWarehouse) IF iWarehouse > ciW_Invalid BOOL bIsSelectable = ARE_WAREHOUSES_SUITABLE_FOR_TRADE(iWarehouse, iNewWarehouse) ADD_MENU_ITEM_TEXT(iMenuCounter,"PIM_DNAME",1,bIsSelectable) // B* 2750666 IF IS_LANGUAGE_NON_ROMANIC() ADD_MENU_ITEM_TEXT_COMPONENT_LITERAL(GET_FILENAME_FOR_AUDIO_CONVERSATION(GET_WAREHOUSE_NAME(iWarehouse))) ELSE ADD_MENU_ITEM_TEXT_COMPONENT_PLAYER_NAME(GET_FILENAME_FOR_AUDIO_CONVERSATION(GET_WAREHOUSE_NAME(iWarehouse)), FALSE, TRUE) ENDIF ADD_MENU_ITEM_TEXT(iMenuCounter,"CUST_GAR_COST",1,bIsSelectable) ADD_MENU_ITEM_TEXT_COMPONENT_INT(GET_WAREHOUSE_VALUE_FOR_SALE(iWarehouse)) control.iSlotIDS[i] = iWarehouse iWHOrder[iMenuCounter] = i iMenuCounter++ ELSE IF i > ciW_Invalid IF GET_WAREHOUSE_ID_FOR_SAVE_SLOT(i-1) > 0 ADD_MENU_ITEM_TEXT(iMenuCounter,"REP_WHOUSE_1",0) control.iSlotIDS[i] = iWarehouse iWHOrder[iMenuCounter] = i iMenuCounter++ ENDIF ENDIF ENDIF ENDFOR CLEAR_BIT(control.iBS,REP_VEH_PROP_BS_NO_MONEY) CLEAR_BIT(control.iBS,REP_VEH_PROP_BS_HEIST_ACTIVE) control.iMaxVertSel = iMenuCounter SET_CURRENT_MENU_ITEM(control.icurrentVertSel) //Once ADD_WAREHOUSE_MENU_HELP_KEY_INPUT(control, iNewWarehouse) ENDIF CPRINTLN(DEBUG_INTERNET, "SETUP_REPLACE_WAREHOUSE_MENU: setup menu") ENDPROC PROC REPLACE_WAREHOUSE_WARNING_MESSAGE_WEB(INT iValue, BOOL bSmallerGarage) STRING pHeaderTextLabel STRING pBodyTextLabel STRING pBodySubTextLabel = NULL INT NumberToInsert = -1 STRING pFirstSubStringTextLabel = NULL pHeaderTextLabel = ("BRSCRWTEX") //"Alert" IF bSmallerGarage pBodyTextLabel = ("BRDISWARE") //"You already own a warehouse, purchasing this one will trade in your old one.~n~ // You will also lose access to some of your stored vehicles as the Garage is smaller. The trade in will ~a~ you $~1~."" pBodySubTextLabel = ("BRSHETPROSUB1") //"Do you wish to continue with this purchase? ELSE pBodyTextLabel = ("BRDISWAREB1") //"You already own a warehouse, purchasing this one will trade in your old one. The trade in will ~a~ you $~1~."" pBodySubTextLabel = ("BRSHETPROSUB1") //"Do you wish to continue with this purchase? ENDIF NumberToInsert = iValue IF NumberToInsert < 0 NumberToInsert *= -1 ENDIF IF iValue < 0 //3rd pFirstSubStringTextLabel = ("BRSHETMAK") //make ELSE pFirstSubStringTextLabel = ("BRSHETPRSA") //save ENDIF CDEBUG1LN(DEBUG_INTERNET, "REPLACE_WAREHOUSE_WARNING_MESSAGE_WEB(pHeaderTextLabel:\"", pHeaderTextLabel, "\", pBodyTextLabel:\"", pBodyTextLabel, "\", pBodySubTextLabel:\"", pBodySubTextLabel, "\", NumberToInsert:\"", NumberToInsert, "\", pFirstSubStringTextLabel:\"", pFirstSubStringTextLabel, "\")") SET_WARNING_MESSAGE_WITH_HEADER_AND_SUBSTRING_FLAGS(pHeaderTextLabel, pBodyTextLabel, FE_WARNING_OKCANCEL, pBodySubTextLabel, TRUE, NumberToInsert, WARNING_MESSAGE_DEFAULT, pFirstSubStringTextLabel) ENDPROC PROC HANDLE_REPLACE_WAREHOUSE_MENU_DESCRIPTION(REPLACE_MP_VEH_OR_PROP_MENU &control, INT iPurchasingWarehouseID) //item description BOOL bSmallerGarage INT iCurrentSelectedWHSlot = iWHOrder[control.iCurrentVertSel] INT iOwnedWarehouseID = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(iCurrentSelectedWHSlot) IF IS_BIT_SET(control.iButtonBS,PROP_BUTTON_BS_GIVEN_CONFIRMATION) INT iTradeIn = GET_WAREHOUSE_VALUE_FOR_SALE(iOwnedWarehouseID) REPLACE_WAREHOUSE_WARNING_MESSAGE_WEB(iTradeIn, bSmallerGarage) ELSE CLEAR_BIT(control.iBS,REP_VEH_PROP_BS_REQ_SF) CLEAR_BIT(control.iBS,REP_VEH_PROP_BS_WARNING) IF IS_BIT_SET(control.iBS,REP_VEH_PROP_BS_NO_MONEY) SET_CURRENT_MENU_ITEM_DESCRIPTION("REP_WHOUSE_4",100) ELIF IS_BIT_SET(control.iBS,REP_VEH_PROP_BS_HEIST_ACTIVE) SET_CURRENT_MENU_ITEM_DESCRIPTION("MP_PROP_HEI_0",100) ELIF IS_BIT_SET(control.iBS,REP_VEH_PROP_BS_3RD_DISABLE) SET_CURRENT_MENU_ITEM_DESCRIPTION("PROP3RDDIS",1000) ELIF iOwnedWarehouseID > 0 AND NOT ARE_WAREHOUSES_SUITABLE_FOR_TRADE(iOwnedWarehouseID, iPurchasingWarehouseID) IF GET_WAREHOUSE_SIZE(iOwnedWarehouseID) > GET_WAREHOUSE_SIZE(iPurchasingWarehouseID) SET_CURRENT_MENU_ITEM_DESCRIPTION("REP_WHOUSE_5a",1000) ELIF NOT IS_WAREHOUSE_EMPTY(iOwnedWarehouseID) SET_CURRENT_MENU_ITEM_DESCRIPTION("REP_WHOUSE_5b",1000) ELIF iOwnedWarehouseID = iPurchasingWarehouseID SET_CURRENT_MENU_ITEM_DESCRIPTION("REP_WHOUSE_5c",1000) #IF FEATURE_DLC_1_2022 ELIF IS_WAREHOUSE_PED_SOURCING_CARGO(iOwnedWarehouseID) SET_CURRENT_MENU_ITEM_DESCRIPTION("REP_WHOUSE_5d",1000) #ENDIF ELSE CASSERTLN(DEBUG_INTERNET, " HANDLE_REPLACE_WAREHOUSE_MENU_DESCRIPTION: unknown reason why warehouse not suitable to trade ", iOwnedWarehouseID, " for ", iPurchasingWarehouseID, " in selection ", control.iCurrentVertSel, "!") SET_CURRENT_MENU_ITEM_DESCRIPTION("REP_WHOUSE_5",1000) ENDIF ELIF iOwnedWarehouseID > 0 AND ARE_WAREHOUSES_SUITABLE_FOR_TRADE(iOwnedWarehouseID, iPurchasingWarehouseID) SET_CURRENT_MENU_ITEM_DESCRIPTION("REP_WHOUSE_2",100) ELSE SET_CURRENT_MENU_ITEM_DESCRIPTION("REP_WHOUSE_3",100) ENDIF ENDIF ENDPROC FUNC BOOL RUN_REPLACE_WAREHOUSE_MENU(REPLACE_MP_VEH_OR_PROP_MENU &control,INT &iResultSlot,INT iPurchasingWarehouseID) bool g_bAbortWarehouseMenus = FALSE IF NOT NETWORK_IS_GAME_IN_PROGRESS() OR IS_PLAYER_IN_CORONA() OR NOT IS_NET_PLAYER_OK(PLAYER_ID()) OR g_bMissionEnding OR g_bAbortWarehouseMenus OR g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistCelebration IF g_bAbortWarehouseMenus CPRINTLN(DEBUG_INTERNET, "RUN_REPLACE_WAREHOUSE_MENU: aborting menu. g_bAbortWarehouseMenus = TRUE") ENDIF iResultSlot = -1 CPRINTLN(DEBUG_INTERNET, "RUN_REPLACE_WAREHOUSE_MENU - NETWORK_IS_GAME_IN_PROGRESS = FALSE - returning slot -1") CLEANUP_REPLACE_MP_VEH_OR_PROP_MENU(control) RETURN(TRUE) ENDIF INT propval = GET_WAREHOUSE_PAID_FOR_PURCHASE_PRICE(iPurchasingWarehouseID) //*g_sMPTunables.fPropertyMultiplier) HIDE_HELP_TEXT_THIS_FRAME() DISABLE_DPADDOWN_THIS_FRAME() DISABLE_SELECTOR_THIS_FRAME() SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL,INPUT_FRONTEND_LEFT) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL,INPUT_FRONTEND_RIGHT) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL,INPUT_CELLPHONE_LEFT) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL,INPUT_CELLPHONE_RIGHT) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL,INPUT_CELLPHONE_SCROLL_FORWARD) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL,INPUT_CELLPHONE_SCROLL_BACKWARD) IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) SET_INPUT_EXCLUSIVE(PLAYER_CONTROL, INPUT_ATTACK) SET_INPUT_EXCLUSIVE(PLAYER_CONTROL, INPUT_ATTACK2) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_LOOK_UD) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_LOOK_LR) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2) IF NOT IS_PAUSE_MENU_ACTIVE() AND NOT IS_WARNING_MESSAGE_ACTIVE() SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) ENDIF HANDLE_CURSOR_HIGHLIGHTED_MENU_ITEMS() SET_MOUSE_CURSOR_THIS_FRAME() ENDIF SET_BIT(control.iBS,REP_VEH_PROP_BS_USING) IF LOAD_MENU_ASSETS() IF IS_NET_PLAYER_OK(PLAYER_ID()) IF NOT IS_BIT_SET(control.iBS,REP_VEH_PROP_BS_SETUP) SETUP_REPLACE_WAREHOUSE_MENU(control, iPurchasingWarehouseID) SET_BIT(control.iBS,REP_VEH_PROP_BS_SETUP) HANDLE_REPLACE_WAREHOUSE_MENU_DESCRIPTION(control, iPurchasingWarehouseID) IF NOT IS_BIT_SET(control.iButtonBS,PROP_BUTTON_BS_GIVEN_CONFIRMATION) DRAW_MENU() ENDIF ELSE IF NOT IS_PAUSE_MENU_ACTIVE() AND NOT IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD) AND NOT g_sTransitionSessionData.sEndReserve.bTranCleanUpEndReservingSlot IF NOT IS_BIT_SET(control.iButtonBS,PROP_BUTTON_BS_PRESSED_ACCEPT) INT iCurrentSelectedWHSlot = iWHOrder[control.iCurrentVertSel] INT iOwnedWarehouseID = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(iCurrentSelectedWHSlot) INT iOwnedWarehouseCost = 0 IF iOwnedWarehouseID > ciW_Invalid iOwnedWarehouseCost = GET_WAREHOUSE_VALUE_FOR_SALE(iOwnedWarehouseID) ENDIF IF iOwnedWarehouseID <= ciW_Invalid OR ARE_WAREHOUSES_SUITABLE_FOR_TRADE(iOwnedWarehouseID, iPurchasingWarehouseID) IF IS_CELLPHONE_ACCEPT_JUST_PRESSED_EXCLUDING_MOUSE() OR (IS_MENU_CURSOR_ACCEPT_PRESSED() AND (g_iMenuCursorItem = control.iCurrentVertSel)) OR (IS_WARNING_MESSAGE_ACTIVE() AND IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Success", "GTAO_Exec_SecuroServ_Computer_Sounds") #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_INTERNET, " control.iCurrentVertSel ", control.iCurrentVertSel, " ownedWarehouse: ", iOwnedWarehouseID) CPRINTLN(DEBUG_INTERNET, " propVal = ",propval) IF iOwnedWarehouseID > 0 AND ARE_WAREHOUSES_SUITABLE_FOR_TRADE(iOwnedWarehouseID, iPurchasingWarehouseID) CPRINTLN(DEBUG_INTERNET, " trade in = ",iOwnedWarehouseCost) ENDIF #ENDIF INT iSpendValue = (propval - iOwnedWarehouseCost) IF iSpendValue <= 0 OR NETWORK_CAN_SPEND_MONEY(iSpendValue, FALSE, TRUE, FALSE) IF NOT IS_BIT_SET(control.iButtonBS,PROP_BUTTON_BS_GIVEN_CONFIRMATION) AND iOwnedWarehouseID > ciW_Invalid CLEANUP_MENU_ASSETS() SET_BIT(control.iButtonBS,PROP_BUTTON_BS_GIVEN_CONFIRMATION) CLEAR_BIT(control.iBS,REP_VEH_PROP_BS_SETUP) RETURN FALSE ELSE iResultSlot = iCurrentSelectedWHSlot CLEAR_BIT(control.iBS,REP_VEH_PROP_BS_SETUP) CLEANUP_REPLACE_MP_VEH_OR_PROP_MENU(control) RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, " NETWORK_CAN_SPEND_MONEY returned false") SET_BIT(control.iBS,REP_VEH_PROP_BS_NO_MONEY) ENDIF SET_BIT(control.iButtonBS,PROP_BUTTON_BS_PRESSED_ACCEPT) ENDIF ELSE //not suitable for trade... ENDIF ELSE IF NOT IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL,INPUT_CELLPHONE_SELECT) AND NOT IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_SELECT) CLEAR_BIT(control.iButtonBS,PROP_BUTTON_BS_PRESSED_ACCEPT) ENDIF ENDIF IF NOT IS_BIT_SET(control.iButtonBS,PROP_BUTTON_BS_PRESSED_CANCEL) IF IS_CELLPHONE_CANCEL_JUST_PRESSED_EXCLUDING_MOUSE() OR (IS_MENU_CURSOR_CANCEL_PRESSED() AND (g_iMenuCursorItem > MENU_CURSOR_NO_ITEM)) OR (IS_WARNING_MESSAGE_ACTIVE() AND IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)) PLAY_SOUND_FRONTEND(-1, "CANCEL","HUD_FREEMODE_SOUNDSET") IF NOT IS_BIT_SET(control.iButtonBS,PROP_BUTTON_BS_GIVEN_CONFIRMATION) CPRINTLN(DEBUG_INTERNET, "RUN_REPLACE_WAREHOUSE_MENU player exited menu") CLEANUP_REPLACE_MP_VEH_OR_PROP_MENU(control) iResultSlot = -1 RETURN TRUE ELSE //REMOVE_MENU_HELP_KEYS() //ADD_MENU_HELP_KEY_INPUT(INPUT_FRONTEND_ACCEPT, "BB_SELECT") //ADD_MENU_HELP_KEY_INPUT(INPUT_FRONTEND_CANCEL, "BB_BACK") //ADD_MENU_HELP_KEY_GROUP( INPUTGROUP_FRONTEND_DPAD_UD,"HUD_INPUT1C") CLEAR_BIT(control.iButtonBS,PROP_BUTTON_BS_GIVEN_CONFIRMATION) CLEAR_BIT(control.iBS,REP_VEH_PROP_BS_SETUP) ENDIF SET_BIT(control.iButtonBS,PROP_BUTTON_BS_PRESSED_CANCEL) ENDIF ELSE IF NOT IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL) CLEAR_BIT(control.iButtonBS,PROP_BUTTON_BS_PRESSED_CANCEL) ENDIF ENDIF IF NOT IS_BIT_SET(control.iButtonBS,PROP_BUTTON_BS_GIVEN_CONFIRMATION) IF NOT IS_BIT_SET(control.iButtonBS,PROP_BUTTON_BS_PRESSED_UP) IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_UP) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_UP) OR IS_MENU_CURSOR_SCROLL_UP_PRESSED() PLAY_SOUND_FRONTEND(-1, "NAV_UP_DOWN","HUD_FREEMODE_SOUNDSET") control.iCurrentVertSel-- SET_BIT(control.iButtonBS,PROP_BUTTON_BS_PRESSED_UP) CLEAR_BIT(control.iBS,REP_VEH_PROP_BS_SETUP) RESET_NET_TIMER(control.menuNavigationDelay) ENDIF ELSE IF REPLACE_MP_VEH_OR_PROP_CHECK_MENU_INPUT_DELAY(control,INPUT_CELLPHONE_UP) CLEAR_BIT(control.iButtonBS,PROP_BUTTON_BS_PRESSED_UP) ENDIF ENDIF IF NOT IS_BIT_SET(control.iButtonBS,PROP_BUTTON_BS_PRESSED_DOWN) IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_DOWN) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_DOWN) OR IS_MENU_CURSOR_SCROLL_DOWN_PRESSED() PLAY_SOUND_FRONTEND(-1, "NAV_UP_DOWN","HUD_FREEMODE_SOUNDSET") control.iCurrentVertSel++ SET_BIT(control.iButtonBS,PROP_BUTTON_BS_PRESSED_DOWN) CLEAR_BIT(control.iBS,REP_VEH_PROP_BS_SETUP) RESET_NET_TIMER(control.menuNavigationDelay) ENDIF ELSE IF REPLACE_MP_VEH_OR_PROP_CHECK_MENU_INPUT_DELAY(control,INPUT_CELLPHONE_DOWN) CLEAR_BIT(control.iButtonBS,PROP_BUTTON_BS_PRESSED_DOWN) ENDIF ENDIF ENDIF // handle clicking on a new highlighted option IF IS_MENU_CURSOR_ACCEPT_PRESSED() IF (g_iMenuCursorItem != control.iCurrentVertSel) control.iCurrentVertSel = g_iMenuCursorItem SET_CURRENT_MENU_ITEM(control.icurrentVertSel) PLAY_SOUND_FRONTEND(-1, "SELECT", "HUD_FREEMODE_SOUNDSET") ENDIF ENDIF IF control.iCurrentVertSel >= control.iMaxVertSel control.iCurrentVertSel = 0 ENDIF IF Control.iCurrentVertSel < 0 control.iCurrentVertSel = control.iMaxVertSel-1 ENDIF //PRINTLN("control.iCurrentVertSel = ",control.iCurrentVertSel) HANDLE_REPLACE_WAREHOUSE_MENU_DESCRIPTION(control,iPurchasingWarehouseID) IF NOT IS_BIT_SET(control.iButtonBS,PROP_BUTTON_BS_GIVEN_CONFIRMATION) AND NOT IS_WARNING_MESSAGE_ACTIVE() DRAW_MENU() ENDIF ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PROCESSING_SECUROSERVE_WAREHOUSE_BASKET(INT &iProcessSuccess, INT iPrice, INT iStatValue, SHOP_ITEM_CATEGORIES eCategory, ITEM_ACTION_TYPES eAction, INT iItemId, INT iInventoryKey, INT iSellingPrice = 0, INT iSellingItemId = 0, INT iInteriorID = 0, INT iInteriorInventoryKey = 0, INT iInteriorPrice = 0) INT iTempPrice IF IS_BIT_SET(iBS, SEC_BS_PROCESSING_BASKET) SWITCH iProcessingBasketStage // Add item to basket CASE SHOP_BASKET_STAGE_ADD // Override the players cash. iTempPrice = (iPrice - iSellingPrice) IF iTempPrice > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iTempPrice, FALSE, TRUE, FALSE) iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED CASSERTLN(DEBUG_INTERNET, "[BASKET] PROCESSING_SECUROSERVE_WAREHOUSE_BASKET - Player can't afford this item! iTempPrice= ", iTempPrice) RETURN TRUE ENDIF CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding warehouse to basket eCategory:", GET_SHOP_ITEM_CATEGORIES_DEBUG_STRING(eCategory), ", eAction:", GET_CASH_TRANSACTION_ACTION_TYPE_DEBUG_STRING(eAction), ", iPrice:$", iPrice, ", iItemId:", iItemId, ", iInventoryKey:", iInventoryKey) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) IF iSellingItemId = HASH("WH_INDEX_0_t0_v0") OR iSellingItemId = HASH("IE_WH_INDEX_0_t0_v0") SCRIPT_ASSERT("PROCESSING_SECUROSERVE_WAREHOUSE_BASKET - You are trading in an invalid warehouse!") ENDIF // Warehouse we are trading in. IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade warehouse to basket eCategory:", GET_SHOP_ITEM_CATEGORIES_DEBUG_STRING(eCategory), ", eAction:", GET_CASH_TRANSACTION_ACTION_TYPE_DEBUG_STRING(eAction), ", iSellingPrice:$", iSellingPrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iSellingItemId, eAction, 1, iSellingPrice, 1, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Failed to add selling item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ENDIF IF iInteriorID != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade warehouse to basket eCategory: CATEGORY_INVENTORY_WAREHOUSE_INTERIOR, eAction:", GET_CASH_TRANSACTION_ACTION_TYPE_DEBUG_STRING(eAction), ", iSellingPrice:$", iSellingPrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, CATEGORY_INVENTORY_WAREHOUSE_INTERIOR, iInteriorID, eAction, 1, iInteriorPrice, 1, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInteriorInventoryKey) // ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Failed to add interior item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF BREAK // Pending CASE SHOP_BASKET_STAGE_PENDING IF IS_CASH_TRANSACTION_COMPLETE(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) IF GET_CASH_TRANSACTION_STATUS(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) = CASH_TRANSACTION_STATUS_SUCCESS CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket transaction finished, success!") iProcessingBasketStage = SHOP_BASKET_STAGE_SUCCESS ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket transaction finished, failed!") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF BREAK // Success CASE SHOP_BASKET_STAGE_SUCCESS CLEAR_BIT(iBS, SEC_BS_PROCESSING_BASKET) iProcessingBasketStage = SHOP_BASKET_STAGE_ADD USE_FAKE_MP_CASH(FALSE) iProcessSuccess = 2 RETURN FALSE BREAK //Failed CASE SHOP_BASKET_STAGE_FAILED DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) CLEAR_BIT(iBS, SEC_BS_PROCESSING_BASKET) iProcessingBasketStage = SHOP_BASKET_STAGE_ADD USE_FAKE_MP_CASH(FALSE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) iProcessSuccess = 0 RETURN FALSE BREAK ENDSWITCH RETURN TRUE ENDIF IF iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED CPRINTLN(DEBUG_INTERNET, "[BASKET] - was FORCE_CLOSE_BROWSER called to termiate the transaction? Set success to 0") iProcessingBasketStage = SHOP_BASKET_STAGE_ADD iProcessSuccess = 0 RETURN FALSE ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_ADD iProcessSuccess = -1 RETURN FALSE ENDFUNC FUNC BOOL BUY_MP_WAREHOUSE_FROM_SECUROSERV(INT iWarehouseID, INT &iResultSlot) REPLACE_MP_VEH_OR_PROP_MENU replaceMenu iResultSlot = -1 //, i IF g_sMPTunables.bexec_disable_warehouse_purchase CPRINTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: purchase failed, g_sMPTunables.bexec_disable_warehouse_purchase is true") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE ENDIF IF DOES_LOCAL_PLAYER_OWN_WAREHOUSE(iWarehouseID) CPRINTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: purchase invalid, we already own warehouse: ", iWarehouseID) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE ENDIF TEXT_LABEL_15 tl_15WarehouseName = GET_WAREHOUSE_NAME(iWarehouseID) CPRINTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: trying to purchase warehouse #", iWarehouseID, " \"", tl_15WarehouseName, "\"") INT iMaxTradeIn = 0 INT propval = CEIL(TO_FLOAT(GET_WAREHOUSE_COST(iWarehouseID))*g_sMPTunables.fPropertyMultiplier) CPRINTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: purchase valid, attempting index #", iWarehouseID) INT minPendingTransactionValue INT finalPendingTransactionValue minPendingTransactionValue = propval - iMaxTradeIn INT iOldWarehouse = 0 //is it a debit or refund IF minPendingTransactionValue >0 //do they have enough money IF NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: purchase failed, player doesn't have sufficient cash NETWORK_CAN_SPEND_MONEY returned false") TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15WarehouseName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") SET_BIT(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) RETURN FALSE ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: min pending- $", minPendingTransactionValue, " MAX trade val- $",iMaxTradeIn) IF DOES_LOCAL_PLAYER_OWN_A_WAREHOUSE() WHILE NOT RUN_REPLACE_WAREHOUSE_MENU(replaceMenu,iResultSlot,iWarehouseID) DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ELSE iResultSlot = 0 ENDIF INT iResultSlotCost = 0 IF iResultSlot = -1 // g_iPendingBrowserTimer = g_iBrowserTimer PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") CPRINTLN(DEBUG_INTERNET, " Player backed out of warehouse selection") RETURN FALSE ELSE iOldWarehouse = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(iResultSlot) IF (iOldWarehouse <= ciW_Invalid) OR (iOldWarehouse > ciMaxWarehouses) iResultSlotCost = ciW_Invalid ELSE iResultSlotCost = GET_WAREHOUSE_VALUE_FOR_SALE(iOldWarehouse) ENDIF finalPendingTransactionValue = propval - iResultSlotCost CPRINTLN(DEBUG_INTERNET, " Player selected WH: ", iOldWarehouse, " for trade. price before trade: ", propval, " Old WH trade val: ", iResultSlotCost, " Final trans value: ", finalPendingTransactionValue) ENDIF // Re-check if player can afford based on selected trade-in value IF finalPendingTransactionValue > 0 //do they have enough money IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15WarehouseName), finalPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") SET_BIT(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) RETURN FALSE ENDIF ENDIF IF USE_SERVER_TRANSACTIONS() SET_BIT(iBS, SEC_BS_PROCESSING_BASKET) iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_WAREHOUSE_KEY_FOR_CATALOGUE(iWarehouseID) INT iInventoryKey = GET_WAREHOUSE_INVENTORY_KEY_FOR_CATALOGUE(iResultSlot) INT iSellingItemId = 0 IF GET_WAREHOUSE_ID_FOR_SAVE_SLOT(iResultSlot) != ciW_Invalid iSellingItemId = GET_WAREHOUSE_KEY_FOR_CATALOGUE(GET_WAREHOUSE_ID_FOR_SAVE_SLOT(iResultSlot)) ENDIF #IF IS_DEBUG_BUILD TEXT_LABEL_15 tlLastClickedWarehouseIndex = tl_15WarehouseName IF IS_STRING_NULL_OR_EMPTY(tlLastClickedWarehouseIndex) CASSERTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: label for last clicked warehouse index #", iWarehouseID, " is empty!") ELSE //CDEBUG1LN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: label for last clicked warehouse index #", iWarehouseID, " is \"", tlLastClickedWarehouseIndex, "\" (iReplaceWarehouse: ", iReplaceWarehouse, ")") ENDIF #ENDIF INT iProcessSuccess = -1 /////////////////////////////////////////// /// TRANSACTION FOR WAREHOUSE WHILE PROCESSING_SECUROSERVE_WAREHOUSE_BASKET(iProcessSuccess, propval, iResultSlot, CATEGORY_INVENTORY_WAREHOUSE, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemId, iInventoryKey, iResultSlotCost, iSellingItemId) RENDER_SECUROSERVE() WAIT(0) ENDWHILE RENDER_SECUROSERVE() SWITCH iProcessSuccess CASE 0 CWARNINGLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: failed to process transaction") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE BREAK CASE 2 CPRINTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: success!!") BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: unknown iProcessSuccess: \"", iProcessSuccess, "\"") BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: final:$", finalPendingTransactionValue) SPEND_OFFICE_AND_WAREHOUSE data data.m_Location = iWarehouseID data.m_LocationAmount = finalPendingTransactionValue data.m_SmallWarehouses = GET_COUNT_OF_WAREHOUSES_OWNED_BY_SIZE(eWarehouseSmall, PLAYER_ID()) data.m_MediumWarehouses = GET_COUNT_OF_WAREHOUSES_OWNED_BY_SIZE(eWarehouseMedium, PLAYER_ID()) data.m_LargeWarehouses = GET_COUNT_OF_WAREHOUSES_OWNED_BY_SIZE(eWarehouseLarge, PLAYER_ID()) data.m_WarehouseSize = ENUM_TO_INT(GET_WAREHOUSE_SIZE(iWarehouseID)) SET_WAREHOUSE_PAID_FOR_PURCHASE_PRICE(iResultSlot, PropVal) IF finalPendingTransactionValue >= 0 AND (finalPendingTransactionValue = 0 OR (finalPendingTransactionValue > 0 AND (USE_SERVER_TRANSACTIONS() OR NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue,FALSE,TRUE,FALSE)))) IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF iOldWarehouse = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(iResultSlot) IF (iOldWarehouse <= 0) OR (iOldWarehouse > ciMaxWarehouses) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_SHOPS, "[CASH] NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED - basket") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF NETWORK_SPENT_PURCHASE_WAREHOUSE_PROPERTY(propval, data, FALSE, TRUE) CPRINTLN(DEBUG_INTERNET, " BUY_MP_WAREHOUSE_FROM_SECUROSERV: Bought warehouse ", tl_15WarehouseName, " for $", finalPendingTransactionValue) ELIF finalPendingTransactionValue > 0 IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_SHOPS, "[CASH] NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED - basket") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF CDEBUG1LN(DEBUG_SAFEHOUSE, ",SECURO_TRADE> Trading with cost: ", finalPendingTransactionValue, " Sending telemtry cost as: ", data.m_LocationAmount) NETWORK_SPENT_UPGRADE_WAREHOUSE_PROPERTY(finalPendingTransactionValue, data, FALSE, TRUE) ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF ENDIF RETURN TRUE ENDFUNC FUNC BOOL BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV(IMPORT_EXPORT_GARAGES eIEWarehouseID) INT iOwnedIEWarehouseValue IMPORT_EXPORT_GARAGES eOwnedIEWH = GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID()) INT iInteriorItemCost = GET_IE_GARAGE_INTERIOR_COST(eSelectedInterior, FALSE) INT iInteriorInventoryKey = HASH("MP_STAT_OWNED_IE_WAREHOUSE_VAR_v0") INT iInteriorItemHash = GET_IE_GARAGE_INTERIOR_KEY_FOR_CATALOGUE(eSelectedInterior, FALSE) IF iInteriorItemCost = 0 //The basic interior is free when first purchasing a WH //Setting the item hash to 0 stops it from being added to the transaction basket iInteriorInventoryKey = 0 iInteriorItemHash = 0 ENDIF IF DOES_PLAYER_OWN_IE_GARAGE(PLAYER_ID(), eIEWarehouseID) CPRINTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: purchase invalid, we already own warehouse: ", eIEWarehouseID) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE ENDIF TEXT_LABEL_15 tl_15WarehouseName = GET_IE_GARAGE_NAME_LABEL(eIEWarehouseID) CPRINTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: trying to purchase warehouse #", eIEWarehouseID, " \"", tl_15WarehouseName, "\"") INT iMaxTradeIn = 0 INT propval = CEIL(TO_FLOAT(GET_IE_GARAGE_COST(eIEWarehouseID))*g_sMPTunables.fPropertyMultiplier) propval += iInteriorItemCost CPRINTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: purchase valid, attempting index #", eIEWarehouseID) INT minPendingTransactionValue INT finalPendingTransactionValue minPendingTransactionValue = propval - iMaxTradeIn //is it a debit or refund IF eOwnedIEWH = IE_GARAGE_INVALID IF minPendingTransactionValue > 0 //do they have enough money IF NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue,FALSE,TRUE,FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: purchase failed, player doesn't have sufficient cash") TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15WarehouseName), minPendingTransactionValue) SET_BIT(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE ENDIF ENDIF finalPendingTransactionValue = propval ELSE iOwnedIEWarehouseValue = GET_IE_GARAGE_TRADE_PRICE(eOwnedIEWH) finalPendingTransactionValue = propval - iOwnedIEWarehouseValue CPRINTLN(DEBUG_INTERNET, " Player selected factory: ", eOwnedIEWH, " for trade. price before trade: ", propval, " Old Factory trade val: ", iOwnedIEWarehouseValue, " Final trans value: ", finalPendingTransactionValue) // Re-check if player can afford based on selected trade-in value IF finalPendingTransactionValue > 0 IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15WarehouseName), minPendingTransactionValue) SET_BIT(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE ENDIF ENDIF ENDIF IF USE_SERVER_TRANSACTIONS() SET_BIT(iBS, SEC_BS_PROCESSING_BASKET) iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_IE_WAREHOUSE_KEY_FOR_CATALOGUE(eIEWarehouseID) INT iInventoryKey = GET_IE_WAREHOUSE_INVENTORY_KEY_FOR_CATALOGUE() INT iSellingItemId = 0 IF eOwnedIEWH != IE_GARAGE_INVALID iSellingItemId = GET_IE_WAREHOUSE_KEY_FOR_CATALOGUE(eOwnedIEWH) ENDIF #IF IS_DEBUG_BUILD TEXT_LABEL_15 tlLastClickedWarehouseIndex = tl_15WarehouseName IF IS_STRING_NULL_OR_EMPTY(tlLastClickedWarehouseIndex) CASSERTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: label for last clicked warehouse index #", eIEWarehouseID, " is empty!") ENDIF #ENDIF INT iProcessSuccess = -1 /////////////////////////////////////////// /// TRANSACTION FOR WAREHOUSE WHILE PROCESSING_SECUROSERVE_WAREHOUSE_BASKET(iProcessSuccess, (propval - iInteriorItemCost), 0, CATEGORY_INVENTORY_WAREHOUSE, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemId, iInventoryKey, iOwnedIEWarehouseValue, iSellingItemId, iInteriorItemHash, iInteriorInventoryKey, iInteriorItemCost) RENDER_SECUROSERVE() WAIT(0) ENDWHILE RENDER_SECUROSERVE() SWITCH iProcessSuccess CASE 0 CWARNINGLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: failed to process transaction") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE BREAK CASE 2 CPRINTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: success!!") BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: unknown iProcessSuccess: \"", iProcessSuccess, "\"") BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: final:$", finalPendingTransactionValue) SPEND_OFFICE_AND_WAREHOUSE data SPEND_BUSINESS_PROPERTY data2 data.m_Location = GET_HASH_KEY(GET_IE_GARAGE_NAME_LABEL(eIEWarehouseID)) data.m_LocationAmount = finalPendingTransactionValue data.m_Style = GET_HASH_KEY(GET_IE_GARAGE_INTERIOR_STRING(eSelectedInterior)) data.m_StyleAmount = iInteriorItemCost data2.m_businessID = data.m_Location data2.m_businessUpgradeType = data.m_Style IF data.m_StyleAmount > 0 AND (eOwnedIEWH = IE_GARAGE_INVALID OR eOwnedIEWH = IE_GARAGE_UPPER_LIMIT) //This makes sure the total price in the telemetry data matches the price charged //This is only necessary when using NETWORK_SPENT_PURCHASE_IMPEXP_WAREHOUSE_PROPERTY data.m_LocationAmount -= data.m_StyleAmount ENDIF SET_IE_GARAGE_PAID_FOR_PURCHASE_PRICE(propval - iInteriorItemCost) //Check if we're trading of just buying IF eOwnedIEWH = IE_GARAGE_INVALID OR eOwnedIEWH = IE_GARAGE_UPPER_LIMIT IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_SHOPS, "[CASH] NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED - basket") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF NETWORK_SPENT_PURCHASE_IMPEXP_WAREHOUSE_PROPERTY(propval, data, FALSE, TRUE) CPRINTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: Bought vehicle warehouse ", tl_15WarehouseName, " for $", finalPendingTransactionValue) ELSE IF iOwnedIEWarehouseValue > 0 IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_SHOPS, "[CASH] NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED - basket") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF CPRINTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV: Trading the vehicle warehouse is earning the player: ", iOwnedIEWarehouseValue) NETWORK_EARN_FROM_PROPERTY(iOwnedIEWarehouseValue, GET_HASH_KEY(GET_IE_GARAGE_NAME_LABEL(eOwnedIEWH))) ENDIF IF propval > 0 IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_SHOPS, "[CASH] NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED - basket") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF CDEBUG1LN(DEBUG_SHOPS, " Trading with cost: ", finalPendingTransactionValue, " Sending telemtry cost as: ", propval) NETWORK_SPENT_TRADE_IMPEXP_WAREHOUSE_PROPERTY(propval, data2, FALSE, TRUE) ENDIF ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF RETURN TRUE ENDFUNC FUNC BOOL PROCESSING_SECUROSERVE_WAREHOUSE_INTERIOR_BASKET(INT &iProcessSuccess, INT iPrice, INT iStatValue, SHOP_ITEM_CATEGORIES eCategory, ITEM_ACTION_TYPES eAction, INT iItemId, INT iInventoryKey) IF IS_BIT_SET(iBS, SEC_BS_PROCESSING_BASKET) SWITCH iProcessingBasketStage // Add item to basket CASE SHOP_BASKET_STAGE_ADD IF iPrice > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iPrice, FALSE, TRUE, FALSE) CASSERTLN(DEBUG_INTERNET, "[BASKET] PROCESSING_SECUROSERVE_WAREHOUSE_INTERIOR_BASKET - Player can't afford this item! iPrice= $", iPrice) iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding warehouse interior to basket eCategory: CATEGORY_INVENTORY_WAREHOUSE_INTERIOR, eAction:", GET_CASH_TRANSACTION_ACTION_TYPE_DEBUG_STRING(eAction)) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Failed to add interior item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF BREAK // Pending CASE SHOP_BASKET_STAGE_PENDING IF IS_CASH_TRANSACTION_COMPLETE(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) IF GET_CASH_TRANSACTION_STATUS(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) = CASH_TRANSACTION_STATUS_SUCCESS CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket transaction finished, success!") iProcessingBasketStage = SHOP_BASKET_STAGE_SUCCESS ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket transaction finished, failed!") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF BREAK // Success CASE SHOP_BASKET_STAGE_SUCCESS CLEAR_BIT(iBS, SEC_BS_PROCESSING_BASKET) iProcessingBasketStage = SHOP_BASKET_STAGE_ADD USE_FAKE_MP_CASH(FALSE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) iProcessSuccess = 2 RETURN FALSE BREAK //Failed CASE SHOP_BASKET_STAGE_FAILED DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) CLEAR_BIT(iBS, SEC_BS_PROCESSING_BASKET) iProcessingBasketStage = SHOP_BASKET_STAGE_ADD USE_FAKE_MP_CASH(FALSE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) iProcessSuccess = 0 RETURN FALSE BREAK ENDSWITCH RETURN TRUE ENDIF IF iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED CPRINTLN(DEBUG_INTERNET, "[BASKET] - was FORCE_CLOSE_BROWSER called to termiate the transaction? Set success to 0") iProcessingBasketStage = SHOP_BASKET_STAGE_ADD iProcessSuccess = 0 RETURN FALSE ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_ADD iProcessSuccess = -1 RETURN FALSE ENDFUNC FUNC BOOL BUY_MP_IE_WAREHOUSE_INTERIOR(IMPORT_EXPORT_GARAGES eIEWarehouseID, IE_GARAGE_INTERIORS eInterior) IMPORT_EXPORT_GARAGES eOwnedIEWH = GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID()) INT iInteriorItemCost = GET_IE_GARAGE_INTERIOR_COST(eInterior, TRUE) INT iInteriorInventoryKey = HASH("MP_STAT_OWNED_IE_WAREHOUSE_VAR_v0") INT iInteriorItemHash = GET_IE_GARAGE_INTERIOR_KEY_FOR_CATALOGUE(eInterior, TRUE) IF eIEWarehouseID != eOwnedIEWH CASSERTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_INTERIOR attempting interior purchase for an IE warehouse we don't own") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE ENDIF IF iInteriorItemCost > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iInteriorItemCost, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_IE_WAREHOUSE_INTERIOR: purchase failed, player doesn't have sufficient cash. Interior cost: ", iInteriorItemCost) TRIGGER_BROWSER_NAG_SCREEN(iInteriorItemHash, iInteriorItemCost) SET_BIT(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE ENDIF IF USE_SERVER_TRANSACTIONS() SET_BIT(iBS, SEC_BS_PROCESSING_BASKET) iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iProcessSuccess = -1 /////////////////////////////////////////// /// TRANSACTION FOR WAREHOUSE INTERIOR WHILE PROCESSING_SECUROSERVE_WAREHOUSE_INTERIOR_BASKET(iProcessSuccess, iInteriorItemCost, 1, CATEGORY_INVENTORY_WAREHOUSE_INTERIOR, NET_SHOP_ACTION_BUY_WAREHOUSE, iInteriorItemHash, iInteriorInventoryKey) RENDER_SECUROSERVE() WAIT(0) ENDWHILE RENDER_SECUROSERVE() SWITCH iProcessSuccess CASE 0 CWARNINGLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_INTERIOR: failed to process transaction") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE BREAK CASE 2 CPRINTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_INTERIOR: success!!") BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_INTERIOR: unknown iProcessSuccess: \"", iProcessSuccess, "\"") BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, " BUY_MP_IE_WAREHOUSE_INTERIOR: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF IF iInteriorItemCost > 0 SPEND_OFFICE_AND_WAREHOUSE data data.m_Location = GET_HASH_KEY(GET_IE_GARAGE_NAME_LABEL(eIEWarehouseID)) data.m_LocationAmount = 0 data.m_Style = GET_HASH_KEY(GET_IE_GARAGE_INTERIOR_STRING(eSelectedInterior)) data.m_StyleAmount = iInteriorItemCost IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_SHOPS, "[CASH] NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED - basket") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF PRINTLN(" BUY_MP_IE_WAREHOUSE_INTERIOR - item cost: ",iInteriorItemCost) PRINTLN(" BUY_MP_IE_WAREHOUSE_INTERIOR - Call NETWORK_SPENT_UPGRADE_IMPEXP_WAREHOUSE_PROPERTY") NETWORK_SPENT_UPGRADE_IMPEXP_WAREHOUSE_PROPERTY(iInteriorItemCost, data, FALSE, TRUE) ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF RETURN TRUE ENDFUNC FUNC BOOL BUY_MP_CONTRABAND_FROM_SECUROSERV(INT iWarehouseID, CONTRABAND_SIZE ShipmentSize) INT iResultSlot = GET_SAVE_SLOT_FOR_WAREHOUSE(iWarehouseID) TEXT_LABEL_15 tl_15ContrabandName = GET_WAREHOUSE_NAME(iWarehouseID) CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: trying to purchase CONTRABAND #", iWarehouseID, " \"", tl_15ContrabandName, "\"") BOOL bSpeialItemSelected = FALSE INT iMaxTradeIn = 0 INT propval = GET_CONTRABAND_SHIPMENT_COST(ShipmentSize) IF IS_BIT_SET(iBS2, SEC_BS2_SPECIAL_ITEM) AND ShipmentSize = CONTRABAND_SMALL propval = GET_SPECIAL_CONTRABAND_ITEM_COST(GET_SPECIAL_ITEM_FROM_CONTRABAND_TYPE(securoContraType)) bSpeialItemSelected = TRUE ENDIF CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: purchase valid, attempting index #", iWarehouseID) INT minPendingTransactionValue INT finalPendingTransactionValue minPendingTransactionValue = propval - iMaxTradeIn //is it a debit or refund IF minPendingTransactionValue > 0 //do they have enough money IF NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue,FALSE,TRUE,FALSE) CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: purchase failed, player doesn't have sufficient cash") TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ContrabandName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") SET_BIT(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) RETURN FALSE ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: min pending- $", minPendingTransactionValue, " MAX trade val- $",iMaxTradeIn) finalPendingTransactionValue = propval //- GET_VALUE_OF_CURRENTLY_OWNED_CONTRABAND(iResultSlot) // Re-check if player can afford based on selected trade-in value IF finalPendingTransactionValue > 0 IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ContrabandName), finalPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") SET_BIT(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) RETURN FALSE ENDIF ENDIF // Check that mission is available IF NOT GB_IS_BOSS_MISSION_AVAILABLE(PLAYER_ID(), FMMC_TYPE_GB_CONTRABAND_BUY, FALSE) CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: purchase failed, mission not available") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") iMissionUnavailableReason = GB_GET_BOSS_MISSION_UNAVAILABLE_REASON(PLAYER_ID(), FMMC_TYPE_GB_CONTRABAND_BUY, FALSE) RETURN FALSE ENDIF // Check we're not taking part in something IF GB_IS_PLAYER_CRITICAL_TO_JOB(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: purchase failed, player critical to job") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") iMissionUnavailableReason = GB_GET_BOSS_MISSION_UNAVAILABLE_REASON(PLAYER_ID(), FMMC_TYPE_GB_CONTRABAND_BUY, FALSE) RETURN FALSE ENDIF IF NOT GB_HAS_BUY_MISSION_TIMER_EXPIRED() CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: purchase failed, GB_HAS_BUY_MISSION_TIMER_EXPIRED is false") iMissionUnavailableReason = GB_MU_REASON_ON_COOLDOWN RETURN FALSE ENDIF IF ARE_SECUROSERV_BUY_MISSIONS_DISABLED() CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: purchase failed, ARE_BUY_MISSIONS_DISABLED is true") iMissionUnavailableReason = GB_MU_REASON_UNSUITABLE_SESSION RETURN FALSE ENDIF IF NETWORK_IS_ACTIVITY_SESSION() CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: purchase failed, NETWORK_IS_ACTIVITY_SESSION is true") RETURN FALSE ENDIF IF USE_SERVER_TRANSACTIONS() /* BuyContrabandMission – This is used to fill/set the CATEGORY_INVENTORY_CONTRABAND_MISSION It deducts money for the ‘purchasing’ of the mission Basket will be < CATEGORY_INVENTORY_CONTRABAND_MISSION, CATEGORY_CONTRABAND_MISSION, price> Validation must make sure the player owns the warehouse this CATEGORY_INVENTORY_CONTRABAND_MISSION is associated with */ SET_BIT(iBS, SEC_BS_PROCESSING_BASKET) iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_CONTRABAND_MISSION_KEY_FOR_CATALOGUE(TRUE, ENUM_TO_INT(ShipmentSize), bSpeialItemSelected, ENUM_TO_INT(GET_SPECIAL_ITEM_FROM_CONTRABAND_TYPE(securoContraType))) INT iInventoryKey = GET_CONTRABAND_MISSION_INVENTORY_KEY_FOR_CATALOGUE(iResultSlot) #IF IS_DEBUG_BUILD TEXT_LABEL_15 tlLastClickedCONTRABANDIndex = tl_15ContrabandName IF IS_STRING_NULL_OR_EMPTY(tlLastClickedCONTRABANDIndex) CASSERTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: label for last clicked CONTRABAND index #", iWarehouseID, " is empty!") ELSE //CDEBUG1LN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: label for last clicked CONTRABAND index #", iWarehouseID, " is \"", tlLastClickedCONTRABANDIndex, "\" (iReplaceCONTRABAND: ", iReplaceCONTRABAND, ")") ENDIF #ENDIF INT iProcessSuccess = -1 BOOL bProcessingBasket = IS_BIT_SET(iBS, SEC_BS_PROCESSING_BASKET) /////////////////////////////////////////// /// TRANSACTION FOR CONTRABAND WHILE PROCESSING_SECUROSERVE_CONTRABAND_BASKET(iProcessSuccess, propval, iResultSlot, CATEGORY_INVENTORY_CONTRABAND_MISSION, NET_SHOP_ACTION_BUY_CONTRABAND_MISSION, iItemId, iInventoryKey, bProcessingBasket, iProcessingBasketStage) RENDER_SECUROSERVE() WAIT(0) ENDWHILE IF NOT bProcessingBasket CLEAR_BIT(iBS, SEC_BS_PROCESSING_BASKET) ENDIF SWITCH iProcessSuccess CASE 0 CWARNINGLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: failed to process transaction") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE BREAK CASE 2 CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: success!!") // Track this so we can add contraband if the mision was successful. SET_LAST_PURCHASED_BUY_MISSION_CATALOGUE_KEY(iItemId) BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: unknown iProcessSuccess: \"", iProcessSuccess, "\"") BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: final:$", finalPendingTransactionValue) IF finalPendingTransactionValue >= 0 AND (finalPendingTransactionValue = 0 OR (finalPendingTransactionValue > 0 AND (USE_SERVER_TRANSACTIONS() OR NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue,FALSE,TRUE,FALSE)))) IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF /* IF GET_VALUE_OF_CURRENTLY_OWNED_CONTRABAND(iResultSlot) > 0 IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_SHOPS, "[CASH] NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED - basket") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF NETWORK_EARN_FROM_CONTRABAND(GET_VALUE_OF_CURRENTLY_OWNED_CONTRABAND(iResultSlot), GET_HASH_KEY(tl_15ContrabandName)) ENDIF */ IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_SHOPS, "[CASH] NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED - basket") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF NETWORK_BUY_CONTRABAND_MISSION(propval, iWarehouseID, GET_HASH_KEY(tl_15ContrabandName), FALSE, TRUE) CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: Bought contraband ", tl_15ContrabandName, " for $", finalPendingTransactionValue) IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF ELSE IF finalPendingTransactionValue < 0 IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_SHOPS, "[CASH] NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED - basket") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF NETWORK_BUY_PROPERTY(propval,GET_HASH_KEY(tl_15ContrabandName),FALSE,TRUE) CPRINTLN(DEBUG_INTERNET, " BUY_MP_CONTRABAND_FROM_SECUROSERV: Earning from proprety: $", -finalPendingTransactionValue) IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF ELSE PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE ENDIF ENDIF RETURN TRUE ENDFUNC FUNC BOOL SELL_MP_CONTRABAND_FROM_SECUROSERV(INT iWarehouseID) INT iResultSlot = GET_SAVE_SLOT_FOR_WAREHOUSE(iWarehouseID) TEXT_LABEL_15 tl_15ContrabandName = GET_WAREHOUSE_NAME(iWarehouseID) CPRINTLN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: trying to sell contraband for warehouse #", iWarehouseID, " \"", tl_15ContrabandName, "\", in slot ", iResultSlot) // Check that mission is available IF NOT GB_IS_BOSS_MISSION_AVAILABLE(PLAYER_ID(), FMMC_TYPE_GB_CONTRABAND_SELL, FALSE) CPRINTLN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: purchase failed, mission not available") RETURN FALSE ENDIF IF GB_IS_PLAYER_CRITICAL_TO_JOB(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: purchase failed, player is critical") RETURN FALSE ENDIF IF IS_WAREHOUSE_EMPTY(iWarehouseID) CPRINTLN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: warehouse is empty") RETURN FALSE ENDIF IF NOT GB_HAS_SELL_MISSION_TIMER_EXPIRED() CPRINTLN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: GB_HAS_SELL_MISSION_TIMER_EXPIRED false") RETURN FALSE ENDIF IF USE_SERVER_TRANSACTIONS() /* BuyContrabandMission – This is used to fill/set the CATEGORY_INVENTORY_CONTRABAND_MISSION It deducts money for the ‘purchasing’ of the mission Basket will be < CATEGORY_INVENTORY_CONTRABAND_MISSION, CATEGORY_CONTRABAND_MISSION, price> Validation must make sure the player owns the warehouse this CATEGORY_INVENTORY_CONTRABAND_MISSION is associated with */ SET_BIT(iBS, SEC_BS_PROCESSING_BASKET) iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_CONTRABAND_MISSION_KEY_FOR_CATALOGUE(FALSE, -1) INT iInventoryKey = GET_CONTRABAND_MISSION_INVENTORY_KEY_FOR_CATALOGUE(iResultSlot) #IF IS_DEBUG_BUILD TEXT_LABEL_15 tlLastClickedCONTRABANDIndex = tl_15ContrabandName IF IS_STRING_NULL_OR_EMPTY(tlLastClickedCONTRABANDIndex) CASSERTLN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: label for last clicked CONTRABAND index #", iWarehouseID, " is empty!") ELSE //CDEBUG1LN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: label for last clicked CONTRABAND index #", iWarehouseID, " is \"", tlLastClickedCONTRABANDIndex, "\" (iReplaceCONTRABAND: ", iReplaceCONTRABAND, ")") ENDIF #ENDIF INT iProcessSuccess = -1 BOOL bProcessingBasket = IS_BIT_SET(iBS, SEC_BS_PROCESSING_BASKET) /////////////////////////////////////////// /// TRANSACTION FOR CONTRABAND WHILE PROCESSING_SECUROSERVE_CONTRABAND_BASKET(iProcessSuccess, 0, iResultSlot, CATEGORY_INVENTORY_CONTRABAND_MISSION, NET_SHOP_ACTION_BUY_CONTRABAND_MISSION, iItemId, iInventoryKey, bProcessingBasket, iProcessingBasketStage) RENDER_SECUROSERVE() WAIT(0) ENDWHILE IF NOT bProcessingBasket CLEAR_BIT(iBS, SEC_BS_PROCESSING_BASKET) ENDIF SWITCH iProcessSuccess CASE 0 CWARNINGLN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: failed to process transaction") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE BREAK CASE 2 CPRINTLN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: success!!") BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: unknown iProcessSuccess: \"", iProcessSuccess, "\"") BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_SHOPS, "[CASH] NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED - basket") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF NETWORK_BUY_CONTRABAND_MISSION(0, iWarehouseID, GET_HASH_KEY(tl_15ContrabandName), FALSE, TRUE) CPRINTLN(DEBUG_INTERNET, " SELL_MP_CONTRABAND_FROM_SECUROSERV: Bought contraband ", tl_15ContrabandName) IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF RETURN TRUE ENDFUNC FUNC BOOL LAUNCH_MP_VEH_STEAL_FROM_SECUROSERV() CPRINTLN(DEBUG_INTERNET, " LAUNCH_MP_VEH_STEAL_FROM_SECUROSERV: trying to steal vehicle") // Check that mission is available IF NOT GB_IS_BOSS_MISSION_AVAILABLE(PLAYER_ID(), FMMC_TYPE_VEHICLE_EXPORT_BUY , FALSE) CPRINTLN(DEBUG_INTERNET, " LAUNCH_MP_VEH_STEAL_FROM_SECUROSERV: purchase failed, mission not available") RETURN FALSE ENDIF IF GB_IS_PLAYER_CRITICAL_TO_JOB(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " LAUNCH_MP_VEH_STEAL_FROM_SECUROSERV: purchase failed, player is critical") RETURN FALSE ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Returns a string to give mission unavailable feedback /// PARAMS: /// bBuyMission - Is this a buy or sell mission FUNC STRING GET_MISSION_UNAVAILABLE_REASON_STRING(BOOL bBuyMission, INT iWarehouseID) CDEBUG1LN(DEBUG_INTERNET, "Returning mission unavailable reason for: ", iMissionUnavailableReason, " buy mission? ", bBuyMission) IF NOT GB_HAS_SELL_MISSION_TIMER_EXPIRED() OR NOT GB_HAS_BUY_MISSION_TIMER_EXPIRED() RETURN "WH_MFREASON_9" ENDIF SWITCH iMissionUnavailableReason CASE GB_MU_REASON_ONLY_GANG_PLAYERS RETURN "WH_MFREASON_0" CASE GB_MU_REASON_SESSION_MISSION_ACTIVE RETURN "WH_MFREASON_1" CASE GB_MU_REASON_NO_OTHER_BOSSES RETURN "WH_MFREASON_2" CASE GB_MU_REASON_NOT_ENOUGH_GOONS RETURN "WH_MFREASON_3" CASE GB_MU_REASON_TOO_MANY_INSTANCES RETURN "WH_MFREASON_4" CASE GB_MU_REASON_BOSS_CRITICAL_TO_FME RETURN "WH_MFREASON_5" CASE GB_MU_REASON_GOON_CRITICAL_TO_FME RETURN "WH_MFREASON_6" CASE GB_MU_REASON_GOON_FM_EVENT_ACTIVE RETURN "WH_MFREASON_6" CASE GB_MU_REASON_INVITE_SENT RETURN "WH_MFREASON_8" CASE GB_MU_REASON_BOTH_SENT_BVB_INVITE RETURN "WH_MFREASON_8" CASE GB_MU_REASON_ON_COOLDOWN RETURN "WH_MFREASON_9" CASE GB_MU_REASON_UNSUITABLE_SESSION RETURN "WH_MFREASON_12" CASE GB_MU_REASON_GOON_GAMBLING RETURN "GENERAL_MLF_G5" CASE GB_MU_REASON_GOON_IS_ANIMAL RETURN "GENERAL_MLF_G2" ENDSWITCH //Critical to job so cant launch a mission IF GB_IS_PLAYER_CRITICAL_TO_JOB(PLAYER_ID()) OR NETWORK_IS_ACTIVITY_SESSION() RETURN "WH_MFREASON_10" ENDIF IF bBuyMission RETURN "WHOUSE_PURCHF" ENDIF IF IS_WAREHOUSE_EMPTY(iWarehouseID) RETURN "MP_WH_SELL_FE" ENDIF RETURN "MP_WH_SELL_F" ENDFUNC PROC RUN_INITIAL_CONTRABAND_SELL_CHECKS(INT iWarehouse) IF ARE_SELL_MISSIONS_DISABLED() START_OVERLAY_SCREEN("MP_WH_SELL", "WH_MFREASON_12", "WHOUSE_CONF", "", FALSE) //FAIL: Tuneables have disabled sell missions iCratesToSell = 0 iContrabandBuyerID = 0 SET_BIT(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) ELIF IS_WAREHOUSE_EMPTY(iWarehouse) //FAIL: Empty WH START_OVERLAY_SCREEN("MP_WH_SELL", "MP_WH_SELL_FE", "WHOUSE_CONF", "", FALSE) iCratesToSell = 0 iContrabandBuyerID = 0 SET_BIT(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) ELIF IS_CONTRABAND_SELL_COOLDOWN_ACTIVE(iWarehouse) //FAIL: Sell cooldown active OR NOT GB_HAS_SELL_MISSION_TIMER_EXPIRED() START_OVERLAY_SCREEN("CONTRA_SALEF", "WH_MFREASON_9", "WHOUSE_CONF", "", FALSE) iCratesToSell = 0 iContrabandBuyerID = 0 SET_BIT(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) ELIF NETWORK_IS_ACTIVITY_SESSION() //FAIL: Not in freemode START_OVERLAY_SCREEN("CONTRA_SALEF", "WH_MFREASON_10", "WHOUSE_CONF", "", FALSE) iCratesToSell = 0 iContrabandBuyerID = 0 SET_BIT(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) ELIF iCratesToSell >= g_sMPTunables.iexec_sell_3rd_brickade_threshold //PASS: Mission may require 3 vehicles SET_BIT(iBS, SEC_BS_SELL_CONTRABAND_CONFIRMED) START_OVERLAY_SCREEN("MP_WH_SALER", "MP_WH_SELL_W2", "WHOUSE_CONT", "WHOUSE_CANC", TRUE) ELIF iCratesToSell >= g_sMPTunables.iexec_sell_2nd_brickade_threshold //PASS: Mission may require 2 vehicles OR iCratesToSell >= g_sMPTunables.iexec_sell_2nd_cuban_threshold SET_BIT(iBS, SEC_BS_SELL_CONTRABAND_CONFIRMED) START_OVERLAY_SCREEN("MP_WH_SALER", "MP_WH_SELL_W", "WHOUSE_CONT", "WHOUSE_CANC", TRUE) ELIF iContrabandBuyerID = ciContraSellMissionBuyer_4 //PASS: Special item confirm SET_BIT(iBS, SEC_BS_SELL_CONTRABAND_CONFIRMED) STRING sOverlayTitle = "MP_WH_SELLS" //Plural STRING sOverlayDesc = "MP_WH_SELL_D" IF iCratesToSell = 1 sOverlayTitle = "MP_WH_SELLSS" //Single crate sOverlayDesc = "MP_WH_SELL_DS" ENDIF START_OVERLAY_SCREEN(sOverlayTitle, sOverlayDesc, "WHOUSE_CONF", "WHOUSE_CANC", TRUE) ELSE //PASS: Start mission confirm SET_BIT(iBS, SEC_BS_SELL_CONTRABAND_CONFIRMED) #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_EXEC_CARGO) 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_EXEC_CARGO, TRUE) ENDIF ENDIF #ENDIF START_OVERLAY_SCREEN("MP_WH_SELL", "MP_WH_SELL_C", "WHOUSE_CONF", "WHOUSE_CANC", TRUE) ENDIF currentButtonPressStage = inputConsumed_0 iMissionUnavailableReason = -1 ENDPROC /// PURPOSE: /// Prints a ticker message each time the player purchases a new warehouse of a size they haven't previously purchased PROC RUN_CHECK_FOR_NEW_ITEM_TICKER(INT iWarehouse) EWarehouseSize eWHSize = GET_WAREHOUSE_SIZE(iWarehouse) STRING stickerString = "" CDEBUG1LN(DEBUG_SAFEHOUSE, "RUN_CHECK_FOR_NEW_ITEM_TICKER: Checking for WH: ", iWarehouse, " Do we own one of this size: ", DOES_LOCAL_PLAYER_OWN_WAREHOUSE_OF_SIZE(eWHSize, iWarehouse)) IF NOT DOES_LOCAL_PLAYER_OWN_WAREHOUSE_OF_SIZE(eWHSize, iWarehouse) INT iStat = GET_MP_INT_CHARACTER_STAT(MP_STAT_GB_SYSTEM_HELP_TEXT2) INT iBitToCheck = 0 IF eWHSize = eWarehouseSmall iBitToCheck = biFmGb_Help2_HasCashNoOffice0 stickerString = "WHPURCH_TICK_1" ELIF eWHSize = eWarehouseMedium iBitToCheck = biFmGb_Help2_HasCashNoOffice1 stickerString = "WHPURCH_TICK_2" ELSE iBitToCheck = biFmGb_Help2_HasCashNoOffice2 stickerString = "WHPURCH_TICK_3" ENDIF IF NOT IS_BIT_SET(iStat, iBitToCheck) PRINT_TICKER(stickerString) SET_BIT(iStat, iBitToCheck) SET_MP_INT_CHARACTER_STAT(MP_STAT_GB_SYSTEM_HELP_TEXT2, iStat) ENDIF ENDIF ENDPROC FUNC INT CALCULATE_CONTRABAND_CRATES_TO_SELL(INT iSellButtonSelected) INT iamountStored = GET_CONTRABAND_UNITS_TOTAL_FOR_WAREHOUSE(iCurrentlyInsideWarehouse) INT iSpecialCount = GET_COUNT_OF_SPECIAL_ITEMS_IN_WAREHOUSE(iCurrentlyInsideWarehouse) INT NonSpecialContraTotal = iamountStored - iSpecialCount IF iSellButtonSelected = 1 RETURN ROUND(NonSpecialContraTotal * (TO_FLOAT(g_sMPTunables.iEXEC_SELL_BUYER1_AMOUNT) / 100)) ELIF iSellButtonSelected = 2 RETURN ROUND(NonSpecialContraTotal * (TO_FLOAT(g_sMPTunables.iEXEC_SELL_BUYER2_AMOUNT) / 100)) ELIF iSellButtonSelected = 3 RETURN ROUND(NonSpecialContraTotal * (TO_FLOAT(g_sMPTunables.iEXEC_SELL_BUYER3_AMOUNT) / 100)) ELIF iSellButtonSelected = 4 RETURN iSpecialCount ENDIF RETURN 0 ENDFUNC /// PURPOSE: /// Handles inputs for the smaller version of the SecuroServ app used inside warehouses PROC CHECK_BUTTON_PRESS_FOR_WAREHOUSE_APP() IF currentButtonPressStage = inputConsumed_0 OR currentButtonPressStage = inputConsumed_1 ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_SELECTION") currentSelectionReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() currentButtonPressStage = inputConsumed_0 ENDIF ENDIF IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) PLAY_SOUND_FRONTEND(-1, "Mouse_Click", "GTAO_Exec_SecuroServ_Warehouse_PC_Sounds") ENDIF IF (currentButtonPressStage = inputConsumed_0) AND IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentSelectionReturnIndex) INT iButtonIndex = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentSelectionReturnIndex) IF iButtonIndex > 0 AND iButtonIndex < 5 iContrabandBuyerID = iButtonIndex iCratesToSell = CALCULATE_CONTRABAND_CRATES_TO_SELL(iButtonIndex) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS_FOR_WAREHOUSE_APP [MAP] Sell Contraband in \"", DEBUG_GET_STRING_FOR_WAREHOUSE(iCurrentlyInsideWarehouse), "\" $", GET_WAREHOUSE_COST(iCurrentlyInsideWarehouse), "...") currentButtonPressStage = inputConsumed_SELL PLAY_SOUND_FRONTEND(-1, "Sell", "GTAO_Exec_SecuroServ_Warehouse_PC_Sounds") ELIF iButtonIndex = 5 CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS_FOR_WAREHOUSE_APP [MAP] Sell Contraband in \"", DEBUG_GET_STRING_FOR_WAREHOUSE(iCurrentlyInsideWarehouse), "\" $", GET_WAREHOUSE_COST(iCurrentlyInsideWarehouse), "...") IF IS_BIT_SET(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) currentButtonPressStage = inputConsumed_1 CLEAR_BIT(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) CLOSE_OVERLAY_SCREEN() PLAY_SOUND_FRONTEND(-1, "Error", "GTAO_Exec_SecuroServ_Warehouse_PC_Sounds") ELSE currentButtonPressStage = inputConsumed_CONFIRM PLAY_SOUND_FRONTEND(-1, "Confirm", "GTAO_Exec_SecuroServ_Warehouse_PC_Sounds") ENDIF ELIF iButtonIndex = 6 CLOSE_OVERLAY_SCREEN() PLAY_SOUND_FRONTEND(-1, "Cancel", "GTAO_Exec_SecuroServ_Warehouse_PC_Sounds") iCratesToSell = 0 iContrabandBuyerID = 0 CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS_FOR_WAREHOUSE_APP overlay screen cancel button pressed ") ELSE CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS_FOR_WAREHOUSE_APP unknown button index ", iButtonIndex, ", warehouseID: ", iCurrentlyInsideWarehouse) ENDIF ENDIF IF currentButtonPressStage = inputConsumed_SELL RUN_INITIAL_CONTRABAND_SELL_CHECKS(iCurrentlyInsideWarehouse) ENDIF IF currentButtonPressStage = inputConsumed_CONFIRM IF NOT SELL_MP_CONTRABAND_FROM_SECUROSERV(iCurrentlyInsideWarehouse) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Cannot launch sell mission for warehouse: ", iCurrentlyInsideWarehouse) iCratesToSell = 0 iContrabandBuyerID = 0 iMissionUnavailableReason = GB_GET_BOSS_MISSION_UNAVAILABLE_REASON(PLAYER_ID(), FMMC_TYPE_GB_CONTRABAND_SELL, FALSE) STRING sSellFailReason = GET_MISSION_UNAVAILABLE_REASON_STRING(FALSE, iCurrentlyInsideWarehouse) START_OVERLAY_SCREEN("MP_WH_SELL", sSellFailReason, "WHOUSE_CONF", "", FALSE) PLAY_SOUND_FRONTEND(-1, "Error", "GTAO_Exec_SecuroServ_Warehouse_PC_Sounds") SET_BIT(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) ELSE CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Requesting contraband sell mission for warehouse: ", iCurrentlyInsideWarehouse) GB_BOSS_REQUEST_CONTRABAND_MISSION_LAUNCH_FROM_SERVER(FMMC_TYPE_GB_CONTRABAND_SELL, iCurrentlyInsideWarehouse) CLEAR_BIT(g_SimpleInteriorData.iFifthBS, BS5_SIMPLE_INTERIOR_LAUNCHED_CARGO_MISSION_FROM_HACKER_TRUCK) g_iContraSellMissionCratesToSell = iCratesToSell g_iContraSellMissionBuyerID = iContrabandBuyerID g_bLaunchedMissionFrmLaptop = TRUE CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Launching contraband sell mission for: ", g_iContraSellMissionCratesToSell, " crates to buyer: ", g_iContraSellMissionBuyerID) IF IS_PLAYER_IN_ARCADE_PROPERTY(PLAYER_ID()) g_sBusAppManagement.iMissionLaunched = FMMC_TYPE_GB_CONTRABAND_SELL ENDIF // Exit CLEANUP_SECUROSERVE() ENDIF currentButtonPressStage = inputConsumed_1 ENDIF ENDPROC /// PURPOSE: /// Deals with any input on the original warehouse pages PROC HANDLE_SECURO_WAREHOUSE_INPUTS(enumItemConsumed &ecurrentButtonPressStage) // Buy Warehouse IF (eCurrentButtonPressStage = inputConsumed_BUY_WAREHOUSE) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Requesting warehouse purchase. Runing confirm screen overlay") START_OVERLAY_SCREEN("WHOUSE_PURCH", "WHOUSE_PURCHQ", "WHOUSE_CONF", "WHOUSE_CANC", TRUE) eCurrentButtonPressStage = inputConsumed_0 iMissionUnavailableReason = -1 SET_BIT(iBS, SEC_BS_BUY_WAREHOUSE_CONFIRMED) ENDIF // Run the confirm overlay for the purchase of contraband. IF (eCurrentButtonPressStage = inputConsumed_BUY_SMALL_SHIPMENT) OR (eCurrentButtonPressStage = inputConsumed_BUY_MEDIUM_SHIPMENT) OR (eCurrentButtonPressStage = inputConsumed_BUY_LARGE_SHIPMENT) IF IS_CONTRABAND_BUY_COOLDOWN_ACTIVE(iCurrentSelectedWarehouse) START_OVERLAY_SCREEN("CONTRA_PURFA", "WH_MFREASON_11", "WHOUSE_CONF", "", FALSE) SET_BIT(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) ELSE CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Requesting contraband buy mission for warehouse. Runing confirm screen overlay") TEXT_LABEL_15 tlContraSize tlContraSize = BUILD_BUY_MISSION_CONFIRM_STRING(securoContraType, eCurrentSelectedShipmentSize, IS_SPECIAL_CONTRABAND_ITEM_ACTIVE()) START_OVERLAY_SCREEN("WHOUSE_SHI", tlContraSize, "WHOUSE_CONF", "WHOUSE_CANC", TRUE) ENDIF eCurrentButtonPressStage = inputConsumed_0 ENDIF //Confirm purchase of warehouse or contraband IF (eCurrentButtonPressStage = inputConsumed_CONFIRM) //Buy a warehouse IF IS_BIT_SET(iBS, SEC_BS_BUY_WAREHOUSE_CONFIRMED) CLOSE_OVERLAY_SCREEN() INT iWarehouseID = iCurrentSelectedWarehouse CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Buying \"", DEBUG_GET_STRING_FOR_WAREHOUSE(iWarehouseID), "\" $", GET_WAREHOUSE_COST(iWarehouseID)) INT iResultSlot = -1 IF BUY_MP_WAREHOUSE_FROM_SECUROSERV(iWarehouseID, iResultSlot) // Buy warehouse. START_OVERLAY_SCREEN("WHOUSE_PURCH", "WHOUSE_PURCHD", "WHOUSE_CONF", "", TRUE) // If warehouse is successfully purchased then resend the data for that warehouse now with the 'isOwned' param changed. INT iOldWarehouse = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(iResultSlot) IF (iOldWarehouse <= 0) SET_WAREHOUSE_AS_PURCHASED(iWarehouseID) POPULATE_MP_SECUROSERV_SITE_PIN(iWarehouseID) REQUEST_NET_SPEND_COMMON_DATA_UPDATE() ELSE TRADE_IN_WAREHOUSE(iOldWarehouse, iWarehouseID) POPULATE_MP_SECUROSERV_SITE_PIN(iOldWarehouse) POPULATE_MP_SECUROSERV_SITE_PIN(iWarehouseID) ENDIF iJustPurchasedWHID = iWarehouseID SET_BIT(iBS, SEC_BS_SHOW_CASH_CHANGE_HUD) SET_BIT(iBS, SEC_BS_JUST_PURCHASED_WAREHOUSE) SET_BIT(iBS, SEC_BS_DISPLAYING_PURCHASE_WH_TUT) SET_BIT(iBS, SEC_BS_PROPERTY_PURCHASED_THIS_RUN) RUN_CHECK_FOR_NEW_ITEM_TICKER(iWarehouseID) ELSE // Buy failed STRING sFailReason = "WHOUSE_PURCHF" IF IS_BIT_SET(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) sFailReason = "WHSE_PURCHF_NM" ELIF g_sMPTunables.bexec_disable_warehouse_purchase sFailReason = "WHSE_PURCHF_TU" ENDIF START_OVERLAY_SCREEN("WHOUSE_PURFA", sFailReason, "WHOUSE_CONF", "", FALSE) ENDIF iCurrentSelectedWarehouse = -1 eCurrentSelectedShipmentSize = CONTRABAND_INVALID eCurrentButtonPressStage = inputConsumed_1 SET_BIT(iBS, SEC_BS_PROCESSING_WH_BASKET_DONE) CLEAR_BIT(iBS, SEC_BS_BUY_WAREHOUSE_CONFIRMED) ELIF IS_BIT_SET(iBS, SEC_BS_SELL_CONTRABAND_CONFIRMED) IF SELL_MP_CONTRABAND_FROM_SECUROSERV(iCurrentSelectedWarehouse) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Requesting contraband sell mission for warehouse: ", iCurrentSelectedWarehouse) g_bSecuroQuickExitOfficeChair = TRUE GB_BOSS_REQUEST_CONTRABAND_MISSION_LAUNCH_FROM_SERVER(FMMC_TYPE_GB_CONTRABAND_SELL, iCurrentSelectedWarehouse) CLEAR_BIT(g_SimpleInteriorData.iFifthBS, BS5_SIMPLE_INTERIOR_LAUNCHED_CARGO_MISSION_FROM_HACKER_TRUCK) g_iContraSellMissionCratesToSell = GET_CONTRABAND_UNITS_TOTAL_FOR_WAREHOUSE(iCurrentSelectedWarehouse) g_iContraSellMissionBuyerID = ciContraSellMissionBuyer_1 IF IS_PLAYER_IN_ARCADE_PROPERTY(PLAYER_ID()) g_sBusAppManagement.iMissionLaunched = FMMC_TYPE_GB_CONTRABAND_SELL ENDIF CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Launching contraband sell mission for: ", g_iContraSellMissionCratesToSell, " crates to buyer: ", g_iContraSellMissionBuyerID) // Exit CLEANUP_SECUROSERVE(TRUE) ELSE PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Cannot launch sell mission for warehouse: ", iCurrentSelectedWarehouse) iMissionUnavailableReason = GB_GET_BOSS_MISSION_UNAVAILABLE_REASON(PLAYER_ID(), FMMC_TYPE_GB_CONTRABAND_SELL, FALSE) STRING sSellFailReason = GET_MISSION_UNAVAILABLE_REASON_STRING(FALSE, iCurrentSelectedWarehouse) START_OVERLAY_SCREEN("MP_WH_SELL", sSellFailReason, "WHOUSE_CONF", "", FALSE) SET_BIT(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) iCurrentSelectedWarehouse = -1 eCurrentButtonPressStage = inputConsumed_1 CLEAR_BIT(iBS, SEC_BS_SELL_CONTRABAND_CONFIRMED) ENDIF eCurrentButtonPressStage = inputConsumed_1 //Else buy contraband for a warehouse ELSE INT iWarehouseID = iCurrentSelectedWarehouse IF iWarehouseID > ciW_Invalid AND BUY_MP_CONTRABAND_FROM_SECUROSERV(iWarehouseID, eCurrentSelectedShipmentSize) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Buying shipment of ", eCurrentSelectedShipmentSize, " units from \"", DEBUG_GET_STRING_FOR_WAREHOUSE(iWarehouseID), "\" $", GET_CONTRABAND_SHIPMENT_COST(eCurrentSelectedShipmentSize)) // Start the mission - bit of a fudge for now we should probably add a central controller for this? BOOL bActivateSpecialItemMission = FALSE //Only start a special item mission if the user clicked the 1 crate option g_bSecuroQuickExitOfficeChair = TRUE IF IS_BIT_SET(iBS2, SEC_BS2_SPECIAL_ITEM) AND eCurrentSelectedShipmentSize = CONTRABAND_SMALL bActivateSpecialItemMission = TRUE ENDIF INT iFMMCTypeChosen CLEAR_BIT(g_SimpleInteriorData.iFifthBS, BS5_SIMPLE_INTERIOR_LAUNCHED_CARGO_MISSION_FROM_HACKER_TRUCK) iFMMCTypeChosen = REQUEST_LAUNCH_ANY_SOURCE_CARGO_MISSION(iWarehouseID, eCurrentSelectedShipmentSize, securoContraType, bActivateSpecialItemMission) IF IS_PLAYER_IN_ARCADE_PROPERTY(PLAYER_ID()) g_sBusAppManagement.iMissionLaunched = iFMMCTypeChosen ENDIF SET_BIT(iBS, SEC_BS_SHOW_CASH_CHANGE_HUD) //Exit IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_START_MIS) AND NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_PLAYING_TUTORIAL) iTutorialDialogueID = 4 SET_BIT(iBS, SEC_BS_DELAY_APP_EXIT_FOR_CONVERSATION) ELSE CLEANUP_SECUROSERVE(TRUE) ENDIF ELSE // Purchase Failed STRING sFailReason = GET_MISSION_UNAVAILABLE_REASON_STRING(TRUE, iWarehouseID) START_OVERLAY_SCREEN("WHOUSE_PURFA", sFailReason, "WHOUSE_CONF", "", FALSE) SET_BIT(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) ENDIF iCurrentSelectedWarehouse = -1 eCurrentButtonPressStage = inputConsumed_1 ENDIF ENDIF IF(eCurrentButtonPressStage = inputConsumed_SELL) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Requesting warehouse purchase. Runing confirm screen overlay") RUN_INITIAL_CONTRABAND_SELL_CHECKS(iCurrentSelectedWarehouse) ENDIF ENDPROC FUNC BOOL LAUNCH_IE_STEAL_MISSION(SEC_OVERLAY_PROMPT &iPrompt) IF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdIEgarageData.iVehicleTotal >= ciMAX_IE_OWNED_VEHICLES iPrompt = SEC_OVERLAY_WHOUSE_FULL RETURN FALSE ENDIF INT iFailReason = GB_GET_BOSS_MISSION_UNAVAILABLE_REASON(PLAYER_ID(), FMMC_TYPE_VEHICLE_EXPORT_BUY, FALSE) IF iFailReason = GB_MU_REASON_GOON_IS_ANIMAL iPrompt = SEC_OVERLAY_GOON_ANIMAL RETURN FALSE ELIF iFailReason = GB_MU_REASON_GOON_GAMBLING iPrompt = SEC_OVERLAY_GOON_GAMBLING RETURN FALSE ENDIF //Check we are about to launch a mission with a valid vehicle that we don't own CHECK_IE_VEH_STEAL_LIST_FOR_OWNED_VEHICLES() IF GET_ACTIVE_IE_STEAL_MISSION_VEHICLE() = IE_VEH_INVALID //Shuffle the list SHUFFLE_IE_VEHICLE_LIST_FOR_STEAL_MISSIONS() //Make sure we don't start at a point in the list with an empty slot CHECK_IE_VEH_STEAL_LIST_FOR_OWNED_VEHICLES(TRUE) ENDIF CDEBUG1LN(DEBUG_INTERNET, "[Mission_Launch] LAUNCH_IE_STEAL_MISSION Requesting Mission: FMMC_TYPE_VEHICLE_EXPORT_BUY", " With vehicle: ", GET_STRING_FROM_IE_VEHICLE_ENUM(GET_ACTIVE_IE_STEAL_MISSION_VEHICLE())) IF GET_ACTIVE_IE_STEAL_MISSION_VEHICLE() != IE_VEH_INVALID AND LAUNCH_MP_VEH_STEAL_FROM_SECUROSERV() AND IE_DELIVERY_ACTIVATE_DROPOFF_OF_TYPE_FOR_GANG(VEHICLE_EXPORT_DROPOFF_GB_WAREHOUSE) //Get the mission vehicle IE_VEHICLE_ENUM eMissionVeh = GET_ACTIVE_IE_STEAL_MISSION_VEHICLE() //Launch the mission GB_BOSS_REQUEST_VEHICLE_EXPORT_MISSION_LAUNCH_FROM_SERVER(FMMC_TYPE_VEHICLE_EXPORT_BUY, eMissionVeh, IE_VEH_INVALID, IE_VEH_INVALID, IE_VEH_INVALID) //Set the active vehicle for the next steal mission INCREMENT_ACTIVE_IE_STEAL_MISSION_VEHICLE() //Quick exit the office chair g_bSecuroQuickExitOfficeChair = TRUE //Clear telemetry CLEAR_BIT(g_SimpleInteriorData.iFifthBS, BS5_SIMPLE_INTERIOR_LAUNCHED_VEH_EXP_MISSION_FROM_HACKER_TRUCK) IF IS_PLAYER_IN_ARCADE_PROPERTY(PLAYER_ID()) g_sBusAppManagement.iMissionLaunched = FMMC_TYPE_VEHICLE_EXPORT_BUY ENDIF RETURN TRUE ELSE #IF IS_DEBUG_BUILD IF GET_ACTIVE_IE_STEAL_MISSION_VEHICLE() = IE_VEH_INVALID CASSERTLN(DEBUG_INTERNET, " LAUNCH_IE_STEAL_MISSION Still trying to launch a mission with an invalid vehicle. This will not work!") ENDIF #ENDIF CDEBUG1LN(DEBUG_INTERNET, "[Mission_Launch] LAUNCH_IE_STEAL_MISSION Couldn't activate warehouse dropoff!") ENDIF iPrompt = SEC_OVERLAY_NO_VEH_FOUND RETURN FALSE ENDFUNC FUNC INT GET_IE_WH_PURCHASE_COST(IMPORT_EXPORT_GARAGES eVehicleWH, IE_GARAGE_INTERIORS eWarehouseInterior, BOOL bRenovating) INT iTotalCost BOOL bPurchasingvehicleWH = (eVehicleWH != GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID())) BOOL bTradingInExisitingWH = (DOES_PLAYER_OWN_AN_IE_GARAGE(PLAYER_ID()) AND bPurchasingvehicleWH) IF bPurchasingvehicleWH OR bTradingInExisitingWH iTotalCost += GET_IE_GARAGE_COST(eVehicleWH) IF bTradingInExisitingWH iTotalCost -= GET_IE_GARAGE_TRADE_PRICE(GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID())) ENDIF ENDIF //We always need to add the cost of a new interior iTotalCost += GET_IE_GARAGE_INTERIOR_COST(eWarehouseInterior, bRenovating) CPRINTLN(DEBUG_INTERNET, " GET_IE_WH_PURCHASE_COST: Total cost: ", iTotalCost, " bPurchasingvehicleWH ",bPurchasingvehicleWH, " bTradingInExisitingWH ", bTradingInExisitingWH) RETURN iTotalCost ENDFUNC FUNC BOOL CAN_PLAYER_AFFORD_IE_WH_PURCHASE(IMPORT_EXPORT_GARAGES eVehicleWH, IE_GARAGE_INTERIORS eWarehouseInterior, BOOL bRenovating) INT iTotalCost = GET_IE_WH_PURCHASE_COST(eVehicleWH, eWarehouseInterior, bRenovating) IF iTotalCost > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iTotalCost, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_AFFORD_IE_WH_PURCHASE: purchase failed, player doesn't have sufficient cash. Total cost: ", iTotalCost) INT iItemHash = GET_HASH_KEY(GET_IE_GARAGE_NAME_LABEL(eVehicleWH)) TRIGGER_BROWSER_NAG_SCREEN(iItemHash, iTotalCost) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") RETURN FALSE ENDIF CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_AFFORD_IE_WH_PURCHASE: purchase can go ahead player has sufficient cash. Total cost: ", iTotalCost) RETURN TRUE ENDFUNC /// PURPOSE: /// Deals with any input on the IE vehicle warehouse pages PROC HANDLE_SECURO_IE_WAREHOUSE_INPUTS(enumItemConsumed &eCurrentButtonPressStage) INT iIEWarehouseID = ((iCurrentSelectedWarehouse - iWarehouseOffset) - 1) INT iCollectedVehCount = GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdIEgarageData.iVehicleTotal IMPORT_EXPORT_GARAGES eSelectedWH = INT_TO_ENUM(IMPORT_EXPORT_GARAGES, iIEWarehouseID) IMPORT_EXPORT_GARAGES eOwnedWH = GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID()) IE_GARAGE_INTERIORS eOwnedWHInterior = GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdIEgarageData.eWarehouseStyle STRING sFailReason SWITCH eCurrentButtonPressStage //Steal vehicle buttons on the map and stats page CASE inputConsumed_STEAL_VEHICLE CASE inputConsumed_MAP_STEAL_VEHICLE IF NOT GB_HAS_IE_MISSION_COOLDOWN_TIMER_EXPIRED(VEV_EYE_IN_THE_SKY) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_IE_WAREHOUSE_INPUTS Requesting IE steal mission. Cooldown timer stilll running. Runing confirm screen overlay") START_OVERLAY_SCREEN("SEC_VEH_STEAL", "SEC_V_STEAL_F", "WHOUSE_CONF", "", FALSE) CLEAR_BIT(iBS, SEC_BS_LAUNCH_STEAL_MIS_SELECTED) ELSE CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_IE_WAREHOUSE_INPUTS Requesting IE steal mission. Runing confirm screen overlay") START_OVERLAY_SCREEN("SEC_VEH_STEAL", "SEC_VEH_STEALQ", "WHOUSE_CONF", "WHOUSE_CANC", TRUE) SET_BIT(iBS, SEC_BS_LAUNCH_STEAL_MIS_SELECTED) ENDIF eCurrentButtonPressStage = inputConsumed_1 CLEAR_BIT(iBS, SEC_BS_PRUCHASE_IE_WH_SELECTED) BREAK //Cancel button on the stats page overlay CASE inputConsumed_VEH_STAT_CANCEL CLEAR_BIT(iBS, SEC_BS_LAUNCH_STEAL_MIS_SELECTED) CLEAR_BIT(iBS, SEC_BS_PRUCHASE_IE_WH_SELECTED) eCurrentButtonPressStage = inputConsumed_1 BREAK //Buy vehicle warehouse button CASE inputConsumed_BUY_VEH_WH eCurrentButtonPressStage = inputConsumed_1 CLEAR_BIT(iBS, SEC_BS_LAUNCH_STEAL_MIS_SELECTED) SET_BIT(iBS, SEC_BS_PRUCHASE_IE_WH_SELECTED) IF eSelectedWH = eOwnedWH CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_IE_WAREHOUSE_INPUTS Requesting IE warehouse interior purchase. Runing confirm screen overlay") START_OVERLAY_SCREEN("IEWHINT_PURCH", "IEWHINT_PURCHQ", "WHOUSE_CONF", "WHOUSE_CANC", TRUE) ELIF DOES_PLAYER_OWN_AN_IE_GARAGE(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_IE_WAREHOUSE_INPUTS Requesting IE warehouse trade. Runing confirm trade screen overlay") START_OVERLAY_SCREEN("IEWHOUSE_PURCH", "IE_WH_TRADE", "WHOUSE_CONF", "WHOUSE_CANC", TRUE, FALSE, GET_IE_GARAGE_TRADE_PRICE(GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID()))) ELSE CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_IE_WAREHOUSE_INPUTS Requesting IE warehouse purchase. Runing confirm screen overlay") START_OVERLAY_SCREEN("IEWHOUSE_PURCH", "IEWHOUSE_PURCHQ", "WHOUSE_CONF", "WHOUSE_CANC", TRUE) ENDIF BREAK //Confirm button on the map page overlay screen CASE inputConsumed_VEH_MAP_ACCEPT CASE inputConsumed_VEH_STAT_ACCEPT IF IS_BIT_SET(iBS, SEC_BS_PRUCHASE_IE_WH_SELECTED) IF NOT CAN_PLAYER_AFFORD_IE_WH_PURCHASE(eSelectedWH, eSelectedInterior, (eSelectedWH = eOwnedWH)) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_IE_WAREHOUSE_INPUTS CAN_PLAYER_AFFORD_IE_WH_PURCHASE returned false.") IF eSelectedWH = eOwnedWH START_OVERLAY_SCREEN("WHOUSE_PURFA", "IEWH_PURCHF_NM", "WHOUSE_CONF", "", FALSE) ELSE START_OVERLAY_SCREEN("WHOUSE_PURFA", "WHSE_PURCHF_NM", "WHOUSE_CONF", "", FALSE) ENDIF SET_BIT(iBS, SEC_BS_IE_TRANSACTION_FAILED) ELIF eSelectedWH = eOwnedWH //Selecting a new interior IF eOwnedWHInterior = eSelectedInterior //We already own this interior CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_IE_WAREHOUSE_INPUTS Requested purchase of an interior we already own") START_OVERLAY_SCREEN("WHOUSE_PURFA", "IEWH_INT_PURCHF", "WHOUSE_CONF", "", FALSE) ELIF BUY_MP_IE_WAREHOUSE_INTERIOR(eSelectedWH, eSelectedInterior) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_IE_WAREHOUSE_INPUTS Completed purchase of IE garage interior rennovation to: ", eSelectedInterior, ". Did not select the underground garage for purchase") START_OVERLAY_SCREEN("IEWHOUSE_PURCH", "IEWHINT_PURCHD", "WHOUSE_CONF", "", TRUE) //Set the interior variation SET_OWND_IE_WAREHOUSE_INTERIOR(eSelectedInterior) eSelectedInterior = IE_INTERIOR_BASIC //Send the data back to SF POPULATE_MP_SECUROSERV_SITE_VEH_WH_PIN(eSelectedWH, iCollectedVehCount) //Request a save SET_BIT(iBS, SEC_BS_SHOW_CASH_CHANGE_HUD) SET_BIT(iBS, SEC_BS_PROPERTY_PURCHASED_THIS_RUN) ELSE // Buy failed sFailReason = "WHOUSE_PURCHF" IF IS_BIT_SET(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) sFailReason = "WHSE_PURCHF_NM" ENDIF START_OVERLAY_SCREEN("WHOUSE_PURFA", sFailReason, "WHOUSE_CONF", "", FALSE) SET_BIT(iBS, SEC_BS_IE_TRANSACTION_FAILED) ENDIF ELIF BUY_MP_IE_WAREHOUSE_FROM_SECUROSERV(eSelectedWH) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_IE_WAREHOUSE_INPUTS Completed purchase of IE garage: ", iIEWarehouseID, " with interior: ", eSelectedInterior) START_OVERLAY_SCREEN("IEWHOUSE_PURCH", "IEWHOUSE_PURCHD", "WHOUSE_CONF", "", TRUE) IF DOES_PLAYER_OWN_AN_IE_GARAGE(PLAYER_ID()) //Trade our existing IE warehouse SET_IE_GARAGE_AS_OWNED(INT_TO_ENUM(IMPORT_EXPORT_GARAGES, iIEWarehouseID)) SET_OWND_IE_WAREHOUSE_INTERIOR(eSelectedInterior) POPULATE_MP_SECUROSERV_SITE_VEH_WH_PIN(eOwnedWH, iCollectedVehCount) POPULATE_MP_SECUROSERV_SITE_VEH_WH_PIN(eSelectedWH, iCollectedVehCount) ELSE //Buying our first IE warehouse SET_IE_GARAGE_AS_OWNED(INT_TO_ENUM(IMPORT_EXPORT_GARAGES, iIEWarehouseID)) SET_OWND_IE_WAREHOUSE_INTERIOR(eSelectedInterior) POPULATE_MP_SECUROSERV_SITE_VEH_WH_PIN(eSelectedWH, iCollectedVehCount) REQUEST_NET_SPEND_COMMON_DATA_UPDATE() ENDIF //Set the underground garage as owned SET_IE_WAREHOUSE_UNDERGROUND_GAR_AS_OWNED() eSelectedInterior = IE_INTERIOR_BASIC //Request a save SET_BIT(iBS, SEC_BS_PROPERTY_PURCHASED_THIS_RUN) SET_BIT(iBS, SEC_BS_SHOW_CASH_CHANGE_HUD) ELSE // Buy failed sFailReason = "WHOUSE_PURCHF" IF IS_BIT_SET(iBS, SEC_BS_PURCHASE_FAILED_NO_MONEY) sFailReason = "WHSE_PURCHF_NM" // ELIF g_sMPTunables.bexec_disable_warehouse_purchase // sFailReason = "WHSE_PURCHF_TU" ENDIF START_OVERLAY_SCREEN("WHOUSE_PURFA", sFailReason, "WHOUSE_CONF", "", FALSE) SET_BIT(iBS, SEC_BS_IE_TRANSACTION_FAILED) ENDIF CLEAR_BIT(iBS, SEC_BS_PRUCHASE_IE_WH_SELECTED) ELIF IS_BIT_SET(iBS, SEC_BS_LAUNCH_STEAL_MIS_SELECTED) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_IE_WAREHOUSE_INPUTS Requesting steal vehicle mission launch") SEC_OVERLAY_PROMPT iPrompt IF LAUNCH_IE_STEAL_MISSION(iPrompt) INCREMENT_TOTAL_NUM_STEAL_MISSIONS_STARTED() SET_SHARD_SHOULD_BE_HELD_UP_FOR_OFFICE_SEAT_ANIM(TRUE) SET_PLAYER_IS_ON_IE_VEHICLE_STEAL_MISSION(TRUE) CLEANUP_SECUROSERVE(TRUE) ELSE PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") START_OVERLAY_SCREEN("SEC_VEH_STEAL", GET_SEC_OVERLAY_PROMPT(iPrompt), "WHOUSE_CONF", "", FALSE) ENDIF CLEAR_BIT(iBS, SEC_BS_LAUNCH_STEAL_MIS_SELECTED) ENDIF eCurrentButtonPressStage = inputConsumed_1 BREAK //Cancel button on the map page confirm screen overlay CASE inputConsumed_VEH_MAP_CANCEL CLEAR_BIT(iBS, SEC_BS_LAUNCH_STEAL_MIS_SELECTED) CLEAR_BIT(iBS, SEC_BS_PRUCHASE_IE_WH_SELECTED) eCurrentButtonPressStage = inputConsumed_1 BREAK ENDSWITCH ENDPROC PROC HANDLE_SECURO_SVM_INPUTS(enumItemConsumed &eCurrentButtonPressStage) INT iCountOfMissionsToUnock = (4 * (iSVMToLaunch + 1)) BOOL bMissionUnlocked = FALSE SWITCH eCurrentButtonPressStage //Confirm button on the map page overlay screen CASE inputConsumed_SVM_MAP_ACCEPT IF iSVMToLaunch < 0 OR iSVMToLaunch > ciMAX_AT_FLOW_MISSIONS IF NOT IS_BIT_SET(iBS, SEC_BS_DISPLAY_OVERLAY_WARNING) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_SVM_INPUTS Requesting IE SVM mission (2) with invalid ID: ", iSVMToLaunch, ". Runing confirm screen overlay") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") START_OVERLAY_SCREEN("SVM_MIS_TI", "SVM_MIS_FL", "WHOUSE_CONF", "", FALSE) CDEBUG1LN(DEBUG_INTERNET, "HANDLE_SECURO_SVM_INPUTS - inputConsumed_SVM_MAP_ACCEPT: Setting bit SVM_BS_DISPLAY_OVERLAY_WARNING") SET_BIT(iBS, SEC_BS_DISPLAY_OVERLAY_WARNING) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_SVM_INPUTS Confirmed request launching SVM mission: ", iSVMToLaunch) g_bLaunchedMissionFrmLaptop = TRUE SVM_FLOW_LAUNCH_NEXT_AVAILABLE_MISSION(g_sTransitionSessionData.ciCam, iSVMToLaunch, ciFLOW_MISSION_TYPE_SVM) CLEANUP_SECUROSERVE() ENDIF BREAK //Cancel button on the map page confirm screen overlay CASE inputConsumed_SVM_MAP_CANCEL eCurrentButtonPressStage = inputConsumed_1 BREAK //SVM mission selection CASE inputConsumed_SVM_LAUNCH IF iCurrentPageID != ciSVMPageID CASSERTLN(DEBUG_INTERNET, " HANDLE_SECURO_SVM_INPUTS Invalid page id for SVM input. Page: ", iCurrentPageID, " SVM mission ID: ", iSVMToLaunch) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") eCurrentButtonPressStage = inputConsumed_1 EXIT ENDIF bMissionUnlocked = (GET_MP_INT_CHARACTER_STAT(MP_STAT_AT_FLOW_IMPEXP_NUM) >= iCountOfMissionsToUnock) #IF IS_DEBUG_BUILD IF GET_COMMANDLINE_PARAM_EXISTS("sc_SvmFlowAlwaysAvailable") bMissionUnlocked = TRUE ENDIF #ENDIF IF iSVMToLaunch < 0 OR iSVMToLaunch > ciMAX_AT_FLOW_MISSIONS IF NOT IS_BIT_SET(iBS, SEC_BS_DISPLAY_OVERLAY_WARNING) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_SVM_INPUTS Requesting IE SVM mission (2) with invalid ID: ", iSVMToLaunch, ". Runing confirm screen overlay") PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") START_OVERLAY_SCREEN("SVM_MIS_TI", "SVM_MIS_FL", "", "WHOUSE_CONF", FALSE) CDEBUG1LN(DEBUG_INTERNET, "HANDLE_SECURO_SVM_INPUTS - inputConsumed_SVM_LAUNCH: Setting bit SVM_BS_DISPLAY_OVERLAY_WARNING") SET_BIT(iBS, SEC_BS_DISPLAY_OVERLAY_WARNING) ENDIF iSVMToLaunch = -1 ELIF NOT bMissionUnlocked IF NOT IS_BIT_SET(iBS, SEC_BS_DISPLAY_OVERLAY_WARNING) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_SVM_INPUTS Requesting IE SVM mission which we have not unlocked. ID: ", iSVMToLaunch) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") START_OVERLAY_SCREEN("SVM_MIS_TI", "SVM_MIS_FNA", "", "WHOUSE_CONF", FALSE) CDEBUG1LN(DEBUG_INTERNET, "HANDLE_SECURO_SVM_INPUTS - inputConsumed_SVM_LAUNCH: Setting bit SVM_BS_DISPLAY_OVERLAY_WARNING - Mission not unlocked.") SET_BIT(iBS, SEC_BS_DISPLAY_OVERLAY_WARNING) ENDIF iSVMToLaunch = -1 ELIF SVM_FLOW_GET_NEXT_AVAILABLE_MISSION_CONTENT_ARRAY_POS(iSVMToLaunch, ciFLOW_MISSION_TYPE_SVM) = -1 OR AM_I_TRANSITION_SESSIONS_STARTING_ON_CALL() IF NOT IS_BIT_SET(iBS, SEC_BS_DISPLAY_OVERLAY_WARNING) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_SVM_INPUTS Requesting IE SVM mission which is not in the game. ID: ", iSVMToLaunch) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Fail", "GTAO_Exec_SecuroServ_Computer_Sounds") START_OVERLAY_SCREEN("SVM_MIS_TI", "SVM_MIS_FL", "", "WHOUSE_CONF", FALSE) SET_BIT(iBS, SEC_BS_DISPLAY_OVERLAY_WARNING) ENDIF iSVMToLaunch = -1 ELSE CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS HANDLE_SECURO_SVM_INPUTS Confirmed request launching SVM mission: ", iSVMToLaunch) START_OVERLAY_SCREEN("SVM_MIS_TI", "SVM_MIS_L", "WHOUSE_CONF", "WHOUSE_CANC", TRUE) PLAY_SOUND_FRONTEND(-1, "Navigate", "GTAO_Exec_SecuroServ_Computer_Sounds") ENDIF currentButtonPressStage = inputConsumed_1 BREAK ENDSWITCH 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 FUNC BOOL IS_CANCEL_BUTTON_INPUT_JUST_PRESSED() IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC MAINTAIN_CHECKS_FOR_CURRENT_SCREEN_ID() IF NOT IS_BIT_SET(iBS, SEC_BS_CHECK_PAGE_ID) IF IS_ACCEPT_BUTTON_INPUT_JUST_PRESSED() OR IS_CANCEL_BUTTON_INPUT_JUST_PRESSED() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_SCREEN_ID") currentCurrentScreenReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() SET_BIT(iBS, SEC_BS_CHECK_PAGE_ID) ENDIF ELIF IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentCurrentScreenReturnIndex) iCurrentPageID = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentCurrentScreenReturnIndex) CPRINTLN(DEBUG_INTERNET," MAINTAIN_CHECKS_FOR_CURRENT_SCREEN_ID CURRENT PAGE ID:", iCurrentPageID) CLEAR_BIT(iBS, SEC_BS_CHECK_PAGE_ID) ENDIF ENDPROC PROC MAINTAIN_CHECKS_FOR_CURRENT_SELECTION_ID() IF currentButtonPressStage = inputConsumed_0 OR currentButtonPressStage = inputConsumed_1 IF IS_ACCEPT_BUTTON_INPUT_JUST_PRESSED() IF NOT IS_BIT_SET(iBS, SEC_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_SELECTED_WAREHOUSE_ID") currentWarehouseReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() SET_BIT(iBS, SEC_BS_WAITING_FOR_BUTTON_RETURN_VALUE) ENDIF SET_BIT(iBS, SEC_BS_CHECK_SIDE_BAR) currentButtonPressStage = inputConsumed_0 ENDIF ENDIF ENDPROC PROC MAINTAIN_CHECKS_FOR_IS_WAREHOUSE_PANEL_SHOWING() IF iCurrentPageID = ciWarehouseMapPageID OR iCurrentPageID = ciVehicleWHMapPageID IF IS_BIT_SET(iBS, SEC_BS_CHECK_SIDE_BAR) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "IS_WAREHOUSE_PANEL_SHOWING") buyWindowOpenReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() CLEAR_BIT(iBS, SEC_BS_CHECK_SIDE_BAR) ELIF IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(buyWindowOpenReturnIndex) IF GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_BOOL(buyWindowOpenReturnIndex) SET_BIT(iBS, SEC_BS_SIDE_PANEL_SHOWING) ELSE CLEAR_BIT(iBS, SEC_BS_SIDE_PANEL_SHOWING) ENDIF CLEAR_BIT(iBS, SEC_BS_CHECK_SIDE_BAR) ENDIF ENDIF ENDPROC PROC CHECK_BUTTON_PRESS() #IF IS_DEBUG_BUILD INT iStrOffset = 0, iColumn = 0 INT iRed, iGreen, iBlue, iAlpha TEXT_LABEL_63 str1 = "", str2 = "" str1 = "CHECK_BUTTON_PRESS stage:" str1 += ENUM_TO_INT(currentButtonPressStage) #ENDIF MAINTAIN_CHECKS_FOR_CURRENT_SCREEN_ID() MAINTAIN_CHECKS_FOR_CURRENT_SELECTION_ID() MAINTAIN_CHECKS_FOR_IS_WAREHOUSE_PANEL_SHOWING() IF (currentButtonPressStage = inputConsumed_0) IF (IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentSelectionReturnIndex) AND IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentWarehouseReturnIndex)) INT iButtonIndex = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentSelectionReturnIndex) CLEAR_BIT(iBS, SEC_BS_WAITING_FOR_BUTTON_RETURN_VALUE) // You can find the id of the warehouse in question with this... iCurrentSelectedWarehouse = GET_WAREHOUSE_INDEX_FROM_SCALEFORM_INDEX(GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentWarehouseReturnIndex)) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [TOP]: ", iButtonIndex) //Login Screen CONST_INT iCONST_Button_Index_1001 1001 //Log In button on log in panel CONST_INT iCONST_Button_Index_1002 1002 //Quit button on access denied popup //Stats Screen CONST_INT iCONST_Button_Index_2001 2001 //Warehouse map button CONST_INT iCONST_Button_Index_2002 2002 //Buy button in column 1 of the bar graph CONST_INT iCONST_Button_Index_2003 2003 //Buy button in column 2 of the bar graph CONST_INT iCONST_Button_Index_2004 2004 //Buy button in column 3 of the bar graph CONST_INT iCONST_Button_Index_2005 2005 //Buy button in column 4 of the bar graph CONST_INT iCONST_Button_Index_2006 2006 //Buy button in column 5 of the bar graph //Map Screen CONST_INT iCONST_Button_Index_3001 3001 //Zoom In button CONST_INT iCONST_Button_Index_3002 3002 //Zoom Out button CONST_INT iCONST_Button_Index_3003 3003 //Filter All button CONST_INT iCONST_Button_Index_3004 3004 //Filter Small button CONST_INT iCONST_Button_Index_3005 3005 //Filter Medium button CONST_INT iCONST_Button_Index_3006 3006 //Filter Large button CONST_INT iCONST_Button_Index_3007 3007 //Buy Warehouse button CONST_INT iCONST_Button_Index_3008 3008 //Buy Small Shipment button CONST_INT iCONST_Button_Index_3009 3009 //Buy Medium Shipment button CONST_INT iCONST_Button_Index_3010 3010 //Buy Large Shipment button CONST_INT iCONST_Button_Index_3011 3011 //Sell Contraband Button CONST_INT iCONST_Button_Index_3012 3012 //Set Waypoint button on purchase success popup CONST_INT iCONST_Button_Index_3013 3013 //Close button on purchase success popup //Vehicle stats screen CONST_INT iCONST_Button_Index_4001 4001 //Steal Vehicle CONST_INT iCONST_Button_Index_4002 4002 //Show Vehicle Map Screen CONST_INT iCONST_Button_Index_4003 4003 //Accept button on map screen popup/overlay CONST_INT iCONST_Button_Index_4004 4004 //Cancel button on map screen popup/overlay CONST_INT iCONST_Button_Index_4015 4015 //IE warehouse Interior Style 0 CONST_INT iCONST_Button_Index_4016 4016 //IE warehouse Interior Style 1 CONST_INT iCONST_Button_Index_4017 4017 //IE warehouse Interior Style 2 CONST_INT iCONST_Button_Index_4018 4018 //IE warehouse Purchase Interior / Basement renovation CONST_INT iCONST_Button_Index_4019 4019 //IE warehouse Cancel Interior Overlay CONST_INT iCONST_Button_Index_4023 4023 //IE warehouse Show Interior Overlay //Vehicle Map CONST_INT iCONST_Button_Index_5003 5003 //IE WH map page - Filter button: All CONST_INT iCONST_Button_Index_5004 5004 //IE WH map page - Filter button: Owned CONST_INT iCONST_Button_Index_5005 5005 //Buy Vehicle Warehouse CONST_INT iCONST_Button_Index_5006 5006 //Steal Vehicle CONST_INT iCONST_Button_Index_5007 5007 //Accept button on map screen popup/overlay CONST_INT iCONST_Button_Index_5008 5008 //Cancel button on map screen popup/overlay CONST_INT iCONST_Button_Index_5010 5010 //Buy IE WH (Brings up the interiors overlay) CONST_INT iCONST_Button_Index_5011 5011 //Renovate IE WH (Brings up the interiors overlay) CONST_INT iCONST_Button_Index_5012 5012 //IE warehouse Interior 1 CONST_INT iCONST_Button_Index_5013 5013 //IE warehouse Interior 2 CONST_INT iCONST_Button_Index_5014 5014 //IE warehouse Interior 3 CONST_INT iCONST_Button_Index_5015 5015 //IE warehouse Interior overlay cancel button //Special Vehicle page CONST_INT iCONST_Button_Index_6002 6002 //Accept button on map screen popup/overlay CONST_INT iCONST_Button_Index_6003 6003 //Cancel button on map screen popup/overlay CONST_INT iCONST_SVM_Button_Index_0 0 //Special vehicle mission 1 CONST_INT iCONST_SVM_Button_Index_1 1 //Special vehicle mission 2 CONST_INT iCONST_SVM_Button_Index_2 2 //Special vehicle mission 3 CONST_INT iCONST_SVM_Button_Index_3 3 //Special vehicle mission 4 CONST_INT iCONST_SVM_Button_Index_4 4 //Special vehicle mission 5 CONST_INT iCONST_SVM_Button_Index_5 5 //Special vehicle mission 6 CONST_INT iCONST_SVM_Button_Index_6 6 //Special vehicle mission 7 CONST_INT iCONST_SVM_Button_Index_7 7 //Special vehicle mission 8 SWITCH iButtonIndex ///////////////////////////////////////////// /// LOGIN SCREEN /// CASE iCONST_Button_Index_1001 //Log In button on log in panel CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [LOGIN] Log In") BREAK CASE iCONST_Button_Index_1002 //Quit button on access denied popup CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [LOGIN] Quit") //CLEANUP_SECUROSERVE() BREAK ///////////////////////////////////////////// /// STATS SCREEN /// CASE iCONST_Button_Index_2001 //Warehouse map button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [STATS] Warehouse map") BREAK CASE iCONST_Button_Index_2002 //Buy button in column 1 of the bar graph CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [STATS] Buy in column 1") BREAK CASE iCONST_Button_Index_2003 //Buy button in column 2 of the bar graph CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [STATS] Buy in column 2") BREAK CASE iCONST_Button_Index_2004 //Buy button in column 3 of the bar graph CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [STATS] Buy in column 3") BREAK CASE iCONST_Button_Index_2005 //Buy button in column 4 of the bar graph CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [STATS] Buy in column 4") BREAK CASE iCONST_Button_Index_2006 //Buy button in column 5 of the bar graph CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [STATS] Buy in column 5") BREAK ///////////////////////////////////////////// /// MAP SCREEN /// CASE iCONST_Button_Index_3001 //Zoom In button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Zoom In") BREAK CASE iCONST_Button_Index_3002 //Zoom Out button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Zoom Out") BREAK CASE iCONST_Button_Index_3003 //Filter All button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Filter All") BREAK CASE iCONST_Button_Index_3004 //Filter Small button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Filter Small") BREAK CASE iCONST_Button_Index_3005 //Filter Medium button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Filter Medium") BREAK CASE iCONST_Button_Index_3006 //Filter Large button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Filter Large") BREAK CASE iCONST_Button_Index_3007 //Buy Warehouse button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Buy \"", DEBUG_GET_STRING_FOR_WAREHOUSE(iCurrentSelectedWarehouse), "\" $", GET_WAREHOUSE_COST(iCurrentSelectedWarehouse), "...") currentButtonPressStage = inputConsumed_BUY_WAREHOUSE BREAK CASE iCONST_Button_Index_3008 //Buy Small Shipment button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Buy small shipment from \"", DEBUG_GET_STRING_FOR_WAREHOUSE(iCurrentSelectedWarehouse), "\" $", GET_WAREHOUSE_COST(iCurrentSelectedWarehouse), "...") eCurrentSelectedShipmentSize = CONTRABAND_SMALL currentButtonPressStage = inputConsumed_BUY_SMALL_SHIPMENT BREAK CASE iCONST_Button_Index_3009 //Buy Medium Shipment button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Buy medium shipment from \"", DEBUG_GET_STRING_FOR_WAREHOUSE(iCurrentSelectedWarehouse), "\" $", GET_WAREHOUSE_COST(iCurrentSelectedWarehouse), "...") eCurrentSelectedShipmentSize = CONTRABAND_MEDIUM currentButtonPressStage = inputConsumed_BUY_MEDIUM_SHIPMENT BREAK CASE iCONST_Button_Index_3010 //Buy Large Shipment button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Buy large shipment from \"", DEBUG_GET_STRING_FOR_WAREHOUSE(iCurrentSelectedWarehouse), "\" $", GET_WAREHOUSE_COST(iCurrentSelectedWarehouse), "...") eCurrentSelectedShipmentSize = CONTRABAND_LARGE currentButtonPressStage = inputConsumed_BUY_LARGE_SHIPMENT BREAK CASE iCONST_Button_Index_3011 //Sell Contraband Button CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Sell Contraband in \"", DEBUG_GET_STRING_FOR_WAREHOUSE(iCurrentSelectedWarehouse), "\" $", GET_WAREHOUSE_COST(iCurrentSelectedWarehouse), "...") currentButtonPressStage = inputConsumed_SELL BREAK CASE iCONST_Button_Index_3012 //Confirm button (Can add whatever text we need to this) IF NOT IS_BIT_SET(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) AND NOT IS_BIT_SET(iBS, SEC_BS_PROCESSING_WH_BASKET_DONE) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Going to confirm purchase stage") currentButtonPressStage = inputConsumed_CONFIRM ELSE CLEAR_BIT(iBS, SEC_BS_PROCESSING_WH_BASKET_DONE) CLEAR_BIT(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) iCurrentSelectedWarehouse = -1 currentButtonPressStage = inputConsumed_1 CLOSE_OVERLAY_SCREEN() ENDIF CLEAR_BIT(iBS, SEC_BS_JUST_PURCHASED_WAREHOUSE) IF NOT IS_BIT_SET(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Success", "GTAO_Exec_SecuroServ_Computer_Sounds") ENDIF CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [OVERLAY] inputConsumed_CONFIRM") BREAK CASE iCONST_Button_Index_3013 //Close button on purchase success popup iCurrentSelectedWarehouse = -1 currentButtonPressStage = inputConsumed_1 CLEAR_BIT(iBS, SEC_BS_PROCESSING_CONTRA_BASKET_FAILED) CLEAR_BIT(iBS, SEC_BS_SELL_CONTRABAND_CONFIRMED) CLEAR_BIT(iBS, SEC_BS_BUY_WAREHOUSE_CONFIRMED) CLOSE_OVERLAY_SCREEN() PLAY_SOUND_FRONTEND(-1, "Popup_Cancel", "GTAO_Exec_SecuroServ_Computer_Sounds") CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Close") BREAK ///////////////////////////////////////////// /// Vehicle stats screen /// CASE iCONST_Button_Index_4001 //Steal Vehicle currentButtonPressStage = inputConsumed_STEAL_VEHICLE PLAY_SOUND_FRONTEND(-1, "Sell", "GTAO_Exec_SecuroServ_Computer_Sounds" ) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [STATS] Steal vehicle") BREAK CASE iCONST_Button_Index_4002 //Show Vehicle Map Screen SET_BIT(iBS, SEC_BS_SIDE_PANEL_SHOWING) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [STATS] Show vehicle map screen") BREAK CASE iCONST_Button_Index_4003 //Accept button on map screen popup/overlay currentButtonPressStage = inputConsumed_VEH_STAT_ACCEPT CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [STATS] overlay scrren accept") IF NOT IS_BIT_SET(iBS, SEC_BS_IE_TRANSACTION_FAILED) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Success", "GTAO_Exec_SecuroServ_Computer_Sounds") ENDIF CLEAR_BIT(iBS, SEC_BS_IE_TRANSACTION_FAILED) CLOSE_OVERLAY_SCREEN() BREAK CASE iCONST_Button_Index_4004 //Cancel button on map screen popup/overlay currentButtonPressStage = inputConsumed_VEH_STAT_CANCEL CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [STATS] overlay scrren cancel") PLAY_SOUND_FRONTEND(-1, "Popup_Cancel", "GTAO_Exec_SecuroServ_Computer_Sounds") CLOSE_OVERLAY_SCREEN() BREAK ///////////////////////////////////////////// /// Vehicle map /// CASE iCONST_Button_Index_5003 //IE WH map page - Filter button: All SET_BIT(iBS2, SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES) BREAK CASE iCONST_Button_Index_5004 //IE WH map page - Filter button: Owned CLEAR_BIT(iBS2, SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES) BREAK CASE iCONST_Button_Index_5005 //Buy Vehicle Warehouse CASE iCONST_Button_Index_4018 currentButtonPressStage = inputConsumed_BUY_VEH_WH CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Buy vehicle WH") BREAK CASE iCONST_Button_Index_5006 //Steal Vehicle currentButtonPressStage = inputConsumed_MAP_STEAL_VEHICLE CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] Steal vehicle") BREAK CASE iCONST_Button_Index_5007 //Accept button on map screen popup/overlay currentButtonPressStage = inputConsumed_VEH_MAP_ACCEPT CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] overlay scrren accept") IF NOT IS_BIT_SET(iBS, SEC_BS_IE_TRANSACTION_FAILED) PLAY_SOUND_FRONTEND(-1, "Popup_Confirm_Success", "GTAO_Exec_SecuroServ_Computer_Sounds") ENDIF CLEAR_BIT(iBS, SEC_BS_IE_TRANSACTION_FAILED) CLOSE_OVERLAY_SCREEN() BREAK CASE iCONST_Button_Index_5008 //Cancel button on map screen popup/overlay currentButtonPressStage = inputConsumed_VEH_MAP_CANCEL CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] overlay scrren cancel") PLAY_SOUND_FRONTEND(-1, "Popup_Cancel", "GTAO_Exec_SecuroServ_Computer_Sounds") CLOSE_OVERLAY_SCREEN() BREAK CASE iCONST_Button_Index_5010 //Buy IE WH (Brings up the interiors overlay) IF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.bdIEgarageData.iVehicleTotal != 0 AND GET_MP_INT_CHARACTER_STAT(MP_STAT_OWNED_IE_WAREHOUSE) != 0 CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS Requesting IE warehouse purchase when our warehouse isn't empty. Runing confirm screen overlay") START_OVERLAY_SCREEN("WHOUSE_PURFA", "SEC_WHOUSE_NEMP", "WHOUSE_CONF", "", FALSE) CLEAR_BIT(iBS, SEC_BS_PRUCHASE_IE_WH_SELECTED) ELSE eSelectedInterior = IE_INTERIOR_BASIC CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [IE_WH_MAP] Buy IE WH") START_OVERLAY_SCREEN("IEWH_SEL_INTT", "IEWH_SEL_INTD", "WHOUSE_CONF", "WHOUSE_CANC", TRUE, TRUE) ENDIF BREAK CASE iCONST_Button_Index_5011 //Renovate IE WH (Brings up the interiors overlay) CASE iCONST_Button_Index_4023 eSelectedInterior = GET_PLAYERS_OWND_IE_WAREHOUSE_INTERIOR(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [IE_WH_MAP] Renovate IE WH") START_OVERLAY_SCREEN("IEWH_SEL_INTT", "IEWH_SEL_INTD", "WHOUSE_CONF", "WHOUSE_CANC", TRUE, TRUE) BREAK CASE iCONST_Button_Index_5012 CASE iCONST_Button_Index_4015 CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [IE_WH] Interior 1") eSelectedInterior = IE_INTERIOR_BASIC BREAK CASE iCONST_Button_Index_5013 CASE iCONST_Button_Index_4016 CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [IE_WH] Interior 2") eSelectedInterior = IE_INTERIOR_URBAN BREAK CASE iCONST_Button_Index_5014 CASE iCONST_Button_Index_4017 CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [IE_WH] Interior 3") eSelectedInterior = IE_INTERIOR_BRANDED BREAK CASE iCONST_Button_Index_5015 CASE iCONST_Button_Index_4019 CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [IE_WH] Cancel button") eSelectedInterior = IE_INTERIOR_BASIC CLOSE_OVERLAY_SCREEN() BREAK //////////////////////////////////////////// /// Special vehicle missions /// CASE iCONST_Button_Index_6002 //Accept button on map screen popup/overlay CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] SVM confirm") currentButtonPressStage = inputConsumed_SVM_MAP_ACCEPT CLOSE_OVERLAY_SCREEN() BREAK CASE iCONST_Button_Index_6003 //Cancel button on map screen popup/overlay currentButtonPressStage = inputConsumed_SVM_MAP_CANCEL CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] SVM cancel") PLAY_SOUND_FRONTEND(-1, "Popup_Cancel", "GTAO_Exec_SecuroServ_Computer_Sounds") CLOSE_OVERLAY_SCREEN() BREAK CASE iCONST_SVM_Button_Index_0 //Special vehicle mission 1 CASE iCONST_SVM_Button_Index_1 //Special vehicle mission 2 CASE iCONST_SVM_Button_Index_2 //Special vehicle mission 3 CASE iCONST_SVM_Button_Index_3 //Special vehicle mission 4 CASE iCONST_SVM_Button_Index_4 //Special vehicle mission 5 CASE iCONST_SVM_Button_Index_5 //Special vehicle mission 6 CASE iCONST_SVM_Button_Index_6 //Special vehicle mission 7 CASE iCONST_SVM_Button_Index_7 //Special vehicle mission 8 IF iCurrentPageID = ciSVMPageID CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS [MAP] SVM screen selected vehicle: ", iButtonIndex) currentButtonPressStage = inputConsumed_SVM_LAUNCH iSVMToLaunch = iButtonIndex ENDIF BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS unknown button index ", iButtonIndex, ", warehouseID: ", iCurrentSelectedWarehouse) BREAK ENDSWITCH ELSE #IF IS_DEBUG_BUILD str2 = "selection and warehouse index not ready..." #ENDIF ENDIF ENDIF //Handle the control input receivied above HANDLE_SECURO_SVM_INPUTS(currentButtonPressStage) HANDLE_SECURO_WAREHOUSE_INPUTS(currentButtonPressStage) HANDLE_SECURO_IE_WAREHOUSE_INPUTS(currentButtonPressStage) #IF IS_DEBUG_BUILD IF bDrawDebugStuff GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str1, <<0.3,0.2,0>>+(<<0.0,0.01,0>>*TO_FLOAT(iStrOffset))+(<<0.1,0.0,0>>*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ IF NOT IS_STRING_NULL_OR_EMPTY(str2) GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str2, <<0.3,0.2,0>>+(<<0.0,0.01,0>>*TO_FLOAT(iStrOffset))+(<<0.1,0.0,0>>*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ ENDIF INT iIter FOR iIter = 0 TO (ciMaxOwnedWarehouses-1) INT iWarehouse = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(iIter) STRING sWarehouse TEXT_LABEL_31 tlCurrentContrabandTotal TEXT_LABEL_15 tlCurrentSlot = "Slot " tlCurrentSlot += iIter IF iWarehouse > 0 //Prevent asserts when we don't own a warehouse in this slot sWarehouse = DEBUG_GET_STRING_FOR_WAREHOUSE(iWarehouse) tlCurrentContrabandTotal = GET_CONTRABAND_UNITS_TOTAL_FOR_WAREHOUSE(iWarehouse) tlCurrentContrabandTotal += " / " tlCurrentContrabandTotal += GET_WAREHOUSE_MAX_CAPACITY(iWarehouse) tlCurrentContrabandTotal += " Units" ELSE sWarehouse = DEBUG_GET_STRING_FOR_WAREHOUSE(iWarehouse) tlCurrentContrabandTotal = "0 Units" ENDIF FLOAT fColumn = TO_FLOAT(iColumn) GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(tlCurrentSlot, <<0.3,0.2,0>>+(<<0.0,0.01,0>>*TO_FLOAT(iStrOffset))+(<<0.1,0.0,0>>*fColumn), iRed, iGreen, iBlue, iAlpha) fColumn += 0.5 GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(sWarehouse, <<0.3,0.2,0>>+(<<0.0,0.01,0>>*TO_FLOAT(iStrOffset))+(<<0.1,0.0,0>>*fColumn), iRed, iGreen, iBlue, iAlpha) fColumn += 1.5 // IF iWarehouse > -1 // AND IS_WAREHOUSE_FULL(iWarehouse) // SET_TEXT_COLOUR(255, 0, 0, 255) // ENDIF GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(tlCurrentContrabandTotal, <<0.3,0.2,0>>+(<<0.0,0.01,0>>*TO_FLOAT(iStrOffset))+(<<0.1,0.0,0>>*fColumn), iRed, iGreen, iBlue, iAlpha) iStrOffset++ ENDFOR ENDIF #ENDIF ENDPROC PROC SECURO_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 /// PURPOSE: /// IF the sidebar is open this will return the warehouse being looked at FUNC INT GET_WAREHOUSE_ID_FOR_OPEN_BUY_SIDE_BAR() RETURN iCurrentSelectedWarehouse ENDFUNC /// PURPOSE: /// IF the sidebar is open this will return true if the player /// owns the displayed warehouse FUNC BOOL DOES_PLAYER_OWN_WAREHOUSE_OPEN_IN_SIDEBAR() IF GET_WAREHOUSE_ID_FOR_OPEN_BUY_SIDE_BAR() > ciW_Invalid AND GET_WAREHOUSE_ID_FOR_OPEN_BUY_SIDE_BAR() < iWarehouseOffset AND DOES_LOCAL_PLAYER_OWN_WAREHOUSE(GET_WAREHOUSE_ID_FOR_OPEN_BUY_SIDE_BAR()) RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Returns true if the conditions are met to show the special item sidebar FUNC BOOL SHOULD_DISPLAY_SPECIAL_ITEM_TUTORIAL() IF iCurrentPageID != ciWarehouseMapPageID RETURN FALSE ENDIF INT iWarehouse = GET_WAREHOUSE_ID_FOR_OPEN_BUY_SIDE_BAR() IF NOT IS_BIT_SET(iBS, SEC_BS_HELP_TEXT_TUTORIAL_COMPLETE) AND iWarehouse > ciW_Invalid AND IS_MAP_SIDEBAR_OPEN() AND DOES_LOCAL_PLAYER_OWN_WAREHOUSE(iWarehouse) AND g_bSpecialItemActive RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() IF GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_LIN_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_MAP_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_PURCH_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_BUY_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_SUM_TUT) //AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_START_MIS) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_NEWF_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_NEWF_NU_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_WH_OLD_USER_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_VEH_WH_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_VEH_WH_STAT_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_VEH_WH_PUR_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_RENO_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_SVM_TUT) CPRINTLN(DEBUG_INTERNET, " HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED TRUE") RETURN TRUE ENDIF CPRINTLN(DEBUG_INTERNET, " HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED FALSE") RETURN FALSE ENDFUNC FUNC STRING SECURO_TUT_GET_ROOT_LABEL(INT iTutorialID) IF IS_BIT_SET(iBS2, SEC_BS2_PA_IS_MALE) SWITCH iTutorialID CASE 0 RETURN "EXCPA_LOGINM" //Login CASE 1 RETURN "EXCPA_MAPM" //Map Page CASE 2 RETURN "EXCPA_WAREM" //Confirm Warehouse Purchase CASE 3 RETURN "EXCPA_BUYINM" //Buying Contraband Stock CASE 4 RETURN "EXCPA_STOCKM" //Confirm Stock Purchase CASE 5 RETURN "EXCPA_SUMMM" //Stats Page CASE 6 RETURN "IMPA_TUT1M" //3 option page (existing user) CASE 7 RETURN "IMPA_TUT1BM" //3 option page (New User) CASE 8 RETURN "IMPA_TUT2M" //Special cargo page (existing user) CASE 9 RETURN "IMPA_TUT3M" //Special vehicle work page CASE 10 RETURN "IMPA_TUT4M" //Vehicle cargo page CASE 11 RETURN "IMPA_TUT5M" //First purchase of a vehicle WH CASE 12 RETURN "IMPA_TUT6M" //First entry to Site once we have purcased a vehicle WH CASE 13 RETURN "IMPA_TUT7M" //Renovate reminder ENDSWITCH ELSE SWITCH iTutorialID CASE 0 RETURN "EXCPA_LOGINF" CASE 1 RETURN "EXCPA_MAPF" CASE 2 RETURN "EXCPA_WAREF" CASE 3 RETURN "EXCPA_BUYINF" CASE 4 RETURN "EXCPA_STOCKF" CASE 5 RETURN "EXCPA_SUMMF" CASE 6 RETURN "IMPA_TUT1F" CASE 7 RETURN "IMPA_TUT1BF" CASE 8 RETURN "IMPA_TUT2F" CASE 9 RETURN "IMPA_TUT3F" CASE 10 RETURN "IMPA_TUT4F" CASE 11 RETURN "IMPA_TUT5F" CASE 12 RETURN "IMPA_TUT6F" CASE 13 RETURN "IMPA_TUT7F" ENDSWITCH ENDIF CASSERTLN(DEBUG_SAFEHOUSE, "SECURO_TUT_GET_ROOT_LABEL: Invalid tutorial ID: ", iTutorialID) RETURN "EXCPA_LOGINM" ENDFUNC PROC SECURO_START_TUTORIAL_DIALOGUE(INT iTutorialID) STRING sRootID = "EXCPAAU" IF iTutorialID > 5 sRootID = "IMPAAUD" ENDIF IF CREATE_CONVERSATION(tutPedStruct, sRootID, SECURO_TUT_GET_ROOT_LABEL(iTutorialID), CONV_PRIORITY_HIGH) CPRINTLN(DEBUG_INTERNET, " Created tutorial converstion: ", iTutorialID) iTutorialDialogueID = -1 ENDIF ENDPROC PROC SECURO_RUN_TUTORIAL_DIALOGUE() //Start the dialogue IF iTutorialDialogueID != -1 SECURO_START_TUTORIAL_DIALOGUE(iTutorialDialogueID) ENDIF ENDPROC PROC RUN_SECURO_APP_DIALOGUE_TUTORIAL() BOOL bStartNewDialogue IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_PLAYING_TUTORIAL) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF IS_BIT_SET(iBS, SEC_BS_DISPLAYING_LOGIN_PAGE) AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_LIN_TUT) //Login page bStartNewDialogue = TRUE iTutorialHelpTime = 6750 iTutorialDialogueID = 0 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_LIN_TUT, TRUE) ELIF iCurrentPageID = ciWarehouseMapPageID AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_MAP_TUT) //Map Page IF NOT DOES_LOCAL_PLAYER_OWN_A_WAREHOUSE() //Dont trigger dialogue if player already owns a warehouse B*7218537 bStartNewDialogue = TRUE iTutorialHelpTime = 8000 iTutorialDialogueID = 1 ENDIF SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_MAP_TUT, TRUE) SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_WH_OLD_USER_TUT, TRUE) ELIF IS_BIT_SET(iBS, SEC_BS_DISPLAYING_PURCHASE_WH_TUT) AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_PURCH_TUT) //Successful WH purchase bStartNewDialogue = TRUE iTutorialHelpTime = 6000 iTutorialDialogueID = 2 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_PURCH_TUT, TRUE) ELIF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_BUY_TUT) AND (DOES_PLAYER_OWN_WAREHOUSE_OPEN_IN_SIDEBAR() OR IS_MAP_SIDEBAR_OPEN() AND iJustPurchasedWHID = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(0) AND iJustPurchasedWHID != ciW_Invalid AND iCurrentSelectedWarehouse = -1) //Buy Contraband tutorial iJustPurchasedWHID = ciW_Invalid bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = 3 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_BUY_TUT, TRUE) ELIF iCurrentPageID = ciWarehouseStatsPageID AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_SUM_TUT) //Stats page bStartNewDialogue = TRUE iTutorialHelpTime = 6000 iTutorialDialogueID = 5 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_SUM_TUT, TRUE) ELIF iCurrentPageID = ciBranchPageID AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_NEWF_TUT) AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_NEWF_NU_TUT) IF GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_MAP_TUT) //Branching page - Existing user bStartNewDialogue = TRUE iTutorialHelpTime = 10000 iTutorialDialogueID = 6 ELSE //Branching page - New user bStartNewDialogue = TRUE iTutorialHelpTime = 10000 iTutorialDialogueID = 7 ENDIF SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_NEWF_TUT, TRUE) SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_NEWF_NU_TUT, TRUE) ELIF iCurrentPageID = ciSVMPageID AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_SVM_TUT) //SVM page - all users bStartNewDialogue = TRUE iTutorialHelpTime = 4000 iTutorialDialogueID = 9 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_SVM_TUT, TRUE) ELIF iCurrentPageID = ciVehicleWHMapPageID AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_VEH_WH_TUT) //Vehicle WH map page - all users bStartNewDialogue = TRUE iTutorialHelpTime = 4000 iTutorialDialogueID = 10 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_VEH_WH_TUT, TRUE) ELIF iCurrentPageID = ciVehicleWHMapPageID AND IS_BIT_SET(iBS, SEC_BS_PROPERTY_PURCHASED_THIS_RUN) AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_VEH_WH_PUR_TUT) //Purchased WH - all users bStartNewDialogue = TRUE iTutorialHelpTime = 4000 iTutorialDialogueID = 11 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_VEH_WH_PUR_TUT, TRUE) ELIF iCurrentPageID = ciVehicleWHStatsPageID AND NOT IS_BIT_SET(iBS, SEC_BS_PROPERTY_PURCHASED_THIS_RUN) AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_VEH_WH_STAT_TUT) //Purchased WH - after closing app and loging back in bStartNewDialogue = TRUE iTutorialHelpTime = 4000 iTutorialDialogueID = 12 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_VEH_WH_STAT_TUT, TRUE) ELIF iCurrentPageID = ciVehicleWHStatsPageID AND NOT IS_BIT_SET(iBS, SEC_BS_PROPERTY_PURCHASED_THIS_RUN) AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_RENO_TUT) //Renovate WH - after closing app and loging back in bStartNewDialogue = TRUE iTutorialHelpTime = 4000 iTutorialDialogueID = 13 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_RENO_TUT, TRUE) ELIF GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_MAP_TUT) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_SUM_TUT) AND NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_WH_OLD_USER_TUT) IF iCurrentPageID = ciWarehouseStatsPageID OR iCurrentPageID = ciWarehouseMapPageID //Special cargo page - Existing user bStartNewDialogue = TRUE iTutorialHelpTime = 4000 iTutorialDialogueID = 8 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_WH_OLD_USER_TUT, TRUE) ENDIF ENDIF ENDIF IF bStartNewDialogue SET_BIT(iBS, SEC_BS_CURRENTLY_PLAYING_TUTORIAL) CPRINTLN(DEBUG_INTERNET, " RUN_SECURO_APP_DIALOGUE_TUTORIAL Running tutorial for: ", iTutorialHelpTime, " seconds. Tutorial ID: ", iTutorialDialogueID) ELIF IS_BIT_SET(iBS, SEC_BS_CURRENTLY_PLAYING_TUTORIAL) IF NOT HAS_NET_TIMER_STARTED(sTutorialTimer) START_NET_TIMER(sTutorialTimer) CPRINTLN(DEBUG_INTERNET, " RUN_SECURO_APP_DIALOGUE_TUTORIAL Starting timer time: ", iTutorialHelpTime, " Tutorial ID: ", iTutorialDialogueID) ELIF HAS_NET_TIMER_EXPIRED(sTutorialTimer, iTutorialHelpTime) CLEAR_BIT(iBS, SEC_BS_CURRENTLY_PLAYING_TUTORIAL) iTutorialHelpTime = 0 RESET_NET_TIMER(sTutorialTimer) CPRINTLN(DEBUG_INTERNET, " RUN_SECURO_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, SEC_BS_DIALOGUE_TUTORIAL_COMPLETE) ENDIF ENDIF ENDIF ENDPROC PROC RUN_WAREHOUSE_APP_TUTORIAL() STRING sHelp IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_PLAYING_TUTORIAL) AND NOT IS_BIT_SET(iBS, SEC_BS_COOLDOWN_HELP_DISPLAYING) IF GET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_1) < 3 AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_WH_TUT_1)) sHelp = "WH_TUT_1" //First message iTutorialHelpTime = 5500 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_WH_TUT_1)) INT iNumTimes = GET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_1) iNumTimes ++ SET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_1, iNumTimes) ELIF GET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_2) < 3 AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_WH_TUT_2)) sHelp = "WH_TUT_2" //Second message iTutorialHelpTime = 5500 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_WH_TUT_2)) INT iNumTimes = GET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_2) iNumTimes ++ SET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_2, iNumTimes) ELIF GET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_3) < 3 AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_WH_TUT_3)) sHelp = "WH_TUT_3" //Third Message iTutorialHelpTime = 5500 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_WH_TUT_3)) INT iNumTimes = GET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_3) iNumTimes ++ SET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_3, iNumTimes) ELIF GET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_SPECIAL) < 3 AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_WH_TUT_SPEC)) AND DOES_WAREHOUSE_CONTAIN_A_SPECIAL_ITEM(iCurrentlyInsideWarehouse) sHelp = "WH_TUT_SPEC" //Special message iTutorialHelpTime = 5500 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_WH_TUT_SPEC)) INT iNumTimes = GET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_SPECIAL) iNumTimes ++ SET_PACKED_STAT_INT(PACKED_MP_INT_WH_TUTORIAL_SPECIAL, iNumTimes) ENDIF ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(sHelp) AND NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_PLAYING_TUTORIAL) //Display the relevant help text SECURO_PRINT_TUTORIAL_HELP(sHelp, iTutorialHelpTime) SET_BIT(iBS, SEC_BS_CURRENTLY_PLAYING_TUTORIAL) CPRINTLN(DEBUG_INTERNET, " RUN_WAREHOUSE_APP_TUTORIAL Printing: sHelp: ", sHelp, " time: ", iTutorialHelpTime) ELIF IS_BIT_SET(iBS, SEC_BS_CURRENTLY_PLAYING_TUTORIAL) IF NOT HAS_NET_TIMER_STARTED(sTutorialTimer) START_NET_TIMER(sTutorialTimer) CPRINTLN(DEBUG_INTERNET, " RUN_WAREHOUSE_APP_TUTORIAL Starting timer for: ", sHelp, " time: ", iTutorialHelpTime) ELIF HAS_NET_TIMER_EXPIRED(sTutorialTimer, iTutorialHelpTime) CLEAR_BIT(iBS, SEC_BS_CURRENTLY_PLAYING_TUTORIAL) iTutorialHelpTime = 0 RESET_NET_TIMER(sTutorialTimer) CPRINTLN(DEBUG_INTERNET, " RUN_WAREHOUSE_APP_TUTORIAL Starting timer expired for: ", sHelp, " time: ", iTutorialHelpTime) ENDIF ENDIF ENDPROC FUNC BOOL HAVE_ALL_SECURO_HELP_TUTORIALS_BEEN_COMPLETED() IF GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_MAP) >= 3 //Map page buy first WH AND GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_BUY_WH) >= 3 //Buy WH AND GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_MAP_OWNED_WH) >= 3 //Map page Green icons AND GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_BUY_CONTRABAND) >= 3 //Buy Contraband tutorial AND GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_SUMMARY) >= 3 //Summary AND GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_SPECIAL_ITEM) >= 3 //Special AND HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_MAP_PAGE) AND HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_MAP_PAGE_2) AND HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_SOURCE_VEH) AND HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_SUM_PAGE) AND HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_SOURCE_VEH_CD) AND HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_SVM_PAGE) RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWEBSITE_TUTORIAL_BS_INDEX eTutorialID) INT iTutorialID = ENUM_TO_INT(eTutorialID) SWITCH eTutorialID CASE eWTBS_SECURO_MAP_TUT IF GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_MAP) < 3 //Map page buy first WH AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) RETURN TRUE ENDIF BREAK CASE eWTBS_SECURO_WH_TUT IF GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_BUY_WH) < 3 //Buy WH AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) RETURN TRUE ENDIF BREAK CASE eWTBS_SECURO_PURCH_TUT IF GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_MAP_OWNED_WH) < 3 //Map page Green icons AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) RETURN TRUE ENDIF BREAK CASE eWTBS_SECURO_BUY_TUT IF GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_BUY_CONTRABAND) < 3 //Buy Contraband tutorial AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS,iTutorialID) RETURN TRUE ENDIF BREAK CASE eWTBS_SECURO_SUM_TUT IF GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_SUMMARY) < 3 //Summary AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) RETURN TRUE ENDIF BREAK CASE eWTBS_SECURO_SPEC_TUT IF GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_SPECIAL_ITEM) < 3 //Special AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND SHOULD_DISPLAY_SPECIAL_ITEM_TUTORIAL() RETURN TRUE ENDIF BREAK CASE eWTBS_IE_SEC_TUT1 IF NOT HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_MAP_PAGE) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND IS_BIT_SET(iBS2, SEC_BS2_VEH_WH_MAP_SHOWING_ALL_WAREHOUSES) AND iCurrentPageID = ciVehicleWHMapPageID RETURN TRUE ENDIF BREAK CASE eWTBS_IE_SEC_TUT2 IF NOT HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_MAP_PAGE_2) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_IE_SEC_TUT3)) AND iCurrentPageID = ciVehicleWHMapPageID AND NOT IS_MAP_SIDEBAR_OPEN() AND DOES_PLAYER_OWN_AN_IE_GARAGE(PLAYER_ID()) RETURN TRUE ENDIF BREAK CASE eWTBS_IE_SEC_TUT3 IF NOT HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_SOURCE_VEH) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND iCurrentPageID = ciVehicleWHMapPageID AND IS_MAP_SIDEBAR_OPEN() AND DOES_PLAYER_OWN_AN_IE_GARAGE(PLAYER_ID()) RETURN TRUE ENDIF BREAK CASE eWTBS_IE_SEC_TUT4 IF NOT HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_SUM_PAGE) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND iCurrentPageID = ciVehicleWHStatsPageID RETURN TRUE ENDIF BREAK CASE eWTBS_IE_SEC_TUT5 IF NOT HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_SOURCE_VEH_CD) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND NOT GB_HAS_IE_MISSION_COOLDOWN_TIMER_EXPIRED(VEV_EYE_IN_THE_SKY) IF iCurrentPageID = ciVehicleWHStatsPageID OR iCurrentPageID = ciVehicleWHMapPageID RETURN TRUE ENDIF ENDIF BREAK CASE eWTBS_IE_SEC_TUT6 IF NOT HAS_IE_WEBSITE_TUT_BEEN_DONE(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_SVM_PAGE) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS, iTutorialID) AND iCurrentPageID = ciSVMPageID RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC UPDATE_IE_WEBSITE_TUTORIAL_BS() iIETutorialBS1 = GET_MP_INT_CHARACTER_STAT(MP_STAT_IMP_EXP_COMP_TUTORIALS1) iIETutorialBS2 = GET_MP_INT_CHARACTER_STAT(MP_STAT_IMP_EXP_COMP_TUTORIALS2) ENDPROC #IF FEATURE_GEN9_EXCLUSIVE PROC CLEAR_DISPLAYED_TUTORIAL_HELP() CLEAR_HELP() CLEAR_BIT(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) iTutorialHelpTime = 0 RESET_NET_TIMER(sTutorialTimer) ENDPROC PROC RUN_SECURO_APP_HELP_TEXT_INTRO_MISSION_TUTORIAL() STRING sHelp IF IS_PLAYER_ON_MP_INTRO() IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) AND NOT IS_BIT_SET(iBS, SEC_BS_COOLDOWN_HELP_DISPLAYING) SWITCH iCurrentPageID CASE ciBranchPageID IF NOT IS_BIT_SET(iBS2, SEC_BS2_DONE_MP_INTRO_HELP_1) sHelp = "G9_SEC_TUT_1" //Login Page iTutorialHelpTime = 10000 SET_BIT(iBS2, SEC_BS2_DONE_MP_INTRO_HELP_1) ENDIF BREAK CASE ciWarehouseStatsPageID IF NOT IS_BIT_SET(iBS2, SEC_BS2_DONE_MP_INTRO_HELP_2) sHelp = "G9_SEC_TUT_2" //Stats Page iTutorialHelpTime = 20000 SET_BIT(iBS2, SEC_BS2_DONE_MP_INTRO_HELP_2) ENDIF BREAK CASE ciWarehouseMapPageID IF NOT IS_BIT_SET(iBS2, SEC_BS2_DONE_MP_INTRO_HELP_3) AND NOT IS_MAP_SIDEBAR_OPEN() IF NOT HAS_NET_TIMER_STARTED(sTutorialTimer) START_NET_TIMER(sTutorialTimer) CPRINTLN(DEBUG_INTERNET, " RUN_SECURO_APP_HELP_TEXT_INTRO_MISSION_TUTORIAL Starting timer to delay warehouse prompt") ELIF HAS_NET_TIMER_EXPIRED(sTutorialTimer, 500) sHelp = "G9_SEC_TUT_3" //Warehouse Page iTutorialHelpTime = 10000 SET_BIT(iBS2, SEC_BS2_DONE_MP_INTRO_HELP_3) RESET_NET_TIMER(sTutorialTimer) ENDIF ELSE RESET_NET_TIMER(sTutorialTimer) ENDIF BREAK ENDSWITCH ELSE SWITCH iCurrentPageID CASE ciBranchPageID IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("G9_SEC_TUT_2") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("G9_SEC_TUT_3") CLEAR_DISPLAYED_TUTORIAL_HELP() ENDIF BREAK CASE ciWarehouseStatsPageID IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("G9_SEC_TUT_1") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("G9_SEC_TUT_3") CLEAR_DISPLAYED_TUTORIAL_HELP() ENDIF BREAK CASE ciWarehouseMapPageID IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("G9_SEC_TUT_1") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("G9_SEC_TUT_2") OR IS_MAP_SIDEBAR_OPEN() CLEAR_DISPLAYED_TUTORIAL_HELP() ENDIF BREAK DEFAULT IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("G9_SEC_TUT_1") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("G9_SEC_TUT_2") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("G9_SEC_TUT_3") CLEAR_DISPLAYED_TUTORIAL_HELP() ENDIF BREAK ENDSWITCH ENDIF ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(sHelp) AND NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) //Display the relevant help text SECURO_PRINT_TUTORIAL_HELP(sHelp, iTutorialHelpTime) SET_BIT(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) CPRINTLN(DEBUG_INTERNET, " RUN_SECURO_APP_HELP_TEXT_INTRO_MISSION_TUTORIAL Printing: sHelp: ", sHelp, " time: ", iTutorialHelpTime) ELIF IS_BIT_SET(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) IF NOT HAS_NET_TIMER_STARTED(sTutorialTimer) START_NET_TIMER(sTutorialTimer) CPRINTLN(DEBUG_INTERNET, " RUN_SECURO_APP_HELP_TEXT_INTRO_MISSION_TUTORIAL Starting timer for: ", sHelp, " time: ", iTutorialHelpTime) ELIF HAS_NET_TIMER_EXPIRED(sTutorialTimer, iTutorialHelpTime) CLEAR_BIT(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) iTutorialHelpTime = 0 RESET_NET_TIMER(sTutorialTimer) CPRINTLN(DEBUG_INTERNET, " RUN_SECURO_APP_HELP_TEXT_INTRO_MISSION_TUTORIAL Starting timer expired for: ", sHelp, " time: ", iTutorialHelpTime) ENDIF ENDIF ENDPROC #ENDIF PROC RUN_SECURO_APP_HELP_TEXT_TUTORIAL() STRING sHelp IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) AND NOT IS_BIT_SET(iBS, SEC_BS_COOLDOWN_HELP_DISPLAYING) IF iCurrentPageID = ciWarehouseMapPageID AND SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_SECURO_MAP_TUT) sHelp = "SECURO_MAP_TUT" //Map Page iTutorialHelpTime = 8000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_SECURO_MAP_TUT)) INT iNumTimes = GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_MAP) iNumTimes ++ SET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_MAP, iNumTimes) ELIF SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_SECURO_WH_TUT) AND IS_MAP_SIDEBAR_OPEN() AND NOT DOES_PLAYER_OWN_WAREHOUSE_OPEN_IN_SIDEBAR() sHelp = "SECURO_WH_TUT" //Buy WH iTutorialHelpTime = 6000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_SECURO_WH_TUT)) INT iNumTimes = GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_BUY_WH) iNumTimes ++ SET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_BUY_WH, iNumTimes) ELIF iCurrentPageID = ciWarehouseMapPageID AND DOES_LOCAL_PLAYER_OWN_A_WAREHOUSE() AND NOT IS_BIT_SET(iBS, SEC_BS_JUST_PURCHASED_WAREHOUSE) AND SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_SECURO_PURCH_TUT) sHelp = "SECURO_PURCH_TUT" //Map page Green icons iTutorialHelpTime = 6000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_SECURO_PURCH_TUT)) INT iNumTimes = GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_MAP_OWNED_WH) iNumTimes ++ SET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_MAP_OWNED_WH, iNumTimes) ELIF SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_SECURO_BUY_TUT) AND DOES_PLAYER_OWN_WAREHOUSE_OPEN_IN_SIDEBAR() AND IS_MAP_SIDEBAR_OPEN() sHelp = "SECURO_BUY_TUT" //Buy Contraband tutorial iTutorialHelpTime = 9000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_SECURO_BUY_TUT)) INT iNumTimes = GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_BUY_CONTRABAND) iNumTimes ++ SET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_BUY_CONTRABAND, iNumTimes) ELIF iCurrentPageID = ciWarehouseStatsPageID AND SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_SECURO_SUM_TUT) sHelp = "SECURO_SUM_TUT" //Stats page iTutorialHelpTime = 6000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_SECURO_SUM_TUT)) INT iNumTimes = GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_SUMMARY) iNumTimes ++ SET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_SUMMARY, iNumTimes) ELIF SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_SECURO_SPEC_TUT) sHelp = "SECURO_SPEC_TUT" //OOOHHHH a special item! iTutorialHelpTime = 6000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_SECURO_SPEC_TUT)) INT iNumTimes = GET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_SPECIAL_ITEM) iNumTimes ++ SET_PACKED_STAT_INT(PACKED_MP_INT_SECURO_TUT_SPECIAL_ITEM, iNumTimes) ELIF SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_IE_SEC_TUT1) sHelp = "IE_SEC_TUT1" //Vehicle WH map page 1 iTutorialHelpTime = 6000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_IE_SEC_TUT1)) INCREMENT_NUM_TIMES_IE_WEB_TUT_HAS_PLAYED(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_MAP_PAGE) ELIF SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_IE_SEC_TUT2) sHelp = "IE_SEC_TUT2" //Vehicle WH map page 2 iTutorialHelpTime = 6000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_IE_SEC_TUT2)) INCREMENT_NUM_TIMES_IE_WEB_TUT_HAS_PLAYED(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_MAP_PAGE_2) ELIF SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_IE_SEC_TUT3) sHelp = "IE_SEC_TUT3" //Vehicle WH Source vehicle button iTutorialHelpTime = 6000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_IE_SEC_TUT3)) INCREMENT_NUM_TIMES_IE_WEB_TUT_HAS_PLAYED(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_SOURCE_VEH) ELIF SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_IE_SEC_TUT4) sHelp = "IE_SEC_TUT4" //Vehicle WH summary page iTutorialHelpTime = 6000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_IE_SEC_TUT4)) INCREMENT_NUM_TIMES_IE_WEB_TUT_HAS_PLAYED(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_SUM_PAGE) ELIF SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_IE_SEC_TUT5) sHelp = "IE_SEC_TUT5" //Vehicle WH Steal mission on CD iTutorialHelpTime = 6000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_IE_SEC_TUT5)) INCREMENT_NUM_TIMES_IE_WEB_TUT_HAS_PLAYED(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_VWH_SOURCE_VEH_CD) ELIF SHOULD_SECURO_HELP_TUTORIAL_BE_DISPLAYED(eWTBS_IE_SEC_TUT6) sHelp = "IE_SEC_TUT6" //SVM page iTutorialHelpTime = 9000 SET_BIT(g_iWebsiteTutorialDisplayedBS, ENUM_TO_INT(eWTBS_IE_SEC_TUT6)) INCREMENT_NUM_TIMES_IE_WEB_TUT_HAS_PLAYED(iIETutorialBS1, iIETutorialBS2, IE_WEB_TUT_SVM_PAGE) ENDIF ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(sHelp) AND NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) //Display the relevant help text SECURO_PRINT_TUTORIAL_HELP(sHelp, iTutorialHelpTime) SET_BIT(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) CPRINTLN(DEBUG_INTERNET, " RUN_SECURO_APP_HELP_TEXT_TUTORIAL Printing: sHelp: ", sHelp, " time: ", iTutorialHelpTime) ELIF IS_BIT_SET(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) IF NOT HAS_NET_TIMER_STARTED(sTutorialTimer) START_NET_TIMER(sTutorialTimer) CPRINTLN(DEBUG_INTERNET, " RUN_SECURO_APP_HELP_TEXT_TUTORIAL Starting timer for: ", sHelp, " time: ", iTutorialHelpTime) ELIF HAS_NET_TIMER_EXPIRED(sTutorialTimer, iTutorialHelpTime) CLEAR_BIT(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) iTutorialHelpTime = 0 RESET_NET_TIMER(sTutorialTimer) CPRINTLN(DEBUG_INTERNET, " RUN_SECURO_APP_HELP_TEXT_TUTORIAL Starting timer expired for: ", sHelp, " time: ", iTutorialHelpTime) IF HAVE_ALL_SECURO_HELP_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, SEC_BS_HELP_TEXT_TUTORIAL_COMPLETE) ENDIF ENDIF ENDIF ENDPROC PROC RENDER_NAG_SCREEN() CPRINTLN(DEBUG_INTERNET, "APP_SECURO RENDER_NAG_SCREEN()") DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_UP) STRING pHeaderTextLabel STRING pBodyTextLabel FE_WARNING_FLAGS iButtonFlagBitfield = FE_WARNING_OKCANCEL STRING pBodySubTextLabel = NULL pHeaderTextLabel = ("BRSCRWTEX") //title IF NOT HAS_ENTERED_OFFLINE_SAVE_FM() SWITCH g_eBrosNagReason CASE NSR_CASH pBodyTextLabel = ("BRDISTEX") //warning BREAK CASE NSR_DLC pBodyTextLabel = ("BRDISDLC") //warning BREAK ENDSWITCH pBodySubTextLabel = ("BRSHETEX") //warning ELSE SWITCH g_eBrosNagReason CASE NSR_CASH pBodyTextLabel = ("BRDISTES") //warning BREAK CASE NSR_DLC pBodyTextLabel = ("BRDISDLC") //warning BREAK ENDSWITCH pBodySubTextLabel = ("BRSHETES") //warning ENDIF SET_WARNING_MESSAGE_WITH_HEADER(pHeaderTextLabel, pBodyTextLabel, iButtonFlagBitfield, pBodySubTextLabel) g_sBusAppManagement.iRenderHandShakeFC = GET_FRAME_COUNT() ENDPROC PROC SECURO_SETUP_TUTORIAL_DIALOGUE() SET_USE_DLC_DIALOGUE(TRUE) IF GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_PERSONNEL, -1) = 1 SET_BIT(iBS2, SEC_BS2_PA_IS_MALE) ENDIF IF IS_BIT_SET(iBS2, SEC_BS2_PA_IS_MALE) ADD_PED_FOR_DIALOGUE(tutPedStruct, 3, NULL, "EXECPA_MALE") ELSE ADD_PED_FOR_DIALOGUE(tutPedStruct, 2, NULL, "EXECPA_FEMALE") ENDIF CPRINTLN(DEBUG_INTERNET, " SECURO_SETUP_TUTORIAL_DIALOGUE Setup PA voice. MALE? ", IS_BIT_SET(iBS2, SEC_BS2_PA_IS_MALE)) ENDPROC PROC RUN_CHECK_ON_ACTIVE_BUY_MISSION_COOLDOWNS() IF iCooldownExpierdCheckFC = 180 INT iLoop REPEAT ciMaxOwnedWarehouses iLoop INT iWH = GET_WAREHOUSE_ID_FOR_SAVE_SLOT(iLoop) IF iWH != ciW_Invalid AND IS_BIT_SET(iWarehouseSellCooldownBS, iWH) INT buyTimeRem = GET_CONTRABAND_BUY_COOLDOWN(iWH) //If necessary grab the time remaining from the sell mission tuneable timer IF buyTimeRem <= 0 IF NOT GB_HAS_BUY_MISSION_TIMER_EXPIRED() buyTimeRem = g_sMPTunables.iexec_buy_fail_cooldown - ABSI(GET_TIME_DIFFERENCE(INT_TO_NATIVE(TIME_DATATYPE, GET_GAME_TIMER()), g_sGbWorkCoolDownVars.gbBuyCooldownTimer.Timer)) ENDIF ENDIF IF buyTimeRem <= 0 CLEAR_BIT(iWarehouseSellCooldownBS, iWH) ENDIF ENDIF ENDREPEAT iCooldownExpierdCheckFC = -1 ENDIF iCooldownExpierdCheckFC ++ ENDPROC PROC RUN_MISSION_COOLDOWN_HELP_TEXT() IF IS_BIT_SET(iBS, SEC_BS_COOLDOWN_HELP_DISPLAYING) IF NOT HAS_NET_TIMER_STARTED(sTutorialTimer) START_NET_TIMER(sTutorialTimer) ELIF HAS_NET_TIMER_EXPIRED(sTutorialTimer, 5000) CLEAR_BIT(iBS, SEC_BS_COOLDOWN_HELP_DISPLAYING) RESET_NET_TIMER(sTutorialTimer) ENDIF ENDIF IF IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_PLAYING_TUTORIAL) AND NOT IS_BIT_SET(iBS, SEC_BS_SELL_COOLDOWN_HELP_PLAYED) AND IS_BIT_SET(iBS, SEC_BS_SELL_MISSION_ON_COOLDOWN) SECURO_PRINT_TUTORIAL_HELP("SECURO_SELL_CD", 5000) SET_BIT(iBS, SEC_BS_COOLDOWN_HELP_DISPLAYING) SET_BIT(iBS, SEC_BS_SELL_COOLDOWN_HELP_PLAYED) ENDIF ELSE IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) AND NOT IS_BIT_SET(iBS, SEC_BS_COOLDOWN_HELP_DISPLAYING) RUN_CHECK_ON_ACTIVE_BUY_MISSION_COOLDOWNS() IF IS_MAP_SIDEBAR_OPEN() IF NOT IS_BIT_SET(iBS, SEC_BS_BUY_COOLDOWN_HELP_PLAYED) AND IS_BIT_SET(iBS, SEC_BS_BUY_MISSION_ON_COOLDOWN) AND DOES_PLAYER_OWN_WAREHOUSE_OPEN_IN_SIDEBAR() IF IS_BIT_SET(iWarehouseSellCooldownBS, GET_WAREHOUSE_ID_FOR_OPEN_BUY_SIDE_BAR()) SECURO_PRINT_TUTORIAL_HELP("SECURO_BUY_CD", 5000) SET_BIT(iBS, SEC_BS_COOLDOWN_HELP_DISPLAYING) SET_BIT(iBS, SEC_BS_BUY_COOLDOWN_HELP_PLAYED) ENDIF ENDIF IF NOT IS_BIT_SET(iBS, SEC_BS_SELL_COOLDOWN_HELP_PLAYED) AND NOT IS_BIT_SET(iBS, SEC_BS_COOLDOWN_HELP_DISPLAYING) AND IS_BIT_SET(iBS, SEC_BS_SELL_MISSION_ON_COOLDOWN) AND DOES_PLAYER_OWN_WAREHOUSE_OPEN_IN_SIDEBAR() SECURO_PRINT_TUTORIAL_HELP("SECURO_SELL_CD", 5000) SET_BIT(iBS, SEC_BS_COOLDOWN_HELP_DISPLAYING) SET_BIT(iBS, SEC_BS_SELL_COOLDOWN_HELP_PLAYED) ENDIF ENDIF ENDIF ENDIF ENDPROC SCRIPT CPRINTLN(DEBUG_INTERNET, " started \"", GET_THIS_SCRIPT_NAME(), "\"") iBS = 0 IF IS_PLAYER_IN_WAREHOUSE(PLAYER_ID()) #IF FEATURE_CASINO_HEIST OR WAS_BUSINESS_APP_SRIPT_LAUNCHED_FROM_HUB_APP() AND g_sBusAppManagement.bRunningPrimaryApp = FALSE #ENDIF SET_BIT(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) ENDIF IF IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) mov = REQUEST_SCALEFORM_MOVIE("warehouse") ELSE mov = REQUEST_SCALEFORM_MOVIE("securoserv") g_bSecuroDelayOfficeChairExit = TRUE g_bSecuroQuickExitOfficeChair = FALSE ENDIF HANG_UP_AND_PUT_AWAY_PHONE(TRUE) DISABLE_CELLPHONE(TRUE) WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(mov)) WAIT(0) ENDWHILE IF IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) iCurrentlyInsideWarehouse = GET_WAREHOUSE_PLAYER_IS_IN(PLAYER_ID()) #IF FEATURE_CASINO_HEIST IF WAS_BUSINESS_APP_SRIPT_LAUNCHED_FROM_HUB_APP() iCurrentlyInsideWarehouse = g_sBusAppManagement.iPropertyID ENDIF #ENDIF NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_FREEZE_POSITION) POPULATE_MP_SECUROSERV_SITE_PIN_MAP(TRUE) ELIF IS_PROPERTY_OFFICE(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) #IF FEATURE_CASINO_HEIST OR WAS_BUSINESS_APP_SRIPT_LAUNCHED_FROM_HUB_APP() #ENDIF IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_IN_ANOTHER_PLAYERS_PROPERTY) POPULATE_MP_SECUROSERV_SITE_PIN_MAP(TRUE) ELSE POPULATE_MP_SECUROSERV_SITE_PIN_MAP(FALSE) ENDIF ENDIF #IF FEATURE_CASINO_HEIST IF WAS_BUSINESS_APP_SRIPT_LAUNCHED_FROM_HUB_APP() AND g_sBusAppManagement.bRunningPrimaryApp IF g_sBusAppManagement.bSecuroSpecCargo APP_SECURO_SHOW_PAGE(ciWarehouseStatsPageID) ELSE APP_SECURO_SHOW_PAGE(ciVehicleWHStatsPageID) ENDIF ENDIF #ENDIF START_AUDIO_SCENE("GTAO_Computer_Screen_Active_Scene") SET_BIT(iBS, SEC_BS_DISPLAYING_LOGIN_PAGE) SET_BROWSER_OPEN(TRUE) IF DOES_ENTITY_EXIST(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) vPlayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID(), TRUE) ENDIF Pause_Objective_Text() IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) INIT_ACTIVE_USER_LIST() IF NETWORK_IS_PLAYER_ACTIVE(PLAYER_ID()) AND GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) //AND NOT GB_ARE_PLAYER_BOSS_PRIVILIGES_SUSPENDED_BD(PLAYER_ID()) ADD_PLAYER_TO_ACTIVE_ORGANISATION_LIST(PLAYER_ID(), NATIVE_TO_INT(PLAYER_ID())) ENDIF ENDIF IF HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, SEC_BS_DIALOGUE_TUTORIAL_COMPLETE) ENDIF IF HAVE_ALL_SECURO_HELP_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, SEC_BS_HELP_TEXT_TUTORIAL_COMPLETE) ENDIF SECURO_SETUP_TUTORIAL_DIALOGUE() SET_SHARD_SHOULD_BE_HELD_UP_FOR_OFFICE_SEAT_ANIM(FALSE) THEFEED_PAUSE() IF IS_PC_VERSION() SET_MULTIHEAD_SAFE(TRUE, TRUE, TRUE, TRUE) ENDIF UPDATE_IE_WEBSITE_TUTORIAL_BS() SET_TRANSITION_SESSIONS_CLEAN_UP_ON_CALL_NOW_IF_NEEDED() #IF FEATURE_GEN9_EXCLUSIVE SET_MP_BOOL_CHARACTER_STAT(MP_STAT_DARKNETACCESSED, TRUE) #ENDIF /// main update and render loop WHILE IS_BROWSER_OPEN() IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_EXITING_PROPERTY) OR GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), vPlayerCoords) > 5.0 // Exit CPRINTLN(DEBUG_INTERNET, " Shutting down! Player too far from the coords") CLEANUP_SECUROSERVE() ELIF IS_PAUSE_MENU_ACTIVE_EX() OR IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE) CPRINTLN(DEBUG_INTERNET, " Shutting down! Player opend the pause menu") CLEANUP_SECUROSERVE() ELIF IS_SYSTEM_UI_BEING_DISPLAYED() CPRINTLN(DEBUG_INTERNET, " Shutting down! IS_SYSTEM_UI_BEING_DISPLAYED") CLEANUP_SECUROSERVE(TRUE) ENDIF IF IS_BIT_SET(iBS, SEC_BS_SHOW_CASH_CHANGE_HUD) IF NOT HAS_NET_TIMER_STARTED(stCashChangeHUDTimer) START_NET_TIMER(stCashChangeHUDTimer) ELIF HAS_NET_TIMER_EXPIRED(stCashChangeHUDTimer, 4000) RESET_NET_TIMER(stCashChangeHUDTimer) CLEAR_BIT(iBS, SEC_BS_SHOW_CASH_CHANGE_HUD) ENDIF ENDIF IF NOT IS_BIT_SET(iBS, SEC_BS_DELAY_APP_EXIT_FOR_CONVERSATION) IF g_bBrowserGoToStoreTrigger g_bBrowserNagScreenState = TRUE RENDER_NAG_SCREEN() ELSE RENDER_SECUROSERVE() ENDIF UPDATE_IE_MISSION_COOLDOWN() RUN_MISSION_COOLDOWN_HELP_TEXT() IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) IF NOT IS_BIT_SET(iBS, SEC_BS_DIALOGUE_TUTORIAL_COMPLETE) RUN_SECURO_APP_DIALOGUE_TUTORIAL() SECURO_RUN_TUTORIAL_DIALOGUE() #IF FEATURE_GEN9_EXCLUSIVE RUN_SECURO_APP_HELP_TEXT_INTRO_MISSION_TUTORIAL() #ENDIF ELIF NOT IS_BIT_SET(iBS, SEC_BS_HELP_TEXT_TUTORIAL_COMPLETE) RUN_SECURO_APP_HELP_TEXT_TUTORIAL() ENDIF ELSE IF NOT IS_WAREHOUSE_EMPTY(iCurrentlyInsideWarehouse) RUN_WAREHOUSE_APP_TUTORIAL() ENDIF ENDIF IF IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) PASS_WAREHOUSE_INPUTS_TO_SCALEFORM() CHECK_BUTTON_PRESS_FOR_WAREHOUSE_APP() ELSE PASS_INPUTS_TO_SCALEFORM() CHECK_BUTTON_PRESS() ENDIF IF NOT IS_BIT_SET(iBS, SEC_BS_CURRENTLY_INSIDE_WAREHOUSE) MAINTAIN_ACTIVE_ORGANIZATION_LIST() ENDIF ELSE IF iTutorialDialogueID = -1 OR IS_SCRIPTED_CONVERSATION_ONGOING() CPRINTLN(DEBUG_INTERNET, " Shutting down! buy mission dialoge has started!") SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_SECURO_START_MIS, TRUE) CLEANUP_SECUROSERVE(TRUE) ENDIF CPRINTLN(DEBUG_INTERNET, " Shutting down! Waiting for the buy misssion started dialogue to begin") SECURO_RUN_TUTORIAL_DIALOGUE() HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_MP_MESSAGE) ENDIF WAIT(0) ENDWHILE // Script should never reach here. Always terminate with cleanup function. CASSERTLN(DEBUG_INTERNET, " \"", GET_THIS_SCRIPT_NAME(), "\" should never reach here. Always terminate with cleanup function.") ENDSCRIPT