CONST_INT USE_TU_CHANGES 1 // Includes USING "rage_builtins.sch" USING "globals.sch" USING "cellphone_public.sch" USING "commands_script.sch" USING "commands_misc.sch" USING "commands_graphics.sch" USING "commands_pad.sch" USING "commands_network.sch" USING "website_private.sch" USING "net_ambience.sch" USING "net_saved_vehicles.sch" USING "net_realty_new.sch" USING "net_comms_public.sch" USING "achievement_public.sch" USING "commands_recording.sch" USING "FMMC_Keyboard.sch" //required for onscreen keyboard handling. USING "net_cash_transactions.sch" USING "charsheet_public.sch" USING "net_heartbeat.sch" USING "net_gang_boss.sch" USING "net_office.sch" USING "svm_mission_flow.sch" USING "net_arena_wars_career.sch" USING "net_casino_menu.sch" // Constants CONST_INT SCALEFORM_KEYBOARD_FLAG_INDEX 0 CONST_INT SCALEFORM_BACKBUTTON_FLAG_INDEX 1 CONST_INT SCALEFORM_HISTORY_FLAG_INDEX 2 CONST_INT SCALEFORM_FAVES_COUNT_FLAG_INDEX 3 CONST_INT SCALEFORM_BROWSER_CLOSE 5 CONST_INT SCALEFORM_YACHT_DATA 11 CONST_INT SCALEFORM_OFFICE_DATA 12 CONST_INT SCALEFORM_CLUBHOUSE_DATA 13 CONST_INT SCALEFORM_OFFICE_GARAGE_A_DATA 14 CONST_INT SCALEFORM_OFFICE_GARAGE_B_DATA 15 CONST_INT SCALEFORM_TRUCK_DATA 17 CONST_INT SCALEFORM_PLANE_DATA 18 CONST_INT SCALEFORM_ARENA_WARS_DATA 19 CONST_INT SCALEFORM_CASINO_DATA 11 //url:bugstar:5654253 // Variables BOOL bPanicShutdownStart BOOL bRefreshButtons = FALSE BOOL bShowingBackButton = FALSE BOOL bKeyboardHelp = FALSE BOOL bControlsEnabled = FALSE BOOL bIHidRadar = FALSE BOOL bIDisabledCarRadio = FALSE, bIDisabledAptRadio = FALSE BOOL bUpdatedEyeFindNewsThisFrame = TRUE // used to prevent double update on news when set for child content not being loaded BOOL bActivatedMultiheadBlinders = FALSE // Used to make sure the multihead blinders are cleaned up only if created locally //browser handle SCALEFORM_INDEX mov = NULL SCALEFORM_INDEX buttons = NULL SCALEFORM_INDEX nagScreen = NULL INT iLastClickedPropertyIndex = -1 INT iCustomAptVariant = 1 BOOL bCustomInteriorSelected = FALSE INT iBoughtPropertyIndex = -1 FACTORY_ID eBoughtFactoryIndex = FACTORY_ID_INVALID HANGAR_ID eBoughtHangarIndex = HANGAR_ID_INVALID DEFUNCT_BASE_ID eBoughtDefunctBaseIndex = DEFUNCT_BASE_ID_INVALID NIGHTCLUB_ID eBoughtNightclubIndex = NIGHTCLUB_ID_INVALID ARENA_GARAGE_ID eBoughtArenaIndex = ARENA_GARAGE_ID_INVALID ARCADE_PROPERTY_ID eBoughtArcadeIndex = ARCADE_PROPERTY_ID_INVALID AUTO_SHOP_PROPERTY_ID eBoughtAutoShopIndex = AUTO_SHOP_PROPERTY_ID_INVALID CASINO_APT_ID eBoughtCasinoIndex = CASINO_APARTMENT_ID_INVALID #IF FEATURE_FIXER FIXER_HQ_ID eBoughtFixerHQIndex = FIXER_HQ_ID_INVALID #ENDIF INT iBoughtCasinoPreset = -1 BOOL bPreviousPegasus = FALSE INT ChildInitStage = 0 INT iCurrentSiteTimer = 0 BOOL bTVOn = FALSE INT iTVOnTimeoutFrameCount = -1 BOOL bVideoDisabled = FALSE WEBSITE_INDEX_ENUM eStaticLastSite = INVALID_WEBSITE_INDEX WEBSITE_INDEX_ENUM eStaticCurrentSite = INVALID_WEBSITE_INDEX INT iStaticLastPage = -1 INT iStaticCurrentPage = -1 INT iStaticHistory = -1 BOOL bPopulatePropertySitePinMap = FALSE TEXT_LABEL_63 tl63sPopulatePropertySitePinMap = "" TEXT_LABEL_63 tl63sPropertyResultsWebpage = "" BOOL bLeftShoulder = FALSE BOOL bLeftShoulder2 = FALSE BOOL bRightShoulder = FALSE BOOL bRightShoulder2 = FALSE BOOL bDPadUp = FALSE BOOL bDPadDown = FALSE BOOL bDPadLeft = FALSE BOOL bDPadRight = FALSE BOOL bPadSelect = FALSE BOOL bPadTriangle = FALSE BOOL bPadCross = FALSE BOOL bPadCircle = FALSE BOOL bMouseAccept = FALSE INT iPadLeftX = 0 INT iPadLeftY = 0 INT iPadRightX = 0 INT iPadRightY = 0 INT iPadLeftXLast = 0 INT iPadLeftYLast = 0 INT iPadRightXLast = 0 INT iPadRightYLast = 0 FLOAT iCursorX = 0.0 FLOAT iCursorY = 0.0 FLOAT iCursorXLast = 0.0 FLOAT iCursorYLast = 0.0 INT iBroadcast_Disable_Recording_Timer TEXT_LABEL_63 lastSiteURL BOOL bBrowserShoppingSavePending = FALSE //BOOL bBoughtProperty = FALSE FLOAT fMouseWheelScrollSpeed = 0.0 INT iTutTimer INT iTutstage = 0 BOOL bTradeHelpPrinted = FALSE SCALEFORM_RETURN_INDEX currentRolloverReturnIndex SITE_BUYABLE_VEHICLE eCursorInputProcessed = UNSET_BUYABLE_VEHICLE BOOL bWaitingForSelectionReturn = FALSE #IF IS_DEBUG_BUILD BOOL bDrawDebugStuff = FALSE, bSetDebugLinesAndSpheresDrawingActive = FALSE #ENDIF structPedsForConversation spfc BOOL bProcessingBasket = FALSE INT iProcessingBasketStage = SHOP_BASKET_STAGE_ADD eMOUSE_POINTER_STYLE eSet_mouse_pointer_style = INT_TO_ENUM(eMOUSE_POINTER_STYLE, -1) BOOL bBypassFakeCash = FALSE BOOL bSetPlayerProofsWhileProcessingBasket = FALSE CONST_INT ciAUTO_CLOSE_DELAY_TIME_DEFAULT 3000 // 3 seconds SCRIPT_TIMER timerAutoCloseDelay INT iAutoCloseDelayTime = ciAUTO_CLOSE_DELAY_TIME_DEFAULT BOOL bDoLoadStream = FALSE, bStreamLoaded = FALSE INT epsTutorialLast = -1 BOOL bDoLoadAWStream = FALSE, bAWStreamLoaded = FALSE ENUM MP_PROPERTY_SITE_FAIL_REASON MPSFR_UNSET ,MPSFR_NOT_UNLOCKED ,MPSFR_INSUFFICIENT_CASH ,MPSFR_INSUFFCIENT_RANK ,MPSFR_INSUFFCIENT_RANK_PENDING ,MPSFR_CANCELED ,MPSFR_NOT_SAFE ,MPSFR_ON_MISSION ,MPSFR_PAID_RESUPPLY ,MPSFR_HAS_STOCK ENDENUM MP_PROPERTY_SITE_FAIL_REASON mpPropertySiteFailReason = MPSFR_UNSET ENUM VEHICLE_SITE_FAIL_REASON VSFR_UNSET, VSFR_NO_STORAGE, VSFR_NO_MONEY, VSFR_INVALID_CATEGORY, VSFR_ALREADY_OWNED, VSFR_NO_INV_SPACE, VSFR_BIGASS_NOT_UNLOCKED, VSFR_INSUFFCIENT_RANK, VSFR_INSUFFCIENT_RANK_PENDING, VSFR_CANCELED, VSFR_NOT_SAFE ENDENUM VEHICLE_SITE_FAIL_REASON lastVehicleFailReason = VSFR_UNSET SITE_BUYABLE_VEHICLE lastVehicleFailVehicle = UNSET_BUYABLE_VEHICLE //Player_to_Player_Email vars and consts. /* STRUCT struct_email_ReceivedData INT RecID INT RecPosixTime TEXT_LABEL_31 RecSenderName GAMER_HANDLE RecSenderHandle TEXT_LABEL_63 RecSubject[2] TEXT_LABEL_63 RecContents[12] ENDSTRUCT */ //Struct used to receive email data from a single ID scrEmail_Data single_email_Received_Data scrEmail_Data single_email_Sending_Data BOOL b_MessageBodyFilledThisCycle = FALSE //Added for #1890436 /* Here's the core struct from commands_socialclub.sch for easy reference STRUCT scrEmail_Data INT Id INT CreatePosixTime TEXT_LABEL_31 SenderName GAMER_HANDLE SenderHandle TEXT_LABEL_63 Subject[2] TEXT_LABEL_63 Contents[16] ENDSTRUCT */ //Sony / MS system onscreen keyboard handling routines from FMMC_Keyboard.sch STRUCT KEYBOARD_DATA OSK_STATUS eStatus INT iProfanityToken INT iCurrentStatus ENDSTRUCT KEYBOARD_DATA KeyBoardData BOOL b_Creating_Email_Message_Body_from_OSK = FALSE BOOL b_Creating_Email_Message_Subject_from_OSK = FALSE INT iStringLengthInCharacters CONST_INT c_MAX_SEGMENTS 10 TEXT_LABEL_63 EmailMessageSegments_to_Send[c_MAX_SEGMENTS] TEXT_LABEL_63 EmailSubjectSegments_to_Send[2] BOOL b_DummyUnrefHacks = FALSE ENUM e_EmailBrowsingState eDORMANT, eINITIAL, eRETRIEVAL, eSF_FILLING, eNEUTRAL_BROWSING, eCOMPOSING, eSTATUS_UPDATE ENDENUM e_EmailBrowsingState EmailState eEMAIL_RETRIEVAL_STATUS CurrentRetrievalStatus UGC_DATE SingleEmailTimeStamp //Friend Slot handling vars. //Original working regime //CONST_INT c_MAX_EMAIL_CONTACTS 50 //(10 contacts is roughly 200 increase in stack size) //New trial //BOOL b_StatReaderNeedsToBail = FALSE GAMER_HANDLE gh_ProfileViewHandle BOOL b_DisplayProfileViewHelp = FALSE SCALEFORM_INDEX SF_EyefindInstButtonsIndex INT i_Number_Of_Contacts_In_List = 0 INT FriendSlot_OriginIndex = 0 //INT FriendSlot_StartingIndex = 0 //We might need this in the near future. BOOL b_EmailClickDetected = FALSE //Email Batch tracking. INT i_InboxDepth = 0 INT i_CurrentlySelectedEmail = 0 BOOL b_MovedToComposeFromReplyButton = FALSE INT LastDeletedEmailPosix //Keep a record of the last deleted email so we can make sure not to include it again in the inbox. The deletion can take a minute or so at the cloud end. BOOL b_ReachedOldestEmail = FALSE INT NumberOfEmailsOnThisPage = 0 //INT iPreviousPosixTime = 0 TEXT_LABEL_63 PlayerHandleGamerNameStringForScaleform //Was a string, but changed for #2280703. Was being overwritten in memory. BOOL b_WaitingToRetrieveGamerTag = FALSE BOOL b_GamertagGrabSignalledForceClose = FALSE TEXT_LABEL_63 DisplayNameReturnName[1] #IF IS_DEBUG_BUILD BOOL b_debug_CatalogueMissingEntries #ENDIF GB_KEYBOARD_DATA GBKeyBoardData BOOL bRunningOrgNameKeyboard = FALSE INT iSVM_Unlock_Feed_Message = 0 INT iWVM_Unlock_Feed_Message = 0 INT iFDS_Unlock_Feed_Message = 0 INT iBBS_Unlock_Feed_Message = 0 INT iPurchaseHelpBS CONST_INT PURCHASE_HELP_BS_SPVE0A 0 CONST_INT PURCHASE_HELP_BS_SPVE0B 1 CONST_INT PURCHASE_HELP_BS_BAEQ2A 2 CONST_INT PURCHASE_HELP_BS_FDSE0DB 3 CONST_INT PURCHASE_HELP_BS_FDSE0HA 4 CONST_INT PURCHASE_HELP_BS_HACKT2 5 CONST_INT PURCHASE_HELP_BS_BBSE0NC 6 CONST_INT PURCHASE_HELP_BS_BBSE0HT 7 CONST_INT PURCHASE_HELP_BS_CASWEB_0_FOR_FIRST_TIME 8 //#IF FEATURE_HEIST_ISLAND //CONST_INT PURCHASE_HELP_BS_SUBMARINE 9 //#ENDIF PROC PS3_360_ButtonSetup() LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_EyefindInstButtonsIndex, "SET_CLEAR_SPACE", 200) LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_EyefindInstButtonsIndex, "SET_DATA_SLOT_EMPTY", 3) //Will need to use something like this in next_gen to support PC build //EYEFIND_INSTRUCTIONAL_BUTTON_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(SF_EyefindInstButtonsIndex, "SET_DATA_SLOT", 0, //GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(PLAYER_CONTROL, INPUT_CELLPHONE_CANCEL),//GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL), //"CELL_281") //Exit IF IS_PS3_VERSION() LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(SF_EyefindInstButtonsIndex, "SET_DATA_SLOT", 0, TO_FLOAT(ENUM_TO_INT(GET_CONTROL_INSTRUCTIONAL_BUTTON(FRONTEND_CONTROL, INPUT_CELLPHONE_EXTRA_OPTION))),//TO_FLOAT(ENUM_TO_INT(ICON_BUTTON_B)), INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, "CELL_EMAIL_PROF") //View Profile of Recipient. #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("AppInternet - Setting Profile button for PS3.") cdPrintnl() #ENDIF ENDIF IF IS_XBOX360_VERSION() LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(SF_EyefindInstButtonsIndex, "SET_DATA_SLOT", 0, TO_FLOAT(ENUM_TO_INT(GET_CONTROL_INSTRUCTIONAL_BUTTON(FRONTEND_CONTROL, INPUT_CELLPHONE_EXTRA_OPTION))),//TO_FLOAT(ENUM_TO_INT(ICON_BUTTON_B)), INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, INVALID_SCALEFORM_PARAM, "CELL_EMAIL_CAR3") //View Gamer Card of Recipient. #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("AppInternet - Setting Profile button for 360.") cdPrintnl() #ENDIF ENDIF LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_EyefindInstButtonsIndex, "DRAW_INSTRUCTIONAL_BUTTONS", 0) // Set to 1 for stacked. ENDPROC PROC NG_ViewProfile_ButtonSetup() //Needs to use slightly different regime from PS3 / 360 to support PC custom controls. LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_EyefindInstButtonsIndex, "SET_CLEAR_SPACE", 200) LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_EyefindInstButtonsIndex, "SET_DATA_SLOT_EMPTY", 3) //Will need to use something like this in next_gen to support PC build IF IS_PLAYSTATION_PLATFORM() INSTRUCTIONAL_BUTTON_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(SF_EyefindInstButtonsIndex, "SET_DATA_SLOT", 0, GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(PLAYER_CONTROL, INPUT_CELLPHONE_EXTRA_OPTION), "CELL_EMAIL_PROF") //View Profile of Recipient. ENDIF IF IS_XBOX_PLATFORM() INSTRUCTIONAL_BUTTON_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(SF_EyefindInstButtonsIndex, "SET_DATA_SLOT", 0, GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(PLAYER_CONTROL, INPUT_CELLPHONE_EXTRA_OPTION), "CELL_EMAIL_CARO") //View Gamercard of Recipient. ENDIF LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_EyefindInstButtonsIndex, "DRAW_INSTRUCTIONAL_BUTTONS", 0) // Set to 1 for stacked. ENDPROC //Added for 3499109. FUNC BOOL NETWORK_IS_VALID_EYEFIND_FRIEND( GAMER_HANDLE passedHandle) IF IS_GAMER_HANDLE_VALID (passedHandle) IF NETWORK_IS_FRIEND (passedHandle) RETURN TRUE ELSE RETURN FALSE ENDIF ELSE #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("AppInternet - NETWORK_IS_VALID_EYEFIND_FRIEND reports gamer handle was invalid.") cdPrintnl() #ENDIF RETURN FALSE ENDIF ENDFUNC //Pinched from other MP keyboard work but may need specific modification so using a standalone copy in here. FUNC BOOL Is_Email_String_Blank_Spaces(STRING stPassed, INT iLength) //stPassed = " " INT iLoop FOR iLoop = 0 TO (iLength - 2) //is the Nth character is NOT equal to a space then it's not a blank string. IF NOT ARE_STRINGS_EQUAL(GET_CHARACTER_FROM_AUDIO_CONVERSATION_FILENAME_WITH_BYTE_LIMIT(stPassed, iLoop, iLoop + 1, 1), " ") RETURN FALSE ENDIF ENDFOR RETURN TRUE ENDFUNC PROC ClearOutEmailBodyContents() #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("AppInternet - ClearOutEmailBodyContents has been called.") cdPrintnl() #ENDIF //Deliberately not done in a loop. Using this to test various segment combinations here individually... EmailMessageSegments_to_Send[0] = "" EmailMessageSegments_to_Send[1] = "" EmailMessageSegments_to_Send[2] = "" EmailMessageSegments_to_Send[3] = "" EmailMessageSegments_to_Send[4] = "" EmailMessageSegments_to_Send[5] = "" EmailMessageSegments_to_Send[6] = "" EmailMessageSegments_to_Send[7] = "" EmailMessageSegments_to_Send[8] = "" EmailMessageSegments_to_Send[9] = "" ENDPROC /* Experimented with putting these back temporarily to see if they had any impact on how Eyefind Email was working with SF in dev_net. - Steve T. Only Email related script will refer to them. Update... Wrapped functions seemingly redundant in NG I think. Leaving commented block as a reminder of change." INT funcPagIdLast = 0 FUNC INT GET_CURRENT_WEBPAGE_ID_WRAPPED() // END_SCALEFORM_MOVIE_METHOD_INT() INT raw = GET_CURRENT_WEBPAGE_ID() IF raw = 0 IF funcPagIdLast != 0 RETURN funcPagIdLast ENDIF ENDIF funcPagIdLast = raw RETURN funcPagIdLast ENDFUNC INT funcSitIdLast = 0 FUNC INT GET_CURRENT_WEBSITE_ID_WRAPPED() // fudret INT raw = GET_CURRENT_WEBSITE_ID() IF raw = 0 IF funcSitIdLast != 0 RETURN funcSitIdLast ENDIF ENDIF funcSitIdLast = raw RETURN funcSitIdLast ENDFUNC */ PROC Add_MP_Friend_to_Scaleform_Slot(STRING playerName) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_INTERNET, "Populating friend slot ") PRINTINT(FriendSlot_OriginIndex) PRINTNL() #ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(FriendSlot_OriginIndex + 10) //From Eddie : The contacts list starts from slot 10. You can pass as many as you want. BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_2000") //~a~ //This pane auto-condenses the font. ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(playerName) END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() FriendSlot_OriginIndex ++ //Critical! Conor, this is needed for a navigation back up, so when something is added to the slot it needs incremented. i_Number_Of_Contacts_In_List ++ #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_INTERNET, "NumContacts in list after friend additions is ") PRINTINT(i_Number_Of_Contacts_In_List) PRINTNL() #ENDIF ENDPROC BOOL cVis = TRUE PROC BROWSER_CURSOR_LOADING(BOOL Show) IF cVis = Show EXIT ENDIF CPRINTLN(DEBUG_INTERNET, "BROWSER_CURSOR_LOADING: ", PICK_STRING(Show, "Show", "Hide")) IF Show BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_CURSOR") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov, "HIDE_CURSOR") END_SCALEFORM_MOVIE_METHOD() ENDIF cVis = Show ENDPROC /* PROC BROWSER_SHOW_CURSOR(BOOL Show) IF cVis = Show EXIT ENDIF cVis = Show BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_CURSOR") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(Show) END_SCALEFORM_MOVIE_METHOD() ENDPROC */ INT iCursorState = HASH("ARROW") //"ARROW" "HAND" "TEXT" "BUSY" PROC BROWSER_SET_CURSOR_STATE(STRING Show) INT iShow = GET_HASH_KEY(Show) IF iCursorState = iShow CDEBUG1LN(DEBUG_INTERNET, "(ignore) BROWSER_SET_CURSOR_STATE: \"", Show, "\"") EXIT ENDIF CPRINTLN(DEBUG_INTERNET, "BROWSER_SET_CURSOR_STATE: \"", Show, "\"") iCursorState = iShow BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_CURSOR_STATE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(Show) END_SCALEFORM_MOVIE_METHOD() ENDPROC FUNC INT GET_INDEX_OF_FRIEND_ARRAY_FOR_EMAIL(INT iLoopIndex) /* #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - GET_INDEX_OF_FRIEND_ARRAY_FOR_EMAIL ") cdPrintnl() #ENDIF */ INT iIndex = iLoopIndex - g_sPlayers.plNumPlayers IF iIndex >= c_MAX_EMAIL_CONTACTS iIndex = c_MAX_EMAIL_CONTACTS-1 ENDIF RETURN iIndex ENDFUNC FUNC INT GET_FRIEND_INDEX_FROM_GAMER_HANDLE(GAMER_HANDLE& PassedHandle) INT iMaxFriends = NETWORK_GET_FRIEND_COUNT() IF iMaxFriends > 100 iMaxFriends = 100 ENDIF GAMER_HANDLE friendHandle INT iLoop = 0 REPEAT iMaxFriends iLoop friendHandle = GET_GAMER_HANDLE_FRIEND(iLoop) IF NETWORK_ARE_HANDLES_THE_SAME(friendHandle, PassedHandle) RETURN iLoop ENDIF ENDREPEAT RETURN -1 ENDFUNC FUNC STRING EyefindGetGamerTagFromHandle(GAMER_HANDLE& PassedHandle) INT b_WaitingToRetrieveDurangoDisplayName = 0 //Neutral. Normally ignored, but if the Xbox One displayname retrieval fails, we can signal the PC / 360 routine to kick in via this flag. //Xbox One TRC requires the display name of a gamer to be displayed if available. IF IS_XBOX_PLATFORM() OR IS_PLAYSTATION_PLATFORM() //TEXT_LABEL_63 DisplayNameReturnName[1] DisplayNameReturnName[0] = "Durango_Empty" b_WaitingToRetrieveDurangoDisplayName = 1 //Ongoing STRING ReturnName BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //Disable cancel button SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(5) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) END_SCALEFORM_MOVIE_METHOD() BROWSER_SET_CURSOR_STATE("ARROW") //Vars for NETWORK_DISPLAYNAMES... native processing. GAMER_HANDLE gamerHandleArray_To_Process[1] gamerHandleArray_To_Process[0] = PassedHandle INT i_DisplayNameRequestID = -99 //Dummy value for safety. INT i_RequestResult = -99 //Dummy value for safety. INT i_GrabStage = 0 i_DisplayNameRequestID = NETWORK_DISPLAYNAMES_FROM_HANDLES_START (gamerHandleArray_To_Process, 1) IF i_DisplayNameRequestID > - 1 //Return value less than zero signals an error. i_GrabStage = 1 //Okay to continue.. ELSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - NETWORK_DISPLAYNAMES_FROM_HANDLES_START failed!") cdPrintnl() #ENDIF //Failed displayname retrieval for Xbox One, set the flag to try and get the standard gamertag instead as a failsafe further down in the 360 / PC routine b_WaitingToRetrieveDurangoDisplayName = -1 ENDIF SETTIMERA(0) WHILE b_WaitingToRetrieveDurangoDisplayName = 1 //Ongoing. NETWORK_DISPLAYNAMES_FROM_HANDLES_START must have been okay. AND TIMERA() < 7000 //Make sure we draw the browser movie this frame. DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0) DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0) DISABLE_CELLPHONE_THIS_FRAME_ONLY() IF i_GrabStage = 1 i_RequestResult = NETWORK_GET_DISPLAYNAMES_FROM_HANDLES(i_DisplayNameRequestID, DisplayNameReturnName, 1) IF i_RequestResult = 0 //Succeeded! Return name now. #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - NETWORK_GET_DISPLAYNAMES_FROM_HANDLES succeeded. Returning ") cdPrintstring(TEXT_LABEL_TO_STRING(DisplayNameReturnName[0])) cdPrintnl() #ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //Re-enable cancel button before any return... SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(5) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) END_SCALEFORM_MOVIE_METHOD() //Proper! ReturnName = TEXT_LABEL_TO_STRING(DisplayNameReturnName[0]) /* DisplayName23Test = DisplayNameReturnName[0] #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Test 23 Returning ") cdPrintstring(TEXT_LABEL_TO_STRING(DisplayName23Test)) cdPrintnl() #ENDIF ReturnName = TEXT_LABEL_TO_STRING(DisplayName23Test) */ RETURN ReturnName ELSE IF i_RequestResult = -1 //Failed! #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - WARNING! NETWORK_GET_DISPLAYNAMES_FROM_HANDLES failed whilst processing after successful start. Will attempt to get gamertag.") cdPrintnl() #ENDIF b_WaitingToRetrieveDurangoDisplayName = -1 //Failed displayname retrieval for Xbox One, set the flag to try and get the gamertag instead as a failsafe further down. ELSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - NETWORK_GET_DISPLAYNAMES_FROM_HANDLES currently processing!") cdPrintnl() #ENDIF ENDIF ENDIF ENDIF ENDWHILE IF TIMERA() > 6999 #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Timed out whilst trying to retrieve Xbox One Display Name...") cdPrintnl() #ENDIF ENDIF ENDIF //End of IS_XBOX_PLATFORM condition check. IF IS_XBOX360_VERSION() OR IS_PC_VERSION() OR b_WaitingToRetrieveDurangoDisplayName = -1 //Failed displayname retrieval for Xbox One, let's try and get the gamertag instead as a failsafe. //STRING ReturnName = "Unknown" STRING ReturnName = GET_FILENAME_FOR_AUDIO_CONVERSATION ("CELL_1091") //Extract the "Unknown" value from an existing token for localisation purposes. #2280703 b_WaitingToRetrieveGamerTag = TRUE #IF IS_DEBUG_BUILD IF b_WaitingToRetrieveDurangoDisplayName = -1 cdPrintstring("AppInternet - Trying to get failsafe gamertag for Xbox One!") cdPrintnl() ENDIF #ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //Disable cancel button SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(5) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) END_SCALEFORM_MOVIE_METHOD() BROWSER_SET_CURSOR_STATE("ARROW") INT i_GrabStage = 0 IF NETWORK_GAMERTAG_FROM_HANDLE_START(PassedHandle) i_GrabStage = 1 ELSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Failed gamertag grab process at HANDLE START, aborting grab and returning Unknown from token as a precaution") cdPrintnl() #ENDIF //For bug 2215497, I'm just going to return "Unknown" for the gamertag if there's a problem with HANDLE_START so we can identify any net issues more easily. //b_GamertagGrabSignalledForceClose = TRUE // Didn't even start Gamertag process, close browseer b_WaitingToRetrieveGamerTag = FALSE ENDIF SETTIMERA(0) WHILE b_WaitingToRetrieveGamerTag = TRUE AND TIMERA() < 7000 //Make sure we draw the browser movie this frame. DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0) DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0) DISABLE_CELLPHONE_THIS_FRAME_ONLY() //PASS_INPUTS_TO_BROWSER(mov) //Nope, called too far down and a bit dangerous it seems. IF i_GrabStage = 1 IF NETWORK_GAMERTAG_FROM_HANDLE_PENDING() //Deliberately spam this whilst grabbing... #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Retrieval of Xbox GamerTag pending...") cdPrintnl() #ENDIF ELSE IF NETWORK_GAMERTAG_FROM_HANDLE_SUCCEEDED() i_GrabStage = 2 ReturnName = NETWORK_GET_GAMERTAG_FROM_HANDLE(PassedHandle) #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Retrieval of Xbox GamerTag succeeded!") cdPrintnl() #ENDIF b_WaitingToRetrieveGamerTag = FALSE ELSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Gamertag grab process no longer pending but did not succeed.") cdPrintnl() #ENDIF b_GamertagGrabSignalledForceClose = TRUE // Didn't even start Gamertag process, close browseer b_WaitingToRetrieveGamerTag = FALSE ENDIF ENDIF ENDIF ENDWHILE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //Re-enable cancel button before any return... SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(5) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) END_SCALEFORM_MOVIE_METHOD() IF b_WaitingToRetrieveGamerTag = TRUE //Must have timed out if the timer and bool are both true on exit of the while loop AND TIMERA() > 6999 CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: Timed out whilst trying to retrieve Xbox GamerTag.") #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Timed out whilst trying to retrieve Xbox GamerTag...") cdPrintnl() #ENDIF b_GamertagGrabSignalledForceClose = TRUE // Didn't retrieve Gamertag, close browseer b_WaitingToRetrieveGamerTag = FALSE ENDIF #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Retrieval process of Xbox GamerTag concluded. Returned string is ") cdPrintstring(ReturnName) cdPrintnl() #ENDIF b_WaitingToRetrieveGamerTag = FALSE //FAILSAFE RETURN ReturnName // ELIF IS_PLAYSTATION_PLATFORM() // INT iFriend = GET_FRIEND_INDEX_FROM_GAMER_HANDLE(PassedHandle) // #IF IS_DEBUG_BUILD // CDEBUG1LN (DEBUG_CELL_DIALOG, "AppInternet ST_Jan15 PS4 - EyefindGetGamerTagFromHandle() - strGamerTag: ", NETWORK_GET_GAMERTAG_FROM_HANDLE(PassedHandle)) // CDEBUG1LN (DEBUG_CELL_DIALOG, "AppInternet ST_Jan15 PS4 - EyefindGetGamerTagFromHandle() - iFriend: ", iFriend) // #ENDIF // RETURN NETWORK_GET_FRIEND_NAME(iFriend) ELSE //PS3 or PS4 /* 2170824 - Nick Snell fixed it so we could get the gamertag from gamer_handle. It uses the same pipeline as 360 or Xbone now. IF IS_PC_VERSION() #IF IS_DEBUG_BUILD cdPrintstring ("Getting PC displayname ") cdPrintnl() #ENDIF //RETURN NETWORK_MEMBER_ID_FROM_GAMER_HANDLE(PassedHandle)//("TestPCHandle") RETURN ("Contact name")//NETWORK_PLAYER_GET_NAME(NETWORK_GET_PLAYER_FROM_GAMER_HANDLE(PassedHandle)) ELSE */ #IF IS_DEBUG_BUILD cdPrintstring ("AppInternet ST_Jan15 PS4 - EyefindGetGamerTagFromHandle() grabbed ") cdPrintstring (NETWORK_GET_GAMERTAG_FROM_HANDLE(PassedHandle)) cdPrintnl() #ENDIF RETURN (NETWORK_GET_GAMERTAG_FROM_HANDLE(PassedHandle)) //ENDIF ENDIF ENDFUNC // PURPOSE: Clear the PlayerList array PROC Clear_PlayerList_Details_For_Email()//(m_structPlayerListEmail& g_sPlayers) INT tempLoop = 0 GAMER_INFO emptyGamer GAMER_HANDLE emptyHandle REPEAT NUM_NETWORK_PLAYERS tempLoop g_sPlayers.plPlayers[tempLoop] = INVALID_PLAYER_INDEX() ENDREPEAT tempLoop = 0 REPEAT c_MAX_EMAIL_CONTACTS tempLoop //Old working //g_sPlayers.plFriends[tempLoop] = emptyGamer //New trial g_sPlayers.plFriendsHandle[tempLoop] = emptyHandle ENDREPEAT g_sPlayers.m_selectedPlayerSlot = 0 g_sPlayers.plNumPlayers = 0 g_sPlayers.plTotalNumContacts = 0 //g_sPlayers.M_selectedPlayerClanName = "" g_sPlayers.selectedPlayerHandle = emptyGamer.Handle g_sPlayers.selectedPlayerName = "" #IF IS_DEBUG_BUILD NET_PRINT("AppInternet - Clearing Player list") NET_NL() #ENDIF ENDPROC PROC Update_Compose_Recipient_Subject_Body() IF b_MovedToComposeFromReplyButton = TRUE //Clear the recipient list... SC_EMAIL_MESSAGE_CLEAR_RECIP_LIST() b_DisplayProfileViewHelp = FALSE #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("AppInternet - Update_Compose_Recipient_Subject_Body called from REPLY button. Clearing old recipient list.") cdPrintnl() #ENDIF b_MovedToComposeFromReplyButton = FALSE //Need to mimic this data ( which is usually set up by the player clicking a recipient and entering a subject, so the reply can be sent. g_sPlayers.selectedPlayerHandle = single_email_Received_Data.SenderHandle //Get and store display name here! PlayerHandleGamerNameStringForScaleform = EyefindGetGamerTagFromHandle((single_email_Received_Data.SenderHandle)) EmailSubjectSegments_to_Send[0] = single_email_Received_Data.Subject[0] EmailSubjectSegments_to_Send[1] = single_email_Received_Data.Subject[1] //"single_email_Received_Data" contains the data from the last selected email before reply was selected in Player_to_Player_Email_Main() /* Here's the core struct from commands_socialclub.sch for easy reference STRUCT scrEmail_Data INT Id INT CreatePosixTime TEXT_LABEL_31 SenderName GAMER_HANDLE SenderHandle TEXT_LABEL_63 Subject[2] TEXT_LABEL_63 Contents[16] ENDSTRUCT */ //We need to add the "reply to" player handle to recipient list after a check for comms privileges BOOL b_CommunicationAllowed = TRUE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, gamertag from selected Reply to handle was ") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring(EyefindGetGamerTagFromHandle((single_email_Received_Data.SenderHandle))) cdPrintnl() #ENDIF IF NOT IS_GAMER_HANDLE_VALID(single_email_Received_Data.SenderHandle) b_CommunicationAllowed = FALSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, Preventing communication as Gamer Handle not valid for this replied to player... ") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle((single_email_Received_Data.SenderHandle))) cdPrintnl() #ENDIF ELSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, Gamer handle valid for replied to player. ") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle((single_email_Received_Data.SenderHandle))) cdPrintnl() #ENDIF ENDIF //Part 1. Expanded this for 3291196 - Will block any reply attempt to any user who cannot be contacted through TEXT_CHAT or is no longer a friend. IF (NETWORK_CHECK_TEXT_COMMUNICATION_PRIVILEGES() = FALSE) OR (NETWORK_IS_VALID_EYEFIND_FRIEND(single_email_Received_Data.SenderHandle) = FALSE) //Add this check for offline problem. At least we'll know the two users are still friends. b_CommunicationAllowed = FALSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, Sender has no text communication privileges or is not a friend. Communication prevented for this replied to user..") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle((single_email_Received_Data.SenderHandle))) cdPrintnl() #ENDIF ENDIF IF NETWORK_IS_GAMER_MUTED_BY_ME(single_email_Received_Data.SenderHandle) OR NETWORK_IS_GAMER_BLOCKED_BY_ME((single_email_Received_Data.SenderHandle)) OR NETWORK_AM_I_MUTED_BY_GAMER((single_email_Received_Data.SenderHandle)) OR NETWORK_AM_I_BLOCKED_BY_GAMER((single_email_Received_Data.SenderHandle)) b_CommunicationAllowed = FALSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, Communication prevented for this replied to player... ") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle((single_email_Received_Data.SenderHandle))) cdPrintnl() #ENDIF ENDIF //Put in test block for Social Club to prevent players attempting to reply to Eyefind messages from Social Club. /* IF ARE_STRINGS_EQUAL ("stevet2RSN", single_email_Received_Data.Sendername) //Needs Social Club sendername here, rather than SteveT secondary test. b_CommunicationAllowed = FALSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, Communication prevented for this reply. Social Club account originated message.") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle((single_email_Received_Data.SenderHandle))) cdPrintnl() #ENDIF ENDIF */ IF b_CommunicationAllowed = FALSE //Should be FALSE! //Jump to Page 9 to display a message indicating communication is blocked for the selected gamerhandle BEGIN_SCALEFORM_MOVIE_METHOD(mov,"GO_TO_WEBPAGE") BEGIN_TEXT_COMMAND_SCALEFORM_STRING("STRING") ADD_TEXT_COMPONENT_SUBSTRING_WEBSITE("WWW_EYEFIND_INFO_S_EMAILSTATUS") END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(10) IF ARE_STRINGS_EQUAL (PlayerHandleGamerNameStringForScaleform, "") //Potential fix for 2131480 BEGIN_TEXT_COMMAND_SCALEFORM_STRING("CELL_EMAIL_ERR") END_TEXT_COMMAND_SCALEFORM_STRING() #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Communication not allowed but gamerstring was empty - 1. Displaying generic message.") cdPrintnl() #ENDIF ELSE //BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_BLK") //~a~ cannot be contacted at this time. BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_CBLK") //~a~ cannot be contacted at this time. Condensed version. ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (PlayerHandleGamerNameStringForScaleform) //ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) END_TEXT_COMMAND_SCALEFORM_STRING() ENDIF END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT") //Critical! Need to update view END_SCALEFORM_MOVIE_METHOD() #IF IS_DEBUG_BUILD cdPrintstring ("App Internet - Update_Compose_Recipient_Subject_Body() communication block warning for ") cdPrintstring (PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) cdPrintnl() #ENDIF EmailState = eSTATUS_UPDATE //Critical! ENDIF IF b_CommunicationAllowed = TRUE AND (IS_GAMER_HANDLE_VALID(single_email_Received_Data.SenderHandle) OR bg_bBypassValidGamerCheck) SC_EMAIL_MESSAGE_PUSH_GAMER_TO_RECIP_LIST((single_email_Received_Data.SenderHandle)) gh_ProfileViewHandle = single_email_Received_Data.SenderHandle //PS3_360_ButtonSetup() IF NOT IS_PC_VERSION() b_DisplayProfileViewHelp = TRUE NG_ViewProfile_ButtonSetup() ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9) BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_CONDFNH") //~a~ ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(PlayerHandleGamerNameStringForScaleform) //ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(EyefindGetGamerTagFromHandle(single_email_Received_Data.SenderHandle)) END_TEXT_COMMAND_SCALEFORM_STRING() BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_SUBJ") //~a~ ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Subject[0]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Subject[1]) END_TEXT_COMMAND_SCALEFORM_STRING() BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_BCON") //~a~ ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME ("") ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME ("") ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME ("") ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME ("") ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME ("") ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME ("") ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME ("") ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME ("") ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME ("") ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME ("") END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() ENDIF ELSE #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("AppInternet - Update_Compose_Recipient_Subject_Body called from keyboard entry routines.") cdPrintnl() #ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9) BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_CONDFNH") //~a~ ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (PlayerHandleGamerNameStringForScaleform) //ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) END_TEXT_COMMAND_SCALEFORM_STRING() BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_SUBJ") //~a~ ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailSubjectSegments_to_Send[0]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailSubjectSegments_to_Send[1]) END_TEXT_COMMAND_SCALEFORM_STRING() //STRING s_CombinedContents //Ask Graeme about this! //s_CombinedContents = CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[0]) //s_CombinedContents += "s_CombinedContents" /* s_CombinedContents += CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[1]) s_CombinedContents += CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[2]) s_CombinedContents += CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[3]) s_CombinedContents += CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[4]) s_CombinedContents += CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[5]) s_CombinedContents += CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[6]) s_CombinedContents += CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[7]) s_CombinedContents += CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[8]) s_CombinedContents += CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[9]) s_CombinedContents += CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[10]) s_CombinedContents += CONVERT_TEXT_LABEL_TO_STRING(single_email_Received_Data.Contents[11]) */ //#IF IS_DEBUG_BUILD //cdPrintstring(s_CombinedContents) //#ENDIF IF b_MessageBodyFilledThisCycle = FALSE //Makes sure that any old message body contents don't appear in here. If it has been filled prior to the update then go ahead and fill with the data. ClearOutEmailBodyContents() ENDIF BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_BCON") //~a~ ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailMessageSegments_to_Send[0]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailMessageSegments_to_Send[1]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailMessageSegments_to_Send[2]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailMessageSegments_to_Send[3]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailMessageSegments_to_Send[4]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailMessageSegments_to_Send[5]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailMessageSegments_to_Send[6]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailMessageSegments_to_Send[7]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailMessageSegments_to_Send[8]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (EmailMessageSegments_to_Send[9]) END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT") //Critical! Need to update view END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC Place_MP_Friends_in_EmailContactSlots() // Gather the details for all other players (ignoring current player) // KGM 3/8/11: For now, just create a list of players in the network game - unsorted, etc PLAYER_INDEX thisPlayer = NULL INT thisSlot = 0 INT tempLoop = 0 GAMER_HANDLE friendHandle i_Number_Of_Contacts_In_List = 0 // Critical! Defaulting this to zero consistently as no story characters are included at present. //Critical. FriendSlot_OriginIndex = i_Number_Of_Contacts_In_List //Marks the scaleform slot where the story contacts finished and the friends should start. //Critical, Conor, we need to keep this so we know where the friends slots start from when a slot is selected. //FriendSlot_StartingIndex = FriendSlot_OriginIndex Clear_PlayerList_Details_For_Email() BOOL Human_Contacts_Barred_During_MP_Tutorial = FALSE IF g_bInMultiplayer IF ARE_ALL_INSTANCED_TUTORIALS_COMPLETE() = FALSE //#1545235 - function from #1601899 #IF IS_DEBUG_BUILD cdPrintnl() cdPrintString("ST - Place_MP_Friends_in_ContactSlots() reporting that the player is in MP but has not completed the tutorial, not placing friends or session players in list") cdPrintnl() #ENDIF Human_Contacts_Barred_During_MP_Tutorial = TRUE ENDIF ENDIF REPEAT NUM_NETWORK_PLAYERS tempLoop thisPlayer = INT_TO_PLAYERINDEX(tempLoop) IF IS_NET_PLAYER_OK(thisPlayer,FALSE) IF Human_Contacts_Barred_During_MP_Tutorial = FALSE //#1545235 /*Stat Reader test harness... IF thisPlayer = PLAYER_ID() friendHandle = GET_GAMER_HANDLE_PLAYER(PLAYER_ID()) NETWORK_PROFILE_STATS_READER_ADD_GAMER (friendHandle) NETWORK_PROFILE_STATS_READER_ADD_STATID (MP0_CHAR_ISACTIVE) b_StatReaderNeedsToBail = FALSE //Put local timer in... NETWORK_PROFILE_STATS_READER_START() WHILE NETWORK_PROFILE_STATS_READER_GET_STATUS() <> NET_PS_SUCCESS AND b_StatReaderNeedsToBail = FALSE WAIT (0) IF NETWORK_PROFILE_STATS_READER_GET_STATUS() = NET_PS_PENDING #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Waiting on pending stat reader retrieval...") cdPrintnl() #ENDIF ENDIF IF NETWORK_PROFILE_STATS_READER_GET_STATUS() = NET_PS_FAILED #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Stat Reader Failed!") cdPrintnl() #ENDIF b_StatReaderNeedsToBail = TRUE ENDIF IF NETWORK_PROFILE_STATS_READER_GET_STATUS() = NET_PS_SUCCESS #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Stat Reader Succeeded!") cdPrintnl() #ENDIF //b_StatReaderNeedsToBail = TRUE ENDIF ENDWHILE IF b_StatReaderNeedsToBail = FALSE //Must have reached success, as the above loop did not fail or timeout. Read stat values... #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Stat reader retrieval succeeded...") cdPrintnl() #ENDIF ENDIF NETWORK_PROFILE_STATS_READER_END() ENDIF */ //Part 2. Expanded this for 3291196 - Only list users in session who have text communication privileges. GAMER_HANDLE gamerHandle gamerHandle = GET_GAMER_HANDLE_PLAYER(thisPlayer) bool bOkayToAddInSessionGamer = false IF (NETWORK_CHECK_TEXT_COMMUNICATION_PRIVILEGES() = TRUE) AND (NETWORK_IS_VALID_EYEFIND_FRIEND(gamerHandle) = TRUE) //Important! This will prevent any non friends in session from appearing in the list. This is a change to 2016's behaviour. bOkayToAddInSessionGamer = true ENDIF /* IF (thisPlayer = PLAYER_ID()) //Allow the player himself to be included in the list of contacts for debug. bOkayToAddInSessionGamer = true ENDIF */ IF bOkayToAddInSessionGamer #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - bOkayToAddInSessionGamer was true. Adding gamer. Repeat loop count is ") cdPrintInt(thisSlot) cdPrintstring(GET_PLAYER_NAME(thisPlayer)) cdPrintnl() #ENDIF g_sPlayers.plPlayers[thisSlot] = thisPlayer Add_MP_Friend_to_Scaleform_Slot(GET_PLAYER_NAME(thisPlayer)) thisSlot++ bOkayToAddInSessionGamer = false //Local var is reinitialised in REPEAT, this just here for absolute clarity. ELSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Not adding this gamer to Eyefind contact list. Cannot text chat with them or gamer is not a friend.") cdPrintInt(thisSlot) cdPrintstring(GET_PLAYER_NAME(thisPlayer)) cdPrintnl() #ENDIF ENDIF ENDIF ENDIF ENDREPEAT g_sPlayers.plNumPlayers = thisSlot thisSlot = 0 IF IS_ACCOUNT_OVER_17_FOR_CHAT(PLAYER_ID()) FOR tempLoop = 0 TO NETWORK_GET_FRIEND_COUNT()-1 //IF NETWORK_IS_FRIEND_ONLINE(NETWORK_GET_FRIEND_NAME(tempLoop)) //IF NETWORK_IS_FRIEND_IN_SAME_TITLE(NETWORK_GET_FRIEND_NAME(tempLoop)) friendHandle = GET_GAMER_HANDLE_FRIEND(tempLoop) IF (NOT NETWORK_IS_GAMER_IN_MY_SESSION(friendHandle)) //Part 3.Potentially expand this for 3291196 - Will only list any friend user who can be contacted through TEXT_CHAT but it looks as if this will only return true if the friend is online, so this makes this feature unusable here. AND (NETWORK_CHECK_TEXT_COMMUNICATION_PRIVILEGES() = TRUE) AND (NETWORK_IS_VALID_EYEFIND_FRIEND(friendHandle)) = TRUE //Overkill as we're moving through the friends list but putting this here for clarity of changes. IF Human_Contacts_Barred_During_MP_Tutorial = FALSE //#1545235 //Old working regime /* IF thisSlot < c_MAX_EMAIL_CONTACTS g_sPlayers.plFriends[thisSlot].Handle = friendHandle g_sPlayers.plFriends[thisSlot].Name = NETWORK_GET_FRIEND_NAME(tempLoop) Add_MP_Friend_to_Scaleform_Slot(g_sPlayers.plFriends[thisSlot].Name) thisSlot++ ENDIF */ //New optimised trial IF thisSlot < c_MAX_EMAIL_CONTACTS g_sPlayers.plFriendsHandle[thisSlot] = friendHandle //This g_sPlayers.selectedPlayerName assignment below might need to be conditioned with a Durango variant which returns NETWORK_GET_FRIEND_DISPLAY_NAME for DURANGO // IF IS_PLAYSTATION_PLATFORM() // // //g_sPlayers.selectedPlayerName = NETWORK_GET_FRIEND_DISPLAY_NAME(tempLoop) // PlayerHandleGamerNameStringForScaleform = NETWORK_GET_GAMERTAG_FROM_HANDLE(friendHandle) // // // #IF IS_DEBUG_BUILD // cdPrintstring("AppInternet - Adding PS4 Friend Player with Display Name - loop count ") // cdPrintInt(thisSlot) // cdPrintstring(PlayerHandleGamerNameStringForScaleform) // cdPrintnl() // #ENDIF // // // IF IS_XBOX_PLATFORM() //2222604 OR IS_PLAYSTATION_PLATFORM() //g_sPlayers.selectedPlayerName = NETWORK_GET_FRIEND_DISPLAY_NAME(tempLoop) PlayerHandleGamerNameStringForScaleform = NETWORK_GET_FRIEND_DISPLAY_NAME(tempLoop) #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Adding XBox One Friend Player with Display Name - loop count ") cdPrintInt(thisSlot) cdPrintstring(PlayerHandleGamerNameStringForScaleform) cdPrintnl() #ENDIF ELSE //g_sPlayers.selectedPlayerName = NETWORK_GET_FRIEND_NAME(tempLoop) PlayerHandleGamerNameStringForScaleform = NETWORK_GET_FRIEND_NAME(tempLoop) #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Adding PC / PS4 Friend Player - loop count ") cdPrintInt(thisSlot) cdPrintstring(PlayerHandleGamerNameStringForScaleform) cdPrintnl() #ENDIF ENDIF Add_MP_Friend_to_Scaleform_Slot(PlayerHandleGamerNameStringForScaleform) thisSlot++ ENDIF ENDIF ENDIF //ENDIF //ENDIF ENDFOR ENDIF g_sPlayers.plTotalNumContacts = g_sPlayers.plNumPlayers + thisSlot IF b_MovedToComposeFromReplyButton = TRUE Update_Compose_Recipient_Subject_Body() //Update the recipient and subject field if we have reached this page from the reply button. ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT") //Critical! Need to update view END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC Update_Compose_Recipient_Field_Only() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9) //From Eddie. This should be slot 9 BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_CONDFNH") //~a~ //BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_CONDFON") ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (PlayerHandleGamerNameStringForScaleform) //Test. //ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(DisplayNameReturnName[0]) //ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) END_TEXT_COMMAND_SCALEFORM_STRING() BEGIN_TEXT_COMMAND_SCALEFORM_STRING("") END_TEXT_COMMAND_SCALEFORM_STRING() BEGIN_TEXT_COMMAND_SCALEFORM_STRING("") END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT") //Critical! Need to update view END_SCALEFORM_MOVIE_METHOD() #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Condensed Font test") cdPrintnl() #ENDIF ENDPROC //Handle OSK keyboard input, the parse result into EmailMessageSegments_to_Send, an array of TL63s PROC Maintain_Email_Message_Body_Creation_from_OSK() #if IS_DEBUG_BUILD IF g_b_InstructEyefindtoSendAutoLongMessage = TRUE //If this widget is checked, autofill the message body contents. These strings can be modified to test long and profane messages. //This can be handy for checking Rockstar Social Club marketing content as they should not be going through any virtual keyboard checks. EmailMessageSegments_to_Send[0] = "a_Testing 1 fuck shit profanity 1 test " EmailMessageSegments_to_Send[1] = "b_Testing 2 " EmailMessageSegments_to_Send[2] = "c_Testing 3 " EmailMessageSegments_to_Send[3] = "d_Testing 4 " EmailMessageSegments_to_Send[4] = "e_Testing 5 " EmailMessageSegments_to_Send[5] = "f_Testing 6 " EmailMessageSegments_to_Send[6] = "g_Testing 7 " EmailMessageSegments_to_Send[7] = "h_Testing 8 fuck shit profanity 2 test" EmailMessageSegments_to_Send[8] = "i_Testing 9 " EmailMessageSegments_to_Send[9] = "j_Testing 10 " b_Creating_Email_Message_Body_from_OSK = FALSE b_MessageBodyFilledThisCycle = TRUE Update_Compose_Recipient_Subject_Body() EXIT ENDIF #endif //IF b_Creating_Email_Message_Body_from_OSK = TRUE //IF RUN_ON_SCREEN_KEYBOARD(KeyBoardData.eStatus, KeyBoardData.iProfanityToken, KeyBoardData.iCurrentStatus, FALSE, FALSE, tlEmailMessage, FALSE, 0, TRUE) IF RUN_ON_SCREEN_KEYBOARD( KeyBoardData.eStatus, KeyBoardData.iProfanityToken, KeyBoardData.iCurrentStatus, FALSE, FALSE, EmailMessageSegments_to_Send[0], FALSE, 0, FALSE, FALSE, EmailMessageSegments_to_Send[1], TRUE ) //IF RUN_ON_SCREEN_KEYBOARD(sFMMCendStage.oskStatus, sFMMCendStage.iProfanityToken, sFMMCendStage.iKeyBoardStatus, FALSE, bMissionName, "", FALSE,0, FALSE, bMissionTags) //tlEmailMessage = GET_ONSCREEN_KEYBOARD_RESULT() //NET_PRINT_TIME() NET_PRINT(" ----------> APP - MAINTAIN_PERSISTENT_CHECKS - KEYBOARD RESULT = ") NET_PRINT(tlSendMessage) NET_NL() KeyBoardData.eStatus = OSK_PENDING KeyBoardData.iCurrentstatus = OSK_STAGE_SET_UP KeyBoardData.iProfanityToken = 0 b_Creating_Email_Message_Body_from_OSK = FALSE //cdPrintnl() //cdPrintstring(tlEmailMessage) //cdPrintnl() IF NOT IS_STRING_NULL_OR_EMPTY(GET_ONSCREEN_KEYBOARD_RESULT()) EmailMessageSegments_to_Send[0] = "" EmailMessageSegments_to_Send[1] = "" EmailMessageSegments_to_Send[2] = "" EmailMessageSegments_to_Send[3] = "" EmailMessageSegments_to_Send[4] = "" EmailMessageSegments_to_Send[5] = "" EmailMessageSegments_to_Send[6] = "" EmailMessageSegments_to_Send[7] = "" EmailMessageSegments_to_Send[8] = "" EmailMessageSegments_to_Send[9] = "" //EmailMessageSegments_to_Send[10] = "" //EmailMessageSegments_to_Send[11] = "" iStringLengthInCharacters = GET_LENGTH_OF_LITERAL_STRING(GET_ONSCREEN_KEYBOARD_RESULT()) //If the description is blank then bail /* IF IS_EMAIL_STRING_BLANK_SPACES(GET_ONSCREEN_KEYBOARD_RESULT(), iStringLengthInCharacters) KeyBoardData.iCurrentstatus = OSK_STAGE_SET_UP KeyBoardData.eStatus = OSK_PENDING KeyBoardData.iProfanityToken = 1 RETURN FALSE ENDIF */ INT iStartCharacterIndex = 0 INT iArrayIndex = 0 BOOL bFinishedCopying = FALSE WHILE NOT bFinishedCopying IF iStartCharacterIndex >= iStringLengthInCharacters bFinishedCopying = TRUE ELSE IF iArrayIndex >= c_MAX_SEGMENTS bFinishedCopying = TRUE ELSE EmailMessageSegments_to_Send[iArrayIndex] = GET_CHARACTER_FROM_AUDIO_CONVERSATION_FILENAME_WITH_BYTE_LIMIT(GET_ONSCREEN_KEYBOARD_RESULT(), iStartCharacterIndex, iStringLengthInCharacters, 63) CPRINTLN(DEBUG_INTERNET, " EmailMessageSegments_to_Send[", iArrayIndex, "] = ", EmailMessageSegments_to_Send[iArrayIndex]) iStartCharacterIndex += GET_LENGTH_OF_LITERAL_STRING( EmailMessageSegments_to_Send[iArrayIndex]) CPRINTLN(DEBUG_INTERNET, "iStartCharacterIndex is now ", iStartCharacterIndex) //cdprintnl() //cdPrintstring(EmailMessageSegments_to_Send[iArrayIndex]) //cdPrintnl() iArrayIndex++ ENDIF ENDIF ENDWHILE b_MessageBodyFilledThisCycle = TRUE Update_Compose_Recipient_Subject_Body() ENDIF //GAMER_HANDLE thisHandle //thisHandle = GET_GAMER_HANDLE_PLAYER(g_sPlayers.plPlayers[g_sPlayers.m_selectedPlayerSlot]) //Send the Message to the Player //REINIT_NET_TIMER(MPGlobalsAmbience.iSendMessageToPlayerTimer[NATIVE_TO_INT(g_sPlayers.plPlayers[g_sPlayers.m_selectedPlayerSlot])]) //NETWORK_SEND_TEXT_MESSAGE(tlSendMessage, thisHandle) //BROADCAST_TEXT_MESSAGE_USING_LITERAL(tlSendMessage, SPECIFIC_PLAYER(g_sPlayers.plPlayers[g_sPlayers.m_selectedPlayerSlot])) //NET_PRINT_TIME() NET_PRINT(" ----------> APP - ciPI_SUB_MENU_SM_PLAYER_LIST - MESSAGE SENT TO ") NET_PRINT(GET_PLAYER_NAME(g_sPlayers.plPlayers[g_sPlayers.m_selectedPlayerSlot])) NET_NL() //NET_PRINT_TIME() NET_PRINT(" ----------> APP - ciPI_SUB_MENU_SM_PLAYER_LIST - MESSAGE = ") NET_PRINT(tlSendMessage) NET_NL() //PRINT_TICKER_WITH_PLAYER_NAME("CP_TM_SENT", g_sPlayers.plPlayers[g_sPlayers.m_selectedPlayerSlot]) //Your message has been sent to ~a~ //g_sPlayers.iPlayerInteractionStage = PLAYER_INTERACTION_STAGE_SELECT //CPRINTLN(DEBUG_INTERNET, " ----------> APP - PLAYER_INTERACTION_STAGE_SEND_MESSAGE - PiPlayerInteractionStage = PLAYER_INTERACTION_STAGE_SELECT - B") ELSE IF KeyBoardData.eStatus = OSK_CANCELLED //NET_PRINT_TIME() NET_PRINT(" ----------> APP - MAINTAIN_PERSISTENT_CHECKS - KEYBOARD CLOSED - oskStatus = ") NET_PRINT_INT(ENUM_TO_INT(KeyBoardData.eStatus)) NET_NL() KeyBoardData.eStatus = OSK_PENDING KeyBoardData.iCurrentstatus = OSK_STAGE_SET_UP KeyBoardData.iProfanityToken = 0 b_Creating_Email_Message_Body_from_OSK = FALSE //g_sPlayers.iPlayerInteractionStage = PLAYER_INTERACTION_STAGE_SELECT //CPRINTLN(DEBUG_INTERNET, " ----------> APP - PLAYER_INTERACTION_STAGE_SEND_MESSAGE - PiPlayerInteractionStage = PLAYER_INTERACTION_STAGE_SELECT - B") ENDIF ENDIF //ENDIF ENDPROC PROC Maintain_Email_Message_Subject_Creation_from_OSK() //IF b_Creating_Email_Message_Body_from_OSK = TRUE IF RUN_ON_SCREEN_KEYBOARD(KeyBoardData.eStatus, KeyBoardData.iProfanityToken, KeyBoardData.iCurrentStatus, FALSE, FALSE, EmailSubjectSegments_to_Send[0], FALSE, 0, TRUE, FALSE, "", TRUE) /* FUNC BOOL RUN_ON_SCREEN_KEYBOARD(OSK_STATUS &oskStatus, INT &iProfanityToken, INT &iCurrentstatus, BOOL bIsObjectiveText = FALSE, BOOL bMissionName = TRUE, STRING stToChange = NULL, BOOL bSMSMessage = FALSE, INT iMissObjectiveType = 0, BOOL bSMSMessageShort = FALSE, //Critical! This controls whether the subject or the message body prompt are displayed. BOOL bMissionTags = FALSE, STRING stToChange2 = NULL, BOOL bUsingLaptopEmail = FALSE) */ //IF RUN_ON_SCREEN_KEYBOARD(sFMMCendStage.oskStatus, sFMMCendStage.iProfanityToken, sFMMCendStage.iKeyBoardStatus, FALSE, bMissionName, "", FALSE,0, FALSE, bMissionTags) //tlEmailMessage = GET_ONSCREEN_KEYBOARD_RESULT() //NET_PRINT_TIME() NET_PRINT(" ----------> APP - MAINTAIN_PERSISTENT_CHECKS - KEYBOARD RESULT = ") NET_PRINT(tlSendMessage) NET_NL() KeyBoardData.eStatus = OSK_PENDING KeyBoardData.iCurrentstatus = OSK_STAGE_SET_UP KeyBoardData.iProfanityToken = 0 b_Creating_Email_Message_Subject_from_OSK = FALSE //cdPrintnl() //cdPrintstring(tlEmailMessage) //cdPrintnl() IF NOT IS_STRING_NULL_OR_EMPTY(GET_ONSCREEN_KEYBOARD_RESULT()) //EmailSubjectSegments_to_Send[0] = GET_ONSCREEN_KEYBOARD_RESULT() //Removed for 2257287, March 2015 EmailSubjectSegments_to_Send[0] = "" EmailSubjectSegments_to_Send[1] = "" iStringLengthInCharacters = GET_LENGTH_OF_LITERAL_STRING(GET_ONSCREEN_KEYBOARD_RESULT()) //If the description is blank then bail /* IF IS_EMAIL_STRING_BLANK_SPACES(GET_ONSCREEN_KEYBOARD_RESULT(), iStringLengthInCharacters) KeyBoardData.iCurrentstatus = OSK_STAGE_SET_UP KeyBoardData.eStatus = OSK_PENDING KeyBoardData.iProfanityToken = 1 RETURN FALSE ENDIF */ //Adding in this WHILE section for 2257287, March 2015 INT iStartCharacterIndex = 0 INT iArrayIndex = 0 BOOL bFinishedCopying = FALSE WHILE NOT bFinishedCopying IF iStartCharacterIndex >= iStringLengthInCharacters bFinishedCopying = TRUE ELSE IF iArrayIndex >= 1 #IF IS_DEBUG_BUILD cdprintnl() cdPrintstring("AppInternet - Finished copying EmailSubjectSegments_to_Send[0]") cdPrintnl() #ENDIF bFinishedCopying = TRUE ELSE EmailSubjectSegments_to_Send[iArrayIndex] = GET_CHARACTER_FROM_AUDIO_CONVERSATION_FILENAME_WITH_BYTE_LIMIT(GET_ONSCREEN_KEYBOARD_RESULT(), iStartCharacterIndex, iStringLengthInCharacters, 63) CPRINTLN(DEBUG_INTERNET, " EmailSubjectSegments_to_Send[", iArrayIndex, "] = ", EmailSubjectSegments_to_Send[iArrayIndex]) iStartCharacterIndex += GET_LENGTH_OF_LITERAL_STRING( EmailSubjectSegments_to_Send[iArrayIndex]) CPRINTLN(DEBUG_INTERNET, "iStartCharacterIndex is now ", iStartCharacterIndex) //cdprintnl() //cdPrintstring(EmailSubjectSegments_to_Send[iArrayIndex]) //cdPrintnl() iArrayIndex++ ENDIF ENDIF ENDWHILE //End of new March 2015 2257287 section //This is problematic as the message body can be entered before the subject. See bug #1890436 //ClearOutEmailBodyContents() Update_Compose_Recipient_Subject_Body() ENDIF //GAMER_HANDLE thisHandle //thisHandle = GET_GAMER_HANDLE_PLAYER(g_sPlayers.plPlayers[g_sPlayers.m_selectedPlayerSlot]) //Send the Message to the Player //REINIT_NET_TIMER(MPGlobalsAmbience.iSendMessageToPlayerTimer[NATIVE_TO_INT(g_sPlayers.plPlayers[g_sPlayers.m_selectedPlayerSlot])]) //NETWORK_SEND_TEXT_MESSAGE(tlSendMessage, thisHandle) //BROADCAST_TEXT_MESSAGE_USING_LITERAL(tlSendMessage, SPECIFIC_PLAYER(g_sPlayers.plPlayers[g_sPlayers.m_selectedPlayerSlot])) //NET_PRINT_TIME() NET_PRINT(" ----------> APP - ciPI_SUB_MENU_SM_PLAYER_LIST - MESSAGE SENT TO ") NET_PRINT(GET_PLAYER_NAME(g_sPlayers.plPlayers[g_sPlayers.m_selectedPlayerSlot])) NET_NL() //NET_PRINT_TIME() NET_PRINT(" ----------> APP - ciPI_SUB_MENU_SM_PLAYER_LIST - MESSAGE = ") NET_PRINT(tlSendMessage) NET_NL() //PRINT_TICKER_WITH_PLAYER_NAME("CP_TM_SENT", g_sPlayers.plPlayers[g_sPlayers.m_selectedPlayerSlot]) //Your message has been sent to ~a~ //g_sPlayers.iPlayerInteractionStage = PLAYER_INTERACTION_STAGE_SELECT //CPRINTLN(DEBUG_INTERNET, " ----------> APP - PLAYER_INTERACTION_STAGE_SEND_MESSAGE - PiPlayerInteractionStage = PLAYER_INTERACTION_STAGE_SELECT - B") ELSE IF KeyBoardData.eStatus = OSK_CANCELLED //NET_PRINT_TIME() NET_PRINT(" ----------> APP - MAINTAIN_PERSISTENT_CHECKS - KEYBOARD CLOSED - oskStatus = ") NET_PRINT_INT(ENUM_TO_INT(KeyBoardData.eStatus)) NET_NL() KeyBoardData.eStatus = OSK_PENDING KeyBoardData.iCurrentstatus = OSK_STAGE_SET_UP KeyBoardData.iProfanityToken = 0 b_Creating_Email_Message_Subject_from_OSK = FALSE //g_sPlayers.iPlayerInteractionStage = PLAYER_INTERACTION_STAGE_SELECT //CPRINTLN(DEBUG_INTERNET, " ----------> APP - PLAYER_INTERACTION_STAGE_SEND_MESSAGE - PiPlayerInteractionStage = PLAYER_INTERACTION_STAGE_SELECT - B") ENDIF ENDIF //ENDIF ENDPROC PROC Status_Update_Screen_Handling() IF b_EmailClickDetected b_EmailClickDetected = FALSE //reset this... EmailState = eINITIAL #IF IS_DEBUG_BUILD cdPrintstring ("AppInternet - Moving from Status Update Screen to Inbox") cdPrintnl() #ENDIF ENDIF ENDPROC PROC Player_to_Player_Composing_Main() IF b_DisplayProfileViewHelp = TRUE //Draw movie whilst the onscreen keyboard is NOT present on screen. IF NOT (UPDATE_ONSCREEN_KEYBOARD() = OSK_PENDING) //2207263 IF NOT HAS_SCALEFORM_MOVIE_LOADED (SF_EyefindInstButtonsIndex) SF_EyefindInstButtonsIndex = REQUEST_SCALEFORM_MOVIE ("instructional_buttons") #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("AppInternet - Player_to_Player_Composing_Main() - SF_EyefindInstButtonsIndex not loaded.") cdPrintnl() #ENDIF ELSE DRAW_SCALEFORM_MOVIE_FULLSCREEN (SF_EyefindInstButtonsIndex, 255, 255, 255,0) ENDIF ENDIF IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_EXTRA_OPTION) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_EXTRA_OPTION) #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("AppInternet - Player_to_Player_Composing_Main() - User pressed joypad to view PROFILE_UI.") cdPrintnl() #ENDIF NETWORK_SHOW_PROFILE_UI(gh_ProfileViewHandle) ENDIF ENDIF IF GET_CURRENT_WEBPAGE_ID() = 7 //Have moved to inbox from history. Handles 19087854 EmailState = eINITIAL #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("AppInternet - Player_to_Player_Composing_Main() - detected move to inbox. Setting email state to eINITIAL to repopulate.") cdPrintnl() #ENDIF ENDIF IF b_Creating_Email_Message_Body_from_OSK Maintain_Email_Message_Body_Creation_from_OSK() ENDIF IF b_Creating_Email_Message_Subject_from_OSK Maintain_Email_Message_Subject_Creation_from_OSK() ENDIF IF b_Creating_Email_Message_Body_from_OSK = FALSE AND b_Creating_Email_Message_Subject_from_OSK = FALSE IF b_EmailClickDetected b_EmailClickDetected = FALSE //reset this... IF g_iLastSelectedWebIndex = 7 //Create message body. //ClearOutEmailBodyContents() b_Creating_Email_Message_Body_from_OSK = TRUE ENDIF IF g_iLastSelectedWebIndex = 6 //Create subject. b_Creating_Email_Message_Subject_from_OSK = TRUE ENDIF IF g_iLastSelectedWebIndex = 5 //Cancel button pressed. //May need wrapped in a timer to give the inbox contents time to load in. #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind Cancel button pressed.") cdPrintnl() #ENDIF b_DisplayProfileViewHelp = FALSE //Critical. Email has been cancelled, blank out first two message segments for bug 2181546 EmailMessageSegments_to_Send[0] = "" EmailMessageSegments_to_Send[1] = "" EmailState = eINITIAL ENDIF IF g_iLastSelectedWebIndex = 8 //Send Email button. INT tempSegmentIndex = 0 WHILE tempSegmentIndex < c_MAX_SEGMENTS single_email_Sending_Data.Contents[tempSegmentIndex] = EmailMessageSegments_to_Send[tempSegmentIndex] #IF IS_DEBUG_BUILD cdPrintstring ("Copying email message body segment ") cdPrintint (tempSegmentIndex) cdPrintstring(" ") cdPrintstring(single_email_Sending_Data.Contents[tempSegmentIndex]) cdPrintnl() #ENDIF tempSegmentIndex ++ ENDWHILE //Send the email! single_email_Sending_Data.Subject[0] = EmailSubjectSegments_to_Send[0] single_email_Sending_Data.Subject[1] = EmailSubjectSegments_to_Send[1] //Having problems with this one! #IF IS_DEBUG_BUILD cdPrintstring("Sending email to SC_EMAIL_SEND_EMAIL") cdPrintstring("Subject Segment 1") cdPrintstring(single_email_Sending_Data.Subject[0]) cdPrintstring("Subject Segment 2") cdPrintstring(single_email_Sending_Data.Subject[1]) cdPrintnl() cdPrintstring("MessageSegments were ") cdPrintstring(single_email_Sending_Data.Contents[0]) cdPrintstring(single_email_Sending_Data.Contents[1]) cdPrintstring(single_email_Sending_Data.Contents[2]) cdPrintstring(single_email_Sending_Data.Contents[3]) cdPrintstring(single_email_Sending_Data.Contents[4]) cdPrintstring(single_email_Sending_Data.Contents[5]) cdPrintstring(single_email_Sending_Data.Contents[6]) cdPrintstring(single_email_Sending_Data.Contents[7]) cdPrintstring(single_email_Sending_Data.Contents[8]) cdPrintstring(single_email_Sending_Data.Contents[9]) cdPrintstring(single_email_Sending_Data.Contents[10]) cdPrintstring(single_email_Sending_Data.Contents[11]) cdPrintnl() cdPrintstring("Calling NATIVE SC_EMAIL_SEND_EMAIL") cdPrintnl() #ENDIF SC_EMAIL_SET_CURRENT_EMAIL_TAG("gta5email") //Critical! Need to ensure we send these Eyefind messages with the correct tag. #if IS_DEBUG_BUILD IF g_DisplayTestPhotoSprite //Re-using this old debug only bool in a widget to test send a marketing email from the Eyefind infrastructure. SC_EMAIL_SET_CURRENT_EMAIL_TAG("gta5marketing") cdPrintstring("Sending Eyefind message with test marketing tag from widget!") cdPrintnl() ELSE SC_EMAIL_SET_CURRENT_EMAIL_TAG("gta5email") cdPrintstring("Sending Eyefind message with normal marketing tag!") cdPrintnl() ENDIF #endif SC_EMAIL_SEND_EMAIL (single_email_Sending_Data) b_MessageBodyFilledThisCycle = FALSE //Jump to Page 9 to display a message indicating the send has taken place and the recipient(s) BEGIN_SCALEFORM_MOVIE_METHOD(mov,"GO_TO_WEBPAGE") BEGIN_TEXT_COMMAND_SCALEFORM_STRING("STRING") ADD_TEXT_COMPONENT_SUBSTRING_WEBSITE("WWW_EYEFIND_INFO_S_EMAILSTATUS") END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(10) //SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("CELL_EMAIL_SUC") //BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_SUC") //Message has been sent to ~a~ BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_CSUC") //Condensed font version. Your message has been sent to ~a~ ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (PlayerHandleGamerNameStringForScaleform) //ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT") //Critical! Need to update view END_SCALEFORM_MOVIE_METHOD() #IF IS_DEBUG_BUILD cdPrintstring ("AppInternet - Sent email to ") cdPrintstring (PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) cdPrintnl() #ENDIF //Critical. Email has been sent, blank out first two message segments for bug 2181546 EmailMessageSegments_to_Send[0] = "" EmailMessageSegments_to_Send[1] = "" EmailState = eSTATUS_UPDATE //Critical! ENDIF IF g_iLastSelectedWebIndex > 9 //Selecting a contact from the recipient list... //Clear out recipient list before adding any new contacts... SC_EMAIL_MESSAGE_CLEAR_RECIP_LIST() b_DisplayProfileViewHelp = FALSE CPRINTLN(DEBUG_INTERNET, "Clearing old recipient list. Email Contacts list click [g_iLastSelectedWebIndex = ", g_iLastSelectedWebIndex, "]") g_sPlayers.m_selectedPlayerSlot = g_iLastSelectedWebIndex - 10 #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, Player clicked contact list - Adjusted selected player slot is ") cdPrintint (g_sPlayers.m_selectedPlayerSlot) cdPrintnl() #ENDIF IF g_sPlayers.m_selectedPlayerSlot < g_sPlayers.plNumPlayers g_sPlayers.selectedPlayerHandle = GET_GAMER_HANDLE_PLAYER(g_sPlayers.plPlayers[g_sPlayers.m_selectedPlayerSlot]) PlayerHandleGamerNameStringForScaleform = EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle) #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, player list gamertag from selected handle was ") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) cdPrintnl() #ENDIF ELSE //Old working regime //g_sPlayers.selectedPlayerHandle = g_sPlayers.plFriends[GET_INDEX_OF_FRIEND_ARRAY_FOR_EMAIL(g_sPlayers.m_selectedPlayerSlot)].Handle //New trial g_sPlayers.selectedPlayerHandle = g_sPlayers.plFriendsHandle[GET_INDEX_OF_FRIEND_ARRAY_FOR_EMAIL(g_sPlayers.m_selectedPlayerSlot)] // Test. This works. #IF IS_DEBUG_BUILD cdPrintstring("Friend display name test returns...") cdPrintstring(NETWORK_GET_FRIEND_NAME(GET_INDEX_OF_FRIEND_ARRAY_FOR_EMAIL(g_sPlayers.m_selectedPlayerSlot))) cdPrintnl() #ENDIF //This part below might need to be conditioned with a Durango variant which returns NETWORK_GET_FRIEND_DISPLAY_NAME for DURANGO //IF IS_DURANGO_VERSION // PlayerHandleGamerNameStringForScaleform = NETWORK_GET_FRIEND_DISPLAY_NAME(GET_INDEX_OF_FRIEND_ARRAY_FOR_EMAIL(g_sPlayers.m_selectedPlayerSlot))) //ELSE PlayerHandleGamerNameStringForScaleform = EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle) //ENDIF #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, friend list displayname or gamertag from selected handle was ") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) cdPrintnl() #ENDIF ENDIF //Get and store display name here! BOOL b_CommunicationAllowed = TRUE IF NOT IS_GAMER_HANDLE_VALID(g_sPlayers.selectedPlayerHandle) b_CommunicationAllowed = FALSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, Preventing communication as Gamer Handle not valid for this selected player... ") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) cdPrintnl() #ENDIF ELSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, Gamer handle valid for selected player. ") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) cdPrintnl() #ENDIF ENDIF //Part 5. Expanded this for 3291196 - Will block any reply attempt to any user who cannot be contacted through TEXT_CHAT but it seems as if this check will prevent any reply if the sender is offline! IF (NETWORK_CHECK_TEXT_COMMUNICATION_PRIVILEGES() = FALSE) OR (NETWORK_IS_VALID_EYEFIND_FRIEND(g_sPlayers.selectedPlayerHandle) = FALSE) //Add this check for offline problem. At least we'll know the two users are still friends. b_CommunicationAllowed = FALSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, Sender has no text communication privileges or is not a friend. Communication prevented for new message to this player...") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle((g_sPlayers.selectedPlayerHandle))) cdPrintnl() #ENDIF ENDIF IF NETWORK_IS_GAMER_MUTED_BY_ME(g_sPlayers.selectedPlayerHandle) OR NETWORK_IS_GAMER_BLOCKED_BY_ME(g_sPlayers.selectedPlayerHandle) OR NETWORK_AM_I_MUTED_BY_GAMER(g_sPlayers.selectedPlayerHandle) OR NETWORK_AM_I_BLOCKED_BY_GAMER(g_sPlayers.selectedPlayerHandle) b_CommunicationAllowed = FALSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Eyefind email, Communication prevented for this player... ") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) cdPrintnl() #ENDIF ENDIF IF b_CommunicationAllowed = FALSE //Should be FALSE! //Jump to Page 9 to display a message indicating communication is blocked for the selected gamerhandle BEGIN_SCALEFORM_MOVIE_METHOD(mov,"GO_TO_WEBPAGE") BEGIN_TEXT_COMMAND_SCALEFORM_STRING("STRING") ADD_TEXT_COMPONENT_SUBSTRING_WEBSITE("WWW_EYEFIND_INFO_S_EMAILSTATUS") END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(10) IF ARE_STRINGS_EQUAL (PlayerHandleGamerNameStringForScaleform, "") //Potential fix for 2131480 BEGIN_TEXT_COMMAND_SCALEFORM_STRING("CELL_EMAIL_ERR") END_TEXT_COMMAND_SCALEFORM_STRING() #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Communication not allowed but gamerstring was empty - 2. Displaying generic message.") cdPrintnl() #ENDIF ELSE //BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_BLK") //~a~ cannot be contacted at this time. BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_CBLK") //~a~ cannot be contacted at this time. ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(PlayerHandleGamerNameStringForScaleform) //ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) END_TEXT_COMMAND_SCALEFORM_STRING() ENDIF END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT") //Critical! Need to update view END_SCALEFORM_MOVIE_METHOD() #IF IS_DEBUG_BUILD cdPrintstring ("App Internet - Player_to_Player_Composing_Main() communication block warning for ") cdPrintstring(PlayerHandleGamerNameStringForScaleform) //cdPrintstring (EyefindGetGamerTagFromHandle(g_sPlayers.selectedPlayerHandle)) cdPrintnl() #ENDIF EmailState = eSTATUS_UPDATE //Critical! ENDIF IF b_CommunicationAllowed = TRUE AND (IS_GAMER_HANDLE_VALID(g_sPlayers.selectedPlayerHandle) OR bg_bBypassValidGamerCheck) SC_EMAIL_MESSAGE_PUSH_GAMER_TO_RECIP_LIST(g_sPlayers.selectedPlayerHandle) gh_ProfileViewHandle = g_sPlayers.selectedPlayerHandle //PS3_360_ButtonSetup() IF NOT IS_PC_VERSION() b_DisplayProfileViewHelp = TRUE NG_ViewProfile_ButtonSetup() ENDIF //NETWORK_GAMERTAG_FROM_HANDLE_START might need to be used for 360 only! Update_Compose_Recipient_Field_Only() ENDIF ENDIF ENDIF ENDIF ENDPROC PROC CheckForEmailAwakeningFromDormantState() //This is repeatedly ran when EmailState = eDORMANT. /* #IF IS_DEBUG_BUILD IF NETWORK_IS_GAME_IN_PROGRESS() IF IS_KEYBOARD_KEY_JUST_PRESSED (KEY_0) //Temp! This would be replaced by a scaleform check on the button being clicked on the Eyefind website. Should have MP check here too. #IF IS_DEBUG_BUILD cdPrintnl() cdPrintnl() cdPrintstring("appInternet - User requested Eyefind Inbox. Initialising Email retrieval process...") cdPrintnl() #ENDIF EmailState = eINITIAL ENDIF ENDIF #ENDIF */ IF NETWORK_IS_GAME_IN_PROGRESS() IF GET_CURRENT_WEBSITE_ID() = 2 //Eyefind IF GET_CURRENT_WEBPAGE_ID() = 7 //Eyefind Inbox has been launched. #IF IS_DEBUG_BUILD cdPrintnl() cdPrintnl() cdPrintstring("appInternet - User requested Eyefind Inbox. Initialising Email retrieval process...") cdPrintnl() #ENDIF SF_EyefindInstButtonsIndex = REQUEST_SCALEFORM_MOVIE ("instructional_buttons") WHILE NOT HAS_SCALEFORM_MOVIE_LOADED (SF_EyefindInstButtonsIndex) DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0) WAIT(0) #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - Waiting on intruction buttons movie to load for Eyefind initial state.") cdPrintnl() #ENDIF ENDWHILE DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0) IF NETWORK_IS_GAME_IN_PROGRESS() EmailState = eINITIAL ELSE #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - CheckForEmailAwakeningFromDormantState() about to set EmailState = eINITIAL but network game is no longer in progress.") cdPrintnl() #ENDIF ENDIF ENDIF ENDIF ELSE #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - CheckForEmailAwakeningFromDormantState() fired but network game is not in progress.") cdPrintnl() #ENDIF ENDIF ENDPROC PROC CheckForComposeAwakening() //This is repeatedly ran when EmailState = eDORMANT. IF NETWORK_IS_GAME_IN_PROGRESS() IF GET_CURRENT_WEBSITE_ID() = 2 //Eyefind IF GET_CURRENT_WEBPAGE_ID() = 8 //Eyefind compose has been launched. b_MessageBodyFilledThisCycle = FALSE #IF IS_DEBUG_BUILD cdPrintnl() cdPrintnl() cdPrintstring("appInternet - User requested Eyefind Compose. Initialising Player slot filling process...") cdPrintnl() #ENDIF Place_MP_Friends_in_EmailContactSlots() SF_EyefindInstButtonsIndex = REQUEST_SCALEFORM_MOVIE ("instructional_buttons") WHILE NOT HAS_SCALEFORM_MOVIE_LOADED (SF_EyefindInstButtonsIndex) DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0) WAIT(0) #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - Waiting on intruction buttons movie to load for Eyefind composing state.") cdPrintnl() #ENDIF ENDWHILE IF NETWORK_IS_GAME_IN_PROGRESS() EmailState = eCOMPOSING ELSE #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - CheckForComposeAwakening() about to set EmailState = eCOMPOSING but network game is no longer in progress.") cdPrintnl() #ENDIF ENDIF ENDIF ENDIF ELSE #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - CheckForComposeAwakening() fired but network game is not in progress.") cdPrintnl() #ENDIF ENDIF ENDPROC PROC InitialiseEmailRetrieval(INT iBatchStart, INT iBatchEnd) /* BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_CURSOR") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) END_SCALEFORM_MOVIE_METHOD() */ //IF i_InboxDepth = 0 //Disable the newer button as it is not functional if we are on the newest page, 0. //BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(7) //SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) //END_SCALEFORM_MOVIE_METHOD() //ENDIF b_ReachedOldestEmail = FALSE //Critical! #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - Initialised New March 15 Retrieval Process for this batch. Starting at ") cdPrintint(iBatchStart) cdPrintstring(" Number of emails to grab in this batch is ") cdPrintint(iBatchEnd) cdPrintnl() #ENDIF //John Gurney Notes: //To retrieve emails, use SC_EMAIL_RETRIEVE_EMAILS(INT startIndex, INT numEmails). Emails are ordered from 0 being the most recent. //When you retrieve them, they will be returned in order youngest-oldest from the given index. The maximum you can retrieve is 10. //Test with most recent ten. Eventually this should use scaleform stuff to let us know which batches to access. //SC_EMAIL_RETRIEVE_EMAILS (iBatchStart, iBatchEnd + (5 * i_InboxDepth)) //Old regime which I think was necessary once upon a time... SC_EMAIL_SET_CURRENT_EMAIL_TAG("gta5email") //Critical! We only want to retrieve Eyefind messages, not marketing emails sent from Rockstar. SC_EMAIL_RETRIEVE_EMAILS (iBatchStart, iBatchEnd)//2267872 - this seems to be fine now. //SC_EMAIL_RETRIEVE_EMAILS(10, 20) EmailState = eRETRIEVAL ENDPROC PROC MaintainRetrievalProcess() CurrentRetrievalStatus = SC_EMAIL_GET_RETRIEVAL_STATUS() SWITCH CurrentRetrievalStatus //Retrieval Processed Finished, set EmailState to next section. THIS IS NOT GETTING HIT FROM CODE. CASE EMAIL_RETRIEVAL_SUCCEEDED #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - Finished retrieving email batch.") cdPrintnl() #ENDIF EmailState = eSF_FILLING BREAK CASE EMAIL_RETRIEVAL_NONE #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - EMAIL RETRIEVAL NONE - Should not see this spam repeatedly! Report to Steve T! Retrieved ") cdPrintnl() cdPrintint(SC_EMAIL_GET_NUM_RETRIEVED_EMAILS()) #ENDIF EmailState = eSF_FILLING BREAK CASE EMAIL_RETRIEVAL_PENDING #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - EMAIL RETRIEVAL PENDING...") cdPrintnl() #ENDIF BREAK CASE EMAIL_RETRIEVAL_CANCELLED #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - EMAIL RETRIEVAL CANCELLED!") cdPrintnl() #ENDIF EmailState = eDORMANT //FORCE_CLOSE_BROWSER() BREAK //Failed! Bail out! CASE EMAIL_RETRIEVAL_FAILED #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - EMAIL RETRIEVAL FAILED!") cdPrintnl() #ENDIF EmailState = eDORMANT //FORCE_CLOSE_BROWSER() BREAK ENDSWITCH ENDPROC FUNC STRING GET_MONTH_TL_FROM_MONTH_INT(INT iMonth) STRING MonthString SWITCH iMonth CASE 1 MonthString = "CELL_JAN" BREAK CASE 2 MonthString = "CELL_FEB" BREAK CASE 3 MonthString = "CELL_MAR" BREAK CASE 4 MonthString = "CELL_APR" BREAK CASE 5 MonthString = "CELL_MAY" BREAK CASE 6 MonthString = "CELL_JUN" BREAK CASE 7 MonthString = "CELL_JUL" BREAK CASE 8 MonthString = "CELL_AUG" BREAK CASE 9 MonthString = "CELL_SEP" BREAK CASE 10 MonthString = "CELL_OCT" BREAK CASE 11 MonthString = "CELL_NOV" BREAK CASE 12 MonthString = "CELL_DEC" BREAK DEFAULT #IF IS_DEBUG_BUILD cdPrintstring("AppINTERNET - EYEFIND Email. Weird date passed. Month is not within range 1-12!") cdPrintnl() #ENDIF MonthString = "CELL_JAN" BREAK ENDSWITCH RETURN MonthString ENDFUNC PROC FilloutSingleScaleformSlot(INT iPassedCurrentBatch) //Fix for PC 2195352. Looks like the server copy of "senderName" was wrong. //However, this is probably a safer way to make sure the display name is correct; regrabbing from the handle rather than assuming the name is correct server side. #IF IS_DEBUG_BUILD cdPrintString("AppInternet - FilloutSingleScaleformSlot about to grab name string from SenderHandle.") cdPrintnl() #ENDIF PlayerHandleGamerNameStringForScaleform = EyefindGetGamerTagFromHandle((single_email_Received_Data.SenderHandle)) #IF IS_DEBUG_BUILD cdPrintString("AppInternet - FilloutSingleScaleformSlot success. Retrieved gamertag or displayname:") cdPrintString(PlayerHandleGamerNameStringForScaleform) cdPrintnl() #ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iPassedCurrentBatch + 10) //From Eddie : The emails start from slot 10. You can pass as many as you want. BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_CONDFNH") //~a~ //ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.SenderName) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (PlayerHandleGamerNameStringForScaleform) END_TEXT_COMMAND_SCALEFORM_STRING() LANGUAGE_TYPE lang = GET_CURRENT_LANGUAGE() IF (lang = LANGUAGE_CHINESE_SIMPLIFIED) BEGIN_TEXT_COMMAND_SCALEFORM_STRING("CELL_EMAIL_DATE") ADD_TEXT_COMPONENT_INTEGER(SingleEmailTimeStamp.nDay) ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(GET_MONTH_TL_FROM_MONTH_INT(SingleEmailTimeStamp.nMonth)) END_TEXT_COMMAND_SCALEFORM_STRING() ELSE BEGIN_TEXT_COMMAND_SCALEFORM_STRING("CELL_EMAIL_DATE") ADD_TEXT_COMPONENT_INTEGER(SingleEmailTimeStamp.nDay) ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(GET_MONTH_TL_FROM_MONTH_INT(SingleEmailTimeStamp.nMonth)) END_TEXT_COMMAND_SCALEFORM_STRING() ENDIF BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_SUBJ") //~a~ ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Subject[0]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Subject[1]) END_TEXT_COMMAND_SCALEFORM_STRING() BEGIN_TEXT_COMMAND_SCALEFORM_STRING ("CELL_EMAIL_BCON") //~a~ ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Contents[0]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Contents[1]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Contents[2]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Contents[3]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Contents[4]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Contents[5]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Contents[6]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Contents[7]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Contents[8]) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME (single_email_Received_Data.Contents[9]) END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() #IF IS_DEBUG_BUILD cdPrintString("AppInternet - Filled scaleform slot. Passed Batch ID was ") cdPrintint(iPassedCurrentBatch) cdPrintnl() #ENDIF ENDPROC PROC FillScaleformWithRetrievedEmails(INT iThisBatchStart, INT iThisBatchEnd) BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT_EMPTY") END_SCALEFORM_MOVIE_METHOD() #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("appInternet - About to fill Scaleform slots with retrieved individual email details. websiteId:") cdPrintint(GET_CURRENT_WEBSITE_ID()) cdPrintstring(", webpageId:") cdPrintint(GET_CURRENT_WEBPAGE_ID()) cdPrintnl() cdPrintnl() #ENDIF INT iCurrentBatchID = iThisBatchStart INT iPreviousPosixTime = 0 INT iSFSlotId = 0 NumberOfEmailsOnThisPage = 0 WHILE iCurrentBatchID < (iThisBatchEnd + 1) //Five slots per page but we need to check the next email after the batch end in order to know if we should display the "older" button. #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("______________________________________________________________________________") cdPrintnl() cdPrintnl() cdPrintstring("appInternet - Grabbing single email for scaleform slot from this email ID which is ") cdPrintint(iCurrentBatchID) cdPrintnl() cdPrintnl() #ENDIF //TEST: This should grab the most recent email. This will all go into a big scaleform filling loop... //Use ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME SC_EMAIL_GET_EMAIL_AT_INDEX (iCurrentBatchID, single_email_Received_Data) INT iArrayIndex = 0 CONVERT_POSIX_TIME (single_email_Received_Data.CreatePosixTime, SingleEmailTimeStamp) WHILE iArrayIndex < c_MAX_SEGMENTS #IF IS_DEBUG_BUILD IF iArrayIndex < 1 cdPrintstring("Subject is ") cdPrintstring(single_email_Received_Data.Subject[1]) cdPrintnl() cdPrintstring(" - Sender was ") cdPrintstring(single_email_Received_Data.SenderName) cdPrintstring(" at posix ") cdPrintint(single_email_Received_Data.CreatePosixTime) cdPrintstring(" which is ") cdPrintnl() cdPrintint(SingleEmailTimeStamp.nYear) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nMonth) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nDay) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nHour) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nMinute) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nSecond) cdPrintnl() cdPrintnl() ENDIF #ENDIF IF iArrayIndex < 2 CPRINTLN(DEBUG_INTERNET, "AppInternet single_email_Received_Data Subject Segment[", iArrayIndex, "] = ", single_email_Received_Data.Subject[iArrayIndex]) ENDIF CPRINTLN(DEBUG_INTERNET, "AppInternet single_email_Received_Data Body Segment[", iArrayIndex, "] = ", single_email_Received_Data.Contents[iArrayIndex]) iArrayIndex ++ ENDWHILE //Use posix times to make sure last deleted posix doesn't get included. BOOL ThisEmailWasRecentlyDeleted = FALSE //Compare the newly grabbed email with the posix time of the last deleted email. If it's exactly the same we won't include it in the inbox listing. //This may be expanded to keep track of the last few deleted emails if the cloud goes a bit slow. //Part 4. Expanded this for 3291196 - Will not include any message from any gamerhandle that can no longer text chat with this end user. It looks like this check prevents text chat if the sender handles is offline. IF (NETWORK_CHECK_TEXT_COMMUNICATION_PRIVILEGES() = FALSE) //Combine with a friend check so the user can always see friends messages regardless of online / offline status. OR (NETWORK_IS_VALID_EYEFIND_FRIEND(single_email_Received_Data.SenderHandle) = FALSE) #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Not listing eyefind email as player can no longer text chat with senderhandle. No longer a friend. ") #ENDIF ThisEmailWasRecentlyDeleted = TRUE ENDIF //End of expansion for 3291196 IF single_email_Received_Data.CreatePosixTime = LastDeletedEmailPosix ThisEmailWasRecentlyDeleted = TRUE ENDIF IF single_email_Received_Data.CreatePosixTime <> 0 //Avoid populating SF slots with any blank emails. AND (iPreviousPosixTime <> single_email_Received_Data.CreatePosixTime) //Handle issue with email from cloud potentially returning the previous email if the index should be empty. IF ThisEmailWasRecentlyDeleted = FALSE IF iCurrentBatchID < (iThisBatchEnd) //Make sure we don't include the item used to check if the "older" button should be displayed. FilloutSingleScaleformSlot(iSFSlotId) iSFSlotId ++ NumberOfEmailsOnThisPage ++ ENDIF ELSE #IF IS_DEBUG_BUILD cdPrintString("AppInternet - Warning! This email was recently deleted. Not including in list. Batch ID is ") cdPrintint(iCurrentBatchID) cdPrintnl() #ENDIF ENDIF ELSE #IF IS_DEBUG_BUILD cdPrintString("AppInternet - Warning! Should not see any more fresh emails after this one as this ID is empty. Batch ID is ") cdPrintint(iCurrentBatchID) cdPrintnl() #ENDIF b_ReachedOldestEmail = TRUE //Critical! The "older" button selection check interrogates this bool. The app will not move any pages deeper into the inbox if this is true. //Disable the older button as it is no longer functional in this context. We have reached the last page. //BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(6) //SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) //END_SCALEFORM_MOVIE_METHOD() ENDIF iCurrentBatchID ++ //iSFSlotId ++ iPreviousPosixTime = single_email_Received_Data.CreatePosixTime ENDWHILE /* //This should grab the second most recent email. SC_EMAIL_GET_EMAIL_AT_INDEX (1, single_email_Received_Data) iArrayIndex = 0 CONVERT_POSIX_TIME (single_email_Received_Data.CreatePosixTime, SingleEmailTimeStamp) WHILE iArrayIndex < c_MAX_SEGMENTS #IF IS_DEBUG_BUILD IF iArrayIndex < 1 cdPrintnl() cdPrintnl() cdPrintstring("Email position 1") cdPrintstring(" - Sender was ") cdPrintstring(single_email_Received_Data.SenderName) cdPrintstring(" at posix ") cdPrintint(single_email_Received_Data.CreatePosixTime) cdPrintstring(" which is ") cdPrintnl() cdPrintint(SingleEmailTimeStamp.nYear) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nMonth) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nDay) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nHour) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nMinute) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nSecond) cdPrintnl() cdPrintnl() ENDIF #ENDIF CPRINTLN(DEBUG_INTERNET, "AppInternet single_email_Received_Data Body Segment[", iArrayIndex, "] = ", single_email_Received_Data.Contents[iArrayIndex]) IF iArrayIndex < 2 CPRINTLN(DEBUG_INTERNET, "AppInternet single_email_Received_Data Subject Segment[", iArrayIndex, "] = ", single_email_Received_Data.Subject[iArrayIndex]) ENDIF iArrayIndex ++ ENDWHILE FilloutSingleScaleformSlot() //This should grab the third most recent email. SC_EMAIL_GET_EMAIL_AT_INDEX (2, single_email_Received_Data) iArrayIndex = 0 CONVERT_POSIX_TIME (single_email_Received_Data.CreatePosixTime, SingleEmailTimeStamp) WHILE iArrayIndex < c_MAX_SEGMENTS #IF IS_DEBUG_BUILD IF iArrayIndex < 1 cdPrintnl() cdPrintnl() cdPrintstring("Email position 2") cdPrintstring(" - Sender was ") cdPrintstring(single_email_Received_Data.SenderName) cdPrintstring(" at posix ") cdPrintint(single_email_Received_Data.CreatePosixTime) cdPrintstring(" which is ") cdPrintnl() cdPrintint(SingleEmailTimeStamp.nYear) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nMonth) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nDay) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nHour) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nMinute) cdPrintnl() cdPrintint(SingleEmailTimeStamp.nSecond) cdPrintnl() cdPrintnl() ENDIF #ENDIF CPRINTLN(DEBUG_INTERNET, "AppInternet single_email_Received_Data Body Segment[", iArrayIndex, "] = ", single_email_Received_Data.Contents[iArrayIndex]) iArrayIndex ++ ENDWHILE FilloutSingleScaleformSlot() */ BEGIN_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT") //Critical! Need to update view END_SCALEFORM_MOVIE_METHOD() IF GET_CURRENT_WEBSITE_ID() = 2 AND GET_CURRENT_WEBPAGE_ID() = 7 IF i_InboxDepth = 0 BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //"Newer" button needs d if we are on the newest page of emails. SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(7) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //"Newer" button should be enabled. Scaleform should do this automatically after an update_text. SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(7) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) END_SCALEFORM_MOVIE_METHOD() ENDIF IF b_ReachedOldestEmail = TRUE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //"Older" button needs disabled if we have already reached the oldest page of emails. SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(6) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //"Older" button should be enabled. Scaleform should do this automatically after an update_text. SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(6) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) END_SCALEFORM_MOVIE_METHOD() ENDIF ENDIF //If reached oldest email and no slots on that page were filled... repopulate with previous page? EmailState = eNEUTRAL_BROWSING ENDPROC //Steve T - Run main email handling routines, checking for composing buttons, passing recipient, attempts at accessing more emails. PROC Player_to_Player_Email_Main() IF GET_CURRENT_WEBSITE_ID() = 2 AND GET_CURRENT_WEBPAGE_ID() = 7 IF b_Creating_Email_Message_Body_from_OSK = FALSE AND b_Creating_Email_Message_Subject_from_OSK = FALSE IF b_EmailClickDetected b_EmailClickDetected = FALSE //reset this... IF g_iLastSelectedWebIndex > 9 i_CurrentlySelectedEmail = (g_iLastSelectedWebIndex - 10) //Most recent email, 0, returns 10 when click selected. #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Email Selected. Adjusted position is ") cdPrintint(i_CurrentlySelectedEmail) cdPrintnl() SC_EMAIL_GET_EMAIL_AT_INDEX (i_CurrentlySelectedEmail, single_email_Received_Data) cdPrintstring(single_email_Received_Data.Contents[0]) cdPrintnl() cdPrintstring(single_email_Received_Data.Contents[1]) cdPrintnl() cdPrintstring(single_email_Received_Data.Contents[2]) cdPrintnl() cdPrintstring(single_email_Received_Data.Contents[3]) cdPrintnl() cdPrintstring(single_email_Received_Data.Contents[4]) cdPrintnl() cdPrintstring(single_email_Received_Data.Contents[5]) cdPrintnl() cdPrintstring(single_email_Received_Data.Contents[6]) cdPrintnl() cdPrintstring(single_email_Received_Data.Contents[7]) cdPrintnl() cdPrintstring(single_email_Received_Data.Contents[8]) cdPrintnl() cdPrintstring(single_email_Received_Data.Contents[9]) cdPrintnl() cdPrintstring(single_email_Received_Data.Subject[0]) cdPrintnl() #ENDIF SC_EMAIL_GET_EMAIL_AT_INDEX (i_CurrentlySelectedEmail, single_email_Received_Data) ENDIF IF g_iLastSelectedWebIndex = 8 //"Reply" b_MovedToComposeFromReplyButton = TRUE b_MessageBodyFilledThisCycle = FALSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Reply to Email Selected. last adjusted position is ") cdPrintint(i_CurrentlySelectedEmail) cdPrintnl() #ENDIF SC_EMAIL_GET_EMAIL_AT_INDEX (i_CurrentlySelectedEmail, single_email_Received_Data) //SC_EMAIL_GET_EMAIL_AT_INDEX ((i_CurrentlySelectedEmail + (5 * i_InboxDepth)), single_email_Received_Data) #IF IS_DEBUG_BUILD cdPrintstring(single_email_Received_Data.Contents[0]) cdPrintnl() #ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov,"GO_TO_WEBPAGE") BEGIN_TEXT_COMMAND_SCALEFORM_STRING("STRING") ADD_TEXT_COMPONENT_SUBSTRING_WEBSITE("WWW_EYEFIND_INFO_S_COMPOSE") END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() //Update_Compose_Recipient_Subject_Body() - If b_MovedToComposeFromReplyButton = TRUE, this now is done after we fill up the player list on moving to the COMPOSE page. ENDIF //Has problem with deleting two emails in succession url:bugstar:1829642 IF g_iLastSelectedWebIndex = 9 //"Delete" INT ArrayOfEmailsMarkedForDeletion[1] #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Delete Selected. last adjusted inbox position was ") cdPrintint(i_CurrentlySelectedEmail) cdPrintnl() #ENDIF SC_EMAIL_GET_EMAIL_AT_INDEX (i_CurrentlySelectedEmail, single_email_Received_Data) #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Grabbed email server data from inbox position. Single_email_Received_Data.id was ") cdPrintint(single_email_Received_Data.id) cdPrintnl() #ENDIF ArrayOfEmailsMarkedForDeletion[0] = (single_email_Received_Data.id) //ArrayOfEmailsMarkedForDeletion[0] = (i_CurrentlySelectedEmail + 1)// + (5 * i_InboxDepth) ) IF NumberOfEmailsOnThisPage > 0 NumberOfEmailsOnThisPage -- //If there are no more emails on this page, then we need to check if we are on a "older" page. If so, move up to a newer page. IF NumberOfEmailsOnThisPage = 0 IF i_InboxDepth > 0 //0 is the most recent batch of emails i_InboxDepth -- ENDIF ENDIF ENDIF LastDeletedEmailPosix = single_email_Received_Data.CreatePosixTime SC_EMAIL_DELETE_EMAILS (ArrayOfEmailsMarkedForDeletion, 1) //Comment in for testing cloud speed of deletion. //WAIT (10000) EmailState = eINITIAL ENDIF //* Commented out just now because of retrieval issue. IF g_iLastSelectedWebIndex = 7 //"Newer" IF i_InboxDepth > 0 //0 is the most recent batch of emails, so only do a regrab is we are deeper into the inbox. i_InboxDepth -- #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Newer button Selected. Resetting b_ReachedOldestEmail to FALSE. New i_InboxDepth is ") cdPrintint(i_InboxDepth) cdPrintnl() #ENDIF b_ReachedOldestEmail = FALSE //As we've moved up one page of depth to a newer page, this can no longer be TRUE. //Re-enable the older button... //BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(6) //SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) //END_SCALEFORM_MOVIE_METHOD() Play_Select_Beep() //Do a regrab of new batch EmailState = eINITIAL ELSE Play_Back_Beep() #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Newer button Selected but i_InboxDepth is already at ") cdPrintint(i_InboxDepth) cdPrintnl() #ENDIF ENDIF ENDIF IF g_iLastSelectedWebIndex = 6 //"Older" IF i_InboxDepth > -1 //1 is the most recent batch of emails, so only do a regrab is we go deeper into the inbox. AND b_ReachedOldestEmail = FALSE i_InboxDepth ++ #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Older button Selected. New i_InboxDepth is ") cdPrintint(i_InboxDepth) cdPrintnl() #ENDIF //Re-enable the newer button as the page depth must be greater than zero now. //BEGIN_SCALEFORM_MOVIE_METHOD(mov,"DISABLE_BUTTON") //SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(7) //SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) //END_SCALEFORM_MOVIE_METHOD() Play_Select_Beep() //Do a regrab of older batch EmailState = eINITIAL ELSE Play_Back_Beep() IF b_ReachedOldestEmail = TRUE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Older button selected but cannot function as b_ReachedOldestEmail is TRUE.") cdPrintnl() #ENDIF ELSE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - Older button selected but i_InboxDepth was weird at ") cdPrintint(i_InboxDepth) cdPrintnl() #ENDIF ENDIF ENDIF ENDIF //Email Batch tracking. //INT i_InboxDepth = 0 //INT i_CurrentlySelectedEmail = 0 ENDIF ENDIF ENDIF //Temp Unreferenced Hacks - REMOVE EVENTUALLY! IF b_DummyUnrefHacks = TRUE single_email_Received_Data.Contents[0] = EmailMessageSegments_to_Send[0] IF single_email_Received_Data.Id = single_email_Received_Data.Id ENDIF single_email_Sending_Data.Subject[0] = "Test Subject 1" single_email_Sending_Data.Subject[1] = "Test Subject 2" IF single_email_Sending_Data.Id = single_email_Sending_Data.Id ENDIF IF i_InboxDepth = i_InboxDepth ENDIF IF i_CurrentlySelectedEmail = i_CurrentlySelectedEmail ENDIF ENDIF IF b_Creating_Email_Message_Body_from_OSK Maintain_Email_Message_Body_Creation_from_OSK() ENDIF ENDPROC TEXT_LABEL_23 tl23RequestedInternetTextBlock = "" PROC PURCHASE_COMPLETE_AUDIO_LINE() IF g_bInMultiplayer EXIT ENDIF IF IS_PLAYER_DEAD(GET_PLAYER_INDEX()) EXIT ENDIF IF IS_ENTITY_DEAD(GET_PLAYER_PED(GET_PLAYER_INDEX())) EXIT ENDIF PLAY_PED_AMBIENT_SPEECH_NATIVE(GET_PLAYER_PED(GET_PLAYER_INDEX()), "PURCHASE_ONLINE", "SPEECH_PARAMS_FORCE") ENDPROC PROC SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT(STRING sTag, BROWSER_HELP_MESSAGE_TYPE_ENUM eTextType = BHMT_STRING, BOOL bForever = FALSE, INT iNumToDisplay1 = 0, INT iNumToDisplay2 = 0, STRING sStringToDisplay = NULL) g_sBrowserHelpMessage.bShow = TRUE g_sBrowserHelpMessage.tl15Tag = sTag g_sBrowserHelpMessage.eTextType = eTextType g_sBrowserHelpMessage.bForever = bForever g_sBrowserHelpMessage.iNumToDisplay1 = iNumToDisplay1 g_sBrowserHelpMessage.iNumToDisplay2 = iNumToDisplay2 g_sBrowserHelpMessage.tl15StringToDisplay = sStringToDisplay ENDPROC PROC CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT(BOOL bShow = FALSE) g_sBrowserHelpMessage.bShow = bShow g_sBrowserHelpMessage.tl15Tag = "" g_sBrowserHelpMessage.eTextType = BHMT_NONE g_sBrowserHelpMessage.bForever = FALSE g_sBrowserHelpMessage.iNumToDisplay1 = -1 g_sBrowserHelpMessage.iNumToDisplay2 = -1 g_sBrowserHelpMessage.tl15StringToDisplay = "" ENDPROC FUNC BOOL IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(BROWSER_HELP_MESSAGE_STRUCT &structBrowserHelpMessage) SWITCH structBrowserHelpMessage.eTextType CASE BHMT_STRING RETURN IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(structBrowserHelpMessage.tl15Tag) BREAK CASE BHMT_STRING_WITH_NUMBER RETURN IS_THIS_HELP_MESSAGE_WITH_NUMBER_BEING_DISPLAYED(structBrowserHelpMessage.tl15Tag, structBrowserHelpMessage.iNumToDisplay1) BREAK CASE BHMT_STRING_WITH_TWO_NUMBERS RETURN IS_THIS_HELP_MESSAGE_WITH_TWO_NUMBERS_BEING_DISPLAYED(structBrowserHelpMessage.tl15Tag, structBrowserHelpMessage.iNumToDisplay1, structBrowserHelpMessage.iNumToDisplay2) BREAK CASE BHMT_STRING_WITH_NUMBER_AND_STRING RETURN IS_THIS_HELP_MESSAGE_WITH_NUMBER_AND_STRING_BEING_DISPLAYED(structBrowserHelpMessage.tl15Tag, structBrowserHelpMessage.iNumToDisplay1, structBrowserHelpMessage.tl15StringToDisplay) BREAK CASE BHMT_NONE RETURN FALSE BREAK ENDSWITCH CASSERTLN(DEBUG_INTERNET, "IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(\"", structBrowserHelpMessage.tl15Tag, "\"), eTextType:", structBrowserHelpMessage.eTextType) RETURN FALSE ENDFUNC PROC PRINT_BROWSER_HELP(BROWSER_HELP_MESSAGE_STRUCT &structBrowserHelpMessage) SWITCH structBrowserHelpMessage.eTextType CASE BHMT_STRING IF NOT structBrowserHelpMessage.bForever CDEBUG3LN(DEBUG_INTERNET, "PRINT_BROWSER_HELP(\"", structBrowserHelpMessage.tl15Tag, "\")") PRINT_HELP(structBrowserHelpMessage.tl15Tag) ELSE CDEBUG3LN(DEBUG_INTERNET, "PRINT_BROWSER_HELP_FOREVER(\"", structBrowserHelpMessage.tl15Tag, "\")") PRINT_HELP_FOREVER(structBrowserHelpMessage.tl15Tag) ENDIF BREAK CASE BHMT_STRING_WITH_NUMBER IF NOT structBrowserHelpMessage.bForever CDEBUG3LN(DEBUG_INTERNET, "PRINT_BROWSER_HELP_WITH_NUMBER(\"", structBrowserHelpMessage.tl15Tag, "\", ", structBrowserHelpMessage.iNumToDisplay1, ")") PRINT_HELP_WITH_NUMBER(structBrowserHelpMessage.tl15Tag, structBrowserHelpMessage.iNumToDisplay1) ELSE CDEBUG3LN(DEBUG_INTERNET, "PRINT_BROWSER_HELP_FOREVER_WITH_NUMBER(\"", structBrowserHelpMessage.tl15Tag, "\", ", structBrowserHelpMessage.iNumToDisplay1, ")") PRINT_HELP_FOREVER_WITH_NUMBER(structBrowserHelpMessage.tl15Tag, structBrowserHelpMessage.iNumToDisplay1) ENDIF BREAK CASE BHMT_STRING_WITH_TWO_NUMBERS IF NOT structBrowserHelpMessage.bForever CDEBUG3LN(DEBUG_INTERNET, "PRINT_BROWSER_HELP_WITH_TWO_NUMBERS(\"", structBrowserHelpMessage.tl15Tag, "\", ", structBrowserHelpMessage.iNumToDisplay1, ", ", structBrowserHelpMessage.iNumToDisplay2, ")") PRINT_HELP_WITH_TWO_NUMBERS(structBrowserHelpMessage.tl15Tag, structBrowserHelpMessage.iNumToDisplay1, structBrowserHelpMessage.iNumToDisplay2) ELSE CDEBUG3LN(DEBUG_INTERNET, "PRINT_BROWSER_HELP_FOREVER_WITH_TWO_NUMBERS(\"", structBrowserHelpMessage.tl15Tag, "\", ", structBrowserHelpMessage.iNumToDisplay1, ", ", structBrowserHelpMessage.iNumToDisplay2, ")") PRINT_HELP_FOREVER_WITH_TWO_NUMBERS(structBrowserHelpMessage.tl15Tag, structBrowserHelpMessage.iNumToDisplay1, structBrowserHelpMessage.iNumToDisplay2) ENDIF BREAK CASE BHMT_STRING_WITH_NUMBER_AND_STRING IF NOT structBrowserHelpMessage.bForever CDEBUG3LN(DEBUG_INTERNET, "PRINT_BROWSER_HELP_WITH_NUMBER_AND_STRING(\"", structBrowserHelpMessage.tl15Tag, "\", ", structBrowserHelpMessage.iNumToDisplay1, ", \"", structBrowserHelpMessage.tl15StringToDisplay, "\")") PRINT_HELP_WITH_NUMBER_AND_STRING(structBrowserHelpMessage.tl15Tag, structBrowserHelpMessage.iNumToDisplay1, structBrowserHelpMessage.tl15StringToDisplay) ELSE CDEBUG3LN(DEBUG_INTERNET, "PRINT_BROWSER_HELP_FOREVER_WITH_NUMBER_AND_STRING(\"", structBrowserHelpMessage.tl15Tag, "\", ", structBrowserHelpMessage.iNumToDisplay1, ", \"", structBrowserHelpMessage.tl15StringToDisplay, "\")") PRINT_HELP_FOREVER_WITH_NUMBER_AND_STRING(structBrowserHelpMessage.tl15Tag, structBrowserHelpMessage.iNumToDisplay1, structBrowserHelpMessage.tl15StringToDisplay) ENDIF BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "PRINT_BROWSER_HELP(\"", structBrowserHelpMessage.tl15Tag, "\"), eTextType:", structBrowserHelpMessage.eTextType) BREAK ENDSWITCH ENDPROC PROC TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(BOOL bToggleOn) IF g_bDisable_toggle_player_proofs_when_processing_internet_shopping_basket CPRINTLN(DEBUG_INTERNET, "disabled TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET - ", GET_STRING_FROM_BOOL(bToggleOn)) EXIT ENDIF IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) AND bSetPlayerProofsWhileProcessingBasket != bToggleOn CPRINTLN(DEBUG_INTERNET, "TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET - ", GET_STRING_FROM_BOOL(bToggleOn)) DEBUG_PRINTCALLSTACK() IF bToggleOn SET_ENTITY_PROOFS(PLAYER_PED_ID(), TRUE, TRUE, TRUE, TRUE, TRUE) ELSE SET_ENTITY_PROOFS(PLAYER_PED_ID(), FALSE, FALSE, FALSE, FALSE, FALSE) ENDIF bSetPlayerProofsWhileProcessingBasket = bToggleOn ENDIF ENDPROC PROC FORCE_CLOSE_BROWSER() DEBUG_PRINTCALLSTACK() g_bBSWebsiteTerminated = TRUE g_bBSWebsiteNoSpaceTrigger = FALSE IF IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) CLEAR_HELP(TRUE) bTradeHelpPrinted = FALSE ENDIF g_sBrowserHelpMessage.bShow = FALSE IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_HACKT0") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_MOC0") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_AOC0") #IF FEATURE_HEIST_ISLAND OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_KOSA0") #ENDIF CLEAR_HELP(TRUE) bTradeHelpPrinted = FALSE ENDIF IF bTradeHelpPrinted AND IS_HELP_MESSAGE_BEING_DISPLAYED() CLEAR_HELP(TRUE) bTradeHelpPrinted = FALSE ENDIF CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() IF g_iEpsilonTutorialStage <> -1 KILL_ANY_CONVERSATION() g_iEpsilonTutorialStage = -1 ENDIF IF HAS_ADDITIONAL_TEXT_LOADED(SHOP_TEXT_SLOT) CLEAR_ADDITIONAL_TEXT(SHOP_TEXT_SLOT, FALSE) ENDIF IF bProcessingBasket IF GET_CASH_TRANSACTION_STATUS(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) = CASH_TRANSACTION_STATUS_PENDING CPRINTLN(DEBUG_INTERNET, "FORCE_CLOSE_BROWSER: force close while a basket transaction is still pending processing - update reply to AUTO_PROCESS") UPDATE_CASH_TRANSACTION_FLAGS(GET_BASKET_TRANSACTION_SCRIPT_INDEX(), CTPF_AUTO_PROCESS_REPLY) ELSE CPRINTLN(DEBUG_INTERNET, "FORCE_CLOSE_BROWSER: force close while a basket transaction has finished processing - delete") DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF bProcessingBasket = FALSE iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED USE_FAKE_MP_CASH(FALSE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) ENDIF TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) IF g_bInMultiplayer AND bRunningOrgNameKeyboard BUSYSPINNER_OFF() KeyBoardData.iProfanityToken = 0 ENDIF IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_SPVE0A) PRINT_HELP("HELP_SPVE2a") //Go to dynasty8realestate.com and purchase an executive Office to unlock exclusive CEO content.") CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_SPVE0A) ENDIF IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_SPVE0B) PRINT_HELP("HELP_SPVE2b") //Go to your Office ~BLIP_OFFICE~ and access the Vehicle Cargo update to purchase a Vehicle Warehouse.") CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_SPVE0B) ENDIF IF iSVM_Unlock_Feed_Message != 0 IF IS_BIT_SET(iSVM_Unlock_Feed_Message, SVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(DUNE5)) PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "MODE_RMP") //Ramped Up ENDIF IF IS_BIT_SET(iSVM_Unlock_Feed_Message, SVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(WASTELANDER)) PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "FRT_TRNS") //Transporter ENDIF IF IS_BIT_SET(iSVM_Unlock_Feed_Message, SVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(BLAZER5)) PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "MODE_STK") //Stockpiling ENDIF IF IS_BIT_SET(iSVM_Unlock_Feed_Message, SVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(PHANTOM2)) PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "MODE_PLW") //Plowed ENDIF IF IS_BIT_SET(iSVM_Unlock_Feed_Message, SVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(VOLTIC2)) PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "MODE_VEL") //Velocity ENDIF IF IS_BIT_SET(iSVM_Unlock_Feed_Message, SVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(TECHNICAL2)) PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "MODE_AA") //Amphibious Assault ENDIF IF IS_BIT_SET(iSVM_Unlock_Feed_Message, SVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(BOXVILLE5)) PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "FRT_MODE") //Fortified ENDIF IF IS_BIT_SET(iSVM_Unlock_Feed_Message, SVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(RUINER2)) PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "MODE_FUL") //Fully Loaded ENDIF iSVM_Unlock_Feed_Message = 0 ENDIF IF iWVM_Unlock_Feed_Message != 0 IF IS_BIT_SET(iWVM_Unlock_Feed_Message, WVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(APC)) // PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "MODE_RMP") // ENDIF IF IS_BIT_SET(iWVM_Unlock_Feed_Message, WVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(DUNE3)) // PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "FRT_TRNS") // ENDIF IF IS_BIT_SET(iWVM_Unlock_Feed_Message, WVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(HALFTRACK)) // PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "MODE_STK") // ENDIF IF IS_BIT_SET(iWVM_Unlock_Feed_Message, WVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(OPPRESSOR)) // PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "MODE_PLW") // ENDIF IF IS_BIT_SET(iWVM_Unlock_Feed_Message, WVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(TAMPA3)) // PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "MODE_VEL") // ENDIF IF IS_BIT_SET(iWVM_Unlock_Feed_Message, WVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(TRAILERSMALL2)) // PRINT_TICKER_WITH_STRING("WEB_SBV_UNLOCK", "MODE_FUL") // PRINT_HELP("HELP_WEVE3f") //You can now request the Vom Feuer Anti-Aircraft Trailer via the Vehicles section of the Interaction Menu. ENDIF iWVM_Unlock_Feed_Message = 0 ENDIF IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_BAEQ2A) PRINT_HELP("HELP_BAEQ2a") //You can now request a Ballistic Equipment drop via the Inventory section of the Interaction Menu. CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BAEQ2A) ENDIF IF iFDS_Unlock_Feed_Message != 0 IF IS_BIT_SET(iFDS_Unlock_Feed_Message, GET_FDS_VEHICLE_SLOT(KHANJALI)) PRINT_HELP("HELP_FDS3a") ENDIF IF IS_BIT_SET(iFDS_Unlock_Feed_Message, GET_FDS_VEHICLE_SLOT(CHERNOBOG)) PRINT_HELP("HELP_FDS3b") ENDIF IF IS_BIT_SET(iFDS_Unlock_Feed_Message, GET_FDS_VEHICLE_SLOT(RIOT2)) PRINT_HELP("HELP_FDS3c") ENDIF IF IS_BIT_SET(iFDS_Unlock_Feed_Message, GET_FDS_VEHICLE_SLOT(THRUSTER)) PRINT_HELP("HELP_FDS3d") Send_MP_Txtmsg_From_CharSheetID(CHAR_LESTER, "TXT_CAR_THRUST") ENDIF iFDS_Unlock_Feed_Message = 0 ENDIF IF iBBS_Unlock_Feed_Message != 0 iBBS_Unlock_Feed_Message = 0 ENDIF IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0DB) CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0DB) ENDIF IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0HA) CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0HA) ENDIF IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0NC) CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0NC) ENDIF IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0HT) CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0HT) ENDIF IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_HACKT2) PRINT_HELP("HELP_HACKT2") //Go to the lowest garage level of your Nightclub ~BLIP_BAT_CLUB_PROPERTY~ to modify your Hacker Truck. You can also request it nearby via the Hacker Truck Services section of the Interaction Menu. CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_HACKT2) ENDIF // #IF FEATURE_HEIST_ISLAND // IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_SUBMARINE) // PRINT_HELP("HELP_SUBMA_P") //Go to the planning table on-board your new Submarine ~RADAR_TRACE_SUB2~ to begin The Island Heist as a VIP, CEO or MC President. You can also request the Submarine nearby via the Services section of the Interactions Menu. // CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_SUBMARINE) // ENDIF // //moved this help to after phone call. // //url:bugstar:6731525 - Can we please tweak the spawning and messaging after purchasing the submarine as follows? // #ENDIF bPanicShutdownStart = TRUE g_BrowserStartState = SBSS_Default g_bBrowserNagScreenState = FALSE g_bBrowserVoucherNagScreenState = FALSE g_bBrowserGoToStoreTrigger = FALSE MP_FORCE_TERMINATE_INTERNET_CLEAR() SP_FORCE_TERMINATE_INTERNET_CLEAR() #IF IS_DEBUG_BUILD //Steve T addition for 2133870 cdPrintnl() cdPrintstring("AppInternet - Marking Eyefind email instructional buttons as no longer needed from FORCE_CLOSE_BROWSER and removing text entry box.") cdPrintnl() #ENDIF SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED (SF_EyefindInstButtonsIndex) //#2133870 FORCE_CLOSE_TEXT_INPUT_BOX() //Fix for 2232389 - Prevent the text entry box on PC in the first instance from persisting when the browser has closed. //Deativate multihead blinders on PC IF SET_MULTIHEAD_SAFE(FALSE,FALSE,bActivatedMultiheadBlinders, TRUE) bActivatedMultiheadBlinders = FALSE ENDIF ENDPROC FUNC BOOL DO_CHECK_TO_TERMINATE_WHILE_LOOPS() IF g_bInMultiplayer AND MP_FORCE_TERMINATE_INTERNET_ACTIVE() CPRINTLN(DEBUG_INTERNET, "DO_CHECK_TO_TERMINATE_WHILE_LOOPS - MP force terminate internet active") RETURN FALSE ENDIF IF NOT g_bInMultiplayer AND SP_FORCE_TERMINATE_INTERNET_ACTIVE() CPRINTLN(DEBUG_INTERNET, "DO_CHECK_TO_TERMINATE_WHILE_LOOPS - SP force terminate internet active") RETURN FALSE ENDIF IF IS_PLAYER_SWITCH_IN_PROGRESS() CPRINTLN(DEBUG_INTERNET, "DO_CHECK_TO_TERMINATE_WHILE_LOOPS - player switch is in progress") RETURN FALSE ENDIF RETURN TRUE ENDFUNC FUNC BOOL DO_CHECK_FOR_RAGDOLL_OR_DEAD() IF g_bInMultiplayer IF SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE() CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: g_bInMultiplayer and SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE") FORCE_CLOSE_BROWSER() RETURN FALSE ENDIF IF IS_PAUSE_MENU_ACTIVE() IF NOT bProcessingBasket IF GET_PAUSE_MENU_STATE() != PM_SHUTTING_DOWN CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: g_bInMultiplayer and IS_PAUSE_MENU_ACTIVE, and GET_PAUSE_MENU_STATE() = ", GET_PAUSE_MENU_STATE()) FORCE_CLOSE_BROWSER() RETURN FALSE ELSE CDEBUG1LN(DEBUG_INTERNET, " force_close_browser: g_bInMultiplayer and IS_PAUSE_MENU_ACTIVE, but GET_PAUSE_MENU_STATE() = ", GET_PAUSE_MENU_STATE()) ENDIF ELSE CDEBUG1LN(DEBUG_INTERNET, " force_close_browser: g_bInMultiplayer and IS_PAUSE_MENU_ACTIVE, but bProcessingBasket...") ENDIF ENDIF IF IS_PLAYER_IN_CORONA() CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: g_bInMultiplayer and player in corona in MP") RETURN FALSE ENDIF IF g_b_OnLeaderboard CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: g_bInMultiplayer and g_b_OnLeaderboard") FORCE_CLOSE_BROWSER() RETURN FALSE ENDIF ENDIF IF g_bResultScreenDisplaying CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: g_bResultScreenDisplaying()") FORCE_CLOSE_BROWSER() RETURN FALSE ENDIF IF IS_PLAYER_SWITCH_IN_PROGRESS() CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: IS_PLAYER_SWITCH_IN_PROGRESS()") FORCE_CLOSE_BROWSER() RETURN TRUE ENDIF IF g_bPlayerLockedInToTrigger CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: g_bPlayerLockedInToTrigger") FORCE_CLOSE_BROWSER() RETURN FALSE ENDIF IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: IS_PLAYER_BEING_ARRESTED()") FORCE_CLOSE_BROWSER() RETURN FALSE ENDIF IF GET_ENTITY_HEALTH(GET_PLAYER_PED(GET_PLAYER_INDEX())) != g_iBrowserHealthDelta IF GET_ENTITY_HEALTH(GET_PLAYER_PED(GET_PLAYER_INDEX())) < g_iBrowserHealthDelta // Losing health only CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: GET_ENTITY_HEALTH()") FORCE_CLOSE_BROWSER() RETURN TRUE ENDIF ENDIF IF NOT IS_ENTITY_DEAD(GET_PLAYER_PED(GET_PLAYER_INDEX())) IF IS_PED_RAGDOLL(GET_PLAYER_PED(GET_PLAYER_INDEX())) CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: IS_PED_RAGDOLL()") FORCE_CLOSE_BROWSER() RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: IS_ENTITY_DEAD()") FORCE_CLOSE_BROWSER() RETURN TRUE ENDIF IF IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP() CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()") FORCE_CLOSE_BROWSER() RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC DISABLE_CONTROL_ACTIONS_GENERAL() DO_CHECK_FOR_RAGDOLL_OR_DEAD() DISABLE_ALL_CONTROL_ACTIONS(PLAYER_CONTROL) DISABLE_ALL_CONTROL_ACTIONS(FRONTEND_CONTROL) IF !bControlsEnabled EXIT ENDIF ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_LB) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_LT) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RB) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RT) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_SELECT) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_UP) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_X) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_Y) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_X) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_Y) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_X) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_Y) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_X) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_Y) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_FRONTEND_UP) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA) IF NOT (GET_CAM_VIEW_MODE_FOR_CONTEXT(GET_CAM_ACTIVE_VIEW_MODE_CONTEXT()) = CAM_VIEW_MODE_FIRST_PERSON) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_LR) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_UD) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_UP_ONLY) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_DOWN_ONLY) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_LEFT_ONLY) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_RIGHT_ONLY) ENDIF ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_CINEMATIC_UD) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_CINEMATIC_LR) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_FRONTEND_LS) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_FRONTEND_RS) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SCRIPT_LT) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SCRIPT_RT) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SCRIPT_LS) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SCRIPT_RS) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X) ENABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y) // Make sure cursor inputs are exclusive so we don't get any gameplay conflicts in MP. SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP) // Reenabling this control, as setting INPUT_CURSOR_SCROLL_DOWN as exclusive then disables the Up input! B*1985333 // Allow pause input, unless typing into a text field (otherwise typing P could pause the game) IF NOT (IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) AND ( GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_KEYBOARD_FLAG_INDEX) != 0 AND NOT bTVOn )) ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE) ENDIF REPLAY_PREVENT_RECORDING_THIS_FRAME() ENDPROC PROC PREP_BROWSER_BUTTONS(BOOL bNullCheck, BOOL bAcceptCancel = FALSE, BOOL bShowBrowser = FALSE) CPRINTLN(DEBUG_INTERNET, "Refreshing browser buttons (bNullCheck:", GET_STRING_FROM_BOOL(bNullCheck), ", bAcceptCancel:", GET_STRING_FROM_BOOL(bAcceptCancel), ", bShowBrowser:", GET_STRING_FROM_BOOL(bShowBrowser), ")") IF mov = NULL mov = REQUEST_SCALEFORM_MOVIE("web_browser") ENDIF IF buttons = NULL OR !bNullCheck OR NOT HAS_SCALEFORM_MOVIE_FILENAME_LOADED("INSTRUCTIONAL_BUTTONS") buttons = REQUEST_SCALEFORM_MOVIE_INSTANCE("INSTRUCTIONAL_BUTTONS") ENDIF CPRINTLN(DEBUG_INTERNET, "PREP_BROWSER_BUTTONS : waiting for load...") SETTIMERA(0) WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(buttons)) AND TIMERA() < 1500 IF bShowBrowser //RENDER_BROWSER() DISABLE_CONTROL_ACTIONS_GENERAL() SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) IF NOT HAS_SCALEFORM_MOVIE_LOADED(mov) CASSERTLN(DEBUG_INTERNET, "PREP_BROWSER_BUTTONS: scaleform movie mov has not loaded") ELSE DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0) ENDIF ENDIF WAIT(0) ENDWHILE CPRINTLN(DEBUG_INTERNET, "...buttons loaded [", TIMERA(), "ms]") IF buttons != NULL AND buttons != INT_TO_NATIVE(SCALEFORM_INDEX, -1) AND HAS_SCALEFORM_MOVIE_LOADED(buttons) BEGIN_SCALEFORM_MOVIE_METHOD(buttons, "CLEAR_ALL") END_SCALEFORM_MOVIE_METHOD() ENDIF INT iSlot = 0 IF g_bBrowserGoToStoreTrigger OR bAcceptCancel BEGIN_SCALEFORM_MOVIE_METHOD(buttons, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot) ++iSlot SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("CELL_270") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(buttons, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot) ++iSlot SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("CELL_271") END_SCALEFORM_MOVIE_METHOD() ELSE IF bKeyboardHelp AND bTVOn = FALSE // This is needed because we're faking the keyboard on screen when playing video to stop the back button qutting the site instead of quitting the video. SR //SELECT X (button_30) //CLOSE O (button_31) //MOVE dpad (button_9) //CASSERTLN(DEBUG_INTERNET, "Keyboard instructional mode triggered, pass this bug to Default Levels.") BEGIN_SCALEFORM_MOVIE_METHOD(buttons, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot) ++iSlot IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUTGROUP_CURSOR)) ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUTGROUP_FRONTEND_DPAD_ALL)) ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("IB_NAVIGATE") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(buttons, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot) ++iSlot IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT)) ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)) ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("APINTRHLSEL") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(buttons, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot) ++iSlot IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL)) ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)) ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("APINTRHLDEL") END_SCALEFORM_MOVIE_METHOD() ELSE // Regular browser help /* BEGIN_SCALEFORM_MOVIE_METHOD(buttons, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot) ++iSlot IF g_BrowserStartState != SBSS_CashMachineFinance SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_Y)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("APINTRHLP") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("APINTRHLPATM") ENDIF END_SCALEFORM_MOVIE_METHOD() // If back button available IF g_BrowserStartState != SBSS_CashMachineFinance AND bShowingBackButton BEGIN_SCALEFORM_MOVIE_METHOD(buttons, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot) ++iSlot SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL))) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("APINTRHLPATM") END_SCALEFORM_MOVIE_METHOD() ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(buttons, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot) ++iSlot SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_Y))) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("APINTRHLPSTK") END_SCALEFORM_MOVIE_METHOD() */ ENDIF ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(buttons, "DRAW_INSTRUCTIONAL_BUTTONS") END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC RENDER_NAG_SCREEN() CPRINTLN(DEBUG_INTERNET, "RENDER_NAG_SCREEN(", PICK_STRING(g_eBrosNagReason = NSR_CASH, ", NSR_CASH", PICK_STRING(g_eBrosNagReason = NSR_DLC, ", NSR_DLC", PICK_STRING(g_eBrosNagReason = NSR_VOUCHER, ", NSR_VOUCHER", ""))), ")") 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 IF (g_eBrosNagReason != NSR_VOUCHER) IF !g_bBrowserNagScreenState g_bBrowserNagScreenState = FALSE g_sTransitionSessionData.sEndReserve.stMPBrowserFromShopSite = lastSiteURL PREP_BROWSER_BUTTONS(TRUE) g_bBrowserNagScreenState = TRUE ENDIF pHeaderTextLabel = ("BRSCRWTEX") //Alert IF NOT HAS_ENTERED_OFFLINE_SAVE_FM() SWITCH g_eBrosNagReason CASE NSR_CASH pBodyTextLabel = ("BRDISTEX") BREAK //You have insufficient funds. You can add GTA Dollars to your in-game account. CASE NSR_DLC pBodyTextLabel = ("BRDISDLC") BREAK //You do not own this downloadable content. ENDSWITCH pBodySubTextLabel = ("BRSHETEX") //Would you like to visit the Store? ELSE SWITCH g_eBrosNagReason CASE NSR_CASH pBodyTextLabel = ("BRDISTES") BREAK //You have insufficient funds. You will be able to add GTA Dollars when signed into your in-game account. CASE NSR_DLC pBodyTextLabel = ("BRDISDLC") BREAK //You do not own this downloadable content. ENDSWITCH pBodySubTextLabel = ("BRSHETES") //You do not own this downloadable content. ENDIF ELSE IF !g_bBrowserVoucherNagScreenState g_bBrowserVoucherNagScreenState = FALSE // g_sTransitionSessionData.sEndReserve.stMPBrowserFromShopSite = lastSiteURL PREP_BROWSER_BUTTONS(TRUE) g_bBrowserVoucherNagScreenState = TRUE ENDIF pHeaderTextLabel = ("DVSCRWTEX") //Discount Vouchers SWITCH INT_TO_ENUM(COUPON_TYPE, g_iBrowserGoToStoreItemHash) CASE COUPON_CASINO_PLANE_SITE pBodyTextLabel = ("DVDISTEX1") BREAK //This purchase will use your discount for Elitas Travel. CASE COUPON_CASINO_BOAT_SITE pBodyTextLabel = ("DVDISTEX2") BREAK //This purchase will use your discount for Dock Tease. CASE COUPON_CASINO_CAR_SITE pBodyTextLabel = ("DVDISTEX3") BREAK //This purchase will use your discount for Legendary Motorsport. CASE COUPON_CASINO_CAR_SITE2 pBodyTextLabel = ("DVDISTEX6") BREAK //This purchase will use your discount for Southern San Andreas Super Autos. CASE COUPON_CASINO_MIL_SITE pBodyTextLabel = ("DVDISTEX4") BREAK //This purchase will use your discount for Warstock Cache & Carry. CASE COUPON_CASINO_BIKE_SITE pBodyTextLabel = ("DVDISTEX5") BREAK //This purchase will use your discount for Pedal and Metal. ENDSWITCH pBodySubTextLabel = ("DVSHETEX") //Using yout voucher will apply the discount ENDIF SET_WARNING_MESSAGE_WITH_HEADER(pHeaderTextLabel, pBodyTextLabel, iButtonFlagBitfield, pBodySubTextLabel) ENDPROC SCALEFORM_INDEX siAlert INT iPropTimer = -1 /// PURPOSE: /// Holds the screen visible for a second for 1582056 PROC POST_BLOCKING_IS_PROPERTY_OVERWRITE_OK() IF iPropTimer > 0 iPropTimer -= CEIL(0.0 +@ 1000) IF NOT HAS_SCALEFORM_MOVIE_LOADED(siAlert) CASSERTLN(DEBUG_INTERNET, "POST_BLOCKING_IS_PROPERTY_OVERWRITE_OK: scaleform movie siAlert has not loaded") ELSE DRAW_SCALEFORM_MOVIE_FULLSCREEN(siAlert,255,255,255,0) ENDIF ELSE IF siAlert != NULL SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(siAlert) siAlert = NULL ENDIF ENDIF ENDPROC /// PURPOSE: Get's the last selected office from SCALEFORM_OFFICE_DATA FUNC INT GET_LAST_CLICKED_OFFICE() INT iOffice = (GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 0, 6)) iOffice += PROPERTY_OFFICE_1 CDEBUG1LN(DEBUG_INTERNET, "GET_LAST_CLICKED_OFFICE: ", iOffice) IF iOffice < PROPERTY_OFFICE_1 CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_OFFICE: iOffice < PROPERTY_OFFICE_1: ") iOffice = PROPERTY_OFFICE_1 ELIF iOffice > PROPERTY_OFFICE_4 CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_OFFICE: iOffice > PROPERTY_OFFICE_4: ") iOffice = PROPERTY_OFFICE_4 ENDIF RETURN iOffice ENDFUNC /// PURPOSE: Get's the last selected office from button clicks INT iLastClickedOffice = 0 FUNC INT GET_CACHED_LAST_CLICKED_OFFICE() CDEBUG1LN(DEBUG_INTERNET, "GET_CACHED_LAST_CLICKED_OFFICE: ", iLastClickedOffice) RETURN iLastClickedOffice ENDFUNC /// PURPOSE: Get's the last selected Clubhouse from SCALEFORM_CLUBHOUSE_DATA FUNC INT GET_LAST_CLICKED_CLUBHOUSE() INT iClubhouse = (GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 6)) iClubhouse += PROPERTY_CLUBHOUSE_1_BASE_A CDEBUG1LN(DEBUG_INTERNET, "GET_LAST_CLICKED_CLUBHOUSE: ", iClubhouse) IF iClubhouse < PROPERTY_CLUBHOUSE_1_BASE_A CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_CLUBHOUSE: iClubhouse < PROPERTY_CLUBHOUSE_1_BASE_A: ") iClubhouse = PROPERTY_CLUBHOUSE_1_BASE_A ELIF iClubhouse > PROPERTY_CLUBHOUSE_12_BASE_B CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_CLUBHOUSE: iClubhouse > PROPERTY_CLUBHOUSE_12_BASE_B: ") iClubhouse = PROPERTY_CLUBHOUSE_12_BASE_B ENDIF RETURN iClubhouse ENDFUNC /// PURPOSE: Get's the last selected garage from SCALEFORM_OFFICE_GARAGE_DATA FUNC INT GET_LAST_CLICKED_OFFICE_GARAGE() INT iGarage = (GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_A_DATA), 0, 7)) iGarage += PROPERTY_OFFICE_1_GARAGE_LVL1 CDEBUG1LN(DEBUG_INTERNET, "GET_LAST_CLICKED_OFFICE_GARAGE: ", iGarage) IF iGarage < PROPERTY_OFFICE_1_GARAGE_LVL1 CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_OFFICE_GARAGE: iGarage < PROPERTY_OFFICE_1_GARAGE_LVL1: ") iGarage = PROPERTY_OFFICE_1_GARAGE_LVL1 ELIF iGarage > PROPERTY_OFFICE_4_GARAGE_LVL3 CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_OFFICE_GARAGE: iGarage > PROPERTY_OFFICE_4_GARAGE_LVL3: ") iGarage = PROPERTY_OFFICE_4_GARAGE_LVL3 ENDIF RETURN iGarage ENDFUNC /// PURPOSE: Get's the last selected BUNKER from SCALEFORM_BUNKER_DATA FUNC INT GET_LAST_CLICKED_BUNKER() INT iBunker = (GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 6)) iBunker += ENUM_TO_INT(FACTORY_ID_BUNKER_1) CDEBUG1LN(DEBUG_INTERNET, "GET_LAST_CLICKED_BUNKER: ", iBunker) IF iBunker < ENUM_TO_INT(FACTORY_ID_BUNKER_1) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_BUNKER: iBunker ", iBunker, " < FACTORY_ID_BUNKER_1: ") iBunker = ENUM_TO_INT(FACTORY_ID_BUNKER_1) ELIF iBunker > ENUM_TO_INT(FACTORY_ID_BUNKER_12) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_BUNKER: iBunker ", iBunker, " > FACTORY_ID_BUNKER_12: ") iBunker = ENUM_TO_INT(FACTORY_ID_BUNKER_12) ENDIF RETURN iBunker ENDFUNC /// PURPOSE: Get's the last selected hangar from SCALEFORM_BUNKER_DATA FUNC INT GET_LAST_CLICKED_HANGAR() INT iHangar = (GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 6)) iHangar += ENUM_TO_INT(LSIA_HANGAR_1) CDEBUG1LN(DEBUG_INTERNET, "GET_LAST_CLICKED_HANGAR: ", iHangar) IF iHangar < ENUM_TO_INT(LSIA_HANGAR_1) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_HANGAR: iHangar ", iHangar, " < LSIA_HANGAR_1: ") iHangar = ENUM_TO_INT(LSIA_HANGAR_1) ELIF iHangar > ENUM_TO_INT(ZANCUDO_HANGAR_3499) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_HANGAR: iHangar ", iHangar, " > ZANCUDO_HANGAR_3499: ") iHangar = ENUM_TO_INT(ZANCUDO_HANGAR_3499) ENDIF RETURN iHangar ENDFUNC /// PURPOSE: Get's the last selected defunct base from SCALEFORM_BUNKER_DATA FUNC INT GET_LAST_CLICKED_DEFUNCT_BASE() INT iBase = (GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 6)) iBase += ENUM_TO_INT(DEFUNCT_BASE_1) CDEBUG1LN(DEBUG_INTERNET, "GET_LAST_CLICKED_DEFUNCT_BASE: ", iBase) IF iBase < ENUM_TO_INT(DEFUNCT_BASE_1) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_DEFUNCT_BASE: iBase ", iBase, " < DEFUNCT_BASE_1: ") iBase = ENUM_TO_INT(DEFUNCT_BASE_1) ELIF iBase >= ENUM_TO_INT(DEFUNCT_BASE_ID_COUNT) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_DEFUNCT_BASE: iBase ", iBase, " >= DEFUNCT_BASE_ID_COUNT: ") iBase = ENUM_TO_INT(DEFUNCT_BASE_ID_COUNT)-1 ENDIF RETURN iBase ENDFUNC /// PURPOSE: Get's the last selected nightclub from SCALEFORM_BUNKER_DATA FUNC INT GET_LAST_CLICKED_NIGHTCLUB() INT iNightclub = (GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 6)) iNightclub += ENUM_TO_INT(NIGHTCLUB_LA_MESA) CDEBUG1LN(DEBUG_INTERNET, "GET_LAST_CLICKED_NIGHTCLUB: ", iNightclub) IF iNightclub < ENUM_TO_INT(NIGHTCLUB_LA_MESA) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_NIGHTCLUB: iNightclub ", iNightclub, " < NIGHTCLUB_LA_MESA: ") iNightclub = ENUM_TO_INT(NIGHTCLUB_LA_MESA) ELIF iNightclub >= ENUM_TO_INT(NIGHTCLUB_ID_COUNT) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_NIGHTCLUB: iBase ", iNightclub, " >= NIGHTCLUB_ID_COUNT: ") iNightclub = ENUM_TO_INT(NIGHTCLUB_ID_COUNT)-1 ENDIF RETURN iNightclub ENDFUNC //#IF FEATURE_ARENA_WARS ///// PURPOSE: Get's the last selected ARENA_GARAGE from SCALEFORM_BUNKER_DATA //FUNC INT GET_LAST_CLICKED_ARENA_GARAGE() // INT iArenaGarage = (GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_ARENA_WARS_DATA), 0, 6)) // // iArenaGarage += ENUM_TO_INT(ARENA_GARAGE_1) // CDEBUG1LN(DEBUG_INTERNET, "GET_LAST_CLICKED_ARENA_GARAGE: ", iArenaGarage) // // IF iArenaGarage < ENUM_TO_INT(ARENA_GARAGE_1) // CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_ARENA_GARAGE: iArenaGarage ", iArenaGarage, " < ARENA_GARAGE_1: ") // iArenaGarage = ENUM_TO_INT(ARENA_GARAGE_1) // ELIF iArenaGarage >= ENUM_TO_INT(ARENA_GARAGE_ID_COUNT) // CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_ARENA_GARAGE: iArenaGarage ", iArenaGarage, " >= ARENA_GARAGE_ID_COUNT: ") // iArenaGarage = ENUM_TO_INT(ARENA_GARAGE_ID_COUNT)-1 // ENDIF // // RETURN iArenaGarage //ENDFUNC //#ENDIF /// PURPOSE: Get's the last selected Arcade FUNC INT GET_LAST_CLICKED_ARCADE() INT iArcade = (GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 6)) iArcade += ENUM_TO_INT(ARCADE_PROPERTY_PALETO_BAY) CDEBUG1LN(DEBUG_INTERNET, "GET_LAST_CLICKED_ARCADE: ", iArcade) IF iArcade < ENUM_TO_INT(ARCADE_PROPERTY_PALETO_BAY) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_ARCADE: iArcade ", iArcade, " < ARCADE_PROPERTY_PALETO_BAY: ") iArcade = ENUM_TO_INT(ARCADE_PROPERTY_PALETO_BAY) ELIF iArcade >= ENUM_TO_INT(ARCADE_PROPERTY_ID_COUNT) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_ARCADE: iArcade ", iArcade, " >= ARCADE_PROPERTY_ID_COUNT: ") iArcade = ENUM_TO_INT(ARCADE_PROPERTY_ID_COUNT) - 1 ENDIF RETURN iArcade ENDFUNC /// PURPOSE: Get's the last selected auto shop. FUNC INT GET_LAST_CLICKED_AUTO_SHOP() INT iAutoShop = (GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 3)) iAutoShop += ENUM_TO_INT(AUTO_SHOP_PROPERTY_LA_MESA) CDEBUG1LN(DEBUG_INTERNET, "GET_LAST_CLICKED_AUTO_SHOP: ", iAutoShop) IF iAutoShop < ENUM_TO_INT(AUTO_SHOP_PROPERTY_LA_MESA) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_AUTO_SHOP: iAutoShop ", iAutoShop, " < AUTO_SHOP_PROPERTY_LA_MESA: ") iAutoShop = ENUM_TO_INT(AUTO_SHOP_PROPERTY_LA_MESA) ELIF iAutoShop >= ENUM_TO_INT(AUTO_SHOP_PROPERTY_ID_COUNT) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_AUTO_SHOP: iAutoShop ", iAutoShop, " >= AUTO_SHOP_PROPERTY_ID_COUNT: ") iAutoShop = ENUM_TO_INT(AUTO_SHOP_PROPERTY_ID_COUNT) - 1 ENDIF RETURN iAutoShop ENDFUNC #IF FEATURE_TUNER /// PURPOSE: Get's the last selected fixer HQ from SCALEFORM_OFFICE_DATA FUNC INT GET_LAST_CLICKED_FIXER_HQ() INT iFixerHQ = (GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 0, 6)) iFixerHQ += ENUM_TO_INT(FIXER_HQ_HAWICK) CDEBUG1LN(DEBUG_INTERNET, "GET_LAST_CLICKED_FIXER_HQ: ", iFixerHQ) IF iFixerHQ < ENUM_TO_INT(FIXER_HQ_HAWICK) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_FIXER_HQ: iFixerHQ ", iFixerHQ, " < FIXER_HQ_HAWICK: ") iFixerHQ = ENUM_TO_INT(FIXER_HQ_HAWICK) ELIF iFixerHQ >= ENUM_TO_INT(FIXER_HQ_ID_COUNT) CASSERTLN(DEBUG_INTERNET, "GET_LAST_CLICKED_FIXER_HQ: iFixerHQ ", iFixerHQ, " >= FIXER_HQ_ID_COUNT: ") iFixerHQ = ENUM_TO_INT(FIXER_HQ_ID_COUNT) - 1 ENDIF RETURN iFixerHQ ENDFUNC #ENDIF PROC GET_SCALEFORM_OFFICE_DATA(INT &iStyle,INT &iPersonnel,INT &iFont,INT &iColour,INT &iGunLocker,INT &iVault,INT &iAccommodation, INT &iGarage1Style, INT &iGarage1Lighting, INT &iGarage1Number, INT &iGarage2Style, INT &iGarage2Lighting, INT &iGarage2Number, INT &iGarage3Style, INT &iGarage3Lighting, INT &iGarage3Number, INT &iModshop) iStyle = GET_OFFICE_INTERIOR_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 6, 4)) iPersonnel = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 10, 1) iFont = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 11, 4) iColour = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 15, 4) iGunLocker = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 19, 1) iVault = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 20, 1) iAccommodation = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 21, 1) IF GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_A_DATA), 7, 1) = 0 iGarage1Style = -1 iGarage1Lighting = -1 iGarage1Number = -1 ELSE iGarage1Style = GET_OFFICE_GARAGE_INTERIOR_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_A_DATA), 8, 2)) iGarage1Lighting = GET_OFFICE_GARAGE_LIGHTING_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_A_DATA), 10, 4)) iGarage1Number = GET_OFFICE_GARAGE_NUMBERING_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_A_DATA), 14, 4)) ENDIF IF GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_A_DATA), 18, 1) = 0 iGarage2Style = -1 iGarage2Lighting = -1 iGarage2Number = -1 ELSE iGarage2Style = GET_OFFICE_GARAGE_INTERIOR_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_A_DATA), 19, 2)) iGarage2Lighting = GET_OFFICE_GARAGE_LIGHTING_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_A_DATA), 21, 4)) iGarage2Number = GET_OFFICE_GARAGE_NUMBERING_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_A_DATA), 25, 4)) ENDIF IF GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_B_DATA), 7, 1) = 0 iGarage3Style = -1 iGarage3Lighting = -1 iGarage3Number = -1 ELSE iGarage3Style = GET_OFFICE_GARAGE_INTERIOR_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_B_DATA), 8, 2)) iGarage3Lighting = GET_OFFICE_GARAGE_LIGHTING_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_B_DATA), 10, 4)) iGarage3Number = GET_OFFICE_GARAGE_NUMBERING_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_B_DATA), 14, 4)) ENDIF IF GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_B_DATA), 18, 1) = 0 iModshop = 0 //-1 ELSE iModshop = GET_OFFICE_MODSHOP_INTERIOR_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_B_DATA), 19, 5)) ENDIF ENDPROC PROC GET_SCALEFORM_CLUBHOUSE_DATA(INT iProperty, INT &iWall,INT &iHanging,INT &iFurniture,INT &iColourScheme,INT &iFont,INT &iFontColour,INT &iEmblem,INT &iHideSinage,INT &iGunLocker,INT &iGarage) IF iProperty != -1 iWall = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 6, 1) iHanging = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 7, 1) iFurniture = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 8, 1) iColourScheme = GET_CLUBHOUSE_INTERIOR_FROM_SF(iProperty, GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 9, 4)) iFont = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 13, 4) iFontColour = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 17, 4) iEmblem = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 21, 4) iHideSinage = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 25, 1) iGunLocker = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 26, 1) iGarage = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 27, 1) ELSE iWall = -1 iHanging = -1 iFurniture = -1 iColourScheme = -1 iFont = -1 iFontColour = -1 iEmblem = -1 iHideSinage = -1 iGunLocker = -1 iGarage = -1 ENDIF ENDPROC PROC GET_SCALEFORM_FACTORY_DATA(INT &iDecor,INT &iAccommodation,INT &iFiringRange,INT &iGunLocker,INT &iTransportation) iDecor = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 6, 2) iAccommodation = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 8, 1) iFiringRange = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 9, 2) iGunLocker = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 11, 1) iTransportation = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 12, 2) ENDPROC PROC GET_SCALEFORM_HANGAR_DATA(HANGAR_DATA_STRUCT &sData) sData.iHangarID = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 6) sData.iStyle = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 6, 4) sData.iLighting = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 10, 2) sData.iFlooring = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 12, 4) sData.iFurniture = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 16, 2) sData.iSleepingQuarters = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 18, 2) sData.iWorkshop = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 20, 1) ENDPROC PROC GET_SCALEFORM_DEFUNCT_BASE_DATA(DEFUNCT_BASE_DATA_STRUCT &sData) sData.iBaseID = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 6) sData.iStyle = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 6, 4) sData.iGraphics = GET_DBASE_GRAPHICS_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 10, 4)) sData.iOrbitalWeapon = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 14, 1) sData.iSecurityRoom = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 15, 1) sData.iLounge = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 16, 2) sData.iPersonalQuarters = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 18, 2) sData.iPrivicyGlass = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 20, 1) ENDPROC PROC GET_SCALEFORM_NIGHTCLUB_DATA(NIGHTCLUB_DATA_STRUCT &sData) sData.iNightclubID = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 6) sData.iStyle = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 6, 2) sData.iLighting = GET_NIGHTCLUB_LIGHTING_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 8, 3)) sData.iDancers = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 11,4) sData.iStorage = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 15,3) sData.iGarage = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 18,3) sData.iNameID = GET_NIGHTCLUB_NAME_FROM_SF(GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 21,4)) sData.iDryIce = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 25,1) ENDPROC PROC GET_SCALEFORM_ARENA_GARAGE_DATA(ARENA_GARAGE_DATA_STRUCT &sData) sData.iStyle = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_ARENA_WARS_DATA), 0, 2) sData.iGraphics = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_ARENA_WARS_DATA), 2, 5) sData.iColour = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_ARENA_WARS_DATA), 7, 4) sData.iExpansionFloorB1 = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_ARENA_WARS_DATA), 11,5) sData.iExpansionFloorB2 = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_ARENA_WARS_DATA), 16,5) sData.iBennyMechanic = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_ARENA_WARS_DATA), 21,1) sData.iWeaponMechanic = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_ARENA_WARS_DATA), 22,1) sData.iPersonalQuarters = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_ARENA_WARS_DATA), 23,1) ENDPROC PROC GET_SCALEFORM_CASINO_APT_DATA(CASINO_APT_DATA_STRUCT &sData) sData.iColourOption = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CASINO_DATA), 0, 2) sData.iStyleOption = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CASINO_DATA), 2, 4) sData.iLounge = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CASINO_DATA), 6, 1) sData.iBar = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CASINO_DATA), 7, 2) sData.iDealer = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CASINO_DATA), 9, 1) sData.iBedroom = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CASINO_DATA), 10,1) sData.iMediaroom = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CASINO_DATA), 11,1) sData.iSpa = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CASINO_DATA), 12,1) sData.iOffice = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CASINO_DATA), 13,1) sData.iGarage = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CASINO_DATA), 14,1) ENDPROC PROC GET_SCALEFORM_ARCADE_DATA(ARCADE_DATA_STRUCT &sData) sData.iArcadeID = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 6) sData.iFloor = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 6, 4) sData.iCeiling = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 10, 2) sData.iWall = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 12, 4) sData.iPersonalQuarters = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 16, 1) sData.iGarage = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 17, 1) sData.iNeonLights = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 18, 4) sData.iScreens = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 22, 1) ENDPROC PROC GET_SCALEFORM_AUTO_SHOP_DATA(AUTO_SHOP_DATA_STRUCT &sData) sData.iAutoShopID = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 0, 3) sData.iWall = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 3, 4) sData.iTint = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 7, 4) sData.iEmblem = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 11, 4) sData.iCrewName = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 15, 1) sData.iStaff1 = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 16, 1) sData.iStaff2 = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 17, 1) sData.iCarLift = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 18, 1) sData.iPersonalQuarters = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 19, 1) sData.iCarClubMembership = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 20, 1) PRINTLN("GET_SCALEFORM_AUTO_SHOP_DATA - CALLED") DEBUG_PRINTCALLSTACK() PRINTLN("GET_SCALEFORM_AUTO_SHOP_DATA - sData.iAutoShopID = ", sData.iAutoShopID) PRINTLN("GET_SCALEFORM_AUTO_SHOP_DATA - sData.iWall = ", sData.iWall) PRINTLN("GET_SCALEFORM_AUTO_SHOP_DATA - sData.iTint = ", sData.iTint) PRINTLN("GET_SCALEFORM_AUTO_SHOP_DATA - sData.iEmblem = ", sData.iEmblem) PRINTLN("GET_SCALEFORM_AUTO_SHOP_DATA - sData.iCrewName = ", sData.iCrewName) PRINTLN("GET_SCALEFORM_AUTO_SHOP_DATA - sData.iStaff1 = ", sData.iStaff1) PRINTLN("GET_SCALEFORM_AUTO_SHOP_DATA - sData.iStaff2 = ", sData.iStaff2) PRINTLN("GET_SCALEFORM_AUTO_SHOP_DATA - sData.iCarLift = ", sData.iCarLift) PRINTLN("GET_SCALEFORM_AUTO_SHOP_DATA - sData.iPersonalQuarters = ", sData.iPersonalQuarters) PRINTLN("GET_SCALEFORM_AUTO_SHOP_DATA - sData.iCarClubMembership = ", sData.iCarClubMembership) ENDPROC #IF FEATURE_FIXER PROC GET_SCALEFORM_FIXER_HQ_DATA(FIXER_HQ_DATA_STRUCT &ref_sData) ref_sData.iAgencyID = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 0, 6) ref_sData.iArt = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 6, 2) ref_sData.iWallpaper = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 8, 4) ref_sData.iTint = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 12, 4) ref_sData.iVehWorkshop = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 16, 1) ref_sData.iArmory = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 17, 1) ref_sData.iPersonalQuarters = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA), 18, 1) PRINTLN("GET_SCALEFORM_FIXER_HQ_DATA - CALLED") DEBUG_PRINTCALLSTACK() PRINTLN("GET_SCALEFORM_FIXER_HQ_DATA - ref_sData.iAgencyID = ", ref_sData.iAgencyID) PRINTLN("GET_SCALEFORM_FIXER_HQ_DATA - ref_sData.iArt = ", ref_sData.iArt) PRINTLN("GET_SCALEFORM_FIXER_HQ_DATA - ref_sData.iWallpaper = ", ref_sData.iWallpaper) PRINTLN("GET_SCALEFORM_FIXER_HQ_DATA - ref_sData.iTint = ", ref_sData.iTint) PRINTLN("GET_SCALEFORM_FIXER_HQ_DATA - ref_sData.iVehWorkshop = ", ref_sData.iVehWorkshop) PRINTLN("GET_SCALEFORM_FIXER_HQ_DATA - ref_sData.iArmory = ", ref_sData.iArmory) PRINTLN("GET_SCALEFORM_FIXER_HQ_DATA - ref_sData.iPersonalQuarters = ", ref_sData.iPersonalQuarters) ENDPROC #ENDIF FUNC INT GET_GENDER_METRIC_FROM_PERSONEL_INT(INT iPersonnel) IF iPersonnel = 0 // FEMALE PA IF GET_ENTITY_MODEL(PLAYER_PED_ID()) = MP_M_FREEMODE_01 RETURN 1 //= female PA, male character ELSE RETURN 2 //= female PA, female character ENDIF ELSE // MALE PA IF GET_ENTITY_MODEL(PLAYER_PED_ID()) = MP_M_FREEMODE_01 RETURN 3 //= male PA, male character ELSE RETURN 4 //= male PA, female character ENDIF ENDIF ENDFUNC #IF IS_DEBUG_BUILD FUNC HUD_COLOURS GET_HUD_COLOUR_COMPARING_OLD_NEW(BOOL iOldMatchesNew) IF !iOldMatchesNew RETURN HUD_COLOUR_RED ENDIF RETURN HUD_COLOUR_PURE_WHITE ENDFUNC #ENDIF PROC CLOSE_BROWSER_AFTER_SUCCESSFUL_PURCHASE(INT iTimeToExpire = ciAUTO_CLOSE_DELAY_TIME_DEFAULT) IF NOT HAS_NET_TIMER_STARTED(timerAutoCloseDelay) START_NET_TIMER(timerAutoCloseDelay) iAutoCloseDelayTime = iTimeToExpire CPRINTLN(DEBUG_INTERNET, "CLOSE_BROWSER_AFTER_SUCCESSFUL_PURCHASE timerAutoCloseDelay - Starting auto close delay timer.") ENDIF ENDPROC PROC RENDER_BROWSER(BOOL allowphone = FALSE, BOOL bPropertyVersion = FALSE)//, BOOL forceButtons = FALSE) DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_AIM) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_LOOK_BEHIND) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_LOOK_BEHIND) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_LOOK_LEFT) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_LOOK_RIGHT) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_LOOK_UP) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_LOOK_DOWN) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_VEH_GUN_LEFT) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_VEH_GUN_RIGHT) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_VEH_GUN_UP) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_VEH_GUN_DOWN) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_VEH_LOOK_LEFT) DISABLE_CONTROL_ACTION(CAMERA_CONTROL,INPUT_VEH_LOOK_RIGHT) INT iCurrentDelta = ROUND(0 +@ 1000) g_iBrowserTimer += iCurrentDelta iCurrentSiteTimer += iCurrentDelta SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) IF !bIDisabledCarRadio /* BOOL mpVeto = FALSE IF g_bInMultiplayer IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF DOES_ENTITY_EXIST(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) IF !NETWORK_HAS_CONTROL_OF_ENTITY(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) mpVeto = TRUE ENDIF ENDIF ENDIF ENDIF IF !mpVeto IF DOES_PLAYER_VEH_HAVE_RADIO() IF NOT IS_PLAYER_DEAD(GET_PLAYER_INDEX()) //SET_VEHICLE_RADIO_ENABLED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), FALSE) START_AUDIO_SCENE("WEB_GENERAL_BROWSING_SCENE") bIDisabledCarRadio =TRUE ENDIF ENDIF ENDIF */ START_AUDIO_SCENE("WEB_GENERAL_BROWSING_SCENE") bIDisabledCarRadio = TRUE ENDIF IF !bIDisabledAptRadio IF NETWORK_IS_GAME_IN_PROGRESS() IF IS_PLAYER_IN_MP_PROPERTY(PLAYER_ID(), FALSE) OR IS_PLAYER_IN_OFFICE_PROPERTY(PLAYER_ID()) OR IS_PLAYER_IN_WAREHOUSE(PLAYER_ID()) START_AUDIO_SCENE("GTAO_Computer_Screen_Active_Scene") bIDisabledAptRadio = TRUE ENDIF ENDIF ENDIF SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_WANTED_STARS) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_WEAPON_ICON) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_MP_MESSAGE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_VEHICLE_NAME) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_AREA_NAME) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_DISTRICT_NAME) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_STREET_NAME) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_FLOATING_HELP_TEXT_1) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_FLOATING_HELP_TEXT_2) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_RETICLE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_RADIO_STATIONS) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_WEAPON_WHEEL) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_WEAPON_WHEEL_STATS) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_FEED) IF g_bInMultiplayer HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_SUBTITLE_TEXT) // 1599742 ENDIF //HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_SUBTITLE_TEXT) IF g_bInMultiplayer // mp transactions come out of a different pool, makes no sense to show it in sp 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 IF NOT IS_RADAR_HIDDEN() bIHidRadar = TRUE DISPLAY_RADAR(FALSE) ENDIF DISABLE_SELECTOR_THIS_FRAME() IF (NOT allowphone) DISABLE_CELLPHONE_THIS_FRAME_ONLY() ENDIF IF NOT bProcessingBasket IF (eSet_mouse_pointer_style = MOUSE_CURSOR_STYLE_ARROW_DIMMED) CPRINTLN(DEBUG_INTERNET, "RENDER_BROWSER: restore pointer style to non-dimmed [", GET_GAME_TIMER(), "]") eSet_mouse_pointer_style = INT_TO_ENUM(eMOUSE_POINTER_STYLE, -1) SET_MOUSE_CURSOR_STYLE(MOUSE_CURSOR_STYLE_ARROW) BROWSER_SET_CURSOR_STATE("ARROW") ENDIF ELSE IF (eSet_mouse_pointer_style != MOUSE_CURSOR_STYLE_ARROW_DIMMED) CPRINTLN(DEBUG_INTERNET, "RENDER_BROWSER: set pointer style to dimmed [", GET_GAME_TIMER(), "]") eSet_mouse_pointer_style = MOUSE_CURSOR_STYLE_ARROW_DIMMED SET_MOUSE_CURSOR_STYLE(MOUSE_CURSOR_STYLE_ARROW_DIMMED) BROWSER_SET_CURSOR_STATE("BUSY") ENDIF ENDIF IF DO_CHECK_FOR_RAGDOLL_OR_DEAD() EXIT ENDIF b_SuppressContextHelpNextUpdate = TRUE DISABLE_ALL_MP_HUD_THIS_FRAME() IF g_sBrowserHelpMessage.bShow IF NOT IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) AND NOT IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) PRINT_BROWSER_HELP(g_sBrowserHelpMessage) bTradeHelpPrinted = TRUE ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) CDEBUG3LN(DEBUG_INTERNET, "PRINT_HELP(\"", g_sBrowserHelpMessage.tl15Tag, "\"), iTutstage:", iTutstage, ", iTutTimer:", iTutTimer, ", g_iBrowserTimer:", g_iBrowserTimer, " //", TO_FLOAT(iTutTimer-g_iBrowserTimer)/1000.0) ENDIF IF iTutTimer < g_iBrowserTimer CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT(TRUE) ENDIF ENDIF IF IS_BROWSER_OPEN() AND (NOT bPanicShutdownStart) DISABLE_CONTROL_ACTIONS_GENERAL() SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) IF NOT HAS_SCALEFORM_MOVIE_LOADED(mov) IF mov = NULL mov = REQUEST_SCALEFORM_MOVIE("web_browser") ELSE CASSERTLN(DEBUG_INTERNET, "RENDER_BROWSER: scaleform movie mov has not loaded") ENDIF ELSE DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0) ENDIF IF !bPropertyVersion POST_BLOCKING_IS_PROPERTY_OVERWRITE_OK() ENDIF IF g_bBrowserGoToStoreTrigger RENDER_NAG_SCREEN() ENDIF SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) IF g_bBrowserUserMode IF bKeyboardHelp OR g_bBrowserNagScreenState OR g_bBrowserVoucherNagScreenState IF NOT HAS_SCALEFORM_MOVIE_LOADED(buttons) buttons = REQUEST_SCALEFORM_MOVIE_INSTANCE("INSTRUCTIONAL_BUTTONS") CERRORLN(DEBUG_INTERNET, "RENDER_BROWSER: scaleform movie buttons has not loaded") ELIF IS_SCALEFORM_MOVIE_DELETING(buttons) CERRORLN(DEBUG_INTERNET, "RENDER_BROWSER: scaleform movie buttons is flagged for deletion") ELIF IS_ACTIVE_SCALEFORM_MOVIE_DELETING(buttons) CERRORLN(DEBUG_INTERNET, "RENDER_BROWSER: scaleform movie buttons is deleting") ELSE DRAW_SCALEFORM_MOVIE_FULLSCREEN(buttons,255,255,255,255) ENDIF ENDIF ENDIF ENDIF IF eStaticCurrentSite = WWW_DOCKTEASE_COM AND HAS_PLAYER_BEEN_ASSIGNED_PRIVATE_YACHT(PLAYER_ID()) CONST_INT iYACHT_D_HOME 19 CONST_INT iYACHT_D_MODEL 20 CONST_INT iYACHT_D_FITTINGS 21 CONST_INT iYACHT_D_COLOUR 22 CONST_INT iYACHT_D_LIGHTING 23 CONST_INT iYACHT_D_FLAG 29 CONST_INT iYACHT_D_PERSONALIZE 24 CONST_INT iYACHT_D_CHECKOUT 25 CONST_INT iYACHT_D_PURCHASE 26 CONST_INT iYACHT_D_PURCHASE_SUCCESS 27 CONST_INT iYACHT_D_PURCHASE_FAILED 28 IF iStaticCurrentPage = iYACHT_D_CHECKOUT OR iStaticCurrentPage = iYACHT_D_PURCHASE // OR iStaticCurrentPage = iYACHT_D_PURCHASE_SUCCESS // OR iStaticCurrentPage = iYACHT_D_PURCHASE_FAILED IF (iBroadcast_Disable_Recording_Timer < 0) OR (iBroadcast_Disable_Recording_Timer +4500 < GET_GAME_TIMER()) INT iYachtID = GET_PRIVATE_YACHT_ASSIGNED_TO_PLAYER(PLAYER_ID()) IF IS_PRIVATE_YACHT_ID_VALID(iYachtID) BROADCAST_DISABLE_RECORDING_FOR_SPHERE(GET_COORDS_OF_PRIVATE_YACHT(iYachtID), 75.0, 300.0, 5000) iBroadcast_Disable_Recording_Timer = GET_GAME_TIMER() ELSE CASSERTLN(DEBUG_INTERNET, "RENDER_BROWSER: invalid yacht ID when trying to disable recording the yacht") ENDIF ENDIF ELSE IF iBroadcast_Disable_Recording_Timer >= 0 iBroadcast_Disable_Recording_Timer = -1 ENDIF ENDIF ELSE IF iBroadcast_Disable_Recording_Timer >= 0 iBroadcast_Disable_Recording_Timer = -1 ENDIF ENDIF BOOL bCleanup_HELP_SPVE = FALSE IF g_bInMultiplayer IF (eStaticCurrentSite = WWW_ELITASTRAVEL_COM OR eStaticCurrentSite = WWW_SOUTHERNSANANDREASSUPERAUTOS_COM OR eStaticCurrentSite = WWW_LEGENDARYMOTORSPORT_NET OR eStaticCurrentSite = WWW_DOCKTEASE_COM OR eStaticCurrentSite = WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM OR eStaticCurrentSite = WWW_ARENAWAR_TV OR eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM) AND (eCursorInputProcessed != UNSET_BUYABLE_VEHICLE OR (eStaticCurrentSite = WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM AND iStaticCurrentPage = 1) //Warstock MOC banner OR (eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM AND iStaticCurrentPage = 13) //Casino Suite dealer button OR (eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM AND iStaticCurrentPage = 14) OR (eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM AND iStaticCurrentPage = 8)) //Casino High roller IF (eCursorInputProcessed != UNSET_BUYABLE_VEHICLE OR (eStaticCurrentSite = WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM AND iStaticCurrentPage = 1) OR (eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM AND iStaticCurrentPage = 13) OR (eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM AND iStaticCurrentPage = 14) OR (eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM AND iStaticCurrentPage = 8)) AND NOT bWaitingForSelectionReturn BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_ROLLOVER") currentRolloverReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() bWaitingForSelectionReturn = TRUE CDEBUG1LN(DEBUG_INTERNET, " currentRolloverReturnIndex not ready... ", NATIVE_TO_INT(currentRolloverReturnIndex)) ELSE IF bWaitingForSelectionReturn IF IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentRolloverReturnIndex) bWaitingForSelectionReturn = FALSE INT iLastHiglightedButton = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentRolloverReturnIndex) CDEBUG1LN(DEBUG_INTERNET, " currentRolloverReturnIndex ready, iLastHiglightedButton: ", iLastHiglightedButton) IF iLastHiglightedButton != -1 #IF FEATURE_CASINO_HEIST OR (eCursorInputProcessed = BV_CH_MINITANK AND iStaticCurrentPage = 124) #ENDIF IF IS_HELP_MESSAGE_BEING_DISPLAYED() #IF FEATURE_CASINO_HEIST IF (eCursorInputProcessed != BV_CH_MINITANK) OR (iStaticCurrentPage != 124) IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("UNLOCK_RCTANK") CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", empty - UNLOCK_RCTANK displayed") CLEAR_HELP() bCleanup_HELP_SPVE = TRUE CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() g_sBrowserHelpMessage.bShow = TRUE ENDIF ENDIF #ENDIF IF (eStaticCurrentSite = WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM AND iStaticCurrentPage = 1) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) bCleanup_HELP_SPVE = TRUE IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_HACKT0") CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", empty - HELP_HACKT0 displayed") CLEAR_HELP() ELIF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_MOC0") CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", empty - HELP_MOC0 displayed") CLEAR_HELP() ELIF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_AOC0") CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", empty - HELP_AOC0 displayed") CLEAR_HELP() #IF FEATURE_HEIST_ISLAND ELIF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_KOSA0") CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", empty - HELP_KOSA0 displayed") CLEAR_HELP() #ENDIF ELSE CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", empty") ENDIF ELIF NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_HACKT0") AND NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_MOC0") AND NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_AOC0") #IF FEATURE_HEIST_ISLAND AND NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_KOSA0") #ENDIF CLEAR_HELP() bCleanup_HELP_SPVE = TRUE CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", \"", g_sBrowserHelpMessage.tl15Tag, "\" not HELP_MOC0 or HELP_AOC0 or HELP_HACKT0 or HELP_KOSA0") CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() g_sBrowserHelpMessage.bShow = TRUE ELSE IF HAS_MP_HACKER_TRUCK_ACCESS() IF (iLastHiglightedButton = 1) AND NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_HACKT0") bCleanup_HELP_SPVE = TRUE CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", \"", g_sBrowserHelpMessage.tl15Tag, "\" not HELP_HACKT0") ELIF (iLastHiglightedButton = 2) AND NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_MOC0") bCleanup_HELP_SPVE = TRUE CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", \"", g_sBrowserHelpMessage.tl15Tag, "\" not HELP_MOC0") ELIF (iLastHiglightedButton = 3) AND NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_AOC0") bCleanup_HELP_SPVE = TRUE CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", \"", g_sBrowserHelpMessage.tl15Tag, "\" not HELP_AOC0") #IF FEATURE_HEIST_ISLAND ELIF (iLastHiglightedButton = 0) AND NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_KOSA0") bCleanup_HELP_SPVE = TRUE CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", \"", g_sBrowserHelpMessage.tl15Tag, "\" not HELP_KOSA0") #ENDIF ENDIF ELSE IF (iLastHiglightedButton = 0) AND NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_MOC0") bCleanup_HELP_SPVE = TRUE CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", \"", g_sBrowserHelpMessage.tl15Tag, "\" not HELP_MOC0") ELIF (iLastHiglightedButton = 1) AND NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_AOC0") bCleanup_HELP_SPVE = TRUE CDEBUG3LN(DEBUG_INTERNET, " warstock home page ", iLastHiglightedButton, ", \"", g_sBrowserHelpMessage.tl15Tag, "\" not HELP_AOC0") ENDIF ENDIF ENDIF ENDIF ELSE TEXT_LABEL_15 tl15Tag = "" BROWSER_HELP_MESSAGE_TYPE_ENUM eTextType = BHMT_STRING INT iNumToDisplay1 = 0, iNumToDisplay2 = 0 IF IS_SBV_A_VEHICLE_FREE_FOR_CRIMINAL_ENTERPRISE_STARTER_PACK(eCursorInputProcessed) AND HAS_MP_CRIMINAL_ENTERPRISE_PREMIUM_OR_STARTER_ACCESS() bCleanup_HELP_SPVE = TRUE CDEBUG3LN(DEBUG_INTERNET, " - vehicle ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " is free for Criminal Enterprise SP") ELIF (GET_SVM_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1) IF GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_0) <= 0 tl15Tag = "HELP_SPVE0a" //In order to purchase this vehicle you must fulfil the following criteria:~n~- Own an Executive Office.~n~- Own a Vehicle Warehouse.~n~- Renovate the Underground Storage Facility in your Vehicle Warehouse. SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_SPVE0A) ELIF GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_IE_WAREHOUSE) <= 0 tl15Tag = "HELP_SPVE0b" //In order to purchase this vehicle you must fulfil the following criteria:~n~- Own a Vehicle Warehouse.~n~- Renovate the Underground Storage Facility in your Vehicle Warehouse. SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_SPVE0B) ELSE SWITCH iLastHiglightedButton CASE 1 // BREAK CASE 0 MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) IF NOT SVM_IS_SPECIAL_VEHICLE_UNLOCKED(SVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(eModel)) tl15Tag = "HELP_SPVE1" SWITCH eCursorInputProcessed CASE BV_IE_PHANTOM2 tl15Tag += "a" BREAK CASE BV_IE_VOLTIC2 tl15Tag += "b" BREAK CASE BV_IE_DUNE5 tl15Tag += "c" BREAK CASE BV_IE_BLAZER5 tl15Tag += "d" BREAK CASE BV_IE_TECHNICAL2 tl15Tag += "e" BREAK CASE BV_IE_WASTELANDER tl15Tag += "f" BREAK CASE BV_IE_BOXVILLE5 tl15Tag += "g" BREAK CASE BV_IE_RUINER2 tl15Tag += "h" BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " - unknown SVM_VEHICLE eCursorInputProcessed ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " ") BREAK ENDSWITCH ENDIF BREAK ENDSWITCH ENDIF ELIF (GET_AWS_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1) BOOL bAddBrowserHelpMessageTag_0, bAddBrowserHelpMessageTag_1 bAddBrowserHelpMessageTag_0 = FALSE bAddBrowserHelpMessageTag_1 = FALSE MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) SWITCH eStaticCurrentSite CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_LEGENDARYMOTORSPORT_NET IF eCursorInputProcessed = BV_DLC_RATLOADER2 OR eCursorInputProcessed = BV_DLC_SLAMVAN OR eCursorInputProcessed = BV_AW_IMPALER SWITCH iLastHiglightedButton CASE 1 bAddBrowserHelpMessageTag_1 = TRUE BREAK CASE 0 bAddBrowserHelpMessageTag_0 = TRUE BREAK ENDSWITCH ELIF eCursorInputProcessed = BV_ST_GARGOYLE SWITCH iLastHiglightedButton CASE 2 CASE 3 bAddBrowserHelpMessageTag_1 = TRUE BREAK CASE 0 CASE 1 bAddBrowserHelpMessageTag_0 = TRUE BREAK ENDSWITCH ELSE SWITCH iLastHiglightedButton CASE 8 CASE 9 CASE 10 CASE 11 CASE 12 CASE 13 CASE 14 CASE 15 bAddBrowserHelpMessageTag_1 = TRUE BREAK CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 bAddBrowserHelpMessageTag_0 = TRUE BREAK ENDSWITCH ENDIF BREAK CASE WWW_ELITASTRAVEL_COM CASE WWW_DOCKTEASE_COM CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM SWITCH iLastHiglightedButton CASE 1 bAddBrowserHelpMessageTag_1 = TRUE BREAK CASE 0 bAddBrowserHelpMessageTag_0 = TRUE BREAK ENDSWITCH BREAK CASE WWW_ARENAWAR_TV IF IS_VEHICLE_AN_ARENA_CONTENDER_VEHICLE(eModel) //==ARENA READY== SWITCH iLastHiglightedButton CASE 2 bAddBrowserHelpMessageTag_1 = TRUE BREAK CASE 3 bAddBrowserHelpMessageTag_0 = TRUE BREAK ENDSWITCH ELSE //==UPGRADEABLE== SWITCH iLastHiglightedButton CASE 4 bAddBrowserHelpMessageTag_1 = TRUE BREAK CASE 5 bAddBrowserHelpMessageTag_0 = TRUE BREAK ENDSWITCH ENDIF BREAK ENDSWITCH IF NOT DOES_PLAYER_OWN_AN_ARENA_GARAGE(PLAYER_ID()) IF (bAddBrowserHelpMessageTag_1) SWITCH eCursorInputProcessed CASE BV_AW_CERBERUS tl15Tag = "HELP_AWSE2a" BREAK CASE BV_AW_CERBERUS2 tl15Tag = "HELP_AWSE2a" BREAK CASE BV_AW_CERBERUS3 tl15Tag = "HELP_AWSE2a" BREAK CASE BV_DLC_RATLOADER2 tl15Tag = "HELP_AWSE3a" BREAK CASE BV_DLC_GLENDALE tl15Tag = "HELP_AWSE3b" BREAK CASE BV_DLC_SLAMVAN tl15Tag = "HELP_AWSE3c" BREAK CASE BV_MP_DOMINATOR tl15Tag = "HELP_AWSE3d" BREAK CASE BV_AW_IMPALER tl15Tag = "HELP_AWSE3e" BREAK CASE BV_AR_ISSI3 tl15Tag = "HELP_AWSE3f" BREAK CASE BV_ST_GARGOYLE tl15Tag = "HELP_AWSE3g" BREAK ENDSWITCH ELIF (bAddBrowserHelpMessageTag_0) SWITCH eCursorInputProcessed CASE BV_AW_CERBERUS tl15Tag = "HELP_AWSE0a" BREAK CASE BV_AW_CERBERUS2 tl15Tag = "HELP_AWSE0a" BREAK CASE BV_AW_CERBERUS3 tl15Tag = "HELP_AWSE0a" BREAK CASE BV_DLC_RATLOADER2 tl15Tag = "HELP_AWSE0a" BREAK CASE BV_DLC_GLENDALE tl15Tag = "HELP_AWSE0a" BREAK CASE BV_DLC_SLAMVAN tl15Tag = "HELP_AWSE0a" BREAK CASE BV_MP_DOMINATOR tl15Tag = "HELP_AWSE0a" BREAK CASE BV_AW_IMPALER tl15Tag = "HELP_AWSE0a" BREAK CASE BV_AR_ISSI3 tl15Tag = "HELP_AWSE0a" BREAK CASE BV_ST_GARGOYLE tl15Tag = "HELP_AWSE0a" BREAK ENDSWITCH ENDIF ELSE IF (bAddBrowserHelpMessageTag_1) SWITCH eCursorInputProcessed CASE BV_DLC_RATLOADER2 tl15Tag = "HELP_AWSE3a" BREAK CASE BV_DLC_GLENDALE tl15Tag = "HELP_AWSE3b" BREAK CASE BV_DLC_SLAMVAN tl15Tag = "HELP_AWSE3c" BREAK CASE BV_MP_DOMINATOR tl15Tag = "HELP_AWSE3d" BREAK CASE BV_AW_IMPALER tl15Tag = "HELP_AWSE3e" BREAK CASE BV_AR_ISSI3 tl15Tag = "HELP_AWSE3f" BREAK CASE BV_ST_GARGOYLE tl15Tag = "HELP_AWSE3g" BREAK ENDSWITCH ELIF (bAddBrowserHelpMessageTag_0) IF NOT IS_ARENA_WARS_VEHICLE_REWARD_UNLOCKED(eModel) SWITCH eCursorInputProcessed CASE BV_DLC_RATLOADER2 tl15Tag = "HELP_AWSE1a" BREAK CASE BV_DLC_GLENDALE tl15Tag = "HELP_AWSE1a" BREAK CASE BV_DLC_SLAMVAN tl15Tag = "HELP_AWSE1a" BREAK CASE BV_MP_DOMINATOR tl15Tag = "HELP_AWSE1a" BREAK CASE BV_AW_IMPALER tl15Tag = "HELP_AWSE1a" BREAK CASE BV_AR_ISSI3 tl15Tag = "HELP_AWSE1a" BREAK CASE BV_ST_GARGOYLE tl15Tag = "HELP_AWSE1a" BREAK ENDSWITCH ENDIF ENDIF ENDIF IF IS_STRING_NULL_OR_EMPTY(tl15Tag) bCleanup_HELP_SPVE = TRUE ENDIF ELIF (eCursorInputProcessed = BV_AW_RCBANDITO) IF iLastHiglightedButton = 0 ARENA_GARAGE_ID eArenaID = GET_PLAYERS_OWNED_ARENA_GARAGE(PLAYER_ID()) IF NOT (eArenaID != ARENA_GARAGE_ID_INVALID) tl15Tag = "HELP_RCBA0a" //In order to purchase this equipment you must fulfil the following criteria:~n~- Own a Bunker.~n~- Set up the Gunrunning Business.~n~- Unlock the Ballistic Equipment via Research.~n~ // bDisplayed_HELP_RCBA0a = TRUE ELIF NOT IS_RC_BANDITO_UNLOCKED() tl15Tag = "HELP_RCBA0b" //In order to purchase this equipment you must fulfil the following criteria:~n~- Unlock the Ballistic Equipment via Research.~n~ // bDisplayed_HELP_RCBA0b = TRUE ENDIF ENDIF ELIF (GET_BBS_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1) BOOL bAddBrowserHelpMessageTag_0, bAddBrowserHelpMessageTag_1 bAddBrowserHelpMessageTag_0 = FALSE bAddBrowserHelpMessageTag_1 = FALSE SWITCH eStaticCurrentSite CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_LEGENDARYMOTORSPORT_NET IF (eCursorInputProcessed = BV_BB_PBUS2) SWITCH iLastHiglightedButton CASE 10 CASE 11 CASE 12 CASE 13 CASE 14 CASE 15 CASE 16 CASE 17 CASE 18 CASE 19 bAddBrowserHelpMessageTag_1 = TRUE BREAK CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 CASE 8 CASE 9 bAddBrowserHelpMessageTag_0 = TRUE BREAK ENDSWITCH ELSE SWITCH iLastHiglightedButton CASE 8 CASE 9 CASE 10 CASE 11 CASE 12 CASE 13 CASE 14 CASE 15 bAddBrowserHelpMessageTag_1 = TRUE BREAK CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 bAddBrowserHelpMessageTag_0 = TRUE BREAK ENDSWITCH ENDIF BREAK CASE WWW_ELITASTRAVEL_COM CASE WWW_DOCKTEASE_COM CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM IF (eCursorInputProcessed = BV_BB_BLIMP3) SWITCH iLastHiglightedButton CASE 8 CASE 9 CASE 10 CASE 11 CASE 12 CASE 13 CASE 14 CASE 15 bAddBrowserHelpMessageTag_1 = TRUE BREAK CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 bAddBrowserHelpMessageTag_0 = TRUE BREAK ENDSWITCH ELSE SWITCH iLastHiglightedButton CASE 1 bAddBrowserHelpMessageTag_1 = TRUE BREAK CASE 0 bAddBrowserHelpMessageTag_0 = TRUE BREAK ENDSWITCH ENDIF BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " - unknown eStaticCurrentSite ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), " ") BREAK ENDSWITCH MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) IF NOT DOES_PLAYER_OWN_A_NIGHTCLUB(PLAYER_ID()) AND (eCursorInputProcessed = BV_BB_MULE4 OR eCursorInputProcessed = BV_BB_POUNDER2 OR eCursorInputProcessed = BV_BB_PBUS2 OR eCursorInputProcessed = BV_BB_PATRIOT2 OR eCursorInputProcessed = BV_BB_BLIMP3) IF (bAddBrowserHelpMessageTag_1) // skip ELIF (bAddBrowserHelpMessageTag_0) IF (eCursorInputProcessed = BV_BB_MULE4) tl15Tag = "HELP_BBSE1na" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0NC) eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) ELIF (eCursorInputProcessed = BV_BB_POUNDER2) tl15Tag = "HELP_BBSE1nb" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0NC) eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) ELIF (eCursorInputProcessed = BV_BB_PBUS2) tl15Tag = "HELP_BBSE1ne" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0NC) ELIF (eCursorInputProcessed = BV_BB_PATRIOT2) tl15Tag = "HELP_BBSE1nf" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0NC) eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) ELIF (eCursorInputProcessed = BV_BB_BLIMP3) tl15Tag = "HELP_BBSE1ng" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0NC) eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) ENDIF ENDIF ELIF NOT IS_PLAYER_HACKER_TRUCK_PURCHASED(PLAYER_ID()) AND (eCursorInputProcessed = BV_BB_OPPRESSOR2) IF (bAddBrowserHelpMessageTag_1) // tl15Tag = "HELP_BBSE0ht" // bDisplayed_HELP_BBSE0ht = TRUE ELIF (bAddBrowserHelpMessageTag_0) IF (eCursorInputProcessed = BV_BB_OPPRESSOR2) tl15Tag = "HELP_BBSE1hc" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0HT) eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) ENDIF ENDIF ELSE IF (bAddBrowserHelpMessageTag_1) // ELIF (bAddBrowserHelpMessageTag_0) IF NOT IS_BUSINESS_BATTLES_VEHICLE_REWARD_UNLOCKED(eModel) tl15Tag = "HELP_BBSE1" SWITCH eCursorInputProcessed CASE BV_BB_MULE4 tl15Tag += "a" eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) BREAK CASE BV_BB_POUNDER2 tl15Tag += "b" eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) BREAK CASE BV_BB_OPPRESSOR2 tl15Tag += "c" eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) BREAK CASE BV_BB_SCRAMJET tl15Tag += "d" // eTextType = BHMT_STRING_WITH_NUMBER // iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) BREAK CASE BV_BB_PBUS2 tl15Tag += "e" // eTextType = BHMT_STRING_WITH_NUMBER // iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) BREAK CASE BV_BB_PATRIOT2 tl15Tag += "f" eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) BREAK CASE BV_BB_BLIMP3 tl15Tag += "g" eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = GET_MISSION_UNLOCK_COUNT_FROM_BUSINESS_BATTLES_VEHICLE_MODEL(eModel) BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " - unknown FDS_VEHICLE eCursorInputProcessed ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " ") BREAK ENDSWITCH ENDIF ENDIF ENDIF // #IF FEATURE_BUSINESS_BATTLES // IF (eCursorInputProcessed = BV_BB_BLIMP3) // IF IS_STRING_NULL_OR_EMPTY(tl15Tag) // IF NOT DOES_PLAYER_OWN_A_NIGHTCLUB(PLAYER_ID()) // tl15Tag = "HELP_BLIMP3" //In order to purchase this livery, you must fulfil the following criteria:~n~- Own a Nightclub.~n~ // ENDIF // ENDIF // ENDIF // #ENDIF ELIF (GET_FDS_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1) IF NOT DOES_PLAYER_OWN_A_DEFUNCT_BASE(PLAYER_ID()) AND GET_FDS_VEHICLE_SLOT(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1 IF (iLastHiglightedButton = 1) tl15Tag = "HELP_FDSE0db" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0DB) ELIF (iLastHiglightedButton = 0) IF (eCursorInputProcessed = BV_GO_KHANJALI) tl15Tag = "HELP_FDSE1dg" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0DB) ELIF (eCursorInputProcessed = BV_GO_CHERNOBOG) tl15Tag = "HELP_FDSE1de" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0DB) ELIF (eCursorInputProcessed = BV_GO_RIOT2) tl15Tag = "HELP_FDSE1dc" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0DB) ELIF (eCursorInputProcessed = BV_GO_THRUSTER) tl15Tag = "HELP_FDSE1di" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0DB) ENDIF ENDIF ELIF NOT DOES_PLAYER_OWN_A_HANGER(PLAYER_ID()) AND (eCursorInputProcessed = BV_GO_AKULA OR eCursorInputProcessed = BV_GO_VOLATOL) IF (iLastHiglightedButton = 1) tl15Tag = "HELP_FDSE0ha" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0HA) ELIF (iLastHiglightedButton = 0) IF (eCursorInputProcessed = BV_GO_AKULA) tl15Tag = "HELP_FDSE1hb" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0HA) ELIF (eCursorInputProcessed = BV_GO_VOLATOL) tl15Tag = "HELP_FDSE1hh" SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0HA) ENDIF ENDIF ELSE SWITCH iLastHiglightedButton CASE 1 // BREAK CASE 0 MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) IF NOT HAS_PLAYER_UNLOCKED_GANG_OPS_VEHICLE_TRADE_PRICE(eModel) tl15Tag = "HELP_FDSE1" SWITCH eCursorInputProcessed CASE BV_GO_DELUXO tl15Tag += "a" BREAK CASE BV_GO_AKULA tl15Tag += "b" BREAK CASE BV_GO_RIOT2 tl15Tag += "c" BREAK CASE BV_GO_STROMBERG tl15Tag += "d" BREAK CASE BV_GO_CHERNOBOG tl15Tag += "e" BREAK CASE BV_GO_BARRAGE tl15Tag += "f" BREAK CASE BV_GO_KHANJALI tl15Tag += "g" BREAK CASE BV_GO_VOLATOL tl15Tag += "h" BREAK CASE BV_GO_THRUSTER tl15Tag += "i" BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " - unknown FDS_VEHICLE eCursorInputProcessed ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " ") BREAK ENDSWITCH ENDIF BREAK ENDSWITCH ENDIF #IF FEATURE_CASINO_HEIST ELIF (GET_CH_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1) SWITCH eStaticCurrentSite CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_LEGENDARYMOTORSPORT_NET SWITCH iLastHiglightedButton CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) #IF FEATURE_COPS_N_CROOKS IF eCursorInputProcessed = BV_CH_KANJO IF NOT IS_CASINO_HEIST_VEHICLE_REWARD_UNLOCKED(eModel) OR (IS_CNC_CONTENT_ENABLED() AND NOT IS_CNC_VEHICLE_REWARD_UNLOCKED()) tl15Tag = "HELP_CNCSE1" BREAK ENDIF ELSE #ENDIF IF NOT IS_CASINO_HEIST_VEHICLE_REWARD_UNLOCKED(eModel) tl15Tag = "HELP_CHSE1" SWITCH eCursorInputProcessed CASE BV_CH_FIRETRUK tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_BURRITO2 tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_BOXVILLE tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_STOCKADE tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_ASBO tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_KANJO tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_EVERON tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_RETINUE2 tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_YOSEMITE2 tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_SUGOI tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_SULTAN2 tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_OUTLAW tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_VAGRANT tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_KOMODA tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_STRYDER tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_FURIA tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_ZHABA tl15Tag = "HELP_CHSE1" BREAK CASE BV_CA_JUGULAR tl15Tag = "HELP_CHSE1" BREAK CASE BV_GO_SENTINEL3 tl15Tag = "HELP_CHSE1" BREAK CASE BV_CA_GAUNTLET3 tl15Tag = "HELP_CHSE1" BREAK CASE BV_AR_ELLIE tl15Tag = "HELP_CHSE1" BREAK CASE BV_BI_DEFILER tl15Tag = "HELP_CHSE1" BREAK CASE BV_BI_MANCHEZ tl15Tag = "HELP_CHSE1" BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " - unknown CH_VEHICLE eCursorInputProcessed ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " ") BREAK ENDSWITCH ENDIF #IF FEATURE_COPS_N_CROOKS ENDIF #ENDIF BREAK ENDSWITCH BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM SWITCH iLastHiglightedButton CASE 0 MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) IF NOT IS_CASINO_HEIST_VEHICLE_REWARD_UNLOCKED(eModel) tl15Tag = "HELP_CHSE1" SWITCH eCursorInputProcessed CASE BV_CH_FIRETRUK tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_BURRITO2 tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_BOXVILLE tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_STOCKADE tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_ASBO tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_KANJO tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_EVERON tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_RETINUE2 tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_YOSEMITE2 tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_SUGOI tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_SULTAN2 tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_OUTLAW tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_VAGRANT tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_KOMODA tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_STRYDER tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_FURIA tl15Tag = "HELP_CHSE1" BREAK CASE BV_CH_ZHABA tl15Tag = "HELP_CHSE1" BREAK CASE BV_CA_JUGULAR tl15Tag = "HELP_CHSE1" BREAK CASE BV_GO_SENTINEL3 tl15Tag = "HELP_CHSE1" BREAK CASE BV_CA_GAUNTLET3 tl15Tag = "HELP_CHSE1" BREAK CASE BV_AR_ELLIE tl15Tag = "HELP_CHSE1" BREAK CASE BV_BI_DEFILER tl15Tag = "HELP_CHSE1" BREAK CASE BV_BI_MANCHEZ tl15Tag = "HELP_CHSE1" BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " - unknown CH_VEHICLE eCursorInputProcessed ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " ") BREAK ENDSWITCH ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ELIF (eCursorInputProcessed = BV_CH_MINITANK) AND (iStaticCurrentPage = 124) IF g_sMPTunables.bXMAS2019_RC_TANK_PURCHASE tl15Tag = "UNLOCK_RCTANK" ENDIF #ENDIF #IF FEATURE_COPS_N_CROOKS ELIF (GET_CNC_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1) SWITCH eStaticCurrentSite CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_LEGENDARYMOTORSPORT_NET SWITCH iLastHiglightedButton CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 IF (IS_CNC_CONTENT_ENABLED() AND NOT IS_CNC_VEHICLE_REWARD_UNLOCKED()) tl15Tag = "HELP_CNCSE3" ENDIF BREAK ENDSWITCH BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM SWITCH iLastHiglightedButton CASE 0 IF (IS_CNC_CONTENT_ENABLED() AND NOT IS_CNC_VEHICLE_REWARD_UNLOCKED()) tl15Tag = "HELP_CNCSE3" SWITCH eCursorInputProcessed CASE BV_CNC_POLICE5 tl15Tag = "HELP_CNCSE2" BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " - unknown CH_VEHICLE eCursorInputProcessed ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " ") BREAK ENDSWITCH ENDIF BREAK ENDSWITCH BREAK ENDSWITCH #ENDIF #IF FEATURE_HEIST_ISLAND ELIF (GET_ISLAND_HEIST_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1) SWITCH eStaticCurrentSite CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_LEGENDARYMOTORSPORT_NET SWITCH iLastHiglightedButton CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) IF NOT IS_ISLAND_HEIST_VEHICLE_REWARD_UNLOCKED(eModel) SWITCH eCursorInputProcessed CASE BV_IH_ITALIRSX tl15Tag = "WEB_D_ITALIRSX" BREAK CASE BV_IH_BRIOSO2 tl15Tag = "WEB_D_BRIOSO2" BREAK CASE BV_IH_WEEVIL tl15Tag = "WEB_D_WEEVIL" BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " - unknown CH_VEHICLE eCursorInputProcessed ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " ") BREAK ENDSWITCH ENDIF BREAK ENDSWITCH BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM SWITCH iLastHiglightedButton CASE 0 MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) IF NOT IS_ISLAND_HEIST_VEHICLE_REWARD_UNLOCKED(eModel) SWITCH eCursorInputProcessed CASE BV_IH_ALKONOST tl15Tag = "WEB_D_LAAP" BREAK CASE BV_IH_ANNIHILATOR2 tl15Tag = "WEB_D_LAAP" BREAK CASE BV_IH_PATROLBOAT tl15Tag = "WEB_D_LAAP" BREAK CASE BV_IH_VETIR tl15Tag = "WEB_D_VETIR" BREAK CASE BV_IH_WINKY tl15Tag = "WEB_D_WINK" BREAK CASE BV_IH_ITALIRSX tl15Tag = "" BREAK // Handled on WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE BV_IH_BRIOSO2 tl15Tag = "" BREAK // Handled on WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE BV_IH_WEEVIL tl15Tag = "" BREAK // Handled on WWW_SOUTHERNSANANDREASSUPERAUTOS_COM DEFAULT CASSERTLN(DEBUG_INTERNET, " - unknown CH_VEHICLE eCursorInputProcessed ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " ") BREAK ENDSWITCH ENDIF BREAK ENDSWITCH BREAK CASE WWW_DOCKTEASE_COM IF eCursorInputProcessed = BV_IH_LONGFIN tl15Tag = "WEB_D_LAAP" ENDIF BREAK ENDSWITCH ELIF (GET_TUNER_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1) SWITCH eStaticCurrentSite CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_LEGENDARYMOTORSPORT_NET SWITCH iLastHiglightedButton CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) IF NOT IS_TUNER_VEHICLE_REWARD_UNLOCKED(eModel) SWITCH eCursorInputProcessed CASE BV_TU_EUROS tl15Tag = "WEB_D_EUROS" BREAK CASE BV_TU_TAILGATER2 tl15Tag = "WEB_D_TAIL2" BREAK DEFAULT tl15Tag = "WEB_D_RANDOM" BREAK ENDSWITCH ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ELIF (GET_FIXER_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1) SWITCH eStaticCurrentSite CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_LEGENDARYMOTORSPORT_NET SWITCH iLastHiglightedButton CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) IF NOT IS_FIXER_VEHICLE_REWARD_UNLOCKED(eModel) SWITCH eCursorInputProcessed CASE BV_AGENCY_BUFFALO4 tl15Tag = "WEB_D_BUFFALO4" BREAK CASE BV_AGENCY_GRANGER2 tl15Tag = "WEB_D_GRANGER2" BREAK CASE BV_AGENCY_DEITY tl15Tag = "WEB_D_DEITY" BREAK CASE BV_AGENCY_PATRIOT3 tl15Tag = "WEB_D_PATRIOT3" BREAK CASE BV_AGENCY_JUBILEE tl15Tag = "WEB_D_JUBILEE" BREAK CASE BV_AGENCY_CHAMPION tl15Tag = "WEB_D_CHAMPION" BREAK CASE BV_AGENCY_BALLER7 tl15Tag = "WEB_D_BALLER7" BREAK ENDSWITCH ENDIF BREAK ENDSWITCH BREAK ENDSWITCH #IF FEATURE_DLC_1_2022 ELIF (GET_SUMMER_2022_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1) SWITCH eStaticCurrentSite CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_LEGENDARYMOTORSPORT_NET CASE WWW_ELITASTRAVEL_COM SWITCH iLastHiglightedButton CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) IF NOT IS_SUMMER_2022_VEHICLE_REWARD_UNLOCKED(eModel) SWITCH eCursorInputProcessed CASE BV_SUM2_KANJOSJ tl15Tag = "WEB_D_RANDOM" BREAK CASE BV_SUM2_POSTLUDE tl15Tag = "WEB_D_RANDOM" BREAK CASE BV_SUM2_GREENWOOD tl15Tag = "WEB_D_GRNWOOD" BREAK CASE BV_SUM2_DRAUGUR IF g_sMPTunables.iSUM22_CAYO_PERICO_SERIES_DRAUGUR_TRADE_PRICE_COUNT = 1 tl15Tag = "WEB_D_DRAUGUR1" ELSE tl15Tag = "WEB_D_DRAUGUR" eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = g_sMPTunables.iSUM22_CAYO_PERICO_SERIES_DRAUGUR_TRADE_PRICE_COUNT ENDIF BREAK CASE BV_SUM2_CONADA tl15Tag = "WEB_D_CONADA" BREAK ENDSWITCH ENDIF BREAK ENDSWITCH BREAK ENDSWITCH #ENDIF ELIF IS_SBV_A_VEHICLE_PREVIOUSLY_HEIST_LOCKED(eCursorInputProcessed) AND !(eCursorInputProcessed = BV_DLC_INSURGENT AND DOES_SAVE_HAVE_COUPON(COUPON_CAR2_XMAS2018)) BOOL bAddBrowserHelpMessageTag bAddBrowserHelpMessageTag = FALSE SWITCH eStaticCurrentSite CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_LEGENDARYMOTORSPORT_NET SWITCH iLastHiglightedButton CASE 8 CASE 9 CASE 10 CASE 11 CASE 12 CASE 13 CASE 14 CASE 15 // BREAK CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 CASE 6 CASE 7 IF NOT IS_BUYABLE_VEHICLE_UNLOCKED(eCursorInputProcessed) bAddBrowserHelpMessageTag = TRUE ENDIF BREAK ENDSWITCH BREAK CASE WWW_ELITASTRAVEL_COM CASE WWW_DOCKTEASE_COM CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM SWITCH iLastHiglightedButton CASE 1 IF (eCursorInputProcessed = BV_DLC_INSURGENT AND g_sMPTunables.bENABLE_INSURGENT_MODSHOP) OR (eCursorInputProcessed = BV_DLC_TECHNICAL AND g_sMPTunables.bENABLE_TECHNICAL_MODSHOP) tl15Tag = "HELP_PEGMOD1" ENDIF BREAK CASE 0 IF IS_BUYABLE_VEHICLE_UNLOCKED(eCursorInputProcessed) IF (eCursorInputProcessed = BV_DLC_INSURGENT AND g_sMPTunables.bENABLE_INSURGENT_MODSHOP) OR (eCursorInputProcessed = BV_DLC_TECHNICAL AND g_sMPTunables.bENABLE_TECHNICAL_MODSHOP) tl15Tag = "HELP_PEGMOD1" ENDIF ELSE bAddBrowserHelpMessageTag = TRUE ENDIF BREAK ENDSWITCH BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " - unknown eStaticCurrentSite ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), " ") BREAK ENDSWITCH IF bAddBrowserHelpMessageTag SWITCH eCursorInputProcessed CASE BV_DLC_VALKYRIE tl15Tag = "PHLO_HL_FINALE" BREAK CASE BV_DLC_HYDRA tl15Tag = "PHLO_HL_EMP" BREAK CASE BV_DLC_SAVAGE tl15Tag = "PHLO_PS_CONVOY" BREAK // CASE BV_DLC_ENDURO tl15Tag = "" BREAK CASE BV_DLC_BOXVILLE4 tl15Tag = "PHLO_PS_VANS" BREAK CASE BV_DLC_CASCO tl15Tag = "PHLO_PB_STATION" BREAK CASE BV_DLC_DINGHY3 tl15Tag = "PHLO_HL_FINALE" BREAK CASE BV_DLC_GBURRITO2 tl15Tag = "PHLO_PS_HACK" BREAK // CASE BV_DLC_GUARDIAN tl15Tag = "" BREAK CASE BV_DLC_INSURGENT tl15Tag = "PHLO_HL_FINALE" BREAK CASE BV_DLC_INSURGENT2 tl15Tag = "PHLO_HL_FINALE" BREAK CASE BV_DLC_MULE3 tl15Tag = "PHLO_SA_FINALE" BREAK CASE BV_DLC_KURUMA tl15Tag = "PHLO_TUT_FINALE" BREAK CASE BV_DLC_KURUMA2 tl15Tag = "PHLO_TUT_FINALE" BREAK CASE BV_DLC_LECTRO tl15Tag = "PHLO_PS_FINALE2" BREAK CASE BV_DLC_PBUS tl15Tag = "PHLO_PB_FINALE" BREAK CASE BV_DLC_TECHNICAL tl15Tag = "PHLO_SA_FINALE" BREAK CASE BV_DLC_VELUM2 tl15Tag = "PHLO_PB_FINALE" BREAK DEFAULT CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() CASSERTLN(DEBUG_INTERNET, " - unknown PHLO_VEHICLE eCursorInputProcessed ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " ") BREAK ENDSWITCH ENDIF ELIF (eCursorInputProcessed = BV_DLC_BALLISTIC_EQUIPMENT) FACTORY_ID eFactoryID = GET_OWNED_BUNKER(PLAYER_ID()) IF NOT (eFactoryID != FACTORY_ID_INVALID) tl15Tag = "HELP_BAEQ0a" //In order to purchase this equipment you must fulfil the following criteria:~n~- Own a Bunker.~n~- Set up the Gunrunning Business.~n~- Unlock the Ballistic Equipment via Research.~n~ // bDisplayed_HELP_BAEQ0a = TRUE ELIF NOT HAS_PLAYER_COMPLETED_FACTORY_SETUP_MISSION(PLAYER_ID(), eFactoryID) tl15Tag = "HELP_BAEQ0b" //In order to purchase this equipment you must fulfil the following criteria:~n~- Set up the Gunrunning Business.~n~- Unlock the Ballistic Equipment via Research.~n~ // bDisplayed_HELP_BAEQ0b = TRUE ELIF NOT IS_BALLISTIC_EQUIPMENT_UNLOCKED() tl15Tag = "HELP_BAEQ0c" //In order to purchase this equipment you must fulfil the following criteria:~n~- Unlock the Ballistic Equipment via Research.~n~ // bDisplayed_HELP_BAEQ0c = TRUE ENDIF ELIF (GET_WVM_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) != -1) IF !HAS_PLAYER_COMPLETED_INITIAL_AMBIENT_TUTORIALS(PLAYER_ID()) AND (eCursorInputProcessed = BV_GR_TRAILERSMALL2) tl15Tag = "PM_INF_QMF4" ELSE SWITCH iLastHiglightedButton CASE 1 // BREAK CASE 0 MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) BOOL bLocked bLocked = FALSE IF NOT DOES_PLAYER_OWN_A_BUNKER(PLAYER_ID()) tl15Tag = "HELP_WEVE0" //In order to purchase this vehicle at the Trade Price, you must fulfil the following criteria:~n~- Own a Bunker.~n~- Own the Truck Property.~n~- Complete the mission.~n~ bLocked = TRUE ELIF NOT IS_GUNRUNNING_TRUCK_PURCHASED() tl15Tag = "HELP_WEVE1" //In order to purchase this vehicle at the Trade Price, you must fulfil the following criteria:~n~- Own the Truck Property.~n~- Complete the mission.~n~ bLocked = TRUE ELIF NOT WVM_IS_SPECIAL_VEHICLE_UNLOCKED(WVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(eModel)) tl15Tag = "HELP_WEVE2" bLocked = TRUE ENDIF IF bLocked SWITCH eCursorInputProcessed CASE BV_GR_APC tl15Tag += "a" BREAK CASE BV_GR_DUNE3 tl15Tag += "b" BREAK CASE BV_GR_HALFTRACK tl15Tag += "c" BREAK CASE BV_GR_OPPRESSOR tl15Tag += "d" BREAK CASE BV_GR_TAMPA3 tl15Tag += "e" BREAK CASE BV_GR_TRAILERSMALL2 tl15Tag += "f" BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, " - unknown WVM_VEHICLE eCursorInputProcessed ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " ") BREAK ENDSWITCH ENDIF BREAK ENDSWITCH ENDIF ELIF (eCursorInputProcessed = BV_AR_SEASPARROW) SWITCH iLastHiglightedButton CASE 1 // BREAK CASE 0 IF NOT DOES_PLAYER_OWN_A_HANGER(PLAYER_ID()) tl15Tag = "HELP_SEAS0" //In order to purchase this vehicle at the Trade Price, you must fulfil the following criteria:~n~- Own a Hangar.~n~- Complete ~1~ smuggler missions.~n~ ENDIF BREAK ENDSWITCH ELIF (WAM_GET_STEAL_MISSION_UNLOCK_COUNT_FROM_VEHICLE_MODEL(GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed)) > 0) SWITCH iLastHiglightedButton CASE 1 // BREAK CASE 0 MODEL_NAMES eModel eModel = GET_MODEL_FOR_BUYABLE_VEHICLE(eCursorInputProcessed) IF NOT DOES_PLAYER_OWN_A_HANGER(PLAYER_ID()) tl15Tag = "HELP_WEAI0" //In order to purchase this vehicle at the Trade Price, you must fulfil the following criteria:~n~- Own a Hangar.~n~- Complete ~1~ smuggler missions.~n~ eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = WAM_GET_STEAL_MISSION_UNLOCK_COUNT_FROM_VEHICLE_MODEL(eModel) ELIF NOT WAM_IS_SPECIAL_VEHICLE_UNLOCKED(eModel) tl15Tag = "HELP_WEAI1" //In order to purchase this vehicle at the Trade Price, you must fulfil the following criteria:~n~- Complete ~1~ smuggler missions.~n~ eTextType = BHMT_STRING_WITH_NUMBER iNumToDisplay1 = WAM_GET_STEAL_MISSION_UNLOCK_COUNT_FROM_VEHICLE_MODEL(eModel) ENDIF BREAK ENDSWITCH ELIF (eStaticCurrentSite = WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM AND iStaticCurrentPage = 1) IF HAS_MP_HACKER_TRUCK_ACCESS() IF (iLastHiglightedButton = 1) //BV_DLC_HACKER_TRUCK IF NOT DOES_PLAYER_OWN_A_BUSINESS_HUB(PLAYER_ID()) tl15Tag = "HELP_HACKT0" ELSE CDEBUG1LN(DEBUG_INTERNET, " warstock home page, iLastHiglightedButton ", iLastHiglightedButton, " bunker owned") ENDIF ELIF (iLastHiglightedButton = 2) //BV_DLC_BIG_TRUCK IF NOT DOES_PLAYER_OWN_A_BUNKER(PLAYER_ID()) tl15Tag = "HELP_MOC0" ELSE CDEBUG1LN(DEBUG_INTERNET, " warstock home page, iLastHiglightedButton ", iLastHiglightedButton, " bunker owned") ENDIF ELIF (iLastHiglightedButton = 3) //BV_DLC_BIG_PLANE IF NOT DOES_PLAYER_OWN_A_DEFUNCT_BASE(PLAYER_ID()) tl15Tag = "HELP_AOC0" ELSE CDEBUG1LN(DEBUG_INTERNET, " warstock home page, iLastHiglightedButton ", iLastHiglightedButton, " defunct base owned") ENDIF #IF FEATURE_HEIST_ISLAND ELIF (iLastHiglightedButton = 0) //BV_IH_KOSATKA IF NOT HAS_CASINO_NIGHTCLUB_INTRO_SCENE_BEEN_VIEWED() tl15Tag = "HELP_KOSA0" ELSE CDEBUG1LN(DEBUG_INTERNET, " warstock home page, iLastHiglightedButton ", iLastHiglightedButton, " watched cutscene") ENDIF #ENDIF ELSE bCleanup_HELP_SPVE = TRUE CDEBUG3LN(DEBUG_INTERNET, " warstock home page, iLastHiglightedButton ", iLastHiglightedButton, " not interesting") ENDIF ELSE IF (iLastHiglightedButton = 0) //BV_DLC_BIG_TRUCK IF NOT DOES_PLAYER_OWN_A_BUNKER(PLAYER_ID()) tl15Tag = "HELP_MOC0" ELSE CDEBUG1LN(DEBUG_INTERNET, " warstock home page, iLastHiglightedButton ", iLastHiglightedButton, " bunker owned") ENDIF ELIF (iLastHiglightedButton = 1) //BV_DLC_BIG_PLANE IF NOT DOES_PLAYER_OWN_A_DEFUNCT_BASE(PLAYER_ID()) tl15Tag = "HELP_AOC0" ELSE CDEBUG1LN(DEBUG_INTERNET, " warstock home page, iLastHiglightedButton ", iLastHiglightedButton, " defunct base owned") ENDIF ELSE bCleanup_HELP_SPVE = TRUE CDEBUG3LN(DEBUG_INTERNET, " warstock home page, iLastHiglightedButton ", iLastHiglightedButton, " not interesting") ENDIF ENDIF ELIF (eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM AND iStaticCurrentPage = 13) OR (eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM AND iStaticCurrentPage = 8) IF (iLastHiglightedButton = 11 AND iStaticCurrentPage = 13) OR (iLastHiglightedButton = 5 AND iStaticCurrentPage = 8) INT iBlackjackReason, i3CardPokerReason IF IS_PLAYER_BLOCKED_FROM_CASINO_GAME(CG_BLACKJACK, iBlackjackReason) OR IS_PLAYER_BLOCKED_FROM_CASINO_GAME(CG_3CARDPOKER , i3CardPokerReason) tl15Tag = "HELP_CASWEB_2" ELSE bCleanup_HELP_SPVE = TRUE CDEBUG1LN(DEBUG_INTERNET, " casino suite options page, iLastHiglightedButton ", iLastHiglightedButton, " card games not blocked") ENDIF ELSE bCleanup_HELP_SPVE = TRUE CDEBUG1LN(DEBUG_INTERNET, " casino suite options page, iLastHiglightedButton ", iLastHiglightedButton, " not interesting") ENDIF ELIF (eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM AND iStaticCurrentPage = 14) IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_CASWEB_0_FOR_FIRST_TIME) IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED() CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_CASWEB_0_FOR_FIRST_TIME) ENDIF ENDIF IF NOT IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_CASWEB_0_FOR_FIRST_TIME) IF (iLastHiglightedButton = 4) IF IS_GAMBLING_APPROVED_REGION() tl15Tag = "HELP_CASWEB_0" ELSE tl15Tag = "HELP_CASWEB_0B" ENDIF ELSE bCleanup_HELP_SPVE = TRUE CDEBUG3LN(DEBUG_INTERNET, " casino summary page, iLastHiglightedButton ", iLastHiglightedButton, " not interesting") ENDIF ENDIF ELSE CASSERTLN(DEBUG_INTERNET, " - unknown eCursorInputProcessed ", GET_LABEL_BUYABLE_VEHICLE(eCursorInputProcessed), " ") ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(tl15Tag) SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT(tl15Tag,eTextType,TRUE,iNumToDisplay1,iNumToDisplay2) iTutTimer = g_iBrowserTimer + 7500 CPRINTLN(DEBUG_INTERNET, " - display ", g_sBrowserHelpMessage.tl15Tag, " ") bWaitingForSelectionReturn = FALSE ELSE CERRORLN(DEBUG_INTERNET, " - empty g_sBrowserHelpMessage.tl15Tag") ENDIF ENDIF ELSE bCleanup_HELP_SPVE = TRUE CDEBUG1LN(DEBUG_INTERNET, " currentRolloverReturnIndex ready, iLastHiglightedButton: ", iLastHiglightedButton, " - reset") bWaitingForSelectionReturn = FALSE ENDIF ELSE CDEBUG3LN(DEBUG_INTERNET, " currentRolloverReturnIndex still not ready... ", NATIVE_TO_INT(currentRolloverReturnIndex)) // bWaitingForSelectionReturn = FALSE ENDIF IF bWaitingForSelectionReturn IF bDPadUp OR bDPadDown OR bDPadLeft OR bDPadRight CDEBUG1LN(DEBUG_INTERNET, " change DPAD") bWaitingForSelectionReturn = FALSE ENDIF ENDIF ENDIF ENDIF #IF FEATURE_CASINO_HEIST ELIF (eStaticCurrentSite = FORECLOSURES_MAZE_D_BANK_COM) AND iStaticCurrentPage = 2 AND CAN_PLAYER_PURCHASE_ARCADE() bCleanup_HELP_SPVE = TRUE IF NOT g_bBrowser_ARCADEHELP_seen IF DOES_LOCAL_PLAYER_STAT_OWN_ARCADE() CPRINTLN(DEBUG_INTERNET, " - display ARCADEHELP (iStaticCurrentPage: ", iStaticCurrentPage, "), already owns Arcade") g_bBrowser_ARCADEHELP_seen = TRUE ELSE CPRINTLN(DEBUG_INTERNET, " - display ARCADEHELP (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("ARCADEHELP", DEFAULT, FALSE) iTutTimer = g_iBrowserTimer + 7500 g_bBrowser_ARCADEHELP_seen = TRUE ENDIF ENDIF #ENDIF ELSE bCleanup_HELP_SPVE = TRUE ENDIF IF bCleanup_HELP_SPVE IF ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_PASSIVE") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHRE") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHSC") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHX17") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "MBANKHELP") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_NCLUBSTY") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_NCLUBLIG") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_NCLUBDAN") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_NCLUBICE") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_AWSE0h") OR (ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_CASWEB_0") AND IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_CASWEB_0_FOR_FIRST_TIME)) OR (ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_CASWEB_0B") AND IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_CASWEB_0_FOR_FIRST_TIME)) OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHCH") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "ARCADEHELP") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "ARC_OPTIONS") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_ASHOPSTY") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_ASHOPTNT") #IF FEATURE_DLC_1_2022 OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_BKRCLNT") #ENDIF bCleanup_HELP_SPVE = FALSE ENDIF ENDIF IF bCleanup_HELP_SPVE IF IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) CPRINTLN(DEBUG_INTERNET, " - clear \"", g_sBrowserHelpMessage.tl15Tag, "\"") CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() g_sBrowserHelpMessage.bShow = TRUE CLEAR_HELP() ENDIF IF (currentRolloverReturnIndex != NULL) AND (bWaitingForSelectionReturn != FALSE) CPRINTLN(DEBUG_INTERNET, " - reset currentRolloverReturnIndex ", NATIVE_TO_INT(currentRolloverReturnIndex), ", bWaitingForSelectionReturn ", GET_STRING_FROM_BOOL(bWaitingForSelectionReturn)) currentRolloverReturnIndex = NULL bWaitingForSelectionReturn = FALSE ENDIF ENDIF ENDIF #IF IS_DEBUG_BUILD IF bDrawDebugStuff IF NOT bSetDebugLinesAndSpheresDrawingActive SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE) bSetDebugLinesAndSpheresDrawingActive = TRUE ENDIF VECTOR vOffsetBase = <<0.3,0.2,0>>, vOffsetMult = <<0.0,0.010,0>>, vColumnMult = <<0.2,0.0,0>> IF USE_SERVER_TRANSACTIONS() vOffsetBase = <<0.3,0.2,0>>*0.75 vOffsetMult = <<0.0,0.0175,0>> ENDIF INT iStrOffset = 0, iColumn = 0 INT iRed, iGreen, iBlue, iAlpha TEXT_LABEL_63 str = "" str = "site:" str += GET_WEBSITE_FROM_INDEX(eStaticCurrentSite) IF eStaticLastSite != eStaticCurrentSite str += ", last:" str += GET_WEBSITE_FROM_INDEX(eStaticLastSite) ENDIF GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "page:" str += iStaticLastPage str += ", current:" str += iStaticCurrentPage str += ", history:" str += iStaticHistory GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "last selected index:" str += g_iLastSelectedWebIndex str += ", colour:" str += ENUM_TO_INT(g_eLastBuyableVehicleColourSelected) IF iTVOnTimeoutFrameCount != -1 INT iGameTime = GET_FRAME_COUNT() str += ", TVTime F:" str += iTVOnTimeoutFrameCount-iGameTime ENDIF GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ IF eStaticCurrentSite = WWW_DOCKTEASE_COM str = "iMod:" str += g_sYachtDataStruct.iMod GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iFixture:" str += g_sYachtDataStruct.iFixture GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iLighting:" str += g_sYachtDataStruct.iLighting GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iColour:" str += g_sYachtDataStruct.iColour GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iFlag:" str += g_sYachtDataStruct.iFlag str += " " str += GET_MODEL_NAME_FOR_DEBUG(MODEL_NAME_FOR_YACHT_FLAG(g_sYachtDataStruct.iFlag)) GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "tl63Name:\"" str += g_sYachtDataStruct.tl63Name str += "\" -> \"" str += g_sYachtDataStruct.tl63NewName IF ARE_STRINGS_EQUAL(g_sYachtDataStruct.tl63Name, g_sYachtDataStruct.tl63NewName) str += "\" same" ELSE str += "\" DIFF" ENDIF GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iYachtNameID:" str += g_sYachtDataStruct.iYachtNameID GET_HUD_COLOUR(INT_TO_ENUM(HUD_COLOURS, iStrOffset), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ ELIF eStaticCurrentSite = WWW_DYNASTY8EXECUTIVEREALTY_COM str = "Cached Last Clocked Office:" str += GET_CACHED_LAST_CLICKED_OFFICE() GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) str = "iOfficeID:" str += g_sOfficeDataStruct.iOfficeID GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ TEXT_LABEL tlStyle = "PM_OFF_VAR_" tlStyle += g_sOfficeDataStruct.iStyle str = "iStyle:" str += g_sOfficeDataStruct.iStyle str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlStyle) str += "\"" str += PICK_STRING(g_sOfficeDataStruct.iStyle = iStyle, " == ", " != ") str += iStyle GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iStyle = iStyle), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iPersonnel:" str += g_sOfficeDataStruct.iPersonnel str += PICK_STRING(g_sOfficeDataStruct.iPersonnel = iPersonnel, " == ", " != ") str += iPersonnel GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iPersonnel = iPersonnel), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iFont:" str += g_sOfficeDataStruct.iFont str += PICK_STRING(g_sOfficeDataStruct.iFont = iFont, " == ", " != ") str += iFont GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iFont = iFont), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iColour:" str += g_sOfficeDataStruct.iColour str += PICK_STRING(g_sOfficeDataStruct.iColour = iColour, " == ", " != ") str += iColour GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iColour = iColour), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "tl63OldOrgName:\"" str += g_sOfficeDataStruct.tl63OldOrgName str += "\"" GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "tl63NewOrgName:\"" str += g_sOfficeDataStruct.tl63NewOrgName str += "\"" GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iGunLocker:" str += g_sOfficeDataStruct.iGunLocker str += PICK_STRING(g_sOfficeDataStruct.iGunLocker = iGunLocker, " == ", " != ") str += iGunLocker GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iGunLocker = iGunLocker), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iVault:" str += g_sOfficeDataStruct.iVault str += PICK_STRING(g_sOfficeDataStruct.iVault = iVault, " == ", " != ") str += iVault GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iVault = iVault), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iAccommodation:" str += g_sOfficeDataStruct.iAccommodation str += PICK_STRING(g_sOfficeDataStruct.iAccommodation = iAccommodation, " == ", " != ") str += iAccommodation GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iAccommodation = iAccommodation), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iOfficeNameID:" str += g_sOfficeDataStruct.iOfficeNameID GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iGarage1Style:" str += g_sOfficeDataStruct.iGarage1Style str += PICK_STRING(g_sOfficeDataStruct.iGarage1Style = iGarage1Style, " == ", " != ") str += iGarage1Style GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iGarage1Style = iGarage1Style), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = " iGarage1Lighting:" str += g_sOfficeDataStruct.iGarage1Lighting str += PICK_STRING(g_sOfficeDataStruct.iGarage1Lighting = iGarage1Lighting, " == ", " != ") str += iGarage1Lighting GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iGarage1Lighting = iGarage1Lighting), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = " iGarage1Numb:" str += g_sOfficeDataStruct.iGarage1Number str += PICK_STRING(g_sOfficeDataStruct.iGarage1Number = iGarage1Number, " == ", " != ") str += iGarage1Number GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iGarage1Number = iGarage1Number), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iGarage2Style:" str += g_sOfficeDataStruct.iGarage2Style str += PICK_STRING(g_sOfficeDataStruct.iGarage2Style = iGarage2Style, " == ", " != ") str += iGarage2Style GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iGarage2Style = iGarage2Style), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = " iGarage2Lighting:" str += g_sOfficeDataStruct.iGarage2Lighting str += PICK_STRING(g_sOfficeDataStruct.iGarage2Lighting = iGarage2Lighting, " == ", " != ") str += iGarage2Lighting GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iGarage2Lighting = iGarage2Lighting), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = " iGarage2Numb:" str += g_sOfficeDataStruct.iGarage2Number str += PICK_STRING(g_sOfficeDataStruct.iGarage2Number = iGarage2Number, " == ", " != ") str += iGarage2Number GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iGarage2Number = iGarage2Number), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iGarage3Style:" str += g_sOfficeDataStruct.iGarage3Style str += PICK_STRING(g_sOfficeDataStruct.iGarage3Style = iGarage3Style, " == ", " != ") str += iGarage3Style GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iGarage3Style = iGarage3Style), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = " iGarage3Lighting:" str += g_sOfficeDataStruct.iGarage3Lighting str += PICK_STRING(g_sOfficeDataStruct.iGarage3Lighting = iGarage3Lighting, " == ", " != ") str += iGarage3Lighting GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iGarage3Lighting = iGarage3Lighting), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = " iGarage3Numb:" str += g_sOfficeDataStruct.iGarage3Number str += PICK_STRING(g_sOfficeDataStruct.iGarage3Number = iGarage3Number, " == ", " != ") str += iGarage3Number GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iGarage3Number = iGarage3Number), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iModshop:" str += g_sOfficeDataStruct.iModshop str += PICK_STRING(g_sOfficeDataStruct.iModshop = iModshop, " == ", " != ") str += iModshop str += " {stat:" str += GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_MODSHOP) str += "}" GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sOfficeDataStruct.iModshop = iModshop), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ // ----- FIXER HQ ----- #IF FEATURE_FIXER str = "Last Clicked Fixer HQ:" str += GET_LAST_CLICKED_FIXER_HQ() GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ FIXER_HQ_DATA_STRUCT sData GET_SCALEFORM_FIXER_HQ_DATA(sData) str = "iArt:" str += g_sFixerHQDataStruct.iArt str += PICK_STRING(g_sFixerHQDataStruct.iArt = sData.iArt, " == ", " != ") str += sData.iArt GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sFixerHQDataStruct.iArt = sData.iArt), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iWallpaper:" str += g_sFixerHQDataStruct.iWallpaper str += PICK_STRING(g_sFixerHQDataStruct.iWallpaper = sData.iWallpaper, " == ", " != ") str += sData.iWallpaper GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sFixerHQDataStruct.iWallpaper = sData.iWallpaper), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iTint:" str += g_sFixerHQDataStruct.iTint str += PICK_STRING(g_sFixerHQDataStruct.iTint = sData.iTint, " == ", " != ") str += sData.iTint GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sFixerHQDataStruct.iTint = sData.iTint), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iVehWorkshop:" str += g_sFixerHQDataStruct.iVehWorkshop str += PICK_STRING(g_sFixerHQDataStruct.iVehWorkshop = sData.iVehWorkshop, " == ", " != ") str += sData.iVehWorkshop GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sFixerHQDataStruct.iVehWorkshop = sData.iVehWorkshop), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iArmory:" str += g_sFixerHQDataStruct.iArmory str += PICK_STRING(g_sFixerHQDataStruct.iArmory = sData.iArmory, " == ", " != ") str += sData.iArmory GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sFixerHQDataStruct.iArmory = sData.iArmory), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iPersonalQuarters:" str += g_sFixerHQDataStruct.iPersonalQuarters str += PICK_STRING(g_sFixerHQDataStruct.iPersonalQuarters = sData.iPersonalQuarters, " == ", " != ") str += sData.iPersonalQuarters GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sFixerHQDataStruct.iPersonalQuarters = sData.iPersonalQuarters), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ #ENDIF ELIF eStaticCurrentSite = FORECLOSURES_MAZE_D_BANK_COM TEXT_LABEL_31 tlModName INT iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage GET_SCALEFORM_CLUBHOUSE_DATA(g_sClubhouseDataStruct.iClubhouseID, iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage) tlModName = GET_PROPERTY_NAME(g_sClubhouseDataStruct.iClubhouseID) str = "iClubhouseID:" str += g_sClubhouseDataStruct.iClubhouseID str += " \"" str += tlModName str += "\"" INT iClubhouseIDStrOffset = iStrOffset GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = "FC_WALL_" tlModName += g_sClubhouseDataStruct.iWall str = "iWall:" str += g_sClubhouseDataStruct.iWall IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF str += PICK_STRING(g_sClubhouseDataStruct.iWall = iWall, " == ", " != ") str += iWall GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sClubhouseDataStruct.iWall = iWall), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = "FC_HANGING_" tlModName += g_sClubhouseDataStruct.iWall str = "iHanging:" str += g_sClubhouseDataStruct.iHanging IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF str += PICK_STRING(g_sClubhouseDataStruct.iHanging = iHanging, " == ", " != ") str += iHanging GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sClubhouseDataStruct.iHanging = iHanging), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = "FC_FURNITURE_" tlModName += g_sClubhouseDataStruct.iFurniture str = "iFurniture:" str += g_sClubhouseDataStruct.iFurniture IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF str += PICK_STRING(g_sClubhouseDataStruct.iFurniture = iFurniture, " == ", " != ") str += iFurniture GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sClubhouseDataStruct.iFurniture = iFurniture), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_PROPERTY_INTERIOR_NAME(g_sClubhouseDataStruct.iColourScheme, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_CLUBHOUSE)) str = "iColourScheme:" str += g_sClubhouseDataStruct.iColourScheme IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF str += PICK_STRING(g_sClubhouseDataStruct.iColourScheme = iColourScheme, " == ", " != ") str += iColourScheme GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sClubhouseDataStruct.iColourScheme = iColourScheme), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iFont:" str += g_sClubhouseDataStruct.iFont str += PICK_STRING(g_sClubhouseDataStruct.iFont = iFont, " == ", " != ") str += iFont GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sClubhouseDataStruct.iFont = iFont), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iFontColour:" str += g_sClubhouseDataStruct.iFontColour str += PICK_STRING(g_sClubhouseDataStruct.iFontColour = iFontColour, " == ", " != ") str += iFontColour GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sClubhouseDataStruct.iFontColour = iFontColour), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iEmblem:" str += g_sClubhouseDataStruct.iEmblem str += PICK_STRING(g_sClubhouseDataStruct.iEmblem = iEmblem, " == ", " != ") str += iEmblem GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sClubhouseDataStruct.iEmblem = iEmblem), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iHideSinage:" str += g_sClubhouseDataStruct.iHideSinage str += PICK_STRING(g_sClubhouseDataStruct.iHideSinage = iHideSinage, " == ", " != ") str += iHideSinage GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sClubhouseDataStruct.iHideSinage = iHideSinage), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "tl63OldOrgName:\"" str += g_sClubhouseDataStruct.tl63OldSignage str += "\"" GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "tl63NewOrgName:\"" str += g_sClubhouseDataStruct.tl63NewSignage str += "\"" GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iGunLocker:" str += g_sClubhouseDataStruct.iGunLocker str += PICK_STRING(g_sClubhouseDataStruct.iGunLocker = iGunLocker, " == ", " != ") str += iGunLocker GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sClubhouseDataStruct.iGunLocker = iGunLocker), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iGarage:" str += g_sClubhouseDataStruct.iGarage str += PICK_STRING(g_sClubhouseDataStruct.iGarage = iGarage, " == ", " != ") str += iGarage GET_HUD_COLOUR(GET_HUD_COLOUR_COMPARING_OLD_NEW(g_sClubhouseDataStruct.iGarage = iGarage), iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "tl63CrewEmblem:\"" str += g_sClubhouseDataStruct.tl63CrewEmblem str += "\"" GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iClubhouseNameID:" str += g_sClubhouseDataStruct.iClubhouseNameID GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ // iStrOffset = iClubhouseIDStrOffset iColumn++ tlModName = GET_FACTORY_NAME_FROM_ID(INT_TO_ENUM(FACTORY_ID, g_sBunkerDataStruct.iBunkerID)) str = "iBunkerID:" str += g_sBunkerDataStruct.iBunkerID IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iDecor:" str += g_sBunkerDataStruct.iDecor GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iAccommodation:" str += g_sBunkerDataStruct.iAccommodation GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iFiringRange:" str += g_sBunkerDataStruct.iFiringRange GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iGunLocker:" str += g_sBunkerDataStruct.iGunLocker GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iTransportation:" str += g_sBunkerDataStruct.iTransportation GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ // iStrOffset = iClubhouseIDStrOffset iColumn++ tlModName = GET_HANGAR_NAME_FROM_ID(INT_TO_ENUM(HANGAR_ID, g_sHangarDataStruct.iHangarID)) str = "iHangarID:" str += g_sHangarDataStruct.iHangarID IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = "FCHNGR_STY_" tlModName += (g_sHangarDataStruct.iStyle+1) str = "iStyle:" str += g_sHangarDataStruct.iStyle IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = "FCHNGR_LGT_" tlModName += (g_sHangarDataStruct.iLighting+1) str = "iLighting:" str += g_sHangarDataStruct.iLighting IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = "FCHNGR_FLR_" tlModName += (g_sHangarDataStruct.iFlooring+1) str = "iFlooring:" str += g_sHangarDataStruct.iFlooring IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = "FCHNGR_FRN_" tlModName += (g_sHangarDataStruct.iFurniture+1) str = "iFurniture:" str += g_sHangarDataStruct.iFurniture IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = "FCHNGR_FRN_" tlModName += (g_sHangarDataStruct.iSleepingQuarters+1) str = "iSleepingQuarters:" str += g_sHangarDataStruct.iSleepingQuarters IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iWorkshop:" str += g_sHangarDataStruct.iWorkshop GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ // iStrOffset = iClubhouseIDStrOffset iColumn++ tlModName = GET_DEFUNCT_BASE_NAME_FROM_ID(INT_TO_ENUM(DEFUNCT_BASE_ID, g_sDefunctBaseDataStruct.iBaseID)) str = "iBaseID:" str += g_sDefunctBaseDataStruct.iBaseID IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_STYLE, g_sDefunctBaseDataStruct.iStyle) str = "iStyle:" str += g_sDefunctBaseDataStruct.iStyle IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_GRAPHIC, GET_SF_FROM_DBASE_GRAPHICS(g_sDefunctBaseDataStruct.iGraphics)) str = "iGraphics:" str += g_sDefunctBaseDataStruct.iGraphics IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_ORBITAL_WEAPON, g_sDefunctBaseDataStruct.iOrbitalWeapon) str = "iOrbitalWeapon:" str += g_sDefunctBaseDataStruct.iOrbitalWeapon IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_SECURITY_ROOM, g_sDefunctBaseDataStruct.iSecurityRoom) str = "iSecurityRoom:" str += g_sDefunctBaseDataStruct.iSecurityRoom IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_LOUNGE, g_sDefunctBaseDataStruct.iLounge) str = "iLounge:" str += g_sDefunctBaseDataStruct.iLounge IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PRIVACY_GLASS, g_sDefunctBaseDataStruct.iPrivicyGlass) str = "iPrivicyGlass:" str += g_sDefunctBaseDataStruct.iPrivicyGlass IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PERSONAL_QUARTERS, g_sDefunctBaseDataStruct.iPersonalQuarters) str = "iPersonalQuarters:" str += g_sDefunctBaseDataStruct.iPersonalQuarters IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " \"" str += (tlModName) str += "\"" ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ // iStrOffset = iClubhouseIDStrOffset iColumn++ tlModName = GET_NIGHTCLUB_NAME_FROM_ID(INT_TO_ENUM(NIGHTCLUB_ID, g_sNightclubDataStruct.iNightclubID)) str = "eNightclubID:" str += g_sNightclubDataStruct.iNightclubID IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_STYLE, g_sNightclubDataStruct.iStyle) str = "iStyle:" str += g_sNightclubDataStruct.iStyle IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_LIGHTING, GET_SF_FROM_NIGHTCLUB_LIGHTING(g_sNightclubDataStruct.iLighting)) str = "iLighting:" str += g_sNightclubDataStruct.iLighting IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DANCERS, g_sNightclubDataStruct.iDancers) str = "iDancers:" str += g_sNightclubDataStruct.iDancers IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DRYICE, g_sNightclubDataStruct.iDryIce) str = "iDryIce:" str += g_sNightclubDataStruct.iDryIce IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_WAREHOUSE, g_sNightclubDataStruct.iStorage) str = "iStorage:" str += g_sNightclubDataStruct.iStorage IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_GARAGE, g_sNightclubDataStruct.iGarage) str = "iGarage:" str += g_sNightclubDataStruct.iGarage IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_NAME, /*GET_SF_FROM_NIGHTCLUB_NAME*/ (g_sNightclubDataStruct.iNameID)) str = "iNameID:" str += g_sNightclubDataStruct.iNameID str += ", SF_" str += GET_SF_FROM_NIGHTCLUB_NAME(g_sNightclubDataStruct.iNameID) IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ #IF FEATURE_CASINO_HEIST iStrOffset = iClubhouseIDStrOffset iColumn++ tlModName = GET_ARCADE_NAME_FROM_ID(INT_TO_ENUM(ARCADE_PROPERTY_ID, g_sArcadeDataStruct.iArcadeID)) str = "eArcadeID: " str += g_sArcadeDataStruct.iArcadeID IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase + (vOffsetMult * TO_FLOAT(iStrOffset)) + (<<0.175, 0.0, 0.0>> * TO_FLOAT(iColumn - 1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_ARCADE_MOD_NAME_FROM_ID(eARCADE_MOD_FLOOR, g_sArcadeDataStruct.iFloor) str = "iStyle:" str += g_sNightclubDataStruct.iStyle IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase + (vOffsetMult * TO_FLOAT(iStrOffset)) + (<<0.175, 0.0, 0.0>> * TO_FLOAT(iColumn - 1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ #ENDIF #IF FEATURE_TUNER iStrOffset = iClubhouseIDStrOffset iColumn++ tlModName = GET_AUTO_SHOP_NAME_FROM_ID(INT_TO_ENUM(AUTO_SHOP_PROPERTY_ID, g_sAutoShopDataStruct.iAutoShopID)) str = "eAutoShopID: " str += g_sAutoShopDataStruct.iAutoShopID IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase + (vOffsetMult * TO_FLOAT(iStrOffset)) + (<<0.175, 0.0, 0.0>> * TO_FLOAT(iColumn - 1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_WALL, g_sAutoShopDataStruct.iWall) str = "iWall:" str += g_sAutoShopDataStruct.iWall IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase + (vOffsetMult * TO_FLOAT(iStrOffset)) + (<<0.175, 0.0, 0.0>> * TO_FLOAT(iColumn - 1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ #ENDIF ELIF eStaticCurrentSite = WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM str = "iCab:" str += g_sTruckDataStruct.iCab IF g_sTruckDataStruct.iCab != -1 str += " " str += GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(INT_TO_ENUM(MODEL_NAMES, GET_TRUCK_CAB_FROM_SF(g_sTruckDataStruct.iCab))) ENDIF INT iTruckCabIDStrOffset = iStrOffset GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iSection1:" str += g_sTruckDataStruct.iSection1 str += " " str += GET_ARMORY_TRUCK_SECTION_TYPE_NAME(INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection1))) GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iSection2:" str += g_sTruckDataStruct.iSection2 str += " " str += GET_ARMORY_TRUCK_SECTION_TYPE_NAME(INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection2))) GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iSection3:" str += g_sTruckDataStruct.iSection3 str += " " str += GET_ARMORY_TRUCK_SECTION_TYPE_NAME(INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection3))) GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iColour:" str += g_sTruckDataStruct.iColour str += " " str += GET_ARMORY_TRUCK_SECTION_TINT_NAME(INT_TO_ENUM(ARMORY_TRUCK_SECTION_TINT_ENUM, GET_TRUCK_SECTION_TINT_FROM_SF(g_sTruckDataStruct.iColour))) GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ // iStrOffset = iTruckCabIDStrOffset iColumn++ str = "iAvenger:" str += g_sPlaneDataStruct.iAvenger IF g_sPlaneDataStruct.iAvenger != -1 str += " " str += GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(INT_TO_ENUM(MODEL_NAMES, g_sPlaneDataStruct.iAvenger)) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iInterior:" str += g_sPlaneDataStruct.iInterior GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iGunTurret:" str += g_sPlaneDataStruct.iGunTurret GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iVehShop:" str += g_sPlaneDataStruct.iVehShop GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iWeaShop:" str += g_sPlaneDataStruct.iWeaShop GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ // iStrOffset = iTruckCabIDStrOffset iColumn++ str = "iCab:" str += g_sHackerTruckDataStruct.iCab IF g_sHackerTruckDataStruct.iCab != -1 str += " " str += GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(INT_TO_ENUM(MODEL_NAMES, g_sHackerTruckDataStruct.iCab)) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iTint:" str += g_sHackerTruckDataStruct.iTint str += " " str += GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_TINT, GET_HACKER_TRUCK_TINT_FROM_SF(g_sHackerTruckDataStruct.iTint)) GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iDecal:" str += g_sHackerTruckDataStruct.iDecal str += " " str += GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DECAL, GET_HACKER_TRUCK_DECAL_FROM_SF(g_sHackerTruckDataStruct.iDecal)) GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iMissileLauncher:" str += g_sHackerTruckDataStruct.iMissileLauncher str += " " str += GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_MISSILE_LAUNCHER, g_sHackerTruckDataStruct.iMissileLauncher) GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iDroneStation:" str += g_sHackerTruckDataStruct.iDroneStation str += " " str += GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DRONE_STATION, g_sHackerTruckDataStruct.iDroneStation) GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iWeaShop:" str += g_sHackerTruckDataStruct.iWeaShop str += " " str += GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_WEAPON_STATION, g_sHackerTruckDataStruct.iWeaShop) GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iVehShop:" str += g_sHackerTruckDataStruct.iVehShop str += " " str += GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_MOTORCYCLE_WORKSHOP, g_sHackerTruckDataStruct.iVehShop) GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(vColumnMult*TO_FLOAT(iColumn)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ ELIF eStaticCurrentSite = WWW_ARENAWAR_TV // iColumn = 0 TEXT_LABEL_31 tlModName = GET_ARENA_GARAGE_NAME_FROM_ID(INT_TO_ENUM(ARENA_GARAGE_ID, g_sArenaDataStruct.iArenaID)) str = "iArenaID:" str += g_sArenaDataStruct.iArenaID IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_STYLE, g_sArenaDataStruct.iStyle) str = "iStyle:" str += g_sArenaDataStruct.iStyle IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_GRAPHICS, g_sArenaDataStruct.iGraphics) str = "iGraphics:" str += g_sArenaDataStruct.iGraphics IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_COLOUR, g_sArenaDataStruct.iColour) str = "iColour:" str += g_sArenaDataStruct.iColour IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_EXPANSION_FLOOR_0, g_sArenaDataStruct.iExpansionFloorB1) str = "iExpansionFloorB1:" str += g_sArenaDataStruct.iExpansionFloorB1 IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_EXPANSION_FLOOR_1, g_sArenaDataStruct.iExpansionFloorB2) str = "iExpansionFloorB2:" str += g_sArenaDataStruct.iExpansionFloorB2 IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_BENNY_MECHANIC, g_sArenaDataStruct.iBennyMechanic) str = "iBennyMechanic:" str += g_sArenaDataStruct.iBennyMechanic IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_WEAPON_MECHANIC, g_sArenaDataStruct.iWeaponMechanic) str = "iWeaponMechanic:" str += g_sArenaDataStruct.iWeaponMechanic IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_PERSONAL_QUARTERS, g_sArenaDataStruct.iPersonalQuarters) str = "iPersonalQuarters:" str += g_sArenaDataStruct.iPersonalQuarters IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ ELIF eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM // iColumn = 0 TEXT_LABEL_31 tlModName = GET_CASINO_APT_NAME_FROM_ID(INT_TO_ENUM(CASINO_APT_ID, g_sCasinoDataStruct.iCasinoID)) str = "iCasinoID:" str += g_sCasinoDataStruct.iCasinoID IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_COLOUR_OPTION, g_sCasinoDataStruct.iColourOption) str = "iColourOption:" str += g_sCasinoDataStruct.iColourOption IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_STYLE_OPTION, g_sCasinoDataStruct.iStyleOption) str = "iStyleOption:" str += g_sCasinoDataStruct.iStyleOption IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_LOUNGE, g_sCasinoDataStruct.iLounge) str = "iLounge:" str += g_sCasinoDataStruct.iLounge IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_BAR, g_sCasinoDataStruct.iBar) str = "iBar:" str += g_sCasinoDataStruct.iBar IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_DEALER, g_sCasinoDataStruct.iDealer) str = "iDealer:" str += g_sCasinoDataStruct.iDealer IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_BEDROOM, g_sCasinoDataStruct.iBedroom) str = "iBedroom:" str += g_sCasinoDataStruct.iBedroom IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_MEDIAROOM, g_sCasinoDataStruct.iMediaroom) str = "iMediaroom:" str += g_sCasinoDataStruct.iMediaroom IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_SPA, g_sCasinoDataStruct.iSpa) str = "iSpa:" str += g_sCasinoDataStruct.iSpa IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_OFFICE, g_sCasinoDataStruct.iOffice) str = "iOffice:" str += g_sCasinoDataStruct.iOffice IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ tlModName = GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_GARAGE, g_sCasinoDataStruct.iGarage) str = "iGarage:" str += g_sCasinoDataStruct.iGarage IF DOES_TEXT_LABEL_EXIST(tlModName) str += " \"" str += GET_STRING_FROM_TEXT_FILE(tlModName) str += "\"" ELSE str += " " str += (tlModName) ENDIF GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "iCasinoMembership:" str += g_sCasinoDataStruct.iCasinoMembership GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "tl63Gamertag:\"" str += g_sCasinoDataStruct.tl63Gamertag str += "\"" GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ str = "tl23MugshotTexture:\"" str += g_sCasinoDataStruct.tl23MugshotTexture str += "\"" GET_HUD_COLOUR(HUD_COLOUR_PURE_WHITE, iRed, iGreen, iBlue, iAlpha) DRAW_DEBUG_TEXT_2D(str, vOffsetBase+(vOffsetMult*TO_FLOAT(iStrOffset))+(<<0.175,0.0,0>>*TO_FLOAT(iColumn-1)), iRed, iGreen, iBlue, iAlpha) iStrOffset++ ENDIF ENDIF #ENDIF ENDPROC PROC PLAY_TACO_LINE(TACO_SITE_LINES tsl, structPedsForConversation &thisSpfc) IF IS_SCRIPTED_CONVERSATION_ONGOING() TEXT_LABEL_23 tl23 = GET_LAST_PASSED_STANDARD_CONVERSATION_ROOT() CPRINTLN(DEBUG_INTERNET, "PLAY_TACO_LINE: Conversation already playing (\"", tl23, "\")") EXIT ENDIF INT iGameTime = GET_GAME_TIMER()+2000 SWITCH tsl CASE TSL_PACOW_TASTY ADD_PED_FOR_DIALOGUE(thisSpfc,1,NULL,"PACO") CPRINTLN(DEBUG_INTERNET, "PLAY_TACO_LINE: trying to create conversation - TSL_PACOW_TASTY") WHILE NOT CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC(thisSpfc, "PACOWAU", "PACOW_TASTY", CONV_PRIORITY_AMBIENT_LOW, DISPLAY_SUBTITLES, DO_NOT_ADD_TO_BRIEF_SCREEN) AND GET_GAME_TIMER() <= iGameTime CDEBUG1LN(DEBUG_INTERNET, "PLAY_TACO_LINE: waiting for CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC to return true [", iGameTime-GET_GAME_TIMER(), "ms, ", g_CurrentlyPlayingConvPriority, "]") RENDER_BROWSER() WAIT(0) ENDWHILE BREAK CASE TSL_PACOW_COLON ADD_PED_FOR_DIALOGUE(thisSpfc,1,NULL,"PACO") CPRINTLN(DEBUG_INTERNET, "PLAY_TACO_LINE: trying to create conversation - TSL_PACOW_COLON") WHILE NOT CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC(thisSpfc, "PACOWAU", "PACOW_COLON", CONV_PRIORITY_AMBIENT_LOW, DISPLAY_SUBTITLES, DO_NOT_ADD_TO_BRIEF_SCREEN) AND GET_GAME_TIMER() <= iGameTime CDEBUG1LN(DEBUG_INTERNET, "PLAY_TACO_LINE: waiting for CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC to return true [", iGameTime-GET_GAME_TIMER(), "ms, ", g_CurrentlyPlayingConvPriority, "]") RENDER_BROWSER() WAIT(0) ENDWHILE BREAK CASE TSL_PACOW_CSEC ADD_PED_FOR_DIALOGUE(thisSpfc,1,NULL,"PACO") CPRINTLN(DEBUG_INTERNET, "PLAY_TACO_LINE: trying to create conversation - TSL_PACOW_CSEC") WHILE NOT CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC(thisSpfc, "PACOWAU", "PACOW_CSEC", CONV_PRIORITY_AMBIENT_LOW, DISPLAY_SUBTITLES, DO_NOT_ADD_TO_BRIEF_SCREEN) AND GET_GAME_TIMER() <= iGameTime CDEBUG1LN(DEBUG_INTERNET, "PLAY_TACO_LINE: waiting for CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC to return true [", iGameTime-GET_GAME_TIMER(), "ms, ", g_CurrentlyPlayingConvPriority, "]") RENDER_BROWSER() WAIT(0) ENDWHILE BREAK CASE TSL_PACOW_DOG ADD_PED_FOR_DIALOGUE(thisSpfc,1,NULL,"PACO") CPRINTLN(DEBUG_INTERNET, "PLAY_TACO_LINE: trying to create conversation - TSL_PACOW_DOG") WHILE NOT CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC(thisSpfc, "PACOWAU", "PACOW_DOG", CONV_PRIORITY_AMBIENT_LOW, DISPLAY_SUBTITLES, DO_NOT_ADD_TO_BRIEF_SCREEN) AND GET_GAME_TIMER() <= iGameTime CDEBUG1LN(DEBUG_INTERNET, "PLAY_TACO_LINE: waiting for CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC to return true [", iGameTime-GET_GAME_TIMER(), "ms, ", g_CurrentlyPlayingConvPriority, "]") RENDER_BROWSER() WAIT(0) ENDWHILE BREAK CASE TSL_PACOW_VOMIT ADD_PED_FOR_DIALOGUE(thisSpfc,1,NULL,"PACO") CPRINTLN(DEBUG_INTERNET, "PLAY_TACO_LINE: trying to create conversation - TSL_PACOW_VOMIT") WHILE NOT CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC(thisSpfc, "PACOWAU", "PACOW_VOMIT", CONV_PRIORITY_AMBIENT_LOW, DISPLAY_SUBTITLES, DO_NOT_ADD_TO_BRIEF_SCREEN) AND GET_GAME_TIMER() <= iGameTime CDEBUG1LN(DEBUG_INTERNET, "PLAY_TACO_LINE: waiting for CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC to return true [", iGameTime-GET_GAME_TIMER(), "ms, ", g_CurrentlyPlayingConvPriority, "]") RENDER_BROWSER() WAIT(0) ENDWHILE BREAK CASE TSL_PACOW_PAIN ADD_PED_FOR_DIALOGUE(thisSpfc,1,NULL,"PACO") CPRINTLN(DEBUG_INTERNET, "PLAY_TACO_LINE: trying to create conversation - TSL_PACOW_PAIN") WHILE NOT CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC(thisSpfc, "PACOWAU", "PACOW_PAIN", CONV_PRIORITY_AMBIENT_LOW, DISPLAY_SUBTITLES, DO_NOT_ADD_TO_BRIEF_SCREEN) AND GET_GAME_TIMER() <= iGameTime CDEBUG1LN(DEBUG_INTERNET, "PLAY_TACO_LINE: waiting for CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC to return true [", iGameTime-GET_GAME_TIMER(), "ms, ", g_CurrentlyPlayingConvPriority, "]") RENDER_BROWSER() WAIT(0) ENDWHILE BREAK CASE TSL_PACOW_MELT ADD_PED_FOR_DIALOGUE(thisSpfc,1,NULL,"PACO") CPRINTLN(DEBUG_INTERNET, "PLAY_TACO_LINE: trying to create conversation - TSL_PACOW_MELT") WHILE NOT CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC(thisSpfc, "PACOWAU", "PACOW_MELT", CONV_PRIORITY_AMBIENT_LOW, DISPLAY_SUBTITLES, DO_NOT_ADD_TO_BRIEF_SCREEN) AND GET_GAME_TIMER() <= iGameTime CDEBUG1LN(DEBUG_INTERNET, "PLAY_TACO_LINE: waiting for CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC to return true [", iGameTime-GET_GAME_TIMER(), "ms, ", g_CurrentlyPlayingConvPriority, "]") RENDER_BROWSER() WAIT(0) ENDWHILE BREAK ENDSWITCH ENDPROC PROC DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE(WEBSITE_INDEX_ENUM eSite, SITE_BUYABLE_VEHICLE sbv, STRING vehicleNameTag, BOOL bPegasus, BOOL bClubhouse, BOOL bMobileOperationsCenter, BOOL bSmugglerHangar, BOOL bDefuctBase, BOOL bNightclub, BOOL bHackerTruck, BOOL bArenaGarage, BOOL bCasinoGarage ,BOOL bSubmarine #IF FEATURE_TUNER, BOOL bAutoShop #ENDIF) IF NETWORK_IS_GAME_IN_PROGRESS() REQUEST_SYSTEM_ACTIVITY_TYPE_PURCHASED_VEHICLE() TEXT_LABEL_31 txdict = "", fstr = "" TEXT_LABEL_63 fYachtName = "" BOOL bImportExportGarage = GET_SVM_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1 BOOL bGunrunningGarage = GET_WVM_VEHICLE_SLOT(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1 IF NOT bDefuctBase IF GET_FDS_VEHICLE_SLOT(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1 bDefuctBase = TRUE ENDIF ENDIF IF bDefuctBase bSmugglerHangar = FALSE ENDIF IF bPegasus txdict = GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PEGASUS_DELIVERY].picture) fstr = "DELVIRLP" // Your ~a~ will be available from Pegasus shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELVIRLB" // Your new vehicle will be available from Pegasus shortly. ENDIF ELSE IF (sbv = BV_DLC_BIG_YACHT) IF NOT bPreviousPegasus IF SHOULD_PRIVATE_YACHTS_BE_ACTIVE() fstr = "DELVIRLY" // Your new yacht ~a~ is now available. ELSE fstr = "DELVIRLYS" // Your new yacht ~a~ will soon be made available to you. ENDIF ELSE fstr = "DELVIRLYR" // Your yacht ~a~ has now been redesigned. ENDIF fYachtName = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_YACHT_NAME, MP_STAT_YACHT_NAME2) IF IS_STRING_NULL_OR_EMPTY(fYachtName) fstr += "a" ENDIF ELIF (sbv = BV_DLC_BIG_TRUCK) fYachtName = "" IF NOT bPreviousPegasus fstr = "DELVIRLT" // Your new Mobile Operations Center ~a~ is now available. ELSE fstr = "DELVIRLTR" // Your renovated Mobile Operations Center ~a~ is now available. ENDIF IF IS_STRING_NULL_OR_EMPTY(fYachtName) fstr += "a" ENDIF ELIF (sbv = BV_DLC_BIG_PLANE) fYachtName = "" IF NOT bPreviousPegasus fstr = "DELVIRLO" // Your new Osprey ~a~ is now available. ELSE fstr = "DELVIRLOR" // Your renovated Osprey ~a~ is now available. ENDIF IF IS_STRING_NULL_OR_EMPTY(fYachtName) fstr += "a" ENDIF ELIF (sbv = BV_DLC_HACKER_TRUCK) fYachtName = "" IF NOT bPreviousPegasus fstr = "DELVIRLH" // Your new Terrorbyte ~a~ is now available. ELSE fstr = "DELVIRLHR" // Your renovated Terrorbyte ~a~ is now available. ENDIF IF IS_STRING_NULL_OR_EMPTY(fYachtName) fstr += "a" ENDIF #IF FEATURE_HEIST_ISLAND ELIF (sbv = BV_IH_KOSATKA) fYachtName = "" IF NOT bPreviousPegasus fstr = "DELSUBT" // Your new Submarine ~a~ is now available. ELSE fstr = "DELSUBTR" // Your renovated Submarine ~a~ is now available. ENDIF IF IS_STRING_NULL_OR_EMPTY(fYachtName) fstr += "a" ENDIF #ENDIF #IF FEATURE_COPS_N_CROOKS ELIF sbv = BV_CNC_POLBATI OR sbv = BV_CNC_POLBUFFALO OR sbv = BV_CNC_POLGAUNTLET OR sbv = BV_CNC_POLGRANGER OR sbv = BV_CNC_POLICE5 OR sbv = BV_CNC_POLICE6 OR sbv = BV_CNC_POLICEB2 OR sbv = BV_CNC_POLICET2 OR sbv = BV_CNC_POLPANTO OR sbv = BV_CNC_POLCARACARA OR sbv = BV_CNC_POLRIATA OR sbv = BV_CNC_POLGREENWOOD IF NOT IS_BIT_SET(MPGlobalsAmbience.iFmNmhBitSet12, BI_FM_NMH12_CNC_POLICE_DISPATCH_JOBS_HELP) SET_BIT(MPGlobalsAmbience.iFmNmhBitSet12, BI_FM_NMH12_CNC_POLICE_DISPATCH_JOBS_HELP) PRINTLN("DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE BI_FM_NMH12_CNC_POLICE_DISPATCH_JOBS_HELP TRUE") ENDIF fstr = "DELVIRL" // Your ~a~ will be delivered to your Garage shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELVIRLG" // Your new vehicle will be delivered to your Garage shortly. ENDIF #ENDIF ELSE IF bClubhouse fstr = "DELCIRL" // Your ~a~ will be delivered to your Clubhouse shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELCIRLG" // Your new vehicle will be delivered to your Clubhouse shortly. ENDIF ELIF bImportExportGarage fstr = "DELSIRL" // Your ~a~ will be delivered to your Import Export Garage shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELSIRLG" // Your new vehicle will be delivered to your Import Export Garage shortly. ENDIF ELIF bGunrunningGarage IF DOES_PLAYER_OWN_A_BUNKER(PLAYER_ID()) fstr = "DELWIRL" // Your ~a~ will be delivered to your Bunker shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELWIRLG" // Your new vehicle will be delivered to your Bunker shortly. ENDIF ELSE fstr = "DELPIRL" // Your ~a~ will be available from the Vehicle section of the Interaction Menu Menu shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELPIRLG" // Your new vehicle will be available from the Vehicle section of the Interaction Menu Menu shortly. ENDIF ENDIF ELIF bMobileOperationsCenter fstr = "DELMIRL" // Your ~a~ will be delivered to your MOC shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELMIRLG" // Your new vehicle will be delivered to your MOC shortly. ENDIF ELIF bSmugglerHangar fstr = "DELHARL" // Your ~a~ will be delivered to the Hangar shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELHARLG" // Your new vehicle will be delivered to the Hangar shortly. ENDIF ELIF bDefuctBase fstr = "DELFIRL" // Your ~a~ will be delivered to your Facility shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELFIRLG" // Your new vehicle will be delivered to your Facility shortly. ENDIF ELIF bNightclub fstr = "DELNCRL" // Your ~a~ will be delivered to your Nightclub shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELNCRLG" // Your new vehicle will be delivered to your Nightclub shortly. ENDIF ELIF bHackerTruck fstr = "DELHTRL" // Your ~a~ will be delivered to your Terbyte shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELHTRLG" // Your new vehicle will be delivered to your Terbyte shortly. ENDIF ELIF bArenaGarage fstr = "DELARRL" // Your ~a~ will be delivered to your Nightclub shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELARRLG" // Your new vehicle will be delivered to your Nightclub shortly. ENDIF ELIF bCasinoGarage fstr = "DELCARL" // Your ~a~ will be delivered to your Casino Garage shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELCARLG" // Your new vehicle will be delivered to your Casino Garage shortly. ENDIF ELIF bSubmarine fstr = "DELSUB" // Your ~a~ will be delivered to your Submarine Moonpool shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELSUBG" // Your new vehicle will be delivered to your Submarine Moonpool shortly. ENDIF #IF FEATURE_TUNER ELIF bAutoShop fstr = "DEL_AS" // Your ~a~ will be delivered to your Auto Shop shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DEL_ASG" // Your new vehicle will be delivered to your Auto Shop shortly. ENDIF #ENDIF ELSE fstr = "DELVIRL" // Your ~a~ will be delivered to your Garage shortly. IF IS_STRING_NULL_OR_EMPTY(vehicleNameTag) fstr = "DELVIRLG" // Your new vehicle will be delivered to your Garage shortly. ENDIF ENDIF ENDIF SWITCH eSite CASE WWW_LEGENDARYMOTORSPORT_NET txdict = "CHAR_CARSITE" BREAK CASE WWW_ELITASTRAVEL_COM txdict = "CHAR_PLANESITE" BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM txdict = "CHAR_MILSITE" BREAK CASE WWW_DOCKTEASE_COM txdict = "CHAR_BOATSITE" BREAK CASE WWW_PANDMCYCLES_COM txdict = "CHAR_BIKESITE" BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM txdict = "CHAR_CARSITE2" BREAK CASE WWW_BENNYSORIGINALMOTORWORKS_COM txdict = "CHAR_CARSITE3" BREAK CASE WWW_ARENAWAR_TV txdict = "CHAR_CARSITE4" BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE: invalid eSite ", GET_WEBSITE_FROM_INDEX(eSite)) BREAK ENDSWITCH ENDIF TEXT_LABEL_63 tl63 = "" IF bPegasus tl63 += ", bPegasus" ENDIF IF bClubhouse tl63 += ", bClubhouse" ENDIF IF bImportExportGarage tl63 += ", bImportExportGarage" ENDIF IF bGunrunningGarage tl63 += ", bGunrunningGarage" ENDIF IF bMobileOperationsCenter tl63 += ", bMobileOperationsCenter" ENDIF IF bSmugglerHangar tl63 += ", bSmugglerHangar" ENDIF IF bDefuctBase tl63 += ", bDefuctBase" ENDIF IF bNightclub tl63 += ", bNightclub" ENDIF IF bArenaGarage tl63 += ", bArenaGarage" ENDIF IF bCasinoGarage tl63 += ", bCasinoGarage" ENDIF CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE(", GET_WEBSITE_FROM_INDEX(eSite), ", \"", vehicleNameTag, "\"", tl63, "), fstr:\"", fstr, "\", txdict:\"", txdict, "\"" ) UNUSED_PARAMETER(tl63) BEGIN_TEXT_COMMAND_THEFEED_POST(fstr) IF NOT IS_STRING_NULL_OR_EMPTY(vehicleNameTag) AND NOT (sbv = BV_DLC_BIG_YACHT OR sbv = BV_DLC_BIG_TRUCK OR sbv = BV_DLC_BIG_PLANE OR sbv = BV_DLC_HACKER_TRUCK #IF FEATURE_HEIST_ISLAND OR sbv = BV_IH_KOSATKA #ENDIF ) ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(vehicleNameTag) ELIF NOT IS_STRING_NULL_OR_EMPTY(fYachtName) AND (sbv = BV_DLC_BIG_YACHT OR sbv = BV_DLC_BIG_TRUCK OR sbv = BV_DLC_BIG_PLANE OR sbv = BV_DLC_HACKER_TRUCK #IF FEATURE_HEIST_ISLAND OR sbv = BV_IH_KOSATKA #ENDIF ) ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(fYachtName) ENDIF END_TEXT_COMMAND_THEFEED_POST_MESSAGETEXT(txdict, txdict, FALSE, TEXT_ICON_BLANK, "DELPURCN") ENDIF ENDPROC PROC SEND_MP_VEHICLE_CONFIRMATION_TEXT(SITE_BUYABLE_VEHICLE veh, SITE_BUYABLE_VEHICLE_COLOURS col, WEBSITE_INDEX_ENUM siteID, INT iDisplaySlot, INT iSlot) CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT ", GET_LABEL_BUYABLE_VEHICLE(veh), ", ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(veh, col), ", ", GET_WEBSITE_FROM_INDEX(siteID), ", iDisplaySlot:", iDisplaySlot, ", iSlot:", iSlot) enumCharacterList char TEXT_LABEL_23 csitebase TEXT_LABEL_63 vehname = GET_LABEL_BUYABLE_VEHICLE(veh) //#1932819 IF veh = BV_MP_COQUETTE2_TOPLESS vehname = GET_LABEL_BUYABLE_VEHICLE(BV_MP_COQUETTE2) ENDIF //STRING garagestring = "TXT_TO_GARAGE" BOOL pegMode = FALSE // Vehicle is too large to deliver to garage IF GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(veh, col) != -1 char = CHAR_PEGASUS_DELIVERY // B*1396526 //garagestring = "TXT_FROM_PEGASUS" pegMode = TRUE ENDIF BOOL clubhouseMode = FALSE IF DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_CLUBHOUSE), PROPERTY_OWNED_SLOT_CLUBHOUSE) clubhouseMode = TRUE ENDIF BOOL undergroundGarageMode = FALSE IF DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_IE_WAREHOUSE), PROPERTY_OWNED_SLOT_IE_WAREHOUSE) undergroundGarageMode = TRUE ENDIF BOOL bOfficeGarage = FALSE IF DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1), PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1) OR DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2), PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2) OR DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3), PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3) bOfficeGarage = TRUE ENDIF BOOL hangarMode = FALSE IF DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_HANGAR), PROPERTY_OWNED_SLOT_HANGAR) hangarMode = TRUE ENDIF // #IF FEATURE_GANG_OPS // BOOL defunctBaseMode = FALSE // IF DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_DEFUNCBASE), PROPERTY_OWNED_SLOT_DEFUNCBASE) // defunctBaseMode = TRUE // ENDIF // #ENDIF SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET char = CHAR_CARSITE IF pegMode char = CHAR_PEGASUS_DELIVERY csitebase = "TXT_CAR_BASEPEG" ELSE csitebase = "TXT_CAR_GARN" IF NOT IS_SBV_A_VEHICLE_WITH_LIVERIES(veh) AND NOT IS_SBV_A_VEHICLE_WITH_ARMOUR_OPTION(veh) AND veh != BV_BI_RATBIKE TEXT_LABEL_23 csitetemp csitetemp = "" SWITCH col CASE BCV_RED_COLOUR csitetemp = "TXT_CAR_GARN0" BREAK CASE BCV_PINK_COLOUR csitetemp = "TXT_CAR_GARN1" BREAK CASE BCV_YELLOW_COLOUR csitetemp = "TXT_CAR_GARN2" BREAK CASE BCV_ORANGE_COLOUR csitetemp = "TXT_CAR_GARN3" BREAK CASE BCV_GREEN_COLOUR csitetemp = "TXT_CAR_GARN4" BREAK CASE BCV_BLUE_COLOUR csitetemp = "TXT_CAR_GARN5" BREAK CASE BCV_BLACK_COLOUR csitetemp = "TXT_CAR_GARN6" BREAK CASE BCV_WHITE_COLOUR csitetemp = "TXT_CAR_GARN7" BREAK ENDSWITCH IF NOT IS_STRING_NULL_OR_EMPTY(csitetemp) AND DOES_TEXT_LABEL_EXIST(csitetemp) csitebase = csitetemp ENDIF ENDIF IF bOfficeGarage csitebase += "f" ENDIF ENDIF BREAK CASE WWW_ELITASTRAVEL_COM char = CHAR_PLANESITE IF pegMode char = CHAR_PEGASUS_DELIVERY csitebase = "TXT_CAR_BASEPEG" ELIF hangarMode csitebase = "TXT_VEH_BASEHA" ELSE csitebase = "TXT_CAR_GARN" IF bOfficeGarage csitebase += "f" ENDIF ENDIF BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM char = CHAR_MILSITE IF pegMode char = CHAR_PEGASUS_DELIVERY csitebase = "TXT_CAR_BASEPEG" ELIF undergroundGarageMode csitebase = "TXT_VEH_BASEUG" ELIF hangarMode csitebase = "TXT_VEH_BASEHA" ELSE csitebase = "TXT_CAR_GARN" IF bOfficeGarage csitebase += "f" ENDIF ENDIF BREAK CASE WWW_DOCKTEASE_COM char = CHAR_BOATSITE IF pegMode char = CHAR_PEGASUS_DELIVERY csitebase = "TXT_CAR_BASEPEG" ELSE csitebase = "TXT_CAR_GARN" IF bOfficeGarage csitebase += "f" ENDIF ENDIF BREAK CASE WWW_PANDMCYCLES_COM char = CHAR_BIKESITE_PAMC IF pegMode char = CHAR_PEGASUS_DELIVERY csitebase = "TXT_CAR_BASEPEG" ELSE csitebase = "TXT_CAR_GARN" IF bOfficeGarage csitebase += "f" ENDIF ENDIF BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM char = CHAR_CARSITE_SSASA IF pegMode char = CHAR_PEGASUS_DELIVERY csitebase = "TXT_CAR_BASEPEG" ELIF clubhouseMode csitebase = "TXT_VEH_BASECH" ELSE csitebase = "TXT_CAR_GARN" IF NOT IS_SBV_A_VEHICLE_WITH_LIVERIES(veh) AND NOT IS_SBV_A_VEHICLE_WITH_ARMOUR_OPTION(veh) AND veh != BV_BI_RATBIKE TEXT_LABEL_23 csitetemp csitetemp = "" SWITCH col CASE BCV_RED_COLOUR csitetemp = "TXT_CAR_GARN0" BREAK CASE BCV_PINK_COLOUR csitetemp = "TXT_CAR_GARN1" BREAK CASE BCV_YELLOW_COLOUR csitetemp = "TXT_CAR_GARN2" BREAK CASE BCV_ORANGE_COLOUR csitetemp = "TXT_CAR_GARN3" BREAK CASE BCV_GREEN_COLOUR csitetemp = "TXT_CAR_GARN4" BREAK CASE BCV_BLUE_COLOUR csitetemp = "TXT_CAR_GARN5" BREAK CASE BCV_BLACK_COLOUR csitetemp = "TXT_CAR_GARN6" BREAK CASE BCV_WHITE_COLOUR csitetemp = "TXT_CAR_GARN7" BREAK ENDSWITCH IF NOT IS_STRING_NULL_OR_EMPTY(csitetemp) AND DOES_TEXT_LABEL_EXIST(csitetemp) csitebase = csitetemp ENDIF ENDIF IF bOfficeGarage csitebase += "f" ENDIF #IF FEATURE_GEN9_EXCLUSIVE IF col = BCV_COLOUR_39 csitebase = "TXT_CAR_GARN8f" ENDIF #ENDIF ENDIF BREAK CASE WWW_BENNYSORIGINALMOTORWORKS_COM char = CHAR_BENNYS_OMW IF pegMode char = CHAR_PEGASUS_DELIVERY csitebase = "TXT_CAR_BASEPEG" ELSE csitebase = "TXT_CAR_GARN" IF bOfficeGarage csitebase += "f" ENDIF ENDIF BREAK CASE WWW_ARENAWAR_TV char = CHAR_ARENA IF pegMode char = CHAR_PEGASUS_DELIVERY csitebase = "TXT_CAR_BASEPEG" ELSE csitebase = "TXT_CAR_GARN" IF bOfficeGarage csitebase += "f" ENDIF ENDIF BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - invalid siteID parameter for switch statement") BREAK ENDSWITCH // IF (veh = BV_GO_THRUSTER) // char = CHAR_LESTER // csitebase = "TXT_CAR_THRUST" // ENDIF IF GET_CURRENT_LANGUAGE() = LANGUAGE_RUSSIAN OR GET_CURRENT_LANGUAGE() = LANGUAGE_JAPANESE CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT: \"", csitebase, "\":\"", GET_STRING_FROM_TEXT_FILE(csitebase), "\", \"", vehname, "\":\"", GET_STRING_FROM_TEXT_FILE(vehname), "\"") IF pegMode char = CHAR_PEGASUS_DELIVERY csitebase = "TXT_VEH_BASEPEG" ELSE csitebase = "TXT_VEH_GARN" ENDIF vehname = "" ENDIF ///#IF IS_DEBUG_BUILD // CPRINTLN(DEBUG_INTERNET, "Sending two component text message for vehicle buy :",GET_PLAYER_NAME(GET_PLAYER_INDEX()),":",vehname,":") //#ENDIF //INT iTimeout = g_iBrowserTimer + 4000 IF GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(veh, col) != -1 IF veh = BV_DLC_BIG_YACHT DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE(siteID,veh,vehname,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE #IF FEATURE_TUNER,FALSE #ENDIF) SET_BIT(MPGlobalsAmbience.iFmNmhBitSet12, BI_FM_NMH12_YACHT_PURCHASED_THIS_BOOT) IF NOT bPreviousPegasus IF NOT g_sMPTunables.byacht_disable_captain_phone_contact IF NOT IS_CONTACT_IN_PHONEBOOK(CHAR_YACHT_CAPTAIN, MULTIPLAYER_BOOK) BOOL bDisplay = FALSE INT iStatInt = GET_MP_INT_CHARACTER_STAT(MP_STAT_FM_NON_MS_HELP_TEXT8) IF NOT IS_BIT_SET(iStatInt, BI_FM_NMH11_UNLOCKED_YACHT_CAPTAIN) SET_BIT(iStatInt, BI_FM_NMH11_UNLOCKED_YACHT_CAPTAIN) SET_MP_INT_CHARACTER_STAT(MP_STAT_FM_NON_MS_HELP_TEXT8, iStatInt) bDisplay = TRUE ENDIF ADD_CONTACT_TO_PHONEBOOK(CHAR_YACHT_CAPTAIN, MULTIPLAYER_BOOK,bDisplay) CPRINTLN(DEBUG_SHOPS, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - [YACHT_CAPTAIN_CONTACT] MAINTAIN_ADD_YACHT_CAPTAIN_CONTACT - ADD_CONTACT_TO_PHONEBOOK(CHAR_YACHT_CAPTAIN, MULTIPLAYER_BOOK, ", bDisplay, ")") ENDIF IF GET_ENTITY_MODEL(PLAYER_PED_ID()) = MP_M_FREEMODE_01 csitebase = "TXT_YACHT_M" ELSE csitebase = "TXT_YACHT_F" ENDIF ADD_ITEM_TO_MP_VEHICLE_TEXT(CHAR_YACHT_CAPTAIN, csitebase, vehname, "", 3000) ELSE CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - don't call for CHAR_YACHT_CAPTAIN, byacht_disable_captain_phone_contact:", GET_STRING_FROM_BOOL(g_sMPTunables.byacht_disable_captain_phone_contact)) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - don't call for CHAR_YACHT_CAPTAIN, bPreviousPegasus:", GET_STRING_FROM_BOOL(bPreviousPegasus)) ENDIF ELIF veh = BV_DLC_BIG_TRUCK DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE(siteID,veh,vehname,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE #IF FEATURE_TUNER,FALSE #ENDIF) CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - don't call for CHAR_YACHT_CAPTAIN, bPreviousPegasus:", GET_STRING_FROM_BOOL(bPreviousPegasus)) ELIF veh = BV_DLC_BIG_PLANE DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE(siteID,veh,vehname,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE #IF FEATURE_TUNER,FALSE #ENDIF) CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - don't call for CHAR_YACHT_CAPTAIN, bPreviousPegasus:", GET_STRING_FROM_BOOL(bPreviousPegasus)) ELIF veh = BV_DLC_BALLISTIC_EQUIPMENT CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - don't call for ballistic, bPreviousPegasus:", GET_STRING_FROM_BOOL(bPreviousPegasus)) ELIF veh = BV_GR_TRAILERSMALL2 DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE(siteID,veh,vehname,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE #IF FEATURE_TUNER,FALSE #ENDIF) CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - don't call for CHAR_YACHT_CAPTAIN, bPreviousPegasus:", GET_STRING_FROM_BOOL(bPreviousPegasus)) ELIF veh = BV_DLC_HACKER_TRUCK DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE(siteID,veh,vehname,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE #IF FEATURE_TUNER,FALSE #ENDIF) CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - don't call for CHAR_YACHT_CAPTAIN, bPreviousPegasus:", GET_STRING_FROM_BOOL(bPreviousPegasus)) #IF FEATURE_HEIST_ISLAND ELIF veh = BV_IH_KOSATKA SET_BIT(MPGlobalsAmbience.iFmNmhBitSet12, BI_FM_NMH12_H4_BOUGHT_SUBMARINE) #IF FEATURE_GEN9_EXCLUSIVE RESUME_ISLAND_HEIST_UDS_ACTIVITY() END_ISLAND_HEIST_UDS_ACTIVITY(UDS_ACTIVITY_END_REASON_ABANDONED) #ENDIF IF NOT IS_PLAYER_IN_SMPL_INT_SUBMARINE_THEY_OWN(PLAYER_ID()) DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE(siteID,veh,vehname,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE #IF FEATURE_TUNER,FALSE #ENDIF) CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - don't call for KOSATKA, bPreviousPegasus:", GET_STRING_FROM_BOOL(bPreviousPegasus)) ELSE CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - no call or ticker notification for KOSATKA, bPreviousPegasus:", GET_STRING_FROM_BOOL(bPreviousPegasus)) ENDIF #ENDIF ELIF veh = BV_AW_RCBANDITO CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - don't call for RC Bandito, bPreviousPegasus:", GET_STRING_FROM_BOOL(bPreviousPegasus)) ELSE DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE(siteID,veh,vehname,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE #IF FEATURE_TUNER,FALSE #ENDIF) ADD_ITEM_TO_MP_VEHICLE_TEXT(char,csitebase,vehname,"",MP_VEHICLE_TEXT_DELAY_FOR_PURCHASED_VEHICLE) ENDIF ELSE IF iSlot = -1 #IF IS_DEBUG_BUILD CASSERTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT player ordered a personal vehicle but no slot was set? See conor.") #ENDIF #IF FEATURE_CASINO_HEIST ELIF veh = BV_CH_MINITANK CPRINTLN(DEBUG_INTERNET, "SEND_MP_VEHICLE_CONFIRMATION_TEXT - don't call for RC Tank, bPreviousPegasus:", GET_STRING_FROM_BOOL(bPreviousPegasus)) #ENDIF ELSE STRING sGarageString = "" INT iGarageSlot = iSlot BOOL bClubhouse = FALSE, bMobileOperationsCenter = FALSE, bSmugglerHangar = FALSE, bDefuctBase = FALSE, bNightclub = FALSE, bHackerTruck = FALSE, bArenaGarage = FALSE, bCasinoGarage = FALSE #IF FEATURE_HEIST_ISLAND BOOL bSubmarine #ENDIF #IF FEATURE_TUNER BOOL bAutoShop #ENDIF bClubhouse = DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_CLUBHOUSE), PROPERTY_OWNED_SLOT_CLUBHOUSE) IF (iDisplaySlot = DISPLAY_SLOT_START_ARMOURY_TRUCK) sGarageString = "PIM_MTRUCK" csitebase = "TXT_TRUCK_GAR" ///iGarageSlot = -1 bMobileOperationsCenter = TRUE ENDIF bSmugglerHangar = DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_HANGAR), PROPERTY_OWNED_SLOT_HANGAR) bDefuctBase = DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_DEFUNCBASE), PROPERTY_OWNED_SLOT_DEFUNCBASE) bNightclub = DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_NIGHTCLUB), PROPERTY_OWNED_SLOT_NIGHTCLUB) IF NOT bNightclub IF DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_MEGAWARE_GARAGE_LVL1), PROPERTY_OWNED_SLOT_MEGAWARE_GARAGE_LVL1) OR DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_MEGAWARE_GARAGE_LVL2), PROPERTY_OWNED_SLOT_MEGAWARE_GARAGE_LVL2) OR DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_MEGAWARE_GARAGE_LVL3), PROPERTY_OWNED_SLOT_MEGAWARE_GARAGE_LVL3) bNightclub = TRUE ENDIF ENDIF IF NOT bNightclub IF (iDisplaySlot = DISPLAY_SLOT_CLUBSPEEDO) OR (iDisplaySlot = DISPLAY_SLOT_CLUBMULE) OR (iDisplaySlot = DISPLAY_SLOT_CLUBPOUNDER) bNightclub = TRUE ENDIF ENDIF IF (iDisplaySlot = DISPLAY_SLOT_TEROBYTE_OPP2) // sGarageString = "PIM_MTRUCK""" // csitebase = "TXT_TRUCK_GAR""" ///iGarageSlot = -1 bHackerTruck = TRUE ENDIF #IF FEATURE_HEIST_ISLAND IF (iDisplaySlot = DISPLAY_SLOT_SUB_AQUA_CAR) // sGarageString = "PIM_MTRUCK""" // csitebase = "TXT_TRUCK_GAR""" ///iGarageSlot = -1 bSubmarine = TRUE ENDIF #ENDIF IF DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_ARENAWARS_GARAGE_LVL1), PROPERTY_OWNED_SLOT_ARENAWARS_GARAGE_LVL1) OR DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_ARENAWARS_GARAGE_LVL2), PROPERTY_OWNED_SLOT_ARENAWARS_GARAGE_LVL2) OR DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_ARENAWARS_GARAGE_LVL3), PROPERTY_OWNED_SLOT_ARENAWARS_GARAGE_LVL3) bArenaGarage = TRUE ENDIF IF NOT bArenaGarage IF (iDisplaySlot = DISPLAY_SLOT_CERBERUS) OR (iDisplaySlot = DISPLAY_SLOT_CERBERUS2) OR (iDisplaySlot = DISPLAY_SLOT_CERBERUS3) OR (iDisplaySlot = DISPLAY_SLOT_RCCAR) bArenaGarage = TRUE ENDIF ENDIF IF DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_CASINO_GARAGE), PROPERTY_OWNED_SLOT_CASINO_GARAGE) bCasinoGarage = TRUE ENDIF IF DOES_DISPLAY_SLOT_EXIST_IN_PROPERTY(iDisplaySlot, GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_AUTOSHOP_PROPERTY), PROPERTY_OWNED_SLOT_AUTOSHOP_PROPERTY) bAutoShop = TRUE ENDIF DO_VEHICLE_PURCHASE_NOTIFICATION_FEED_MESSAGE(siteID,veh,vehname,FALSE,bClubhouse, bMobileOperationsCenter, bSmugglerHangar, bDefuctBase, bNightclub, bHackerTruck, bArenaGarage, bCasinoGarage,bSubmarine #IF FEATURE_TUNER,bAutoShop #ENDIF) ADD_ITEM_TO_MP_VEHICLE_TEXT(char,csitebase,vehname,sGarageString,MP_VEHICLE_TEXT_DELAY_FOR_PURCHASED_VEHICLE,MP_SAVE_VEH_TEXT_ACTION_GIVE_PERSONAL_VEHICLE,iGarageSlot) ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "Appinternet waiting for mp vehicle text message to send...") ///MOVED TO MAINTAIN_MP_VEHICLE_TEXT_MESSAGES // WHILE (NOT Request_MP_Comms_Txtmsg_With_Components(char, // csitebase, // GET_PLAYER_NAME(GET_PLAYER_INDEX()), // TRUE, // NO_INT_SUBSTRING_COMPONENT_VALUE, // (vehname), // (garagestring), // FALSE, // ALL_MP_COMMS_MODIFIERS_CLEAR)) // AND (iTimeout > g_iBrowserTimer) BROWSER_CURSOR_LOADING(FALSE) IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER(TRUE) WAIT(0) //ENDWHILE ENDPROC #IF IS_DEBUG_BUILD // Widget handles and setup WIDGET_GROUP_ID DebugBrowserWidgets BOOL DebugAttemptToForceWebsite = FALSE BOOL DebugLudicrousMoney = FALSE//2147483647 INT DebugNagScreen = 0 BOOL bSetOwnedProperties = FALSE BOOL bSaveVehicleLabels = FALSE BOOL bDrawMysteriousPageValues = FALSE ///STRING DebugForceSiteTo = "WWW_EYEFIND_INFO" TEXT_WIDGET_ID forceTo INT iStoryCount[BAWSAQ_STORIES_PER_CATEGORY] TEXT_WIDGET_ID storyHeader[BAWSAQ_STORIES_PER_CATEGORY], storyText[BAWSAQ_STORIES_PER_CATEGORY] PROC DEBUG_DRAW_MYSTERIOUS_PAGE_VALUES() IF bDrawMysteriousPageValues OR GET_COMMANDLINE_PARAM_EXISTS("sc_DrawWebsiteMysteriousPageValues") TEXT_LABEL_63 tlText VECTOR vPos = <<0.1, 0.3, 0.0>> VECTOR vOffset = << 0.0, 0.02, 0.0>> SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE) tlText = "*** WEBSITE PAGE VALUES ***" DRAW_DEBUG_TEXT_2D(Get_String_From_TextLabel(tlText), vPos, 0, 255, 0) vPos += vOffset vPos += vOffset tlText = "iStaticCurrentPage: " tlText += GET_STRING_FROM_INT(iStaticCurrentPage) DRAW_DEBUG_TEXT_2D(Get_String_From_TextLabel(tlText), vPos, 0, 255, 0) vPos += vOffset tlText = "g_iLastSelectedWebIndex: " tlText += GET_STRING_FROM_INT(g_iLastSelectedWebIndex) DRAW_DEBUG_TEXT_2D(Get_String_From_TextLabel(tlText), vPos, 0, 255, 0) vPos += vOffset tlText = "iStaticLastPage: " tlText += GET_STRING_FROM_INT(iStaticLastPage) DRAW_DEBUG_TEXT_2D(Get_String_From_TextLabel(tlText), vPos, 0, 255, 0) vPos += vOffset ENDIF ENDPROC PROC DEBUG_MAKE_BROWSER_WIDGETS() IF DOES_WIDGET_GROUP_EXIST(DebugBrowserWidgets) DELETE_WIDGET_GROUP(DebugBrowserWidgets) ENDIF DebugBrowserWidgets = START_WIDGET_GROUP("Web Browser Overrides") ADD_WIDGET_BOOL("Draw Mysterious Page Values", bDrawMysteriousPageValues) ADD_WIDGET_BOOL("Do force", DebugAttemptToForceWebsite) forceTo = ADD_TEXT_WIDGET("Force site") SET_CONTENTS_OF_TEXT_WIDGET(forceTo,"WWW_EYEFIND_INFO") ADD_WIDGET_BOOL("Force Specific Eye Find News Story : ", bDebug_ForceSpecificEyeFindNewsStory) ADD_WIDGET_INT_SLIDER("Set Forced Specific Eye Find News Story : ", iDebug_ForcedSpecificEyeFindNewsStory, 1, 10, 1) ADD_WIDGET_BOOL("bBrowserTutorialSeen", g_savedGlobals.sFinanceData.bBrowserTutorialSeen) ADD_WIDGET_BOOL("GEIF ME ALL THE MONEYS", DebugLudicrousMoney) START_NEW_WIDGET_COMBO() ADD_TO_WIDGET_COMBO("NSR_CASH") ADD_TO_WIDGET_COMBO("NSR_DLC") ADD_TO_WIDGET_COMBO("NSR_VOUCHER") STOP_WIDGET_COMBO("TRIGGER NAG SCREEN", DebugNagScreen) // ADD_WIDGET_INT_READ_ONLY("eStaticLastSite", eStaticLastSite) // ADD_WIDGET_INT_READ_ONLY("eStaticCurrentSite", eStaticCurrentSite) ADD_WIDGET_INT_READ_ONLY("iStaticLastPage", iStaticLastPage) ADD_WIDGET_INT_READ_ONLY("iStaticCurrentPage", iStaticCurrentPage) START_WIDGET_GROUP("Force Bawsaq News") ADD_WIDGET_BOOL("g_bForceBawsaqNews", g_bForceBawsaqNews) TEXT_LABEL str INT iStory REPEAT BAWSAQ_STORIES_PER_CATEGORY iStory str = "iStoryCount[" str += iStory str += "]" ADD_WIDGET_INT_SLIDER(str, iStoryCount[iStory], 0, PRICE_TRIGGER_STACK_TOTAL, 1) str = "storyHeader[" str += iStory str += "]" storyHeader[iStory] = ADD_TEXT_WIDGET(str) SET_CONTENTS_OF_TEXT_WIDGET(storyHeader[iStory], "null") str = "storyText[" str += iStory str += "]" storyText[iStory] = ADD_TEXT_WIDGET(str) SET_CONTENTS_OF_TEXT_WIDGET(storyText[iStory], "null") ENDREPEAT STOP_WIDGET_GROUP() START_WIDGET_GROUP("SF Eyefind advert indexes") ADD_WIDGET_STRING("Large advert indexes") ADD_WIDGET_INT_SLIDER("Large advert index 0", g_sMPTunables.iSF_EYEFIND_MP_LARGE_ADVERT_INDEX_0, -1, 14, 1) ADD_WIDGET_INT_SLIDER("Large advert index 1", g_sMPTunables.iSF_EYEFIND_MP_LARGE_ADVERT_INDEX_1, -1, 14, 1) ADD_WIDGET_INT_SLIDER("Large advert index 2", g_sMPTunables.iSF_EYEFIND_MP_LARGE_ADVERT_INDEX_2, -1, 14, 1) ADD_WIDGET_STRING("Small advert indexes") ADD_WIDGET_INT_SLIDER("Small advert index 0", g_sMPTunables.iSF_EYEFIND_MP_SMALL_ADVERT_INDEX_0, -1, 78, 1) ADD_WIDGET_INT_SLIDER("Small advert index 1", g_sMPTunables.iSF_EYEFIND_MP_SMALL_ADVERT_INDEX_1, -1, 78, 1) ADD_WIDGET_INT_SLIDER("Small advert index 2", g_sMPTunables.iSF_EYEFIND_MP_SMALL_ADVERT_INDEX_2, -1, 78, 1) ADD_WIDGET_INT_SLIDER("Small advert index 3", g_sMPTunables.iSF_EYEFIND_MP_SMALL_ADVERT_INDEX_3, -1, 78, 1) ADD_WIDGET_INT_SLIDER("Small advert index 4", g_sMPTunables.iSF_EYEFIND_MP_SMALL_ADVERT_INDEX_4, -1, 78, 1) ADD_WIDGET_INT_SLIDER("Small advert index 5", g_sMPTunables.iSF_EYEFIND_MP_SMALL_ADVERT_INDEX_5, -1, 78, 1) ADD_WIDGET_INT_SLIDER("Small advert index 6", g_sMPTunables.iSF_EYEFIND_MP_SMALL_ADVERT_INDEX_6, -1, 78, 1) ADD_WIDGET_INT_SLIDER("Small advert index 7", g_sMPTunables.iSF_EYEFIND_MP_SMALL_ADVERT_INDEX_7, -1, 78, 1) ADD_WIDGET_INT_SLIDER("Small advert index 8", g_sMPTunables.iSF_EYEFIND_MP_SMALL_ADVERT_INDEX_8, -1, 78, 1) ADD_WIDGET_INT_SLIDER("Small advert index 9", g_sMPTunables.iSF_EYEFIND_MP_SMALL_ADVERT_INDEX_9, -1, 78, 1) STOP_WIDGET_GROUP() ADD_WIDGET_BOOL("Catalogue missing entries", b_debug_CatalogueMissingEntries) START_WIDGET_GROUP("GET_OWNED_PROPERTY") INT iSlot = GET_ACTIVE_CHARACTER_SLOT() ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_APT_1", g_MP_STAT_PROPERTY_HOUSE[iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_APT_2", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_2-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_APT_3", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_3-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_APT_4", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_4-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_APT_5", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_5-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_OFFICE_0", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_OFFICE_0-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_CLUBHOUSE", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_CLUBHOUSE-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_APT_6", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_6-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_IE_WAREHOUSE", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_IE_WAREHOUSE-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_HANGAR", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_HANGAR-1][iSlot], 0, MAX_MP_PROPERTIES, 1) #IF FEATURE_SUMMER_2020 ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_APT_7", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_7-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_APT_8", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_8-1][iSlot], 0, MAX_MP_PROPERTIES, 1) #ENDIF #IF FEATURE_DLC_1_2022 ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_APT_9", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_9-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_APT_10", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_10-1][iSlot], 0, MAX_MP_PROPERTIES, 1) #ENDIF // ADD_WIDGET_INT_SLIDER("PROPERTY_OWNED_SLOT_XXXXXX", g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_XXXXXX-1][iSlot], 0, MAX_MP_PROPERTIES, 1) ADD_WIDGET_BOOL("GET_OWNED_PROPERTY - save all", bSetOwnedProperties) STOP_WIDGET_GROUP() ADD_WIDGET_BOOL("Browser MBANKHELP seen", g_bBrowser_MBANKHELP_seen) #IF FEATURE_CASINO_HEIST ADD_WIDGET_BOOL("Browser ARCADEHELP seen", g_bBrowser_ARCADEHELP_seen) #ENDIF ADD_WIDGET_BOOL("bSaveVehicleLabels", bSaveVehicleLabels) ADD_WIDGET_BOOL("Draw Debug Stuff", bDrawDebugStuff) STOP_WIDGET_GROUP() ENDPROC #ENDIF CONST_FLOAT SCRIPT_INVALID_SCALEFORM_PARAM -1.0 PROC CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_NORET(SCALEFORM_INDEX &thisMov, STRING method, FLOAT p1, FLOAT p2 = SCRIPT_INVALID_SCALEFORM_PARAM, FLOAT p3 = SCRIPT_INVALID_SCALEFORM_PARAM, FLOAT p4 = SCRIPT_INVALID_SCALEFORM_PARAM, FLOAT p5 = SCRIPT_INVALID_SCALEFORM_PARAM) BEGIN_SCALEFORM_MOVIE_METHOD(thisMov,method) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(p1) IF p2 != SCRIPT_INVALID_SCALEFORM_PARAM SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(p2) ENDIF IF p3 != SCRIPT_INVALID_SCALEFORM_PARAM SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(p3) ENDIF IF p4 != SCRIPT_INVALID_SCALEFORM_PARAM SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(p4) ENDIF IF p5 != SCRIPT_INVALID_SCALEFORM_PARAM SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(p5) ENDIF END_SCALEFORM_MOVIE_METHOD() ENDPROC SCALEFORM_RETURN_INDEX fudp INT fudret = 0 WEBSITE_INDEX_ENUM eSiteIDCheck = INVALID_WEBSITE_INDEX INT iPageIDCheck = -1 INT iPageIDLast = -1 BOOL bDynamic = FALSE BOOL bHasLoadedChildContent = FALSE INT iBSTutorialProgress = 0 BOOL bSelectionHoldActionDetector = FALSE BOOL bSelectionHoldActionPolarity = FALSE INT iSelectionHoldActionRateTracker = 0 BOOL bLifeInvaderTutorialMode = FALSE CONST_INT HOUSE_GPS_SITE_OFFSET 5 BOOL bClickDetector = FALSE // Flagged true when g_iLastSelectedWebIndex is set BOOL bPrimedAveryGps INT iStaticAveryPrevious = -1 INT iPgBack = 0 BOOL bColourPickingMode = FALSE PROC DO_VEHICLE_SITE_FAIL_PAGE_REASON(VEHICLE_SITE_FAIL_REASON &reason) //SlotID 1 = heading //SlotID 2 = message text SWITCH reason CASE VSFR_INSUFFCIENT_RANK CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Web browser updating VSFR_INSUFFCIENT_RANK error text ") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITALRIRANK") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITALRIRANK2") END_SCALEFORM_MOVIE_METHOD() BREAK CASE VSFR_INSUFFCIENT_RANK_PENDING CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Web browser updating VSFR_INSUFFCIENT_RANK_PENDING error text ") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITALRIRANK") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITALRIRANKC2") END_SCALEFORM_MOVIE_METHOD() BREAK CASE VSFR_CANCELED CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Web browser updating VSFR_CANCELED error text ") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITALRPURC") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITALVECBNE") END_SCALEFORM_MOVIE_METHOD() BREAK CASE VSFR_UNSET //REDIRECT TO MAIN SITES CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Web browser updating VSFR_UNSET - redirect to main sites ") BREAK CASE VSFR_NO_STORAGE CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Web browser updating VSFR_NO_STORAGE error text ") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VHSITPURFH") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_MICHAEL SWITCH GET_VEHICLE_STORAGE_TYPE(lastVehicleFailVehicle) CASE VST_HANGAR IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_HANGAR_MICHAEL, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_HANGAR") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK CASE VST_MARINA IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_MARINA_MICHAEL, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_MARINA") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK CASE VST_HELI IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_HELIPAD_MICHAEL, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_HELIPAD") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK DEFAULT IF NOT GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_CAR_MICHAEL, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_GARAGE") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK ENDSWITCH BREAK CASE CHAR_FRANKLIN SWITCH GET_VEHICLE_STORAGE_TYPE(lastVehicleFailVehicle) CASE VST_HANGAR IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_HANGAR_FRANKLIN, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_HANGAR") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK CASE VST_MARINA IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_MARINA_FRANKLIN, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_MARINA") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK CASE VST_HELI IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_HELIPAD_FRANKLIN, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_HELIPAD") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK DEFAULT IF NOT GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_CAR_FRANKLIN, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_GARAGE") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK ENDSWITCH BREAK CASE CHAR_TREVOR SWITCH GET_VEHICLE_STORAGE_TYPE(lastVehicleFailVehicle) CASE VST_HANGAR IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_HANGAR_TREVOR, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_HANGAR") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK CASE VST_MARINA IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_MARINA_TREVOR, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_MARINA") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK CASE VST_HELI IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_HELIPAD_TREVOR_COUNTRY, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_HELIPAD") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK DEFAULT IF NOT GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_CAR_TREVOR, VEHGEN_S_FLAG_AVAILABLE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA_GARAGE") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") ENDIF BREAK ENDSWITCH BREAK DEFAULT SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITNSTA") BREAK ENDSWITCH END_SCALEFORM_MOVIE_METHOD() BREAK CASE VSFR_NO_MONEY CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Vehicle site no money fail page, VSFR_NO_MONEY") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VHSITPURFH") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITINSF") END_SCALEFORM_MOVIE_METHOD() BREAK CASE VSFR_INVALID_CATEGORY CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Vehicle invalid catagory, VSFR_INVALID_CATEGORY") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VHSITPURFH") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITCATINVAL") END_SCALEFORM_MOVIE_METHOD() BREAK CASE VSFR_ALREADY_OWNED CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Vehicle already owned, VSFR_ALREADY_OWNED") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VHSITPURFH") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) IF lastVehicleFailVehicle != BV_DLC_BALLISTIC_EQUIPMENT SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITALRDOW") //You have already unlocked this vehicle. ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("ISITALRDOW") //You have already unlocked this item. ENDIF END_SCALEFORM_MOVIE_METHOD() BREAK CASE VSFR_NO_INV_SPACE CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Vehicle no inv space, VSFR_NO_INV_SPACE") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VHSITPURFH") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITALRDOR") END_SCALEFORM_MOVIE_METHOD() BREAK CASE VSFR_BIGASS_NOT_UNLOCKED CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Bigass Vehicle not unlocked, VSFR_BIGASS_NOT_UNLOCKED") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VHSITPURFH") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITALRDPEG") END_SCALEFORM_MOVIE_METHOD() BREAK CASE VSFR_NOT_SAFE CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Vehicle not safe, VSFR_NOT_SAFE") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VHSITPURFH") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) IF lastVehicleFailVehicle != BV_DLC_BALLISTIC_EQUIPMENT SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VSITSAVTRB") //Sorry, you may not purchase a vehicle at this time. Please try again later. ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("ISITSAVTRB") //Sorry, you may not purchase an item at this time. Please try again later. ENDIF END_SCALEFORM_MOVIE_METHOD() BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_FAIL_PAGE_REASON: Unknown fail reason ", lastVehicleFailReason) BREAK ENDSWITCH BEGIN_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT") END_SCALEFORM_MOVIE_METHOD() reason = VSFR_UNSET ENDPROC PROC DO_VEHICLE_CONF_PAGE_TEXT(WEBSITE_INDEX_ENUM vsite) WEBSITE_INDEX_ENUM site = vsite site = site //SlotID 1 = message text //SlotID 2 = YES button text HUD_YES //slotID 3 = NO button text HUD_NO BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VHSITUSURE") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("CELL_270") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(3) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("CELL_271") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT") END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC DO_VEHICLE_FAIL_PAGE(WEBSITE_INDEX_ENUM siteID, VEHICLE_SITE_FAIL_REASON reason, SITE_BUYABLE_VEHICLE sbv, INT iPrice) lastVehicleFailReason = reason lastVehicleFailVehicle = sbv IF reason = VSFR_NO_MONEY IF g_bInMultiplayer //AND (NOT NETWORK_IS_ACTIVITY_SESSION())//1596812 //AND IS_STORE_AVAILABLE_TO_USER() MODEL_NAMES thisModel = GET_MODEL_FOR_BUYABLE_VEHICLE(sbv) TRIGGER_BROWSER_NAG_SCREEN(ENUM_TO_INT(thisModel), iPrice) BROWSER_SET_CURSOR_STATE("BUSY") ENDIF ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") CALL_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT")//1587282 #IF IS_DEBUG_BUILD TEXT_LABEL_15 sReason = "" SWITCH reason CASE VSFR_UNSET sReason = "UNSET" BREAK CASE VSFR_NO_STORAGE sReason = "NO_STORAGE" BREAK CASE VSFR_NO_MONEY sReason = "NO_MONEY" BREAK CASE VSFR_INVALID_CATEGORY sReason = "INVALID_CATEGOR" BREAK CASE VSFR_ALREADY_OWNED sReason = "ALREADY_OWNED" BREAK CASE VSFR_NO_INV_SPACE sReason = "NO_INV_SPACE" BREAK CASE VSFR_BIGASS_NOT_UNLOCKED sReason = "BIGASS_NOT_UNLO" BREAK CASE VSFR_INSUFFCIENT_RANK sReason = "INSUF_RANK" BREAK CASE VSFR_INSUFFCIENT_RANK_PENDING sReason = "INSUF_RANK_PEND" BREAK CASE VSFR_CANCELED sReason = "CANCELED" BREAK CASE VSFR_NOT_SAFE sReason = "NOT_SAFE" BREAK DEFAULT sReason = "???_" sReason += ENUM_TO_INT(reason) BREAK ENDSWITCH #ENDIF CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_FAIL_PAGE(\"", GET_WEBSITE_FROM_INDEX(siteID), "\", reason:VSFR_", sReason, ", veh:", GET_LABEL_BUYABLE_VEHICLE(sbv), " $", iPrice, ")") SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET GO_TO_WEBSITE("WWW_LEGENDARYMOTORSPORT_NET_S_PURCHASE_D_ERROR") BREAK CASE WWW_ELITASTRAVEL_COM GO_TO_WEBSITE("WWW_ELITASTRAVEL_COM_S_PURCHASE_D_ERROR") BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM IF (sbv = BV_DLC_BIG_TRUCK) GO_TO_WEBSITE("WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM_S_TRUCK_D_PURCHASE_FAIL") ELIF (sbv = BV_DLC_BIG_PLANE) GO_TO_WEBSITE("WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM_S_AVENGER_D_BUY_D_FAIL") ELIF (sbv = BV_DLC_HACKER_TRUCK) GO_TO_WEBSITE("WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM_S_HACKERTRUCK_D_NOSALE") #IF FEATURE_HEIST_ISLAND ELIF (sbv = BV_IH_KOSATKA) GO_TO_WEBSITE("WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM_S_SUB_D_PURCHASE_FAIL") #ENDIF ELSE GO_TO_WEBSITE("WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM_S_PURCHASE_D_ERROR") ENDIF BREAK CASE WWW_DOCKTEASE_COM IF (sbv = BV_DLC_BIG_YACHT) GO_TO_WEBSITE("WWW_DOCKTEASE_COM_S_YACHT_D_PURCHASE_FAILED") ELSE GO_TO_WEBSITE("WWW_DOCKTEASE_COM_S_PURCHASE_D_ERROR") ENDIF BREAK CASE WWW_PANDMCYCLES_COM GO_TO_WEBSITE("WWW_PANDMCYCLES_COM_S_PURCHASE_D_ERROR") BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM GO_TO_WEBSITE("WWW_SOUTHERNSANANDREASSUPERAUTOS_COM_S_PURCHASE_D_ERROR") BREAK CASE WWW_BENNYSORIGINALMOTORWORKS_COM GO_TO_WEBSITE("WWW_BENNYSORIGINALMOTORWORKS_COM_S_PURCHASE_D_ERROR") BREAK CASE WWW_ARENAWAR_TV GO_TO_WEBSITE("WWW_ARENAWAR_TV_S_PURCHASE_D_FAILED") BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "MISSING VEHICLE SITE FAIL PAGE") BREAK ENDSWITCH IF sbv = BV_DLC_BIG_TRUCK SETUP_TRUCK_GLOBALS_FROM_STATS() ENDIF IF sbv = BV_DLC_BIG_PLANE SETUP_PLANE_GLOBALS_FROM_STATS() ENDIF IF sbv = BV_DLC_HACKER_TRUCK SETUP_HACKER_TRUCK_GLOBALS_FROM_STATS() ENDIF #IF FEATURE_HEIST_ISLAND IF sbv = BV_IH_KOSATKA SETUP_KOSATKA_GLOBALS_FROM_STATS() ENDIF #ENDIF ENDPROC FUNC STRING GET_VEHICLE_PURCHASE_SUCCESS_PAGE(WEBSITE_INDEX_ENUM siteID, SITE_BUYABLE_VEHICLE sbv) SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET RETURN "WWW_LEGENDARYMOTORSPORT_NET_S_PURCHASE_D_SUCCESS" BREAK CASE WWW_ELITASTRAVEL_COM RETURN "WWW_ELITASTRAVEL_COM_S_PURCHASE_D_SUCCESS" BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM IF (sbv = BV_DLC_BIG_TRUCK) RETURN "WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM_S_TRUCK_D_PURCHASE_OK" ELIF (sbv = BV_DLC_BIG_PLANE) RETURN "WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM_S_AVENGER_D_BUY_D_OK" ELIF (sbv = BV_DLC_HACKER_TRUCK) RETURN "WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM_S_HACKERTRUCK_D_SOLD" #IF FEATURE_HEIST_ISLAND ELIF (sbv = BV_IH_KOSATKA) RETURN "WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM_S_SUB_D_PURCHASE_OK" #ENDIF ELSE RETURN "WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM_S_PURCHASE_D_SUCCESS" ENDIF BREAK CASE WWW_DOCKTEASE_COM IF (sbv = BV_DLC_BIG_YACHT) RETURN "WWW_DOCKTEASE_COM_S_YACHT_D_PURCHASE_SUCCESS" ELSE RETURN "WWW_DOCKTEASE_COM_S_PURCHASE_D_SUCCESS" ENDIF BREAK CASE WWW_PANDMCYCLES_COM RETURN "WWW_PANDMCYCLES_COM_S_PURCHASE_D_SUCCESS" BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM RETURN "WWW_SOUTHERNSANANDREASSUPERAUTOS_COM_S_PURCHASE_D_SUCCESS" BREAK CASE WWW_BENNYSORIGINALMOTORWORKS_COM RETURN "WWW_BENNYSORIGINALMOTORWORKS_COM_S_PURCHASE_D_SUCCESS" BREAK CASE WWW_ARENAWAR_TV RETURN "WWW_ARENAWAR_TV_S_VEHICLE_D_PURCHASED" BREAK ENDSWITCH CASSERTLN(DEBUG_INTERNET, "MISSING VEHICLE SITE SUCCESS PAGE") RETURN "" ENDFUNC SITE_BUYABLE_VEHICLE confSbv INT confMpSlotIndex = -1, confMPDisplayIndex = -1 BOOL confCheck = FALSE INT iLastPurchasedVehicleSlot GENERIC_TRANSACTION_STATE eChipsTransactionState = TRANSACTION_STATE_DEFAULT INT iYachtModPrice = 0 INT iYachtFlagPrice = 0 INT iYachtColourPrice = 0 INT iYachtLightingPrice = 0 INT iYachtFixturePrice = 0 INT iYachtNamePrice = 0 STRUCT OFFICE_PRICE_STRUCT INT iStylePrice = 0 INT iPersonnelPrice = 0 INT iNamePrice = 0 INT iFontPrice = 0 INT iColourPrice = 0 INT iGunLockerPrice = 0 INT iVaultPrice = 0 INT iAccommodationPrice = 0 INT iGarage1StylePrice = 0 INT iGarage1LightingPrice = 0 INT iGarage1NumberPrice = 0 INT iGarage2StylePrice = 0 INT iGarage2LightingPrice = 0 INT iGarage2NumberPrice = 0 INT iGarage3StylePrice = 0 INT iGarage3LightingPrice = 0 INT iGarage3NumberPrice = 0 INT iModshopPrice = 0 ENDSTRUCT OFFICE_PRICE_STRUCT sOffice_price_struct STRUCT CLUBHOUSE_PRICE_STRUCT INT iWallPrice = 0 INT iHangingPrice = 0 INT iFurniturePrice = 0 INT iStylePrice = 0 INT iNamePrice = 0 INT iFontPrice = 0 INT iFontColourPrice = 0 INT iHideSignagePrice = 0 INT iEmblemPrice = 0 INT iGunLockerPrice = 0 INT iGaragePrice = 0 ENDSTRUCT CLUBHOUSE_PRICE_STRUCT sClubhouse_price_struct STRUCT BUNKER_PRICE_STRUCT INT iDecorPrice = 0 INT iAccommodationPrice = 0 INT iFiringRangePrice = 0 INT iGunLockerPrice = 0 INT iTransportationPrice = 0 ENDSTRUCT BUNKER_PRICE_STRUCT sBunker_price_struct TRUCK_PRICE_STRUCT sTruck_price_struct STRUCT HANGAR_PRICE_STRUCT INT iFlooringPrice = 0 INT iAccommodationPrice = 0 INT iFurniturePrice = 0 INT iModshopPrice = 0 INT iColourPrice = 0 INT iLightingPrice = 0 ENDSTRUCT HANGAR_PRICE_STRUCT sHangar_price_struct STRUCT DEFUNCT_BASE_PRICE_STRUCT INT iStylePrice = 0 INT iGraphicsPrice = 0 INT iOrbitalWeaponPrice = 0 INT iPersonalQuartersPrice = 0 INT iSecurityRoomPrice = 0 INT iLoungePrice = 0 INT iPrivicyGlassPrice = 0 ENDSTRUCT DEFUNCT_BASE_PRICE_STRUCT sDefunct_base_price_struct PLANE_PRICE_STRUCT sPlane_price_struct NIGHTCLUB_PRICE_STRUCT sNightclub_price_struct HACKER_TRUCK_PRICE_STRUCT sHacker_truck_price_struct ARENA_GARAGE_PRICE_STRUCT sArena_garage_price_struct CASINO_APT_PRICE_STRUCT sCasino_apt_price_struct ARCADE_PRICE_STRUCT sArcade_price_struct KOSATKA_PRICE_STRUCT sKosatka_price_struct AUTO_SHOP_PRICE_STRUCT sAutoShop_price_struct #IF FEATURE_FIXER FIXER_HQ_PRICE_STRUCT sFixerHQ_price_struct #ENDIF FUNC BOOL DOES_ITEM_MATCH_SELLING_ITEM(INT iItemId, INT iSellingItemId) IF iItemId = iSellingItemId RETURN TRUE ENDIF IF IS_CATALOG_ITEM_AN_OFFICE_PROPERTY_ITEM(iItemId) IF (iItemId = HASH("PR_MP_PROP_OFF2_t0_v0") AND iSellingItemId = HASH("PR_MP_PROP_OFF2_t0_v0_CESP")) OR (iItemId = HASH("PR_MP_PROP_OFF2_t0_v0_CESP") AND iSellingItemId = HASH("PR_MP_PROP_OFF2_t0_v0")) RETURN TRUE ENDIF ELIF IS_CATALOG_ITEM_AN_OFFICE_GARAGE_PROPERTY_ITEM(iItemId) ELIF IS_CATALOG_ITEM_A_CLUBHOUSE_PROPERTY_ITEM(iItemId) IF (iItemId = HASH("PR_MP_PROP_CLUBH4_t0_v0") AND iSellingItemId = HASH("PR_MP_PROP_CLUBH4_t0_v0_CESP")) OR (iItemId = HASH("PR_MP_PROP_CLUBH4_t0_v0_CESP") AND iSellingItemId = HASH("PR_MP_PROP_CLUBH4_t0_v0")) RETURN TRUE ENDIF ELIF IS_CATALOG_ITEM_A_BUNKER_ITEM(iItemID) IF (iItemId = HASH("FACTORY_INDEX_28_t0_v0") AND iSellingItemId = HASH("FACTORY_INDEX_28_t0_v0_CESP")) OR (iItemId = HASH("FACTORY_INDEX_28_t0_v0_CESP") AND iSellingItemId = HASH("FACTORY_INDEX_28_t0_v0")) RETURN TRUE ENDIF ELSE IF (iItemId = HASH("PR_MP_PROP_18_t0_v0") AND iSellingItemId = HASH("PR_MP_PROP_18_t0_v0_CESP")) OR (iItemId = HASH("PR_MP_PROP_18_t0_v0_CESP") AND iSellingItemId = HASH("PR_MP_PROP_18_t0_v0")) RETURN TRUE ENDIF IF (iItemId = HASH("PR_MP_PROP_62_t0_v0") AND iSellingItemId = HASH("PR_MP_PROP_62_t0_v0_CESP")) OR (iItemId = HASH("PR_MP_PROP_62_t0_v0_CESP") AND iSellingItemId = HASH("PR_MP_PROP_62_t0_v0")) RETURN TRUE ENDIF ENDIF IF (g_iPotentialFixForMatchingPropertySellingId != 0) AND (g_iPotentialFixForMatchingPropertySellingId_CESP != 0) IF (iItemId = g_iPotentialFixForMatchingPropertySellingId AND iSellingItemId = g_iPotentialFixForMatchingPropertySellingId_CESP) OR (iItemId = g_iPotentialFixForMatchingPropertySellingId_CESP AND iSellingItemId = g_iPotentialFixForMatchingPropertySellingId) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PROCESSING_INTERNET_SHOPPING_BASKET(INT &iProcessSuccess, INT iPrice, INT iStatValue, SHOP_ITEM_CATEGORIES eCategory, ITEM_ACTION_TYPES eAction, INT iItemId, INT iInventoryKey, INT iDoCouponHash, INT iSellingPrice = 0, INT iSellingItemId = 0, VEHICLE_INDEX tempVehID = NULL, INT iItemInteriorID = -1, INT iInventoryInteriorID = -1) IF bProcessingBasket IF NOT DO_CHECK_TO_TERMINATE_WHILE_LOOPS() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket transaction failed - terminate loop!") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket transaction failed - session pending!") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF SWITCH iProcessingBasketStage // Add item to basket CASE SHOP_BASKET_STAGE_ADD INT iCouponPrice iCouponPrice = iPrice BOOL bCouponPriceZero IF IS_CATALOG_ITEM_AN_OFFICE_PROPERTY_ITEM(iItemId) iCouponPrice += (sOffice_price_struct.iStylePrice+sOffice_price_struct.iPersonnelPrice+sOffice_price_struct.iNamePrice+sOffice_price_struct.iFontPrice+sOffice_price_struct.iColourPrice+sOffice_price_struct.iGunLockerPrice+sOffice_price_struct.iVaultPrice+sOffice_price_struct.iAccommodationPrice+sOffice_price_struct.iModshopPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Office: $", iCouponPrice) ELIF IS_CATALOG_ITEM_A_CLUBHOUSE_PROPERTY_ITEM(iItemId) iCouponPrice += (sClubhouse_price_struct.iWallPrice+sClubhouse_price_struct.iHangingPrice+sClubhouse_price_struct.iFurniturePrice+sClubhouse_price_struct.iStylePrice+sClubhouse_price_struct.iNamePrice+sClubhouse_price_struct.iFontPrice+sClubhouse_price_struct.iFontColourPrice+sClubhouse_price_struct.iHideSignagePrice+sClubhouse_price_struct.iEmblemPrice+sClubhouse_price_struct.iGunLockerPrice+sClubhouse_price_struct.iGaragePrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Clubhouse: $", iCouponPrice) ELIF IS_CATALOG_ITEM_AN_OFFICE_GARAGE_PROPERTY_ITEM(iItemId) IF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL1) iCouponPrice += (sOffice_price_struct.iGarage1StylePrice+sOffice_price_struct.iGarage1LightingPrice+sOffice_price_struct.iGarage1NumberPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Garage Lvl1: $", iCouponPrice) ELIF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL2) iCouponPrice += (sOffice_price_struct.iGarage2StylePrice+sOffice_price_struct.iGarage2LightingPrice+sOffice_price_struct.iGarage2NumberPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Garage Lvl2: $", iCouponPrice) ELIF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL3) iCouponPrice += (sOffice_price_struct.iGarage3StylePrice+sOffice_price_struct.iGarage3LightingPrice+sOffice_price_struct.iGarage3NumberPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Garage Lvl3: $", iCouponPrice) ELSE CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Garage Lvl Unknown: $", iCouponPrice) ENDIF ELIF IS_CATALOG_ITEM_A_TRUCK_ITEM(iItemId) iCouponPrice = (sTruck_price_struct.iCabPrice+sTruck_price_struct.iSection1Price+sTruck_price_struct.iSection2Price+sTruck_price_struct.iSection3Price+sTruck_price_struct.iColourPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Truck: $", iCouponPrice, " (iCabPrice:$", sTruck_price_struct.iCabPrice, "+iSection1Price:$", sTruck_price_struct.iSection1Price, "+iSection2Price:$", sTruck_price_struct.iSection2Price, "+iSection3Price:$", sTruck_price_struct.iSection3Price, "+iColourPrice:$", sTruck_price_struct.iColourPrice, ")") ELIF IS_CATALOG_ITEM_A_BUNKER_ITEM(iItemId) iCouponPrice += (sBunker_price_struct.iDecorPrice+sBunker_price_struct.iAccommodationPrice+sBunker_price_struct.iFiringRangePrice+sBunker_price_struct.iGunLockerPrice+sBunker_price_struct.iTransportationPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Bunker: $", iCouponPrice, " (iDecorPrice:$", sBunker_price_struct.iDecorPrice, "+iAccommodationPrice:$", sBunker_price_struct.iAccommodationPrice, "+iFiringRangePrice:$", sBunker_price_struct.iFiringRangePrice, "+iGunLockerPrice:$", sBunker_price_struct.iGunLockerPrice, "+iTransportationPrice:$", sBunker_price_struct.iTransportationPrice, ")") ELIF IS_CATALOG_ITEM_A_HANGAR_ITEM(iItemId) iCouponPrice += (sHangar_price_struct.iFlooringPrice+sHangar_price_struct.iAccommodationPrice+sHangar_price_struct.iFurniturePrice+sHangar_price_struct.iModshopPrice+sHangar_price_struct.iColourPrice+sHangar_price_struct.iLightingPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Hangar: $", iCouponPrice) ELIF IS_CATALOG_ITEM_A_DEFUNCT_BASE_ITEM(iItemId) iCouponPrice += (sDefunct_base_price_struct.iPersonalQuartersPrice+sDefunct_base_price_struct.iOrbitalWeaponPrice+sDefunct_base_price_struct.iSecurityRoomPrice+sDefunct_base_price_struct.iLoungePrice+sDefunct_base_price_struct.iPrivicyGlassPrice+sDefunct_base_price_struct.iStylePrice+sDefunct_base_price_struct.iGraphicsPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Defunct Base: $", iCouponPrice, " (iPersonalQuartersPrice:$", sDefunct_base_price_struct.iPersonalQuartersPrice, "+iOrbitalWeaponPrice:$", sDefunct_base_price_struct.iOrbitalWeaponPrice, "+iSecurityRoomPrice:$", sDefunct_base_price_struct.iSecurityRoomPrice, "+iLoungePrice:$", sDefunct_base_price_struct.iLoungePrice, "...") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Defunct Base... iPrivicyGlassPrice:$", sDefunct_base_price_struct.iPrivicyGlassPrice, "+iStylePrice:$", sDefunct_base_price_struct.iStylePrice, "+iGraphicsPrice:$", sDefunct_base_price_struct.iGraphicsPrice, ")") ELIF IS_CATALOG_ITEM_A_PLANE_ITEM(iItemId) iCouponPrice = (sPlane_price_struct.iAvengerPrice+sPlane_price_struct.iGunTurretPrice+sPlane_price_struct.iVehShopPrice+sPlane_price_struct.iWeaShopPrice+sPlane_price_struct.iInteriorPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Plane: $", iCouponPrice, " (iAvengerPrice:$", sPlane_price_struct.iAvengerPrice, "+iGunTurretPrice:$", sPlane_price_struct.iGunTurretPrice, "+iVehShopPrice:$", sPlane_price_struct.iVehShopPrice, "+iWeaShopPrice:$", sPlane_price_struct.iWeaShopPrice, "+iInteriorPrice:$", sPlane_price_struct.iInteriorPrice, ")") ELIF IS_CATALOG_ITEM_A_NIGHTCLUB_ITEM(iItemId) iCouponPrice += (sNightclub_price_struct.iStylePrice+sNightclub_price_struct.iLightingPrice+sNightclub_price_struct.iDancersPrice+sNightclub_price_struct.iDryIcePrice+sNightclub_price_struct.iStoragePrice+sNightclub_price_struct.iGaragePrice+sNightclub_price_struct.iNamePrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Nightclub: $", iCouponPrice, " (iStylePrice:$", sNightclub_price_struct.iStylePrice, "+iLightingPrice:$", sNightclub_price_struct.iLightingPrice, "+iDancersPrice:$", sNightclub_price_struct.iDancersPrice, "+iDryIcePrice:$", sNightclub_price_struct.iDryIcePrice, "...") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Nightclub... iStoragePrice:$", sNightclub_price_struct.iStoragePrice, "+iGaragePrice:$", sNightclub_price_struct.iGaragePrice, "+iNamePrice:$", sNightclub_price_struct.iNamePrice, ")") ELIF IS_CATALOG_ITEM_A_HACKER_TRUCK_ITEM(iItemId) iCouponPrice = (sHacker_truck_price_struct.iCabPrice+sHacker_truck_price_struct.iDecalPrice+sHacker_truck_price_struct.iTintPrice+sHacker_truck_price_struct.iMissileLauncherPrice+sHacker_truck_price_struct.iDroneStationPrice+sHacker_truck_price_struct.iWeaShopPrice+sHacker_truck_price_struct.iVehShopPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Hacker Truck: $", iCouponPrice, " (iCabPrice:$", sHacker_truck_price_struct.iCabPrice, "+iDecalPrice:$", sHacker_truck_price_struct.iDecalPrice, "+iTintPrice:$", sHacker_truck_price_struct.iTintPrice, "...") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Hacker Truck... iMissileLauncherPrice:$", sHacker_truck_price_struct.iMissileLauncherPrice, "+iDroneStationPrice:$", sHacker_truck_price_struct.iDroneStationPrice, "+iWeaShopPrice:$", sHacker_truck_price_struct.iWeaShopPrice, "+iVehShopPrice:$", sHacker_truck_price_struct.iVehShopPrice, ")") #IF FEATURE_HEIST_ISLAND ELIF IS_CATALOG_ITEM_A_KOSATKA_ITEM(iItemId) iCouponPrice = (sKosatka_price_struct.iOwnedPrice+sKosatka_price_struct.iColourPrice+sKosatka_price_struct.iFlagPrice+sKosatka_price_struct.iSonarPrice+sKosatka_price_struct.iMissilesPrice+sKosatka_price_struct.iWeaShopPrice+sKosatka_price_struct.iAvisaPrice+sKosatka_price_struct.iSeaSparrow2Price) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Kosatka: $", iCouponPrice, " (sKosatka_price_struct.iOwnedPrice:$", sKosatka_price_struct.iOwnedPrice, "+sKosatka_price_struct.iColourPrice:$", sKosatka_price_struct.iColourPrice, "+sKosatka_price_struct.iFlagPrice:$", sKosatka_price_struct.iFlagPrice, "...") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Kosatka... sKosatka_price_struct.iSonarPrice:$", sKosatka_price_struct.iSonarPrice, "+sKosatka_price_struct.iMissilesPrice:$", sKosatka_price_struct.iMissilesPrice, "+sKosatka_price_struct.iWeaShopPrice:$", sKosatka_price_struct.iWeaShopPrice, "+sKosatka_price_struct.iAvisaPrice:$", sKosatka_price_struct.iAvisaPrice, ")") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Kosatka... sKosatka_price_struct.iSeaSparrow2Price$", sKosatka_price_struct.iSeaSparrow2Price) #ENDIF ELIF IS_CATALOG_ITEM_AN_ARENA_GARAGE_ITEM(iItemId) iCouponPrice += (sArena_garage_price_struct.iStylePrice+sArena_garage_price_struct.iGraphicsPrice+sArena_garage_price_struct.iColourPrice+sArena_garage_price_struct.iExpansionFloorB1Price+sArena_garage_price_struct.iExpansionFloorB2Price+sArena_garage_price_struct.iBennyMechanicPrice+sArena_garage_price_struct.iWeaponMechanicPrice+sArena_garage_price_struct.iPersonalQuartersPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Arena Garage: $", iCouponPrice, " (iStylePrice:$", sArena_garage_price_struct.iStylePrice, "+iGraphicsPrice:$", sArena_garage_price_struct.iGraphicsPrice, "+iColourPrice:$", sArena_garage_price_struct.iColourPrice, "+iExpansionFloorB1Price:$", sArena_garage_price_struct.iExpansionFloorB1Price, "+iExpansionFloorB2Price:$", sArena_garage_price_struct.iExpansionFloorB2Price, "...") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Arena Garage... iBennyMechanicPrice:$", sArena_garage_price_struct.iBennyMechanicPrice, "+iWeaponMechanicPrice:$", sArena_garage_price_struct.iWeaponMechanicPrice, "+iPersonalQuartersPrice:$", sArena_garage_price_struct.iPersonalQuartersPrice, ")") ELIF IS_CATALOG_ITEM_AN_CASINO_APT_ITEM(iItemId) iCouponPrice += (sCasino_apt_price_struct.iColourOptionPrice+sCasino_apt_price_struct.iStyleOptionPrice+sCasino_apt_price_struct.iLoungePrice+sCasino_apt_price_struct.iBarPrice+sCasino_apt_price_struct.iDealerPrice+sCasino_apt_price_struct.iBedroomPrice+sCasino_apt_price_struct.iMediaroomPrice+sCasino_apt_price_struct.iSpaPrice+sCasino_apt_price_struct.iOfficePrice+sCasino_apt_price_struct.iGaragePrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Casino Apt: $", iCouponPrice, " (iColourOptionPrice:$", sCasino_apt_price_struct.iColourOptionPrice, "+iStyleOptionPrice:$", sCasino_apt_price_struct.iStyleOptionPrice, "+iLoungePrice:$", sCasino_apt_price_struct.iLoungePrice, "+iBarPrice:$", sCasino_apt_price_struct.iBarPrice, "+iDealerPrice:$", sCasino_apt_price_struct.iDealerPrice, "...") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Casino Apt... iBennyMechanicPrice:$", sCasino_apt_price_struct.iBedroomPrice, "+iMediaroomPrice:$", sCasino_apt_price_struct.iMediaroomPrice, "+iSpaPrice:$", sCasino_apt_price_struct.iSpaPrice, "+iOfficePrice:$", sCasino_apt_price_struct.iOfficePrice, "+iGaragePrice:$", sCasino_apt_price_struct.iGaragePrice, ")") ELIF IS_CATALOG_ITEM_AN_ARCADE_ITEM(iItemId) iCouponPrice += (sArcade_price_struct.iFloorPrice + sArcade_price_struct.iCeilingPrice + sArcade_price_struct.iWallPrice + sArcade_price_struct.iPersonalQuartersPrice + sArcade_price_struct.iGaragePrice + sArcade_price_struct.iNeonLightsPrice + sArcade_price_struct.iScreensPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Arcade: $", iCouponPrice, " (iFloorPrice:$", sArcade_price_struct.iFloorPrice, "+iCeilingPrice:$", sArcade_price_struct.iCeilingPrice, "+iWallPrice:$", sArcade_price_struct.iWallPrice, "...") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Arcade... iPersonalQuartersPrice:$", sArcade_price_struct.iPersonalQuartersPrice, "+iGaragePrice:$", sArcade_price_struct.iGaragePrice, "+iNeonLightsPrice:$", sArcade_price_struct.iNeonLightsPrice, "+iScreensPrice:$", sArcade_price_struct.iScreensPrice, ")") ELIF IS_CATALOG_ITEM_AN_AUTO_SHOP_ITEM(iItemId) iCouponPrice += (sAutoShop_price_struct.iWallPrice + sAutoShop_price_struct.iTintPrice + sAutoShop_price_struct.iEmblemPrice + sAutoShop_price_struct.iCrewNamePrice + sAutoShop_price_struct.iStaff1Price + sAutoShop_price_struct.iStaff2Price + sAutoShop_price_struct.iCarLiftPrice + sAutoShop_price_struct.iPersonalQuartersPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Auto Shop: $", iCouponPrice, "+iWallPrice:$", sAutoShop_price_struct.iWallPrice, "+iStaff1Price:$", sAutoShop_price_struct.iStaff1Price, "...") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Auto Shop... iTintPrice:$", sAutoShop_price_struct.iTintPrice, "+iEmblemPrice:$", sAutoShop_price_struct.iEmblemPrice, "+iCrewNamePrice:$", sAutoShop_price_struct.iCrewNamePrice, ")") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Auto Shop... iStaff2Price:$", sAutoShop_price_struct.iStaff2Price, "+iCarLiftPrice:$", sAutoShop_price_struct.iCarLiftPrice, "+iPersonalQuartersPrice:$", sAutoShop_price_struct.iPersonalQuartersPrice, ")") #IF FEATURE_FIXER ELIF IS_CATALOG_ITEM_A_FIXER_HQ_ITEM(iItemId) iCouponPrice += (sFixerHQ_price_struct.iArtPrice + sFixerHQ_price_struct.iWallpaperPrice + sFixerHQ_price_struct.iTintPrice + sFixerHQ_price_struct.iVehWorkshopPrice + sFixerHQ_price_struct.iArmoryPrice + sFixerHQ_price_struct.iPersonalQuartersPrice) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Fixer HQ: $", iCouponPrice, "+iArtPrice:$", sFixerHQ_price_struct.iArtPrice, "+iWallpaperPrice:$", sFixerHQ_price_struct.iWallpaperPrice, "...") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Fixer HQ... iTintPrice:$", sFixerHQ_price_struct.iTintPrice, "+iVehWorkshopPrice:$", sFixerHQ_price_struct.iVehWorkshopPrice, "+iArmoryPrice:$", sFixerHQ_price_struct.iArmoryPrice, ")") CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Fixer HQ... iPersonalQuartersPrice:$", sFixerHQ_price_struct.iPersonalQuartersPrice, ")") #ENDIF ELSE CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Other: $", iCouponPrice) ENDIF bCouponPriceZero = FALSE IF iSellingItemId != 0 IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) iCouponPrice -= iSellingPrice CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Selling: $", iCouponPrice, ", iSellingPrice $", iSellingPrice) ENDIF IF iCouponPrice < 0 IF (eCategory = CATEGORY_INVENTORY_PROPERTIE OR eCategory = CATEGORY_INVENTORY_WAREHOUSE) IF IS_CATALOG_ITEM_A_CLUBHOUSE_PROPERTY_ITEM(iItemId) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Selling Clubhouse, dont reduce: $", iCouponPrice) ELIF IS_CATALOG_ITEM_AN_APARTMENT_OR_GARAGE(iItemId) CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Selling Apt or Garage, dont reduce: $", iCouponPrice) ELSE iCouponPrice = 0 bCouponPriceZero = TRUE CDEBUG1LN(DEBUG_INTERNET, "[BASKET] iCouponPrice Selling Reduced: $", iCouponPrice) ENDIF ENDIF ENDIF ENDIF IF iDoCouponHash != 0 SWITCH iDoCouponHash CASE HASH("PM_COUPON_CAR_SITE") iCouponPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE HASH("PM_COUPON_PLANE_SITE") iCouponPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE HASH("PM_COUPON_MIL_SITE") iCouponPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE HASH("PO_COUPON_CAR_XMAS2017") iCouponPrice = 0 bCouponPriceZero = TRUE BREAK CASE HASH("PO_COUPON_CAR_XMAS2018") iCouponPrice = 0 bCouponPriceZero = TRUE BREAK CASE HASH("PO_COUPON_HELI_XMAS2018") iCouponPrice = 0 bCouponPriceZero = TRUE BREAK CASE HASH("PO_COUPON_CAR2_XMAS2018") iCouponPrice = 0 bCouponPriceZero = TRUE BREAK CASE HASH("PM_COUPON_CASINO_PLANE_SITE") iCouponPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE HASH("PM_COUPON_CASINO_BOAT_SITE") iCouponPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE HASH("PM_COUPON_CASINO_CAR_SITE") iCouponPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE HASH("PM_COUPON_CASINO_CAR_SITE2") iCouponPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE HASH("PM_COUPON_CASINO_MIL_SITE") iCouponPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE HASH("PM_COUPON_CASINO_BIKE_SITE") iCouponPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "[BASKET] unknown coupon hash ", iDoCouponHash, " for temp price") BREAK ENDSWITCH ENDIF // Override the players cash. INT iWalletAmount, iBankAmount IF NOT bBypassFakeCash INT iTempPrice iWalletAmount = 0 iBankAmount = 0 iTempPrice = iCouponPrice // Bank first IF (NETWORK_GET_VC_BANK_BALANCE() > 0) IF NETWORK_GET_VC_BANK_BALANCE() >= iTempPrice iBankAmount = iTempPrice ELSE iBankAmount = iTempPrice-(iTempPrice-NETWORK_GET_VC_BANK_BALANCE()) ENDIF iTempPrice -= iBankAmount ENDIF IF iTempPrice > 0 IF (NETWORK_GET_VC_WALLET_BALANCE() > 0) IF NETWORK_GET_VC_WALLET_BALANCE() >= iTempPrice iWalletAmount = iTempPrice ELSE iWalletAmount = iTempPrice-(iTempPrice-NETWORK_GET_VC_WALLET_BALANCE()) ENDIF iTempPrice -= iWalletAmount ENDIF ENDIF IF iTempPrice > 0 CASSERTLN(DEBUG_INTERNET, "[BASKET] PROCESSING_INTERNET_SHOPPING_BASKET - Player can't afford this item! iTempPrice=", iTempPrice, ", iWalletAmount=", iWalletAmount, ", iBankAmount=", iBankAmount) ELSE CDEBUG1LN(DEBUG_INTERNET, "[BASKET] PROCESSING_INTERNET_SHOPPING_BASKET - Player can afford this item... iTempPrice=", iTempPrice, ", iWalletAmount=", iWalletAmount, ", iBankAmount=", iBankAmount, " (iCouponPrice=", iCouponPrice, ")") ENDIF ELSE CDEBUG1LN(DEBUG_INTERNET, "[BASKET] PROCESSING_INTERNET_SHOPPING_BASKET - bypass fake cash (iCouponPrice=", iCouponPrice, ")") iWalletAmount = 0 iBankAmount = 0 ENDIF IF eCategory = CATEGORY_INVENTORY_PROPERTIE IF IS_CATALOG_ITEM_AN_OFFICE_PROPERTY_ITEM(iItemId) INT g_sOfficeDataStruct_iOfficeNameID g_sOfficeDataStruct_iOfficeNameID = g_sOfficeDataStruct.iOfficeNameID INT g_sOfficeDataStruct_iStyle, g_sOfficeDataStruct_iPersonnel, g_sOfficeDataStruct_iFont, g_sOfficeDataStruct_iColour, g_sOfficeDataStruct_iGunLocker, g_sOfficeDataStruct_iVault, g_sOfficeDataStruct_iAccommodation INT g_sOfficeDataStruct_iGarage1Style, g_sOfficeDataStruct_iGarage1Lighting, g_sOfficeDataStruct_iGarage1Number, g_sOfficeDataStruct_iGarage2Style, g_sOfficeDataStruct_iGarage2Lighting, g_sOfficeDataStruct_iGarage2Number, g_sOfficeDataStruct_iGarage3Style, g_sOfficeDataStruct_iGarage3Lighting, g_sOfficeDataStruct_iGarage3Number, g_sOfficeDataStruct_iModshop GET_SCALEFORM_OFFICE_DATA(g_sOfficeDataStruct_iStyle, g_sOfficeDataStruct_iPersonnel, g_sOfficeDataStruct_iFont, g_sOfficeDataStruct_iColour, g_sOfficeDataStruct_iGunLocker, g_sOfficeDataStruct_iVault, g_sOfficeDataStruct_iAccommodation, g_sOfficeDataStruct_iGarage1Style, g_sOfficeDataStruct_iGarage1Lighting, g_sOfficeDataStruct_iGarage1Number, g_sOfficeDataStruct_iGarage2Style, g_sOfficeDataStruct_iGarage2Lighting, g_sOfficeDataStruct_iGarage2Number, g_sOfficeDataStruct_iGarage3Style, g_sOfficeDataStruct_iGarage3Lighting, g_sOfficeDataStruct_iGarage3Number, g_sOfficeDataStruct_iModshop) g_sOfficeDataStruct_iStyle -= 1 IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) // CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new office property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iStyle = ", g_sOfficeDataStruct_iStyle) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStylePrice = ", sOffice_price_struct.iStylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iPersonnel = ", g_sOfficeDataStruct_iPersonnel) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonnelPrice = ", sOffice_price_struct.iPersonnelPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iOfficeNameID = ", g_sOfficeDataStruct_iOfficeNameID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iNamePrice = ", sOffice_price_struct.iNamePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iFont = ", g_sOfficeDataStruct_iFont) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFontPrice = ", sOffice_price_struct.iFontPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iColour = ", g_sOfficeDataStruct_iColour) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourPrice = ", sOffice_price_struct.iColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGunLocker = ", g_sOfficeDataStruct_iGunLocker) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGunLockerPrice = ", sOffice_price_struct.iGunLockerPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iVault = ", g_sOfficeDataStruct_iVault) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iVaultPrice = ", sOffice_price_struct.iVaultPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iAccommodation = ", g_sOfficeDataStruct_iAccommodation) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iAccommodationPrice = ", sOffice_price_struct.iAccommodationPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iModshop = ", g_sOfficeDataStruct_iModshop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iModshopPrice = ", sOffice_price_struct.iModshopPrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // new office property we are trading in. IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new office property 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) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new office property iSellingItemId ", iSellingItemId) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add selling item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ENDIF IF (NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemInteriorID, eAction, 1, 0, 0, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryInteriorID)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new office property iItemInteriorID ", iItemInteriorID) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add interior item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new office property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add new office property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CDEBUG1LN(DEBUG_INTERNET, "[BASKET] - Ignore new office property coupon hash ", iDoCouponHash) ENDIF IF ADD_OFFICE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sOfficeDataStruct_iStyle, sOffice_price_struct.iStylePrice, g_sOfficeDataStruct_iPersonnel, sOffice_price_struct.iPersonnelPrice, g_sOfficeDataStruct_iOfficeNameID, sOffice_price_struct.iNamePrice, g_sOfficeDataStruct_iFont, sOffice_price_struct.iFontPrice, g_sOfficeDataStruct_iColour, sOffice_price_struct.iColourPrice, g_sOfficeDataStruct_iGunLocker, sOffice_price_struct.iGunLockerPrice, g_sOfficeDataStruct_iVault, sOffice_price_struct.iVaultPrice, g_sOfficeDataStruct_iAccommodation, sOffice_price_struct.iAccommodationPrice, // g_sOfficeDataStruct_iGarage1, sOffice_price_struct.iGarage1Price, // g_sOfficeDataStruct_iGarage2, sOffice_price_struct.iGarage2Price, // g_sOfficeDataStruct_iGarage3, sOffice_price_struct.iGarage3Price, g_sOfficeDataStruct_iModshop, sOffice_price_struct.iModshopPrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New office failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start office basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add office item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding office property upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iStyle = ", g_sOfficeDataStruct_iStyle) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStylePrice = ", sOffice_price_struct.iStylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iPersonnel = ", g_sOfficeDataStruct_iPersonnel) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonnelPrice = ", sOffice_price_struct.iPersonnelPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iOfficeNameID = ", g_sOfficeDataStruct_iOfficeNameID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iNamePrice = ", sOffice_price_struct.iNamePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iFont = ", g_sOfficeDataStruct_iFont) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFontPrice = ", sOffice_price_struct.iFontPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iColour = ", g_sOfficeDataStruct_iColour) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourPrice = ", sOffice_price_struct.iColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGunLocker = ", g_sOfficeDataStruct_iGunLocker) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGunLockerPrice = ", sOffice_price_struct.iGunLockerPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iVault = ", g_sOfficeDataStruct_iVault) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iVaultPrice = ", sOffice_price_struct.iVaultPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iAccommodation = ", g_sOfficeDataStruct_iAccommodation) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iAccommodationPrice = ", sOffice_price_struct.iAccommodationPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iModshop = ", g_sOfficeDataStruct_iModshop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iModshopPrice = ", sOffice_price_struct.iModshopPrice) IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added office property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add office property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore office property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_OFFICE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sOfficeDataStruct_iStyle, sOffice_price_struct.iStylePrice, g_sOfficeDataStruct_iPersonnel, sOffice_price_struct.iPersonnelPrice, g_sOfficeDataStruct_iOfficeNameID, sOffice_price_struct.iNamePrice, g_sOfficeDataStruct_iFont, sOffice_price_struct.iFontPrice, g_sOfficeDataStruct_iColour, sOffice_price_struct.iColourPrice, g_sOfficeDataStruct_iGunLocker, sOffice_price_struct.iGunLockerPrice, g_sOfficeDataStruct_iVault, sOffice_price_struct.iVaultPrice, g_sOfficeDataStruct_iAccommodation, sOffice_price_struct.iAccommodationPrice, g_sOfficeDataStruct_iModshop, sOffice_price_struct.iModshopPrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New office failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start office basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF ELIF IS_CATALOG_ITEM_A_CLUBHOUSE_PROPERTY_ITEM(iItemId) INT g_sClubhouseDataStruct_iClubhouseNameID g_sClubhouseDataStruct_iClubhouseNameID = g_sClubhouseDataStruct.iClubhouseNameID INT g_sClubhouseDataStruct_iWall, g_sClubhouseDataStruct_iHanging, g_sClubhouseDataStruct_iFurniture, g_sClubhouseDataStruct_iColour, g_sClubhouseDataStruct_iFont, g_sClubhouseDataStruct_iFontColour, g_sClubhouseDataStruct_iEmblem, g_sClubhouseDataStruct_iHideSinage, g_sClubhouseDataStruct_iGunLocker, g_sClubhouseDataStruct_iGarage GET_SCALEFORM_CLUBHOUSE_DATA(GET_CLUBHOUSE_ITEM_FROM_CATALOG_ITEM(iItemID), g_sClubhouseDataStruct_iWall, g_sClubhouseDataStruct_iHanging, g_sClubhouseDataStruct_iFurniture, g_sClubhouseDataStruct_iColour, g_sClubhouseDataStruct_iFont, g_sClubhouseDataStruct_iFontColour, g_sClubhouseDataStruct_iEmblem, g_sClubhouseDataStruct_iHideSinage, g_sClubhouseDataStruct_iGunLocker, g_sClubhouseDataStruct_iGarage) g_sClubhouseDataStruct_iColour = GET_ACTIONSCRIPT_PARAM(GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA), 9, 4) IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) // CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new Clubhouse property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iColour = ", g_sClubhouseDataStruct_iColour) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStylePrice = ", sClubhouse_price_struct.iStylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iClubhouseNameID = ", g_sClubhouseDataStruct_iClubhouseNameID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iNamePrice = ", sClubhouse_price_struct.iNamePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iFont = ", g_sClubhouseDataStruct_iFont) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFontPrice = ", sClubhouse_price_struct.iFontPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iFontColour = ", g_sClubhouseDataStruct_iFontColour) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFontColourPrice = ", sClubhouse_price_struct.iFontColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iHideSignage = ", g_sClubhouseDataStruct_iHideSinage) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iHideSignageColourPrice = ", sClubhouse_price_struct.iHideSignagePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iEmblem = ", g_sClubhouseDataStruct_iEmblem) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iEmblemPrice = ", sClubhouse_price_struct.iEmblemPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iGunLocker = ", g_sClubhouseDataStruct_iGunLocker) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGunLockerPrice = ", sClubhouse_price_struct.iGunLockerPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iGarage = ", g_sClubhouseDataStruct_iGarage) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGaragePrice = ", sClubhouse_price_struct.iGaragePrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // new Clubhouse property we are trading in. IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new Clubhouse property 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 (NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemInteriorID, eAction, 1, 0, 0, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryInteriorID)) // // // ELSE // CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add interior item to basket") // iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED // RETURN TRUE // ENDIF IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new Clubhouse property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add new Clubhouse property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore new Clubhouse property coupon hash ", iDoCouponHash) ENDIF IF ADD_CLUBHOUSE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sClubhouseDataStruct_iWall, sClubhouse_price_struct.iWallPrice, g_sClubhouseDataStruct_iHanging, sClubhouse_price_struct.iHangingPrice, g_sClubhouseDataStruct_iFurniture, sClubhouse_price_struct.iFurniturePrice, g_sClubhouseDataStruct_iColour, sClubhouse_price_struct.iStylePrice, g_sClubhouseDataStruct_iClubhouseNameID, sClubhouse_price_struct.iNamePrice, g_sClubhouseDataStruct_iFont, sClubhouse_price_struct.iFontPrice, g_sClubhouseDataStruct_iFontColour, sClubhouse_price_struct.iFontColourPrice, g_sClubhouseDataStruct_iHideSinage, sClubhouse_price_struct.iHideSignagePrice, g_sClubhouseDataStruct_iEmblem, sClubhouse_price_struct.iEmblemPrice, g_sClubhouseDataStruct_iGunLocker, sClubhouse_price_struct.iGunLockerPrice, g_sClubhouseDataStruct_iGarage, sClubhouse_price_struct.iGaragePrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New Clubhouse failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start clubhouse basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add clubhouse item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding Clubhouse property upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iColour = ", g_sClubhouseDataStruct_iColour) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStylePrice = ", sClubhouse_price_struct.iStylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iClubhouseNameID = ", g_sClubhouseDataStruct_iClubhouseNameID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iNamePrice = ", sClubhouse_price_struct.iNamePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iFont = ", g_sClubhouseDataStruct_iFont) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFontPrice = ", sClubhouse_price_struct.iFontPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iFontColour = ", g_sClubhouseDataStruct_iFontColour) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFontColourPrice = ", sClubhouse_price_struct.iFontColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iHideSignage = ", g_sClubhouseDataStruct_iHideSinage) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iHideSignageColourPrice = ", sClubhouse_price_struct.iHideSignagePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iEmblem = ", g_sClubhouseDataStruct_iEmblem) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iEmblemPrice = ", sClubhouse_price_struct.iEmblemPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iGunLocker = ", g_sClubhouseDataStruct_iGunLocker) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGunLockerPrice = ", sClubhouse_price_struct.iGunLockerPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sClubhouseDataStruct_iGarage = ", g_sClubhouseDataStruct_iGarage) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGaragePrice = ", sClubhouse_price_struct.iGaragePrice) IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added Clubhouse property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add Clubhouse property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore Clubhouse property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_CLUBHOUSE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sClubhouseDataStruct_iWall, sClubhouse_price_struct.iWallPrice, g_sClubhouseDataStruct_iHanging, sClubhouse_price_struct.iHangingPrice, g_sClubhouseDataStruct_iFurniture, sClubhouse_price_struct.iFurniturePrice, g_sClubhouseDataStruct_iColour, sClubhouse_price_struct.iStylePrice, g_sClubhouseDataStruct_iClubhouseNameID, sClubhouse_price_struct.iNamePrice, g_sClubhouseDataStruct_iFont, sClubhouse_price_struct.iFontPrice, g_sClubhouseDataStruct_iFontColour, sClubhouse_price_struct.iFontColourPrice, g_sClubhouseDataStruct_iHideSinage, sClubhouse_price_struct.iHideSignagePrice, g_sClubhouseDataStruct_iEmblem, sClubhouse_price_struct.iEmblemPrice, g_sClubhouseDataStruct_iGunLocker, sClubhouse_price_struct.iGunLockerPrice, g_sClubhouseDataStruct_iGarage, sClubhouse_price_struct.iGaragePrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New Clubhouse failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start clubhouse basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF ELIF IS_CATALOG_ITEM_AN_OFFICE_GARAGE_PROPERTY_ITEM(iItemId) INT g_sOfficeDataStruct_iStyle, g_sOfficeDataStruct_iPersonnel, g_sOfficeDataStruct_iFont, g_sOfficeDataStruct_iColour, g_sOfficeDataStruct_iGunLocker, g_sOfficeDataStruct_iVault, g_sOfficeDataStruct_iAccommodation INT g_sOfficeDataStruct_iGarage1Style, g_sOfficeDataStruct_iGarage1Lighting, g_sOfficeDataStruct_iGarage1Number, g_sOfficeDataStruct_iGarage2Style, g_sOfficeDataStruct_iGarage2Lighting, g_sOfficeDataStruct_iGarage2Number, g_sOfficeDataStruct_iGarage3Style, g_sOfficeDataStruct_iGarage3Lighting, g_sOfficeDataStruct_iGarage3Number, g_sOfficeDataStruct_iModshop GET_SCALEFORM_OFFICE_DATA(g_sOfficeDataStruct_iStyle, g_sOfficeDataStruct_iPersonnel, g_sOfficeDataStruct_iFont, g_sOfficeDataStruct_iColour, g_sOfficeDataStruct_iGunLocker, g_sOfficeDataStruct_iVault, g_sOfficeDataStruct_iAccommodation, g_sOfficeDataStruct_iGarage1Style, g_sOfficeDataStruct_iGarage1Lighting, g_sOfficeDataStruct_iGarage1Number, g_sOfficeDataStruct_iGarage2Style, g_sOfficeDataStruct_iGarage2Lighting, g_sOfficeDataStruct_iGarage2Number, g_sOfficeDataStruct_iGarage3Style, g_sOfficeDataStruct_iGarage3Lighting, g_sOfficeDataStruct_iGarage3Number, g_sOfficeDataStruct_iModshop) g_sOfficeDataStruct_iGarage1Style -= 1 g_sOfficeDataStruct_iGarage2Style -= 1 g_sOfficeDataStruct_iGarage3Style -= 1 IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) // CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new office garage property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) IF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL1) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage1Style = ", g_sOfficeDataStruct_iGarage1Style) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage1StylePrice = ", sOffice_price_struct.iGarage1StylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage1Lighting = ", g_sOfficeDataStruct_iGarage1Lighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage1LightingPrice = ", sOffice_price_struct.iGarage1LightingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage1Number = ", g_sOfficeDataStruct_iGarage1Number) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage1NumberPrice = ", sOffice_price_struct.iGarage1NumberPrice) ENDIF IF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL2) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage2Style = ", g_sOfficeDataStruct_iGarage2Style) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage2StylePrice = ", sOffice_price_struct.iGarage2StylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage2Lighting = ", g_sOfficeDataStruct_iGarage2Lighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage2LightingPrice = ", sOffice_price_struct.iGarage2LightingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage2Number = ", g_sOfficeDataStruct_iGarage2Number) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage2NumberPrice = ", sOffice_price_struct.iGarage2NumberPrice) ENDIF IF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL3) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage3Style = ", g_sOfficeDataStruct_iGarage3Style) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage3StylePrice = ", sOffice_price_struct.iGarage3StylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage3Lighting = ", g_sOfficeDataStruct_iGarage3Lighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage3LightingPrice = ", sOffice_price_struct.iGarage3LightingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage3Number = ", g_sOfficeDataStruct_iGarage3Number) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage3NumberPrice = ", sOffice_price_struct.iGarage3NumberPrice) ENDIF IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // new office garage property we are trading in. IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new office garage property 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 INT iCost iCost = 0 IF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL1) iCost = sOffice_price_struct.iGarage1StylePrice ENDIF IF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL2) iCost = sOffice_price_struct.iGarage2StylePrice ENDIF IF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL3) iCost = sOffice_price_struct.iGarage3StylePrice ENDIF IF (NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemInteriorID, eAction, 1, iCost, 0, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryInteriorID)) // ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add office garage interior item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new office garage property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add new office garage property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore new office garage property coupon hash ", iDoCouponHash) ENDIF IF ADD_OFFICE_GARAGE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, FALSE, g_sOfficeDataStruct_iGarage1Style, sOffice_price_struct.iGarage1StylePrice, g_sOfficeDataStruct_iGarage1Lighting, sOffice_price_struct.iGarage1LightingPrice, g_sOfficeDataStruct_iGarage1Number, sOffice_price_struct.iGarage1NumberPrice, g_sOfficeDataStruct_iGarage2Style, sOffice_price_struct.iGarage2StylePrice, g_sOfficeDataStruct_iGarage2Lighting, sOffice_price_struct.iGarage2LightingPrice, g_sOfficeDataStruct_iGarage2Number, sOffice_price_struct.iGarage2NumberPrice, g_sOfficeDataStruct_iGarage3Style, sOffice_price_struct.iGarage3StylePrice, g_sOfficeDataStruct_iGarage3Lighting, sOffice_price_struct.iGarage3LightingPrice, g_sOfficeDataStruct_iGarage3Number, sOffice_price_struct.iGarage3NumberPrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New office garage failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start office garage basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add office garage item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding office garage property upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) IF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL1) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage1Style = ", g_sOfficeDataStruct_iGarage1Style) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage1StylePrice = ", sOffice_price_struct.iGarage1StylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage1Lighting = ", g_sOfficeDataStruct_iGarage1Lighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage1LightingPrice = ", sOffice_price_struct.iGarage1LightingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage1Number = ", g_sOfficeDataStruct_iGarage1Number) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage1NumberPrice = ", sOffice_price_struct.iGarage1NumberPrice) ENDIF IF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL2) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage2Style = ", g_sOfficeDataStruct_iGarage2Style) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage2StylePrice = ", sOffice_price_struct.iGarage2StylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage2Lighting = ", g_sOfficeDataStruct_iGarage2Lighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage2LightingPrice = ", sOffice_price_struct.iGarage2LightingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage2Number = ", g_sOfficeDataStruct_iGarage2Number) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage2NumberPrice = ", sOffice_price_struct.iGarage2NumberPrice) ENDIF IF (GET_OFFICE_GARAGE_ITEM_FROM_CATALOG_ITEM(iItemID) = PROPERTY_OFFICE_1_GARAGE_LVL3) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage3Style = ", g_sOfficeDataStruct_iGarage3Style) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage3StylePrice = ", sOffice_price_struct.iGarage3StylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage3Lighting = ", g_sOfficeDataStruct_iGarage3Lighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage3LightingPrice = ", sOffice_price_struct.iGarage3LightingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sOfficeDataStruct_iGarage3Number = ", g_sOfficeDataStruct_iGarage3Number) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGarage3NumberPrice = ", sOffice_price_struct.iGarage3NumberPrice) ENDIF IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added office garage property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add office garage property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore office garage property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_OFFICE_GARAGE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, TRUE, g_sOfficeDataStruct_iGarage1Style, sOffice_price_struct.iGarage1StylePrice, g_sOfficeDataStruct_iGarage1Lighting, sOffice_price_struct.iGarage1LightingPrice, g_sOfficeDataStruct_iGarage1Number, sOffice_price_struct.iGarage1NumberPrice, g_sOfficeDataStruct_iGarage2Style, sOffice_price_struct.iGarage2StylePrice, g_sOfficeDataStruct_iGarage2Lighting, sOffice_price_struct.iGarage2LightingPrice, g_sOfficeDataStruct_iGarage2Number, sOffice_price_struct.iGarage2NumberPrice, g_sOfficeDataStruct_iGarage3Style, sOffice_price_struct.iGarage3StylePrice, g_sOfficeDataStruct_iGarage3Lighting, sOffice_price_struct.iGarage3LightingPrice, g_sOfficeDataStruct_iGarage3Number, sOffice_price_struct.iGarage3NumberPrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New office garage failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start office garage basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) AND (NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemInteriorID, eAction, 1, 0, 0, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryInteriorID)) // Property we are trading in. IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade property 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 iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore property coupon hash ", iDoCouponHash) ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start property basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add property item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF // YACHTS ELIF eCategory = CATEGORY_INVENTORY_VEHICLE AND IS_CATALOG_ITEM_A_YACHT_ITEM(iItemId) IF GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_YACHT_MODEL_0) = 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new yacht 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) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iMod = ", g_sYachtDataStruct.iMod) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iModPrice = ", iYachtModPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iLighting = ", g_sYachtDataStruct.iLighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iLightingPrice = ", iYachtLightingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iFixture = ", g_sYachtDataStruct.iFixture) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFixturePrice = ", iYachtFixturePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iFlag = ", g_sYachtDataStruct.iFlag) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFlagPrice = ", iYachtFlagPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iColour = ", g_sYachtDataStruct.iColour) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourPrice = ", iYachtColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iNamePrice = ", iYachtNamePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iYachtNameID = ", g_sYachtDataStruct.iYachtNameID) // vehicle = 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, GET_VEHICLE_INVENTORY_ITEM_FROM_PEGASUS_ITEM(iItemID), eAction, 1, 0, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // add all the yacht mods. IF ADD_YACHT_MODS_TO_BASKET(0, eCategory, g_sYachtDataStruct.iMod, iYachtModPrice, g_sYachtDataStruct.iLighting, iYachtLightingPrice, g_sYachtDataStruct.iFixture, iYachtFixturePrice, g_sYachtDataStruct.iFlag, iYachtFlagPrice, g_sYachtDataStruct.iColour, iYachtColourPrice, g_sYachtDataStruct.iYachtNameID, iYachtNamePrice) IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - New yacht Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - New yacht CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New yacht failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New yacht failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new yacht to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding yacht update to basket eCategory:", GET_SHOP_ITEM_CATEGORIES_DEBUG_STRING(CATEGORY_INVENTORY_VEHICLE_MOD), ", eAction:", GET_CASH_TRANSACTION_ACTION_TYPE_DEBUG_STRING(eAction), ", iPrice:$", iPrice, ", iItemId:", iItemId, ", iInventoryKey:", iInventoryKey) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iMod = ", g_sYachtDataStruct.iMod) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iModPrice = ", iYachtModPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iLighting = ", g_sYachtDataStruct.iLighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iLightingPrice = ", iYachtLightingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iFixture = ", g_sYachtDataStruct.iFixture) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFixturePrice = ", iYachtFixturePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iFlag = ", g_sYachtDataStruct.iFlag) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFlagPrice = ", iYachtFlagPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iColour = ", g_sYachtDataStruct.iColour) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourPrice = ", iYachtColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iNamePrice = ", iYachtNamePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sYachtDataStruct.iYachtNameID = ", g_sYachtDataStruct.iYachtNameID) // add all the yacht mods. IF ADD_YACHT_MODS_TO_BASKET(0, CATEGORY_INVENTORY_VEHICLE_MOD, g_sYachtDataStruct.iMod, iYachtModPrice, g_sYachtDataStruct.iLighting, iYachtLightingPrice, g_sYachtDataStruct.iFixture, iYachtFixturePrice, g_sYachtDataStruct.iFlag, iYachtFlagPrice, g_sYachtDataStruct.iColour, iYachtColourPrice, g_sYachtDataStruct.iYachtNameID, iYachtNamePrice) IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Yacht update Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - Yacht update CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Yacht update failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Yacht update failed to add mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF // TRUCKS ELIF eCategory = CATEGORY_INVENTORY_VEHICLE AND IS_CATALOG_ITEM_A_TRUCK_ITEM(iItemId) ARMORY_TRUCK_SECTION_TYPE_ENUM eSection1, eSection2, eSection3 eSection1 = INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection1)) eSection2 = INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection2)) eSection3 = INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection3)) VALIDATE_TRUCK_EMPTY_SECTIONS(eSection1, eSection2, eSection3) IF GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_TRUCK_MODEL_0) = 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new truck 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) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sTruckDataStruct.iCab = ", g_sTruckDataStruct.iCab, ", eCab = ", GET_MODEL_NAME_FOR_DEBUG(INT_TO_ENUM(MODEL_NAMES, GET_TRUCK_CAB_FROM_SF(g_sTruckDataStruct.iCab)))) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCabPrice = ", sTruck_price_struct.iCabPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sTruckDataStruct.iSection1 = ", g_sTruckDataStruct.iSection1, ", eSection1 = ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection1)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSection1Price = ", sTruck_price_struct.iSection1Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sTruckDataStruct.iSection2 = ", g_sTruckDataStruct.iSection2, ", eSection2 = ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection2)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSection2Price = ", sTruck_price_struct.iSection2Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sTruckDataStruct.iSection3 = ", g_sTruckDataStruct.iSection3, ", eSection3 = ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection3)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSection3Price = ", sTruck_price_struct.iSection3Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sTruckDataStruct.iColour = ", g_sTruckDataStruct.iColour, ", eColour = ", GET_ARMORY_TRUCK_SECTION_TINT_NAME(INT_TO_ENUM(ARMORY_TRUCK_SECTION_TINT_ENUM, GET_TRUCK_SECTION_TINT_FROM_SF(g_sTruckDataStruct.iColour)))) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourPrice = ", sTruck_price_struct.iColourPrice) // vehicle = 0 // IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, GET_VEHICLE_INVENTORY_ITEM_FROM_PEGASUS_ITEM(iItemID), eAction, 1, 0, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // add all the truck mods. IF ADD_TRUCK_MODS_TO_BASKET(0, eCategory, GET_TRUCK_CAB_FROM_SF(g_sTruckDataStruct.iCab), sTruck_price_struct.iCabPrice, ENUM_TO_INT(eSection1), sTruck_price_struct.iSection1Price, ENUM_TO_INT(eSection2), sTruck_price_struct.iSection2Price, ENUM_TO_INT(eSection3), sTruck_price_struct.iSection3Price, GET_TRUCK_SECTION_TINT_FROM_SF(g_sTruckDataStruct.iColour), sTruck_price_struct.iColourPrice) IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - New truck Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - New truck CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New truck failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New truck failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF // ELSE // CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new truck to basket") // iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED // ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding truck update to basket eCategory:", GET_SHOP_ITEM_CATEGORIES_DEBUG_STRING(CATEGORY_INVENTORY_VEHICLE_MOD), ", eAction:", GET_CASH_TRANSACTION_ACTION_TYPE_DEBUG_STRING(eAction), ", iPrice:$", iPrice, ", iItemId:", iItemId, ", iInventoryKey:", iInventoryKey) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sTruckDataStruct.iCab = ", g_sTruckDataStruct.iCab, ", eCab = ", GET_MODEL_NAME_FOR_DEBUG(INT_TO_ENUM(MODEL_NAMES, GET_TRUCK_CAB_FROM_SF(g_sTruckDataStruct.iCab)))) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCabPrice = ", sTruck_price_struct.iCabPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sTruckDataStruct.iSection1 = ", g_sTruckDataStruct.iSection1, ", eSection1 = ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection1)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSection1Price = ", sTruck_price_struct.iSection1Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sTruckDataStruct.iSection2 = ", g_sTruckDataStruct.iSection2, ", eSection2 = ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection2)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSection2Price = ", sTruck_price_struct.iSection2Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sTruckDataStruct.iSection3 = ", g_sTruckDataStruct.iSection3, ", eSection3 = ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection3)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSection3Price = ", sTruck_price_struct.iSection3Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sTruckDataStruct.iColour = ", g_sTruckDataStruct.iColour, ", eColour = ", GET_ARMORY_TRUCK_SECTION_TINT_NAME(INT_TO_ENUM(ARMORY_TRUCK_SECTION_TINT_ENUM, GET_TRUCK_SECTION_TINT_FROM_SF(g_sTruckDataStruct.iColour)))) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourPrice = ", sTruck_price_struct.iColourPrice) // add all the truck mods. IF ADD_TRUCK_MODS_TO_BASKET(0, eCategory, GET_TRUCK_CAB_FROM_SF(g_sTruckDataStruct.iCab), sTruck_price_struct.iCabPrice, ENUM_TO_INT(eSection1), sTruck_price_struct.iSection1Price, ENUM_TO_INT(eSection2), sTruck_price_struct.iSection2Price, ENUM_TO_INT(eSection3), sTruck_price_struct.iSection3Price, GET_TRUCK_SECTION_TINT_FROM_SF(g_sTruckDataStruct.iColour), sTruck_price_struct.iColourPrice) IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - truck update Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - truck update CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - truck update failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - truck update failed to add mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELIF eCategory = CATEGORY_INVENTORY_VEHICLE AND IS_CATALOG_ITEM_A_PLANE_ITEM(iItemId) IF GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_PLANE_MODEL_0) = 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new plane 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) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sPlaneDataStruct.iGunTurret = ", g_sPlaneDataStruct.iGunTurret) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGunTurretPrice = ", sPlane_price_struct.iGunTurretPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sPlaneDataStruct.iVehShop = ", g_sPlaneDataStruct.iVehShop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iVehShopPrice = ", sPlane_price_struct.iVehShopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sPlaneDataStruct.iWeaShop = ", g_sPlaneDataStruct.iWeaShop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWeaShopPrice = ", sPlane_price_struct.iWeaShopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sPlaneDataStruct.iInterior = ", g_sPlaneDataStruct.iInterior) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iInteriorPrice = ", sPlane_price_struct.iInteriorPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sPlaneDataStruct.iAvenger = ", g_sPlaneDataStruct.iAvenger) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iAvengerPrice = ", sPlane_price_struct.iAvengerPrice) // vehicle = 0 // IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, GET_VEHICLE_INVENTORY_ITEM_FROM_PEGASUS_ITEM(iItemID), eAction, 1, 0, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // add all the plane mods. IF ADD_PLANE_MODS_TO_BASKET(0, eCategory, g_sPlaneDataStruct, sPlane_price_struct.iGunTurretPrice, sPlane_price_struct.iVehShopPrice, sPlane_price_struct.iWeaShopPrice, sPlane_price_struct.iInteriorPrice, sPlane_price_struct.iAvengerPrice) IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - New plane Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - New plane CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New plane failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New plane failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF // ELSE // CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new plane to basket") // iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED // ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding plane update to basket eCategory:", GET_SHOP_ITEM_CATEGORIES_DEBUG_STRING(CATEGORY_INVENTORY_VEHICLE_MOD), ", eAction:", GET_CASH_TRANSACTION_ACTION_TYPE_DEBUG_STRING(eAction), ", iPrice:$", iPrice, ", iItemId:", iItemId, ", iInventoryKey:", iInventoryKey) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sPlaneDataStruct.iGunTurret = ", g_sPlaneDataStruct.iGunTurret) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGunTurretPrice = ", sPlane_price_struct.iGunTurretPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sPlaneDataStruct.iVehShop = ", g_sPlaneDataStruct.iVehShop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iVehShopPrice = ", sPlane_price_struct.iVehShopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sPlaneDataStruct.iWeaShop = ", g_sPlaneDataStruct.iWeaShop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWeaShopPrice = ", sPlane_price_struct.iWeaShopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sPlaneDataStruct.iInterior = ", g_sPlaneDataStruct.iInterior) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iInteriorPrice = ", sPlane_price_struct.iInteriorPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sPlaneDataStruct.iAvenger = ", g_sPlaneDataStruct.iAvenger) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iAvengerPrice = ", sPlane_price_struct.iAvengerPrice) // add all the plane mods. IF ADD_PLANE_MODS_TO_BASKET(0, eCategory, g_sPlaneDataStruct, sPlane_price_struct.iGunTurretPrice, sPlane_price_struct.iVehShopPrice, sPlane_price_struct.iWeaShopPrice, sPlane_price_struct.iInteriorPrice, sPlane_price_struct.iAvengerPrice) IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - plane update Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - plane update CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - plane update failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - plane update failed to add mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELIF eCategory = CATEGORY_INVENTORY_VEHICLE AND IS_CATALOG_ITEM_A_HACKER_TRUCK_ITEM(iItemId) IF GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_HACKERTRUCK_MODEL_0) = 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new hacker truck 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) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iCab = ", g_sHackerTruckDataStruct.iCab, ", eCab = ", GET_MODEL_NAME_FOR_DEBUG(INT_TO_ENUM(MODEL_NAMES, g_sHackerTruckDataStruct.iCab))) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCabPrice = ", sHacker_truck_price_struct.iCabPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iDecal = ", g_sHackerTruckDataStruct.iDecal, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DECAL, g_sHackerTruckDataStruct.iDecal)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDecalPrice = ", sHacker_truck_price_struct.iDecalPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iTint = ", g_sHackerTruckDataStruct.iTint) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iTintPrice = ", sHacker_truck_price_struct.iTintPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iMissileLauncher = ", g_sHackerTruckDataStruct.iMissileLauncher) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iMissileLauncherPrice = ", sHacker_truck_price_struct.iMissileLauncherPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iDroneStation = ", g_sHackerTruckDataStruct.iDroneStation) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDroneStationPrice = ", sHacker_truck_price_struct.iDroneStationPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iWeaShop = ", g_sHackerTruckDataStruct.iWeaShop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWeaShopPrice = ", sHacker_truck_price_struct.iWeaShopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iVehShop = ", g_sHackerTruckDataStruct.iVehShop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iVehShopPrice = ", sHacker_truck_price_struct.iVehShopPrice) // vehicle = 0 // IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, GET_VEHICLE_INVENTORY_ITEM_FROM_PEGASUS_ITEM(iItemID), eAction, 1, 0, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // add all the hacker truck mods. IF ADD_HACKER_TRUCK_MODS_TO_BASKET(0, eCategory, g_sHackerTruckDataStruct, sHacker_truck_price_struct) IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - New hacker truck Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - New hacker truck CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New hacker truck failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New hacker truck failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF // ELSE // CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new hacker truck to basket") // iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED // ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding hacker truck update to basket eCategory:", GET_SHOP_ITEM_CATEGORIES_DEBUG_STRING(CATEGORY_INVENTORY_VEHICLE_MOD), ", eAction:", GET_CASH_TRANSACTION_ACTION_TYPE_DEBUG_STRING(eAction), ", iPrice:$", iPrice, ", iItemId:", iItemId, ", iInventoryKey:", iInventoryKey) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iCab = ", g_sHackerTruckDataStruct.iCab, ", eCab = ", GET_MODEL_NAME_FOR_DEBUG(INT_TO_ENUM(MODEL_NAMES, g_sHackerTruckDataStruct.iCab))) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCabPrice = ", sHacker_truck_price_struct.iCabPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iDecal = ", g_sHackerTruckDataStruct.iDecal, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DECAL, g_sHackerTruckDataStruct.iDecal)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDecalPrice = ", sHacker_truck_price_struct.iDecalPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iTint = ", g_sHackerTruckDataStruct.iTint) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iTintPrice = ", sHacker_truck_price_struct.iTintPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iMissileLauncher = ", g_sHackerTruckDataStruct.iMissileLauncher) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iMissileLauncherPrice = ", sHacker_truck_price_struct.iMissileLauncherPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iDroneStation = ", g_sHackerTruckDataStruct.iDroneStation) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDroneStationPrice = ", sHacker_truck_price_struct.iDroneStationPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iWeaShop = ", g_sHackerTruckDataStruct.iWeaShop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWeaShopPrice = ", sHacker_truck_price_struct.iWeaShopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHackerTruckDataStruct.iVehShop = ", g_sHackerTruckDataStruct.iVehShop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iVehShopPrice = ", sHacker_truck_price_struct.iVehShopPrice) // add all the hacker truck mods. IF ADD_HACKER_TRUCK_MODS_TO_BASKET(0, eCategory, g_sHackerTruckDataStruct, sHacker_truck_price_struct) IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - hacker truck update Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - hacker truck update CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - hacker truck update failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - hacker truck update failed to add mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF #IF FEATURE_HEIST_ISLAND ELIF eCategory = CATEGORY_INVENTORY_VEHICLE AND IS_CATALOG_ITEM_A_KOSATKA_ITEM(iItemId) IF GET_MP_INT_CHARACTER_STAT(MP_STAT_IH_SUB_OWNED) = 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new kosatka 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) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iOwned = ", g_sKosatkaDataStruct.iOwned, ", iOwned = ", GET_MODEL_NAME_FOR_DEBUG(INT_TO_ENUM(MODEL_NAMES, g_sKosatkaDataStruct.iOwned))) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iOwnedPrice = ", sKosatka_price_struct.iOwnedPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iColour = ", g_sKosatkaDataStruct.iColour, " ", GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_COLOUR, g_sKosatkaDataStruct.iColour)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDecalPrice = ", sKosatka_price_struct.iColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iFlag = ", g_sKosatkaDataStruct.iFlag) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFlagPrice = ", sKosatka_price_struct.iFlagPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iSonar = ", g_sKosatkaDataStruct.iSonar) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSonarPrice = ", sKosatka_price_struct.iSonarPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iMissiles = ", g_sKosatkaDataStruct.iMissiles) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iMissilesPrice = ", sKosatka_price_struct.iMissilesPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iWeaShop = ", g_sKosatkaDataStruct.iWeaShop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWeaShopPrice = ", sKosatka_price_struct.iWeaShopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iSeaSparrow2 = ", g_sKosatkaDataStruct.iSeaSparrow2) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSeaSparrow2Price = ", sKosatka_price_struct.iSeaSparrow2Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iAvisa = ", g_sKosatkaDataStruct.iAvisa) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iAvisaPrice = ", sKosatka_price_struct.iAvisaPrice) // vehicle = 0 // IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, GET_VEHICLE_INVENTORY_ITEM_FROM_PEGASUS_ITEM(iItemID), eAction, 1, 0, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // add all the kosatka mods. IF ADD_KOSATKA_MODS_TO_BASKET(0, eCategory, g_sKosatkaDataStruct, sKosatka_price_struct) IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - New kosatka Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - New kosatka CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New kosatka failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New kosatka failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF // ELSE // CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new hacker truck to basket") // iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED // ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding kosatka update to basket eCategory:", GET_SHOP_ITEM_CATEGORIES_DEBUG_STRING(CATEGORY_INVENTORY_VEHICLE_MOD), ", eAction:", GET_CASH_TRANSACTION_ACTION_TYPE_DEBUG_STRING(eAction), ", iPrice:$", iPrice, ", iItemId:", iItemId, ", iInventoryKey:", iInventoryKey) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iOwned = ", g_sKosatkaDataStruct.iOwned, ", iOwned = ", GET_MODEL_NAME_FOR_DEBUG(INT_TO_ENUM(MODEL_NAMES, g_sKosatkaDataStruct.iOwned))) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iOwnedPrice = ", sKosatka_price_struct.iOwnedPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iColour = ", g_sKosatkaDataStruct.iColour, " ", GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_COLOUR, g_sKosatkaDataStruct.iColour)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDecalPrice = ", sKosatka_price_struct.iColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iFlag = ", g_sKosatkaDataStruct.iFlag) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFlagPrice = ", sKosatka_price_struct.iFlagPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iSonar = ", g_sKosatkaDataStruct.iSonar) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSonarPrice = ", sKosatka_price_struct.iSonarPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iMissiles = ", g_sKosatkaDataStruct.iMissiles) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iMissilesPrice = ", sKosatka_price_struct.iMissilesPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iWeaShop = ", g_sKosatkaDataStruct.iWeaShop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWeaShopPrice = ", sKosatka_price_struct.iWeaShopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iSeaSparrow2 = ", g_sKosatkaDataStruct.iSeaSparrow2) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSeaSparrow2Price = ", sKosatka_price_struct.iSeaSparrow2Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sKosatkaDataStruct.iAvisa = ", g_sKosatkaDataStruct.iAvisa) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iAvisaPrice = ", sKosatka_price_struct.iAvisaPrice) // add all the kosatka mods. IF ADD_KOSATKA_MODS_TO_BASKET(0, CATEGORY_INVENTORY_VEHICLE_MOD, g_sKosatkaDataStruct, sKosatka_price_struct) IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - kosatka update Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - kosatka update CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - kosatka update failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - kosatka update failed to add mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF #ENDIF ELIF eCategory = CATEGORY_INVENTORY_WAREHOUSE IF IS_CATALOG_ITEM_A_BUNKER_ITEM(iItemID) INT g_sBunkerDataStruct_iDecor, g_sBunkerDataStruct_iAccommodation, g_sBunkerDataStruct_iFiringRange, g_sBunkerDataStruct_iGunLocker, g_sBunkerDataStruct_iTransportation GET_SCALEFORM_FACTORY_DATA(g_sBunkerDataStruct_iDecor, g_sBunkerDataStruct_iAccommodation, g_sBunkerDataStruct_iFiringRange, g_sBunkerDataStruct_iGunLocker, g_sBunkerDataStruct_iTransportation) IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) // CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new factory property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // new factory property we are trading in. IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new factory property 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) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new factory property iSellingItemId ", iSellingItemId) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add selling item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ENDIF /* IF (NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemInteriorID, eAction, 1, 0, 0, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryInteriorID)) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new factory property iItemInteriorID ", iItemInteriorID) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add interior item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF */ IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore coupon hash ", iDoCouponHash) ENDIF CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sBunkerDataStruct_iDecor = ", g_sBunkerDataStruct_iDecor) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDecorPrice = ", sBunker_price_struct.iDecorPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sBunkerDataStruct_iAccommodation = ", g_sBunkerDataStruct_iAccommodation) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iAccommodationPrice = ", sBunker_price_struct.iAccommodationPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sBunkerDataStruct_iFiringRange = ", g_sBunkerDataStruct_iFiringRange) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFiringRangePrice = ", sBunker_price_struct.iFiringRangePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sBunkerDataStruct_iGunLocker = ", g_sBunkerDataStruct_iGunLocker) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGunLockerPrice = ", sBunker_price_struct.iGunLockerPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sBunkerDataStruct_iTransportation = ", g_sBunkerDataStruct_iTransportation) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iTransportationPrice = ", sBunker_price_struct.iTransportationPrice) IF ADD_BUNKER_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_WAREHOUSE_INTERIOR, g_sBunkerDataStruct_iDecor, sBunker_price_struct.iDecorPrice, g_sBunkerDataStruct_iAccommodation, sBunker_price_struct.iAccommodationPrice, g_sBunkerDataStruct_iFiringRange, sBunker_price_struct.iFiringRangePrice, g_sBunkerDataStruct_iGunLocker, sBunker_price_struct.iGunLockerPrice, g_sBunkerDataStruct_iTransportation, sBunker_price_struct.iTransportationPrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New gunrunning bunker failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start factory basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add factory item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding factory property upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sBunkerDataStruct_iDecor = ", g_sBunkerDataStruct_iDecor) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDecorPrice = ", sBunker_price_struct.iDecorPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sBunkerDataStruct_iAccommodation = ", g_sBunkerDataStruct_iAccommodation) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iAccommodationPrice = ", sBunker_price_struct.iAccommodationPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sBunkerDataStruct_iFiringRange = ", g_sBunkerDataStruct_iFiringRange) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFiringRangePrice = ", sBunker_price_struct.iFiringRangePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sBunkerDataStruct_iGunLocker = ", g_sBunkerDataStruct_iGunLocker) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGunLockerPrice = ", sBunker_price_struct.iGunLockerPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sBunkerDataStruct_iTransportation = ", g_sBunkerDataStruct_iTransportation) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iTransportationPrice = ", sBunker_price_struct.iTransportationPrice) IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added factory property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add factory property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore factory property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_BUNKER_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_WAREHOUSE_INTERIOR, g_sBunkerDataStruct_iDecor, sBunker_price_struct.iDecorPrice, g_sBunkerDataStruct_iAccommodation, sBunker_price_struct.iAccommodationPrice, g_sBunkerDataStruct_iFiringRange, sBunker_price_struct.iFiringRangePrice, g_sBunkerDataStruct_iGunLocker, sBunker_price_struct.iGunLockerPrice, g_sBunkerDataStruct_iTransportation, sBunker_price_struct.iTransportationPrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New gunrunning bunker failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start factory basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF ELIF IS_CATALOG_ITEM_A_HANGAR_ITEM(iItemId) HANGAR_DATA_STRUCT g_sHangarData GET_SCALEFORM_HANGAR_DATA(g_sHangarData) IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) // CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new hangar property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iFlooring = ", g_sHangarData.iFlooring) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFlooringPrice = ", sHangar_price_struct.iFlooringPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iSleepingQuarters = ", g_sHangarData.iSleepingQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iAccommodationPrice = ", sHangar_price_struct.iAccommodationPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iFurniture = ", g_sHangarData.iFurniture) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFurniturePrice = ", sHangar_price_struct.iFurniturePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iWorkshop = ", g_sHangarData.iWorkshop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iModshopPrice = ", sHangar_price_struct.iModshopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iStyle = ", g_sHangarData.iStyle) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourPrice = ", sHangar_price_struct.iColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iLighting = ", g_sHangarData.iLighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iLightingPrice = ", sHangar_price_struct.iLightingPrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // new hangar property we are trading in. IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new hangar property 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 (NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemInteriorID, eAction, 1, 0, 0, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryInteriorID)) // // // ELSE // CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add interior item to basket") // iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED // RETURN TRUE // ENDIF IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new hangar property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add new hangar property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore new hangar property coupon hash ", iDoCouponHash) ENDIF IF ADD_HANGAR_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sHangarData.iFlooring, sHangar_price_struct.iFlooringPrice, g_sHangarData.iSleepingQuarters, sHangar_price_struct.iAccommodationPrice, g_sHangarData.iFurniture, sHangar_price_struct.iFurniturePrice, g_sHangarData.iWorkshop, sHangar_price_struct.iModshopPrice, g_sHangarData.iStyle, sHangar_price_struct.iColourPrice, g_sHangarData.iLighting, sHangar_price_struct.iLightingPrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New hangar failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start hangar basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new hangar item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding hangar property upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iFlooring = ", g_sHangarData.iFlooring) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFlooringPrice = ", sHangar_price_struct.iFlooringPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iSleepingQuarters = ", g_sHangarData.iSleepingQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iAccommodationPrice = ", sHangar_price_struct.iAccommodationPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iFurniture = ", g_sHangarData.iFurniture) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFurniturePrice = ", sHangar_price_struct.iFurniturePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iWorkshop = ", g_sHangarData.iWorkshop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iModshopPrice = ", sHangar_price_struct.iModshopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iStyle = ", g_sHangarData.iStyle) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourPrice = ", sHangar_price_struct.iColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sHangarData.iLighting = ", g_sHangarData.iLighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iLightingPrice = ", sHangar_price_struct.iLightingPrice) IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added hangar property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add hangar property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore hangar property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_HANGAR_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sHangarData.iFlooring, sHangar_price_struct.iFlooringPrice, g_sHangarData.iSleepingQuarters, sHangar_price_struct.iAccommodationPrice, g_sHangarData.iFurniture, sHangar_price_struct.iFurniturePrice, g_sHangarData.iWorkshop, sHangar_price_struct.iModshopPrice, g_sHangarData.iStyle, sHangar_price_struct.iColourPrice, g_sHangarData.iLighting, sHangar_price_struct.iLightingPrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Hangar upgrade failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start hangar upgrade basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF ELIF IS_CATALOG_ITEM_A_DEFUNCT_BASE_ITEM(iItemId) DEFUNCT_BASE_DATA_STRUCT g_sDefunctBaseData GET_SCALEFORM_DEFUNCT_BASE_DATA(g_sDefunctBaseData) IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) // CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new defunct base property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iPersonalQuarters = ", g_sDefunctBaseData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonalQuartersPrice = ", sDefunct_base_price_struct.iPersonalQuartersPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iOrbitalWeapon = ", g_sDefunctBaseData.iOrbitalWeapon) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iOrbitalWeaponPrice = ", sDefunct_base_price_struct.iOrbitalWeaponPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iSecurityRoom = ", g_sDefunctBaseData.iSecurityRoom) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSecurityRoomPrice = ", sDefunct_base_price_struct.iSecurityRoomPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iLounge = ", g_sDefunctBaseData.iLounge) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iLoungePrice = ", sDefunct_base_price_struct.iLoungePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iPrivicyGlass = ", g_sDefunctBaseData.iPrivicyGlass) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPrivicyGlassPrice = ", sDefunct_base_price_struct.iPrivicyGlassPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iStyle = ", g_sDefunctBaseData.iStyle) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStylePrice = ", sDefunct_base_price_struct.iStylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iGraphics = ", g_sDefunctBaseData.iGraphics) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGraphicsPrice = ", sDefunct_base_price_struct.iGraphicsPrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // new defunct base property we are trading in. IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new defunct base property 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 (NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemInteriorID, eAction, 1, 0, 0, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryInteriorID)) // // // ELSE // CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add interior item to basket") // iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED // RETURN TRUE // ENDIF IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new defunct base property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add new defunct base property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore new defunct base property coupon hash ", iDoCouponHash) ENDIF IF ADD_DEFUNCT_BASE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sDefunctBaseData, sDefunct_base_price_struct.iPersonalQuartersPrice, sDefunct_base_price_struct.iOrbitalWeaponPrice, sDefunct_base_price_struct.iSecurityRoomPrice, sDefunct_base_price_struct.iLoungePrice, sDefunct_base_price_struct.iPrivicyGlassPrice, sDefunct_base_price_struct.iStylePrice, sDefunct_base_price_struct.iGraphicsPrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New defunct base failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start defunct base basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new defunct base item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding defunct base property upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iPersonalQuarters = ", g_sDefunctBaseData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonalQuartersPrice = ", sDefunct_base_price_struct.iPersonalQuartersPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iOrbitalWeapon = ", g_sDefunctBaseData.iOrbitalWeapon) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iOrbitalWeaponPrice = ", sDefunct_base_price_struct.iOrbitalWeaponPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iSecurityRoom = ", g_sDefunctBaseData.iSecurityRoom) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSecurityRoomPrice = ", sDefunct_base_price_struct.iSecurityRoomPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iLounge = ", g_sDefunctBaseData.iLounge) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iLoungePrice = ", sDefunct_base_price_struct.iLoungePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iPrivicyGlass = ", g_sDefunctBaseData.iPrivicyGlass) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPrivicyGlassPrice = ", sDefunct_base_price_struct.iPrivicyGlassPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iStyle = ", g_sDefunctBaseData.iStyle) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStylePrice = ", sDefunct_base_price_struct.iStylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sDefunctBaseData.iGraphics = ", g_sDefunctBaseData.iGraphics) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGraphicsPrice = ", sDefunct_base_price_struct.iGraphicsPrice) IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added defunct base property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add defunct base property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore defunct base property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_DEFUNCT_BASE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sDefunctBaseData, sDefunct_base_price_struct.iPersonalQuartersPrice, sDefunct_base_price_struct.iOrbitalWeaponPrice, sDefunct_base_price_struct.iSecurityRoomPrice, sDefunct_base_price_struct.iLoungePrice, sDefunct_base_price_struct.iPrivicyGlassPrice, sDefunct_base_price_struct.iStylePrice, sDefunct_base_price_struct.iGraphicsPrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - defunct base upgrade failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start defunct base upgrade basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF ELIF IS_CATALOG_ITEM_A_NIGHTCLUB_ITEM(iItemId) NIGHTCLUB_DATA_STRUCT g_sNightclubData GET_SCALEFORM_NIGHTCLUB_DATA(g_sNightclubData) IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) // CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new nightclub property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iStyle = ", g_sNightclubData.iStyle) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStylePrice = ", sNightclub_price_struct.iStylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iLighting = ", g_sNightclubData.iLighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iLightingPrice = ", sNightclub_price_struct.iLightingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iDancers = ", g_sNightclubData.iDancers) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDancersPrice = ", sNightclub_price_struct.iDancersPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iDryIce = ", g_sNightclubData.iDryIce) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDryIcePrice = ", sNightclub_price_struct.iDryIcePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iStorage = ", g_sNightclubData.iStorage) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStoragePrice = ", sNightclub_price_struct.iStoragePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iNameID = ", g_sNightclubData.iNameID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iNamePrice = ", sNightclub_price_struct.iNamePrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // new nightclub property we are trading in. IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new nightclub property 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 (NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemInteriorID, eAction, 1, 0, 0, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryInteriorID)) // // // ELSE // CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add interior item to basket") // iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED // RETURN TRUE // ENDIF IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new nightclub property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add new nightclub property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore new nightclub property coupon hash ", iDoCouponHash) ENDIF IF ADD_NIGHTCLUB_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sNightclubData, sNightclub_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New nightclub failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start nightclub basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new nightclub item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding nightclub property upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iStyle = ", g_sNightclubData.iStyle) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStylePrice = ", sNightclub_price_struct.iStylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iLighting = ", g_sNightclubData.iLighting) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iLightingPrice = ", sNightclub_price_struct.iLightingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iDancers = ", g_sNightclubData.iDancers) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDancersPrice = ", sNightclub_price_struct.iDancersPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iDryIce = ", g_sNightclubData.iDryIce) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDryIcePrice = ", sNightclub_price_struct.iDryIcePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iStorage = ", g_sNightclubData.iStorage) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStoragePrice = ", sNightclub_price_struct.iStoragePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sNightclubData.iNameID = ", g_sNightclubData.iNameID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iNamePrice = ", sNightclub_price_struct.iNamePrice) IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added nightclub property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add nightclub property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore nightclub property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_NIGHTCLUB_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sNightclubData, sNightclub_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - nightclub upgrade failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start nightclub upgrade basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF ELIF IS_CATALOG_ITEM_AN_ARENA_GARAGE_ITEM(iItemId) ARENA_GARAGE_DATA_STRUCT g_sArenaData GET_SCALEFORM_ARENA_GARAGE_DATA(g_sArenaData) IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) // CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new arena garage property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iStyle = ", g_sArenaData.iStyle) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStylePrice = ", sArena_garage_price_struct.iStylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iGraphics = ", g_sArenaData.iGraphics) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGraphicsPrice = ", sArena_garage_price_struct.iGraphicsPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iColour = ", g_sArenaData.iColour) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourPrice = ", sArena_garage_price_struct.iColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iExpansionFloorB1 = ", g_sArenaData.iExpansionFloorB1) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iExpansionFloorB1Price = ", sArena_garage_price_struct.iExpansionFloorB1Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iExpansionFloorB2 = ", g_sArenaData.iExpansionFloorB2) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iExpansionFloorB2Price = ", sArena_garage_price_struct.iExpansionFloorB2Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iBennyMechanic = ", g_sArenaData.iBennyMechanic) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iBennyMechanicPrice = ", sArena_garage_price_struct.iBennyMechanicPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iPersonalQuarters = ", g_sArenaData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonalQuartersPrice = ", sArena_garage_price_struct.iPersonalQuartersPrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // new arena garage property we are trading in. IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new arena garage property 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 (NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemInteriorID, eAction, 1, 0, 0, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryInteriorID)) // // // ELSE // CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add interior item to basket") // iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED // RETURN TRUE // ENDIF IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new arena garage property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add new arena garage property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore new arena garage property coupon hash ", iDoCouponHash) ENDIF IF ADD_ARENA_GARAGE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sArenaData, sArena_garage_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New arena garage failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start arena garage basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new arena garage item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding arena garage property upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iStyle = ", g_sArenaData.iStyle) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStylePrice = ", sArena_garage_price_struct.iStylePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iGraphics = ", g_sArenaData.iGraphics) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGraphicsPrice = ", sArena_garage_price_struct.iGraphicsPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iColour = ", g_sArenaData.iColour) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourPrice = ", sArena_garage_price_struct.iColourPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iExpansionFloorB1 = ", g_sArenaData.iExpansionFloorB1) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iExpansionFloorB1Price = ", sArena_garage_price_struct.iExpansionFloorB1Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iExpansionFloorB2 = ", g_sArenaData.iExpansionFloorB2) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iExpansionFloorB2Price = ", sArena_garage_price_struct.iExpansionFloorB2Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iBennyMechanic = ", g_sArenaData.iBennyMechanic) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iBennyMechanicPrice = ", sArena_garage_price_struct.iBennyMechanicPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArenaData.iPersonalQuarters = ", g_sArenaData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonalQuartersPrice = ", sArena_garage_price_struct.iPersonalQuartersPrice) IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added arena garage property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add arena garage property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore arena garage property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_ARENA_GARAGE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sArenaData, sArena_garage_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - arena garage upgrade failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start arena garage upgrade basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF ELIF IS_CATALOG_ITEM_AN_CASINO_APT_ITEM(iItemId) CASINO_APT_DATA_STRUCT g_sCasinoData GET_SCALEFORM_CASINO_APT_DATA(g_sCasinoData) IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) // CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new Casino Apt property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iColourOption = ", g_sCasinoData.iColourOption) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourOptionPrice = ", sCasino_apt_price_struct.iColourOptionPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iStyleOption = ", g_sCasinoData.iStyleOption) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStyleOptionPrice = ", sCasino_apt_price_struct.iStyleOptionPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iLounge = ", g_sCasinoData.iLounge) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iLoungePrice = ", sCasino_apt_price_struct.iLoungePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iBar = ", g_sCasinoData.iBar) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iBarPrice = ", sCasino_apt_price_struct.iBarPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iDealer = ", g_sCasinoData.iDealer) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDealerPrice = ", sCasino_apt_price_struct.iDealerPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iBedroom = ", g_sCasinoData.iBedroom) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iBedroomPrice = ", sCasino_apt_price_struct.iBedroomPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iMediaroom = ", g_sCasinoData.iMediaroom) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iMediaroomPrice = ", sCasino_apt_price_struct.iMediaroomPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iSpa = ", g_sCasinoData.iSpa) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSpaPrice = ", sCasino_apt_price_struct.iSpaPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iOffice = ", g_sCasinoData.iOffice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iOfficePrice = ", sCasino_apt_price_struct.iOfficePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iGarage = ", g_sCasinoData.iGarage) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGaragePrice = ", sCasino_apt_price_struct.iGaragePrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) // new Casino Apt property we are trading in. IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new Casino Apt property 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 (NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemInteriorID, eAction, 1, 0, 0, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryInteriorID)) // // // ELSE // CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add interior item to basket") // iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED // RETURN TRUE // ENDIF IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new Casino Apt property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add new Casino Apt property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore new Casino Apt property coupon hash ", iDoCouponHash) ENDIF IF ADD_CASINO_APT_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sCasinoData, sCasino_apt_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New Casino Apt failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start Casino Apt basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new Casino Apt item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding Casino Apt property upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iColourOption = ", g_sCasinoData.iColourOption) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iColourOptionPrice = ", sCasino_apt_price_struct.iColourOptionPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iStyleOption = ", g_sCasinoData.iStyleOption) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStyleOptionPrice = ", sCasino_apt_price_struct.iStyleOptionPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iLounge = ", g_sCasinoData.iLounge) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iLoungePrice = ", sCasino_apt_price_struct.iLoungePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iBar = ", g_sCasinoData.iBar) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iBarPrice = ", sCasino_apt_price_struct.iBarPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iDealer = ", g_sCasinoData.iDealer) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iDealerPrice = ", sCasino_apt_price_struct.iDealerPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iBedroom = ", g_sCasinoData.iBedroom) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iBedroomPrice = ", sCasino_apt_price_struct.iBedroomPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iMediaroom = ", g_sCasinoData.iMediaroom) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iMediaroomPrice = ", sCasino_apt_price_struct.iMediaroomPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iSpa = ", g_sCasinoData.iSpa) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iSpaPrice = ", sCasino_apt_price_struct.iSpaPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iOffice = ", g_sCasinoData.iOffice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iOfficePrice = ", sCasino_apt_price_struct.iOfficePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sCasinoData.iGarage = ", g_sCasinoData.iGarage) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGaragePrice = ", sCasino_apt_price_struct.iGaragePrice) IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added Casino Apt property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add Casino Apt property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore Casino Apt property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_CASINO_APT_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sCasinoData, sCasino_apt_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Casino Apt upgrade failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start Casino Apt upgrade basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF ELIF IS_CATALOG_ITEM_AN_ARCADE_ITEM(iItemId) ARCADE_DATA_STRUCT g_sArcadeData GET_SCALEFORM_ARCADE_DATA(g_sArcadeData) IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new Arcade property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iFloor = ", g_sArcadeData.iFloor) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFloorPrice = ", sArcade_price_struct.iFloorPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iCeiling = ", g_sArcadeData.iCeiling) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCeilingPrice = ", sArcade_price_struct.iCeilingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iWall = ", g_sArcadeData.iWall) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWallPrice = ", sArcade_price_struct.iWallPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iPersonalQuarters = ", g_sArcadeData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonalQuartersPrice = ", sArcade_price_struct.iPersonalQuartersPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iGarage = ", g_sArcadeData.iGarage) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGaragePrice = ", sArcade_price_struct.iGaragePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iNeonLights = ", g_sArcadeData.iNeonLights) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iNeonLightsPrice = ", sArcade_price_struct.iNeonLightsPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iScreens = ", g_sArcadeData.iScreens) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iScreensPrice = ", sArcade_price_struct.iScreensPrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new Arcade property 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 iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new nightclub property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add new nightclub property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore new Arcade property coupon hash ", iDoCouponHash) ENDIF IF ADD_ARCADE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sArcadeData, sArcade_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New Arcade failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet = $-", iWalletAmount, ", bank = $-", iBankAmount, "): iPrice = $", iPrice, ", bankBalance = $", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance = $", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start Arcade basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new Arcade item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding Arcade property upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iFloor = ", g_sArcadeData.iFloor) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iFloorPrice = ", sArcade_price_struct.iFloorPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iCeiling = ", g_sArcadeData.iCeiling) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCeilingPrice = ", sArcade_price_struct.iCeilingPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iWall = ", g_sArcadeData.iWall) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWallPrice = ", sArcade_price_struct.iWallPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iPersonalQuarters = ", g_sArcadeData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonalQuartersPrice = ", sArcade_price_struct.iPersonalQuartersPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iGarage = ", g_sArcadeData.iGarage) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iGaragePrice = ", sArcade_price_struct.iGaragePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iNeonLights = ", g_sArcadeData.iNeonLights) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iNeonLightsPrice = ", sArcade_price_struct.iNeonLightsPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sArcadeData.iScreens = ", g_sArcadeData.iScreens) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iScreensPrice = ", sArcade_price_struct.iScreensPrice) IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added Arcade property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Failed to add Arcade property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore Arcade property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_ARCADE_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sArcadeData, sArcade_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Arcade upgrade failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet = $-", iWalletAmount, ", bank = $-", iBankAmount, "): iPrice = $", iPrice, ", bankBalance = $", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance = $", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start Arcade upgrade basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF ELIF IS_CATALOG_ITEM_AN_AUTO_SHOP_ITEM(iItemId) AUTO_SHOP_DATA_STRUCT g_sAutoShopData GET_SCALEFORM_AUTO_SHOP_DATA(g_sAutoShopData) IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new Auto Shop property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iWall = ", g_sAutoShopData.iWall) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWallPrice = ", sAutoShop_price_struct.iWallPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iTint = ", g_sAutoShopData.iTint) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iTintPrice = ", sAutoShop_price_struct.iTintPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iEmblem = ", g_sAutoShopData.iEmblem) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iEmblemPrice = ", sAutoShop_price_struct.iEmblemPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iCrewName = ", g_sAutoShopData.iCrewName) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCrewNamePrice = ", sAutoShop_price_struct.iCrewNamePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iStaff1 = ", g_sAutoShopData.iStaff1) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStaff1Price = ", sAutoShop_price_struct.iStaff1Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iStaff2 = ", g_sAutoShopData.iStaff2) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStaff2Price = ", sAutoShop_price_struct.iStaff2Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iCarLift = ", g_sAutoShopData.iCarLift) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCarLiftPrice = ", sAutoShop_price_struct.iCarLiftPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iPersonalQuarters = ", g_sAutoShopData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonalQuartersPrice = ", sAutoShop_price_struct.iPersonalQuartersPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iCarClubMembership = ", g_sAutoShopData.iCarClubMembership) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCarClubMembershipPrice = ", sAutoShop_price_struct.iCarClubMembershipPrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new Auto Shop property 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 iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new Auto Shop property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add new nightclub property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore new Auto Shop property coupon hash ", iDoCouponHash) ENDIF IF ADD_AUTO_SHOP_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sAutoShopData, sAutoShop_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New Auto Shop failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet = $-", iWalletAmount, ", bank = $-", iBankAmount, "): iPrice = $", iPrice, ", bankBalance = $", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance = $", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start Auto Shop basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new Auto Shop item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding Auto Shop property upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iWall = ", g_sAutoShopData.iWall) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWallPrice = ", sAutoShop_price_struct.iWallPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iTint = ", g_sAutoShopData.iTint) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iTintPrice = ", sAutoShop_price_struct.iTintPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iEmblem = ", g_sAutoShopData.iEmblem) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iEmblemPrice = ", sAutoShop_price_struct.iEmblemPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iCrewName = ", g_sAutoShopData.iCrewName) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCrewNamePrice = ", sAutoShop_price_struct.iCrewNamePrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iStaff1 = ", g_sAutoShopData.iStaff1) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStaff1Price = ", sAutoShop_price_struct.iStaff1Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iStaff2 = ", g_sAutoShopData.iStaff2) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iStaff2Price = ", sAutoShop_price_struct.iStaff2Price) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iCarLift = ", g_sAutoShopData.iCarLift) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCarLiftPrice = ", sAutoShop_price_struct.iCarLiftPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iPersonalQuarters = ", g_sAutoShopData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonalQuartersPrice = ", sAutoShop_price_struct.iPersonalQuartersPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...g_sAutoShopData.iCarClubMembership = ", g_sAutoShopData.iCarClubMembership) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iCarClubMembershipPrice = ", sAutoShop_price_struct.iCarClubMembershipPrice) IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added Auto Shop property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Failed to add Auto Shop property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore Auto Shop property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_AUTO_SHOP_MODS_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, g_sAutoShopData, sAutoShop_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Arcade upgrade failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet = $-", iWalletAmount, ", bank = $-", iBankAmount, "): iPrice = $", iPrice, ", bankBalance = $", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance = $", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start Auto Shop upgrade basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF #IF FEATURE_FIXER ELIF IS_CATALOG_ITEM_A_FIXER_HQ_ITEM(iItemId) FIXER_HQ_DATA_STRUCT sFixerHQData GET_SCALEFORM_FIXER_HQ_DATA(sFixerHQData) IF NOT DOES_ITEM_MATCH_SELLING_ITEM(iItemId, iSellingItemId) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding new Fixer HQ property 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iArt = ", sFixerHQData.iArt) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iArtPrice = ", sFixerHQ_price_struct.iArtPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iWallpaper = ", sFixerHQData.iWallpaper) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWallpaperPrice = ", sFixerHQ_price_struct.iWallpaperPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iTint = ", sFixerHQData.iTint) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iTintPrice = ", sFixerHQ_price_struct.iTintPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iVehWorkshop = ", sFixerHQData.iVehWorkshop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iVehWorkshopPrice = ", sFixerHQ_price_struct.iVehWorkshopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iArmory = ", sFixerHQData.iArmory) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iArmorypPrice = ", sFixerHQ_price_struct.iArmoryPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iPersonalQuarters = ", sFixerHQData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonalQuartersPrice = ", sFixerHQ_price_struct.iPersonalQuartersPrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) IF iSellingItemId != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding trade new Fixer HQ property 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 Fixer HQ item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ENDIF IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added new Fixer HQ property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add new Fixer HQ property coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore new Fixer HQ property coupon hash ", iDoCouponHash) ENDIF IF ADD_FIXER_HQ_UPGRADES_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, sFixerHQData, sFixerHQ_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - New Fixer HQ failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet = $-", iWalletAmount, ", bank = $-", iBankAmount, "): iPrice = $", iPrice, ", bankBalance = $", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance = $", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start Fixer HQ basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add new Fixer HQ item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding Fixer HQ upgrade 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, ", iItemInteriorID: ", iItemInteriorID, ", iInventoryInteriorID: ", iInventoryInteriorID) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iArt = ", sFixerHQData.iArt) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iArtPrice = ", sFixerHQ_price_struct.iArtPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iWallpaper = ", sFixerHQData.iWallpaper) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iWallpaperPrice = ", sFixerHQ_price_struct.iWallpaperPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iTint = ", sFixerHQData.iTint) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iTintPrice = ", sFixerHQ_price_struct.iTintPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iVehWorkshop = ", sFixerHQData.iVehWorkshop) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iVehWorkshopPrice = ", sFixerHQ_price_struct.iVehWorkshopPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iArmory = ", sFixerHQData.iArmory) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iArmorypPrice = ", sFixerHQ_price_struct.iArmoryPrice) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...sFixerHQData.iPersonalQuarters = ", sFixerHQData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "[BASKET] - ...iPersonalQuartersPrice = ", sFixerHQ_price_struct.iPersonalQuartersPrice) IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added Fixer HQ property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Failed to add Fixer HQ property upgrade coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore Fixer HQ property upgrade coupon hash ", iDoCouponHash) ENDIF IF ADD_FIXER_HQ_UPGRADES_TO_BASKET(iItemId, CATEGORY_INVENTORY_PROPERTY_INTERIOR, sFixerHQData, sFixerHQ_price_struct) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Fixer HQ upgrade failed to add default upgrades to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF IF iProcessingBasketStage != SHOP_BASKET_STAGE_FAILED IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet = $-", iWalletAmount, ", bank = $-", iBankAmount, "): iPrice = $", iPrice, ", bankBalance = $", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance = $", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start Fixer HQ upgrade basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF ENDIF #ENDIF ENDIF // VEHICLES ELIF eCategory = CATEGORY_INVENTORY_VEHICLE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding vehicle 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, " iCouponPrice: ", iCouponPrice) IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iItemId, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iInventoryKey) /* */ IF iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iInventoryKey, eAction, 1, iCouponPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iDoCouponHash) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added vehicle coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add vehicle coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore vehicle coupon hash ", iDoCouponHash) ENDIF IF ADD_CURRENT_VEHICLE_MODS_TO_BASKET(confMpSlotIndex, tempVehID, TRUE) IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start vehicle basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add default mods to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add vehicle to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Adding 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 iDoCouponHash != 0 IF NETWORK_REQUEST_BASKET_TRANSACTION(NET_SHOP_TTYPE_BASKET, eCategory, iDoCouponHash, eAction, 1, iPrice, iStatValue, CATALOG_ITEM_FLAG_BANK_THEN_WALLET, iItemId) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Successfully added coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Faied to add coupon hash ", iDoCouponHash, " to basket (iItemId: ", iItemId, ").") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED RETURN TRUE ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Ignore coupon hash ", iDoCouponHash) ENDIF IF NETWORK_START_BASKET_TRANSACTION_CHECKOUT() CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket checkout started") IF iWalletAmount != 0 OR iBankAmount != 0 OR bCouponPriceZero CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPrice=$", iPrice, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_PENDING ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to start basket checkout") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - failed to add item to basket") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF ENDIF BREAK // Pending CASE SHOP_BASKET_STAGE_PENDING INT iScriptTransactionIndex iScriptTransactionIndex = GET_BASKET_TRANSACTION_SCRIPT_INDEX() IF iScriptTransactionIndex >= 0 AND iScriptTransactionIndex < SHOPPING_TRANSACTION_MAX_NUMBER IF IS_CASH_TRANSACTION_COMPLETE(iScriptTransactionIndex) IF GET_CASH_TRANSACTION_STATUS(iScriptTransactionIndex) = 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 ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Basket transaction invalid, failed!") iProcessingBasketStage = SHOP_BASKET_STAGE_FAILED ENDIF BREAK // Success CASE SHOP_BASKET_STAGE_SUCCESS //DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) -- we delete this later bProcessingBasket = FALSE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD IF NOT bBypassFakeCash USE_FAKE_MP_CASH(FALSE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) ENDIF iProcessSuccess = GENERIC_TRANSACTION_STATE_SUCCESS RETURN FALSE BREAK //Failed CASE SHOP_BASKET_STAGE_FAILED DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) bProcessingBasket = FALSE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD IF NOT bBypassFakeCash USE_FAKE_MP_CASH(FALSE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) ENDIF iProcessSuccess = GENERIC_TRANSACTION_STATE_FAILED 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") DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) bProcessingBasket = FALSE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD IF NOT bBypassFakeCash USE_FAKE_MP_CASH(FALSE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) ENDIF iProcessSuccess = GENERIC_TRANSACTION_STATE_FAILED RETURN FALSE ENDIF iProcessingBasketStage = SHOP_BASKET_STAGE_ADD iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT RETURN FALSE ENDFUNC FUNC BOOL SHOULD_ALLOW_DISABLE_WEAPON_LOADOUT_FROM_INTERNET() IF NETWORK_IS_ACTIVITY_SESSION() RETURN FALSE ENDIF IF IS_PLAYER_CRITICAL_TO_ANY_EVENT(PLAYER_ID()) RETURN FALSE ENDIF RETURN TRUE ENDFUNC FUNC BOOL DO_BIGASS_VEHICLE_BUY(WEBSITE_INDEX_ENUM siteID,SITE_BUYABLE_VEHICLE sbv, INT iPrice, VEHICLE_SITE_FAIL_REASON &reason) INT iBigAssID = GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(sbv, g_eLastBuyableVehicleColourSelected) COUPON_TYPE eDoCoupon = MAX_COUPONS CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: triggered on vehicle SBV ", GET_LABEL_BUYABLE_VEHICLE(sbv), ":", sbv, ", iBigAssID: ", iBigAssID) IF iBigAssID < -1 //OR iBigAssID > 31 CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to invalid index ", iBigAssID) reason = VSFR_INVALID_CATEGORY RETURN FALSE ENDIF //Are bigass vehicles not purchaseable yet? IF NOT ARE_ALL_INSTANCED_TUTORIALS_COMPLETE() CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to FM trigger not done yet") reason = VSFR_BIGASS_NOT_UNLOCKED RETURN FALSE ENDIF BOOL bPreviousBigassVehicle VEHICLE_INDEX vi = NULL INT iSlotToUse = -1, iDisplaySlotToUse = -1 //is it already owned? IF (sbv = BV_DLC_BIG_YACHT) IF NOT IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE) IF GET_PLAYER_RANK(GET_PLAYER_INDEX()) < 5 CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to insufficient rank:", GET_PLAYER_RANK(GET_PLAYER_INDEX())) reason = VSFR_INSUFFCIENT_RANK RETURN FALSE ELSE CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to pending sufficient rank") reason = VSFR_INSUFFCIENT_RANK_PENDING RETURN FALSE ENDIF ENDIF IF IS_PLAYER_CRITICAL_TO_ANY_EVENT(PLAYER_ID()) AND GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) = FMMC_TYPE_GB_YACHT_ROBBERY CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to yacht robbery active") reason = VSFR_NOT_SAFE RETURN FALSE ENDIF ELIF (sbv = BV_DLC_BIG_TRUCK) FACTORY_ID eTradeInFactory = GET_OWNED_BUNKER(PLAYER_ID()) IF eTradeInFactory = FACTORY_ID_INVALID OR eTradeInFactory = FACTORY_ID_MAX CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to player not owing bunker") reason = VSFR_NOT_SAFE RETURN FALSE ENDIF IF NOT USE_SERVER_TRANSACTIONS() bPreviousBigassVehicle = IS_BIG_ASS_VEHICLE_BS_SET(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_BIG_TRUCK)) ELSE bPreviousBigassVehicle = (GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_TRUCK_MODEL_0) != 0) ENDIF INT iAltVersion = g_sTruckDataStruct.iCab BOOL bAltVersion = (iAltVersion = 0) CONFIGURE_STRUCT_FOR_BUYABLE_VEHICLE(sbv, g_sConfVssMP, TRUE, DEFAULT, iAltVersion, siteID) ///IF NOT bPreviousBigassVehicle // iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,DEFAULT) //ELSE iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,DEFAULT,DEFAULT,TRUE) //ENDIF iDisplaySlotToUse = DISPLAY_SLOT_MODDED_ARMOURY_TRUCK IF NOT bPreviousBigassVehicle AND iSlotToUse = -1 CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to buying truck but iSlotToUse = -1") reason = VSFR_NOT_SAFE RETURN FALSE ENDIF confMpSlotIndex = iSlotToUse confMPDisplayIndex = iDisplaySlotToUse CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - waiting for CREATE_AND_POPULATE_VEHICLE_DETAILS_FOR_MP_VEHICLE_BUY(", GET_LABEL_BUYABLE_VEHICLE(sbv), ", ", GET_WEBSITE_FROM_INDEX(siteID), ", ", GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(g_sConfVssMP.VehicleSetup.eModel), ", vi, iAltVersion:", iAltVersion, ")") WHILE NOT CREATE_AND_POPULATE_VEHICLE_DETAILS_FOR_MP_WEBSITE_VEHICLE_BUY(sbv, siteID, g_sConfVssMP, vi, bAltVersion) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() BROWSER_CURSOR_LOADING(FALSE) IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE ELIF (sbv = BV_DLC_BIG_PLANE) DEFUNCT_BASE_ID eTradeInBase = GET_PLAYERS_OWNED_DEFUNCT_BASE(PLAYER_ID()) IF NOT IS_DEFUNCT_BASE_ID_VALID(eTradeInBase) CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to player not owing base") reason = VSFR_NOT_SAFE RETURN FALSE ENDIF IF NOT USE_SERVER_TRANSACTIONS() bPreviousBigassVehicle = IS_BIG_ASS_VEHICLE_BS_SET(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_BIG_PLANE)) ELSE bPreviousBigassVehicle = (GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_PLANE_MODEL_0) != 0) ENDIF INT iAltVersion = 0 BOOL bAltVersion = (iAltVersion = 0) CONFIGURE_STRUCT_FOR_BUYABLE_VEHICLE(sbv, g_sConfVssMP, TRUE, DEFAULT, iAltVersion, siteID) IF (g_sPlaneDataStruct.iGunTurret = 0) g_sConfVssMP.VehicleSetup.iModIndex[MOD_ROOF] = 0 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: transaction, no turret") ELSE g_sConfVssMP.VehicleSetup.iModIndex[MOD_ROOF] = 1 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: transaction, has turret") ENDIF ///IF NOT bPreviousBigassVehicle // iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,DEFAULT) //ELSE iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,DEFAULT,DEFAULT,TRUE) //ENDIF iDisplaySlotToUse = DISPLAY_SLOT_AVENGER_HELI IF NOT bPreviousBigassVehicle AND iSlotToUse = -1 CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to buying plane but iSlotToUse = -1") reason = VSFR_NOT_SAFE RETURN FALSE ENDIF confMpSlotIndex = iSlotToUse confMPDisplayIndex = iDisplaySlotToUse CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - waiting for CREATE_AND_POPULATE_VEHICLE_DETAILS_FOR_MP_VEHICLE_BUY(", GET_LABEL_BUYABLE_VEHICLE(sbv), ", ", GET_WEBSITE_FROM_INDEX(siteID), ", ", GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(g_sConfVssMP.VehicleSetup.eModel), ", vi, iAltVersion:", iAltVersion, ")") WHILE NOT CREATE_AND_POPULATE_VEHICLE_DETAILS_FOR_MP_WEBSITE_VEHICLE_BUY(sbv, siteID, g_sConfVssMP, vi, bAltVersion) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() BROWSER_CURSOR_LOADING(FALSE) IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE ELIF (sbv = BV_DLC_HACKER_TRUCK) BUSINESS_HUB_ID eTradeInBusinessHub = GET_PLAYERS_OWNED_BUSINESS_HUB(PLAYER_ID()) IF eTradeInBusinessHub = BUSINESS_HUB_ID_INVALID OR eTradeInBusinessHub = BUSINESS_HUB_ID_COUNT CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to player not owing business hub") reason = VSFR_NOT_SAFE RETURN FALSE ENDIF IF NOT USE_SERVER_TRANSACTIONS() bPreviousBigassVehicle = IS_BIG_ASS_VEHICLE_BS_SET(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_HACKER_TRUCK)) ELSE // INT iSaveSlot, iModelInSaveSlot MPSV_GET_SAVE_SLOT_FROM_DISPLAY_SLOT_USING_STATS(DISPLAY_SLOT_MEGAWARE_MOC, iSaveSlot) IF iSaveSlot >= 0 iModelInSaveSlot = GET_MP_INT_CHARACTER_STAT(GET_INT_STAT_FOR_VEHICLE_SLOT(MPSV_STAT_ELEMENT_MODEL,iSaveSlot)) ENDIF bPreviousBigassVehicle = (INT_TO_ENUM(MODEL_NAMES,iModelInSaveSlot) = TERBYTE) ENDIF INT iAltVersion = g_sHackerTruckDataStruct.iCab BOOL bAltVersion = (iAltVersion = 0) CONFIGURE_STRUCT_FOR_BUYABLE_VEHICLE(sbv, g_sConfVssMP, TRUE, DEFAULT, iAltVersion, siteID) ///IF NOT bPreviousBigassVehicle // iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,DEFAULT) //ELSE iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,DEFAULT,DEFAULT,TRUE) //ENDIF iDisplaySlotToUse = DISPLAY_SLOT_MEGAWARE_MOC IF NOT bPreviousBigassVehicle AND iSlotToUse = -1 CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to buying hacker truck but iSlotToUse = -1") reason = VSFR_NOT_SAFE RETURN FALSE ENDIF confMpSlotIndex = iSlotToUse confMPDisplayIndex = iDisplaySlotToUse CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - waiting for CREATE_AND_POPULATE_VEHICLE_DETAILS_FOR_MP_VEHICLE_BUY(", GET_LABEL_BUYABLE_VEHICLE(sbv), ", ", GET_WEBSITE_FROM_INDEX(siteID), ", ", GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(g_sConfVssMP.VehicleSetup.eModel), ", vi, iAltVersion:", iAltVersion, ")") WHILE NOT CREATE_AND_POPULATE_VEHICLE_DETAILS_FOR_MP_WEBSITE_VEHICLE_BUY(sbv, siteID, g_sConfVssMP, vi, bAltVersion) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() BROWSER_CURSOR_LOADING(FALSE) IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE #IF FEATURE_HEIST_ISLAND ELIF (sbv = BV_IH_KOSATKA) // Allow renovations. IF NOT USE_SERVER_TRANSACTIONS() bPreviousBigassVehicle = IS_BIG_ASS_VEHICLE_BS_SET(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_IH_KOSATKA)) ELSE bPreviousBigassVehicle = (GET_MP_INT_CHARACTER_STAT(MP_STAT_IH_SUB_OWNED) != 0) ENDIF #ENDIF ELSE IF (sbv = BV_GR_TRAILERSMALL2) IF !HAS_PLAYER_COMPLETED_INITIAL_AMBIENT_TUTORIALS(PLAYER_ID()) CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to not completing online tutorial") reason = VSFR_NOT_SAFE RETURN FALSE ENDIF ENDIF IF IS_BIG_ASS_VEHICLE_BS_SET(iBigAssID) CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed due to player already owning ", GET_LABEL_BUYABLE_VEHICLE(sbv), " iBigAssID", iBigAssID) reason = VSFR_ALREADY_OWNED RETURN FALSE ENDIF ENDIF // Check specific vehicle website IF (eDoCoupon = MAX_COUPONS) AND (iPrice > 0) IF sbv = BV_GO_HERMES IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2017) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CAR_XMAS2017)") eDoCoupon = COUPON_CAR_XMAS2017 ENDIF ELIF sbv = BV_AW_CLIQUE IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2018) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CAR_XMAS2018)") eDoCoupon = COUPON_CAR_XMAS2018 ENDIF ELIF sbv = BV_A_BUZZARD IF DOES_SAVE_HAVE_COUPON(COUPON_HELI_XMAS2018) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_HELI_XMAS2018)") eDoCoupon = COUPON_HELI_XMAS2018 ENDIF ELIF sbv = BV_DLC_INSURGENT IF DOES_SAVE_HAVE_COUPON(COUPON_CAR2_XMAS2018) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CAR2_XMAS2018)") eDoCoupon = COUPON_CAR2_XMAS2018 ENDIF #IF FEATURE_GEN9_EXCLUSIVE ELIF sbv = BV_G9E_S95 IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_GEN9_MIGRATION) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CAR_GEN9_MIGRATION)") eDoCoupon = COUPON_CAR_GEN9_MIGRATION ENDIF #ENDIF ENDIF ENDIF IF (eDoCoupon = MAX_COUPONS) AND (iPrice > 0) SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_SITE) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CAR_SITE)") eDoCoupon = COUPON_CAR_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_CAR_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_CAR_SITE) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CASINO_CAR_SITE)") eDoCoupon = COUPON_CASINO_CAR_SITE ENDIF BREAK CASE WWW_ELITASTRAVEL_COM IF DOES_SAVE_HAVE_COUPON(COUPON_PLANE_SITE) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_PLANE_SITE)") eDoCoupon = COUPON_PLANE_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_PLANE_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_PLANE_SITE) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CASINO_PLANE_SITE)") eDoCoupon = COUPON_CASINO_PLANE_SITE ENDIF BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM IF DOES_SAVE_HAVE_COUPON(COUPON_MIL_SITE) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_MIL_SITE)") eDoCoupon = COUPON_MIL_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_MIL_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_MIL_SITE) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CASINO_MIL_SITE)") eDoCoupon = COUPON_CASINO_MIL_SITE ENDIF BREAK CASE WWW_DOCKTEASE_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_BOAT_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_BOAT_SITE) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CASINO_BOAT_SITE)") eDoCoupon = COUPON_CASINO_BOAT_SITE ENDIF BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_CAR_SITE2, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_CAR_SITE2) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CASINO_CAR_SITE2)") eDoCoupon = COUPON_CASINO_CAR_SITE2 ENDIF BREAK CASE WWW_PANDMCYCLES_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_BIKE_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_BIKE_SITE) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CASINO_BIKE_SITE)") eDoCoupon = COUPON_CASINO_BIKE_SITE ENDIF BREAK ENDSWITCH ENDIF IF (eDoCoupon = COUPON_CASINO_PLANE_SITE) OR (eDoCoupon = COUPON_CASINO_BOAT_SITE) OR (eDoCoupon = COUPON_CASINO_CAR_SITE) OR (eDoCoupon = COUPON_CASINO_CAR_SITE2) OR (eDoCoupon = COUPON_CASINO_MIL_SITE) OR (eDoCoupon = COUPON_CASINO_BIKE_SITE) TRIGGER_BROWSER_NAG_SCREEN(ENUM_TO_INT(eDoCoupon), iPrice, NSR_VOUCHER) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Trigger browser voucher screen(", GET_COUPON_STRING(eDoCoupon), ", ", iPrice, ", NSR_VOUCHER)") BOOL bInputFrontendAcceptPressed = FALSE, bInputFrontendCancelPressed = FALSE WHILE NOT bInputFrontendAcceptPressed AND NOT bInputFrontendCancelPressed AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) OR (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_ACCEPT) AND NOT IS_WARNING_MESSAGE_ACTIVE()) OR (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) AND NOT IS_WARNING_MESSAGE_ACTIVE()) bInputFrontendAcceptPressed = TRUE g_bBrowserNagScreenState = FALSE g_bBrowserVoucherNagScreenState = FALSE g_bBrowserGoToStoreTrigger = FALSE SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(nagScreen) nagScreen = null g_iBrowserNoInputTimer = g_iBrowserTimer + 500 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()) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL) OR (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_CANCEL) AND NOT IS_WARNING_MESSAGE_ACTIVE()) bInputFrontendCancelPressed = TRUE g_bBrowserNagScreenState = FALSE g_bBrowserVoucherNagScreenState = FALSE g_bBrowserGoToStoreTrigger = FALSE SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(nagScreen) nagScreen = null g_iBrowserNoInputTimer = g_iBrowserTimer + 500 ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE IF bInputFrontendAcceptPressed CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Accept voucher ", GET_COUPON_STRING(eDoCoupon)) ELIF bInputFrontendCancelPressed CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Cancel voucher ", GET_COUPON_STRING(eDoCoupon)) reason = VSFR_CANCELED RETURN FALSE ELSE CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: UNKNOWN voucher ", GET_COUPON_STRING(eDoCoupon)) ENDIF ENDIF IF USE_SERVER_TRANSACTIONS() bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iVariation, iAltNumber iVariation = 0 iAltNumber = -1 IF sbv = BV_NG_MARSHALL SWITCH g_eLastBuyableVehicleColourSelected CASE BCV_RED_COLOUR iVariation = 0 BREAK //USA CASE BCV_PINK_COLOUR iVariation = 1 BREAK //AUS CASE BCV_YELLOW_COLOUR iVariation = 2 BREAK //BRA CASE BCV_ORANGE_COLOUR iVariation = 3 BREAK //SPA CASE BCV_GREEN_COLOUR iVariation = 4 BREAK //CAN CASE BCV_BLUE_COLOUR iVariation = 5 BREAK //FRA CASE BCV_BLACK_COLOUR iVariation = 6 BREAK //GER CASE BCV_WHITE_COLOUR iVariation = 7 BREAK //JAP CASE BCV_COLOUR_1 iVariation = 8 BREAK //SCO CASE BCV_COLOUR_2 iVariation = 9 BREAK //UK CASE BCV_COLOUR_3 iVariation = 10 BREAK //ITA CASE BCV_COLOUR_4 iVariation = 11 BREAK //SWI CASE BCV_COLOUR_5 iVariation = 12 BREAK //JAM CASE BCV_COLOUR_6 iVariation = 13 BREAK //COL CASE BCV_COLOUR_7 iVariation = 14 BREAK //NOR CASE BCV_COLOUR_8 iVariation = 15 BREAK //SWE CASE BCV_COLOUR_9 iVariation = 16 BREAK //BEL CASE BCV_COLOUR_10 iVariation = 17 BREAK //MEX CASE BCV_COLOUR_11 iVariation = 18 BREAK //AUT CASE BCV_COLOUR_12 iVariation = 19 BREAK //RUS CASE BCV_COLOUR_13 iVariation = 20 BREAK //ARG CASE BCV_COLOUR_14 iVariation = 21 BREAK //TUR CASE BCV_COLOUR_15 iVariation = 22 BREAK //IRE CASE BCV_COLOUR_16 iVariation = 23 BREAK //WAL CASE BCV_COLOUR_17 iVariation = 24 BREAK //ENG ENDSWITCH ELIF sbv = BV_BB_BLIMP3 SWITCH g_eLastBuyableVehicleColourSelected CASE BCV_RED_COLOUR iVariation = 0 BREAK //Livery #1 CASE BCV_PINK_COLOUR iVariation = 1 BREAK //Livery #2 CASE BCV_YELLOW_COLOUR iVariation = 2 BREAK //Livery #3 CASE BCV_ORANGE_COLOUR iVariation = 3 BREAK //Livery #4 CASE BCV_GREEN_COLOUR iVariation = 4 BREAK //Livery #5 CASE BCV_BLUE_COLOUR iVariation = 5 BREAK //Livery #6 CASE BCV_BLACK_COLOUR iVariation = 6 BREAK //Livery #7 CASE BCV_WHITE_COLOUR iVariation = 7 BREAK //Nightclub ENDSWITCH IF IS_SBV_AN_ALTERNATE_VEHICLE(sbv, siteID, g_eLastBuyableVehicleColourSelected) iAltNumber = 1 ENDIF ELIF sbv = BV_BB_PBUS2 SWITCH g_eLastBuyableVehicleColourSelected CASE BCV_RED_COLOUR iVariation = 0 BREAK //Livery #1 CASE BCV_PINK_COLOUR iVariation = 1 BREAK //Livery #2 CASE BCV_YELLOW_COLOUR iVariation = 2 BREAK //Livery #3 CASE BCV_ORANGE_COLOUR iVariation = 3 BREAK //Livery #4 CASE BCV_GREEN_COLOUR iVariation = 4 BREAK //Livery #5 CASE BCV_BLUE_COLOUR iVariation = 5 BREAK //Livery #6 CASE BCV_BLACK_COLOUR iVariation = 6 BREAK //Livery #7 CASE BCV_WHITE_COLOUR iVariation = 7 BREAK //Livery #8 CASE BCV_COLOUR_1 iVariation = 8 BREAK //Livery #9 CASE BCV_COLOUR_2 iVariation = 9 BREAK //Livery #10 ENDSWITCH IF IS_SBV_AN_ALTERNATE_VEHICLE(sbv, siteID, g_eLastBuyableVehicleColourSelected) iAltNumber = 1 ENDIF ELSE IF IS_SBV_AN_ALTERNATE_VEHICLE(sbv, siteID, g_eLastBuyableVehicleColourSelected) iVariation = 1 ENDIF ENDIF BOOL bStarterPackItem = FALSE IF IS_SBV_A_VEHICLE_FREE_FOR_CRIMINAL_ENTERPRISE_STARTER_PACK(sbv) IF HAS_MP_CRIMINAL_ENTERPRISE_PREMIUM_OR_STARTER_ACCESS() bStarterPackItem = TRUE ENDIF ENDIF INT iItemId iItemId = GET_BA_VEHICLE_KEY_FOR_CATALOGUE(sbv, iVariation, iAltNumber, bStarterPackItem) INT iStatValue iStatValue = g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedBigAssVehicles.iBigAssVehiclesBS[(iBigAssID/32)] INT iProcessSuccess iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT /////////////////////////////////////////// /// TRANSACTION FOR BIG ASS VEHICLE INT iDoCouponHash = 0 SWITCH eDoCoupon CASE COUPON_CAR_SITE iDoCouponHash = HASH("PM_COUPON_CAR_SITE") // BREAK CASE COUPON_PLANE_SITE iDoCouponHash = HASH("PM_COUPON_PLANE_SITE") // BREAK CASE COUPON_MIL_SITE iDoCouponHash = HASH("PM_COUPON_MIL_SITE") // BREAK CASE COUPON_CAR_XMAS2017 iDoCouponHash = HASH("PO_COUPON_CAR_XMAS2017") // iPrice = 0 BREAK CASE COUPON_CAR_XMAS2018 iDoCouponHash = HASH("PO_COUPON_CAR_XMAS2018") // iPrice = 0 BREAK CASE COUPON_HELI_XMAS2018 iDoCouponHash = HASH("PO_COUPON_HELI_XMAS2018") // iPrice = 0 BREAK CASE COUPON_CAR2_XMAS2018 iDoCouponHash = HASH("PO_COUPON_CAR2_XMAS2018") // iPrice = 0 BREAK CASE COUPON_CASINO_PLANE_SITE iDoCouponHash = HASH("PM_COUPON_CASINO_PLANE_SITE") BREAK CASE COUPON_CASINO_BOAT_SITE iDoCouponHash = HASH("PM_COUPON_CASINO_BOAT_SITE") BREAK CASE COUPON_CASINO_CAR_SITE iDoCouponHash = HASH("PM_COUPON_CASINO_CAR_SITE") BREAK CASE COUPON_CASINO_CAR_SITE2 iDoCouponHash = HASH("PM_COUPON_CASINO_CAR_SITE2") BREAK CASE COUPON_CASINO_MIL_SITE iDoCouponHash = HASH("PM_COUPON_CASINO_MIL_SITE") BREAK CASE COUPON_CASINO_BIKE_SITE iDoCouponHash = HASH("PM_COUPON_CASINO_BIKE_SITE") BREAK #IF FEATURE_GEN9_EXCLUSIVE CASE COUPON_CAR_GEN9_MIGRATION iPrice = 0 BREAK #ENDIF ENDSWITCH ITEM_ACTION_TYPES eAction = NET_SHOP_ACTION_SPEND SHOP_ITEM_CATEGORIES eCatageory = CATEGORY_SERVICE_UNLOCKED INT iInventoryKey = 0 // Override yacht to use the buy vehicle action IF sbv = BV_DLC_BIG_YACHT IF NOT USE_SERVER_TRANSACTIONS() bPreviousPegasus = IS_BIG_ASS_VEHICLE_BS_SET(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_BIG_YACHT)) ELSE bPreviousPegasus = (GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_YACHT_MODEL_0) != 0) ENDIF eCatageory = CATEGORY_INVENTORY_VEHICLE iInventoryKey = GET_YACHT_INVENTORY_KEY_FOR_CATALOGUE(0) eAction = NET_SHOP_ACTION_BUY_VEHICLE ENDIF IF sbv = BV_DLC_BIG_TRUCK BOOL bProcessBigTruckBasket IF NOT bPreviousBigassVehicle CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: bProcessBigTruckBasket = TRUE, not bPreviousBigassVehicle") bProcessBigTruckBasket = TRUE ELSE IF INT_TO_ENUM(MODEL_NAMES, GET_TRUCK_CAB_FROM_SF(g_sTruckDataStruct.iCab)) != GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.eTruckModel CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: bProcessBigTruckBasket = TRUE, cab model changed") bProcessBigTruckBasket = TRUE ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: bProcessBigTruckBasket = FALSE, cab model same") bProcessBigTruckBasket = FALSE ENDIF ENDIF IF bProcessBigTruckBasket MODEL_NAMES eThisVehModel = g_sConfVssMP.vehicleSetup.eModel BOOL bThisAltVersion = TRUE //free // // GET_VEHICLE_KEY_FOR_CATALOGUE // // // // // // // // // // // // INT iAltNum = -1 INT iPriceVariation = GET_VEHICLE_MOD_PRICE_VARIATION_FOR_CATALOGUE(eThisVehModel) TEXT_LABEL_15 tlVehicleName = GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(eThisVehModel) TEXT_LABEL_63 tlCategoryKey IF bThisAltVersion GENERATE_KEY_FOR_SHOP_CATALOGUE(tlCategoryKey, tlVehicleName, eThisVehModel, SHOP_TYPE_CARMOD, 1, iPriceVariation, iAltNum, DEFAULT, DEFAULT, bStarterPackItem) ELSE GENERATE_KEY_FOR_SHOP_CATALOGUE(tlCategoryKey, tlVehicleName, eThisVehModel, SHOP_TYPE_CARMOD, 0, iPriceVariation, iAltNum, DEFAULT, DEFAULT, bStarterPackItem) ENDIF INT iTruckItemId = GET_HASH_KEY(tlCategoryKey) PRINTLN("[CATALOGUE_KEY] key '", tlCategoryKey, "' = ", iTruckItemId) // // // // // // // // // // // // // // // // // // // // // // // // INT iTruckInventoryKey = GET_VEHICLE_INVENTORY_KEY_FOR_CATALOGUE(confMpSlotIndex) INT iTruckProcessSuccess = -1 /////////////////////////////////////////// /// TRANSACTION FOR TRUCK WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iTruckProcessSuccess, 0, ENUM_TO_INT(g_sConfVssMP.vehicleSetup.eModel), CATEGORY_INVENTORY_VEHICLE, NET_SHOP_ACTION_BUY_VEHICLE, iTruckItemId, iTruckInventoryKey, iDoCouponHash, DEFAULT, DEFAULT, vi) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) SWITCH iTruckProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: truck cab:failed to process transaction") CLEAR_BIG_ASS_VEHICLE_BS(iBigAssID) reason = VSFR_NOT_SAFE IF DOES_ENTITY_EXIST(vi) DELETE_VEHICLE(vi) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) confMpSlotIndex = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) RETURN FALSE BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: truck cab:success!!") BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: truck cab:unknown iTruckProcessSuccess: \"", iTruckProcessSuccess, "\"") BREAK ENDSWITCH IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD ENDIF eCatageory = CATEGORY_INVENTORY_VEHICLE iInventoryKey = GET_TRUCK_INVENTORY_KEY_FOR_CATALOGUE(0) eAction = NET_SHOP_ACTION_BUY_VEHICLE ENDIF IF sbv = BV_DLC_BALLISTIC_EQUIPMENT // eCatageory = CATEGORY_INVENTORY_VEHICLE // iInventoryKey = GET_BALLISTIC_EQUIPMENT_INVENTORY_KEY_FOR_CATALOGUE(0) // eAction = NET_SHOP_ACTION_BUY_VEHICLE ENDIF IF sbv = BV_DLC_BIG_PLANE BOOL bProcessBigPlaneBasket IF NOT bPreviousBigassVehicle CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: bProcessBigPlaneBasket = TRUE, not bPreviousBigassVehicle") bProcessBigPlaneBasket = TRUE ELSE // IF INT_TO_ENUM(MODEL_NAMES, GET_PLANE_CAB_FROM_SF(g_sPlaneDataStruct.iCab)) != GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.ePlaneModel // CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: bProcessBigPlaneBasket = TRUE, cab model changed") // bProcessBigPlaneBasket = TRUE // ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: bProcessBigPlaneBasket = FALSE, cab model same") bProcessBigPlaneBasket = FALSE // ENDIF ENDIF IF bProcessBigPlaneBasket MODEL_NAMES eThisVehModel = g_sConfVssMP.vehicleSetup.eModel BOOL bThisAltVersion = TRUE //free // // GET_VEHICLE_KEY_FOR_CATALOGUE // // // // // // // // // // // // INT iAltNum = -1 INT iPriceVariation = GET_VEHICLE_MOD_PRICE_VARIATION_FOR_CATALOGUE(eThisVehModel) TEXT_LABEL_15 tlVehicleName = GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(eThisVehModel) TEXT_LABEL_63 tlCategoryKey IF bThisAltVersion GENERATE_KEY_FOR_SHOP_CATALOGUE(tlCategoryKey, tlVehicleName, eThisVehModel, SHOP_TYPE_CARMOD, 1, iPriceVariation, iAltNum, DEFAULT, DEFAULT, bStarterPackItem) ELSE GENERATE_KEY_FOR_SHOP_CATALOGUE(tlCategoryKey, tlVehicleName, eThisVehModel, SHOP_TYPE_CARMOD, 0, iPriceVariation, iAltNum, DEFAULT, DEFAULT, bStarterPackItem) ENDIF INT iPlaneItemId = GET_HASH_KEY(tlCategoryKey) PRINTLN("[CATALOGUE_KEY] key '", tlCategoryKey, "' = ", iPlaneItemId) // // // // // // // // // // // // // // // // // // // // // // // // INT iPlaneInventoryKey = GET_VEHICLE_INVENTORY_KEY_FOR_CATALOGUE(confMpSlotIndex) INT iPlaneProcessSuccess = -1 /////////////////////////////////////////// /// TRANSACTION FOR BIG PLANE WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iPlaneProcessSuccess, 0, ENUM_TO_INT(g_sConfVssMP.vehicleSetup.eModel), CATEGORY_INVENTORY_VEHICLE, NET_SHOP_ACTION_BUY_VEHICLE, iPlaneItemId, iPlaneInventoryKey, iDoCouponHash, DEFAULT, DEFAULT, vi) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) SWITCH iPlaneProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: plane cab:failed to process transaction") CLEAR_BIG_ASS_VEHICLE_BS(iBigAssID) reason = VSFR_NOT_SAFE IF DOES_ENTITY_EXIST(vi) DELETE_VEHICLE(vi) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) confMpSlotIndex = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) RETURN FALSE BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: plane cab:success!!") BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: plane cab:unknown iPlaneProcessSuccess: \"", iPlaneProcessSuccess, "\"") BREAK ENDSWITCH IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD ENDIF eCatageory = CATEGORY_INVENTORY_VEHICLE iInventoryKey = GET_PLANE_INVENTORY_KEY_FOR_CATALOGUE(0) eAction = NET_SHOP_ACTION_BUY_VEHICLE ENDIF IF sbv = BV_DLC_HACKER_TRUCK BOOL bProcessHackerTruckBasket IF NOT bPreviousBigassVehicle CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: bProcessHackerTruckBasket = TRUE, not bPreviousBigassVehicle") bProcessHackerTruckBasket = TRUE ELSE // IF IINT_TO_ENUM(MODEL_NAMES, GET_HACKER_TRUCK_CAB_FROM_SF(g_sHackerTruckDataStruct.iCab)) != GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.eHackerTruckModel // CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: bProcessHackerTruckBasket = TRUE, cab model changed") // bProcessHackerTruckBasket = TRUE // ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: bProcessHackerTruckBasket = FALSE, cab model same") bProcessHackerTruckBasket = FALSE // ENDIF ENDIF IF bProcessHackerTruckBasket MODEL_NAMES eThisVehModel = g_sConfVssMP.vehicleSetup.eModel BOOL bThisAltVersion = TRUE //free // // GET_VEHICLE_KEY_FOR_CATALOGUE // // // // // // // // // // // // INT iAltNum = -1 INT iPriceVariation = GET_VEHICLE_MOD_PRICE_VARIATION_FOR_CATALOGUE(eThisVehModel) TEXT_LABEL_15 tlVehicleName = GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(eThisVehModel) TEXT_LABEL_63 tlCategoryKey IF bThisAltVersion GENERATE_KEY_FOR_SHOP_CATALOGUE(tlCategoryKey, tlVehicleName, eThisVehModel, SHOP_TYPE_CARMOD, 1, iPriceVariation, iAltNum, DEFAULT, DEFAULT, bStarterPackItem) ELSE GENERATE_KEY_FOR_SHOP_CATALOGUE(tlCategoryKey, tlVehicleName, eThisVehModel, SHOP_TYPE_CARMOD, 0, iPriceVariation, iAltNum, DEFAULT, DEFAULT, bStarterPackItem) ENDIF INT iHackerTruckItemId = GET_HASH_KEY(tlCategoryKey) PRINTLN("[CATALOGUE_KEY] key '", tlCategoryKey, "' = ", iHackerTruckItemId) // // // // // // // // // // // // // // // // // // // // // // // // INT iHackerTruckInventoryKey = GET_VEHICLE_INVENTORY_KEY_FOR_CATALOGUE(confMpSlotIndex) INT iHackerTruckProcessSuccess = -1 /////////////////////////////////////////// /// TRANSACTION FOR HACKER TRUCK WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iHackerTruckProcessSuccess, 0, ENUM_TO_INT(g_sConfVssMP.vehicleSetup.eModel), CATEGORY_INVENTORY_VEHICLE, NET_SHOP_ACTION_BUY_VEHICLE, iHackerTruckItemId, iHackerTruckInventoryKey, iDoCouponHash, DEFAULT, DEFAULT, vi) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) SWITCH iHackerTruckProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: hacker truck cab:failed to process transaction") CLEAR_BIG_ASS_VEHICLE_BS(iBigAssID) reason = VSFR_NOT_SAFE IF DOES_ENTITY_EXIST(vi) DELETE_VEHICLE(vi) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) confMpSlotIndex = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) RETURN FALSE BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: hacker truck cab:success!!") BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: hacker truck cab:unknown iHackerTruckProcessSuccess: \"", iHackerTruckProcessSuccess, "\"") BREAK ENDSWITCH IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD ENDIF eCatageory = CATEGORY_INVENTORY_VEHICLE iInventoryKey = GET_HACKER_TRUCK_INVENTORY_KEY_FOR_CATALOGUE(0) eAction = NET_SHOP_ACTION_BUY_VEHICLE ENDIF #IF FEATURE_HEIST_ISLAND // Override submarine to use the buy vehicle action IF sbv = BV_IH_KOSATKA IF NOT USE_SERVER_TRANSACTIONS() bPreviousPegasus = IS_BIG_ASS_VEHICLE_BS_SET(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_IH_KOSATKA)) ELSE bPreviousPegasus = (GET_MP_INT_CHARACTER_STAT(MP_STAT_IH_SUB_OWNED) != 0) ENDIF eCatageory = CATEGORY_INVENTORY_VEHICLE iInventoryKey = GET_KOSATKA_INVENTORY_KEY_FOR_CATALOGUE(0) eAction = NET_SHOP_ACTION_BUY_VEHICLE ENDIF #ENDIF IF sbv = BV_AW_RCBANDITO // eCatageory = CATEGORY_INVENTORY_VEHICLE // iInventoryKey = GET_BALLISTIC_EQUIPMENT_INVENTORY_KEY_FOR_CATALOGUE(0) // eAction = NET_SHOP_ACTION_BUY_VEHICLE ENDIF WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, iPrice, iStatValue, eCatageory, eAction, iItemId, iInventoryKey, iDoCouponHash, DEFAULT, DEFAULT, vi, DEFAULT, DEFAULT) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: failed to process transaction") CLEAR_BIG_ASS_VEHICLE_BS(iBigAssID) reason = VSFR_NOT_SAFE IF DOES_ENTITY_EXIST(vi) DELETE_VEHICLE(vi) SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) ENDIF confMpSlotIndex = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) RETURN FALSE BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: success!!") BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: unknown iProcessSuccess: \"", iProcessSuccess, "\"") BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF GO_TO_WEBSITE(GET_VEHICLE_PURCHASE_SUCCESS_PAGE(siteID, sbv)) // Check specific vehicle website SWITCH eDoCoupon CASE COUPON_CAR_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_PLANE_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_PLANE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_MIL_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_MIL_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CAR_XMAS2017 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_XMAS2017)") iPrice = 0 BREAK CASE COUPON_CAR_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_XMAS2018)") iPrice = 0 BREAK CASE COUPON_HELI_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_HELI_XMAS2018)") iPrice = 0 BREAK CASE COUPON_CAR2_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR2_XMAS2018)") iPrice = 0 BREAK CASE COUPON_CASINO_PLANE_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_PLANE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_BOAT_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_BOAT_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_CAR_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_CAR_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_CAR_SITE2 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_CAR_SITE2)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_MIL_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_MIL_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_BIKE_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_BIKE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK #IF FEATURE_GEN9_EXCLUSIVE CASE COUPON_CAR_GEN9_MIGRATION CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_GEN9_MIGRATION)") iPrice = 0 BREAK #ENDIF ENDSWITCH MODEL_NAMES thisModel = GET_MODEL_FOR_BUYABLE_VEHICLE(sbv) IF thisModel != GET_MODEL_FOR_BUYABLE_VEHICLE(sbv) IF DOES_ENTITY_EXIST(vi) DELETE_VEHICLE(vi) SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - thisModel[", GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(thisModel), "] is different from GET_MODEL_FOR_BUYABLE_VEHICLE(", GET_LABEL_BUYABLE_VEHICLE(sbv), ")!!!") reason = VSFR_BIGASS_NOT_UNLOCKED RETURN FALSE ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - thisModel[", GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(thisModel), "] matches GET_MODEL_FOR_BUYABLE_VEHICLE(", GET_LABEL_BUYABLE_VEHICLE(sbv), ")") ENDIF IF IS_THIS_MODEL_A_BOAT(thisModel) SET_MP_BOOL_CHARACTER_STAT(MP_STAT_BOAT_ACCESS, TRUE) #IF IS_DEBUG_BUILD NET_PRINT("[RANKUP] ... MP_STAT_BOAT_ACCESS AVAILABLE ") #ENDIF ELIF IS_THIS_MODEL_A_HELI(thisModel) SET_MP_BOOL_CHARACTER_STAT(MP_STAT_HELI_ACCESS, TRUE) #IF IS_DEBUG_BUILD NET_PRINT("[RANKUP] ... MP_STAT_HELI_ACCESS AVAILABLE ") #ENDIF ELIF IS_THIS_MODEL_A_PLANE(thisModel) SET_MP_BOOL_CHARACTER_STAT(MP_STAT_PLANE_ACCESS, TRUE) #IF IS_DEBUG_BUILD NET_PRINT("[RANKUP] ... MP_STAT_PLANE_ACCESS AVAILABLE ") #ENDIF ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Special","WEB_NAVIGATION_SOUNDS_PHONE") SWITCH eDoCoupon CASE COUPON_CAR_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_SITE)") REDEEM_COUPON(COUPON_CAR_SITE) BREAK CASE COUPON_PLANE_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_PLANE_SITE)") REDEEM_COUPON(COUPON_PLANE_SITE) BREAK CASE COUPON_MIL_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_MIL_SITE)") REDEEM_COUPON(COUPON_MIL_SITE) BREAK CASE COUPON_CAR_XMAS2017 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_XMAS2017)") REDEEM_COUPON(COUPON_CAR_XMAS2017) BREAK CASE COUPON_CAR_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_XMAS2018)") REDEEM_COUPON(COUPON_CAR_XMAS2018) BREAK CASE COUPON_HELI_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_HELI_XMAS2018)") REDEEM_COUPON(COUPON_HELI_XMAS2018) BREAK CASE COUPON_CAR2_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR2_XMAS2018)") REDEEM_COUPON(COUPON_CAR2_XMAS2018) BREAK CASE COUPON_CASINO_PLANE_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_PLANE_SITE)") REDEEM_COUPON(COUPON_CASINO_PLANE_SITE) BREAK CASE COUPON_CASINO_BOAT_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_BOAT_SITE)") REDEEM_COUPON(COUPON_CASINO_BOAT_SITE) BREAK CASE COUPON_CASINO_CAR_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_CAR_SITE)") REDEEM_COUPON(COUPON_CASINO_CAR_SITE) BREAK CASE COUPON_CASINO_CAR_SITE2 CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_CAR_SITE2)") REDEEM_COUPON(COUPON_CASINO_CAR_SITE2) BREAK CASE COUPON_CASINO_MIL_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_MIL_SITE)") REDEEM_COUPON(COUPON_CASINO_MIL_SITE) BREAK CASE COUPON_CASINO_BIKE_SITE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_BIKE_SITE)") REDEEM_COUPON(COUPON_CASINO_BIKE_SITE) BREAK #IF FEATURE_GEN9_EXCLUSIVE CASE COUPON_CAR_GEN9_MIGRATION CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_GEN9_MIGRATION)") REDEEM_COUPON(COUPON_CAR_GEN9_MIGRATION) BREAK #ENDIF ENDSWITCH IF iPrice < 0 AND thisModel != eDLC_BIG_YACHT_MODEL AND thisModel != eDLC_BIG_TRUCK_MODEL AND thisModel != eDLC_BALLISTIC_EQUIPMENT_MODEL AND thisModel != eDLC_BIG_PLANE_MODEL AND !IS_SBV_A_VEHICLE_FREE_FOR_CRIMINAL_ENTERPRISE_STARTER_PACK(confSbv) AND thisModel != eDLC_HACKER_TRUCK_MODEL AND thisModel != GET_SUBMARINE_MODEL() IF DOES_ENTITY_EXIST(vi) DELETE_VEHICLE(vi) SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: free vehicle ", GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(thisModel), " $", iPrice) RETURN TRUE ENDIF IF iPrice >= 0 OR (thisModel = eDLC_BIG_TRUCK_MODEL) OR (thisModel = eDLC_BIG_PLANE_MODEL) OR IS_SBV_A_VEHICLE_FREE_FOR_CRIMINAL_ENTERPRISE_STARTER_PACK(confSbv) OR (thisModel = eDLC_HACKER_TRUCK_MODEL) OR (thisModel = GET_SUBMARINE_MODEL()) //ENUM_TO_INT(thisModel) BANK_ACCOUNT_ACTION_SOURCE_BAAC basource SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET basource = BAAC_MOTORSPORT_SITE BREAK CASE WWW_ELITASTRAVEL_COM basource = BAAC_PLANE_SITE BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM basource = BAAC_ARMY_SITE BREAK CASE WWW_DOCKTEASE_COM basource = BAAC_BOAT_SITE BREAK CASE WWW_PANDMCYCLES_COM basource = BAAC_BIKE_SITE BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM basource = BAAC_SUPERAUTO_SITE BREAK CASE WWW_BENNYSORIGINALMOTORWORKS_COM basource = BAAC_LOWRIDER_SITE BREAK CASE WWW_ARENAWAR_TV basource = BAAC_ARENA_SITE BREAK ENDSWITCH INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, iPrice) IF thisModel = eDLC_BIG_YACHT_MODEL IF (iYachtModPrice >= 0 AND g_sYachtDataStruct.iMod != GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_MOD)) OR !DOES_PLAYER_OWN_PRIVATE_YACHT(PLAYER_ID()) 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 BOOL fromBank = (NETWORK_GET_VC_BANK_BALANCE() > 0) BOOL fromBankAndWallet = (NETWORK_GET_VC_BANK_BALANCE() < iYachtModPrice) SWITCH g_sYachtDataStruct.iMod CASE 0 CASE 3 CPRINTLN(DEBUG_SHOPS, "kr_debug: yacht model = ", g_sYachtDataStruct.iMod, ", HASH(\"BIG_YACHT_0\") ", HASH("BIG_YACHT_0"), " ", PICK_STRING(fromBank, "fromBank", "not fromBank"), " + $", PICK_STRING(fromBankAndWallet, "fromBankAndWallet", "not fromBankAndWallet")) NETWORK_BUY_PROPERTY(iYachtModPrice,HASH("BIG_YACHT_0"),fromBank,fromBankAndWallet) BREAK CASE 1 CASE 4 CPRINTLN(DEBUG_SHOPS, "kr_debug: yacht model = ", g_sYachtDataStruct.iMod, ", HASH(\"BIG_YACHT_1\") ", HASH("BIG_YACHT_1"), " ", PICK_STRING(fromBank, "fromBank", "not fromBank"), " + $", PICK_STRING(fromBankAndWallet, "fromBankAndWallet", "not fromBankAndWallet")) NETWORK_BUY_PROPERTY(iYachtModPrice,HASH("BIG_YACHT_1"),fromBank,fromBankAndWallet) BREAK CASE 2 CASE 5 CPRINTLN(DEBUG_SHOPS, "kr_debug: yacht model = ", g_sYachtDataStruct.iMod, ", HASH(\"BIG_YACHT_2\") ", HASH("BIG_YACHT_2"), " ", PICK_STRING(fromBank, "fromBank", "not fromBank"), " + $", PICK_STRING(fromBankAndWallet, "fromBankAndWallet", "not fromBankAndWallet")) NETWORK_BUY_PROPERTY(iYachtModPrice,HASH("BIG_YACHT_2"),fromBank,fromBankAndWallet) BREAK DEFAULT CASSERTLN(DEBUG_SHOPS, "kr_debug: yacht model = ", g_sYachtDataStruct.iMod, " unknown???") BREAK ENDSWITCH ENDIF TEXT_LABEL_23 str IF iYachtLightingPrice > 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 BOOL fromBank = (NETWORK_GET_VC_BANK_BALANCE() > 0) BOOL fromBankAndWallet = (NETWORK_GET_VC_BANK_BALANCE() < iYachtLightingPrice) str = "BIG_YACHT_LIGHT_" //range 0 - 11 str += g_sYachtDataStruct.iLighting CPRINTLN(DEBUG_SHOPS, "kr_debug: yacht light = ", g_sYachtDataStruct.iLighting, ", GET_HASH_KEY(\"", str, "\") ", GET_HASH_KEY(str), " $", iYachtLightingPrice) NETWORK_BUY_PROPERTY(iYachtLightingPrice,GET_HASH_KEY(str),fromBank,fromBankAndWallet) ENDIF IF iYachtFixturePrice > 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 BOOL fromBank = (NETWORK_GET_VC_BANK_BALANCE() > 0) BOOL fromBankAndWallet = (NETWORK_GET_VC_BANK_BALANCE() < iYachtFixturePrice) str = "BIG_YACHT_FIXT_" //range 0 - 1 str += g_sYachtDataStruct.iFixture CPRINTLN(DEBUG_SHOPS, "kr_debug: yacht fixt = ", g_sYachtDataStruct.iFixture, ", GET_HASH_KEY(\"", str, "\") ", GET_HASH_KEY(str), " $", iYachtFixturePrice) NETWORK_BUY_PROPERTY(iYachtFixturePrice,GET_HASH_KEY(str),fromBank,fromBankAndWallet) ENDIF IF iYachtFlagPrice > 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 BOOL fromBank = (NETWORK_GET_VC_BANK_BALANCE() > 0) BOOL fromBankAndWallet = (NETWORK_GET_VC_BANK_BALANCE() < iYachtFlagPrice) str = "BIG_YACHT_FLAG_" //range 0 - 45 str += g_sYachtDataStruct.iFlag CPRINTLN(DEBUG_SHOPS, "kr_debug: yacht flag = ", g_sYachtDataStruct.iFlag, ", GET_HASH_KEY(\"", str, "\") ", GET_HASH_KEY(str), " $", iYachtFlagPrice) NETWORK_BUY_PROPERTY(iYachtFlagPrice,GET_HASH_KEY(str),fromBank,fromBankAndWallet) ENDIF IF iYachtColourPrice > 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 BOOL fromBank = (NETWORK_GET_VC_BANK_BALANCE() > 0) BOOL fromBankAndWallet = (NETWORK_GET_VC_BANK_BALANCE() < iYachtColourPrice) str = "BIG_YACHT_COL_" //range 0 - 15 str += g_sYachtDataStruct.iColour CPRINTLN(DEBUG_SHOPS, "kr_debug: yacht col = ", g_sYachtDataStruct.iColour, ", GET_HASH_KEY(\"", str, "\") ", GET_HASH_KEY(str), " $", iYachtColourPrice) NETWORK_BUY_PROPERTY(iYachtColourPrice,GET_HASH_KEY(str),fromBank,fromBankAndWallet) ENDIF IF iYachtNamePrice > 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 BOOL fromBank = (NETWORK_GET_VC_BANK_BALANCE() > 0) BOOL fromBankAndWallet = (NETWORK_GET_VC_BANK_BALANCE() < iYachtNamePrice) str = "BIG_YACHT_NAME" CPRINTLN(DEBUG_SHOPS, "kr_debug: yacht name = ", g_sYachtDataStruct.tl63Name, ", GET_HASH_KEY(\"", str, "\") ", GET_HASH_KEY(str), " $", iYachtNamePrice) NETWORK_BUY_PROPERTY(iYachtNamePrice,GET_HASH_KEY(str),fromBank,fromBankAndWallet) ENDIF ELIF thisModel = eDLC_BIG_TRUCK_MODEL ARMORY_TRUCK_SECTION_TYPE_ENUM eSection1 = INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection1)) ARMORY_TRUCK_SECTION_TYPE_ENUM eSection2 = INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection2)) ARMORY_TRUCK_SECTION_TYPE_ENUM eSection3 = INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection3)) VALIDATE_TRUCK_EMPTY_SECTIONS(eSection1, eSection2, eSection3) ARMORY_TRUCK_SECTION_TINT_ENUM eTint = INT_TO_ENUM(ARMORY_TRUCK_SECTION_TINT_ENUM, GET_TRUCK_SECTION_TINT_FROM_SF(g_sTruckDataStruct.iColour)) SPENT_ON_TRUCK data //Check if we're trading of just buying IF NOT bPreviousBigassVehicle IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 BOOL bUpgradeTrailer = FALSE IF (sTruck_price_struct.iCabPrice >= 0) data.m_vehicle = g_sTruckDataStruct.iCab data.m_vehicle_amount = sTruck_price_struct.iCabPrice ENDIF // IF (sTruck_price_struct.iTrailerPrice >= 0) // data.m_trailer = 0 // data.m_trailer_amount = 0 // ENDIF IF (sTruck_price_struct.iSection1Price >= 0) data.m_slot1 = ENUM_TO_INT(eSection1) data.m_slot1_amount = sTruck_price_struct.iSection1Price bUpgradeTrailer = TRUE ENDIF IF (sTruck_price_struct.iSection2Price >= 0) data.m_slot2 = ENUM_TO_INT(eSection2) data.m_slot2_amount = sTruck_price_struct.iSection2Price bUpgradeTrailer = TRUE ENDIF IF (sTruck_price_struct.iSection3Price >= 0) data.m_slot3 = ENUM_TO_INT(eSection3) data.m_slot3_amount = sTruck_price_struct.iSection3Price bUpgradeTrailer = TRUE ENDIF IF (sTruck_price_struct.iColourPrice >= 0) data.m_colorscheme = ENUM_TO_INT(eTint) data.m_colorscheme_amount = sTruck_price_struct.iColourPrice bUpgradeTrailer = TRUE ENDIF CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Bought truck for $", iPrice) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_vehicle:", data.m_vehicle, " m_vehicle_amount:$", data.m_vehicle_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_trailer:", data.m_trailer, " m_trailer_amount:$", data.m_trailer_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_slot1:", data.m_slot1, " m_slot1_amount:$", data.m_slot1_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_slot2:", data.m_slot2, " m_slot2_amount:$", data.m_slot2_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_slot3:", data.m_slot3, " m_slot3_amount:$", data.m_slot3_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_colorscheme:", data.m_colorscheme, " m_colorscheme_amount:$", data.m_colorscheme_amount) NETWORK_SPENT_BUY_TRUCK(iPrice, FALSE, TRUE, data) UNLOCK_CLOTHING_AWARD(CLOTHING_AWARD_PURCH_TRUCK) IF bUpgradeTrailer UNLOCK_CLOTHING_AWARD(CLOTHING_AWARD_PURCH_UPGRADETRAILER) ENDIF ELSE // IF USE_SERVER_TRANSACTIONS() // CPRINTLN(DEBUG_INTERNET, "[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, "DO_BIGASS_VEHICLE_BUY: Trading the business is earning the player: ", (iOwnedtruckValue * -1)) // NETWORK_EARN_FROM_PROPERTY(iOwnedtruckValue, GET_HASH_KEY(GET_truck_NAME_FROM_ID(eTradeIntruck))) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 BOOL bUpgradeTrailer = FALSE IF (sTruck_price_struct.iCabPrice >= 0) data.m_vehicle = g_sTruckDataStruct.iCab data.m_vehicle_amount = sTruck_price_struct.iCabPrice bUpgradeTrailer = TRUE ENDIF IF (eSection1 != GET_ARMORY_TRUCK_SECTION_TYPE_STAT(ATS_FIRST_SECTION)) data.m_slot1 = ENUM_TO_INT(eSection1) data.m_slot1_amount = sTruck_price_struct.iSection1Price bUpgradeTrailer = TRUE ENDIF IF (eSection2 != GET_ARMORY_TRUCK_SECTION_TYPE_STAT(ATS_SECOND_SECTION)) ARMORY_TRUCK_SECTION_TYPE_ENUM eSavedSection2 = GET_ARMORY_TRUCK_SECTION_TYPE_STAT(ATS_SECOND_SECTION) IF ((eSection2 = AT_ST_EMPTY_SINGLE) OR (eSection2 = AT_ST_EMPTY_DOUBLE) OR (eSection2 = AT_ST_EMPTY_SINGLE_DOOR)) AND ((eSavedSection2 = AT_ST_EMPTY_SINGLE) OR (eSavedSection2 = AT_ST_EMPTY_DOUBLE) OR (eSavedSection2 = AT_ST_EMPTY_SINGLE_DOOR)) // ELSE data.m_slot2 = ENUM_TO_INT(eSection2) data.m_slot2_amount = sTruck_price_struct.iSection2Price bUpgradeTrailer = TRUE ENDIF ENDIF IF (eSection3 != GET_ARMORY_TRUCK_SECTION_TYPE_STAT(ATS_THIRD_SECTION)) ARMORY_TRUCK_SECTION_TYPE_ENUM eSavedSection3 = GET_ARMORY_TRUCK_SECTION_TYPE_STAT(ATS_THIRD_SECTION) IF ((eSection3 = AT_ST_EMPTY_SINGLE) OR (eSection3 = AT_ST_EMPTY_DOUBLE) OR (eSection3 = AT_ST_EMPTY_SINGLE_DOOR)) AND ((eSavedSection3 = AT_ST_EMPTY_SINGLE) OR (eSavedSection3 = AT_ST_EMPTY_DOUBLE) OR (eSavedSection3 = AT_ST_EMPTY_SINGLE_DOOR)) // ELSE data.m_slot3 = ENUM_TO_INT(eSection3) data.m_slot3_amount = sTruck_price_struct.iSection3Price bUpgradeTrailer = TRUE ENDIF ENDIF IF (eTint != GET_ARMORY_TRUCK_SECTION_TINT_STAT(ATS_FIRST_SECTION)) data.m_colorscheme = ENUM_TO_INT(eTint) data.m_colorscheme_amount = sTruck_price_struct.iColourPrice bUpgradeTrailer = TRUE ENDIF CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Renovating truck to $", iPrice) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_vehicle:", data.m_vehicle, " m_vehicle_amount:$", data.m_vehicle_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_trailer:", data.m_trailer, " m_trailer_amount:$", data.m_trailer_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_slot1:", data.m_slot1, " m_slot1_amount:$", data.m_slot1_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_slot2:", data.m_slot2, " m_slot2_amount:$", data.m_slot2_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_slot3:", data.m_slot3, " m_slot3_amount:$", data.m_slot3_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_colorscheme:", data.m_colorscheme, " m_colorscheme_amount:$", data.m_colorscheme_amount) NETWORK_SPENT_UPGRADE_TRUCK(iPrice, FALSE, TRUE, data) IF bUpgradeTrailer UNLOCK_CLOTHING_AWARD(CLOTHING_AWARD_PURCH_UPGRADETRAILER) ENDIF ENDIF ELIF thisModel = eDLC_BIG_PLANE_MODEL SPENT_ON_TILTROTOR data //Check if we're trading of just buying IF NOT bPreviousBigassVehicle IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 TEXT_LABEL_23 str23 = "" IF (sPlane_price_struct.iGunTurretPrice >= 0) str23 = GET_ARMORY_AIRCRAFT_MOD_NAME(AAM_GUN_TURRET) str23 += "_" str23 += ENUM_TO_INT(g_sPlaneDataStruct.iGunTurret) data.m_turret = GET_HASH_KEY(str23) data.m_turret_amount = sPlane_price_struct.iGunTurretPrice ENDIF IF (sPlane_price_struct.iVehShopPrice >= 0) str23 = GET_ARMORY_AIRCRAFT_MOD_NAME(AAM_VEHICLE_WORKSHOP) str23 += "_" str23 += ENUM_TO_INT(g_sPlaneDataStruct.iVehShop) data.m_vehicleworkshop = GET_HASH_KEY(str23) data.m_vehicleworkshop_amount = sPlane_price_struct.iVehShopPrice ENDIF IF (sPlane_price_struct.iWeaShopPrice >= 0) str23 = GET_ARMORY_AIRCRAFT_MOD_NAME(AAM_WEAPON_WORKSHOP) str23 += "_" str23 += ENUM_TO_INT(g_sPlaneDataStruct.iWeaShop) data.m_weaponworkshop = GET_HASH_KEY(str23) data.m_weaponworkshop_amount = sPlane_price_struct.iWeaShopPrice ENDIF IF (sPlane_price_struct.iInteriorPrice >= 0) str23 = GET_ARMORY_AIRCRAFT_MOD_NAME(AAM_INTERIOR) str23 += "_" str23 += ENUM_TO_INT(GET_PLANE_SECTION_TINT_FROM_SF(g_sPlaneDataStruct.iInterior)) data.m_interiortint = GET_HASH_KEY(str23) data.m_interiortint_amount = sPlane_price_struct.iInteriorPrice ENDIF IF (sPlane_price_struct.iAvengerPrice >= 0) data.m_aircraft = ENUM_TO_INT(INT_TO_ENUM(MODEL_NAMES, g_sPlaneDataStruct.iAvenger)) data.m_aircraft_amount = sPlane_price_struct.iAvengerPrice ENDIF CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Bought plane for $", iPrice) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_aircraft:", data.m_aircraft, " m_aircraft_amount:$", data.m_aircraft_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_turret:", data.m_turret, " m_turret_amount:$", data.m_turret_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_vehicleworkshop:", data.m_vehicleworkshop, " m_vehicleworkshop_amount:$", data.m_vehicleworkshop_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_weaponworkshop:", data.m_weaponworkshop, " m_weaponworkshop_amount:$", data.m_weaponworkshop_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_interiortint:", data.m_interiortint, " m_interiortint_amount:$", data.m_interiortint_amount) NETWORK_SPENT_BUY_TILTROTOR(iPrice, FALSE, TRUE, data) ELSE IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 TEXT_LABEL_23 str23 = "" IF (sPlane_price_struct.iGunTurretPrice >= 0) str23 = GET_ARMORY_AIRCRAFT_MOD_NAME(AAM_GUN_TURRET) str23 += "_" str23 += ENUM_TO_INT(g_sPlaneDataStruct.iGunTurret) data.m_turret = GET_HASH_KEY(str23) data.m_turret_amount = sPlane_price_struct.iGunTurretPrice ENDIF IF (sPlane_price_struct.iVehShopPrice >= 0) str23 = GET_ARMORY_AIRCRAFT_MOD_NAME(AAM_VEHICLE_WORKSHOP) str23 += "_" str23 += ENUM_TO_INT(g_sPlaneDataStruct.iVehShop) data.m_vehicleworkshop = GET_HASH_KEY(str23) data.m_vehicleworkshop_amount = sPlane_price_struct.iVehShopPrice ENDIF IF (sPlane_price_struct.iWeaShopPrice >= 0) str23 = GET_ARMORY_AIRCRAFT_MOD_NAME(AAM_WEAPON_WORKSHOP) str23 += "_" str23 += ENUM_TO_INT(g_sPlaneDataStruct.iWeaShop) data.m_weaponworkshop = GET_HASH_KEY(str23) data.m_weaponworkshop_amount = sPlane_price_struct.iWeaShopPrice ENDIF IF (sPlane_price_struct.iInteriorPrice >= 0) str23 = GET_ARMORY_AIRCRAFT_MOD_NAME(AAM_INTERIOR) str23 += "_" str23 += ENUM_TO_INT(GET_PLANE_SECTION_TINT_FROM_SF(g_sPlaneDataStruct.iInterior)) data.m_interiortint = GET_HASH_KEY(str23) data.m_interiortint_amount = sPlane_price_struct.iInteriorPrice ENDIF IF (sPlane_price_struct.iAvengerPrice >= 0) data.m_aircraft = ENUM_TO_INT(INT_TO_ENUM(MODEL_NAMES, g_sPlaneDataStruct.iAvenger)) data.m_aircraft_amount = sPlane_price_struct.iAvengerPrice ENDIF CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Renovating plane to $", iPrice) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_aircraft:", data.m_aircraft, " m_aircraft_amount:$", data.m_aircraft_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_turret:", data.m_turret, " m_turret_amount:$", data.m_turret_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_vehicleworkshop:", data.m_vehicleworkshop, " m_vehicleworkshop_amount:$", data.m_vehicleworkshop_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_weaponworkshop:", data.m_weaponworkshop, " m_weaponworkshop_amount:$", data.m_weaponworkshop_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_interiortint:", data.m_interiortint, " m_interiortint_amount:$", data.m_interiortint_amount) NETWORK_SPENT_UPGRADE_TILTROTOR(iPrice, FALSE, TRUE, data) ENDIF ELIF thisModel = eDLC_BALLISTIC_EQUIPMENT_MODEL 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 BOOL fromBank = (NETWORK_GET_VC_BANK_BALANCE() > 0) BOOL fromBankAndWallet = (NETWORK_GET_VC_BANK_BALANCE() < iPrice) INT colorHash = 0 NETWORK_BUY_ITEM(iPrice,ENUM_TO_INT(thisModel),PURCHASE_CLOTHES,1,fromBank,GET_LABEL_BUYABLE_VEHICLE(sbv),ENUM_TO_INT(basource),0,colorHash,fromBankAndWallet)//ENUM_TO_INT(sbv) UNLOCK_CLOTHING_AWARD(CLOTHING_AWARD_PURCH_BALLISTIC) SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BAEQ2A) ELIF thisModel = eDLC_HACKER_TRUCK_MODEL INT iDecalSF = GET_HACKER_TRUCK_DECAL_FROM_SF(g_sHackerTruckDataStruct.iDecal) INT iTintSF = GET_HACKER_TRUCK_TINT_FROM_SF(g_sHackerTruckDataStruct.iTint) INT iMissileLauncher = g_sHackerTruckDataStruct.iMissileLauncher INT iDroneStation = g_sHackerTruckDataStruct.iDroneStation INT iWeaShop = g_sHackerTruckDataStruct.iWeaShop INT iVehShop = g_sHackerTruckDataStruct.iVehShop STRUCT_SPENT_ON_HACKER_TRUCK data //Check if we're trading of just buying IF NOT bPreviousBigassVehicle IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 IF (sHacker_truck_price_struct.iCabPrice >= 0) data.m_truck = ENUM_TO_INT(INT_TO_ENUM(MODEL_NAMES, g_sHackerTruckDataStruct.iCab)) data.m_truck_amount = sHacker_truck_price_struct.iCabPrice ENDIF IF (sHacker_truck_price_struct.iDecalPrice >= 0) data.m_pattern = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DECAL, iDecalSF)) data.m_pattern_amount = sHacker_truck_price_struct.iDecalPrice ENDIF IF (sHacker_truck_price_struct.iTintPrice >= 0) data.m_tint = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_TINT, iTintSF)) data.m_tint_amount = sHacker_truck_price_struct.iTintPrice ENDIF IF (sHacker_truck_price_struct.iMissileLauncherPrice >= 0) data.m_missileLauncher = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_MISSILE_LAUNCHER, iMissileLauncher)) data.m_missileLauncher_amount = sHacker_truck_price_struct.iMissileLauncherPrice ENDIF IF (sHacker_truck_price_struct.iDroneStationPrice >= 0) data.m_droneStation = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DRONE_STATION, iDroneStation)) data.m_droneStation_amount = sHacker_truck_price_struct.iDroneStationPrice ENDIF IF (sHacker_truck_price_struct.iWeaShopPrice >= 0) data.m_weaponWorkshop = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_WEAPON_STATION, iWeaShop)) data.m_weaponWorkshop_amount = sHacker_truck_price_struct.iWeaShopPrice ENDIF IF (sHacker_truck_price_struct.iVehShopPrice >= 0) data.m_bikeWorkshop = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_MOTORCYCLE_WORKSHOP, iVehShop)) data.m_bikeWorkshop_amount = sHacker_truck_price_struct.iVehShopPrice ENDIF CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Bought hacker truck for $", iPrice) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_truck:", data.m_truck, " m_truck_amount:$", data.m_truck_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_tint:", data.m_tint, " m_tint_amount:$", data.m_tint_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_TINT, iTintSF)) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_pattern:", data.m_pattern, " m_pattern_amount:$", data.m_pattern_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DECAL, iDecalSF)) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_missileLauncher:", data.m_missileLauncher, " m_missileLauncher_amount:$", data.m_missileLauncher_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_MISSILE_LAUNCHER, iMissileLauncher)) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_droneStation:", data.m_droneStation, " m_droneStation_amount:$", data.m_droneStation_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DRONE_STATION, iDroneStation)) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_weaponWorkshop:", data.m_weaponWorkshop, " m_weaponWorkshop_amount:$", data.m_weaponWorkshop_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_WEAPON_STATION, iWeaShop)) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_bikeWorkshop:", data.m_bikeWorkshop, " m_bikeWorkshop_amount:$", data.m_bikeWorkshop_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_MOTORCYCLE_WORKSHOP, iVehShop)) NETWORK_SPENT_PURCHASE_HACKER_TRUCK(iPrice, data, FALSE, TRUE) SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_HACKT2) ELSE IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 IF (sHacker_truck_price_struct.iCabPrice >= 0) data.m_truck = ENUM_TO_INT(INT_TO_ENUM(MODEL_NAMES, g_sHackerTruckDataStruct.iCab)) data.m_truck_amount = sHacker_truck_price_struct.iCabPrice ENDIF IF (sHacker_truck_price_struct.iDecalPrice >= 0) data.m_pattern = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DECAL, iDecalSF)) data.m_pattern_amount = sHacker_truck_price_struct.iDecalPrice ENDIF IF (sHacker_truck_price_struct.iTintPrice >= 0) data.m_tint = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_TINT, iTintSF)) data.m_tint_amount = sHacker_truck_price_struct.iTintPrice ENDIF IF (sHacker_truck_price_struct.iMissileLauncherPrice >= 0) data.m_missileLauncher = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_MISSILE_LAUNCHER, iMissileLauncher)) data.m_missileLauncher_amount = sHacker_truck_price_struct.iMissileLauncherPrice ENDIF IF (sHacker_truck_price_struct.iDroneStationPrice >= 0) data.m_droneStation = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DRONE_STATION, iDroneStation)) data.m_droneStation_amount = sHacker_truck_price_struct.iDroneStationPrice ENDIF IF (sHacker_truck_price_struct.iWeaShopPrice >= 0) data.m_weaponWorkshop = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_WEAPON_STATION, iWeaShop)) data.m_weaponWorkshop_amount = sHacker_truck_price_struct.iWeaShopPrice ENDIF IF (sHacker_truck_price_struct.iVehShopPrice >= 0) data.m_bikeWorkshop = GET_HASH_KEY(GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_MOTORCYCLE_WORKSHOP, iVehShop)) data.m_bikeWorkshop_amount = sHacker_truck_price_struct.iVehShopPrice ENDIF CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Renovating hacker truck to $", iPrice) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_truck:", data.m_truck, " m_truck_amount:$", data.m_truck_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_tint:", data.m_tint, " m_tint_amount:$", data.m_tint_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_TINT, iTintSF)) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_pattern:", data.m_pattern, " m_pattern_amount:$", data.m_pattern_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DECAL, iDecalSF)) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_missileLauncher:", data.m_missileLauncher, " m_missileLauncher_amount:$", data.m_missileLauncher_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_MISSILE_LAUNCHER, iMissileLauncher)) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_droneStation:", data.m_droneStation, " m_droneStation_amount:$", data.m_droneStation_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_DRONE_STATION, iDroneStation)) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_weaponWorkshop:", data.m_weaponWorkshop, " m_weaponWorkshop_amount:$", data.m_weaponWorkshop_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_WEAPON_STATION, iWeaShop)) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: m_bikeWorkshop:", data.m_bikeWorkshop, " m_bikeWorkshop_amount:$", data.m_bikeWorkshop_amount, " ", GET_HACKER_TRUCK_MOD_NAME_FROM_ID(eHACKER_TRUCK_MOD_MOTORCYCLE_WORKSHOP, iVehShop)) NETWORK_SPENT_UPGRADE_HACKER_TRUCK(iPrice, data, FALSE, TRUE) ENDIF #IF FEATURE_HEIST_ISLAND ELIF thisModel = GET_SUBMARINE_MODEL() // ----- TELEMETRY SPEND ----- STRUCT_BUY_SUB sSubData // Default values are -1, when they should be 0. Easier to change them via script at this stage. sSubData.submarine_amount = 0 sSubData.color = 0 sSubData.color_amount = 0 sSubData.flag = 0 sSubData.flag_amount = 0 sSubData.anti_aircraft_amount = 0 sSubData.missile_station = 0 sSubData.missile_station_amount = 0 sSubData.sonar = 0 sSubData.sonar_amount = 0 sSubData.weapon_workshop = 0 sSubData.weapon_workshop_amount = 0 sSubData.iavisa = 0 sSubData.avisa_pool_amount = 0 sSubData.iseasparrow = 0 sSubData.seasparrow_pool_amount = 0 INT iKosatkaColourSF = GET_KOSATKA_COLOUR_FROM_SF(g_sKosatkaDataStruct.iColour) // 0 - 15 INT iKosatkaFlagSF = GET_KOSATKA_FLAG_FROM_SF(g_sKosatkaDataStruct.iFlag) // 0 - 49 INT iKosatkaMissilesSF = g_sKosatkaDataStruct.iMissiles // 0 - 1 INT iKosatkaSonarSF = g_sKosatkaDataStruct.iSonar // 0 - 1 INT iKosatkaWeaShopSF = g_sKosatkaDataStruct.iWeaShop // 0 - 1 INT iKosatkaSeaSparrow2SF = g_sKosatkaDataStruct.iSeaSparrow2 // 0 - 1 INT iKosatkaAvisaSF = g_sKosatkaDataStruct.iAvisa // 0 - 1 IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED") NET_GAMESERVER_SET_TELEMETRY_NONCE_SEED(GET_CASH_TRANSACTION_ID_FROM_INDEX(GET_BASKET_TRANSACTION_SCRIPT_INDEX())) ENDIF // If buying for the first time, pass in data for everything (purchased or not purchased). IF NOT bPreviousBigassVehicle // ----- Kosatka ----- IF (sKosatka_price_struct.iOwnedPrice >= 0) sSubData.submarine_amount = sKosatka_price_struct.iOwnedPrice ENDIF // ----- Colour ----- IF (sKosatka_price_struct.iColourPrice >= 0) sSubData.color = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_COLOUR, iKosatkaColourSF)) sSubData.color_amount = sKosatka_price_struct.iColourPrice ENDIF // ----- Flag ----- IF (sKosatka_price_struct.iFlagPrice >= 0) sSubData.flag = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_FLAG, iKosatkaFlagSF)) sSubData.flag_amount = sKosatka_price_struct.iFlagPrice ENDIF // ----- Sonar ----- IF (sKosatka_price_struct.iSonarPrice >= 0) sSubData.sonar = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_SONAR, iKosatkaSonarSF)) sSubData.sonar_amount = sKosatka_price_struct.iSonarPrice ENDIF // ----- Missiles ----- IF (sKosatka_price_struct.iMissilesPrice >= 0) sSubData.missile_station = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_MISSILES, iKosatkaMissilesSF)) sSubData.missile_station_amount = sKosatka_price_struct.iMissilesPrice ENDIF // ----- Weapon Workshop ----- IF (sKosatka_price_struct.iWeaShopPrice >= 0) sSubData.weapon_workshop = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_WEAPON_STATION, iKosatkaWeaShopSF)) sSubData.weapon_workshop_amount = sKosatka_price_struct.iWeaShopPrice ENDIF // ----- Avisa ----- IF (sKosatka_price_struct.iAvisaPrice >= 0) sSubData.iavisa = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_AVISA, iKosatkaAvisaSF)) sSubData.avisa_pool_amount = sKosatka_price_struct.iAvisaPrice ENDIF // ----- Sparrow ----- IF (sKosatka_price_struct.iSeaSparrow2Price >= 0) sSubData.iseasparrow = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_SEASPARROW2, iKosatkaSeaSparrow2SF)) sSubData.seasparrow_pool_amount = sKosatka_price_struct.iSeaSparrow2Price ENDIF #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_INTERNET, "***** DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - SPEND - BUY *****") CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.submarine_amount: ", sSubData.submarine_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.color: ", sSubData.color) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.color_amount: ", sSubData.color_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.flag: ", sSubData.flag) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.flag_amount: ", sSubData.flag_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.sonar: ", sSubData.sonar) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.sonar_amount: ", sSubData.sonar_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.missile_station: ", sSubData.missile_station) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.missile_station_amount: ", sSubData.missile_station_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.weapon_workshop: ", sSubData.weapon_workshop) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.weapon_workshop_amount: ", sSubData.weapon_workshop_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.iavisa: ", sSubData.iavisa) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.avisa_pool_amount: ", sSubData.avisa_pool_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.iseasparrow: ", sSubData.iseasparrow) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.seasparrow_pool_amount: ", sSubData.seasparrow_pool_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - iPrice: ", iPrice) CPRINTLN(DEBUG_INTERNET, "") #ENDIF NETWORK_SPEND_BUY_SUB(iPrice, FALSE, TRUE, sSubData) ELSE // If renovating, only pass in data for the add-ons that are being purchased, but still pass in the amount (purchased or not). // ----- Kosatka ----- IF (sKosatka_price_struct.iOwnedPrice >= 0) sSubData.submarine_amount = sKosatka_price_struct.iOwnedPrice ENDIF // ----- Colour ----- INT iKosatkaStoredColour = GET_PACKED_STAT_INT(PACKED_MP_INT_KOSATKA_COLOUR) IF (iKosatkaColourSF != iKosatkaStoredColour) OR (sKosatka_price_struct.iColourPrice > 0) sSubData.color = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_COLOUR, iKosatkaColourSF)) ENDIF IF (sKosatka_price_struct.iColourPrice >= 0) sSubData.color_amount = sKosatka_price_struct.iColourPrice ENDIF // ----- Flag ----- INT iKosatkaStoredFlag = GET_PACKED_STAT_INT(PACKED_MP_INT_KOSATKA_FLAG) IF (iKosatkaFlagSF != iKosatkaStoredFlag) OR (sKosatka_price_struct.iFlagPrice > 0) sSubData.flag = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_FLAG, iKosatkaFlagSF)) ENDIF IF (sKosatka_price_struct.iFlagPrice >= 0) sSubData.flag_amount = sKosatka_price_struct.iFlagPrice ENDIF // ----- Sonar ----- INT iKosatkaStoredSonar = GET_PACKED_STAT_INT(PACKED_MP_INT_KOSATKA_SONAR) IF (iKosatkaSonarSF != iKosatkaStoredSonar) OR (sKosatka_price_struct.iSonarPrice > 0) sSubData.sonar = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_SONAR, iKosatkaSonarSF)) ENDIF IF (sKosatka_price_struct.iSonarPrice >= 0) sSubData.sonar_amount = sKosatka_price_struct.iSonarPrice ENDIF // ----- Missiles ----- INT iKosatkaStoredMissiles = GET_PACKED_STAT_INT(PACKED_MP_INT_KOSATKA_GUIDED_MISSILES) IF (iKosatkaMissilesSF != iKosatkaStoredMissiles) OR (sKosatka_price_struct.iMissilesPrice > 0) sSubData.missile_station = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_MISSILES, iKosatkaMissilesSF)) ENDIF IF (sKosatka_price_struct.iMissilesPrice >= 0) sSubData.missile_station_amount = sKosatka_price_struct.iMissilesPrice ENDIF // ----- Weapon Workshop ----- INT iKosatkaStoredWeaShop = GET_PACKED_STAT_INT(PACKED_MP_INT_KOSATKA_WEAPON_WORKSHOP) IF (iKosatkaWeaShopSF != iKosatkaStoredWeaShop) OR (sKosatka_price_struct.iWeaShopPrice > 0) sSubData.weapon_workshop = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_WEAPON_STATION, iKosatkaWeaShopSF)) ENDIF IF (sKosatka_price_struct.iWeaShopPrice >= 0) sSubData.weapon_workshop_amount = sKosatka_price_struct.iWeaShopPrice ENDIF // ----- Avisa ----- INT iKosatkaStoredAvisa = GET_PACKED_STAT_INT(PACKED_MP_INT_KOSATKA_AVISA) IF (iKosatkaAvisaSF != iKosatkaStoredAvisa) OR (sKosatka_price_struct.iAvisaPrice > 0) sSubData.iavisa = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_AVISA, iKosatkaAvisaSF)) ENDIF IF (sKosatka_price_struct.iAvisaPrice >= 0) sSubData.avisa_pool_amount = sKosatka_price_struct.iAvisaPrice ENDIF // ----- Sparrow ----- INT iKosatkaStoredSparrow = GET_PACKED_STAT_INT(PACKED_MP_INT_KOSATKA_SEASPARROW2) IF (iKosatkaSeaSparrow2SF != iKosatkaStoredSparrow) OR (sKosatka_price_struct.iSeaSparrow2Price > 0) sSubData.iseasparrow = GET_HASH_KEY(GET_KOSATKA_MOD_NAME_FROM_ID(eKOSATKA_MOD_SEASPARROW2, iKosatkaSeaSparrow2SF)) ENDIF IF (sKosatka_price_struct.iSeaSparrow2Price >= 0) sSubData.seasparrow_pool_amount = sKosatka_price_struct.iSeaSparrow2Price ENDIF #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_INTERNET, "***** DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - SPEND - RENOVATE *****") CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.submarine_amount: ", sSubData.submarine_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.color: ", sSubData.color) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.color_amount: ", sSubData.color_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.flag: ", sSubData.flag) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.flag_amount: ", sSubData.flag_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.sonar: ", sSubData.sonar) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.sonar_amount: ", sSubData.sonar_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.missile_station: ", sSubData.missile_station) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.missile_station_amount: ", sSubData.missile_station_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.weapon_workshop: ", sSubData.weapon_workshop) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.weapon_workshop_amount: ", sSubData.weapon_workshop_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.iavisa: ", sSubData.iavisa) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.avisa_pool_amount: ", sSubData.avisa_pool_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.iseasparrow: ", sSubData.iseasparrow) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - sSubData.seasparrow_pool_amount: ", sSubData.seasparrow_pool_amount) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: Kosatka - TELEMETRY - iPrice: ", iPrice) CPRINTLN(DEBUG_INTERNET, "") #ENDIF NETWORK_SPEND_UPGRADE_SUB(iPrice, FALSE, TRUE, sSubData) ENDIF #ENDIF ELSE 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 BOOL fromBank = (NETWORK_GET_VC_BANK_BALANCE() > 0) BOOL fromBankAndWallet = (NETWORK_GET_VC_BANK_BALANCE() < iPrice) INT colorHash = 0 INT iSVMIndex = GET_SVM_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) INT iWVMIndex = GET_WVM_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) INT iWAMIndex = WAM_GET_STEAL_MISSION_UNLOCK_COUNT_FROM_VEHICLE_MODEL(g_sConfVssMP.vehicleSetup.eModel) INT iFDSSlot = GET_FDS_VEHICLE_SLOT(g_sConfVssMP.vehicleSetup.eModel) INT iBBSIndex = GET_BBS_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) INT iAWSIndex = GET_AWS_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) #IF FEATURE_CASINO_HEIST INT iCHIndex = GET_CH_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) #ENDIF #IF FEATURE_COPS_N_CROOKS INT iCNCIndex = GET_CNC_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) #ENDIF // #IF FEATURE_SUMMER_2020 // INT iSUMIndex = GET_SUMMER20_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) // #ENDIF INT iIHIndex = GET_ISLAND_HEIST_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) INT iTunerIndex = GET_TUNER_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) INT iFixerIndex = GET_FIXER_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) #IF FEATURE_DLC_1_2022 INT iSum2Index = GET_SUMMER_2022_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) #ENDIF IF iSVMIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value INT iMission = SVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(g_sConfVssMP.vehicleSetup.eModel) IF NOT SVM_HAS_PLAYER_UNLOCKED_MISSION(iMission) colorHash = 1 ELIF NOT SVM_HAS_THIS_MISSION_BEEN_PASSED(iMission, ciFLOW_MISSION_TYPE_SVM) //SVM_IS_SPECIAL_VEHICLE_UNLOCKED colorHash = 2 ELSE colorHash = 3 ENDIF SMV_RESET_VEHICLE_UNLOCK_INT(iMission) SET_BIT(iSVM_Unlock_Feed_Message, iMission) ELIF IS_SBV_A_VEHICLE_PREVIOUSLY_HEIST_LOCKED(sbv) //1 = for not unlocked through heist //2 = for unlocked through heist IF NOT IS_BUYABLE_VEHICLE_UNLOCKED(sbv) colorHash = 1 ELSE colorHash = 2 ENDIF ELIF iWVMIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value INT iMission = WVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(g_sConfVssMP.vehicleSetup.eModel) // IF NOT TRUE //WVM_HAS_PLAYER_UNLOCKED_MISSION(iMission) // colorHash = 1 // EL IF NOT SVM_HAS_THIS_MISSION_BEEN_PASSED(iMission, ciFLOW_MISSION_TYPE_WVM) //WVM_IS_SPECIAL_VEHICLE_UNLOCKED colorHash = 2 ELSE colorHash = 3 ENDIF SMV_RESET_VEHICLE_UNLOCK_INT(iMission) SET_BIT(iWVM_Unlock_Feed_Message, iMission) UNLOCK_CLOTHING_AWARD(CLOTHING_AWARD_PURCH_SINGLEWEAPONIZEDVEHICLE) BOOL bClothingAwardPurchAllWeaponizedVehicle = FALSE INT i, iSavedWVMBitset = 0 SET_BIT(iSavedWVMBitset, iWVMIndex) REPEAT MAX_MP_SAVED_VEHICLES i INT iSavedWVMIndex = GET_WVM_VEHICLE_INDEX(g_MpSavedVehicles[i].vehicleSetupMP.VehicleSetup.eModel) IF iSavedWVMIndex != -1 AND NOT IS_BIT_SET(iSavedWVMBitset, iSavedWVMIndex) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: purchase weaponized veh ", iWVMIndex, ", already own ", iSavedWVMIndex, ", in slot ", i, ".") SET_BIT(iSavedWVMBitset, iSavedWVMIndex) ENDIF IF (IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(DUNE3)) AND IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(HALFTRACK)) AND IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(TRAILERSMALL2)) AND IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(APC)) AND IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(TAMPA3)) AND IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(OPPRESSOR))) UNLOCK_CLOTHING_AWARD(CLOTHING_AWARD_PURCH_ALLWEAPONIZEDVEHICLE) bClothingAwardPurchAllWeaponizedVehicle = TRUE i = MAX_MP_SAVED_VEHICLES ENDIF ENDREPEAT IF NOT bClothingAwardPurchAllWeaponizedVehicle CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: purchase weaponized veh ", iWVMIndex, PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(DUNE3)), ", own DUNE3", ", dont own DUNE3"), PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(HALFTRACK)), ", own HALFTRACK", ", dont own HALFTRACK"), PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(TRAILERSMALL2)), ", own TRAILERSMALL2", ", dont own TRAILERSMALL2"), PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(APC)), ", own APC", ", dont own APC"), PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(TAMPA3)), ", own TAMPA3", ", dont own TAMPA3"), PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(OPPRESSOR)), ", own OPPRESSOR", ", dont own OPPRESSOR")) ENDIF ELIF iWAMIndex > 0 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value IF NOT WAM_IS_SPECIAL_VEHICLE_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF ELIF iFDSSlot != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value IF NOT HAS_PLAYER_UNLOCKED_GANG_OPS_VEHICLE_TRADE_PRICE(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF SET_BIT(iFDS_Unlock_Feed_Message, iFDSSlot) ELIF iBBSIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value IF NOT IS_BUSINESS_BATTLES_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF SET_BIT(iBBS_Unlock_Feed_Message, iBBSIndex) ELIF iAWSIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value IF NOT IS_ARENA_WARS_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF // SET_BIT(iBBS_Unlock_Feed_Message, iAWSIndex) IF IS_VEHICLE_AN_ARENA_CONTENDER_VEHICLE(g_sConfVssMP.vehicleSetup.eModel) // Player purchases an Arena vehicle (already supermodded): GB_SETUP_ARENA_WARS_FIRST_ARENA_VEHICLE_PURCHASED_CALL() SET_OWNED_ARENA_READY_VEHICLE_STAT(g_sConfVssMP.vehicleSetup.eModel) ELSE // Player purchases a base vehicle (can be supermodded to become Arena vehicle): GB_SETUP_ARENA_WARS_FIRST_BASE_VEHICLE_PURCHASED_CALL() ENDIF #IF FEATURE_CASINO_HEIST ELIF iCHIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value IF NOT IS_CASINO_HEIST_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF #ENDIF #IF FEATURE_COPS_N_CROOKS ELIF iCNCIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value // if not unlocked IF NOT IS_CNC_VEHICLE_REWARD_UNLOCKED() colorHash = 1 ELSE colorHash = 2 ENDIF #ENDIF // #IF FEATURE_SUMMER_2020 // ELIF iSUMIndex != -1 // //1 = used 'Buy it Now' option and had NOT completed the requisite number // // of Export missions to unlock the related Special Vehicle Mission // //2 = used 'Buy it Now' option and HAD completed the requisite number // // of Export missions to unlock the related Special Vehicle Mission // //3 = Purchased at the Securo Serve Discount value // // // if not unlocked // IF NOT IS_SUMMER20_VEHICLE_REWARD_UNLOCKED() // colorHash = 1 // ELSE // colorHash = 2 // ENDIF // #ENDIF ELIF iIHIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value // if not unlocked IF NOT IS_ISLAND_HEIST_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF ELIF iTunerIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value // if not unlocked IF NOT IS_TUNER_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF ELIF iFixerIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value // if not unlocked IF NOT IS_FIXER_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF #IF FEATURE_DLC_1_2022 ELIF iSum2Index != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value // if not unlocked IF NOT IS_SUMMER_2022_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF #ENDIF ELIF thisModel = RCBANDITO SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_RCBANDITO_OWNED, ENUM_TO_INT(thisModel) != 0) BROADCAST_PLAYER_RC_BANDITO_PURCHASED(TRUE) CPRINTLN(DEBUG_SHOPS, "DO_BIGASS_VEHICLE_BUY: Big Ass Vehicle details: making sure player owns the RC Bandito!") #IF FEATURE_CASINO_HEIST ELIF thisModel = MINITANK SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_RC_TANK_OWNED, ENUM_TO_INT(thisModel) != 0) SET_PLAYER_PURCHASED_RC_TANK(TRUE) CPRINTLN(DEBUG_SHOPS, "DO_BIGASS_VEHICLE_BUY: Big Ass Vehicle details: making sure player owns the RC Tank!") #ENDIF ENDIF IF IS_SBV_A_VEHICLE_FREE_FOR_CRIMINAL_ENTERPRISE_STARTER_PACK(sbv) IF HAS_MP_CRIMINAL_ENTERPRISE_PREMIUM_OR_STARTER_ACCESS() SWITCH sbv CASE BV_GR_DUNE3 SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_VEHICLE_BF_DUNE_FAV) BREAK CASE BV_BI_VORTEX SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_VEHICLE_PEGASSI_VORTEX) BREAK CASE BV_ST_OMNIS SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_VEHICLE_OBEY_OMNIS) BREAK CASE BV_P_FROGGER SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_VEHICLE_MAIBATSU_FROGGER) BREAK CASE BV_BI_ZOMBIEB SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_VEHICLE_WESTERN_ZOMBIE_CHOPPER) BREAK CASE BV_DLC_TURISMO SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_VEHICLE_GROTTI_TURISMO_R) BREAK CASE BV_LX_WINDSOR SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_VEHICLE_ENUS_WINDSOR) BREAK CASE BV_C_BANSHEE SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_VEHICLE_BRAVADO_BANSHEE) BREAK CASE BV_MP_COQUETTE2 SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_VEHICLE_INVETERO_COQUETTE_CLASSIC) BREAK CASE BV_DLC_HUNTLEY SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_VEHICLE_ENUS_HUNTLEY_S) BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: unknown free Criminal Enterprise Starter Pack vehicle ", sbv) BREAK ENDSWITCH ENDIF ENDIF NETWORK_BUY_ITEM(iPrice,ENUM_TO_INT(thisModel),PURCHASE_VEHICLES,1,fromBank,GET_LABEL_BUYABLE_VEHICLE(sbv),ENUM_TO_INT(basource),0,colorHash,fromBankAndWallet)//ENUM_TO_INT(sbv) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY, price = ", iPrice, ", bypass natives") ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF IF NETWORK_IS_GAME_IN_PROGRESS() IF (thisModel != eDLC_BIG_TRUCK_MODEL) AND (thisModel != eDLC_BALLISTIC_EQUIPMENT_MODEL) AND (thisModel != eDLC_BIG_PLANE_MODEL) AND (thisModel != eDLC_HACKER_TRUCK_MODEL) AND (thisModel != GET_SUBMARINE_MODEL()) CHECK_LIVE_A_LITTLE_ACHIEVEMENT(thisModel, iPrice) ENDIF SET_CLOTHING_FOR_VEHICLE_PURCHASE(siteID, sbv) WHILE NOT SET_CHIPS_FOR_VEHICLE_PURCHASE(sbv, eChipsTransactionState) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() RENDER_BROWSER() WAIT(0) ENDWHILE eChipsTransactionState = TRANSACTION_STATE_DEFAULT IF (GET_WVM_VEHICLE_INDEX(thisModel) != -1) AND thisModel != TRAILERSMALL2 IF g_bPurchasedWeaponisedVehicle = FALSE PRINTLN("[GUNRUN_CALL] - DO_BIGASS_VEHICLE_BUY - g_bPurchasedWeaponisedVehicle = TRUE, player has purchased a weaponised vehicle") g_bPurchasedWeaponisedVehicle = TRUE ENDIF ENDIF SET_MP_VEHICLE_PURCHASED_PACKED_STAT_BOOL(thisModel) IF thisModel = eDLC_BIG_YACHT_MODEL IF NOT IS_STRING_NULL_OR_EMPTY(g_sYachtDataStruct.tl63NewName) g_sYachtDataStruct.tl63Name = g_sYachtDataStruct.tl63NewName ENDIF g_sYachtDataStruct.tl63NewName = "" SET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_MOD, g_sYachtDataStruct.iMod) SET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_FIXTURE, g_sYachtDataStruct.iFixture) SET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_LIGHTING, g_sYachtDataStruct.iLighting) SET_LOCAL_PLAYER_OWNS_PRIVATE_YACHT(TRUE, g_sYachtDataStruct.iMod, g_sYachtDataStruct.iColour, g_sYachtDataStruct.iLighting, g_sYachtDataStruct.iFixture, g_sYachtDataStruct.iFlag) SET_LOCAL_PLAYER_BD_DESIRED_YACHT_LOCATION(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)) SET_LOCAL_PLAYER_BD_YACHT_NAME(g_sYachtDataStruct.tl63Name) SET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_FLAG, g_sYachtDataStruct.iFlag) SET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_YACHT_NAME, MP_STAT_YACHT_NAME2, g_sYachtDataStruct.tl63Name) SET_MP_INT_CHARACTER_STAT(MP_STAT_INV_YACHT_NAME_ID, g_sYachtDataStruct.iYachtNameID) SET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_COLOR, g_sYachtDataStruct.iColour) SET_BIG_ASS_VEHICLE_BS(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_BIG_YACHT)) SET_MP_INT_CHARACTER_STAT(MP_STAT_INV_YACHT_MODEL_0, HASH("BIG_YACHT")) CPRINTLN(DEBUG_SHOPS, "DO_BIGASS_VEHICLE_BUY: Big Ass Vehicle details: making sure player owns the yacht!") CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: g_sYachtDataStruct.iMod:", g_sYachtDataStruct.iMod, " iFixture:", g_sYachtDataStruct.iFixture, " iLighting:", g_sYachtDataStruct.iLighting, " iColour:", g_sYachtDataStruct.iColour, " iFlag:", g_sYachtDataStruct.iFlag, " tl63Name:\"", g_sYachtDataStruct.tl63Name, "\"") ENDIF IF thisModel = eDLC_BIG_TRUCK_MODEL bPreviousPegasus = bPreviousBigassVehicle ARMORY_TRUCK_SECTION_TYPE_ENUM eSection1 = INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection1)) ARMORY_TRUCK_SECTION_TYPE_ENUM eSection2 = INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection2)) ARMORY_TRUCK_SECTION_TYPE_ENUM eSection3 = INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, GET_TRUCK_SECTION_TYPE_FROM_SF(g_sTruckDataStruct.iSection3)) PRINTLN("[AT-INTERIOR][AT-STAT]INTERNET SF - before validation(", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection1), ", ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection2), ", ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection3), ")") VALIDATE_TRUCK_EMPTY_SECTIONS(eSection1, eSection2, eSection3) IF NOT bPreviousBigassVehicle IF DOES_ENTITY_EXIST(vi) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: new vi exists") MP_SAVE_VEHICLE_STORE_CAR_DETAILS_IN_SLOT(vi,iSlotToUse,TRUE,TRUE,FALSE,TRUE,TRUE) MPSV_SET_DISPLAY_SLOT(iDisplaySlotToUse,iSlotToUse) ELSE CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: new vi doesnt exist...") ENDIF SET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_COL_1, 0) SET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_COL_2, 0) SET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_COL_EXTRA_1, 0) SET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_COL_EXTRA_2, 0) SET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_COL_GROUP_1, 255) SET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_COL_GROUP_2, 255) IF eSection1 = AT_ST_COMMAND_CENTER OR eSection2 = AT_ST_COMMAND_CENTER OR eSection3 = AT_ST_COMMAND_CENTER SET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_MOD_ROOF, 1) // front turrets ELSE SET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_MOD_ROOF, 0) // no turrets ENDIF SET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_MOD_LIVERY, -1) SET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_PLATE_INDEX, 0) SET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_COL_CREW_1, 0) SET_ARMORY_TRUCK_IS_IN_BUNKER(TRUE) ELSE IF INT_TO_ENUM(MODEL_NAMES, GET_TRUCK_CAB_FROM_SF(g_sTruckDataStruct.iCab)) != GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.eTruckModel IF DOES_ENTITY_EXIST(vi) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: renovated vi exists") MP_SAVE_VEHICLE_STORE_CAR_DETAILS_IN_SLOT(vi,iSlotToUse,TRUE,TRUE,FALSE,TRUE,TRUE) MPSV_SET_DISPLAY_SLOT(iDisplaySlotToUse,iSlotToUse) ELSE CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: renovated vi doesnt exist...") ENDIF SET_OWNER_RENOVATED_TRUCK_CAB(TRUE) ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - ...g_sTruckDataStruct.iCab = ", g_sTruckDataStruct.iCab, ", eCab = ", GET_MODEL_NAME_FOR_DEBUG(INT_TO_ENUM(MODEL_NAMES, GET_TRUCK_CAB_FROM_SF(g_sTruckDataStruct.iCab)))) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - ...eTruckModel = ", GET_MODEL_NAME_FOR_DEBUG(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.eTruckModel)) ENDIF IF eSection1 = AT_ST_COMMAND_CENTER OR eSection2 = AT_ST_COMMAND_CENTER OR eSection3 = AT_ST_COMMAND_CENTER CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - player has command centre, roof stat:", GET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_MOD_ROOF)) ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - player doesn't have command centre, roof stat:", GET_MP_TRUCK_MOD_STAT(TRUCK_MOD_TRAILER_MOD_ROOF)) ENDIF SET_OWNER_RENOVATED_TRUCK_TRAILER(TRUE) ENDIF MODEL_NAMES eCabModel = INT_TO_ENUM(MODEL_NAMES, GET_TRUCK_CAB_FROM_SF(g_sTruckDataStruct.iCab)) SET_MP_INT_CHARACTER_STAT(MP_STAT_INV_TRUCK_MODEL_0, ENUM_TO_INT(eCabModel)) SET_BIG_ASS_VEHICLE_BS(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_BIG_TRUCK)) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.eTruckModel = eCabModel BROADCAST_PLAYER_PURCHASED_ARMORY_TRUCK(TRUE) IF NOT bPreviousBigassVehicle SET_REQUEST_TO_CREATE_ARMORY_TRUCK_IN_BUNKER(TRUE) ENDIF PRINTLN("[AT-INTERIOR][AT-STAT]INTERNET SF - after validation (", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection1), ", ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection2), ", ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection3), ")") ARMORY_TRUCK_SECTION_TINT_ENUM eTint = INT_TO_ENUM(ARMORY_TRUCK_SECTION_TINT_ENUM, GET_TRUCK_SECTION_TINT_FROM_SF(g_sTruckDataStruct.iColour)) SET_ARMORY_TRUCK_SECTION_TYPE_STAT(ATS_FIRST_SECTION, eSection1) SET_ARMORY_TRUCK_SECTION_TYPE_STAT(ATS_SECOND_SECTION, eSection2) SET_ARMORY_TRUCK_SECTION_TYPE_STAT(ATS_THIRD_SECTION, eSection3) PRINTLN("[AT-INTERIOR][AT-STAT]INTERNET SF - stats set (", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection1), ", ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection2), ", ", GET_ARMORY_TRUCK_SECTION_TYPE_NAME(eSection3), ")") SET_ARMORY_TRUCK_TINT_STAT(eTint) //ARMORY_TRUCK_REQUEST_INTERIOR_UPDATE() IF NOT IS_PLAYER_PURCHASED_GUN_LOCKER_FOR_TRUCK(PLAYER_ID()) IF SHOULD_ALLOW_DISABLE_WEAPON_LOADOUT_FROM_INTERNET() SET_CUSTOM_WEAPON_LOADOUT(FALSE) RESET_CUSTOM_WEAPON_LOADOUT_STATS() ENDIF ENDIF // Phonecall if the player has purchased the truck property and has already done enough resupplies to unlock some WVMs (see the call above for details) // - // [Trigger after you buy the truck but have already unlocked some missions] - GNRC_TRUCK // - INT iStatInt = GET_MP_INT_CHARACTER_STAT(MP_STAT_HELP_BUNK_EMAIL) IF NOT IS_BIT_SET(iStatInt, biGR_Help_BOUGHT_TRUCK_WVM_AVAILABLE) IF IS_BIT_SET(iStatInt, biGR_Help_DIDNT_MAKE_FIRST_WVM_CALL) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - eGB_LOCAL_GUNRUN_CALL_BITSET_NOTIFICATION_FLOW_TRUCK_BOUGHT_WVM_AVAILABLE - Player has bought the truck, requesting call") GB_SET_LOCAL_GUNRUN_CALL_BIT(eGB_LOCAL_GUNRUN_CALL_BITSET_NOTIFICATION_FLOW_TRUCK_BOUGHT_WVM_AVAILABLE) SET_BIT(iStatInt, biGR_Help_BOUGHT_TRUCK_WVM_AVAILABLE) SET_BIT(iStatInt, biGR_Help_FIRST_WVM_UNLOCKED) // Set this so we know its safe to let players know when they unlock subsequent WVMs SET_MP_INT_CHARACTER_STAT(MP_STAT_HELP_BUNK_EMAIL, iStatInt) ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - biGR_Help_DIDNT_MAKE_FIRST_WVM_CALL not set") ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - biGR_Help_BOUGHT_TRUCK_WVM_AVAILABLE already set") ENDIF CPRINTLN(DEBUG_SHOPS, "DO_BIGASS_VEHICLE_BUY: Big Ass Vehicle details: making sure player owns the truck!") CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: g_sTruckDataStruct.iCab:", g_sTruckDataStruct.iCab, " iFixture:", g_sTruckDataStruct.iSection1, " iLighting:", g_sTruckDataStruct.iSection2, " iColour:", g_sTruckDataStruct.iColour, " iFlag:", g_sTruckDataStruct.iSection3) ENDIF IF thisModel = eDLC_BALLISTIC_EQUIPMENT_MODEL IF NOT USE_SERVER_TRANSACTIONS() bPreviousPegasus = IS_BIG_ASS_VEHICLE_BS_SET(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_BALLISTIC_EQUIPMENT)) ELSE bPreviousPegasus = !(GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_BALLASTIC_OWNED)) ENDIF SET_BIG_ASS_VEHICLE_BS(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_BALLISTIC_EQUIPMENT)) SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_BALLASTIC_OWNED, ENUM_TO_INT(thisModel) != 0) CPRINTLN(DEBUG_SHOPS, "DO_BIGASS_VEHICLE_BUY: Big Ass Vehicle details: making sure player owns the BallisticEquipment!") ENDIF IF thisModel = eDLC_BIG_PLANE_MODEL bPreviousPegasus = bPreviousBigassVehicle IF NOT bPreviousBigassVehicle IF DOES_ENTITY_EXIST(vi) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: new vi exists") MP_SAVE_VEHICLE_STORE_CAR_DETAILS_IN_SLOT(vi,iSlotToUse,TRUE,TRUE,FALSE,TRUE,TRUE) MPSV_SET_DISPLAY_SLOT(iDisplaySlotToUse,iSlotToUse) ELSE CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: new vi doesnt exist...") ENDIF SET_ARMORY_AIRCRAFT_IS_IN_DEFUNCT_BASE(TRUE) ELSE // IF INT_TO_ENUM(MODEL_NAMES, GET_PLANE_CAB_FROM_SF(g_sPlaneDataStruct.iCab)) != GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.ePlaneModel // IF DOES_ENTITY_EXIST(vi) // CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: renovated vi exists") // // MP_SAVE_VEHICLE_STORE_CAR_DETAILS_IN_SLOT(vi,iSlotToUse,TRUE,TRUE,FALSE,TRUE,TRUE) // MPSV_SET_DISPLAY_SLOT(iDisplaySlotToUse,iSlotToUse) // ELSE // CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: renovated vi doesnt exist...") // ENDIF // // SET_OWNER_RENOVATED_TRUCK_CAB(TRUE) // ELSE // CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - ...g_sPlaneDataStruct.iCab = ", g_sPlaneDataStruct.iCab, ", eCab = ", GET_MODEL_NAME_FOR_DEBUG(INT_TO_ENUM(MODEL_NAMES, GET_PLANE_CAB_FROM_SF(g_sPlaneDataStruct.iCab)))) // CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - ...eTruckModel = ", GET_MODEL_NAME_FOR_DEBUG(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.ePlaneModel)) // ENDIF // // SET_OWNER_RENOVATED_TRUCK_TRAILER(TRUE) ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_INV_PLANE_MODEL_0, ENUM_TO_INT(GET_ARMORY_AIRCRAFT_MODEL())) SET_ARMORY_AIRCRAFT_AS_OWNED() SET_BIG_ASS_VEHICLE_BS(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_BIG_PLANE)) IF NOT bPreviousBigassVehicle SET_REQUEST_TO_CREATE_ARMORY_AIRCRAFT_IN_DEFUNCT_BASE(TRUE) ELSE SET_OWNER_RENOVATED_AVENGER(TRUE) ENDIF SET_PACKED_STAT_INT(PACKED_MP_INT_ARMORY_AIRCRAFT_GUN_TURRET, g_sPlaneDataStruct.iGunTurret) SET_PACKED_STAT_INT(PACKED_MP_INT_ARMORY_AIRCRAFT_VEH_SHOP, g_sPlaneDataStruct.iVehShop) SET_PACKED_STAT_INT(PACKED_MP_INT_ARMORY_AIRCRAFT_WEA_SHOP, g_sPlaneDataStruct.iWeaShop) SET_PACKED_STAT_INT(PACKED_MP_INT_ARMORY_AIRCRAFT_INTERIOR, GET_PLANE_SECTION_TINT_FROM_SF(g_sPlaneDataStruct.iInterior)) BROADCAST_PLAYER_PURCHASED_ARMORY_AIRCRAFT(TRUE) BROADCAST_PLAYER_ARMORY_AIRCRAFT_PURCHASED_MODS() IF iSlotToUse = -1 MPSV_GET_SAVE_SLOT_FROM_DISPLAY_SLOT(DISPLAY_SLOT_AVENGER_HELI, iSlotToUse) ENDIF IF (g_sPlaneDataStruct.iGunTurret = 0) g_MpSavedVehicles[iSlotToUse].vehicleSetupMP.VehicleSetup.iModIndex[MOD_ROOF] = 0 MP_SAVE_VEHICLE_SLOT_STATS_FROM_SAVEGAME(iSlotToUse,g_MpSavedVehicles[iSlotToUse] ,TRUE) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: purchased, no turret") ELSE IF g_MpSavedVehicles[iSlotToUse].vehicleSetupMP.VehicleSetup.iModIndex[MOD_ROOF] != 1 AND g_MpSavedVehicles[iSlotToUse].vehicleSetupMP.VehicleSetup.iModIndex[MOD_ROOF] != 2 g_MpSavedVehicles[iSlotToUse].vehicleSetupMP.VehicleSetup.iModIndex[MOD_ROOF] = 1 MP_SAVE_VEHICLE_SLOT_STATS_FROM_SAVEGAME(iSlotToUse,g_MpSavedVehicles[iSlotToUse] ,TRUE) SET_PLAYER_RENOVATED_AVENGER_TURRET(TRUE) SET_EMPTY_AVENGER_HOLD(TRUE) CLEANUP_MP_SAVED_AVENGER(DEFAULT , DEFAULT, TRUE, DEFAULT, TRUE) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: purchased, has turret") ENDIF ENDIF //ARMORY_TRUCK_REQUEST_INTERIOR_UPDATE() // Phonecall if the player has purchased the plane property and has already done enough resupplies to unlock some WVMs (see the call above for details) // - // [Trigger after you buy the plane but have already unlocked some missions] - GNRC_TRUCK // - // INT iStatInt = GET_MP_INT_CHARACTER_STAT(MP_STAT_HELP_BUNK_EMAIL) // IF NOT IS_BIT_SET(iStatInt, biGR_Help_BOUGHT_TRUCK_WVM_AVAILABLE) // IF IS_BIT_SET(iStatInt, biGR_Help_DIDNT_MAKE_FIRST_WVM_CALL) // CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - eGB_LOCAL_GUNRUN_CALL_BITSET_NOTIFICATION_FLOW_TRUCK_BOUGHT_WVM_AVAILABLE - Player has bought the truck, requesting call") // GB_SET_LOCAL_GUNRUN_CALL_BIT(eGB_LOCAL_GUNRUN_CALL_BITSET_NOTIFICATION_FLOW_TRUCK_BOUGHT_WVM_AVAILABLE) // SET_BIT(iStatInt, biGR_Help_BOUGHT_TRUCK_WVM_AVAILABLE) // SET_BIT(iStatInt, biGR_Help_FIRST_WVM_UNLOCKED) // Set this so we know its safe to let players know when they unlock subsequent WVMs // SET_MP_INT_CHARACTER_STAT(MP_STAT_HELP_BUNK_EMAIL, iStatInt) // ELSE // CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - biGR_Help_DIDNT_MAKE_FIRST_WVM_CALL not set") // ENDIF // ELSE // CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - biGR_Help_BOUGHT_TRUCK_WVM_AVAILABLE already set") // ENDIF CPRINTLN(DEBUG_SHOPS, "DO_BIGASS_VEHICLE_BUY: Big Ass Vehicle details: making sure player owns the plane!") CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: g_sPlaneDataStruct.iGunTurret:", g_sPlaneDataStruct.iGunTurret, " iVehShop:", g_sPlaneDataStruct.iVehShop, " iWeaShop:", g_sPlaneDataStruct.iWeaShop, " iInterior:", g_sPlaneDataStruct.iInterior, " iAvenger:", g_sPlaneDataStruct.iAvenger) ENDIF IF thisModel = eDLC_HACKER_TRUCK_MODEL bPreviousPegasus = bPreviousBigassVehicle INT iDecalSF = GET_HACKER_TRUCK_DECAL_FROM_SF(g_sHackerTruckDataStruct.iDecal) INT iTintSF = GET_HACKER_TRUCK_TINT_FROM_SF(g_sHackerTruckDataStruct.iTint) IF NOT bPreviousBigassVehicle IF DOES_ENTITY_EXIST(vi) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: new vi exists") MP_SAVE_VEHICLE_STORE_CAR_DETAILS_IN_SLOT(vi,iSlotToUse,TRUE,TRUE,FALSE,TRUE,TRUE) MPSV_SET_DISPLAY_SLOT(iDisplaySlotToUse,iSlotToUse) ELSE CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: new vi doesnt exist...") ENDIF SET_HACKER_TRUCK_IS_IN_BUSINESS_HUB(TRUE) SET_BIT(MPGlobalsAmbience.iFmGbHelpBitSet7, BI_FM_GANG_BOSS_HELP_7_TERRORBYTE_JUST_PURCHASED) ELSE SET_EMPTY_HACKER_TRUCK_TRAILER(TRUE) SET_OWNER_RENOVATED_HACKER_TRUCK(TRUE) // IF INT_TO_ENUM(MODEL_NAMES, GET_HACKER_TRUCK_CAB_FROM_SF(g_sHackerTruckDataStruct.iCab)) != GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.eHackerTruckModel // IF DOES_ENTITY_EXIST(vi) // CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: renovated vi exists") // // MP_SAVE_VEHICLE_STORE_CAR_DETAILS_IN_SLOT(vi,iSlotToUse,TRUE,TRUE,FALSE,TRUE,TRUE) // MPSV_SET_DISPLAY_SLOT(iDisplaySlotToUse,iSlotToUse) // ELSE // CASSERTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: renovated vi doesnt exist...") // ENDIF // // SET_OWNER_RENOVATED_TRUCK_CAB(TRUE) // ELSE // CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - ...g_sHackerTruckDataStruct.iCab = ", g_sHackerTruckDataStruct.iCab, ", eCab = ", GET_MODEL_NAME_FOR_DEBUG(INT_TO_ENUM(MODEL_NAMES, GET_HACKER_TRUCK_CAB_FROM_SF(g_sHackerTruckDataStruct.iCab)))) // CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - ...eHackerTruckModel = ", GET_MODEL_NAME_FOR_DEBUG(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.eHackerTruckModel)) // ENDIF // // SET_OWNER_RENOVATED_TRUCK_TRAILER(TRUE) ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_INV_HACKERTRUCK_MODEL_0, ENUM_TO_INT(GET_HACKER_TRUCK_MODEL())) SET_BIG_ASS_VEHICLE_BS(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_HACKER_TRUCK)) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.eHackerTruckModel = GET_HACKER_TRUCK_MODEL() IF NOT bPreviousBigassVehicle IF IS_PLAYER_IN_BUSINESS_HUB_THEY_OWN(PLAYER_ID()) SET_REQUEST_TO_CREATE_HACKER_TRUCK_IN_BUSINESS_HUB(TRUE) ENDIF ENDIF SET_PACKED_STAT_INT(PACKED_MP_INT_HACKERTRUCK_INTERIOR_DECAL, iDecalSF) SET_PACKED_STAT_INT(PACKED_MP_INT_HACKERTRUCK_INTERIOR_TINT, iTintSF) SET_PACKED_STAT_INT(PACKED_MP_INT_HACKERTRUCK_MISSILE_LAUNCHER, g_sHackerTruckDataStruct.iMissileLauncher) SET_PACKED_STAT_INT(PACKED_MP_INT_HACKERTRUCK_DRONE_STATION, g_sHackerTruckDataStruct.iDroneStation) SET_PACKED_STAT_INT(PACKED_MP_INT_HACKERTRUCK_WEAPON_STATION, g_sHackerTruckDataStruct.iWeaShop) SET_PACKED_STAT_INT(PACKED_MP_INT_HACKERTRUCK_MOTORCYCLE_WORKSHOP, g_sHackerTruckDataStruct.iVehShop) //HACKER_TRUCK_REQUEST_INTERIOR_UPDATE() IF NOT IS_PLAYER_PURCHASED_GUN_LOCKER_FOR_TRUCK(PLAYER_ID()) IF SHOULD_ALLOW_DISABLE_WEAPON_LOADOUT_FROM_INTERNET() SET_CUSTOM_WEAPON_LOADOUT(FALSE) RESET_CUSTOM_WEAPON_LOADOUT_STATS() ENDIF ENDIF BROADCAST_PLAYER_PURCHASED_HACKER_TRUCK(TRUE) BROADCAST_PLAYER_HACKER_TRUCK_PURCHASED_MODS() enumCharacterList CharacterToAdd = GET_BUSINESS_BATTLE_HACKERTRUCK_CONTACT() IF NOT IS_CONTACT_IN_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK) BOOL bDisplay = TRUE ADD_CONTACT_TO_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK,bDisplay) CPRINTLN(DEBUG_INTERNET, "[HACKERTRUCK_CONTACT] MAINTAIN_ADD_BUSINESS_BATTLE_NIGHTCLUB_CONTACT - ADD_CONTACT_TO_PHONEBOOK(", g_sCharacterSheetAll[CharacterToAdd].label, ", MULTIPLAYER_BOOK, ", bDisplay, ")") ENDIF /* // Phonecall if the player has purchased the hacker truck property and has already done enough resupplies to unlock some WVMs (see the call above for details) // - // [Trigger after you buy the hacker truck but have already unlocked some missions] - GNRC_TRUCK_1 // - INT iStatInt = GET_MP_INT_CHARACTER_STAT(MP_STAT_HELP_BUNK_EMAIL) IF NOT IS_BIT_SET(iStatInt, biGR_Help_BOUGHT_TRUCK_1_WVM_AVAILABLE) IF IS_BIT_SET(iStatInt, biGR_Help_DIDNT_MAKE_FIRST_WVM_CALL) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - eGB_LOCAL_GUNRUN_CALL_BITSET_NOTIFICATION_FLOW_TRUCK_1_BOUGHT_WVM_AVAILABLE - Player has bought the TRUCK_1, requesting call") GB_SET_LOCAL_GUNRUN_CALL_BIT(eGB_LOCAL_GUNRUN_CALL_BITSET_NOTIFICATION_FLOW_TRUCK_1_BOUGHT_WVM_AVAILABLE) SET_BIT(iStatInt, biGR_Help_BOUGHT_TRUCK_1_WVM_AVAILABLE) SET_BIT(iStatInt, biGR_Help_FIRST_WVM_UNLOCKED) // Set this so we know its safe to let players know when they unlock subsequent WVMs SET_MP_INT_CHARACTER_STAT(MP_STAT_HELP_BUNK_EMAIL, iStatInt) ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - biGR_Help_DIDNT_MAKE_FIRST_WVM_CALL not set") ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY - [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - biGR_Help_BOUGHT_TRUCK_1_WVM_AVAILABLE already set") ENDIF */ IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0HT) CDEBUG1LN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: purchased hacker truck, set bDisplayed_HELP_BBSE0ht false") CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0HT) ENDIF CPRINTLN(DEBUG_SHOPS, "DO_BIGASS_VEHICLE_BUY: Big Ass Vehicle details: making sure player owns the hacker truck!") CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: g_sHackerTruckDataStruct.iCab:", g_sHackerTruckDataStruct.iCab, " iDecal:", g_sHackerTruckDataStruct.iDecal, " iTint:", g_sHackerTruckDataStruct.iTint, " iMissileLauncher:", g_sHackerTruckDataStruct.iMissileLauncher, " iDroneStation:", g_sHackerTruckDataStruct.iDroneStation, " iWeaShop:", g_sHackerTruckDataStruct.iWeaShop, " iVehShop:", g_sHackerTruckDataStruct.iVehShop) ENDIF #IF FEATURE_HEIST_ISLAND IF thisModel = GET_SUBMARINE_MODEL() //bPreviousPegasus = bPreviousBigassVehicle INT iColourSF = GET_KOSATKA_COLOUR_FROM_SF(g_sKosatkaDataStruct.iColour) INT iFlagSF = GET_KOSATKA_FLAG_FROM_SF(g_sKosatkaDataStruct.iFlag) IF NOT bPreviousBigassVehicle SET_MP_SPAWN_POINT_SETTING(MP_SETTING_SPAWN_SUBMARINE) // MPGlobalsAmbience.bLaunchVehicleDropSubmarine = TRUE // SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_SUBMARINE) ENDIF SET_BIG_ASS_VEHICLE_BS(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_IH_KOSATKA)) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.sSubmarinePropertyData.eModel = GET_SUBMARINE_MODEL() SET_SUBMARINE_AS_OWNED(TRUE) SET_PACKED_STAT_INT(PACKED_MP_INT_KOSATKA_COLOUR, iColourSF) SET_PACKED_STAT_INT(PACKED_MP_INT_KOSATKA_FLAG, iFlagSF) SET_SUBMARINE_SONAR_AS_OWNED(INT_TO_BOOL(g_sKosatkaDataStruct.iSonar)) SET_SUBMARINE_GUIDED_MISSILES_AS_OWNED(INT_TO_BOOL(g_sKosatkaDataStruct.iMissiles)) SET_SUBMARINE_WORKSHOP_AS_OWNED(INT_TO_BOOL(g_sKosatkaDataStruct.iWeaShop)) SET_SEASPARROW2_AS_OWNED(INT_TO_BOOL(g_sKosatkaDataStruct.iSeaSparrow2)) SET_AVISA_AS_OWNED(INT_TO_BOOL(g_sKosatkaDataStruct.iAvisa)) BROADCAST_PLAYER_PURCHASED_SUBMARINE(TRUE) BROADCAST_PLAYER_KOSATKA_PURCHASED_MODS() IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0HT) CDEBUG1LN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: purchased kosatka, set bDisplayed_HELP_BBSE0ht false") CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0HT) ENDIF CPRINTLN(DEBUG_SHOPS, "DO_BIGASS_VEHICLE_BUY: Big Ass Vehicle details: making sure player owns the Submarine!") CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: g_sKosatkaDataStruct.iColour:", g_sKosatkaDataStruct.iColour, " iFlag:", g_sKosatkaDataStruct.iFlag, " iMissiles:", g_sKosatkaDataStruct.iMissiles, " iSonar:", g_sKosatkaDataStruct.iSonar, " iWeaShop:", g_sKosatkaDataStruct.iWeaShop, " iSeaSparrow2:", g_sKosatkaDataStruct.iSeaSparrow2, " iAvisa:", g_sKosatkaDataStruct.iAvisa) ENDIF #ENDIF IF thisModel = BLIMP3 CPRINTLN(DEBUG_SHOPS, "DO_BIGASS_VEHICLE_BUY: set BLIMP3_LIVERY ", ENUM_TO_INT(g_eLastBuyableVehicleColourSelected), "!") SET_PACKED_STAT_INT(PACKED_MP_INT_PEGASUS_BLIMP3_LIVERY, ENUM_TO_INT(g_eLastBuyableVehicleColourSelected)) ENDIF INT iVehicleSpend = GET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_ON_VEHICLES) CONST_INT iCONST_THRESHOLD 1000000 //$1,000,000 INT iSpendTarget = ((iVehicleSpend/iCONST_THRESHOLD)+1) * iCONST_THRESHOLD CPRINTLN(DEBUG_SHOPS, "DO_BIGASS_VEHICLE_BUY: request high vehicle spend ($", iVehicleSpend ," + $", iPrice, ") >= $", iSpendTarget) IF (iVehicleSpend+iPrice) >= iSpendTarget REQUEST_SYSTEM_ACTIVITY_TYPE_HIGH_VEHICLE_SPEND((iSpendTarget/iCONST_THRESHOLD)+1) ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_ON_VEHICLES, iVehicleSpend+iPrice) ENDIF IF DOES_ENTITY_EXIST(vi) DELETE_VEHICLE(vi) SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) ENDIF bBrowserShoppingSavePending = TRUE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.bAnyMpVehicleBought = TRUE RETURN TRUE ENDFUNC /// PURPOSE: /// /// PARAMS: /// siteID - /// iPrice - -1 indicates look up the price /// RETURNS: /// FUNC BOOL DO_MP_VEHICLE_BUY(WEBSITE_INDEX_ENUM siteID, INT iAltVersion, INT iPriceIn = -1) IF !confCheck DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NOT_SAFE,confSbv, GET_BUYABLE_VEHICLE_PRICE_MP(siteID, confSbv, FALSE)) CERRORLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: \"", GET_WEBSITE_FROM_INDEX(siteID), "\", ", iAltVersion, ", ", iPriceIn, ") - confCheck is false!!!") RETURN FALSE ENDIF confCheck = FALSE IF g_sConfVssMP.VehicleSetup.eModel != GET_MODEL_FOR_BUYABLE_VEHICLE(confSbv, iAltVersion) CASSERTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: \"", GET_WEBSITE_FROM_INDEX(siteID), "\", ", iAltVersion, ", ", iPriceIn, ") - g_sConfVssMP.VehicleSetup.eModel[", GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(g_sConfVssMP.VehicleSetup.eModel), "] is different from GET_MODEL_FOR_BUYABLE_VEHICLE(", GET_LABEL_BUYABLE_VEHICLE(confSbv), ")!!!") RETURN FALSE ELSE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: \"", GET_WEBSITE_FROM_INDEX(siteID), "\", ", iAltVersion, ", ", iPriceIn, ") - g_sConfVssMP.VehicleSetup.eModel[", GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(g_sConfVssMP.VehicleSetup.eModel), "] matches GET_MODEL_FOR_BUYABLE_VEHICLE(", GET_LABEL_BUYABLE_VEHICLE(confSbv), ")") ENDIF VEHICLE_INDEX vi BOOL bAltVersion = IS_SBV_AN_ALTERNATE_VEHICLE(confSbv, siteID, g_eLastBuyableVehicleColourSelected) IF !IS_VEH_ENABLED_BY_TUNABLE(siteID, g_sConfVssMP.VehicleSetup.eModel) CASSERTLN(DEBUG_INTERNET, "Appinternet: vehicle ", GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(g_sConfVssMP.VehicleSetup.eModel), " is not enabled by tunables") #IF NOT IS_NEXTGEN_BUILD DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NOT_SAFE,confSbv, GET_BUYABLE_VEHICLE_PRICE_MP(siteID, confSbv)) #ENDIF #IF IS_NEXTGEN_BUILD DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NOT_SAFE,confSbv, GET_BUYABLE_VEHICLE_PRICE_MP(siteID, confSbv, bAltVersion)) #ENDIF IF DOES_ENTITY_EXIST(vi) DELETE_VEHICLE(vi) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) iLastPurchasedVehicleSlot = confMpSlotIndex confMpSlotIndex = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) RETURN FALSE ENDIF CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY - waiting for CREATE_AND_POPULATE_VEHICLE_DETAILS_FOR_MP_VEHICLE_BUY(", GET_LABEL_BUYABLE_VEHICLE(confSbv), ", ", GET_WEBSITE_FROM_INDEX(siteID), ", ", GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(g_sConfVssMP.VehicleSetup.eModel), ", vi, ", GET_STRING_FROM_BOOL(bAltVersion), ")") WHILE NOT CREATE_AND_POPULATE_VEHICLE_DETAILS_FOR_MP_WEBSITE_VEHICLE_BUY(confSbv, siteID, g_sConfVssMP, vi, bAltVersion) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() BROWSER_CURSOR_LOADING(FALSE) IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE INT iSlotToUse = -1 INT iDisplaySlotToUse = -1 IF confMpSlotIndex = -1 iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel) ELSE iSlotToUse = confMpSlotIndex CPRINTLN(DEBUG_INTERNET, "setting iSlotToUse = confMpSlotIndex = ",iSlotToUse) ENDIF IF confMPDisplayIndex = -1 iDisplaySlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel) ELSE iDisplaySlotToUse = confMPDisplayIndex CPRINTLN(DEBUG_INTERNET, "setting iDisplaySlotToUse = confMPDisplayIndex = ",iDisplaySlotToUse) ENDIF // auto-pick slot for hangar if necessary IF iSlotToUse > -1 AND iDisplaySlotToUse > -1 AND MP_SAVE_VEHICLE_IS_DISPLAY_SLOT_HANGAR(iDisplaySlotToUse) MP_SAVE_VEHICLE_GET_SUITABLE_HANGAR_SLOT(iDisplaySlotToUse, iSlotToUse, g_sConfVssMP.VehicleSetup.eModel) ENDIF IF g_sMPTunables.bDisableDisplaySlots iDisplaySlotToUse = iSlotToUse CPRINTLN(DEBUG_INTERNET, "g_sMPTunables.bDisableDisplaySlots internet 1 setting iDisplaySlotToUse = iSlotToUse ") ENDIF IF iSlotToUse > -1 AND iDisplaySlotToUse > -1 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY - use slots ", GET_LABEL_BUYABLE_VEHICLE(confSbv), ", ", GET_WEBSITE_FROM_INDEX(siteID), ", iSlotToUse: ", iSlotToUse, ", iDisplaySlotToUse:", iDisplaySlotToUse) // are we replacing the last used car? (see 1685165) IF (g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iLastSavedCarUsed = iSlotToUse) NET_PRINT("DO_MP_VEHICLE_BUY - replacing last used car") NET_NL() CLEANUP_MP_SAVED_VEHICLE() g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iLastSavedCarUsed = -1 ENDIF INT iPrice = GET_BUYABLE_VEHICLE_PRICE_MP(siteID, confSbv, bAltVersion) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: iPrice: ", iPrice, " bAltVersion: ", GET_STRING_FROM_BOOL(bAltVersion)) COUPON_TYPE eDoCoupon = MAX_COUPONS // Adjust prices for MP tunables SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_BENNYSORIGINALMOTORWORKS_COM CASE WWW_ARENAWAR_TV CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: g_sMPTunables.fCarsWebsiteMultiplier: ", g_sMPTunables.fCarsWebsiteMultiplier) iPrice = CEIL(g_sMPTunables.fCarsWebsiteMultiplier * (TO_FLOAT(iPrice))) BREAK CASE WWW_ELITASTRAVEL_COM CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM IF GET_VEHICLE_STORAGE_TYPE(confSbv) = VST_HANGAR CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: g_sMPTunables.fPlanesWebsiteMultiplier: ", g_sMPTunables.fPlanesWebsiteMultiplier) iPrice = CEIL(g_sMPTunables.fPlanesWebsiteMultiplier * (TO_FLOAT(iPrice))) ELSE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: g_sMPTunables.fHelisWebsiteMultiplier: ", g_sMPTunables.fHelisWebsiteMultiplier) iPrice = CEIL(g_sMPTunables.fHelisWebsiteMultiplier * (TO_FLOAT(iPrice))) ENDIF BREAK CASE WWW_DOCKTEASE_COM CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: g_sMPTunables.fBoatsWebsiteMultiplier: ", g_sMPTunables.fBoatsWebsiteMultiplier) iPrice = CEIL(g_sMPTunables.fBoatsWebsiteMultiplier * (TO_FLOAT(iPrice))) BREAK CASE WWW_PANDMCYCLES_COM CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: g_sMPTunables.fBikesWebsiteMultiplier: ", g_sMPTunables.fBikesWebsiteMultiplier) iPrice = CEIL(g_sMPTunables.fBikesWebsiteMultiplier * (TO_FLOAT(iPrice))) BREAK ENDSWITCH IF g_smpTunables.bTurn_on_promotional_eyefind_homepage CASSERTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: Promotional eyefind homepage discount hooked up, check site \"", GET_WEBSITE_FROM_INDEX(siteID), "\"") SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: g_sMPTunables.fLEGENDARY_DISPLAYED_DISCOUNT: ", g_sMPTunables.fLEGENDARY_DISPLAYED_DISCOUNT) iPrice = CEIL((100-g_sMPTunables.fLEGENDARY_DISPLAYED_DISCOUNT)/100.0 * (TO_FLOAT(iPrice))) BREAK CASE WWW_ELITASTRAVEL_COM CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: g_sMPTunables.fELITAS_DISPLAYED_DISCOUNT: ", g_sMPTunables.fELITAS_DISPLAYED_DISCOUNT) iPrice = CEIL((100-g_sMPTunables.fELITAS_DISPLAYED_DISCOUNT)/100.0 * (TO_FLOAT(iPrice))) BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: g_sMPTunables.fSSASA_DISPLAYED_DISCOUNT: ", g_sMPTunables.fSSASA_DISPLAYED_DISCOUNT) iPrice = CEIL((100-g_sMPTunables.fSSASA_DISPLAYED_DISCOUNT)/100.0 * (TO_FLOAT(iPrice))) BREAK ENDSWITCH ENDIF IF iPriceIn > -1 iPrice = iPriceIn ENDIF IF (eDoCoupon = MAX_COUPONS) AND (iPrice > 0) IF confSbv = BV_GO_HERMES IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2017) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CAR_XMAS2017)") eDoCoupon = COUPON_CAR_XMAS2017 ENDIF ELIF confSbv = BV_AW_CLIQUE IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2018) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CAR_XMAS2018)") eDoCoupon = COUPON_CAR_XMAS2018 ENDIF ELIF confSbv = BV_A_BUZZARD IF DOES_SAVE_HAVE_COUPON(COUPON_HELI_XMAS2018) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_HELI_XMAS2018)") eDoCoupon = COUPON_HELI_XMAS2018 ENDIF ELIF confSbv = BV_DLC_INSURGENT IF DOES_SAVE_HAVE_COUPON(COUPON_CAR2_XMAS2018) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CAR2_XMAS2018)") eDoCoupon = COUPON_CAR2_XMAS2018 ENDIF #IF FEATURE_GEN9_EXCLUSIVE ELIF confSbv = BV_G9E_S95 IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_GEN9_MIGRATION) CPRINTLN(DEBUG_INTERNET, "DO_BIGASS_VEHICLE_BUY: has coupon(COUPON_CAR_GEN9_MIGRATION)") eDoCoupon = COUPON_CAR_GEN9_MIGRATION ENDIF #ENDIF ENDIF ENDIF IF (eDoCoupon = MAX_COUPONS) AND (iPrice > 0) SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_SITE) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: has coupon(COUPON_CAR_SITE)") eDoCoupon = COUPON_CAR_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_CAR_SITE, confSbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_CAR_SITE) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: has coupon(COUPON_CASINO_CAR_SITE)") eDoCoupon = COUPON_CASINO_CAR_SITE ENDIF BREAK CASE WWW_ELITASTRAVEL_COM IF DOES_SAVE_HAVE_COUPON(COUPON_PLANE_SITE) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: has coupon(COUPON_PLANE_SITE)") eDoCoupon = COUPON_PLANE_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_PLANE_SITE, confSbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_PLANE_SITE) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: has coupon(COUPON_CASINO_PLANE_SITE)") eDoCoupon = COUPON_CASINO_PLANE_SITE ENDIF BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM IF DOES_SAVE_HAVE_COUPON(COUPON_MIL_SITE) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: has coupon(COUPON_MIL_SITE)") eDoCoupon = COUPON_MIL_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_MIL_SITE, confSbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_MIL_SITE) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: has coupon(COUPON_CASINO_MIL_SITE)") eDoCoupon = COUPON_CASINO_MIL_SITE ENDIF BREAK CASE WWW_DOCKTEASE_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_BOAT_SITE, confSbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_BOAT_SITE) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: has coupon(COUPON_CASINO_BOAT_SITE)") eDoCoupon = COUPON_CASINO_BOAT_SITE ENDIF BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_CAR_SITE2, confSbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_CAR_SITE2) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: has coupon(COUPON_CASINO_CAR_SITE2)") eDoCoupon = COUPON_CASINO_CAR_SITE2 ENDIF BREAK CASE WWW_PANDMCYCLES_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_BIKE_SITE, confSbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_BIKE_SITE) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: has coupon(COUPON_CASINO_BIKE_SITE)") eDoCoupon = COUPON_CASINO_BIKE_SITE ENDIF BREAK ENDSWITCH ENDIF IF (eDoCoupon = COUPON_CASINO_PLANE_SITE) OR (eDoCoupon = COUPON_CASINO_BOAT_SITE) OR (eDoCoupon = COUPON_CASINO_CAR_SITE) OR (eDoCoupon = COUPON_CASINO_CAR_SITE2) OR (eDoCoupon = COUPON_CASINO_MIL_SITE) OR (eDoCoupon = COUPON_CASINO_BIKE_SITE) TRIGGER_BROWSER_NAG_SCREEN(ENUM_TO_INT(eDoCoupon), iPrice, NSR_VOUCHER) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: Trigger browser voucher screen(", GET_COUPON_STRING(eDoCoupon), ", ", iPrice, ", NSR_VOUCHER)") BOOL bInputFrontendReleased = FALSE BOOL bInputFrontendAcceptPressed = FALSE, bInputFrontendCancelPressed = FALSE WHILE NOT bInputFrontendAcceptPressed AND NOT bInputFrontendCancelPressed AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() IF bInputFrontendReleased IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) OR (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_ACCEPT) AND NOT IS_WARNING_MESSAGE_ACTIVE()) OR (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) AND NOT IS_WARNING_MESSAGE_ACTIVE()) bInputFrontendAcceptPressed = TRUE g_bBrowserNagScreenState = FALSE g_bBrowserVoucherNagScreenState = FALSE g_bBrowserGoToStoreTrigger = FALSE SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(nagScreen) nagScreen = null g_iBrowserNoInputTimer = g_iBrowserTimer + 500 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()) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL) OR (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_CANCEL) AND NOT IS_WARNING_MESSAGE_ACTIVE()) bInputFrontendCancelPressed = TRUE g_bBrowserNagScreenState = FALSE g_bBrowserVoucherNagScreenState = FALSE g_bBrowserGoToStoreTrigger = FALSE SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(nagScreen) nagScreen = null g_iBrowserNoInputTimer = g_iBrowserTimer + 500 ENDIF ENDIF IF NOT bInputFrontendReleased CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: Triggered browser voucher screen, bInputFrontendReleased = true") bInputFrontendReleased = TRUE ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE IF bInputFrontendAcceptPressed CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: Accept voucher ", GET_COUPON_STRING(eDoCoupon)) ELIF bInputFrontendCancelPressed CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: Cancel voucher ", GET_COUPON_STRING(eDoCoupon)) //canceled the buy process #IF NOT IS_NEXTGEN_BUILD DO_VEHICLE_FAIL_PAGE(siteID,VSFR_CANCELED,confSbv, GET_BUYABLE_VEHICLE_PRICE_MP(siteID, confSbv)) #ENDIF #IF IS_NEXTGEN_BUILD DO_VEHICLE_FAIL_PAGE(siteID,VSFR_CANCELED,confSbv, GET_BUYABLE_VEHICLE_PRICE_MP(siteID, confSbv, bAltVersion)) #ENDIF IF DOES_ENTITY_EXIST(vi) DELETE_VEHICLE(vi) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) iLastPurchasedVehicleSlot = confMpSlotIndex confMpSlotIndex = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) RETURN FALSE ELSE CASSERTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: UNKNOWN voucher ", GET_COUPON_STRING(eDoCoupon)) ENDIF ENDIF // Process cash transaction. IF USE_SERVER_TRANSACTIONS() bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD MODEL_NAMES eThisVehModel = g_sConfVssMP.vehicleSetup.eModel BOOL bThisAltVersion = bAltVersion IF IS_SBV_A_VEHICLE_WITH_ARMOUR_OPTION(confSbv) AND bAltVersion SWITCH confSbv CASE BV_AP_BALLER3 eThisVehModel = BALLER5 BREAK CASE BV_AP_BALLER4 eThisVehModel = BALLER6 BREAK CASE BV_AP_COG55 eThisVehModel = COG552 BREAK CASE BV_AP_COGNOSCENTI eThisVehModel = COGNOSCENTI2 BREAK CASE BV_AP_SCHAFTER3 eThisVehModel = SCHAFTER5 BREAK CASE BV_AP_SCHAFTER4 eThisVehModel = SCHAFTER6 BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: unknown armouted vehicle ", GET_LABEL_BUYABLE_VEHICLE(confSbv)) BREAK ENDSWITCH bThisAltVersion = FALSE ENDIF IF (eThisVehModel = COGNOSCENTI) OR (eThisVehModel = COGNOSCENTI2) IF IS_ARENA_WARS_VEHICLE_REWARD_UNLOCKED(eThisVehModel) bThisAltVersion = TRUE ENDIF ENDIF BOOL bStarterPackItem = FALSE IF IS_SBV_A_VEHICLE_FREE_FOR_CRIMINAL_ENTERPRISE_STARTER_PACK(confSbv) IF HAS_MP_CRIMINAL_ENTERPRISE_PREMIUM_OR_STARTER_ACCESS() bStarterPackItem = TRUE ENDIF ENDIF INT iItemId = GET_VEHICLE_KEY_FOR_CATALOGUE(eThisVehModel, bThisAltVersion, DEFAULT, bStarterPackItem) INT iInventoryKey = GET_VEHICLE_INVENTORY_KEY_FOR_CATALOGUE(confMpSlotIndex) INT iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT /////////////////////////////////////////// /// TRANSACTION FOR INVENTORY VEHICLE INT iDoCouponHash = 0 SWITCH eDoCoupon CASE COUPON_CAR_SITE iDoCouponHash = HASH("PM_COUPON_CAR_SITE") // BREAK CASE COUPON_PLANE_SITE iDoCouponHash = HASH("PM_COUPON_PLANE_SITE") // BREAK CASE COUPON_MIL_SITE iDoCouponHash = HASH("PM_COUPON_MIL_SITE") // BREAK CASE COUPON_CAR_XMAS2017 iDoCouponHash = HASH("PO_COUPON_CAR_XMAS2017") // iPriceIn = 0 BREAK CASE COUPON_CAR_XMAS2018 iDoCouponHash = HASH("PO_COUPON_CAR_XMAS2018") // iPriceIn = 0 BREAK CASE COUPON_HELI_XMAS2018 iDoCouponHash = HASH("PO_COUPON_HELI_XMAS2018") // iPriceIn = 0 BREAK CASE COUPON_CAR2_XMAS2018 iDoCouponHash = HASH("PO_COUPON_CAR2_XMAS2018") // iPriceIn = 0 BREAK CASE COUPON_CASINO_PLANE_SITE iDoCouponHash = HASH("PM_COUPON_CASINO_PLANE_SITE") BREAK CASE COUPON_CASINO_BOAT_SITE iDoCouponHash = HASH("PM_COUPON_CASINO_BOAT_SITE") BREAK CASE COUPON_CASINO_CAR_SITE iDoCouponHash = HASH("PM_COUPON_CASINO_CAR_SITE") BREAK CASE COUPON_CASINO_CAR_SITE2 iDoCouponHash = HASH("PM_COUPON_CASINO_CAR_SITE2") BREAK CASE COUPON_CASINO_MIL_SITE iDoCouponHash = HASH("PM_COUPON_CASINO_MIL_SITE") BREAK CASE COUPON_CASINO_BIKE_SITE iDoCouponHash = HASH("PM_COUPON_CASINO_BIKE_SITE") BREAK ENDSWITCH WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, iPriceIn, ENUM_TO_INT(g_sConfVssMP.vehicleSetup.eModel), CATEGORY_INVENTORY_VEHICLE, NET_SHOP_ACTION_BUY_VEHICLE, iItemId, iInventoryKey, iDoCouponHash, DEFAULT, DEFAULT, vi) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED #IF NOT IS_DEBUG_BUILD TEXT_LABEL tlCategoryKey tlCategoryKey = GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(g_sConfVssMP.vehicleSetup.eModel) #ENDIF #IF IS_DEBUG_BUILD TEXT_LABEL_63 tlCategoryKey INT iPriceVariation TEXT_LABEL_15 tlVehicleName iPriceVariation = GET_VEHICLE_MOD_PRICE_VARIATION_FOR_CATALOGUE(g_sConfVssMP.vehicleSetup.eModel) tlVehicleName = GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(g_sConfVssMP.vehicleSetup.eModel) IF bAltVersion GENERATE_KEY_FOR_SHOP_CATALOGUE(tlCategoryKey, tlVehicleName, g_sConfVssMP.vehicleSetup.eModel, SHOP_TYPE_CARMOD, 1, iPriceVariation) ELSE GENERATE_KEY_FOR_SHOP_CATALOGUE(tlCategoryKey, tlVehicleName, g_sConfVssMP.vehicleSetup.eModel, SHOP_TYPE_CARMOD, 0, iPriceVariation) ENDIF #ENDIF CWARNINGLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: failed to process transaction \"", tlCategoryKey, "\"") #IF NOT IS_NEXTGEN_BUILD DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NOT_SAFE,confSbv, GET_BUYABLE_VEHICLE_PRICE_MP(siteID, confSbv)) #ENDIF #IF IS_NEXTGEN_BUILD DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NOT_SAFE,confSbv, GET_BUYABLE_VEHICLE_PRICE_MP(siteID, confSbv, bAltVersion)) #ENDIF DELETE_VEHICLE(vi) SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) confMpSlotIndex = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) RETURN FALSE BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: success!!") BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: unknown iProcessSuccess: \"", iProcessSuccess, "\"") BREAK ENDSWITCH SWITCH eDoCoupon CASE COUPON_CAR_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_PLANE_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_PLANE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_MIL_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_MIL_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CAR_XMAS2017 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_XMAS2017)") iPrice = 0 BREAK CASE COUPON_CAR_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_XMAS2018)") iPrice = 0 BREAK CASE COUPON_HELI_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_HELI_XMAS2018)") iPrice = 0 BREAK CASE COUPON_CAR2_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR2_XMAS2018)") iPrice = 0 BREAK CASE COUPON_CASINO_PLANE_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_PLANE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_BOAT_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_BOAT_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_CAR_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_CAR_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_CAR_SITE2 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_CAR_SITE2)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_MIL_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_MIL_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_BIKE_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_BIKE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK #IF FEATURE_GEN9_EXCLUSIVE CASE COUPON_CAR_GEN9_MIGRATION CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_GEN9_MIGRATION)") iPrice = 0 BREAK #ENDIF ENDSWITCH ELSE SWITCH eDoCoupon CASE COUPON_CAR_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_PLANE_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_PLANE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_MIL_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_MIL_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CAR_XMAS2017 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_XMAS2017)") iPrice = 0 BREAK CASE COUPON_CAR_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_XMAS2018)") iPrice = 0 BREAK CASE COUPON_HELI_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_HELI_XMAS2018)") iPrice = 0 BREAK CASE COUPON_CAR2_XMAS2018 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR2_XMAS2018)") iPrice = 0 BREAK CASE COUPON_CASINO_PLANE_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_PLANE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_BOAT_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_BOAT_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_CAR_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_CAR_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_CAR_SITE2 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_CAR_SITE2)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_MIL_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_MIL_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK CASE COUPON_CASINO_BIKE_SITE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CASINO_BIKE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) BREAK #IF FEATURE_GEN9_EXCLUSIVE CASE COUPON_CAR_GEN9_MIGRATION CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(COUPON_CAR_GEN9_MIGRATION)") iPrice = 0 BREAK #ENDIF ENDSWITCH BOOL fromBank = (NETWORK_GET_VC_BANK_BALANCE() >= 0) BOOL fromBankAndWallet = (NETWORK_GET_VC_BANK_BALANCE() < iPrice) IF (fromBank AND NETWORK_CAN_SPEND_MONEY(iPrice,TRUE,FALSE,FALSE)) OR (fromBankAndWallet AND NETWORK_CAN_SPEND_MONEY(iPrice,FALSE,TRUE,FALSE)) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ELSE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY() - vehicle site fail reason \"cannot spend money\"") DO_VEHICLE_FAIL_PAGE(siteID, VSFR_NO_MONEY, confSbv, iPrice) DELETE_VEHICLE(vi) SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) iLastPurchasedVehicleSlot = confMpSlotIndex confMpSlotIndex = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) RETURN FALSE ENDIF ENDIF GO_TO_WEBSITE(GET_VEHICLE_PURCHASE_SUCCESS_PAGE(siteID, confSbv)) MP_SAVE_VEHICLE_STORE_CAR_DETAILS_IN_SLOT(vi,iSlotToUse,TRUE,TRUE,FALSE,TRUE,TRUE) MPSV_SET_DISPLAY_SLOT(iDisplaySlotToUse,iSlotToUse) #IF FEATURE_GTAO_MEMBERSHIP MP_SAVE_VEHICLE_CHECK_SET_MEMBERSHIP_PURCHASE(g_sConfVssMP.VehicleSetup.eModel,iSlotToUse) #ENDIF IF iDisplaySlotToUse >= DISPLAY_SLOT_START_ARENAWARS_GARAGE_LVL1 AND iDisplaySlotToUse <= DISPLAY_SLOT_END_ARENAWARS_GARAGE_LVL3 CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY() - SET_ARENA_VEHICLE_NAME to NULL for ",iDisplaySlotToUse-DISPLAY_SLOT_START_ARENAWARS_GARAGE_LVL1) CLEAR_ARENA_VEHICLE_NAME(iDisplaySlotToUse-DISPLAY_SLOT_START_ARENAWARS_GARAGE_LVL1) ENDIF IF NOT IS_VEHICLE_A_CYCLE(g_sConfVssMP.VehicleSetup.eModel) INSURE_MP_SAVED_VEHICLE_PRIVATE(iSlotToUse) ENDIF // g_MpSavedVehicles[iSlotToUse].vehicleSetupMP.VehicleSetup.iColour1 = g_sConfVssMP.VehicleSetup.iColour1 SET_VEHICLE_AS_JUST_PURCHASED(iSlotToUse) GB_SET_SHOULD_REFRESH_OWNED_ABILITY_VEHICLES() IF !(eDoCoupon = MAX_COUPONS) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: REDEEM_COUPON(", eDoCoupon, ")") REDEEM_COUPON(eDoCoupon) ENDIF BANK_ACCOUNT_ACTION_SOURCE_BAAC basource SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET basource = BAAC_MOTORSPORT_SITE BREAK CASE WWW_ELITASTRAVEL_COM basource = BAAC_PLANE_SITE BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM basource = BAAC_ARMY_SITE BREAK CASE WWW_DOCKTEASE_COM basource = BAAC_BOAT_SITE BREAK CASE WWW_PANDMCYCLES_COM basource = BAAC_BIKE_SITE BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM basource = BAAC_SUPERAUTO_SITE BREAK CASE WWW_BENNYSORIGINALMOTORWORKS_COM basource = BAAC_LOWRIDER_SITE BREAK CASE WWW_ARENAWAR_TV basource = BAAC_ARENA_SITE BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: invalid siteID ", GET_WEBSITE_FROM_INDEX(siteID)) BREAK ENDSWITCH INT iData = GET_MP_INT_PLAYER_STAT(MPPLY_VEHICLE_ID_ADMIN_WEB) IF INT_TO_ENUM(MODEL_NAMES, iData) = g_sConfVssMP.VehicleSetup.eModel SET_MP_INT_PLAYER_STAT(MPPLY_VEHICLE_ID_ADMIN_WEB, 0) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_INTERNET, "Appinternet: MPPLY_VEHICLE_ID_ADMIN_WEB is ", iData, " == \"", GET_LABEL_BUYABLE_VEHICLE(confSbv), "\" ", ENUM_TO_INT(GET_MODEL_FOR_BUYABLE_VEHICLE(confSbv, iAltVersion))) ELSE CPRINTLN(DEBUG_INTERNET, "Appinternet: MPPLY_VEHICLE_ID_ADMIN_WEB is ", iData, " != \"", GET_LABEL_BUYABLE_VEHICLE(confSbv), "\" ", ENUM_TO_INT(GET_MODEL_FOR_BUYABLE_VEHICLE(confSbv, iAltVersion))) #ENDIF ENDIF #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_INTERNET, "PLAYSTATS_SHOP_ITEM(", GET_LABEL_BUYABLE_VEHICLE(confSbv), ", ", iPrice, ")") #ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Special","WEB_NAVIGATION_SOUNDS_PHONE") IF iPrice >= 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, iPrice) BOOL fromBank = (NETWORK_GET_VC_BANK_BALANCE() >= 0) BOOL fromBankAndWallet = (NETWORK_GET_VC_BANK_BALANCE() < iPrice) IF (fromBank AND NETWORK_CAN_SPEND_MONEY(iPrice,TRUE,FALSE,FALSE)) OR (fromBankAndWallet AND NETWORK_CAN_SPEND_MONEY(iPrice,FALSE,TRUE,FALSE)) OR USE_SERVER_TRANSACTIONS() // Transaction would have already taken cash off here. INT colorHash = 0 INT iSVMIndex = GET_SVM_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) INT iWVMIndex = GET_WVM_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) INT iWAMIndex = WAM_GET_STEAL_MISSION_UNLOCK_COUNT_FROM_VEHICLE_MODEL(g_sConfVssMP.vehicleSetup.eModel) INT iFDSSlot = GET_FDS_VEHICLE_SLOT(g_sConfVssMP.vehicleSetup.eModel) INT iBBSIndex = GET_BBS_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) INT iAWSIndex = GET_AWS_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) #IF FEATURE_CASINO_HEIST INT iCHIndex = GET_CH_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) #ENDIF #IF FEATURE_COPS_N_CROOKS INT iCNCIndex = GET_CNC_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) #ENDIF // #IF FEATURE_SUMMER_2020 // INT iSUMIndex = GET_SUMMER20_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) // #ENDIF INT iIHIndex = GET_ISLAND_HEIST_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) INT iTunerIndex = GET_TUNER_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) INT iFixerIndex = GET_FIXER_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) #IF FEATURE_DLC_1_2022 INT iSum2Index = GET_SUMMER_2022_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) #ENDIF IF iSVMIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value INT iMission = SVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(g_sConfVssMP.vehicleSetup.eModel) IF NOT SVM_HAS_PLAYER_UNLOCKED_MISSION(iMission) colorHash = 1 ELIF NOT SVM_HAS_THIS_MISSION_BEEN_PASSED(iMission, ciFLOW_MISSION_TYPE_SVM) //SVM_IS_SPECIAL_VEHICLE_UNLOCKED colorHash = 2 ELSE colorHash = 3 ENDIF SMV_RESET_VEHICLE_UNLOCK_INT(iMission) SET_BIT(iSVM_Unlock_Feed_Message, iMission) ELIF IS_SBV_A_VEHICLE_PREVIOUSLY_HEIST_LOCKED(confSbv) //1 = for not unlocked through heist //2 = for unlocked through heist IF NOT IS_BUYABLE_VEHICLE_UNLOCKED(confSbv) colorHash = 1 ELSE colorHash = 2 ENDIF ELIF iWVMIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value INT iMission = WVM_GET_FLOW_POS_FROM_VEHICLE_MODEL(g_sConfVssMP.vehicleSetup.eModel) // IF NOT TRUE //WVM_HAS_PLAYER_UNLOCKED_MISSION(iMission) // colorHash = 1 // EL IF NOT SVM_HAS_THIS_MISSION_BEEN_PASSED(iMission, ciFLOW_MISSION_TYPE_WVM) //WVM_IS_SPECIAL_VEHICLE_UNLOCKED colorHash = 2 ELSE colorHash = 3 ENDIF SMV_RESET_VEHICLE_UNLOCK_INT(iMission) SET_BIT(iWVM_Unlock_Feed_Message, iMission) UNLOCK_CLOTHING_AWARD(CLOTHING_AWARD_PURCH_SINGLEWEAPONIZEDVEHICLE) BOOL bClothingAwardPurchAllWeaponizedVehicle = FALSE INT i, iSavedWVMBitset = 0 SET_BIT(iSavedWVMBitset, iWVMIndex) REPEAT MAX_MP_SAVED_VEHICLES i INT iSavedWVMIndex = GET_WVM_VEHICLE_INDEX(g_MpSavedVehicles[i].vehicleSetupMP.VehicleSetup.eModel) IF iSavedWVMIndex != -1 AND NOT IS_BIT_SET(iSavedWVMBitset, iSavedWVMIndex) CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: purchase weaponized veh ", iWVMIndex, ", already own ", iSavedWVMIndex, ", in slot ", i, ".") SET_BIT(iSavedWVMBitset, iSavedWVMIndex) ENDIF IF (IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(DUNE3)) AND IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(HALFTRACK)) AND IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(TRAILERSMALL2)) AND IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(APC)) AND IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(TAMPA3)) AND IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(OPPRESSOR))) UNLOCK_CLOTHING_AWARD(CLOTHING_AWARD_PURCH_ALLWEAPONIZEDVEHICLE) bClothingAwardPurchAllWeaponizedVehicle = TRUE i = MAX_MP_SAVED_VEHICLES ENDIF ENDREPEAT IF NOT bClothingAwardPurchAllWeaponizedVehicle CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: purchase weaponized veh ", iWVMIndex, PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(DUNE3)), ", own DUNE3", ", dont own DUNE3"), PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(HALFTRACK)), ", own HALFTRACK", ", dont own HALFTRACK"), PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(TRAILERSMALL2)), ", own TRAILERSMALL2", ", dont own TRAILERSMALL2"), PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(APC)), ", own APC", ", dont own APC"), PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(TAMPA3)), ", own TAMPA3", ", dont own TAMPA3"), PICK_STRING(IS_BIT_SET(iSavedWVMBitset, GET_WVM_VEHICLE_INDEX(OPPRESSOR)), ", own OPPRESSOR", ", dont own OPPRESSOR")) ENDIF ELIF iWAMIndex > 0 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value IF NOT WAM_IS_SPECIAL_VEHICLE_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF ELIF iFDSSlot != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value IF NOT HAS_PLAYER_UNLOCKED_GANG_OPS_VEHICLE_TRADE_PRICE(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF SET_BIT(iFDS_Unlock_Feed_Message, iFDSSlot) ELIF iBBSIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value IF NOT IS_BUSINESS_BATTLES_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF SET_BIT(iBBS_Unlock_Feed_Message, iBBSIndex) ELIF iAWSIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value IF NOT IS_ARENA_WARS_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF // SET_BIT(iBBS_Unlock_Feed_Message, iAWSIndex) IF IS_VEHICLE_AN_ARENA_CONTENDER_VEHICLE(g_sConfVssMP.vehicleSetup.eModel) // Player purchases an Arena vehicle (already supermodded): GB_SETUP_ARENA_WARS_FIRST_ARENA_VEHICLE_PURCHASED_CALL() SET_OWNED_ARENA_READY_VEHICLE_STAT(g_sConfVssMP.vehicleSetup.eModel) ELSE // Player purchases a base vehicle (can be supermodded to become Arena vehicle): GB_SETUP_ARENA_WARS_FIRST_BASE_VEHICLE_PURCHASED_CALL() ENDIF #IF FEATURE_CASINO_HEIST ELIF iCHIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value IF NOT IS_CASINO_HEIST_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF #ENDIF #IF FEATURE_COPS_N_CROOKS ELIF iCNCIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value // if not unlocked IF NOT IS_CNC_VEHICLE_REWARD_UNLOCKED() colorHash = 1 ELSE colorHash = 2 ENDIF #ENDIF // #IF FEATURE_SUMMER_2020 // ELIF iSUMIndex != -1 // //1 = used 'Buy it Now' option and had NOT completed the requisite number // // of Export missions to unlock the related Special Vehicle Mission // //2 = used 'Buy it Now' option and HAD completed the requisite number // // of Export missions to unlock the related Special Vehicle Mission // //3 = Purchased at the Securo Serve Discount value // // // if not unlocked // IF NOT IS_SUMMER20_VEHICLE_REWARD_UNLOCKED() // colorHash = 1 // ELSE // colorHash = 2 // ENDIF // #ENDIF ELIF iIHIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value // if not unlocked IF NOT IS_ISLAND_HEIST_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF ELIF iTunerIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value // if not unlocked IF NOT IS_TUNER_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF ELIF iFixerIndex != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value // if not unlocked IF NOT IS_FIXER_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF #IF FEATURE_DLC_1_2022 ELIF iSum2Index != -1 //1 = used 'Buy it Now' option and had NOT completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //2 = used 'Buy it Now' option and HAD completed the requisite number // of Export missions to unlock the related Special Vehicle Mission //3 = Purchased at the Securo Serve Discount value // if not unlocked IF NOT IS_SUMMER_2022_VEHICLE_REWARD_UNLOCKED(g_sConfVssMP.vehicleSetup.eModel) colorHash = 1 ELSE colorHash = 2 ENDIF #ENDIF ELIF g_sConfVssMP.vehicleSetup.eModel = RCBANDITO SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_RCBANDITO_OWNED, ENUM_TO_INT(g_sConfVssMP.vehicleSetup.eModel) != 0) BROADCAST_PLAYER_RC_BANDITO_PURCHASED(TRUE) CPRINTLN(DEBUG_SHOPS, "DO_MP_VEHICLE_BUY: Big Ass Vehicle details: making sure player owns the RC Bandito!") #IF FEATURE_CASINO_HEIST ELIF g_sConfVssMP.vehicleSetup.eModel = MINITANK SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_RC_TANK_OWNED, ENUM_TO_INT(g_sConfVssMP.vehicleSetup.eModel) != 0) SET_PLAYER_PURCHASED_RC_TANK(TRUE) CPRINTLN(DEBUG_SHOPS, "DO_MP_VEHICLE_BUY: Big Ass Vehicle details: making sure player owns the RC Tank!") #ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "NETWORK_BUY_ITEM(", iPrice, ",", ENUM_TO_INT(g_sConfVssMP.vehicleSetup.eModel), ",PURCHASE_VEHICLES,1,fromBank:", fromBank, ",\"", GET_LABEL_BUYABLE_VEHICLE(confSbv), "\",ENUM_TO_INT(basource),0,colorHash:", colorHash, ",fromBankAndWallet:", fromBankAndWallet, ")") 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 INT iItemHash = ENUM_TO_INT(g_sConfVssMP.vehicleSetup.eModel) NETWORK_BUY_ITEM(iPrice, iItemHash, PURCHASE_VEHICLES, 1, fromBank, GET_LABEL_BUYABLE_VEHICLE(confSbv), ENUM_TO_INT(basource), 0, colorHash, fromBankAndWallet) IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF IF NETWORK_IS_GAME_IN_PROGRESS() SET_MP_VEHICLE_PURCHASED_PACKED_STAT_BOOL(g_sConfVssMP.VehicleSetup.eModel) IF WAM_GET_STEAL_MISSION_UNLOCK_COUNT_FROM_VEHICLE_MODEL(g_sConfVssMP.vehicleSetup.eModel) > 0 GB_SMUGGLER_SETUP_WAM_PURCHASED_FLOW_PHONECALL() ENDIF IF (g_sConfVssMP.vehicleSetup.eModel != eDLC_BALLISTIC_EQUIPMENT_MODEL) CHECK_LIVE_A_LITTLE_ACHIEVEMENT(g_sConfVssMP.vehicleSetup.eModel, iPrice) ENDIF SET_CLOTHING_FOR_VEHICLE_PURCHASE(siteID, confSbv) WHILE NOT SET_CHIPS_FOR_VEHICLE_PURCHASE(confSbv, eChipsTransactionState) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() RENDER_BROWSER() WAIT(0) ENDWHILE eChipsTransactionState = TRANSACTION_STATE_DEFAULT IF (GET_WVM_VEHICLE_INDEX(g_sConfVssMP.vehicleSetup.eModel) != -1) AND g_sConfVssMP.vehicleSetup.eModel != TRAILERSMALL2 IF g_bPurchasedWeaponisedVehicle = FALSE PRINTLN("[GUNRUN_CALL] - DO_MP_VEHICLE_BUY - g_bPurchasedWeaponisedVehicle = TRUE, player has purchased a weaponised vehicle") g_bPurchasedWeaponisedVehicle = TRUE ENDIF ENDIF IF IS_SBV_A_VEHICLE_FREE_FOR_CRIMINAL_ENTERPRISE_STARTER_PACK(confSbv) SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(GET_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_VEHICLE_FOR_SBV(confSbv)) ENDIF INT iVehicleSpend = GET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_ON_VEHICLES) CONST_INT iCONST_THRESHOLD 1000000 //$1,000,000 INT iSpendTarget = ((iVehicleSpend/iCONST_THRESHOLD)+1) * iCONST_THRESHOLD CPRINTLN(DEBUG_SHOPS, "DO_MP_VEHICLE_BUY: request high vehicle spend ($", iVehicleSpend ," + $", iPrice, ") >= $", iSpendTarget) IF (iVehicleSpend+iPrice) >= iSpendTarget REQUEST_SYSTEM_ACTIVITY_TYPE_HIGH_VEHICLE_SPEND((iSpendTarget/iCONST_THRESHOLD)+1) ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_ON_VEHICLES, iVehicleSpend+iPrice) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY() - vehicle site fail reason \"cannot spend money\"") DO_VEHICLE_FAIL_PAGE(siteID, VSFR_NO_MONEY, confSbv, iPrice) DELETE_VEHICLE(vi) SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) iLastPurchasedVehicleSlot = confMpSlotIndex confMpSlotIndex = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) RETURN FALSE ENDIF g_MpSavedVehicles[iSlotToUse].iPricePaid = iPrice ENDIF IF iPrice = 0 //CDM: 2013-08-27 set flag on vehicle to indicate it was free so player can't sell it to make money. 1596988 SET_BIT(g_MpSavedVehicles[iSlotToUse].iVehicleBS ,MP_SAVED_VEHICLE_FREE_VEHICLE) ENDIF g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.bAnyMpVehicleBought = TRUE bBrowserShoppingSavePending = TRUE //note for posterity, the app can only work on an instantiated vehicle - ask kenneth why //UPDATE_STORED_MP_SAVED_VEHICLE_DATA_FROM_VEHICLE(vi, TRUE,FALSE) //INT iPerVehBS = GET_MP_INT_CHARACTER_STAT(MP_STAT_CHAR_PLYVEH_BITSET) //SET_BIT(iPerVehBS,MP_PERSONAL_VEHICLE_AT_GARAGE) //CLEAR_BIT(iPerVehBS,MP_PERSONAL_TAKEN_OUT_OF_GARAGE) //SET_MP_INT_CHARACTER_STAT(MP_STAT_CHAR_PLYVEH_BITSET, iPerVehBS) MP_SAVE_VEHICLE_SLOT_STATS_FROM_SAVEGAME(iSlotToUse,g_MpSavedVehicles[iSlotToUse],FALSE) CPRINTLN(DEBUG_INTERNET, "Appinternet: Setting car as owned using UPDATE_STORED_MP_SAVED_VEHICLE_DATA_FROM_VEHICLE") DELETE_VEHICLE(vi) SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) iLastPurchasedVehicleSlot = confMpSlotIndex confMpSlotIndex = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) RETURN TRUE ELSE CASSERTLN(DEBUG_INTERNET, "Appinternet: Couldnt find a free slot to save vehicle") #IF NOT IS_NEXTGEN_BUILD DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NO_STORAGE,confSbv, GET_BUYABLE_VEHICLE_PRICE_MP(siteID, confSbv)) #ENDIF #IF IS_NEXTGEN_BUILD DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NO_STORAGE,confSbv, GET_BUYABLE_VEHICLE_PRICE_MP(siteID, confSbv, bAltVersion)) #ENDIF DELETE_VEHICLE(vi) SET_MODEL_AS_NO_LONGER_NEEDED(g_sConfVssMP.VehicleSetup.eModel) iLastPurchasedVehicleSlot = confMpSlotIndex confMpSlotIndex = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) RETURN FALSE ENDIF ENDFUNC PROC UPDATE_VEHICLE_SITES_PAGE_CHANGE(WEBSITE_INDEX_ENUM siteID, INT pageFrom, INT pageTO) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: ",GET_WEBSITE_FROM_INDEX(siteID)," pageFrom: ",pageFrom,", pageTO: ",pageTO) // Check if the transition is one we're interested in like index selection or purchase... REPLACE_MP_VEH_OR_PROP_MENU scms INT mpresult = -1, mpDisplaySlotReturned = -1 SITE_BUYABLE_VEHICLE sbv COUPON_TYPE eDoCoupon = MAX_COUPONS INT iPrice, iSlotToUse //Check if this is the transaction complete webpage BOOL bIsPurchase = FALSE IF (siteID = WWW_SOUTHERNSANANDREASSUPERAUTOS_COM) IF pageTo = 34 bIsPurchase = TRUE ENDIF ELIF (siteID = WWW_DOCKTEASE_COM) IF pageTo = 12 OR pageTo = 26 bIsPurchase = TRUE ENDIF ELIF (siteID = WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM) IF pageTo = 12 OR pageTo = 60 OR pageTo = 88 OR pageTo = 108 OR pageTo = 145 bIsPurchase = TRUE ENDIF ELIF (siteID = WWW_ARENAWAR_TV) IF pageTo = 17 bIsPurchase = TRUE ENDIF ELIF (siteID <> WWW_SOUTHERNSANANDREASSUPERAUTOS_COM) IF pageTo = 12 bIsPurchase = TRUE ENDIF ENDIF IF (siteID = WWW_DOCKTEASE_COM) sbv = GET_VEHICLE_FROM_SITE_AND_PAGE_ID(siteID, pageFrom) IF (sbv = BV_DLC_BIG_YACHT) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: ",GET_WEBSITE_FROM_INDEX(siteID)," sbv: ",GET_LABEL_BUYABLE_VEHICLE(sbv)," pageFrom: ",pageFrom,", pageTO: ",pageTO,", colpick: ",g_eLastBuyableVehicleColourSelected) CONST_INT iYACHT_D_HOME 19 CONST_INT iYACHT_D_MODEL 20 CONST_INT iYACHT_D_FITTINGS 21 CONST_INT iYACHT_D_COLOUR 22 CONST_INT iYACHT_D_LIGHTING 23 CONST_INT iYACHT_D_FLAG 29 CONST_INT iYACHT_D_PERSONALIZE 24 CONST_INT iYACHT_D_CHECKOUT 25 CONST_INT iYACHT_D_PURCHASE 26 CONST_INT iYACHT_D_PURCHASE_SUCCESS 27 CONST_INT iYACHT_D_PURCHASE_FAILED 28 SWITCH pageFrom CASE iYACHT_D_HOME g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR g_sYachtDataStruct.iMod = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_MOD) g_sYachtDataStruct.iFixture = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_FIXTURE) g_sYachtDataStruct.iLighting = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_LIGHTING) g_sYachtDataStruct.iFlag = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_FLAG) g_sYachtDataStruct.iColour = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_COLOR) g_sYachtDataStruct.tl63Name = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_YACHT_NAME, MP_STAT_YACHT_NAME2) g_sYachtDataStruct.tl63NewName = "" IF IS_STRING_NULL_OR_EMPTY(g_sYachtDataStruct.tl63Name) g_sYachtDataStruct.tl63NewName = GET_FILENAME_FOR_AUDIO_CONVERSATION("YACHT_GSY") ENDIF g_sYachtDataStruct.iYachtNameID = GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_YACHT_NAME_ID) CPRINTLN(DEBUG_INTERNET, " - YACHT, Yacht home page iMod:", g_sYachtDataStruct.iMod, " iFixture:", g_sYachtDataStruct.iFixture, " iLighting:", g_sYachtDataStruct.iLighting, " iColour:", g_sYachtDataStruct.iColour, " iFlag:", g_sYachtDataStruct.iFlag) CPRINTLN(DEBUG_INTERNET, " - YACHT, tl63Name:\"", g_sYachtDataStruct.tl63Name, "\", tl63NewName:\"", g_sYachtDataStruct.tl63NewName, "\", iYachtNameID:", g_sYachtDataStruct.iYachtNameID) BREAK CASE iYACHT_D_MODEL // IF g_eLastBuyableVehicleColourSelected != BCV_NO_COLOUR // g_sYachtDataStruct.iMod = ENUM_TO_INT(g_eLastBuyableVehicleColourSelected)-1 // // // If we already own the yacht then we need to use the lower price items // IF IS_BIG_ASS_VEHICLE_BS_SET(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_BIG_YACHT)) // g_sYachtDataStruct.iMod += NUMBER_OF_PRIVATE_YACHT_VARIATIONS // ENDIF // // CPRINTLN(DEBUG_INTERNET, " - YACHT_D_MODEL changed to ", g_sYachtDataStruct.iMod) // ELSE CPRINTLN(DEBUG_INTERNET, " - YACHT_D_MODEL unchanged (", g_sYachtDataStruct.iMod, ")") // ENDIF // g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR BREAK CASE iYACHT_D_FITTINGS // IF g_eLastBuyableVehicleColourSelected != BCV_NO_COLOUR // g_sYachtDataStruct.iFixture = ENUM_TO_INT(g_eLastBuyableVehicleColourSelected)-1 // CPRINTLN(DEBUG_INTERNET, " - YACHT_D_FITTINGS changed to ", g_sYachtDataStruct.iFixture) // ELSE CPRINTLN(DEBUG_INTERNET, " - YACHT_D_FITTINGS unchanged (", g_sYachtDataStruct.iFixture, ")") // ENDIF // g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR BREAK CASE iYACHT_D_COLOUR // IF g_eLastBuyableVehicleColourSelected != BCV_NO_COLOUR // g_sYachtDataStruct.iColour = ENUM_TO_INT(g_eLastBuyableVehicleColourSelected)-1 // CPRINTLN(DEBUG_INTERNET, " - YACHT_D_COLOUR changed to ", g_sYachtDataStruct.iColour) // ELSE CPRINTLN(DEBUG_INTERNET, " - YACHT_D_COLOUR unchanged (", g_sYachtDataStruct.iColour, ")") // ENDIF // g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR BREAK CASE iYACHT_D_LIGHTING // IF g_eLastBuyableVehicleColourSelected != BCV_NO_COLOUR // g_sYachtDataStruct.iLighting = ENUM_TO_INT(g_eLastBuyableVehicleColourSelected)-1 // CPRINTLN(DEBUG_INTERNET, " - YACHT_D_LIGHTING changed to ", g_sYachtDataStruct.iLighting) // ELSE CPRINTLN(DEBUG_INTERNET, " - iYACHT_D_LIGHTING unchanged (", g_sYachtDataStruct.iLighting, ")") // ENDIF // g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR BREAK CASE iYACHT_D_PERSONALIZE // IF g_eLastBuyableVehicleColourSelected != BCV_NO_COLOUR // g_sYachtDataStruct.iFont = ENUM_TO_INT(g_eLastBuyableVehicleColourSelected)-1 // CPRINTLN(DEBUG_INTERNET, " - iYACHT_D_PERSONALIZE changed to ", g_sYachtDataStruct.iFont) // ELSE // CPRINTLN(DEBUG_INTERNET, " - iYACHT_D_PERSONALIZE unchanged (", g_sYachtDataStruct.iFont, ")") // ENDIF // g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR BREAK CASE iYACHT_D_FLAG // IF g_eLastBuyableVehicleColourSelected != BCV_NO_COLOUR // g_sYachtDataStruct.iFlag = GET_YACHT_FLAG_INT_FROM_COLOUR(g_eLastBuyableVehicleColourSelected) // CPRINTLN(DEBUG_INTERNET, " - YACHT_D_FLAG col:", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected), // ", id:", g_sYachtDataStruct.iFlag, ", mod:", GET_MODEL_NAME_FOR_DEBUG(MODEL_NAME_FOR_YACHT_FLAG(g_sYachtDataStruct.iFlag))) // ELSE CPRINTLN(DEBUG_INTERNET, " - YACHT_D_FLAG unchanged (", g_sYachtDataStruct.iFlag, ")") // ENDIF // g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR BREAK CASE iYACHT_D_CHECKOUT CPRINTLN(DEBUG_INTERNET, " - YACHT_D_CHECKOUT Page showing the user choices before the purchase page ", g_iLastSelectedWebIndex, ", ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected)) BREAK CASE iYACHT_D_PURCHASE CPRINTLN(DEBUG_INTERNET, " - YACHT_D_PURCHASE iMod:", g_sYachtDataStruct.iMod, " iFixture:", g_sYachtDataStruct.iFixture, " iLighting:", g_sYachtDataStruct.iLighting, " iColour:", g_sYachtDataStruct.iColour, " iFlag:", g_sYachtDataStruct.iFlag, " tl63Name:\"", g_sYachtDataStruct.tl63Name, "\"") BREAK CASE iYACHT_D_PURCHASE_SUCCESS CPRINTLN(DEBUG_INTERNET, " - YACHT_D_PURCHASE_SUCCESS ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected)) BREAK CASE iYACHT_D_PURCHASE_FAILED CPRINTLN(DEBUG_INTERNET, " - YACHT_D_PURCHASE_FAILED reason:", lastVehicleFailReason) DO_VEHICLE_SITE_FAIL_PAGE_REASON(lastVehicleFailReason) BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, " - YACHT_D_UNKNOWN_", pageFrom) BREAK ENDSWITCH ENDIF ElIF (siteID = WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM) sbv = GET_VEHICLE_FROM_SITE_AND_PAGE_ID(siteID, pageFrom) IF (sbv = BV_DLC_BIG_TRUCK) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: ",GET_WEBSITE_FROM_INDEX(siteID)," sbv: ",GET_LABEL_BUYABLE_VEHICLE(sbv)," pageFrom: ",pageFrom,", pageTO: ",pageTO,", colpick: ",g_eLastBuyableVehicleColourSelected) CONST_INT iTRUCK_D_CAB 54 CONST_INT iTRUCK_D_MODULE_D_1 55 CONST_INT iTRUCK_D_MODULE_D_2 56 CONST_INT iTRUCK_D_MODULE_D_3 57 CONST_INT iTRUCK_D_COLOR 58 CONST_INT iTRUCK_D_SUMMARY 59 CONST_INT iTRUCK_D_PURCHASE 60 CONST_INT iTRUCK_D_PURCHASE_SUCCESS 61 CONST_INT iTRUCK_D_PURCHASE_FAILED 62 SWITCH pageFrom CASE iTRUCK_D_CAB g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR SETUP_TRUCK_GLOBALS_FROM_STATS() CPRINTLN(DEBUG_INTERNET, " - TRUCK, TRUCK home page iCab:", g_sTruckDataStruct.iCab, " iSection1:", g_sTruckDataStruct.iSection1, " iSection2:", g_sTruckDataStruct.iSection2, " iSection3:", g_sTruckDataStruct.iSection3, " iColour:", g_sTruckDataStruct.iColour) BREAK CASE iTRUCK_D_MODULE_D_1 CPRINTLN(DEBUG_INTERNET, " - TRUCK_D_MODULE_D_1 unchanged (", g_sTruckDataStruct.iCab, ")") BREAK CASE iTRUCK_D_MODULE_D_2 CPRINTLN(DEBUG_INTERNET, " - TRUCK_D_MODULE_D_2 unchanged (", g_sTruckDataStruct.iSection1, ")") BREAK CASE iTRUCK_D_MODULE_D_3 CPRINTLN(DEBUG_INTERNET, " - TRUCK_D_MODULE_D_3 unchanged (", g_sTruckDataStruct.iSection1, ")") BREAK CASE iTRUCK_D_COLOR CPRINTLN(DEBUG_INTERNET, " - TRUCK_D_COLOR unchanged (", g_sTruckDataStruct.iColour, ")") BREAK CASE iTRUCK_D_SUMMARY CPRINTLN(DEBUG_INTERNET, " - TRUCK_D_SUMMARY Page showing the user choices before the purchase page ", g_iLastSelectedWebIndex, ", ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected)) BREAK CASE iTRUCK_D_PURCHASE CPRINTLN(DEBUG_INTERNET, " - TRUCK_D_PURCHASE iCab:", g_sTruckDataStruct.iCab, " iSection1:", g_sTruckDataStruct.iSection1, " iSection2:", g_sTruckDataStruct.iSection2, " iSection3:", g_sTruckDataStruct.iSection3, " iColour:", g_sTruckDataStruct.iColour) BREAK CASE iTRUCK_D_PURCHASE_SUCCESS CPRINTLN(DEBUG_INTERNET, " - TRUCK_D_PURCHASE_SUCCESS ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected)) BREAK CASE iTRUCK_D_PURCHASE_FAILED CPRINTLN(DEBUG_INTERNET, " - TRUCK_D_PURCHASE_FAILED reason:", lastVehicleFailReason) DO_VEHICLE_SITE_FAIL_PAGE_REASON(lastVehicleFailReason) BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, " - TRUCK_D_UNKNOWN_", pageFrom) BREAK ENDSWITCH ELIF (sbv = BV_DLC_BIG_PLANE) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: ",GET_WEBSITE_FROM_INDEX(siteID)," sbv: ",GET_LABEL_BUYABLE_VEHICLE(sbv)," pageFrom: ",pageFrom,", pageTO: ",pageTO,", colpick: ",g_eLastBuyableVehicleColourSelected) CONST_INT iAVENGER_D_INTERIOR 83 CONST_INT iAVENGER_D_TURRET 84 CONST_INT iAVENGER_D_VEHICLE_D_WORKSHOP 85 CONST_INT iAVENGER_D_WEAPON_D_WORKSHOP 86 CONST_INT iAVENGER_D_SUMMARY 87 CONST_INT iAVENGER_D_BUY 88 CONST_INT iAVENGER_D_BUY_D_OK 89 CONST_INT iAVENGER_D_BUY_D_FAIL 90 SWITCH pageFrom CASE iAVENGER_D_INTERIOR g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR SETUP_PLANE_GLOBALS_FROM_STATS() CPRINTLN(DEBUG_INTERNET, " - iAVENGER_D_INTERIOR home page iGunTurret:", g_sPlaneDataStruct.iGunTurret, " iVehShop:", g_sPlaneDataStruct.iVehShop, " iWeaShop:", g_sPlaneDataStruct.iWeaShop, " iInterior:", g_sPlaneDataStruct.iInterior, " iAvenger:", g_sPlaneDataStruct.iAvenger) BREAK CASE iAVENGER_D_TURRET CPRINTLN(DEBUG_INTERNET, " - iAVENGER_D_TURRET unchanged (", g_sPlaneDataStruct.iGunTurret, ")") BREAK CASE iAVENGER_D_VEHICLE_D_WORKSHOP CPRINTLN(DEBUG_INTERNET, " - iAVENGER_D_VEHICLE_D_WORKSHOP unchanged (", g_sPlaneDataStruct.iWeaShop, ")") BREAK CASE iAVENGER_D_WEAPON_D_WORKSHOP CPRINTLN(DEBUG_INTERNET, " - iAVENGER_D_WEAPON_D_WORKSHOP unchanged (", g_sPlaneDataStruct.iInterior, ")") BREAK CASE iAVENGER_D_SUMMARY CPRINTLN(DEBUG_INTERNET, " - iAVENGER_D_SUMMARY Page showing the user choices before the purchase page ", g_iLastSelectedWebIndex, ", ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected)) BREAK CASE iAVENGER_D_BUY CPRINTLN(DEBUG_INTERNET, " - iAVENGER_D_BUY iGunTurret:", g_sPlaneDataStruct.iGunTurret, " iVehShop:", g_sPlaneDataStruct.iVehShop, " iWeaShop:", g_sPlaneDataStruct.iWeaShop, " iInterior:", g_sPlaneDataStruct.iInterior, " iAvenger:", g_sPlaneDataStruct.iAvenger) BREAK CASE iAVENGER_D_BUY_D_OK CPRINTLN(DEBUG_INTERNET, " - iAVENGER_D_BUY_D_OK ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected)) BREAK CASE iAVENGER_D_BUY_D_FAIL CPRINTLN(DEBUG_INTERNET, " - iAVENGER_D_BUY_D_FAIL reason:", lastVehicleFailReason) DO_VEHICLE_SITE_FAIL_PAGE_REASON(lastVehicleFailReason) BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, " - PLANE_D_UNKNOWN_", pageFrom) BREAK ENDSWITCH ELIF (sbv = BV_DLC_HACKER_TRUCK) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: ",GET_WEBSITE_FROM_INDEX(siteID)," sbv: ",GET_LABEL_BUYABLE_VEHICLE(sbv)," pageFrom: ",pageFrom,", pageTO: ",pageTO,", colpick: ",g_eLastBuyableVehicleColourSelected) CONST_INT iHACKERTRUCK_D_TINT 101 CONST_INT iHACKERTRUCK_D_DECAL 102 CONST_INT iHACKERTRUCK_D_MISSILE_D_LAUNCHER 103 CONST_INT iHACKERTRUCK_D_DRONE_D_STATION 104 CONST_INT iHACKERTRUCK_D_WEAPON_D_STATION 105 CONST_INT iHACKERTRUCK_D_MOTORCYCLE_D_WORKSHOP 106 CONST_INT iHACKERTRUCK_D_SUMMARY 107 CONST_INT iHACKERTRUCK_D_BUY 108 CONST_INT iHACKERTRUCK_D_SOLD 109 CONST_INT iHACKERTRUCK_D_NOSALE 110 SWITCH pageFrom CASE iHACKERTRUCK_D_TINT g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR SETUP_HACKER_TRUCK_GLOBALS_FROM_STATS() CPRINTLN(DEBUG_INTERNET, " - HACKERTRUCK_D_TINT, hacker truck home page iCab:", g_sHackerTruckDataStruct.iCab, " iTint:", g_sHackerTruckDataStruct.iTint) BREAK CASE iHACKERTRUCK_D_DECAL CPRINTLN(DEBUG_INTERNET, " - HACKERTRUCK_D_DECAL unchanged (", g_sHackerTruckDataStruct.iDecal, ")") BREAK CASE iHACKERTRUCK_D_MISSILE_D_LAUNCHER CPRINTLN(DEBUG_INTERNET, " - HACKERTRUCK_D_MISSILE_D_LAUNCHER unchanged (", g_sHackerTruckDataStruct.iMissileLauncher, ")") BREAK CASE iHACKERTRUCK_D_DRONE_D_STATION CPRINTLN(DEBUG_INTERNET, " - HACKERTRUCK_D_DRONE_D_STATION unchanged (", g_sHackerTruckDataStruct.iDroneStation, ")") BREAK CASE iHACKERTRUCK_D_WEAPON_D_STATION CPRINTLN(DEBUG_INTERNET, " - HACKERTRUCK_D_WEAPON_D_STATION unchanged (", g_sHackerTruckDataStruct.iWeaShop, ")") BREAK CASE iHACKERTRUCK_D_MOTORCYCLE_D_WORKSHOP CPRINTLN(DEBUG_INTERNET, " - HACKERTRUCK_D_MOTORCYCLE_D_WORKSHOP unchanged (", g_sHackerTruckDataStruct.iVehShop, ")") BREAK CASE iHACKERTRUCK_D_SUMMARY CPRINTLN(DEBUG_INTERNET, " - HACKERTRUCK_D_SUMMARY Page showing the user choices before the purchase page ", g_iLastSelectedWebIndex, ", ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected)) BREAK CASE iHACKERTRUCK_D_BUY CPRINTLN(DEBUG_INTERNET, " - HACKERTRUCK_D_BUY iCab:", g_sHackerTruckDataStruct.iCab, " iDecal:", g_sHackerTruckDataStruct.iDecal, " iColour:", g_sHackerTruckDataStruct.iTint, " iMissileLauncher:", g_sHackerTruckDataStruct.iMissileLauncher, " iDroneStation:", g_sHackerTruckDataStruct.iDroneStation, " iWeaShop:", g_sHackerTruckDataStruct.iWeaShop, " iVehShop:", g_sHackerTruckDataStruct.iVehShop) BREAK CASE iHACKERTRUCK_D_SOLD CPRINTLN(DEBUG_INTERNET, " - HACKERTRUCK_D_SOLD ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected)) BREAK CASE iHACKERTRUCK_D_NOSALE CPRINTLN(DEBUG_INTERNET, " - HACKERTRUCK_D_NOSALE reason:", lastVehicleFailReason) DO_VEHICLE_SITE_FAIL_PAGE_REASON(lastVehicleFailReason) BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, " - TRUCK_1_D_UNKNOWN_", pageFrom) BREAK ENDSWITCH #IF FEATURE_HEIST_ISLAND ELIF (sbv = BV_IH_KOSATKA) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: ",GET_WEBSITE_FROM_INDEX(siteID)," sbv: ",GET_LABEL_BUYABLE_VEHICLE(sbv)," pageFrom: ",pageFrom,", pageTO: ",pageTO,", colpick: ",g_eLastBuyableVehicleColourSelected) CONST_INT iSUB_D_COLOR 138 CONST_INT iSUB_D_FLAG 139 CONST_INT iSUB_D_SONAR 140 CONST_INT iSUB_D_MISSILES 141 CONST_INT iSUB_D_WEAPON_D_WORKSHOP 142 CONST_INT iSUB_D_VEHICLES 143 CONST_INT iSUB_D_SUMMARY 144 CONST_INT iSUB_D_PURCHASE 145 CONST_INT iSUB_D_PURCHASE_OK 146 CONST_INT iSUB_D_PURCHASE_FAIL 147 SWITCH pageFrom CASE iSUB_D_COLOR g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR SETUP_KOSATKA_GLOBALS_FROM_STATS() CPRINTLN(DEBUG_INTERNET, " - iSUB_D_COLOR, kosatka home page iOwned:", g_sKosatkaDataStruct.iOwned, " iColour:", g_sKosatkaDataStruct.iColour) BREAK CASE iSUB_D_FLAG CPRINTLN(DEBUG_INTERNET, " - iSUB_D_FLAG unchanged (", g_sKosatkaDataStruct.iFlag, ")") BREAK CASE iSUB_D_SONAR CPRINTLN(DEBUG_INTERNET, " - iSUB_D_SONAR unchanged (", g_sKosatkaDataStruct.iSonar, ")") BREAK CASE iSUB_D_MISSILES CPRINTLN(DEBUG_INTERNET, " - iSUB_D_MISSILES unchanged (", g_sKosatkaDataStruct.iMissiles, ")") BREAK CASE iSUB_D_WEAPON_D_WORKSHOP CPRINTLN(DEBUG_INTERNET, " - iSUB_D_WEAPON_D_WORKSHOP unchanged (", g_sKosatkaDataStruct.iWeaShop, ")") BREAK CASE iSUB_D_VEHICLES CPRINTLN(DEBUG_INTERNET, " - iSUB_D_WEAPON_D_VEHICLES unchanged, g_sKosatkaDataStruct.iSeaSparrow2 (", g_sKosatkaDataStruct.iSeaSparrow2, ")") CPRINTLN(DEBUG_INTERNET, " - iSUB_D_WEAPON_D_VEHICLES unchanged, g_sKosatkaDataStruct.iAvisa (", g_sKosatkaDataStruct.iAvisa, ")") BREAK CASE iSUB_D_SUMMARY CPRINTLN(DEBUG_INTERNET, " - iSUB_D_SUMMARY Page showing the user choices before the purchase page ", g_iLastSelectedWebIndex, ", ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected)) BREAK CASE iSUB_D_PURCHASE CPRINTLN(DEBUG_INTERNET, " - iSUB_D_PURCHASE iColour:", g_sKosatkaDataStruct.iColour, " iFlag:", g_sKosatkaDataStruct.iFlag, " iMissiles:", g_sKosatkaDataStruct.iMissiles, " iSonar:", g_sKosatkaDataStruct.iSonar, " iWeaShop:", g_sKosatkaDataStruct.iWeaShop, " iSeaSparrow2:", g_sKosatkaDataStruct.iSeaSparrow2, " iAvisa:", g_sKosatkaDataStruct.iAvisa) BREAK CASE iSUB_D_PURCHASE_OK CPRINTLN(DEBUG_INTERNET, " - iSUB_D_PURCHASE_OK ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected)) BREAK CASE iSUB_D_PURCHASE_FAIL CPRINTLN(DEBUG_INTERNET, " - iSUB_D_PURCHASE_FAIL reason:", lastVehicleFailReason) DO_VEHICLE_SITE_FAIL_PAGE_REASON(lastVehicleFailReason) BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, " - UNKNOWN", pageFrom) BREAK ENDSWITCH #ENDIF ENDIF ENDIF IF bIsPurchase // Check correct range for a transaction // 3 to 33 for SP, multiplayer has more vehicles IF (IS_INDEX_VALID_FOR_VEH_SITE(siteID, pageFrom-3)) OR (pageFrom > 2 AND pageFrom < 34) // Attempt a transaction // Is the vehicle valid for that page? sbv = GET_VEHICLE_FROM_SITE_AND_PAGE_ID(siteID, pageFrom) CPRINTLN(DEBUG_INTERNET, "GET_VEHICLE_FROM_SITE_AND_PAGE_ID(",GET_WEBSITE_FROM_INDEX(siteID), ", pageFrom:", pageFrom,", SBV_", GET_LABEL_BUYABLE_VEHICLE(sbv), ":", sbv, ")") IF !g_bInMultiplayer BOOL iAlternateVeh = IS_SBV_AN_ALTERNATE_VEHICLE(sbv, siteID, g_eLastBuyableVehicleColourSelected) iPrice = GET_BUYABLE_VEHICLE_PRICE_SP(sbv, siteID, iAlternateVeh) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: Price: $", iPrice, " as iAlternateVeh = ", iAlternateVeh) // Is the vehicle already owned for that page? IF GET_HAS_VEHICLE_BEEN_BOUGHT_FROM_WEBSITE(sbv, GET_CURRENT_PLAYER_PED_ENUM()) CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_FAIL_PAGE: VSFR_ALREADY_OWNED") DO_VEHICLE_FAIL_PAGE(siteID, VSFR_ALREADY_OWNED, sbv, iPrice) EXIT ENDIF // Prevent the player from buying the Marshall if they were given it for free. IF sbv = BV_NG_MARSHALL AND g_savedGlobals.sCountryRaceData.bMarshallUnlocked CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_FAIL_PAGE: VSFR_ALREADY_OWNED") DO_VEHICLE_FAIL_PAGE(siteID, VSFR_ALREADY_OWNED, sbv, iPrice) EXIT ENDIF // Can the current player afford the vehicle? IF iPrice > 0 AND iPrice > GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_FAIL_PAGE: VSFR_NO_MONEY") DO_VEHICLE_FAIL_PAGE(siteID, VSFR_NO_MONEY, sbv, iPrice) EXIT ENDIF // Does the player have a garage, hangar, etc. to store the vehicle? IF NOT GET_SP_CAN_PLAYER_STORE_VEHICLE(sbv) CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_FAIL_PAGE: VSFR_NO_STORAGE") DO_VEHICLE_FAIL_PAGE(siteID, VSFR_NO_STORAGE,sbv, iPrice) EXIT ENDIF //Can the player fit the vehicle into their inventory of vehicles IF NOT GET_HAS_DOES_PLAYER_HAVE_SPACE_IN_GARAGE(sbv, GET_CURRENT_PLAYER_PED_ENUM()) CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_FAIL_PAGE: VSFR_NO_INV_SPACE") DO_VEHICLE_FAIL_PAGE(siteID, VSFR_NO_INV_SPACE, sbv, iPrice) EXIT ENDIF // Check specific vehicle website IF (eDoCoupon = MAX_COUPONS) AND (iPrice > 0) IF sbv = BV_GO_HERMES IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2017) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_CAR_XMAS2017)") iPrice = 0 eDoCoupon = COUPON_CAR_XMAS2017 ENDIF ELIF sbv = BV_AW_CLIQUE IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2018) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_CAR_XMAS2018)") iPrice = 0 eDoCoupon = COUPON_CAR_XMAS2018 ENDIF ELIF sbv = BV_A_BUZZARD IF DOES_SAVE_HAVE_COUPON(COUPON_HELI_XMAS2018) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_HELI_XMAS2018)") iPrice = 0 eDoCoupon = COUPON_HELI_XMAS2018 ENDIF ELIF sbv = BV_DLC_INSURGENT IF DOES_SAVE_HAVE_COUPON(COUPON_CAR2_XMAS2018) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_CAR2_XMAS2018)") iPrice = 0 eDoCoupon = COUPON_CAR2_XMAS2018 ENDIF #IF FEATURE_GEN9_EXCLUSIVE ELIF sbv = BV_G9E_S95 IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_GEN9_MIGRATION) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_CAR_GEN9_MIGRATION)") iPrice = 0 eDoCoupon = COUPON_CAR_GEN9_MIGRATION ENDIF #ENDIF ENDIF ENDIF IF (eDoCoupon = MAX_COUPONS) AND (iPrice > 0) SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_SITE) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_CAR_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) eDoCoupon = COUPON_CAR_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_CAR_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_CAR_SITE) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_CASINO_CAR_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) eDoCoupon = COUPON_CASINO_CAR_SITE ENDIF BREAK CASE WWW_ELITASTRAVEL_COM IF DOES_SAVE_HAVE_COUPON(COUPON_PLANE_SITE) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_PLANE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) eDoCoupon = COUPON_PLANE_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_PLANE_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_PLANE_SITE) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_CASINO_PLANE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) eDoCoupon = COUPON_CASINO_PLANE_SITE ENDIF BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM IF DOES_SAVE_HAVE_COUPON(COUPON_MIL_SITE) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_MIL_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) eDoCoupon = COUPON_MIL_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_MIL_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_MIL_SITE) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_CASINO_MIL_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) eDoCoupon = COUPON_CASINO_MIL_SITE ENDIF BREAK CASE WWW_DOCKTEASE_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_BOAT_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_BOAT_SITE) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_CASINO_BOAT_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) eDoCoupon = COUPON_CASINO_BOAT_SITE ENDIF BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_CAR_SITE2, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_CAR_SITE2) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_CASINO_CAR_SITE2)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) eDoCoupon = COUPON_CASINO_CAR_SITE2 ENDIF BREAK CASE WWW_PANDMCYCLES_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_BIKE_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_BIKE_SITE) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(COUPON_CASINO_BIKE_SITE)") iPrice = CEIL(0.90 * (TO_FLOAT(iPrice))) eDoCoupon = COUPON_CASINO_BIKE_SITE ENDIF BREAK ENDSWITCH ENDIF IF !(eDoCoupon = MAX_COUPONS) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: REDEEM_COUPON(", eDoCoupon, ")") REDEEM_COUPON(eDoCoupon) ENDIF // Do the payment SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: DEBIT_BANK_ACCOUNT(BAAC_MOTORSPORT_SITE)") DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_MOTORSPORT_SITE, iPrice) BREAK CASE WWW_ELITASTRAVEL_COM CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: DEBIT_BANK_ACCOUNT(BAAC_PLANE_SITE)") DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_PLANE_SITE, iPrice) BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: DEBIT_BANK_ACCOUNT(BAAC_ARMY_SITE)") DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_ARMY_SITE, iPrice) BREAK CASE WWW_DOCKTEASE_COM CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: DEBIT_BANK_ACCOUNT(BAAC_BOAT_SITE)") DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_BOAT_SITE, iPrice) BREAK CASE WWW_PANDMCYCLES_COM CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: DEBIT_BANK_ACCOUNT(BAAC_BIKE_SITE)") DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_BIKE_SITE, iPrice) BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: DEBIT_BANK_ACCOUNT(BAAC_SUPERAUTO_SITE)") DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_SUPERAUTO_SITE, iPrice) BREAK CASE WWW_BENNYSORIGINALMOTORWORKS_COM CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: DEBIT_BANK_ACCOUNT(BAAC_LOWRIDER_SITE)") DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_LOWRIDER_SITE, iPrice) BREAK CASE WWW_ARENAWAR_TV CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: DEBIT_BANK_ACCOUNT(BAAC_ARENA_SITE)") DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_ARENA_SITE, iPrice) BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: invalid siteID ", GET_WEBSITE_FROM_INDEX(siteID)) BREAK ENDSWITCH INT iVehicleSpendSP0, iVehicleSpendSP1, iVehicleSpendSP2 STAT_GET_INT(SP0_SP_MONEY_SPENT_ON_VEHICLES, iVehicleSpendSP0) STAT_GET_INT(SP1_SP_MONEY_SPENT_ON_VEHICLES, iVehicleSpendSP1) STAT_GET_INT(SP2_SP_MONEY_SPENT_ON_VEHICLES, iVehicleSpendSP2) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_MICHAEL STAT_SET_INT(SP0_SP_MONEY_SPENT_ON_VEHICLES, iVehicleSpendSP0+iPrice) BREAK CASE CHAR_FRANKLIN STAT_SET_INT(SP1_SP_MONEY_SPENT_ON_VEHICLES, iVehicleSpendSP1+iPrice) BREAK CASE CHAR_TREVOR STAT_SET_INT(SP2_SP_MONEY_SPENT_ON_VEHICLES, iVehicleSpendSP2+iPrice) BREAK ENDSWITCH PURCHASE_COMPLETE_AUDIO_LINE() DO_SP_VEHICLE_BUY(sbv, GET_CURRENT_PLAYER_PED_ENUM(), g_sConfVssMP.VehicleSetup, siteID) GO_TO_WEBSITE(GET_VEHICLE_PURCHASE_SUCCESS_PAGE(siteID, sbv)) PLAY_SOUND_FRONTEND(-1, "Click_Special"," WEB_NAVIGATION_SOUNDS_PHONE") ELSE confMpSlotIndex = -1 iLastPurchasedVehicleSlot = -1 confMPDisplayIndex = -1 RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) BOOL bAltVersion = IS_SBV_AN_ALTERNATE_VEHICLE(sbv, siteID, g_eLastBuyableVehicleColourSelected) INT iAltVersion = -1 IF bAltVersion iAltVersion = 1 ENDIF iPrice = GET_BUYABLE_VEHICLE_PRICE_MP(siteID, sbv, bAltVersion) IF IS_BUYABLE_VEHICLE_SUITABLE_FOR_GARAGE(sbv) IF NOT DOES_PLAYER_OWN_VEHICLE_STORAGE_FOR_VEHICLE_MODEL(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv, iAltVersion)) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: VSFR_NO_STORAGE ", GET_LABEL_BUYABLE_VEHICLE(sbv), " ") DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NO_STORAGE,sbv, iPrice) EXIT ENDIF INT iSVMIndex = GET_SVM_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv, iAltVersion)) IF iSVMIndex != -1 IF SVM_IS_SPECIAL_VEHICLE_SLOT_OCCUPUED(iSVMIndex) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: Special Vehicle ", GET_LABEL_BUYABLE_VEHICLE(sbv), " (index:", iSVMIndex, ") is already owned") DO_VEHICLE_FAIL_PAGE(siteID,VSFR_ALREADY_OWNED,sbv, iPrice) EXIT ENDIF ENDIF INT iWVMSlot = GET_WVM_VEHICLE_SLOT(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv, iAltVersion)) IF iWVMSlot != -1 IF WVM_IS_SPECIAL_VEHICLE_SLOT_OCCUPUED(iWVMSlot) CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: Weaponized Vehicle ", GET_LABEL_BUYABLE_VEHICLE(sbv), " (slot:", iWVMSlot, ") is already owned") DO_VEHICLE_FAIL_PAGE(siteID,VSFR_ALREADY_OWNED,sbv, iPrice) EXIT ENDIF ENDIF INT iFDSDisplaySlot = GET_FDS_VEHICLE_DISPLAY_SLOT(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv, iAltVersion)) IF iFDSDisplaySlot != -1 INT iSaveSlot = -1 MPSV_GET_SAVE_SLOT_FROM_DISPLAY_SLOT(iFDSDisplaySlot, iSaveSlot) IF iSaveSlot >= 0 MODEL_NAMES vehModel = INT_TO_ENUM(MODEL_NAMES,GET_MP_INT_CHARACTER_STAT(GET_INT_STAT_FOR_VEHICLE_SLOT(MPSV_STAT_ELEMENT_MODEL,iSaveSlot))) IF vehModel != DUMMY_MODEL_FOR_SCRIPT CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: Special Vehicle ", GET_SAFE_DISPLAY_NAME_FROM_VEHICLE_MODEL(vehModel), " (iDisplaySlot:", iFDSDisplaySlot, ", iSaveSlot:", iSaveSlot, ") is already owned") DO_VEHICLE_FAIL_PAGE(siteID,VSFR_ALREADY_OWNED,sbv, iPrice) EXIT ELSE CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: Special Vehicle ", "DUMMY_MODEL_FOR_SCRIPT", " (iDisplaySlot:", iFDSDisplaySlot, ", iSaveSlot:", iSaveSlot, ") is not currently owned") ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: Special Vehicle ", GET_LABEL_BUYABLE_VEHICLE(sbv), " (iDisplaySlot:", iFDSDisplaySlot, ", iSaveSlot:", iSaveSlot, ") has unknown save slot") ENDIF ENDIF ELSE //is it already owned? INT iBigAssID = GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(sbv, g_eLastBuyableVehicleColourSelected) IF (sbv = BV_DLC_BIG_YACHT) INT ydFlag = GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_YACHT_DATA) // Data Index Bit Width Notes // Vechicle ID 0 6 18 is used for the Yacht // Colour 6 6 Valid range 0 - 63, expected range 0 - 15 // Lighting 12 6 Valid range 0 - 63, expected range 0 - 11 // Flag 18 6 Valid range 0 - 63, expected range 0 - 45 // Model 24 2 Valid range 0 - 3, expected range 0 - 2 // Fittings 26 2 Valid range 0 - 3, expected range 0 - 1 g_sYachtDataStruct.iColour = GET_ACTIONSCRIPT_PARAM(ydFlag, 6,6) g_sYachtDataStruct.iLighting = GET_ACTIONSCRIPT_PARAM(ydFlag, 12,6) g_sYachtDataStruct.iFlag = GET_ACTIONSCRIPT_PARAM(ydFlag, 18,6) g_sYachtDataStruct.iMod = GET_ACTIONSCRIPT_PARAM(ydFlag, 24,2) g_sYachtDataStruct.iFixture = GET_ACTIONSCRIPT_PARAM(ydFlag, 26,2) IF NOT IS_YACHT_STRUCT_VALID(g_sYachtDataStruct) DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NOT_SAFE,sbv, iPrice) EXIT ENDIF // If we already own the yacht then we need to use the lower price items IF IS_BIG_ASS_VEHICLE_BS_SET(iBigAssID) g_sYachtDataStruct.iMod += NUMBER_OF_PRIVATE_YACHT_VARIATIONS ENDIF iPrice = GET_BIG_YACHT_MP_PRICE_MP(IS_BIG_ASS_VEHICLE_BS_SET(iBigAssID), g_sYachtDataStruct.iColour, g_sYachtDataStruct.iLighting, g_sYachtDataStruct.iFlag, g_sYachtDataStruct.iMod, g_sYachtDataStruct.iFixture, g_sYachtDataStruct.tl63NewName, iYachtColourPrice, iYachtLightingPrice, iYachtFlagPrice, iYachtModPrice, iYachtFixturePrice, iYachtNamePrice) ELIF (sbv = BV_DLC_BIG_TRUCK) INT ydFlag = GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_TRUCK_DATA) // Data Index Bit Width Notes // Cab 0 4 Valid range: 0 - 15, expected values: 0, 1 // Slot 1 Module 4 4 Valid range: 0 - 15, expected values: 0 - 6 (see Modules table above) // Slot 2 Module 8 4 Valid range: 0 - 15, expected values: 0 - 6 (see Modules table above) // Slot 3 Module 12 4 Valid range: 0 - 15, expected values: 0 - 6 (see Modules table above) // Colour Scheme 16 4 Valid range: 0 - 15, expected values: 0 - 13 (see Colours table above) g_sTruckDataStruct.iCab = GET_ACTIONSCRIPT_PARAM(ydFlag,0,4) g_sTruckDataStruct.iSection1 = GET_ACTIONSCRIPT_PARAM(ydFlag,4,4) g_sTruckDataStruct.iSection2 = GET_ACTIONSCRIPT_PARAM(ydFlag,8,4) g_sTruckDataStruct.iSection3 = GET_ACTIONSCRIPT_PARAM(ydFlag,12,4) g_sTruckDataStruct.iColour = GET_ACTIONSCRIPT_PARAM(ydFlag,16,4) // IF NOT IS_TRUCK_STRUCT_VALID(g_sTruckDataStruct) // DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NOT_SAFE,sbv, iPrice) // EXIT // ENDIF iPrice = GET_BIG_TRUCK_MP_PRICE_MP(IS_BIG_ASS_VEHICLE_BS_SET(iBigAssID), g_sTruckDataStruct.iCab, g_sTruckDataStruct.iSection1, g_sTruckDataStruct.iSection2, g_sTruckDataStruct.iSection3, g_sTruckDataStruct.iColour, sTruck_price_struct) ELIF (sbv = BV_DLC_BIG_PLANE) INT ydFlag = GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_PLANE_DATA) // Data Index Bit Width Notes // Gun Turret 0 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) // Vehicle Workshop 1 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) // Weapon Workshop 2 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) // Interior Style 3 4 Valid range: 0 - 15, expected values: 0 - 8 g_sPlaneDataStruct.iAvenger = ENUM_TO_INT(GET_ARMORY_AIRCRAFT_MODEL()) g_sPlaneDataStruct.iGunTurret = GET_ACTIONSCRIPT_PARAM(ydFlag,0,1) g_sPlaneDataStruct.iVehShop = GET_ACTIONSCRIPT_PARAM(ydFlag,1,1) g_sPlaneDataStruct.iWeaShop = GET_ACTIONSCRIPT_PARAM(ydFlag,2,1) g_sPlaneDataStruct.iInterior = GET_ACTIONSCRIPT_PARAM(ydFlag,3,4) // IF NOT IS_PLANE_STRUCT_VALID(g_sPlaneDataStruct) // DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NOT_SAFE,sbv, iPrice) // EXIT // ENDIF iPrice = GET_BIG_PLANE_MP_PRICE_MP(IS_BIG_ASS_VEHICLE_BS_SET(iBigAssID), g_sPlaneDataStruct.iGunTurret, g_sPlaneDataStruct.iVehShop, g_sPlaneDataStruct.iWeaShop, g_sPlaneDataStruct.iInterior, g_sPlaneDataStruct.iAvenger, sPlane_price_struct) ELIF (sbv = BV_DLC_HACKER_TRUCK) INT ydFlag = GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_PLANE_DATA) // Data Index Bit Width Notes // Tint 0 4 Valid range: 0 - 15, expected values: 0 - 8 // Decal 4 5 Valid range: 0 - 32, expected values: 0 - 24 // Missile Launcher 9 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) // Drone Station 10 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) // Weapon Station 11 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) // Vehicle Workshop 12 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) g_sHackerTruckDataStruct.iCab = ENUM_TO_INT(GET_HACKER_TRUCK_MODEL()) g_sHackerTruckDataStruct.iTint = GET_ACTIONSCRIPT_PARAM(ydFlag,0,4) g_sHackerTruckDataStruct.iDecal = GET_ACTIONSCRIPT_PARAM(ydFlag,4,5) g_sHackerTruckDataStruct.iMissileLauncher = GET_ACTIONSCRIPT_PARAM(ydFlag,9,1) g_sHackerTruckDataStruct.iDroneStation = GET_ACTIONSCRIPT_PARAM(ydFlag,10,1) g_sHackerTruckDataStruct.iWeaShop = GET_ACTIONSCRIPT_PARAM(ydFlag,11,1) g_sHackerTruckDataStruct.iVehShop = GET_ACTIONSCRIPT_PARAM(ydFlag,12,1) // IF NOT IS_HACKER_TRUCK_STRUCT_VALID(g_sHackerTruckDataStruct) // DO_VEHICLE_FAIL_PAGE(siteID,VSFR_NOT_SAFE,sbv, iPrice) // EXIT // ENDIF iPrice = GET_HACKER_TRUCK_MP_PRICE_MP(IS_BIG_ASS_VEHICLE_BS_SET(iBigAssID), g_sHackerTruckDataStruct, sHacker_truck_price_struct) #IF FEATURE_HEIST_ISLAND ELIF (sbv = BV_IH_KOSATKA) INT ydFlag = GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_PLANE_DATA) //Colour 0 5 Valid range: 0 - 31, expected values: 0 - 15 //Flag 5 6 Valid range: 0 - 63, expected values: 0 - 49 //Sonar 11 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) //Missiles 12 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) //Weapon Workshop 13 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) //Helicopter 14 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) //Mini Submarine 15 1 Valid range: 0 - 1, expected values: 0 (not purchased), 1 (purchased) g_sKosatkaDataStruct.iOwned = ENUM_TO_INT(GET_SUBMARINE_MODEL()) g_sKosatkaDataStruct.iColour = GET_ACTIONSCRIPT_PARAM(ydFlag,0,5) g_sKosatkaDataStruct.iFlag = GET_ACTIONSCRIPT_PARAM(ydFlag,5,6) g_sKosatkaDataStruct.iSonar = GET_ACTIONSCRIPT_PARAM(ydFlag,11,1) g_sKosatkaDataStruct.iMissiles = GET_ACTIONSCRIPT_PARAM(ydFlag,12,1) g_sKosatkaDataStruct.iWeaShop = GET_ACTIONSCRIPT_PARAM(ydFlag,13,1) g_sKosatkaDataStruct.iSeaSparrow2 = GET_ACTIONSCRIPT_PARAM(ydFlag,14,1) g_sKosatkaDataStruct.iAvisa = GET_ACTIONSCRIPT_PARAM(ydFlag,15,1) iPrice = GET_KOSATKA_PRICE_MP(IS_BIG_ASS_VEHICLE_BS_SET(iBigAssID), g_sKosatkaDataStruct, sKosatka_price_struct) #ENDIF ELSE IF IS_BIG_ASS_VEHICLE_BS_SET(iBigAssID) CWARNINGLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: failed due to player already owning ", GET_LABEL_BUYABLE_VEHICLE(sbv), " iBigAssID ", iBigAssID) DO_VEHICLE_FAIL_PAGE(siteID,VSFR_ALREADY_OWNED,sbv, iPrice) EXIT ENDIF ENDIF ENDIF IF g_bInMultiplayer SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_BENNYSORIGINALMOTORWORKS_COM CASE WWW_ARENAWAR_TV iPrice = CEIL(g_sMPTunables.fCarsWebsiteMultiplier * (TO_FLOAT(iPrice))) BREAK CASE WWW_ELITASTRAVEL_COM CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM IF GET_VEHICLE_STORAGE_TYPE(sbv) = VST_HANGAR iPrice = CEIL(g_sMPTunables.fPlanesWebsiteMultiplier * (TO_FLOAT(iPrice))) ELSE iPrice = CEIL(g_sMPTunables.fHelisWebsiteMultiplier * (TO_FLOAT(iPrice))) ENDIF BREAK CASE WWW_DOCKTEASE_COM iPrice = CEIL(g_sMPTunables.fBoatsWebsiteMultiplier * (TO_FLOAT(iPrice))) BREAK CASE WWW_PANDMCYCLES_COM iPrice = CEIL(g_sMPTunables.fBikesWebsiteMultiplier * (TO_FLOAT(iPrice))) BREAK ENDSWITCH IF g_smpTunables.bTurn_on_promotional_eyefind_homepage CASSERTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: Promotional eyefind homepage discount hooked up, check site \"", GET_WEBSITE_FROM_INDEX(siteID), "\"") SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: g_sMPTunables.fLEGENDARY_DISPLAYED_DISCOUNT: ", g_sMPTunables.fLEGENDARY_DISPLAYED_DISCOUNT) iPrice = CEIL((100-g_sMPTunables.fLEGENDARY_DISPLAYED_DISCOUNT)/100.0 * (TO_FLOAT(iPrice))) BREAK CASE WWW_ELITASTRAVEL_COM CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: g_sMPTunables.fELITAS_DISPLAYED_DISCOUNT: ", g_sMPTunables.fELITAS_DISPLAYED_DISCOUNT) iPrice = CEIL((100-g_sMPTunables.fELITAS_DISPLAYED_DISCOUNT)/100.0 * (TO_FLOAT(iPrice))) BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: g_sMPTunables.fSSASA_DISPLAYED_DISCOUNT: ", g_sMPTunables.fSSASA_DISPLAYED_DISCOUNT) iPrice = CEIL((100-g_sMPTunables.fSSASA_DISPLAYED_DISCOUNT)/100.0 * (TO_FLOAT(iPrice))) BREAK ENDSWITCH ENDIF ENDIF COUPON_TYPE eDoCouponPrice = MAX_COUPONS INT iCouponPrice = iPrice // Check specific vehicle website IF (eDoCouponPrice = MAX_COUPONS) IF sbv = BV_GO_HERMES IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2017) iCouponPrice = 0 eDoCouponPrice = COUPON_CAR_XMAS2017 ENDIF ELIF sbv = BV_AW_CLIQUE IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2018) iCouponPrice = 0 eDoCouponPrice = COUPON_CAR_XMAS2018 iAltVersion = 1 CPRINTLN(DEBUG_INTERNET, "UPDATE_VEHICLE_SITES_PAGE_CHANGE: Set BV_AW_CLIQUE iAltVersion to ", iAltVersion) ENDIF ELIF sbv = BV_A_BUZZARD IF DOES_SAVE_HAVE_COUPON(COUPON_HELI_XMAS2018) iCouponPrice = 0 eDoCouponPrice = COUPON_HELI_XMAS2018 ENDIF ELIF sbv = BV_DLC_INSURGENT IF DOES_SAVE_HAVE_COUPON(COUPON_CAR2_XMAS2018) iCouponPrice = 0 eDoCouponPrice = COUPON_CAR2_XMAS2018 ENDIF #IF FEATURE_GEN9_EXCLUSIVE ELIF sbv = BV_G9E_S95 IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_GEN9_MIGRATION) iCouponPrice = 0 eDoCouponPrice = COUPON_CAR_GEN9_MIGRATION ENDIF #ENDIF ENDIF ENDIF IF (eDoCouponPrice = MAX_COUPONS) SWITCH siteID CASE WWW_LEGENDARYMOTORSPORT_NET IF DOES_SAVE_HAVE_COUPON(COUPON_CAR_SITE) iCouponPrice = CEIL(0.90 * (TO_FLOAT(iCouponPrice))) eDoCouponPrice = COUPON_CAR_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_CAR_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_CAR_SITE) iCouponPrice = CEIL(0.90 * (TO_FLOAT(iCouponPrice))) eDoCouponPrice = COUPON_CASINO_CAR_SITE ENDIF BREAK CASE WWW_ELITASTRAVEL_COM IF DOES_SAVE_HAVE_COUPON(COUPON_PLANE_SITE) iCouponPrice = CEIL(0.90 * (TO_FLOAT(iCouponPrice))) eDoCouponPrice = COUPON_PLANE_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_PLANE_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_PLANE_SITE) iCouponPrice = CEIL(0.90 * (TO_FLOAT(iCouponPrice))) eDoCouponPrice = COUPON_CASINO_PLANE_SITE ENDIF BREAK CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM IF DOES_SAVE_HAVE_COUPON(COUPON_MIL_SITE) iCouponPrice = CEIL(0.90 * (TO_FLOAT(iCouponPrice))) eDoCouponPrice = COUPON_MIL_SITE ELIF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_MIL_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_MIL_SITE) iCouponPrice = CEIL(0.90 * (TO_FLOAT(iCouponPrice))) eDoCouponPrice = COUPON_CASINO_MIL_SITE ENDIF BREAK CASE WWW_DOCKTEASE_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_BOAT_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_BOAT_SITE) iCouponPrice = CEIL(0.90 * (TO_FLOAT(iCouponPrice))) eDoCouponPrice = COUPON_CASINO_BOAT_SITE ENDIF BREAK CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_CAR_SITE2, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_CAR_SITE2) iCouponPrice = CEIL(0.90 * (TO_FLOAT(iCouponPrice))) eDoCouponPrice = COUPON_CASINO_CAR_SITE2 ENDIF BREAK CASE WWW_PANDMCYCLES_COM IF CAN_USE_COUPON_ON_VEHICLE(COUPON_CASINO_BIKE_SITE, sbv) AND DOES_SAVE_HAVE_COUPON(COUPON_CASINO_BIKE_SITE) iCouponPrice = CEIL(0.90 * (TO_FLOAT(iCouponPrice))) eDoCouponPrice = COUPON_CASINO_BIKE_SITE ENDIF BREAK ENDSWITCH ENDIF CPRINTLN(DEBUG_INTERNET, "iPrice[$", iPrice, ", $", iCouponPrice, "], NETWORK_GET_VC_BANK_BALANCE(", NETWORK_GET_VC_BANK_BALANCE(), "), NETWORK_GET_VC_WALLET_BALANCE(", NETWORK_GET_VC_WALLET_BALANCE(), ")") IF iCouponPrice > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iCouponPrice, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "NETWORK_CAN_SPEND_MONEY() - vehicle site fail reason \"cannot spend money\" ", GET_LABEL_BUYABLE_VEHICLE(sbv), " $", iPrice) DO_VEHICLE_FAIL_PAGE(siteID, VSFR_NO_MONEY, sbv, iCouponPrice) EXIT ENDIF //#1697899 IF IS_SAVING_HAVING_TROUBLE() CPRINTLN(DEBUG_INTERNET, "IS_SAVING_HAVING_TROUBLE() - vehicle site fail reason \"not safe\"") DO_VEHICLE_FAIL_PAGE(siteID, VSFR_NOT_SAFE, sbv, iPrice) EXIT ENDIF IF NOT IS_VEHICLE_AVAILABLE_PAST_CURRENT_TIME(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv, iAltVersion)) CPRINTLN(DEBUG_INTERNET, "IS_SAVING_HAVING_TROUBLE() - vehicle site fail reason \"not safe\" past current time") DO_VEHICLE_FAIL_PAGE(siteID, VSFR_NOT_SAFE, sbv, iPrice) EXIT ENDIF confSbv = sbv CONFIGURE_STRUCT_FOR_BUYABLE_VEHICLE(confSbv, g_sConfVssMP, TRUE, DEFAULT, iAltVersion, siteID) IF NOT IS_BUYABLE_VEHICLE_SUITABLE_FOR_GARAGE(sbv) // It is a bigass vehicle, try to buy it VEHICLE_SITE_FAIL_REASON reason = VSFR_UNSET IF NOT DO_BIGASS_VEHICLE_BUY(siteID,sbv,iPrice, reason) DO_VEHICLE_FAIL_PAGE(siteID,reason,sbv,iPrice) ELSE // Send the bigass confirmation vehicle conftext IF lastVehicleFailReason != VSFR_ALREADY_OWNED AND lastVehicleFailReason != VSFR_BIGASS_NOT_UNLOCKED SEND_MP_VEHICLE_CONFIRMATION_TEXT(sbv,BCV_NO_COLOUR,siteID,-1,-1) ENDIF //set the damn bit SET_BIG_ASS_VEHICLE_BS(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(sbv, g_eLastBuyableVehicleColourSelected)) GB_SET_SHOULD_REFRESH_OWNED_ABILITY_VEHICLES() IF lastVehicleFailReason != VSFR_ALREADY_OWNED AND lastVehicleFailReason != VSFR_BIGASS_NOT_UNLOCKED MP_BIG_ASS_VEHICLES_STORE_DATA_IN_STATS() REQUEST_SAVE(SSR_REASON_PURCHASE_VEHICLE, STAT_SAVETYPE_IMMEDIATE_FLUSH) ENDIF // Auto close browser if we want to IF SHOULD_BROWSER_CLOSE_AFTER_SUCCESSFUL_BIGASS_VEHICLE_BUY(siteID, sbv) AND NOT bPreviousPegasus // And not renovating vehicle CPRINTLN(DEBUG_INTERNET, "[UPDATE_VEHICLE_SITES_PAGE_CHANGE] Auto closing browser after successful purchase.") CLOSE_BROWSER_AFTER_SUCCESSFUL_PURCHASE() ENDIF ENDIF EXIT ENDIF //if there are no saved models go ahead and do the buy INT iSVMIndex = GET_SVM_VEHICLE_INDEX(g_sConfVssMP.VehicleSetup.eModel) INT iWVMSlot = GET_WVM_VEHICLE_SLOT(g_sConfVssMP.VehicleSetup.eModel) INT iWAMIndex = WAM_GET_STEAL_MISSION_UNLOCK_COUNT_FROM_VEHICLE_MODEL(g_sConfVssMP.vehicleSetup.eModel) INT iFDSDisplaySlot = GET_FDS_VEHICLE_DISPLAY_SLOT(g_sConfVssMP.VehicleSetup.eModel) IF iSVMIndex != -1 iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_IE_WAREHOUSE)) mpDisplaySlotReturned = iSVMIndex+GET_PROPERTY_SLOT_DISPLAY_START_INDEX(PROPERTY_OWNED_SLOT_IE_WAREHOUSE) confMPDisplayIndex = mpDisplaySlotReturned ELIF iWVMSlot != -1 iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,DEFAULT) mpDisplaySlotReturned = iWVMSlot+DISPLAY_SLOT_AA_TRAILER confMPDisplayIndex = mpDisplaySlotReturned ELIF iWAMIndex > 0 iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,DEFAULT) //MP_SAVE_VEHICLE_GET_SUITABLE_HANGAR_SLOT(mpDisplaySlotReturned, iSlotToUse, g_sConfVssMP.VehicleSetup.eModel, TRUE) IF iSlotToUse != -1 //AND mpDisplaySlotReturned = -1 mpDisplaySlotReturned = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_HANGAR)) ENDIF confMPDisplayIndex = mpDisplaySlotReturned ELIF iFDSDisplaySlot != -1 iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_DEFUNCBASE)) mpDisplaySlotReturned = GET_FDS_VEHICLE_DISPLAY_SLOT(g_sConfVssMP.VehicleSetup.eModel) confMPDisplayIndex = mpDisplaySlotReturned ELSE INT iOnlySuitableProperty = -1 CHECK_ONLY_ONE_SUITABLE_PROPERTY(g_sConfVssMP.VehicleSetup.eModel,iOnlySuitableProperty) IF iOnlySuitableProperty != -1 iSlotToUse = MP_SAVE_VEHICLE_GET_EMPTY_SAVE_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,iOnlySuitableProperty) mpDisplaySlotReturned = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,g_sConfVssMP.VehicleSetup.eModel,iOnlySuitableProperty) ELSE iSlotToUse = -1 ENDIF ENDIF IF iSlotToUse = -1 OR mpDisplaySlotReturned = -1 g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE mpDisplaySlotReturned = -1 WHILE !HANDLE_REPLACE_MP_SV_MENU(scms,mpresult,mpDisplaySlotReturned, g_sConfVssMP.VehicleSetup.eModel) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() AND !DO_CHECK_FOR_RAGDOLL_OR_DEAD() //RENDER_BROWSER() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE g_sMenuData.bKeepPhoneForNextDrawMenuCall = FALSE confMpSlotIndex = mpresult confMPDisplayIndex = mpDisplaySlotReturned CPRINTLN(DEBUG_INTERNET, "Menu result was ",confMpSlotIndex, ", ", confMPDisplayIndex) //reload the damn buttons PREP_BROWSER_BUTTONS(FALSE) IF mpresult = -1 OR mpDisplaySlotReturned = -1 //canceled the buy process DO_VEHICLE_FAIL_PAGE(siteID,VSFR_CANCELED,sbv, iPrice) EXIT ENDIF ELSE confMpSlotIndex = iSlotToUse ENDIF confCheck = TRUE IF DO_MP_VEHICLE_BUY(siteID,iAltVersion,iPrice) SEND_MP_VEHICLE_CONFIRMATION_TEXT(sbv, g_eLastBuyableVehicleColourSelected, siteID, mpDisplaySlotReturned, iLastPurchasedVehicleSlot) //REQUEST_SAVE(STAT_SAVETYPE_SCRIPT_MP_GLOBALS) ELSE DO_VEHICLE_FAIL_PAGE(siteID, VSFR_NOT_SAFE, sbv, iPrice) ENDIF ENDIF ELSE CASSERTLN(DEBUG_INTERNET, "GET_VEHICLE_FROM_SITE_AND_PAGE_ID(",GET_WEBSITE_FROM_INDEX(siteID), ", pageFrom:", pageFrom,", SBV_", GET_LABEL_BUYABLE_VEHICLE(sbv), ":", sbv, ") - INVALID???") ENDIF ENDIF ENDPROC PROC HANDLE_BLEETER_SELECT(SCALEFORM_INDEX pagemov) INT iTemp IF g_iLastSelectedWebIndex < 1 EXIT ENDIF INT iPrevBleetPageNo IF g_iLastSelectedWebIndex = 1 iCurrentBleetPageNumber = 1 ELIF g_iLastSelectedWebIndex = 2 iCurrentBleetPageNumber = BLEETER_GET_LAST_PAGE_NUMBER() ELIF g_iLastSelectedWebIndex = 3 -- iCurrentBleetPageNumber ELIF g_iLastSelectedWebIndex = 4 ++ iCurrentBleetPageNumber ELSE IF g_iLastSelectedWebIndex > 4 and g_iLastSelectedWebIndex < 15 IF iCurrentBleetPageNumber > 10 iTemp = (((iCurrentBleetPageNumber - 1) / 10) * 10) iCurrentBleetPageNumber = (g_iLastSelectedWebIndex - 4) + iTemp ELSE iCurrentBleetPageNumber = (g_iLastSelectedWebIndex - 4) ENDIF ENDIF ENDIF IF iPrevBleetPageNo != iCurrentBleetPageNumber BLEETER_UPDATE_BLEETS( pagemov ) BLEETER_ADD_PAGE_TO_HISTORY(iCurrentBleetPageNumber) ENDIF ENDPROC /// PURPOSE: /// Check player's donation on the Epsilon website unlocking the RC flowflags PROC CHECK_EPSILON_DONATION_UNLOCKS(INT iDonation) // Increase saved global IF (g_savedGlobals.sRandomChars.g_iCurrentEpsilonPayment < 1000000) g_savedGlobals.sRandomChars.g_iCurrentEpsilonPayment += iDonation CPRINTLN(DEBUG_RANDOM_CHAR, "Current donation to Epsilon Program is = $", g_savedGlobals.sRandomChars.g_iCurrentEpsilonPayment) ENDIF // $10000 IF IS_THIS_RANDOM_CHARACTER_MISSION_COMPLETED(RC_EPSILON_4) IF NOT GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_DONATED_10000) IF g_savedGlobals.sRandomChars.g_iCurrentEpsilonPayment >= 10000 CPRINTLN(DEBUG_RANDOM_CHAR, "FLOWFLAG_EPSILON_DONATED_10000") //Set epsilon step stat INT iCurrent STAT_GET_INT(NUM_EPSILON_STEP,iCurrent) IF iCurrent < 13 STAT_SET_INT(NUM_EPSILON_STEP,13) SET_ACHIEVEMENT_PROGRESS_SAFE(ENUM_TO_INT(ACH20),13) CPRINTLN(debug_dan,"Epsilon progress:",13) ENDIF SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_DONATED_10000, TRUE) CANCEL_COMMUNICATION(EMAIL_EPSILON4_DONATE) MAKE_AUTOSAVE_REQUEST() ENDIF ENDIF // $5000 ELIF IS_THIS_RANDOM_CHARACTER_MISSION_COMPLETED(RC_EPSILON_2) IF NOT GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_DONATED_5000) IF g_savedGlobals.sRandomChars.g_iCurrentEpsilonPayment >= 5000 CPRINTLN(DEBUG_RANDOM_CHAR, "FLOWFLAG_EPSILON_DONATED_5000") //Set epsilon step stat INT iCurrent STAT_GET_INT(NUM_EPSILON_STEP,iCurrent) IF iCurrent < 5 STAT_SET_INT(NUM_EPSILON_STEP,5) SET_ACHIEVEMENT_PROGRESS_SAFE(ENUM_TO_INT(ACH20),5) CPRINTLN(debug_dan,"Epsilon progress:",5) ENDIF SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_DONATED_5000, TRUE) CANCEL_COMMUNICATION(EMAIL_EPSILON2_DONATE) MAKE_AUTOSAVE_REQUEST() ENDIF ENDIF // $500 ELIF IS_THIS_RANDOM_CHARACTER_MISSION_COMPLETED(RC_EPSILON_1) IF NOT GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_DONATED_500) IF g_savedGlobals.sRandomChars.g_iCurrentEpsilonPayment >= 500 CPRINTLN(DEBUG_RANDOM_CHAR, "FLOWFLAG_EPSILON_DONATED_500") //Set epsilon step stat INT iCurrent STAT_GET_INT(NUM_EPSILON_STEP,iCurrent) IF iCurrent < 3 STAT_SET_INT(NUM_EPSILON_STEP,3) SET_ACHIEVEMENT_PROGRESS_SAFE(ENUM_TO_INT(ACH20),3) CPRINTLN(debug_dan,"Epsilon progress:",3) ENDIF SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_DONATED_500, TRUE) CANCEL_COMMUNICATION(EMAIL_EPSILON1_DONATE) MAKE_AUTOSAVE_REQUEST() ENDIF ENDIF ENDIF ENDPROC PROC HANDLE_EPSILON_SELECT(INT iSelection) CPRINTLN(DEBUG_INTERNET, "HANDLE_EPSILON_SELECT(iSelection:", iSelection, ", g_iWebPageIndexFeedback:", g_iWebPageIndexFeedback, ")") //5 20 : Selection 2 // $500 //5 20 : Selection 3 // $5000 //5 21 : Selection 1 // $25k - Robes SWITCH g_iWebPageIndexFeedback CASE 20 SWITCH iSelection CASE 2 CPRINTLN(DEBUG_RANDOM_CHAR, "Attempting to donate $500 to Epsilon Program") IF GET_TOTAL_CASH(CHAR_MICHAEL) < 500 CPRINTLN(DEBUG_RANDOM_CHAR, "Not enough money to donate...") SF_EPSILON_FAIL(EPSILON_NO_MONEY) EXIT ENDIF // Debit account by $500 DO_BANK_ACCOUNT_ACTION(BANK_ACCOUNT_MICHAEL, BAA_DEBIT, BAAC_EPSILON_SITE_DONATION, 500) // Update donation unlocks CHECK_EPSILON_DONATION_UNLOCKS(500) BREAK CASE 3 CPRINTLN(DEBUG_RANDOM_CHAR, "Attempting to donate $5000 to Epsilon Program") IF GET_TOTAL_CASH(CHAR_MICHAEL) < 5000 CPRINTLN(DEBUG_RANDOM_CHAR, "Not enough money to donate...") SF_EPSILON_FAIL(EPSILON_NO_MONEY) EXIT ENDIF // Debit account by $5000 DO_BANK_ACCOUNT_ACTION(BANK_ACCOUNT_MICHAEL, BAA_DEBIT, BAAC_EPSILON_SITE_DONATION, 5000) // Update donation unlocks CHECK_EPSILON_DONATION_UNLOCKS(5000) BREAK ENDSWITCH BREAK CASE 21 IF iSelection = 1 CPRINTLN(DEBUG_RANDOM_CHAR, "Robes buy triggered, 25k") IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("epsrobes")) < 1 CPRINTLN(DEBUG_RANDOM_CHAR, "Robes buy failed since epsrobes wasn't running") SF_EPSILON_FAIL(EPSILON_OUT_OF_STOCK) EXIT ENDIF IF GET_TOTAL_CASH(CHAR_MICHAEL) < 25000 SF_EPSILON_FAIL(EPSILON_NO_MONEY) EXIT ENDIF DO_BANK_ACCOUNT_ACTION(BANK_ACCOUNT_MICHAEL,BAA_DEBIT,BAAC_EPSILON_ROBES_DONATION, 25000) IF !GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EPSILON_ROBES_BOUGHT) Set_Mission_Flow_Flag_State(FLOWFLAG_EPSILON_ROBES_BOUGHT, TRUE) //Set epsilon step stat INT iCurrent STAT_GET_INT(NUM_EPSILON_STEP,iCurrent) IF iCurrent < 15 STAT_SET_INT(NUM_EPSILON_STEP,15) SET_ACHIEVEMENT_PROGRESS_SAFE(ENUM_TO_INT(ACH20),15) CPRINTLN(debug_dan,"Epsilon progress:",15) ENDIF PURCHASE_COMPLETE_AUDIO_LINE() MAKE_AUTOSAVE_REQUEST() ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC MARK_ROBE_PAGE_VISITED() IF g_iWebPageIndexFeedback = 1 IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("epsrobes")) < 1 CPRINTLN(DEBUG_AMBIENT, "Don't mark Eps robe page visited because Eps Robes isn't running") EXIT ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_MICHAEL CPRINTLN(DEBUG_AMBIENT, "Don't mark Eps robe page visited because player isn't Michael") EXIT ENDIF IF g_bMikeVisitedCultRobePage != TRUE CPRINTLN(DEBUG_AMBIENT, "Mike visited Robe page marked true...") g_bMikeVisitedCultRobePage = TRUE ENDIF ENDIF ENDPROC FUNC BOOL BOUGHT_CON_SITE() CPRINTLN(DEBUG_INTERNET, "BOUGHT_CON_SITE: Checked") SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_MICHAEL IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MIKE_CON_BOUGHT) RETURN TRUE ELSE RETURN FALSE ENDIF BREAK CASE CHAR_TREVOR IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_TREV_CON_BOUGHT) RETURN TRUE ELSE RETURN FALSE ENDIF BREAK CASE CHAR_FRANKLIN IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_FRANK_CON_BOUGHT) RETURN TRUE ELSE RETURN FALSE ENDIF BREAK ENDSWITCH RETURN TRUE // Assume MP char has bought it already ENDFUNC FUNC BOOL BUY_CON_SITE() IF BOUGHT_CON_SITE() CPRINTLN(DEBUG_INTERNET, "BOUGHT_CON_SITE: Already bought") RETURN TRUE ENDIF SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_MICHAEL IF GET_TOTAL_CASH(CHAR_MICHAEL) < 10000 RETURN FALSE ELSE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MIKE_CON_BOUGHT, TRUE) PURCHASE_COMPLETE_AUDIO_LINE() DO_BANK_ACCOUNT_ACTION(BANK_ACCOUNT_MICHAEL,BAA_DEBIT, BAAC_CONSITE, 10000, TRUE) CPRINTLN(DEBUG_INTERNET, "BOUGHT_CON_SITE: Transaction BANK_ACCOUNT_MICHAEL") ENDIF BREAK CASE CHAR_TREVOR IF GET_TOTAL_CASH(CHAR_TREVOR) < 10000 RETURN FALSE ELSE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_TREV_CON_BOUGHT, TRUE) PURCHASE_COMPLETE_AUDIO_LINE() DO_BANK_ACCOUNT_ACTION(BANK_ACCOUNT_TREVOR, BAA_DEBIT, BAAC_CONSITE, 10000, TRUE) CPRINTLN(DEBUG_INTERNET, "BOUGHT_CON_SITE: Transaction BANK_ACCOUNT_TREVOR") ENDIF BREAK CASE CHAR_FRANKLIN IF GET_TOTAL_CASH(CHAR_FRANKLIN) < 10000 RETURN FALSE ELSE SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_FRANK_CON_BOUGHT, TRUE) PURCHASE_COMPLETE_AUDIO_LINE() DO_BANK_ACCOUNT_ACTION(BANK_ACCOUNT_FRANKLIN, BAA_DEBIT, BAAC_CONSITE,10000,TRUE) CPRINTLN(DEBUG_INTERNET, "BOUGHT_CON_SITE: Transaction BANK_ACCOUNT_FRANKLIN") ENDIF BREAK ENDSWITCH MAKE_AUTOSAVE_REQUEST() CPRINTLN(DEBUG_INTERNET, "BOUGHT_CON_SITE: Transaction complete") RETURN TRUE ENDFUNC PROC SET_INTERIOR_STAT_FOR_CUSTOM_APT(INT iResultSlot, INT &iInteriorVariation) IF iInteriorVariation = -1 //Deal with case in which the default option was selected iInteriorVariation = 1 CDEBUG1LN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: iInteriorVariation: ", iInteriorVariation) ENDIF IF iResultSlot = 0 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_APPARTMENT_VAR_0, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = 1 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_APPARTMENT_VAR_1, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = 2 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_APPARTMENT_VAR_2, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = 3 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_APPARTMENT_VAR_3, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = 4 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_APPARTMENT_VAR_4, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = PROPERTY_OWNED_SLOT_OFFICE_0 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_VAR, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = PROPERTY_OWNED_SLOT_CLUBHOUSE SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CLUBHOUSE_VAR, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_6 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_APPARTMENT_VAR_5, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1_VAR, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2_VAR, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3_VAR, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = PROPERTY_OWNED_SLOT_IE_WAREHOUSE SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_IE_WAREHOUSE_VAR, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) #IF FEATURE_SUMMER_2020 ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_7 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_APPARTMENT_VAR_6, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_8 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_APPARTMENT_VAR_7, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) #ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_9 //CDM PROPERTY STAT UPDATE //OLD PROPERTIES SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_APPARTMENT_VAR_8, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_10 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_APPARTMENT_VAR_9, iInteriorVariation) CPRINTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Setting stat for specified \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iInteriorVariation:", iInteriorVariation) ELSE CASSERTLN(DEBUG_INTERNET, "SET_INTERIOR_STAT_FOR_CUSTOM_APT: Not setting stat, invalid slot specified iResultSlot:", iResultSlot) ENDIF ENDPROC /// Purpose: Grabs the relevant string for office purchase results FUNC STRING GET_OFFICE_PURCHASE_RESULT_STRING(INT iPropertyType, BOOL bPurchaseSucceeded, BOOL bRenovation) BOOL bOffice = (iPropertyType = 1) BOOL bClubhouse = (iPropertyType = 2) BOOL bOfficeGarage = (iPropertyType = 3) BOOL bFactoryBunker = (iPropertyType = 4) BOOL bHangar = (iPropertyType = 5) BOOL bDefunctBase = (iPropertyType = 6) BOOL bNightclub = (iPropertyType = 7) BOOL bArenaGarage = (iPropertyType = 8) BOOL bCasinoApt = (iPropertyType = 9) BOOL bArcade = (iPropertyType = 10) BOOL bAutoShop = (iPropertyType = 11) #IF FEATURE_FIXER BOOL bFixerHQ = (iPropertyType = 12) #ENDIF IF bOffice AND NOT bOfficeGarage INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) IF iModshop != 0 INT iPrevModshop = GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_MODSHOP) CDEBUG1LN(DEBUG_INTERNET, "GET_OFFICE_PURCHASE_RESULT_STRING iModshop: ", iModshop, ", iPrevModshop:", iPrevModshop) IF iModshop != iPrevModshop // bOffice = FALSE bOfficeGarage = TRUE ENDIF ENDIF ENDIF TEXT_LABEL_23 tl23Str = "" IF bRenovation IF bOffice RETURN "MP_OFF_S_REN" ELIF bClubhouse RETURN "MP_CLU_S_REN" ELIF bOfficeGarage RETURN "MP_GAR_S_REN" ELIF bFactoryBunker RETURN "MP_BUN_S_REN" ELIF bHangar RETURN "MP_HAN_S_REN" ELIF bDefunctBase RETURN "MP_DBA_S_REN" ELIF bNightclub RETURN "MP_NCL_S_REN" ELIF bArenaGarage RETURN "MP_MBA_S_REN" ELIF bCasinoApt RETURN "MP_CASWEB_S_REN" ELIF bArcade RETURN "MP_ARC_S_REN" ELIF bAutoShop RETURN "MP_AUT_S_REN" #IF FEATURE_FIXER ELIF bFixerHQ RETURN "MP_FIX_S_REN" #ENDIF ENDIF ELIF bPurchaseSucceeded IF bOffice RETURN "MP_OFF_S_BUY" ELIF bClubhouse RETURN "MP_CLU_S_BUY" ELIF bOfficeGarage RETURN "MP_GAR_S_BUY" ELIF bFactoryBunker RETURN "MP_BUN_S_BUY" ELIF bHangar RETURN "MP_HAN_S_BUY" ELIF bDefunctBase RETURN "MP_DBA_S_BUY" ELIF bNightclub RETURN "MP_NCL_S_BUY" ELIF bArenaGarage RETURN "MP_MBA_S_BUY" ELIF bCasinoApt RETURN "MP_CASWEB_S_BUY" ELIF bArcade RETURN "MP_ARC_S_BUY" ELIF bAutoShop RETURN "MP_AUT_S_BUY" #IF FEATURE_FIXER ELIF bFixerHQ RETURN "MP_FIX_S_BUY" #ENDIF ENDIF ELIF mpPropertySiteFailReason = MPSFR_NOT_UNLOCKED IF bOffice RETURN "MP_OFF_F_BUY_1" ELIF bClubhouse RETURN "MP_CLU_F_BUY_1" ELIF bOfficeGarage RETURN "MP_GAR_F_BUY_1" ELIF bFactoryBunker RETURN "MP_BUN_F_BUY_1" ELIF bHangar RETURN "MP_HAN_F_BUY_1" ELIF bDefunctBase RETURN "MP_DBA_F_BUY_1" ELIF bNightclub RETURN "MP_NCL_F_BUY_1" ELIF bArenaGarage RETURN "MP_MBA_F_BUY_1" ELIF bCasinoApt RETURN "MP_CASWEB_F_BUY_1" ELIF bArcade RETURN "MP_ARC_F_BUY_1" ELIF bAutoShop RETURN "MP_AUT_F_BUY_1" #IF FEATURE_FIXER ELIF bFixerHQ RETURN "MP_FIX_F_BUY_1" #ENDIF ENDIF ELIF mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH IF bOffice RETURN "MP_OFF_F_BUY_2" ELIF bClubhouse RETURN "MP_CLU_F_BUY_2" ELIF bOfficeGarage RETURN "MP_GAR_F_BUY_2" ELIF bFactoryBunker RETURN "MP_BUN_F_BUY_2" ELIF bHangar RETURN "MP_HAN_F_BUY_2" ELIF bDefunctBase RETURN "MP_DBA_F_BUY_2" ELIF bNightclub RETURN "MP_NCL_F_BUY_2" ELIF bArenaGarage RETURN "MP_MBA_F_BUY_2" ELIF bCasinoApt RETURN "MP_CASWEB_F_BUY_2" ELIF bArcade RETURN "MP_ARC_F_BUY_2" ELIF bAutoShop RETURN "MP_AUT_F_BUY_2" #IF FEATURE_FIXER ELIF bFixerHQ RETURN "MP_FIX_F_BUY_2" #ENDIF ENDIF ELIF mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK IF bOffice RETURN "MP_OFF_F_BUY_3" ELIF bClubhouse RETURN "MP_CLU_F_BUY_3" ELIF bOfficeGarage RETURN "MP_GAR_F_BUY_3" ELIF bFactoryBunker RETURN "MP_BUN_F_BUY_3" ELIF bHangar RETURN "MP_HAN_F_BUY_3" ELIF bDefunctBase RETURN "MP_DBA_F_BUY_3" ELIF bNightclub RETURN "MP_NCL_F_BUY_3" ELIF bArenaGarage RETURN "MP_MBA_F_BUY_3" ELIF bCasinoApt RETURN "MP_CASWEB_F_BUY_3" ELIF bArcade RETURN "MP_ARC_F_BUY_3" ELIF bAutoShop RETURN "MP_AUT_F_BUY_3" #IF FEATURE_FIXER ELIF bFixerHQ RETURN "MP_FIX_F_BUY_3" #ENDIF ENDIF ELIF mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK_PENDING IF bOffice RETURN "MP_OFF_F_BUY_4" ELIF bClubhouse RETURN "MP_CLU_F_BUY_4" ELIF bOfficeGarage RETURN "MP_GAR_F_BUY_4" ELIF bFactoryBunker RETURN "MP_BUN_F_BUY_4" ELIF bHangar RETURN "MP_HAN_F_BUY_4" ELIF bDefunctBase RETURN "MP_DBA_F_BUY_4" ELIF bNightclub RETURN "MP_NCL_F_BUY_4" ELIF bArenaGarage RETURN "MP_MBA_F_BUY_4" ELIF bCasinoApt RETURN "MP_CASWEB_F_BUY_4" ELIF bArcade RETURN "MP_ARC_F_BUY_4" ELIF bAutoShop RETURN "MP_AUT_F_BUY_4" #IF FEATURE_FIXER ELIF bFixerHQ RETURN "MP_FIX_F_BUY_4" #ENDIF ENDIF ELIF mpPropertySiteFailReason = MPSFR_CANCELED IF bOffice RETURN "MP_OFF_F_BUY_5" ELIF bClubhouse RETURN "MP_CLU_F_BUY_5" ELIF bOfficeGarage RETURN "MP_GAR_F_BUY_5" ELIF bFactoryBunker RETURN "MP_BUN_F_BUY_5" ELIF bHangar RETURN "MP_HAN_F_BUY_5" ELIF bDefunctBase RETURN "MP_DBA_F_BUY_5" ELIF bNightclub RETURN "MP_NCL_F_BUY_5" ELIF bArenaGarage RETURN "MP_MBA_F_BUY_5" ELIF bCasinoApt RETURN "MP_CASWEB_F_BUY_5" ELIF bArcade RETURN "MP_ARC_F_BUY_5" ELIF bAutoShop RETURN "MP_AUT_F_BUY_5" #IF FEATURE_FIXER ELIF bFixerHQ RETURN "MP_FIX_F_BUY_5" #ENDIF ENDIF ELIF mpPropertySiteFailReason = MPSFR_NOT_SAFE IF bOffice RETURN "MP_OFF_F_BUY_6" ELIF bClubhouse RETURN "MP_CLU_F_BUY_6" ELIF bOfficeGarage RETURN "MP_GAR_F_BUY_6" ELIF bFactoryBunker RETURN "MP_BUN_F_BUY_6" ELIF bHangar RETURN "MP_HAN_F_BUY_6" ELIF bDefunctBase RETURN "MP_DBA_F_BUY_6" ELIF bNightclub RETURN "MP_NCL_F_BUY_6" ELIF bArenaGarage RETURN "MP_MBA_F_BUY_6" ELIF bCasinoApt RETURN "MP_CASWEB_F_BUY_6" ELIF bArcade RETURN "MP_ARC_F_BUY_6" ELIF bAutoShop RETURN "MP_AUT_F_BUY_6" #IF FEATURE_FIXER ELIF bFixerHQ RETURN "MP_FIX_F_BUY_6" #ENDIF ENDIF ELIF g_bDontCrossRunning = TRUE IF bOffice RETURN "MP_OFF_F_BUY_7" ELIF bClubhouse RETURN "MP_CLU_F_BUY_7" ELIF bOfficeGarage RETURN "MP_GAR_F_BUY_7" ELIF bFactoryBunker RETURN "MP_BUN_F_BUY_7" ELIF bHangar RETURN "MP_HAN_F_BUY_7" ELIF bDefunctBase RETURN "MP_DBA_F_BUY_7" ELIF bNightclub RETURN "MP_NCL_F_BUY_7" ELIF bArenaGarage RETURN "MP_MBA_F_BUY_7" ELIF bCasinoApt RETURN "MP_CASWEB_F_BUY_7" ELIF bArcade RETURN "MP_ARC_F_BUY_7" ELIF bAutoShop RETURN "MP_AUT_F_BUY_7" #IF FEATURE_FIXER ELIF bFixerHQ RETURN "MP_FIX_F_BUY_7" #ENDIF ENDIF ELIF mpPropertySiteFailReason = MPSFR_ON_MISSION IF bOffice RETURN "MP_OFF_F_BUY_8" ELIF bClubhouse RETURN "MP_CLU_F_BUY_8" ELIF bOfficeGarage RETURN "MP_GAR_F_BUY_8" ELIF bFactoryBunker RETURN "MP_BUN_F_BUY_8" ELIF bHangar tl23Str = "MP_HAN_F_BUY_8" ELIF bDefunctBase tl23Str = "MP_DBA_F_BUY_8" ELIF bNightclub tl23Str = "MP_NCL_F_BUY_8" ELIF bArenaGarage tl23Str = "MP_MBA_F_BUY_8" ELIF bCasinoApt tl23Str = "MP_CASWEB_F_BUY_8" ELIF bArcade tl23Str = "MP_ARC_F_BUY_8" ELIF bAutoShop tl23Str = "MP_AUT_F_BUY_8" #IF FEATURE_FIXER ELIF bFixerHQ tl23Str = "MP_FIX_F_BUY_8" #ENDIF ENDIF ELIF mpPropertySiteFailReason = MPSFR_PAID_RESUPPLY IF bOffice RETURN "MP_OFF_F_BUY_9" ELIF bClubhouse RETURN "MP_CLU_F_BUY_9" ELIF bOfficeGarage RETURN "MP_GAR_F_BUY_9" ELIF bFactoryBunker RETURN "MP_BUN_F_BUY_9" ELIF bHangar tl23Str = "MP_HAN_F_BUY_9" ELIF bDefunctBase tl23Str = "MP_DBA_F_BUY_9" ELIF bNightclub tl23Str = "MP_NCL_F_BUY_9" ELIF bArenaGarage tl23Str = "MP_MBA_F_BUY_9" ELIF bCasinoApt tl23Str = "MP_CASWEB_F_BUY_9" ELIF bArcade tl23Str = "MP_ARC_F_BUY_9" ELIF bAutoShop tl23Str = "MP_AUT_F_BUY_9" #IF FEATURE_FIXER ELIF bFixerHQ tl23Str = "MP_FIX_F_BUY_9" #ENDIF ENDIF ELIF mpPropertySiteFailReason = MPSFR_HAS_STOCK IF bOffice RETURN "MP_OFF_F_BUY_10" ELIF bClubhouse RETURN "MP_CLU_F_BUY_10" ELIF bOfficeGarage RETURN "MP_GAR_F_BUY_10" ELIF bFactoryBunker RETURN "MP_BUN_F_BUY_10" ELIF bHangar tl23Str = "MP_HAN_F_BUY_10" ELIF bDefunctBase tl23Str = "MP_DBA_F_BUY_10" ELIF bNightclub tl23Str = "MP_NCL_F_BUY_10" ELIF bArenaGarage tl23Str = "MP_MBA_F_BUY_10" ELIF bCasinoApt tl23Str = "MP_CASWEB_F_BUY_10" ELIF bArcade tl23Str = "MP_ARC_F_BUY_10" ELIF bAutoShop tl23Str = "MP_AUT_F_BUY_10" #IF FEATURE_FIXER ELIF bFixerHQ tl23Str = "MP_FIX_F_BUY_10" #ENDIF ENDIF ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(tl23Str) IF ARE_STRINGS_EQUAL(tl23Str, "MP_HAN_F_BUY_8") OR ARE_STRINGS_EQUAL(tl23Str, "MP_HAN_F_BUY_9") OR ARE_STRINGS_EQUAL(tl23Str, "MP_HAN_F_BUY_10") HANGAR_ID eBuyingHangar = INT_TO_ENUM(HANGAR_ID, GET_LAST_CLICKED_HANGAR()) HANGAR_ID eOwnedHangar = GET_PLAYERS_OWNED_HANGAR(PLAYER_ID()) IF (eBuyingHangar = eOwnedHangar) tl23Str += "b" //renovate ELIF (eOwnedHangar = HANGAR_ID_INVALID) tl23Str += "a" //buy ELSE tl23Str += "c" //trade ENDIF ELIF ARE_STRINGS_EQUAL(tl23Str, "MP_DBA_F_BUY_8") OR ARE_STRINGS_EQUAL(tl23Str, "MP_DBA_F_BUY_9") OR ARE_STRINGS_EQUAL(tl23Str, "MP_DBA_F_BUY_10") DEFUNCT_BASE_ID eBuyingDefunctBase = INT_TO_ENUM(DEFUNCT_BASE_ID, GET_LAST_CLICKED_DEFUNCT_BASE()) DEFUNCT_BASE_ID eOwnedDefunctBase = GET_PLAYERS_OWNED_DEFUNCT_BASE(PLAYER_ID()) IF (eBuyingDefunctBase = eOwnedDefunctBase) tl23Str += "b" //renovate ELIF (eOwnedDefunctBase = DEFUNCT_BASE_ID_INVALID) tl23Str += "a" //buy ELSE tl23Str += "c" //trade ENDIF ELIF ARE_STRINGS_EQUAL(tl23Str, "MP_NCL_F_BUY_8") OR ARE_STRINGS_EQUAL(tl23Str, "MP_NCL_F_BUY_9") OR ARE_STRINGS_EQUAL(tl23Str, "MP_NCL_F_BUY_10") NIGHTCLUB_ID eBuyingNightclub = INT_TO_ENUM(NIGHTCLUB_ID, GET_LAST_CLICKED_NIGHTCLUB()) NIGHTCLUB_ID eOwnedNightclub = GET_PLAYERS_OWNED_NIGHTCLUB(PLAYER_ID()) IF (eBuyingNightclub = eOwnedNightclub) tl23Str += "b" //renovate ELIF (eOwnedNightclub = NIGHTCLUB_ID_INVALID) tl23Str += "a" //buy ELSE tl23Str += "c" //trade ENDIF ELIF ARE_STRINGS_EQUAL(tl23Str, "MP_ARC_F_BUY_8") OR ARE_STRINGS_EQUAL(tl23Str, "MP_ARC_F_BUY_9") OR ARE_STRINGS_EQUAL(tl23Str, "MP_ARC_F_BUY_10") ARCADE_PROPERTY_ID eBuyingArcade = INT_TO_ENUM(ARCADE_PROPERTY_ID, GET_LAST_CLICKED_ARCADE()) ARCADE_PROPERTY_ID eOwnedArcade = GET_PLAYERS_OWNED_ARCADE_PROPERTY(PLAYER_ID()) IF (eBuyingArcade = eOwnedArcade) tl23Str += "b" //renovate ELIF (eOwnedArcade = ARCADE_PROPERTY_ID_INVALID) tl23Str += "a" //buy ELSE tl23Str += "c" //trade ENDIF ELIF ARE_STRINGS_EQUAL(tl23Str, "MP_AUT_F_BUY_8") OR ARE_STRINGS_EQUAL(tl23Str, "MP_AUT_F_BUY_9") AUTO_SHOP_PROPERTY_ID eBuyingAutoShop = INT_TO_ENUM(AUTO_SHOP_PROPERTY_ID, GET_LAST_CLICKED_AUTO_SHOP()) AUTO_SHOP_PROPERTY_ID eOwnedAutoShop = GET_PLAYERS_OWNED_AUTO_SHOP_PROPERTY(PLAYER_ID()) IF (eBuyingAutoShop = eOwnedAutoShop) tl23Str += "b" //renovate ELIF (eOwnedAutoShop = AUTO_SHOP_PROPERTY_ID_INVALID) tl23Str += "a" //buy ELSE tl23Str += "c" //trade ENDIF #IF FEATURE_FIXER ELIF ARE_STRINGS_EQUAL(tl23Str, "MP_FIX_F_BUY_8") FIXER_HQ_ID eBuyingFixerHQ = INT_TO_ENUM(FIXER_HQ_ID, GET_LAST_CLICKED_FIXER_HQ()) FIXER_HQ_ID eOwnedFixerHQ = GET_PLAYERS_OWNED_FIXER_HQ(PLAYER_ID()) IF (eBuyingFixerHQ = eOwnedFixerHQ) tl23Str += "b" //renovate ELIF (eOwnedFixerHQ = FIXER_HQ_ID_INVALID) tl23Str += "a" //buy ELSE tl23Str += "c" //trade ENDIF #ENDIF ENDIF RETURN GET_CHARACTER_FROM_AUDIO_CONVERSATION_FILENAME(tl23Str, 0, GET_LENGTH_OF_LITERAL_STRING(tl23Str)) ENDIF //Return office buy Fail default IF bOffice RETURN "MP_OFF_F_BUY_6" ELIF bClubhouse RETURN "MP_CLU_F_BUY_6" ELIF bOfficeGarage RETURN "MP_GAR_F_BUY_6" ELIF bFactoryBunker RETURN "MP_BUN_F_BUY_6" ELIF bHangar RETURN "MP_HAN_F_BUY_6" ELIF bDefunctBase RETURN "MP_DBA_F_BUY_6" ELIF bNightclub RETURN "MP_NCL_F_BUY_6" ELIF bArenaGarage RETURN "MP_MBA_F_BUY_6" ELIF bCasinoApt RETURN "MP_CASWEB_F_BUY_6" ELIF bArcade RETURN "MP_ARC_F_BUY_6" ELIF bAutoShop RETURN "MP_AUT_F_BUY_6" #IF FEATURE_FIXER ELIF bFixerHQ RETURN "MP_FIX_F_BUY_6" #ENDIF ENDIF RETURN "MP_F_BUY_5" ENDFUNC ///Purpose: Switches to either dynasty8 or dynasty8Exec for offices /// To be used when displaying purchase results PROC SWITCH_TO_PROPERTY_RESULTS_PAGE(INT iBuyPropertyIndex, STRING sPageExtension, BOOL bPurchaseSucceeded, BOOL bRenovation, BOOL bSetWaypointSuccess, BOOL bSetWaypointFail, REPLACE_PROPERTY_MENU_TYPE_ENUM ePropertyType) TEXT_LABEL_63 sWebpage BOOL bOffice, bClubhouse, bOfficeGarage IF (ePropertyType = rpmt_0) bOffice = IS_PROPERTY_OFFICE(iBuyPropertyIndex) bClubhouse = IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) bOfficeGarage = IS_PROPERTY_OFFICE_GARAGE(iBuyPropertyIndex) IF bOffice AND NOT bOfficeGarage INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) IF iModshop != 0 INT iPrevModshop = GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_MODSHOP) CDEBUG1LN(DEBUG_INTERNET, "SWITCH_TO_PROPERTY_RESULTS_PAGE iModshop: ", iModshop, ", iPrevModshop:", iPrevModshop) IF iModshop != iPrevModshop // bOffice = FALSE bOfficeGarage = TRUE ENDIF ENDIF ENDIF ENDIF IF bOffice OR bClubhouse OR bOfficeGarage OR (ePropertyType != rpmt_0) //Purchase result screen - Title BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) IF bPurchaseSucceeded SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MP_OFF_S_BUY_T") ELIF bSetWaypointSuccess SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MP_OFF_W_BUY_T") ELIF bSetWaypointFail SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MP_OFF_WF_BUY_T") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MP_OFF_F_BUY_T") ENDIF END_SCALEFORM_MOVIE_METHOD() //Purchase result screen - Body text TEXT_LABEL_23 tl23BodyParam = "" BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) IF bSetWaypointSuccess IF bOffice tl23BodyParam = "MP_OFF_S_WAY" ELIF bClubhouse tl23BodyParam = "MP_CLU_S_WAY" ELIF bOfficeGarage tl23BodyParam = "MP_GAR_S_WAY" ELIF (ePropertyType = rpmt_1_FACTORY) tl23BodyParam = "MP_BUN_S_WAY" ELIF (ePropertyType = rpmt_2_HANGAR) tl23BodyParam = "MP_HAN_S_WAY" ELIF (ePropertyType = rpmt_3_DEFUNCT_BASE) tl23BodyParam = "MP_DBA_S_WAY" ELIF (ePropertyType = rpmt_4_NIGHTCLUB) tl23BodyParam = "MP_NCL_S_WAY" ELIF (ePropertyType = rpmt_5_ARENA_GARAGE) tl23BodyParam = "MP_MBA_S_WAY" ELIF (ePropertyType = rpmt_6_CASINO_APARTMENT) tl23BodyParam = "MP_CASWEB_S_WAY" ELIF (ePropertyType = rpmt_7_ARCADE) tl23BodyParam = "MP_ARC_S_WAY" ELIF (ePropertyType = rpmt_8_AUTO_SHOP) tl23BodyParam = "MP_AUT_S_WAY" #IF FEATURE_FIXER ELIF (ePropertyType = rpmt_9_FIXER_HQ) tl23BodyParam = "MP_FIX_S_WAY" #ENDIF ELSE tl23BodyParam = "MP_XXX_S_WAY" ENDIF ELIF bSetWaypointFail IF bOffice tl23BodyParam = "MP_OFF_S_WAYF" ELIF bClubhouse tl23BodyParam = "MP_CLU_S_WAYF" ELIF bOfficeGarage tl23BodyParam = "MP_GAR_S_WAYF" ELIF (ePropertyType = rpmt_1_FACTORY) tl23BodyParam = "MP_BUN_S_WAYF" ELIF (ePropertyType = rpmt_2_HANGAR) tl23BodyParam = "MP_HAN_S_WAYF" ELIF (ePropertyType = rpmt_3_DEFUNCT_BASE) tl23BodyParam = "MP_DBA_S_WAYF" ELIF (ePropertyType = rpmt_4_NIGHTCLUB) tl23BodyParam = "MP_NCL_S_WAYF" ELIF (ePropertyType = rpmt_5_ARENA_GARAGE) tl23BodyParam = "MP_MBA_S_WAYF" ELIF (ePropertyType = rpmt_6_CASINO_APARTMENT) tl23BodyParam = "MP_CASWEB_S_WAYF" ELIF (ePropertyType = rpmt_7_ARCADE) tl23BodyParam = "MP_ARC_S_WAYF" ELIF (ePropertyType = rpmt_8_AUTO_SHOP) tl23BodyParam = "MP_AUT_S_WAYF" #IF FEATURE_FIXER ELIF (ePropertyType = rpmt_9_FIXER_HQ) tl23BodyParam = "MP_FIX_S_WAYF" #ENDIF ELSE tl23BodyParam = "MP_XXX_S_WAYF" ENDIF ELSE IF bOffice tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(1, bPurchaseSucceeded, bRenovation) ELIF bClubhouse tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(2, bPurchaseSucceeded, bRenovation) ELIF bOfficeGarage tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(3, bPurchaseSucceeded, bRenovation) ELIF (ePropertyType = rpmt_1_FACTORY) tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(4, bPurchaseSucceeded, bRenovation) ELIF (ePropertyType = rpmt_2_HANGAR) tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(5, bPurchaseSucceeded, bRenovation) ELIF (ePropertyType = rpmt_3_DEFUNCT_BASE) tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(6, bPurchaseSucceeded, bRenovation) ELIF (ePropertyType = rpmt_4_NIGHTCLUB) tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(7, bPurchaseSucceeded, bRenovation) ELIF (ePropertyType = rpmt_5_ARENA_GARAGE) tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(8, bPurchaseSucceeded, bRenovation) ELIF (ePropertyType = rpmt_6_CASINO_APARTMENT) tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(9, bPurchaseSucceeded, bRenovation) ELIF (ePropertyType = rpmt_7_ARCADE) tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(10, bPurchaseSucceeded, bRenovation) ELIF (ePropertyType = rpmt_8_AUTO_SHOP) tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(11, bPurchaseSucceeded, bRenovation) #IF FEATURE_FIXER ELIF (ePropertyType = rpmt_9_FIXER_HQ) tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(12, bPurchaseSucceeded, bRenovation) #ENDIF ELSE tl23BodyParam = GET_OFFICE_PURCHASE_RESULT_STRING(0, bPurchaseSucceeded, bRenovation) ENDIF ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(tl23BodyParam) END_SCALEFORM_MOVIE_METHOD() IF bOffice sWebpage = "WWW_DYNASTY8EXECUTIVEREALTY_COM" ELIF bClubhouse sWebpage = "FORECLOSURES_MAZE_D_BANK_COM" ELIF bOfficeGarage sWebpage = "WWW_DYNASTY8EXECUTIVEREALTY_COM" ELIF (ePropertyType = rpmt_1_FACTORY) sWebpage = "FORECLOSURES_MAZE_D_BANK_COM" ELIF (ePropertyType = rpmt_2_HANGAR) sWebpage = "FORECLOSURES_MAZE_D_BANK_COM" ELIF (ePropertyType = rpmt_3_DEFUNCT_BASE) sWebpage = "FORECLOSURES_MAZE_D_BANK_COM" ELIF (ePropertyType = rpmt_4_NIGHTCLUB) sWebpage = "FORECLOSURES_MAZE_D_BANK_COM" ELIF (ePropertyType = rpmt_5_ARENA_GARAGE) sWebpage = "WWW_ARENAWAR_TV" ELIF (ePropertyType = rpmt_6_CASINO_APARTMENT) sWebpage = "WWW_THEDIAMONDCASINOANDRESORT_COM" ELIF (ePropertyType = rpmt_7_ARCADE) sWebpage = "FORECLOSURES_MAZE_D_BANK_COM" ELIF (ePropertyType = rpmt_8_AUTO_SHOP) sWebpage = "FORECLOSURES_MAZE_D_BANK_COM" #IF FEATURE_FIXER ELIF (ePropertyType = rpmt_9_FIXER_HQ) sWebpage = "WWW_DYNASTY8EXECUTIVEREALTY_COM" #ENDIF ELSE CASSERTLN(DEBUG_INTERNET, "SWITCH_TO_PROPERTY_RESULTS_PAGE EXTENSION: unknown websitr") ENDIF CDEBUG1LN(DEBUG_INTERNET, "SWITCH_TO_PROPERTY_RESULTS_PAGE ", PICK_STRING(bSetWaypointSuccess, "bSetWaypointSuccess", PICK_STRING(bSetWaypointFail, "bSetWaypointSuccess", "PURCHASE")), PICK_STRING(bOffice, ", bOffice", PICK_STRING(bClubhouse, ", bClubhouse", PICK_STRING((ePropertyType = rpmt_1_FACTORY), ", rpmt_1_FACTORY", PICK_STRING((ePropertyType = rpmt_2_HANGAR), ", rpmt_2_HANGAR", PICK_STRING((ePropertyType = rpmt_3_DEFUNCT_BASE), ", rpmt_3_DEFUNCT_BASE", PICK_STRING((ePropertyType = rpmt_4_NIGHTCLUB), ", rpmt_4_NIGHTCLUB", PICK_STRING((ePropertyType = rpmt_5_ARENA_GARAGE), ", rpmt_5_ARENA_GARAGE", PICK_STRING((ePropertyType = rpmt_6_CASINO_APARTMENT), ", rpmt_6_CASINO_APARTMENT", PICK_STRING((ePropertyType = rpmt_7_ARCADE), ", rpmt_7_ARCADE", PICK_STRING((ePropertyType = rpmt_8_AUTO_SHOP), ", rpmt_8_AUTO_SHOP", PICK_STRING(bOfficeGarage, ", bOfficeGarage", "UNKNOWN"))))))))))), ": \"", sWebpage, sPageExtension, "\", \"", tl23BodyParam, "\"") #IF FEATURE_FIXER CDEBUG1LN(DEBUG_INTERNET, "SWITCH_TO_PROPERTY_RESULTS_PAGE ", PICK_STRING((ePropertyType = rpmt_9_FIXER_HQ), ", rpmt_9_FIXER_HQ", "UNKNOWN"), ": \"", sWebpage, sPageExtension, "\", \"", tl23BodyParam, "\"") #ENDIF ELSE sWebpage = "WWW_DYNASTY8REALESTATE_COM" ENDIF tl63sPropertyResultsWebpage = sWebpage sWebpage += sPageExtension GO_TO_WEBSITE(sWebpage) ENDPROC ///Purpose: params returned from Scaleform are 0 or 1 /// Returns true if 1 FUNC BOOL HAS_SCALEFORM_OPTION_BEEN_SELECTED(INT iOption) RETURN (iOption = 1) ENDFUNC FUNC INT CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES(INT iProperty, INT &iOfficeStylePrice, INT &iOfficePersonnelPrice, INt &iOfficeNamePrice, INT &iOfficeFontPrice, INT &iOfficeColourPrice, INT &iOfficeGunLockerPrice, INT &iOfficeVaultPrice, INT &iOfficeAccommodationPrice, INT &iOfficeModshopPrice) INT iOwned = GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_0) INT iCost = 0 INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) iOfficeStylePrice = 0 IF GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_0) != iStyle #IF IS_DEBUG_BUILD INT iOldStyle = GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_0) INT iOldStyleSF = -1 IF (iOldStyle != 0) iOldStyleSF = GET_SF_FROM_OFFICE_INTERIOR(iOldStyle) ENDIF #ENDIF INT iNewStyleSF = GET_SF_FROM_OFFICE_INTERIOR(iStyle) IF USE_SERVER_TRANSACTIONS() iOfficeStylePrice = GET_MP_PROPERTY_INTERIOR_VALUE(iStyle-1, iProperty) ELSE iOfficeStylePrice = GET_MP_PROPERTY_INTERIOR_VALUE(iStyle-1, iProperty) ENDIF #IF IS_DEBUG_BUILD // use GET_PROPERTY_INTERIOR_NAME(INT iIndex, INT iCurrentProperty) // // TEXT_LABEL tlOldStyle = "PM_OFF_VAR_" // tlOldStyle += iOldStyleSF // TEXT_LABEL tlNewStyle = "PM_OFF_VAR_" // tlNewStyle += iNewStyleSF // // // // // // // // // // // // // // // // // // // // // // // // // // // STRING sOldStyleLabel = "null" // IF DOES_TEXT_LABEL_EXIST(tlOldStyle) // sOldStyleLabel = GET_STRING_FROM_TEXT_FILE(tlOldStyle) // ENDIF // STRING sNewStyleLabel = GET_STRING_FROM_TEXT_FILE(tlNewStyle) #ENDIF IF iOwned != iProperty AND iNewStyleSF = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: new property, interior ", tlOldStyle, ":", iStyle, " [sf:", iNewStyleSF, "] is free") iOfficeStylePrice = 0 ELSE #IF IS_DEBUG_BUILD TEXT_LABEL tlOldStyleData = tlOldStyle tlOldStyleData += ":" tlOldStyleData += iOldStyle TEXT_LABEL tlNewStyleData = tlNewStyle tlNewStyleData += ":" tlNewStyleData += iStyle #ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: changing interior from ", tlOldStyleData, " [sf:", iOldStyleSF, "] to ", tlNewStyleData, " [sf:", iNewStyleSF, "] add $", iOfficeStylePrice, " ", GET_STRING_FROM_TEXT_FILE(tlNewStyle)) iCost += iOfficeStylePrice ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: unchanged property, interior ", GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_0), " != ", iStyle, " is free") iOfficeStylePrice = 0 ENDIF iOfficePersonnelPrice = 0 IF iOwned != iProperty CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: new property, personel change is free") ELSE IF (GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_PERSONNEL) != iPersonnel) IF NOT IS_OFFICE_PA_MALE(FALSE) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: changing to male personel: add $", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_PERSONNEL, 1)) iOfficePersonnelPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_PERSONNEL, 1) iCost += iOfficePersonnelPrice ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: changing to female personel: add $", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_PERSONNEL, 0)) iOfficePersonnelPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_PERSONNEL, 0) iCost += iOfficePersonnelPrice ENDIF ENDIF ENDIF iOfficeNamePrice = 0 iOfficeFontPrice = 0 iOfficeColourPrice = 0 IF iOwned != iProperty CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: new property, name change is free") ELSE IF NOT IS_STRING_NULL_OR_EMPTY(g_sOfficeDataStruct.tl63NewOrgName) TEXT_LABEL_63 tlGB_OFFICE_NAME = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_GB_OFFICE_NAME, MP_STAT_GB_OFFICE_NAME2) IF NOT IS_STRING_NULL_OR_EMPTY(tlGB_OFFICE_NAME) AND NOT ARE_STRINGS_EQUAL(g_sOfficeDataStruct.tl63NewOrgName, tlGB_OFFICE_NAME) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: Updating name from \"", tlGB_OFFICE_NAME, "\" to \"", g_sOfficeDataStruct.tl63NewOrgName, "\" (\"", g_sOfficeDataStruct.tl63OldOrgName, "\") add $", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_NAME_ID)) iOfficeNamePrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_NAME_ID) iCost += iOfficeNamePrice ENDIF ENDIF IF iFont != GET_MP_INT_CHARACTER_STAT(MP_STAT_FONT_PLAYER_OFFICE) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: changing font from ", iFont, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_FONT_PLAYER_OFFICE), " add $", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_FONT)) iOfficeFontPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_FONT) iCost += iOfficeFontPrice ENDIF IF iColour != GET_MP_INT_CHARACTER_STAT(MP_STAT_COLOUR_PLAYER_OFFICE) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: changing colour from ", iColour, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_COLOUR_PLAYER_OFFICE), " add $", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_COLOUR)) iOfficeColourPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_COLOUR) iCost += iOfficeColourPrice ENDIF ENDIF iOfficeGunLockerPrice = 0 IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) IF iOwned != iProperty iOfficeGunLockerPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_LOCKER_GUN) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: Buying gunlocker: ", HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker), " add $", iOfficeGunLockerPrice) iCost += iOfficeGunLockerPrice ELIF NOT IS_OFFICE_GUN_LOCKER_PURCHASED() iOfficeGunLockerPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_LOCKER_GUN) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: Adding gunlocker: ", HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker), " add $", iOfficeGunLockerPrice) iCost += iOfficeGunLockerPrice ENDIF ENDIF iOfficeVaultPrice = 0 IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iVault) IF iOwned != iProperty iOfficeVaultPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_LOCKER_CASH) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: Buying vault: ", HAS_SCALEFORM_OPTION_BEEN_SELECTED(iVault), " add $", iOfficeVaultPrice) iCost += iOfficeVaultPrice ELIF NOT IS_OFFICE_CASH_VAULT_PURCHASED() iOfficeVaultPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_LOCKER_CASH) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: Adding vault: ", HAS_SCALEFORM_OPTION_BEEN_SELECTED(iVault), " add $", iOfficeVaultPrice) iCost += iOfficeVaultPrice ENDIF ENDIF iOfficeAccommodationPrice = 0 IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iAccommodation) IF iOwned != iProperty iOfficeAccommodationPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_ACCOMMODATION) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: Buying accommodation: ", HAS_SCALEFORM_OPTION_BEEN_SELECTED(iAccommodation), " add $", iOfficeAccommodationPrice) iCost += iOfficeAccommodationPrice ELIF NOT IS_OFFICE_ACCOMMODATION_PURCHASED() iOfficeAccommodationPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_ACCOMMODATION) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: Adding accommodation: ", HAS_SCALEFORM_OPTION_BEEN_SELECTED(iAccommodation), " add $", iOfficeAccommodationPrice) iCost += iOfficeAccommodationPrice ENDIF ENDIF iOfficeModShopPrice = 0 IF iModShop != GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_MODSHOP) INT iOfficePropertyModShopPrice = 0 INT iModshopSF = GET_SF_FROM_OFFICE_MODSHOP_INTERIOR(iModShop) IF NOT IS_OFFICE_MODSHOP_PURCHASED() iOfficePropertyModShopPrice = GET_OFFICE_PROPERTY_MODSHOP_VALUE(iProperty) IF (iModshopSF = 0) // iOfficeModShopPrice = 0 ELSE iOfficeModShopPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_MODSHOP, iModshopSF+1) ENDIF ELSE iOfficeModShopPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_MODSHOP, iModshopSF+1) ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: Adding ModShop:", iModShop, " (iModshopSF:", iModshopSF, " ) add prop:$", iOfficePropertyModShopPrice, " + var:$", iOfficeModShopPrice, ", replacing ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_MODSHOP)) iOfficeModShopPrice += iOfficePropertyModShopPrice iCost += iOfficeModShopPrice ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES: Total cost of changes: $", iCost) RETURN iCost ENDFUNC FUNC INT CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES(INT iProperty, INT &iClubhouseWallPrice, INT &iClubhouseHangingPrice, INT &iClubhouseFurniturePrice, INT &iClubhouseColourPrice, INT &iClubhouseNamePrice, INT &iClubhouseFontPrice, INT &iClubhouseFontColourPrice, INT &iClubhouseHideSinagePrice, INT &iClubhouseEmblemPrice, INT &iClubhouseGunLockerPrice, INT &iClubhouseGaragePrice) INT iOwned = GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_CLUBHOUSE) INT iCost = 0 INT iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage GET_SCALEFORM_CLUBHOUSE_DATA(iProperty, iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage) iClubhouseWallPrice = 0 IF iOwned != iProperty IF iWall = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: new property, wall A is free") ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: new property, wall from ", iWall, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_WALL), " add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_WALL, iWall)) iClubhouseWallPrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_WALL, iWall) iCost += iClubhouseWallPrice ENDIF ELSE IF iWall != GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_WALL) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: changing wall from ", iWall, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_WALL), " add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_WALL, iWall)) iClubhouseWallPrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_WALL, iWall) iCost += iClubhouseWallPrice ENDIF ENDIF iClubhouseHangingPrice = 0 IF iOwned != iProperty IF iHanging = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: new property, hanging A is free") ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: new property, hanging from ", iHanging, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_HANGING), " add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_HANGING, iHanging)) iClubhouseHangingPrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_HANGING, iHanging) iCost += iClubhouseHangingPrice ENDIF ELSE IF iHanging != GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_HANGING) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: changing hanging from ", iHanging, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_HANGING), " add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_HANGING, iHanging)) iClubhouseHangingPrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_HANGING, iHanging) iCost += iClubhouseHangingPrice ENDIF ENDIF iClubhouseFurniturePrice = 0 IF iOwned != iProperty IF iFurniture = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: new property, Furniture A is free") ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: new property, Furniture from ", iFurniture, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FURNATURE), " add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_FURNITURE, iFurniture)) iClubhouseFurniturePrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_FURNITURE, iFurniture) iCost += iClubhouseFurniturePrice ENDIF ELSE IF iFurniture != GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FURNATURE) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: changing Furniture from ", iFurniture, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FURNATURE), " add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_FURNITURE, iFurniture)) iClubhouseFurniturePrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_FURNITURE, iFurniture) iCost += iClubhouseFurniturePrice ENDIF ENDIF iClubhouseColourPrice = 0 IF iOwned != iProperty OR GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_CLUBHOUSE) != iColourScheme #IF IS_DEBUG_BUILD INT iOldColour = GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_CLUBHOUSE) INT iOldColourSF = -1 IF (iOldColour != 0) iOldColourSF = GET_SF_FROM_CLUBHOUSE_INTERIOR(iProperty, iOldColour) ENDIF #ENDIF INT iNewColourSF = GET_SF_FROM_CLUBHOUSE_INTERIOR(iProperty, iColourScheme) iClubhouseColourPrice = GET_MP_PROPERTY_INTERIOR_VALUE(iNewColourSF, iProperty) #IF IS_DEBUG_BUILD // use GET_PROPERTY_INTERIOR_NAME(INT iIndex, INT iCurrentProperty) // // TEXT_LABEL tlOldColour = "FC_MURAL_" // tlOldColour += iOldColourSF // TEXT_LABEL tlNewColour = "FC_MURAL_" // tlNewColour += iNewColourSF // // // // // // // // // // // // // // // // // // // // // // // // // // // STRING sOldColourLabel = "null" // IF DOES_TEXT_LABEL_EXIST(tlOldColour) // sOldColourLabel = GET_STRING_FROM_TEXT_FILE(tlOldColour) // ENDIF // STRING sNewColourLabel = GET_STRING_FROM_TEXT_FILE(tlNewColour) #ENDIF IF iOwned != iProperty IF iNewColourSF = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: new property, interior ", tlOldColour, ":", iColourScheme, " [sf:", iNewColourSF, "] is free") iClubhouseColourPrice = 0 ELSE #IF IS_DEBUG_BUILD TEXT_LABEL tlNewColourData = tlNewColour tlNewColourData += ":" tlNewColourData += iColourScheme #ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: new property, interior to ", tlNewColourData, " [sf:", iNewColourSF, "] add $", iClubhouseColourPrice, " ", GET_STRING_FROM_TEXT_FILE(tlNewColour)) iCost += iClubhouseColourPrice ENDIF ELSE #IF IS_DEBUG_BUILD TEXT_LABEL tlOldColourData = tlOldColour tlOldColourData += ":" tlOldColourData += iOldColour TEXT_LABEL tlNewColourData = tlNewColour tlNewColourData += ":" tlNewColourData += iColourScheme #ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: changing interior from ", tlOldColourData, " [sf:", iOldColourSF, "] to ", tlNewColourData, " [sf:", iNewColourSF, "] add $", iClubhouseColourPrice, " ", GET_STRING_FROM_TEXT_FILE(tlNewColour)) iCost += iClubhouseColourPrice ENDIF ENDIF iClubhouseNamePrice = 0 iClubhouseFontPrice = 0 iClubhouseFontColourPrice = 0 iClubhouseHideSinagePrice = 0 IF iOwned != iProperty CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: new property, name change is free") ELSE IF NOT IS_STRING_NULL_OR_EMPTY(g_sClubhouseDataStruct.tl63NewSignage) TEXT_LABEL_63 tlGB_Clubhouse_NAME = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_MC_CLBHOSE_NAME, MP_STAT_MC_CLBHOSE_NAME2) IF NOT IS_STRING_NULL_OR_EMPTY(tlGB_Clubhouse_NAME) AND NOT ARE_STRINGS_EQUAL(g_sClubhouseDataStruct.tl63NewSignage, tlGB_Clubhouse_NAME) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: Updating name from \"", tlGB_Clubhouse_NAME, "\" to \"", g_sClubhouseDataStruct.tl63NewSignage, "\" (\"", g_sClubhouseDataStruct.tl63OldSignage, "\") add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_NAME_ID, 1)) iClubhouseNamePrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_NAME_ID, 1) iCost += iClubhouseNamePrice ENDIF ENDIF IF iFont != GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FONT) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: changing font from ", iFont, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FONT), " add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_FONT)) iClubhouseFontPrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_FONT) iCost += iClubhouseFontPrice ENDIF IF iFontColour != GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_COLOUR) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: changing font colour from ", iFontColour, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_COLOUR), " add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_FONT_COLOUR)) iClubhouseFontColourPrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_FONT_COLOUR) iCost += iClubhouseFontColourPrice ENDIF IF iHideSinage != GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_SINAGEHIDE) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: changing hide signage from ", iHideSinage, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_SINAGEHIDE), " add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_HIDE_SINAGE)) iClubhouseHideSinagePrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_HIDE_SINAGE) iCost += iClubhouseHideSinagePrice ENDIF ENDIF iClubhouseEmblemPrice = 0 IF iOwned != iProperty IF iEmblem = iCONST_DEFAULT_FREE_CLUBHOUSE_EMBLEM // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: new property, Emblem A is free") ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: new property, Emblem from ", iEmblem, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_EMBLEM), " add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_EMBLEM, iEmblem)) iClubhouseEmblemPrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_EMBLEM, iEmblem) iCost += iClubhouseEmblemPrice ENDIF ELSE IF iEmblem != GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_EMBLEM) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: changing Emblem from ", iEmblem, " to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_EMBLEM), " add $", GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_EMBLEM, iEmblem)) iClubhouseEmblemPrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_EMBLEM, iEmblem) iCost += iClubhouseEmblemPrice ENDIF ENDIF iClubhouseGunLockerPrice = 0 IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) IF iOwned != iProperty iClubhouseGunLockerPrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_LOCKER_GUN, 1) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: Buying gunlocker: ", HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker), " add $", iClubhouseGunLockerPrice) iCost += iClubhouseGunLockerPrice ELIF NOT IS_CLUBHOUSE_GUN_LOCKER_PURCHASED() iClubhouseGunLockerPrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_LOCKER_GUN, 1) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: Adding gunlocker: ", HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker), " add $", iClubhouseGunLockerPrice) iCost += iClubhouseGunLockerPrice ENDIF ENDIF iClubhouseGaragePrice = 0 IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGarage) IF iOwned != iProperty iClubhouseGaragePrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_GARAGE, 1) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: Buying Garage: ", HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGarage), " add $", iClubhouseGaragePrice) iCost += iClubhouseGaragePrice ELIF NOT IS_CLUBHOUSE_GARAGE_PURCHASED() iClubhouseGaragePrice = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_GARAGE, 1) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: Adding Garage: ", HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGarage), " add $", iClubhouseGaragePrice) iCost += iClubhouseGaragePrice ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES: Total cost of changes: $", iCost) RETURN iCost ENDFUNC FUNC INT CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES(INT iProperty, INT &iOfficeGarage1StylePrice, INT &iOfficeGarage1LightingPrice, INT &iOfficeGarage1NumberPrice, INT &iOfficeGarage2StylePrice, INT &iOfficeGarage2LightingPrice, INT &iOfficeGarage2NumberPrice, INT &iOfficeGarage3StylePrice, INT &iOfficeGarage3LightingPrice, INT &iOfficeGarage3NumberPrice) INT iCost = 0 INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) INT iOwnedGarage1 = GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1) iOfficeGarage1StylePrice = 0 iOfficeGarage1LightingPrice = 0 iOfficeGarage1NumberPrice = 0 IF iProperty = PROPERTY_OFFICE_1_GARAGE_LVL1 IF GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1) != iGarage1Style AND iGarage1Style != -1 #IF IS_DEBUG_BUILD INT iOldGarage = GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1) INT iOldGarageSF = -1 IF (iOldGarage != 0) iOldGarageSF = GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iOldGarage) ENDIF #ENDIF INT iNewGarageSF = GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage1Style) iOfficeGarage1StylePrice = GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty) #IF IS_DEBUG_BUILD TEXT_LABEL tlOldGarage = GET_PROPERTY_INTERIOR_NAME(iProperty, iOldGarageSF) TEXT_LABEL tlNewGarage = GET_PROPERTY_INTERIOR_NAME(iProperty, iNewGarageSF) #ENDIF IF iOwnedGarage1 != iProperty IF iNewGarageSF = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 1 style ", tlOldGarage, ":", iGarage1Style, " [sf:", iNewGarageSF, "] is free") iOfficeGarage1StylePrice = 0 ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 1 Style from ", iNewGarageSF, " to ", GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1), " add $", GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty)) iOfficeGarage1StylePrice = GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty) iCost += iOfficeGarage1StylePrice ENDIF ELSE IF iGarage1Style = GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: unchanging garage 1 Style ", tlOldGarage, ":", iGarage1Style, " [sf:", iNewGarageSF, "] is free") iOfficeGarage1StylePrice = 0 ELSE #IF IS_DEBUG_BUILD TEXT_LABEL tlOldGarageData = tlOldGarage tlOldGarageData += ":" tlOldGarageData += iOldGarage TEXT_LABEL tlNewGarageData = tlNewGarage tlNewGarageData += ":" tlNewGarageData += iGarage1Style #ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: changing garage 1 style from ", tlOldGarageData, " [sf:", iOldGarageSF, "] to ", tlNewGarageData, " [sf:", iNewGarageSF, "] add $", iOfficeGarage1StylePrice, " ", GET_STRING_FROM_TEXT_FILE(tlNewGarage)) iOfficeGarage1StylePrice = GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty) iCost += iOfficeGarage1StylePrice ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 1 style ", iGarage1Style) ENDIF IF iGarage1Lighting != -1 INT iGarage1LightingSF = GET_SF_FROM_OFFICE_GARAGE_LIGHTING(iGarage1Lighting) IF iOwnedGarage1 != iProperty IF iGarage1LightingSF = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 1 lighting ", iGarage1Lighting, " (iGarage1LightingSF:", iGarage1LightingSF, ") is free") ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 1 lighting from ", iGarage1Lighting, " (iGarage1LightingSF:", iGarage1LightingSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1_LIGHTING), " add 1", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE1_LIGHTING, iGarage1Lighting)) iOfficeGarage1LightingPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE1_LIGHTING, iGarage1LightingSF) iCost += iOfficeGarage1LightingPrice ENDIF ELSE IF iGarage1Lighting != GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1_LIGHTING) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: changing garage 1 lighting from ", iGarage1Lighting, " (iGarage1LightingSF:", iGarage1LightingSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1_LIGHTING), " add 1", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE1_LIGHTING, iGarage1Lighting)) iOfficeGarage1LightingPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE1_LIGHTING, iGarage1LightingSF) iCost += iOfficeGarage1LightingPrice ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 1 lighting ", iGarage1Lighting) ENDIF IF iGarage1Number != -1 INT iGarage1NumberSF = GET_SF_FROM_OFFICE_GARAGE_NUMBERING(iGarage1Number) IF iOwnedGarage1 != iProperty IF iGarage1NumberSF = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 1 number ", iGarage1Number, " (iGarage1NumberSF:", iGarage1NumberSF, ") is free") ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 1 number from ", iGarage1Number, " (iGarage1NumberSF:", iGarage1NumberSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1_NUMBERING), " add 1", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE1_NUMBERING, iGarage1Number)) iOfficeGarage1NumberPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE1_NUMBERING, iGarage1NumberSF) iCost += iOfficeGarage1NumberPrice ENDIF ELSE IF iGarage1Number != GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1_NUMBERING) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: changing garage 1 number from ", iGarage1Number, " (iGarage1NumberSF:", iGarage1NumberSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1_NUMBERING), " add 1", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE1_NUMBERING, iGarage1Number)) iOfficeGarage1NumberPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE1_NUMBERING, iGarage1NumberSF) iCost += iOfficeGarage1NumberPrice ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 1 number ", iGarage1Number) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 1, iProperty:", iProperty) ENDIF INT iOwnedGarage2 = GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2) iOfficeGarage2StylePrice = 0 iOfficeGarage2LightingPrice = 0 iOfficeGarage2NumberPrice = 0 IF iProperty = PROPERTY_OFFICE_1_GARAGE_LVL2 IF GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2) != iGarage2Style AND iGarage2Style != -1 #IF IS_DEBUG_BUILD INT iOldGarage = GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2) INT iOldGarageSF = -1 IF (iOldGarage != 0) iOldGarageSF = GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iOldGarage) ENDIF #ENDIF INT iNewGarageSF = GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage2Style) iOfficeGarage2StylePrice = GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty) #IF IS_DEBUG_BUILD TEXT_LABEL tlOldGarage = GET_PROPERTY_INTERIOR_NAME(iProperty, iOldGarageSF) TEXT_LABEL tlNewGarage = GET_PROPERTY_INTERIOR_NAME(iProperty, iNewGarageSF) #ENDIF IF iOwnedGarage2 != iProperty IF iNewGarageSF = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 2 style ", tlOldGarage, ":", iGarage2Style, " [sf:", iNewGarageSF, "] is free") iOfficeGarage2StylePrice = 0 ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 2 style from ", iNewGarageSF, " to ", GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2), " add $", GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty)) iOfficeGarage2StylePrice = GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty) iCost += iOfficeGarage2StylePrice ENDIF ELSE IF iGarage2Style = GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: unchanging garage 2 style ", tlOldGarage, ":", iGarage2Style, " [sf:", iNewGarageSF, "] is free") iOfficeGarage2StylePrice = 0 ELSE #IF IS_DEBUG_BUILD TEXT_LABEL tlOldGarageData = tlOldGarage tlOldGarageData += ":" tlOldGarageData += iOldGarage TEXT_LABEL tlNewGarageData = tlNewGarage tlNewGarageData += ":" tlNewGarageData += iGarage2Style #ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: changing garage 2 style from ", tlOldGarageData, " [sf:", iOldGarageSF, "] to ", tlNewGarageData, " [sf:", iNewGarageSF, "] add $", iOfficeGarage2StylePrice, " ", GET_STRING_FROM_TEXT_FILE(tlNewGarage)) iOfficeGarage2StylePrice = GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty) iCost += iOfficeGarage2StylePrice ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 2 style ", iGarage2Style) ENDIF IF iGarage2Lighting != -1 INT iGarage2LightingSF = GET_SF_FROM_OFFICE_GARAGE_LIGHTING(iGarage2Lighting) IF iOwnedGarage2 != iProperty IF iGarage2LightingSF = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 2 lighting ", iGarage2Lighting, " (iGarage2LightingSF:", iGarage2LightingSF, ") is free") ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 2 lighting from ", iGarage2Lighting, " (iGarage2LightingSF:", iGarage2LightingSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2_LIGHTING), " add 2", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE2_LIGHTING, iGarage2Lighting)) iOfficeGarage2LightingPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE2_LIGHTING, iGarage2LightingSF) iCost += iOfficeGarage2LightingPrice ENDIF ELSE IF iGarage2Lighting != GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2_LIGHTING) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: changing garage 2 lighting from ", iGarage2Lighting, " (iGarage2LightingSF:", iGarage2LightingSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2_LIGHTING), " add 2", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE2_LIGHTING, iGarage2Lighting)) iOfficeGarage2LightingPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE2_LIGHTING, iGarage2LightingSF) iCost += iOfficeGarage2LightingPrice ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 2 lighting ", iGarage2Lighting) ENDIF IF iGarage2Number != -1 INT iGarage2NumberSF = GET_SF_FROM_OFFICE_GARAGE_NUMBERING(iGarage2Number) IF iOwnedGarage2 != iProperty IF iGarage2NumberSF = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 2 number ", iGarage2Number, " (iGarage2NumberSF:", iGarage2NumberSF, ") is free") ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 2 number from ", iGarage2Number, " (iGarage2NumberSF:", iGarage2NumberSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2_NUMBERING), " add 2", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE2_NUMBERING, iGarage2Number)) iOfficeGarage2NumberPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE2_NUMBERING, iGarage2NumberSF) iCost += iOfficeGarage2NumberPrice ENDIF ELSE IF iGarage2Number != GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2_NUMBERING) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: changing garage 2 number from ", iGarage2Number, " (iGarage2NumberSF:", iGarage2NumberSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2_NUMBERING), " add 2", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE2_NUMBERING, iGarage2Number)) iOfficeGarage2NumberPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE2_NUMBERING, iGarage2NumberSF) iCost += iOfficeGarage2NumberPrice ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 2 number ", iGarage2Number) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 2, iProperty:", iProperty) ENDIF INT iOwnedGarage3 = GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3) iOfficeGarage3StylePrice = 0 iOfficeGarage3LightingPrice = 0 iOfficeGarage3NumberPrice = 0 IF iProperty = PROPERTY_OFFICE_1_GARAGE_LVL3 IF GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3) != iGarage3Style AND iGarage3Style != -1 #IF IS_DEBUG_BUILD INT iOldGarage = GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3) INT iOldGarageSF = -1 IF (iOldGarage != 0) iOldGarageSF = GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iOldGarage) ENDIF #ENDIF INT iNewGarageSF = GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage3Style) iOfficeGarage3StylePrice = GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty) #IF IS_DEBUG_BUILD TEXT_LABEL tlOldGarage = GET_PROPERTY_INTERIOR_NAME(iProperty, iOldGarageSF) TEXT_LABEL tlNewGarage = GET_PROPERTY_INTERIOR_NAME(iProperty, iNewGarageSF) #ENDIF IF iOwnedGarage3 != iProperty IF iNewGarageSF = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 3 style ", tlOldGarage, ":", iGarage3Style, " [sf:", iNewGarageSF, "] is free") iOfficeGarage3StylePrice = 0 ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 3 style from ", iNewGarageSF, " to ", GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3), " add $", GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty)) iOfficeGarage3StylePrice = GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty) iCost += iOfficeGarage3StylePrice ENDIF ELSE IF iGarage3Style = GET_OWNED_PROPERTY_VARIATION(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: unchanging garage 3 style ", tlOldGarage, ":", iGarage3Style, " [sf:", iNewGarageSF, "] is free") iOfficeGarage3StylePrice = 0 ELSE #IF IS_DEBUG_BUILD TEXT_LABEL tlOldGarageData = tlOldGarage tlOldGarageData += ":" tlOldGarageData += iOldGarage TEXT_LABEL tlNewGarageData = tlNewGarage tlNewGarageData += ":" tlNewGarageData += iGarage3Style #ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: changing garage 3 style from ", tlOldGarageData, " [sf:", iOldGarageSF, "] to ", tlNewGarageData, " [sf:", iNewGarageSF, "] add $", iOfficeGarage3StylePrice, " ", GET_STRING_FROM_TEXT_FILE(tlNewGarage)) iOfficeGarage3StylePrice = GET_MP_PROPERTY_INTERIOR_VALUE(iNewGarageSF, iProperty) iCost += iOfficeGarage3StylePrice ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 3 style ", iGarage3Style) ENDIF IF iGarage3Lighting != -1 INT iGarage3LightingSF = GET_SF_FROM_OFFICE_GARAGE_LIGHTING(iGarage3Lighting) IF iOwnedGarage3 != iProperty IF iGarage3LightingSF = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 3 lighting ", iGarage3Lighting, " (iGarage3LightingSF:", iGarage3LightingSF, ") is free") ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 3 lighting from ", iGarage3Lighting, " (iGarage3LightingSF:", iGarage3LightingSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3_LIGHTING), " add 3", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE3_LIGHTING, iGarage3Lighting)) iOfficeGarage3LightingPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE3_LIGHTING, iGarage3LightingSF) iCost += iOfficeGarage3LightingPrice ENDIF ELSE IF iGarage3Lighting != GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3_LIGHTING) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: changing garage 3 lighting from ", iGarage3Lighting, " (iGarage3LightingSF:", iGarage3LightingSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3_LIGHTING), " add 3", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE3_LIGHTING, iGarage3Lighting)) iOfficeGarage3LightingPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE3_LIGHTING, iGarage3LightingSF) iCost += iOfficeGarage3LightingPrice ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 3 lighting ", iGarage3Lighting) ENDIF IF iGarage3Number != -1 INT iGarage3NumberSF = GET_SF_FROM_OFFICE_GARAGE_NUMBERING(iGarage3Number) IF iOwnedGarage3 != iProperty IF iGarage3NumberSF = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 3 number ", iGarage3Number, " (iGarage3NumberSF:", iGarage3NumberSF, ") is free") ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: new property, garage 3 number from ", iGarage3Number, " (iGarage3NumberSF:", iGarage3NumberSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3_NUMBERING), " add 3", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE3_NUMBERING, iGarage3Number)) iOfficeGarage3NumberPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE3_NUMBERING, iGarage3NumberSF) iCost += iOfficeGarage3NumberPrice ENDIF ELSE IF iGarage3Number != GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3_NUMBERING) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: changing garage 3 number from ", iGarage3Number, " (iGarage3NumberSF:", iGarage3NumberSF, ") to ", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3_NUMBERING), " add 3", GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE3_NUMBERING, iGarage3Number)) iOfficeGarage3NumberPrice = GET_OFFICE_PROPERTY_MOD_VALUE(OFFICE_MOD_GARAGE3_NUMBERING, iGarage3NumberSF) iCost += iOfficeGarage3NumberPrice ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 3 number ", iGarage3Number) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: ignore garage 3, iProperty:", iProperty) ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES: Total cost of changes: $", iCost) RETURN iCost ENDFUNC FUNC INT CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES(FACTORY_ID eFactoryId, BUNKER_PRICE_STRUCT &sBunkerPriceStruct) FACTORY_ID eTradeInFactory = GET_OWNED_BUNKER(PLAYER_ID()) INT iCost = 0 INT iDecor, iAccommodation, iFiringRange, iGunLocker, iTransportation GET_SCALEFORM_FACTORY_DATA(iDecor, iAccommodation, iFiringRange, iGunLocker, iTransportation) sBunkerPriceStruct.iDecorPrice = 0 IF eTradeInFactory != eFactoryId IF iDecor = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: new property, Decor A is free") ELSE SWITCH iDecor CASE 0 sBunkerPriceStruct.iDecorPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_DECOR_0, eFactoryId) BREAK CASE 1 sBunkerPriceStruct.iDecorPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_DECOR_1, eFactoryId) BREAK CASE 2 sBunkerPriceStruct.iDecorPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_DECOR_2, eFactoryId) BREAK ENDSWITCH CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: new property, Decor to ", iDecor, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_DECOR), " add $", sBunkerPriceStruct.iDecorPrice) iCost += sBunkerPriceStruct.iDecorPrice ENDIF ELSE IF iDecor != GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_DECOR) SWITCH iDecor CASE 0 sBunkerPriceStruct.iDecorPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_DECOR_0, eFactoryId) BREAK CASE 1 sBunkerPriceStruct.iDecorPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_DECOR_1, eFactoryId) BREAK CASE 2 sBunkerPriceStruct.iDecorPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_DECOR_2, eFactoryId) BREAK ENDSWITCH CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: changing Decor to ", iDecor, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_DECOR), " add $", sBunkerPriceStruct.iDecorPrice) iCost += sBunkerPriceStruct.iDecorPrice ENDIF ENDIF sBunkerPriceStruct.iAccommodationPrice = 0 IF eTradeInFactory != eFactoryId IF iAccommodation = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: new property, Accommodation A is free") ELSE sBunkerPriceStruct.iAccommodationPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_PERSONAL_QUARTERS, eFactoryId) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: new property, Accommodation to ", iAccommodation, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_SAVEBED), " add $", sBunkerPriceStruct.iAccommodationPrice) iCost += sBunkerPriceStruct.iAccommodationPrice ENDIF ELSE IF iAccommodation != GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_SAVEBED) sBunkerPriceStruct.iAccommodationPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_PERSONAL_QUARTERS, eFactoryId) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: changing Accommodation to ", iAccommodation, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_SAVEBED), " add $", sBunkerPriceStruct.iAccommodationPrice) iCost += sBunkerPriceStruct.iAccommodationPrice ENDIF ENDIF sBunkerPriceStruct.iFiringRangePrice = 0 IF eTradeInFactory != eFactoryId IF iFiringRange = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: new property, FiringRange A is free") ELSE SWITCH iFiringRange CASE 0 sBunkerPriceStruct.iFiringRangePrice = 0 BREAK CASE 1 sBunkerPriceStruct.iFiringRangePrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_FIRING_RANGE_0, eFactoryId) BREAK CASE 2 sBunkerPriceStruct.iFiringRangePrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_FIRING_RANGE_1, eFactoryId) BREAK ENDSWITCH CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: new property, FiringRange to ", iFiringRange, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_FIRING_RANGE), " add $", sBunkerPriceStruct.iFiringRangePrice) iCost += sBunkerPriceStruct.iFiringRangePrice ENDIF ELSE IF iFiringRange != GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_FIRING_RANGE) SWITCH iFiringRange CASE 0 sBunkerPriceStruct.iFiringRangePrice = 0 BREAK CASE 1 sBunkerPriceStruct.iFiringRangePrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_FIRING_RANGE_0, eFactoryId) BREAK CASE 2 sBunkerPriceStruct.iFiringRangePrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_FIRING_RANGE_1, eFactoryId) BREAK ENDSWITCH CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: changing FiringRange to ", iFiringRange, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_FIRING_RANGE), " add $", sBunkerPriceStruct.iFiringRangePrice) iCost += sBunkerPriceStruct.iFiringRangePrice ENDIF ENDIF sBunkerPriceStruct.iGunLockerPrice = 0 IF eTradeInFactory != eFactoryId IF iGunLocker = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: new property, GunLocker A is free") ELSE sBunkerPriceStruct.iGunLockerPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_GUN_LOCKER, eFactoryId) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: new property, GunLocker to ", iGunLocker, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_GUNLOCKER), " add $", sBunkerPriceStruct.iGunLockerPrice) iCost += sBunkerPriceStruct.iGunLockerPrice ENDIF ELSE IF iGunLocker != GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_GUNLOCKER) sBunkerPriceStruct.iGunLockerPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_GUN_LOCKER, eFactoryId) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: changing GunLocker to ", iGunLocker, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_GUNLOCKER), " add $", sBunkerPriceStruct.iGunLockerPrice) iCost += sBunkerPriceStruct.iGunLockerPrice ENDIF ENDIF sBunkerPriceStruct.iTransportationPrice = 0 IF eTradeInFactory != eFactoryId IF iTransportation = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: new property, Transportation A is free") ELSE SWITCH iTransportation CASE 0 sBunkerPriceStruct.iTransportationPrice = 0 BREAK CASE 1 sBunkerPriceStruct.iTransportationPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_TRANSPORTATION_0, eFactoryId) BREAK CASE 2 sBunkerPriceStruct.iTransportationPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_TRANSPORTATION_1, eFactoryId) BREAK ENDSWITCH CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: new property, Transportation to ", iTransportation, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_TRANSPORTATION), " add $", sBunkerPriceStruct.iTransportationPrice) iCost += sBunkerPriceStruct.iTransportationPrice ENDIF ELSE IF iTransportation != GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_TRANSPORTATION) SWITCH iTransportation CASE 0 sBunkerPriceStruct.iTransportationPrice = 0 BREAK CASE 1 sBunkerPriceStruct.iTransportationPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_TRANSPORTATION_0, eFactoryId) BREAK CASE 2 sBunkerPriceStruct.iTransportationPrice = GET_FACTORY_UPGRADE_COST(UPGRADE_ID_TRANSPORTATION_1, eFactoryId) BREAK ENDSWITCH CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: changing Transportation to ", iTransportation, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_TRANSPORTATION), " add $", sBunkerPriceStruct.iTransportationPrice) iCost += sBunkerPriceStruct.iTransportationPrice ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES: Total cost of changes: $", iCost) RETURN iCost ENDFUNC FUNC INT CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES(HANGAR_ID eHangarID, HANGAR_PRICE_STRUCT &sHangarPriceStruct) HANGAR_ID eTradeInHangar = GET_PLAYERS_OWNED_HANGAR(PLAYER_ID()) INT iCost = 0 HANGAR_DATA_STRUCT sHangarData GET_SCALEFORM_HANGAR_DATA(sHangarData) sHangarPriceStruct.iFlooringPrice = 0 IF eTradeInHangar != eHangarID IF sHangarData.iFlooring = 4 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, FloorDecal A is free") ELSE sHangarPriceStruct.iFlooringPrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_FLOORING, eHangarID, sHangarData.iFlooring) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, FloorDecal to ", sHangarData.iFlooring, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_FLOOR_DECAL), " add $", sHangarPriceStruct.iFlooringPrice) iCost += sHangarPriceStruct.iFlooringPrice ENDIF ELSE IF sHangarData.iFlooring != GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_FLOOR_DECAL) sHangarPriceStruct.iFlooringPrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_FLOORING, eHangarID, sHangarData.iFlooring) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: changing FloorDecal to ", sHangarData.iFlooring, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_FLOOR_DECAL), " add $", sHangarPriceStruct.iFlooringPrice) iCost += sHangarPriceStruct.iFlooringPrice ENDIF ENDIF sHangarPriceStruct.iAccommodationPrice = 0 IF eTradeInHangar != eHangarID IF sHangarData.iSleepingQuarters = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, Accommodation A is free") ELSE sHangarPriceStruct.iAccommodationPrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_PERSONAL_QUARTERS, eHangarID, sHangarData.iSleepingQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, Accommodation to ", sHangarData.iSleepingQuarters, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_SAVEBED), " add $", sHangarPriceStruct.iAccommodationPrice) iCost += sHangarPriceStruct.iAccommodationPrice ENDIF ELSE IF sHangarData.iSleepingQuarters != GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_SAVEBED) sHangarPriceStruct.iAccommodationPrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_PERSONAL_QUARTERS, eHangarID, sHangarData.iSleepingQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: changing Accommodation to ", sHangarData.iSleepingQuarters, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_SAVEBED), " add $", sHangarPriceStruct.iAccommodationPrice) iCost += sHangarPriceStruct.iAccommodationPrice ENDIF ENDIF sHangarPriceStruct.iFurniturePrice = 0 IF eTradeInHangar != eHangarID IF sHangarData.iFurniture = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, Furniture A is free") ELSE sHangarPriceStruct.iFurniturePrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_FURNITURE, eHangarID, sHangarData.iFurniture) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, Furniture to ", sHangarData.iFurniture, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_FURNITURE), " add $", sHangarPriceStruct.iFurniturePrice) iCost += sHangarPriceStruct.iFurniturePrice ENDIF ELSE IF sHangarData.iFurniture != GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_FURNITURE) sHangarPriceStruct.iFurniturePrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_FURNITURE, eHangarID, sHangarData.iFurniture) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: changing Furniture to ", sHangarData.iFurniture, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_FURNITURE), " add $", sHangarPriceStruct.iFurniturePrice) iCost += sHangarPriceStruct.iFurniturePrice ENDIF ENDIF sHangarPriceStruct.iModshopPrice = 0 IF eTradeInHangar != eHangarID IF sHangarData.iWorkshop = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, Modshop A is free") ELSE sHangarPriceStruct.iModshopPrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_MODSHOP, eHangarID) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, Modshop to ", sHangarData.iWorkshop, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_MODSHOP), " add $", sHangarPriceStruct.iModshopPrice) iCost += sHangarPriceStruct.iModshopPrice ENDIF ELSE IF sHangarData.iWorkshop != GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_MODSHOP) sHangarPriceStruct.iModshopPrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_MODSHOP, eHangarID) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: changing Modshop to ", sHangarData.iWorkshop, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_MODSHOP), " add $", sHangarPriceStruct.iModshopPrice) iCost += sHangarPriceStruct.iModshopPrice ENDIF ENDIF sHangarPriceStruct.iColourPrice = 0 IF eTradeInHangar != eHangarID IF sHangarData.iStyle = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, Colour A is free") ELSE sHangarPriceStruct.iColourPrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_STYLE, eHangarID, sHangarData.iStyle) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, Colour to ", sHangarData.iStyle, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_COLOUR), " add $", sHangarPriceStruct.iColourPrice) iCost += sHangarPriceStruct.iColourPrice ENDIF ELSE IF sHangarData.iStyle != GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_COLOUR) sHangarPriceStruct.iColourPrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_STYLE, eHangarID, sHangarData.iStyle) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: changing Colour to ", sHangarData.iStyle, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_COLOUR), " add $", sHangarPriceStruct.iColourPrice) iCost += sHangarPriceStruct.iColourPrice ENDIF ENDIF sHangarPriceStruct.iLightingPrice = 0 IF eTradeInHangar != eHangarID IF sHangarData.iLighting = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, Lighting A is free") ELSE sHangarPriceStruct.iLightingPrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_LIGHTING, eHangarID, GET_HANGER_LIGHTING_ID_FROM_STYLE_AND_LIGHTING(sHangarData.iStyle, sHangarData.iLighting)) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: new property, Lighting to ", sHangarData.iLighting, " (iStyle ", sHangarData.iStyle, ") from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_LIGHTING), " add $", sHangarPriceStruct.iLightingPrice) iCost += sHangarPriceStruct.iLightingPrice ENDIF ELSE IF sHangarData.iLighting != GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_LIGHTING) OR sHangarData.iStyle != GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_COLOUR) IF sHangarData.iLighting = 0 AND sHangarData.iStyle != GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_COLOUR) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: changing Lighting to ", sHangarData.iLighting, " (iStyle ", sHangarData.iStyle, ") from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_LIGHTING), " but changing Colour to ", sHangarData.iStyle, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_COLOUR), ", Lighting A is free") ELSE sHangarPriceStruct.iLightingPrice = GET_HANGAR_UPGRADE_COST(eHANGAR_MOD_LIGHTING, eHangarID, GET_HANGER_LIGHTING_ID_FROM_STYLE_AND_LIGHTING(sHangarData.iStyle, sHangarData.iLighting)) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: changing Lighting to ", sHangarData.iLighting, " (iStyle ", sHangarData.iStyle, ") from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_LIGHTING), " add $", sHangarPriceStruct.iLightingPrice) iCost += sHangarPriceStruct.iLightingPrice ENDIF ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES: Total cost of changes: $", iCost) RETURN iCost ENDFUNC FUNC INT CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES(DEFUNCT_BASE_ID eBaseID, DEFUNCT_BASE_PRICE_STRUCT &sDefunctBasePriceStruct) DEFUNCT_BASE_ID eTradeInBase = GET_PLAYERS_OWNED_DEFUNCT_BASE(PLAYER_ID()) INT iCost = 0 DEFUNCT_BASE_DATA_STRUCT sDefunctBaseData GET_SCALEFORM_DEFUNCT_BASE_DATA(sDefunctBaseData) sDefunctBasePriceStruct.iStylePrice = 0 IF eTradeInBase != eBaseID IF sDefunctBaseData.iStyle = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, Style A is free") ELSE sDefunctBasePriceStruct.iStylePrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_STYLE, eBaseID, sDefunctBaseData.iStyle) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, Style to ", sDefunctBaseData.iStyle, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_FACILITY_STYLE), " add $", sDefunctBasePriceStruct.iStylePrice) iCost += sDefunctBasePriceStruct.iStylePrice ENDIF ELSE IF sDefunctBaseData.iStyle != GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_FACILITY_STYLE) sDefunctBasePriceStruct.iStylePrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_STYLE, eBaseID, sDefunctBaseData.iStyle) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: changing Style to ", sDefunctBaseData.iStyle, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_FACILITY_STYLE), " add $", sDefunctBasePriceStruct.iStylePrice) iCost += sDefunctBasePriceStruct.iStylePrice ENDIF ENDIF INT iOldGraphic = GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_FACILITY_GRAPHIC) INT iOldGraphicSF = -1 IF (iOldGraphic != 0) iOldGraphicSF = GET_SF_FROM_DBASE_GRAPHICS(iOldGraphic) ENDIF INT iNewGraphicSF = GET_SF_FROM_DBASE_GRAPHICS(sDefunctBaseData.iGraphics) sDefunctBasePriceStruct.iGraphicsPrice = 0 IF eTradeInBase != eBaseID IF iNewGraphicSF = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, Graphics A is free") ELSE sDefunctBasePriceStruct.iGraphicsPrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_GRAPHIC, eBaseID, iNewGraphicSF) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, Graphics to ", iNewGraphicSF, " from ", iOldGraphicSF, " add $", sDefunctBasePriceStruct.iGraphicsPrice) iCost += sDefunctBasePriceStruct.iGraphicsPrice ENDIF ELSE IF iNewGraphicSF != iOldGraphicSF sDefunctBasePriceStruct.iGraphicsPrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_GRAPHIC, eBaseID, iNewGraphicSF) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: changing Graphics to ", iNewGraphicSF, " from ", iOldGraphicSF, " add $", sDefunctBasePriceStruct.iGraphicsPrice) iCost += sDefunctBasePriceStruct.iGraphicsPrice ENDIF ENDIF sDefunctBasePriceStruct.iOrbitalWeaponPrice = 0 IF eTradeInBase != eBaseID IF sDefunctBaseData.iOrbitalWeapon = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, OrbitalWeapon A is free") ELSE sDefunctBasePriceStruct.iOrbitalWeaponPrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_ORBITAL_WEAPON, eBaseID) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, OrbitalWeapon to ", sDefunctBaseData.iOrbitalWeapon, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_ORBITAL_WEAPON), " add $", sDefunctBasePriceStruct.iOrbitalWeaponPrice) iCost += sDefunctBasePriceStruct.iOrbitalWeaponPrice ENDIF ELSE IF sDefunctBaseData.iOrbitalWeapon != GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_ORBITAL_WEAPON) sDefunctBasePriceStruct.iOrbitalWeaponPrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_ORBITAL_WEAPON, eBaseID) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: changing OrbitalWeapon to ", sDefunctBaseData.iOrbitalWeapon, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_ORBITAL_WEAPON), " add $", sDefunctBasePriceStruct.iOrbitalWeaponPrice) iCost += sDefunctBasePriceStruct.iOrbitalWeaponPrice ENDIF ENDIF sDefunctBasePriceStruct.iSecurityRoomPrice = 0 IF eTradeInBase != eBaseID IF sDefunctBaseData.iSecurityRoom = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, SecurityRoom A is free") ELSE sDefunctBasePriceStruct.iSecurityRoomPrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_SECURITY_ROOM, eBaseID) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, SecurityRoom to ", sDefunctBaseData.iSecurityRoom, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_SECURITY_ROOM), " add $", sDefunctBasePriceStruct.iSecurityRoomPrice) iCost += sDefunctBasePriceStruct.iSecurityRoomPrice ENDIF ELSE IF sDefunctBaseData.iSecurityRoom != GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_SECURITY_ROOM) sDefunctBasePriceStruct.iSecurityRoomPrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_SECURITY_ROOM, eBaseID) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: changing SecurityRoom to ", sDefunctBaseData.iSecurityRoom, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_SECURITY_ROOM), " add $", sDefunctBasePriceStruct.iSecurityRoomPrice) iCost += sDefunctBasePriceStruct.iSecurityRoomPrice ENDIF ENDIF sDefunctBasePriceStruct.iLoungePrice = 0 IF eTradeInBase != eBaseID IF sDefunctBaseData.iLounge = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, Lounge A is free") ELSE sDefunctBasePriceStruct.iLoungePrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_LOUNGE, eBaseID, sDefunctBaseData.iLounge) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, Lounge to ", sDefunctBaseData.iLounge, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_LOUNGE), " add $", sDefunctBasePriceStruct.iLoungePrice) iCost += sDefunctBasePriceStruct.iLoungePrice ENDIF ELSE IF sDefunctBaseData.iLounge != GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_LOUNGE) sDefunctBasePriceStruct.iLoungePrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_LOUNGE, eBaseID, sDefunctBaseData.iLounge) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: changing Lounge to ", sDefunctBaseData.iLounge, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_LOUNGE), " add $", sDefunctBasePriceStruct.iLoungePrice) iCost += sDefunctBasePriceStruct.iLoungePrice ENDIF ENDIF sDefunctBasePriceStruct.iPrivicyGlassPrice = 0 IF eTradeInBase != eBaseID IF sDefunctBaseData.iPrivicyGlass = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, iPrivicyGlass A is free") ELSE sDefunctBasePriceStruct.iPrivicyGlassPrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_PRIVACY_GLASS, eBaseID) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, iPrivicyGlass to ", sDefunctBaseData.iPrivicyGlass, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_PRIVACY_GLASS), " add $", sDefunctBasePriceStruct.iPrivicyGlassPrice) iCost += sDefunctBasePriceStruct.iPrivicyGlassPrice ENDIF ELSE IF sDefunctBaseData.iPrivicyGlass != GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_PRIVACY_GLASS) sDefunctBasePriceStruct.iPrivicyGlassPrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_PRIVACY_GLASS, eBaseID) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: changing iPrivicyGlass to ", sDefunctBaseData.iPrivicyGlass, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_PRIVACY_GLASS), " add $", sDefunctBasePriceStruct.iPrivicyGlassPrice) iCost += sDefunctBasePriceStruct.iPrivicyGlassPrice ENDIF ENDIF sDefunctBasePriceStruct.iPersonalQuartersPrice = 0 IF eTradeInBase != eBaseID IF sDefunctBaseData.iPersonalQuarters = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, PersonalQuarters A is free") ELSE sDefunctBasePriceStruct.iPersonalQuartersPrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_PERSONAL_QUARTERS, eBaseID, sDefunctBaseData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: new property, PersonalQuarters to ", sDefunctBaseData.iPersonalQuarters, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_PERSONAL_QUARTERS), " add $", sDefunctBasePriceStruct.iPersonalQuartersPrice) iCost += sDefunctBasePriceStruct.iPersonalQuartersPrice ENDIF ELSE IF sDefunctBaseData.iPersonalQuarters != GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_PERSONAL_QUARTERS) sDefunctBasePriceStruct.iPersonalQuartersPrice = GET_DEFUNCT_BASE_UPGRADE_COST(eDEFUNCT_BASE_MOD_PERSONAL_QUARTERS, eBaseID, sDefunctBaseData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: changing PersonalQuarters to ", sDefunctBaseData.iPersonalQuarters, " from ", GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_PERSONAL_QUARTERS), " add $", sDefunctBasePriceStruct.iPersonalQuartersPrice) iCost += sDefunctBasePriceStruct.iPersonalQuartersPrice ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES: Total cost of changes: $", iCost) RETURN iCost ENDFUNC FUNC INT CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES(NIGHTCLUB_ID eNightclubID, NIGHTCLUB_PRICE_STRUCT &sNightclubPriceStruct) NIGHTCLUB_ID eTradeInNightclub = GET_PLAYERS_OWNED_NIGHTCLUB(PLAYER_ID()) INT iCost = 0 NIGHTCLUB_DATA_STRUCT sNightclubData GET_SCALEFORM_NIGHTCLUB_DATA(sNightclubData) sNightclubPriceStruct.iStylePrice = 0 IF eTradeInNightclub != eNightclubID IF sNightclubData.iStyle = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Style A is free") ELSE sNightclubPriceStruct.iStylePrice = GET_NIGHTCLUB_UPGRADE_COST(eNIGHTCLUB_MOD_STYLE, eNightclubID, sNightclubData.iStyle) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Style to ", sNightclubData.iStyle, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_STYLE)), " add $", sNightclubPriceStruct.iStylePrice) iCost += sNightclubPriceStruct.iStylePrice ENDIF ELSE IF sNightclubData.iStyle != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_STYLE)) sNightclubPriceStruct.iStylePrice = GET_NIGHTCLUB_UPGRADE_COST(eNIGHTCLUB_MOD_STYLE, eNightclubID, sNightclubData.iStyle) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: changing Style to ", sNightclubData.iStyle, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_STYLE)), " add $", sNightclubPriceStruct.iStylePrice) iCost += sNightclubPriceStruct.iStylePrice ENDIF ENDIF INT iOldLighting = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_LIGHTING)) INT iOldLightingSF = GET_SF_FROM_NIGHTCLUB_LIGHTING(iOldLighting) INT iNewLightingSF = GET_SF_FROM_NIGHTCLUB_LIGHTING(sNightclubData.iLighting) sNightclubPriceStruct.iLightingPrice = 0 IF eTradeInNightclub != eNightclubID IF iNewLightingSF = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Lighting A is free") ELSE sNightclubPriceStruct.iLightingPrice = GET_NIGHTCLUB_UPGRADE_COST(eNIGHTCLUB_MOD_LIGHTING, eNightclubID, iNewLightingSF) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Lighting to ", iNewLightingSF, " from ", iOldLightingSF, " add $", sNightclubPriceStruct.iLightingPrice) iCost += sNightclubPriceStruct.iLightingPrice ENDIF ELSE IF iNewLightingSF != iOldLightingSF sNightclubPriceStruct.iLightingPrice = GET_NIGHTCLUB_UPGRADE_COST(eNIGHTCLUB_MOD_LIGHTING, eNightclubID, iNewLightingSF) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: changing Lighting to ", iNewLightingSF, " from ", iOldLightingSF, " add $", sNightclubPriceStruct.iLightingPrice) iCost += sNightclubPriceStruct.iLightingPrice ENDIF ENDIF sNightclubPriceStruct.iDancersPrice = 0 IF eTradeInNightclub != eNightclubID IF sNightclubData.iDancers = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Podium A is free") ELSE sNightclubPriceStruct.iDancersPrice = GET_NIGHTCLUB_UPGRADE_COST(eNIGHTCLUB_MOD_DANCERS, eNightclubID, sNightclubData.iDancers) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Podium to ", sNightclubData.iDancers, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_DANCERS)), " add $", sNightclubPriceStruct.iDancersPrice) iCost += sNightclubPriceStruct.iDancersPrice ENDIF ELSE IF sNightclubData.iDancers != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_DANCERS)) sNightclubPriceStruct.iDancersPrice = GET_NIGHTCLUB_UPGRADE_COST(eNIGHTCLUB_MOD_DANCERS, eNightclubID, sNightclubData.iDancers) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: changing Podium to ", sNightclubData.iDancers, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_DANCERS)), " add $", sNightclubPriceStruct.iDancersPrice) iCost += sNightclubPriceStruct.iDancersPrice ENDIF ENDIF sNightclubPriceStruct.iDryIcePrice = 0 IF eTradeInNightclub != eNightclubID IF sNightclubData.iDryIce = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Podium A is free") ELSE sNightclubPriceStruct.iDryIcePrice = GET_NIGHTCLUB_UPGRADE_COST(eNIGHTCLUB_MOD_DRYICE, eNightclubID, sNightclubData.iDryIce) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Podium to ", sNightclubData.iDryIce, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_DRYICE)), " add $", sNightclubPriceStruct.iDryIcePrice) iCost += sNightclubPriceStruct.iDryIcePrice ENDIF ELSE IF sNightclubData.iDryIce != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_DRYICE)) sNightclubPriceStruct.iDryIcePrice = GET_NIGHTCLUB_UPGRADE_COST(eNIGHTCLUB_MOD_DRYICE, eNightclubID, sNightclubData.iDryIce) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: changing Podium to ", sNightclubData.iDryIce, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_DRYICE)), " add $", sNightclubPriceStruct.iDryIcePrice) iCost += sNightclubPriceStruct.iDryIcePrice ENDIF ENDIF INT iOldName = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_Name)) INT iOldNameSF = GET_SF_FROM_NIGHTCLUB_NAME(iOldName) INT iNewNameSF = GET_SF_FROM_NIGHTCLUB_NAME(sNightclubData.iNameID) sNightclubPriceStruct.iNamePrice = 0 IF eTradeInNightclub != eNightclubID IF iNewNameSF = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Name A is free") ELIF IS_NIGHTCLUB_ID_VALID(eTradeInNightclub) AND iNewNameSF = iOldNameSF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Name to ", iNewNameSF, " from ", iOldNameSF, " is free") ELSE sNightclubPriceStruct.iNamePrice = GET_NIGHTCLUB_UPGRADE_COST(eNIGHTCLUB_MOD_Name, eNightclubID, iNewNameSF) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Name to ", iNewNameSF, " from ", iOldNameSF, " add $", sNightclubPriceStruct.iNamePrice) iCost += sNightclubPriceStruct.iNamePrice ENDIF ELSE IF iNewNameSF != iOldNameSF sNightclubPriceStruct.iNamePrice = GET_NIGHTCLUB_UPGRADE_COST(eNIGHTCLUB_MOD_Name, eNightclubID, iNewNameSF) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: changing Name to ", iNewNameSF, " from ", iOldNameSF, " add $", sNightclubPriceStruct.iNamePrice) iCost += sNightclubPriceStruct.iNamePrice ENDIF ENDIF sNightclubPriceStruct.iStoragePrice = 0 IF eTradeInNightclub != eNightclubID IF sNightclubData.iStorage = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Warehouse A is free") ELIF IS_NIGHTCLUB_ID_VALID(eTradeInNightclub) AND sNightclubData.iStorage = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_BUSINESS_HUB_UPGRADE(eBUSINESS_HUB_MOD_WAREHOUSE)) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Warehouse ", sNightclubData.iStorage, " is kept for free") ELSE sNightclubPriceStruct.iStoragePrice = GET_BUSINESS_HUB_ADDITIVE_UPGRADE_COST(eBUSINESS_HUB_MOD_WAREHOUSE, INT_TO_ENUM(BUSINESS_HUB_ID, ENUM_TO_INT(eNightclubID)), sNightclubData.iStorage) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Warehouse to ", sNightclubData.iStorage, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_BUSINESS_HUB_UPGRADE(eBUSINESS_HUB_MOD_WAREHOUSE)), " add $", sNightclubPriceStruct.iStoragePrice) iCost += sNightclubPriceStruct.iStoragePrice ENDIF ELSE IF sNightclubData.iStorage != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_BUSINESS_HUB_UPGRADE(eBUSINESS_HUB_MOD_WAREHOUSE)) sNightclubPriceStruct.iStoragePrice = GET_BUSINESS_HUB_ADDITIVE_UPGRADE_COST(eBUSINESS_HUB_MOD_WAREHOUSE, INT_TO_ENUM(BUSINESS_HUB_ID, ENUM_TO_INT(eNightclubID)), sNightclubData.iStorage) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: changing Warehouse to ", sNightclubData.iStorage, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_BUSINESS_HUB_UPGRADE(eBUSINESS_HUB_MOD_WAREHOUSE)), " add $", sNightclubPriceStruct.iStoragePrice) iCost += sNightclubPriceStruct.iStoragePrice ENDIF ENDIF sNightclubPriceStruct.iGaragePrice = 0 IF eTradeInNightclub != eNightclubID IF sNightclubData.iGarage = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Garage A is free") ELIF IS_NIGHTCLUB_ID_VALID(eTradeInNightclub) AND sNightclubData.iGarage = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_BUSINESS_HUB_UPGRADE(eBUSINESS_HUB_MOD_GARAGE)) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Garage ", sNightclubData.iGarage, " is kept for free") ELSE sNightclubPriceStruct.iGaragePrice = GET_BUSINESS_HUB_ADDITIVE_UPGRADE_COST(eBUSINESS_HUB_MOD_GARAGE, INT_TO_ENUM(BUSINESS_HUB_ID, ENUM_TO_INT(eNightclubID)), sNightclubData.iGarage) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: new property, Garage to ", sNightclubData.iGarage, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_BUSINESS_HUB_UPGRADE(eBUSINESS_HUB_MOD_GARAGE)), " add $", sNightclubPriceStruct.iGaragePrice) iCost += sNightclubPriceStruct.iGaragePrice ENDIF ELSE IF sNightclubData.iGarage != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_BUSINESS_HUB_UPGRADE(eBUSINESS_HUB_MOD_GARAGE)) sNightclubPriceStruct.iGaragePrice = GET_BUSINESS_HUB_ADDITIVE_UPGRADE_COST(eBUSINESS_HUB_MOD_GARAGE, INT_TO_ENUM(BUSINESS_HUB_ID, ENUM_TO_INT(eNightclubID)), sNightclubData.iGarage) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: changing Garage to ", sNightclubData.iGarage, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_BUSINESS_HUB_UPGRADE(eBUSINESS_HUB_MOD_GARAGE)), " add $", sNightclubPriceStruct.iGaragePrice) iCost += sNightclubPriceStruct.iGaragePrice ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES: Total cost of changes: $", iCost) RETURN iCost ENDFUNC FUNC INT CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES(ARENA_GARAGE_ID eArenaID, ARENA_GARAGE_PRICE_STRUCT &sArenaPriceStruct) ARENA_GARAGE_ID eTradeInArena = GET_PLAYERS_OWNED_ARENA_GARAGE(PLAYER_ID()) INT iCost = 0 ARENA_GARAGE_DATA_STRUCT sArenaData GET_SCALEFORM_ARENA_GARAGE_DATA(sArenaData) sArenaPriceStruct.iStylePrice = 0 IF eTradeInArena != eArenaID IF sArenaData.iStyle = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, Style A is free") ELSE sArenaPriceStruct.iStylePrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_STYLE, sArenaData.iStyle) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, Style to ", sArenaData.iStyle, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_STYLE)), " add $", sArenaPriceStruct.iStylePrice) iCost += sArenaPriceStruct.iStylePrice ENDIF ELSE IF sArenaData.iStyle != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_STYLE)) sArenaPriceStruct.iStylePrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_STYLE, sArenaData.iStyle) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: changing Style to ", sArenaData.iStyle, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_STYLE)), " add $", sArenaPriceStruct.iStylePrice) iCost += sArenaPriceStruct.iStylePrice ENDIF ENDIF sArenaPriceStruct.iGraphicsPrice = 0 IF eTradeInArena != eArenaID IF sArenaData.iGraphics = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, Graphics A is free") ELSE sArenaPriceStruct.iGraphicsPrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_GRAPHICS, sArenaData.iGraphics) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, Graphics to ", sArenaData.iGraphics, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_GRAPHICS)), " add $", sArenaPriceStruct.iGraphicsPrice) iCost += sArenaPriceStruct.iGraphicsPrice ENDIF ELSE IF sArenaData.iGraphics != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_GRAPHICS)) sArenaPriceStruct.iGraphicsPrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_GRAPHICS, sArenaData.iGraphics) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: changing Graphics to ", sArenaData.iGraphics, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_GRAPHICS)), " add $", sArenaPriceStruct.iGraphicsPrice) iCost += sArenaPriceStruct.iGraphicsPrice ENDIF ENDIF sArenaPriceStruct.iColourPrice = 0 IF eTradeInArena != eArenaID IF sArenaData.iColour = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, Colour A is free") ELSE sArenaPriceStruct.iColourPrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_COLOUR, sArenaData.iColour) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, Colour to ", sArenaData.iColour, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_COLOUR)), " add $", sArenaPriceStruct.iColourPrice) iCost += sArenaPriceStruct.iColourPrice ENDIF ELSE IF sArenaData.iColour != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_COLOUR)) sArenaPriceStruct.iColourPrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_COLOUR, sArenaData.iColour) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: changing Colour to ", sArenaData.iColour, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_COLOUR)), " add $", sArenaPriceStruct.iColourPrice) iCost += sArenaPriceStruct.iColourPrice ENDIF ENDIF sArenaPriceStruct.iExpansionFloorB1Price = 0 IF eTradeInArena != eArenaID IF sArenaData.iExpansionFloorB1 = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, ExpansionFloorB1 A is free") ELSE sArenaPriceStruct.iExpansionFloorB1Price = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_EXPANSION_FLOOR_0, sArenaData.iExpansionFloorB1) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, ExpansionFloorB1 to ", sArenaData.iExpansionFloorB1, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_EXPANSION_FLOOR_0)), " add $", sArenaPriceStruct.iExpansionFloorB1Price) iCost += sArenaPriceStruct.iExpansionFloorB1Price ENDIF ELSE IF sArenaData.iExpansionFloorB1 != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_EXPANSION_FLOOR_0)) sArenaPriceStruct.iExpansionFloorB1Price = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_EXPANSION_FLOOR_0, sArenaData.iExpansionFloorB1) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: changing ExpansionFloorB1 to ", sArenaData.iExpansionFloorB1, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_EXPANSION_FLOOR_0)), " add $", sArenaPriceStruct.iExpansionFloorB1Price) iCost += sArenaPriceStruct.iExpansionFloorB1Price ENDIF ENDIF sArenaPriceStruct.iExpansionFloorB2Price = 0 IF eTradeInArena != eArenaID IF sArenaData.iExpansionFloorB2 = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, ExpansionFloorB2 A is free") ELSE sArenaPriceStruct.iExpansionFloorB2Price = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_EXPANSION_FLOOR_1, sArenaData.iExpansionFloorB2) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, ExpansionFloorB2 to ", sArenaData.iExpansionFloorB2, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_EXPANSION_FLOOR_1)), " add $", sArenaPriceStruct.iExpansionFloorB2Price) iCost += sArenaPriceStruct.iExpansionFloorB2Price ENDIF ELSE IF sArenaData.iExpansionFloorB2 != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_EXPANSION_FLOOR_1)) sArenaPriceStruct.iExpansionFloorB2Price = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_EXPANSION_FLOOR_1, sArenaData.iExpansionFloorB2) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: changing ExpansionFloorB2 to ", sArenaData.iExpansionFloorB2, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_EXPANSION_FLOOR_1)), " add $", sArenaPriceStruct.iExpansionFloorB2Price) iCost += sArenaPriceStruct.iExpansionFloorB2Price ENDIF ENDIF sArenaPriceStruct.iBennyMechanicPrice = 0 IF eTradeInArena != eArenaID IF sArenaData.iBennyMechanic = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, Warehouse A is free") ELSE sArenaPriceStruct.iBennyMechanicPrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_BENNY_MECHANIC, sArenaData.iBennyMechanic) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, Warehouse to ", sArenaData.iBennyMechanic, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_BENNY_MECHANIC)), " add $", sArenaPriceStruct.iBennyMechanicPrice) iCost += sArenaPriceStruct.iBennyMechanicPrice ENDIF ELSE IF sArenaData.iBennyMechanic != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_BENNY_MECHANIC)) sArenaPriceStruct.iBennyMechanicPrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_BENNY_MECHANIC, sArenaData.iBennyMechanic) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: changing Warehouse to ", sArenaData.iBennyMechanic, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_BENNY_MECHANIC)), " add $", sArenaPriceStruct.iBennyMechanicPrice) iCost += sArenaPriceStruct.iBennyMechanicPrice ENDIF ENDIF sArenaPriceStruct.iWeaponMechanicPrice = 0 IF eTradeInArena != eArenaID IF sArenaData.iWeaponMechanic = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, WEAPON_MECHANIC A is free") ELSE sArenaPriceStruct.iWeaponMechanicPrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_WEAPON_MECHANIC, sArenaData.iWeaponMechanic) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, WEAPON_MECHANIC to ", sArenaData.iWeaponMechanic, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_WEAPON_MECHANIC)), " add $", sArenaPriceStruct.iWeaponMechanicPrice) iCost += sArenaPriceStruct.iWeaponMechanicPrice ENDIF ELSE IF sArenaData.iWeaponMechanic != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_WEAPON_MECHANIC)) sArenaPriceStruct.iWeaponMechanicPrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_WEAPON_MECHANIC, sArenaData.iWeaponMechanic) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: changing WEAPON_MECHANIC to ", sArenaData.iWeaponMechanic, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_WEAPON_MECHANIC)), " add $", sArenaPriceStruct.iWeaponMechanicPrice) iCost += sArenaPriceStruct.iWeaponMechanicPrice ENDIF ENDIF sArenaPriceStruct.iPersonalQuartersPrice = 0 IF eTradeInArena != eArenaID IF sArenaData.iPersonalQuarters = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, PersonalQuarters A is free") ELSE sArenaPriceStruct.iPersonalQuartersPrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_PERSONAL_QUARTERS, sArenaData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: new property, PersonalQuarters to ", sArenaData.iPersonalQuarters, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_PERSONAL_QUARTERS)), " add $", sArenaPriceStruct.iPersonalQuartersPrice) iCost += sArenaPriceStruct.iPersonalQuartersPrice ENDIF ELSE IF sArenaData.iPersonalQuarters != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_PERSONAL_QUARTERS)) sArenaPriceStruct.iPersonalQuartersPrice = GET_ARENA_GARAGE_UPGRADE_COST(eARENA_GARAGE_MOD_PERSONAL_QUARTERS, sArenaData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: changing PersonalQuarters to ", sArenaData.iPersonalQuarters, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_PERSONAL_QUARTERS)), " add $", sArenaPriceStruct.iPersonalQuartersPrice) iCost += sArenaPriceStruct.iPersonalQuartersPrice ENDIF ENDIF IF eTradeInArena != eArenaID CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: Total cost of new property: $", iCost) ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES: Total cost of changes: $", iCost) ENDIF RETURN iCost ENDFUNC FUNC INT CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES(CASINO_APT_ID eCasinoID, CASINO_APT_PRICE_STRUCT &sCasinoPriceStruct) CASINO_APT_ID eTradeInCasino = GET_PLAYERS_OWNED_CASINO_APARTMENT(PLAYER_ID()) INT iCost = 0 CASINO_APT_DATA_STRUCT sCasinoData GET_SCALEFORM_CASINO_APT_DATA(sCasinoData) sCasinoPriceStruct.iColourOptionPrice = 0 IF eTradeInCasino != eCasinoID IF sCasinoData.iColourOption = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, ColourOption A is free") ELSE sCasinoPriceStruct.iColourOptionPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_COLOUR_OPTION, sCasinoData.iColourOption) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, ColourOption to ", sCasinoData.iColourOption, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_COLOUR_OPTION)), " add $", sCasinoPriceStruct.iColourOptionPrice) iCost += sCasinoPriceStruct.iColourOptionPrice ENDIF ELSE IF sCasinoData.iColourOption != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_COLOUR_OPTION)) sCasinoPriceStruct.iColourOptionPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_COLOUR_OPTION, sCasinoData.iColourOption) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: changing ColourOption to ", sCasinoData.iColourOption, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_COLOUR_OPTION)), " add $", sCasinoPriceStruct.iColourOptionPrice) iCost += sCasinoPriceStruct.iColourOptionPrice ENDIF ENDIF sCasinoPriceStruct.iStyleOptionPrice = 0 IF eTradeInCasino != eCasinoID IF sCasinoData.iStyleOption = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, StyleOption A is free") ELSE sCasinoPriceStruct.iStyleOptionPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_STYLE_OPTION, sCasinoData.iStyleOption) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, StyleOption to ", sCasinoData.iStyleOption, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_STYLE_OPTION)), " add $", sCasinoPriceStruct.iStyleOptionPrice) iCost += sCasinoPriceStruct.iStyleOptionPrice ENDIF ELSE IF sCasinoData.iStyleOption != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_STYLE_OPTION)) sCasinoPriceStruct.iStyleOptionPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_STYLE_OPTION, sCasinoData.iStyleOption) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: changing StyleOption to ", sCasinoData.iStyleOption, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_STYLE_OPTION)), " add $", sCasinoPriceStruct.iStyleOptionPrice) iCost += sCasinoPriceStruct.iStyleOptionPrice ENDIF ENDIF sCasinoPriceStruct.iLoungePrice = 0 IF eTradeInCasino != eCasinoID IF sCasinoData.iLounge = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Lounge A is free") ELSE sCasinoPriceStruct.iLoungePrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_LOUNGE, sCasinoData.iLounge) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Lounge to ", sCasinoData.iLounge, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_LOUNGE)), " add $", sCasinoPriceStruct.iLoungePrice) iCost += sCasinoPriceStruct.iLoungePrice ENDIF ELSE IF sCasinoData.iLounge != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_LOUNGE)) sCasinoPriceStruct.iLoungePrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_LOUNGE, sCasinoData.iLounge) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: changing Lounge to ", sCasinoData.iLounge, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_LOUNGE)), " add $", sCasinoPriceStruct.iLoungePrice) iCost += sCasinoPriceStruct.iLoungePrice ENDIF ENDIF sCasinoPriceStruct.iBarPrice = 0 IF eTradeInCasino != eCasinoID IF sCasinoData.iBar = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Bar A is free") ELIF GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BAR)) != 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Bar to ", sCasinoData.iBar, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BAR)), " is free") ELSE sCasinoPriceStruct.iBarPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_BAR, sCasinoData.iBar) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Bar to ", sCasinoData.iBar, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BAR)), " add $", sCasinoPriceStruct.iBarPrice) iCost += sCasinoPriceStruct.iBarPrice ENDIF ELSE IF GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BAR)) != 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: changing Bar to ", sCasinoData.iBar, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BAR)), " is free") ELIF sCasinoData.iBar != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BAR)) sCasinoPriceStruct.iBarPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_BAR, sCasinoData.iBar) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: changing Bar to ", sCasinoData.iBar, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BAR)), " add $", sCasinoPriceStruct.iBarPrice) iCost += sCasinoPriceStruct.iBarPrice ENDIF ENDIF sCasinoPriceStruct.iDealerPrice = 0 IF eTradeInCasino != eCasinoID IF sCasinoData.iDealer = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Dealer A is free") ELSE sCasinoPriceStruct.iDealerPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_DEALER, sCasinoData.iDealer) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Dealer to ", sCasinoData.iDealer, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_DEALER)), " add $", sCasinoPriceStruct.iDealerPrice) iCost += sCasinoPriceStruct.iDealerPrice ENDIF ELSE IF sCasinoData.iDealer != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_DEALER)) sCasinoPriceStruct.iDealerPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_DEALER, sCasinoData.iDealer) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: changing Dealer to ", sCasinoData.iDealer, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_DEALER)), " add $", sCasinoPriceStruct.iDealerPrice) iCost += sCasinoPriceStruct.iDealerPrice ENDIF ENDIF sCasinoPriceStruct.iBedroomPrice = 0 IF eTradeInCasino != eCasinoID IF sCasinoData.iBedroom = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Bedroom A is free") ELSE sCasinoPriceStruct.iBedroomPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_BEDROOM, sCasinoData.iBedroom) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Bedroom to ", sCasinoData.iBedroom, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BEDROOM)), " add $", sCasinoPriceStruct.iBedroomPrice) iCost += sCasinoPriceStruct.iBedroomPrice ENDIF ELSE IF sCasinoData.iBedroom != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BEDROOM)) sCasinoPriceStruct.iBedroomPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_BEDROOM, sCasinoData.iBedroom) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: changing Bedroom to ", sCasinoData.iBedroom, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BEDROOM)), " add $", sCasinoPriceStruct.iBedroomPrice) iCost += sCasinoPriceStruct.iBedroomPrice ENDIF ENDIF sCasinoPriceStruct.iMediaroomPrice = 0 IF eTradeInCasino != eCasinoID IF sCasinoData.iMediaroom = 0 // CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Mediaroom A is free") ELSE sCasinoPriceStruct.iMediaroomPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_MEDIAROOM, sCasinoData.iMediaroom) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Mediaroom to ", sCasinoData.iMediaroom, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_MEDIAROOM)), " add $", sCasinoPriceStruct.iMediaroomPrice) iCost += sCasinoPriceStruct.iMediaroomPrice ENDIF ELSE IF sCasinoData.iMediaroom != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_MEDIAROOM)) sCasinoPriceStruct.iMediaroomPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_MEDIAROOM, sCasinoData.iMediaroom) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: changing Mediaroom to ", sCasinoData.iMediaroom, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_MEDIAROOM)), " add $", sCasinoPriceStruct.iMediaroomPrice) iCost += sCasinoPriceStruct.iMediaroomPrice ENDIF ENDIF sCasinoPriceStruct.iSpaPrice = 0 IF eTradeInCasino != eCasinoID IF sCasinoData.iSpa = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Spa A is free") ELSE sCasinoPriceStruct.iSpaPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_SPA, sCasinoData.iSpa) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Spa to ", sCasinoData.iSpa, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_SPA)), " add $", sCasinoPriceStruct.iSpaPrice) iCost += sCasinoPriceStruct.iSpaPrice ENDIF ELSE IF sCasinoData.iSpa != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_SPA)) sCasinoPriceStruct.iSpaPrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_SPA, sCasinoData.iSpa) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: changing Spa to ", sCasinoData.iSpa, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_SPA)), " add $", sCasinoPriceStruct.iSpaPrice) iCost += sCasinoPriceStruct.iSpaPrice ENDIF ENDIF sCasinoPriceStruct.iOfficePrice = 0 IF eTradeInCasino != eCasinoID IF sCasinoData.iOffice = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Office A is free") ELSE sCasinoPriceStruct.iOfficePrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_OFFICE, sCasinoData.iOffice) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Office to ", sCasinoData.iOffice, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_OFFICE)), " add $", sCasinoPriceStruct.iOfficePrice) iCost += sCasinoPriceStruct.iOfficePrice ENDIF ELSE IF sCasinoData.iOffice != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_OFFICE)) sCasinoPriceStruct.iOfficePrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_OFFICE, sCasinoData.iOffice) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: changing Office to ", sCasinoData.iOffice, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_OFFICE)), " add $", sCasinoPriceStruct.iOfficePrice) iCost += sCasinoPriceStruct.iOfficePrice ENDIF ENDIF sCasinoPriceStruct.iGaragePrice = 0 IF eTradeInCasino != eCasinoID IF sCasinoData.iGarage = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Garage A is free") ELSE sCasinoPriceStruct.iGaragePrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_GARAGE, sCasinoData.iGarage) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: new property, Garage to ", sCasinoData.iGarage, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_GARAGE)), " add $", sCasinoPriceStruct.iGaragePrice) iCost += sCasinoPriceStruct.iGaragePrice ENDIF ELSE IF sCasinoData.iGarage != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_GARAGE)) sCasinoPriceStruct.iGaragePrice = GET_CASINO_APT_UPGRADE_COST(eCASINO_APT_MOD_GARAGE, sCasinoData.iGarage) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: changing Garage to ", sCasinoData.iGarage, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_GARAGE)), " add $", sCasinoPriceStruct.iGaragePrice) iCost += sCasinoPriceStruct.iGaragePrice ENDIF ENDIF IF eTradeInCasino != eCasinoID CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: Total cost of new property: $", iCost) ELSE CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES: Total cost of changes: $", iCost) ENDIF RETURN iCost ENDFUNC FUNC INT CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES(ARCADE_PROPERTY_ID eArcadeID, ARCADE_PRICE_STRUCT &sArcadePriceStruct) ARCADE_PROPERTY_ID eTradeInArcade = GET_PLAYERS_OWNED_ARCADE_PROPERTY(PLAYER_ID()) INT iCost = 0 ARCADE_DATA_STRUCT sArcadeData GET_SCALEFORM_ARCADE_DATA(sArcadeData) sArcadePriceStruct.iFloorPrice = 0 IF eTradeInArcade != eArcadeID IF sArcadeData.iFloor = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Floor A is free") ELSE sArcadePriceStruct.iFloorPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_FLOOR, eArcadeID, sArcadeData.iFloor) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Floor to ", sArcadeData.iFloor, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_FLOOR)), " add $", sArcadePriceStruct.iFloorPrice) iCost += sArcadePriceStruct.iFloorPrice ENDIF ELSE IF sArcadeData.iFloor != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_FLOOR)) sArcadePriceStruct.iFloorPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_FLOOR, eArcadeID, sArcadeData.iFloor) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: changing Floor to ", sArcadeData.iFloor, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_FLOOR)), " add $", sArcadePriceStruct.iFloorPrice) iCost += sArcadePriceStruct.iFloorPrice ENDIF ENDIF sArcadePriceStruct.iCeilingPrice = 0 IF eTradeInArcade != eArcadeID IF sArcadeData.iCeiling = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Ceiling A is free") ELSE sArcadePriceStruct.iCeilingPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_CEILING, eArcadeID, sArcadeData.iCeiling) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Ceiling to ", sArcadeData.iCeiling, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_CEILING)), " add $", sArcadePriceStruct.iCeilingPrice) iCost += sArcadePriceStruct.iCeilingPrice ENDIF ELSE IF sArcadeData.iCeiling != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_CEILING)) sArcadePriceStruct.iCeilingPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_CEILING, eArcadeID, sArcadeData.iCeiling) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: changing Ceiling to ", sArcadeData.iCeiling, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_CEILING)), " add $", sArcadePriceStruct.iCeilingPrice) iCost += sArcadePriceStruct.iCeilingPrice ENDIF ENDIF sArcadePriceStruct.iWallPrice = 0 IF eTradeInArcade != eArcadeID IF sArcadeData.iWall = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Wall A is free") ELSE sArcadePriceStruct.iWallPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_WALL, eArcadeID, sArcadeData.iWall) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Wall to ", sArcadeData.iWall, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_WALL)), " add $", sArcadePriceStruct.iWallPrice) iCost += sArcadePriceStruct.iWallPrice ENDIF ELSE IF sArcadeData.iWall != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_WALL)) sArcadePriceStruct.iWallPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_WALL, eArcadeID, sArcadeData.iWall) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: changing Wall to ", sArcadeData.iWall, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_WALL)), " add $", sArcadePriceStruct.iWallPrice) iCost += sArcadePriceStruct.iWallPrice ENDIF ENDIF sArcadePriceStruct.iPersonalQuartersPrice = 0 IF eTradeInArcade != eArcadeID IF sArcadeData.iPersonalQuarters = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Personal Quarters A is free") ELSE sArcadePriceStruct.iPersonalQuartersPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_PERSONAL_QUARTERS, eArcadeID, sArcadeData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Personal Quarters to ", sArcadeData.iPersonalQuarters, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_PERSONAL_QUARTERS)), " add $", sArcadePriceStruct.iPersonalQuartersPrice) iCost += sArcadePriceStruct.iPersonalQuartersPrice ENDIF ELSE IF sArcadeData.iPersonalQuarters != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_PERSONAL_QUARTERS)) sArcadePriceStruct.iPersonalQuartersPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_PERSONAL_QUARTERS, eArcadeID, sArcadeData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: changing Personal Quarters to ", sArcadeData.iPersonalQuarters, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_PERSONAL_QUARTERS)), " add $", sArcadePriceStruct.iPersonalQuartersPrice) iCost += sArcadePriceStruct.iPersonalQuartersPrice ENDIF ENDIF sArcadePriceStruct.iGaragePrice = 0 IF eTradeInArcade != eArcadeID IF sArcadeData.iGarage = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Garage A is free") ELIF IS_ARCADE_PROPERTY_ID_VALID(eTradeInArcade) AND sArcadeData.iGarage = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_GARAGE)) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Garage ", sArcadeData.iGarage, " is kept for free") ELSE sArcadePriceStruct.iGaragePrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_GARAGE, eArcadeID, sArcadeData.iGarage) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Garage to ", sArcadeData.iGarage, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_GARAGE)), " add $", sArcadePriceStruct.iGaragePrice) iCost += sArcadePriceStruct.iGaragePrice ENDIF ELSE IF sArcadeData.iGarage != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_GARAGE)) sArcadePriceStruct.iGaragePrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_GARAGE, eArcadeID, sArcadeData.iGarage) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: changing Garage to ", sArcadeData.iGarage, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_GARAGE)), " add $", sArcadePriceStruct.iGaragePrice) iCost += sArcadePriceStruct.iGaragePrice ENDIF ENDIF sArcadePriceStruct.iNeonLightsPrice = 0 IF eTradeInArcade != eArcadeID IF sArcadeData.iNeonLights = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Neon Lights A is free") ELSE sArcadePriceStruct.iNeonLightsPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_NEON_LIGHTS, eArcadeID, sArcadeData.iNeonLights) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Neon Lights to ", sArcadeData.iNeonLights, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_NEON_LIGHTS)), " add $", sArcadePriceStruct.iNeonLightsPrice) iCost += sArcadePriceStruct.iNeonLightsPrice ENDIF ELSE IF sArcadeData.iNeonLights != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_NEON_LIGHTS)) sArcadePriceStruct.iNeonLightsPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_NEON_LIGHTS, eArcadeID, sArcadeData.iNeonLights) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: changing Neon Lights to ", sArcadeData.iNeonLights, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_NEON_LIGHTS)), " add $", sArcadePriceStruct.iNeonLightsPrice) iCost += sArcadePriceStruct.iNeonLightsPrice ENDIF ENDIF sArcadePriceStruct.iScreensPrice = 0 IF eTradeInArcade != eArcadeID IF sArcadeData.iScreens = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Screens A is free") ELIF IS_ARCADE_PROPERTY_ID_VALID(eTradeInArcade) AND sArcadeData.iScreens = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_SCREENS)) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Screens ", sArcadeData.iScreens, " is kept for free") ELSE sArcadePriceStruct.iScreensPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_SCREENS, eArcadeID, sArcadeData.iScreens) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: new property, Screens to ", sArcadeData.iScreens, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_SCREENS)), " add $", sArcadePriceStruct.iScreensPrice) iCost += sArcadePriceStruct.iScreensPrice ENDIF ELSE IF sArcadeData.iScreens != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_SCREENS)) sArcadePriceStruct.iScreensPrice = GET_ARCADE_UPGRADE_COST(eARCADE_MOD_SCREENS, eArcadeID, sArcadeData.iScreens) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: changing Screens to ", sArcadeData.iScreens, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_SCREENS)), " add $", sArcadePriceStruct.iScreensPrice) iCost += sArcadePriceStruct.iScreensPrice ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES: Total cost of changes: $", iCost) RETURN iCost ENDFUNC FUNC INT CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES(AUTO_SHOP_PROPERTY_ID eAutoShopID, AUTO_SHOP_PRICE_STRUCT &sAutoShopPriceStruct) AUTO_SHOP_PROPERTY_ID eTradeInAutoShop = GET_PLAYERS_OWNED_AUTO_SHOP_PROPERTY(PLAYER_ID()) INT iCost = 0 AUTO_SHOP_DATA_STRUCT sAutoShopData GET_SCALEFORM_AUTO_SHOP_DATA(sAutoShopData) // ----- WALL ----- sAutoShopPriceStruct.iWallPrice = 0 IF eTradeInAutoShop != eAutoShopID IF sAutoShopData.iWall = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Wall A is free") ELSE sAutoShopPriceStruct.iWallPrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_WALL, eAutoShopID, sAutoShopData.iWall) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Wall to ", sAutoShopData.iWall, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_WALL)), " add $", sAutoShopPriceStruct.iWallPrice) iCost += sAutoShopPriceStruct.iWallPrice ENDIF ELSE IF sAutoShopData.iWall != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_WALL)) sAutoShopPriceStruct.iWallPrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_WALL, eAutoShopID, sAutoShopData.iWall) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: changing Wall to ", sAutoShopData.iWall, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_WALL)), " add $", sAutoShopPriceStruct.iWallPrice) iCost += sAutoShopPriceStruct.iWallPrice ENDIF ENDIF // ----- TINT ----- sAutoShopPriceStruct.iTintPrice = 0 IF eTradeInAutoShop != eAutoShopID IF sAutoShopData.iTint = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Tint A is free") ELSE sAutoShopPriceStruct.iTintPrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_TINT, eAutoShopID, sAutoShopData.iTint) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Tint to ", sAutoShopData.iTint, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_TINT)), " add $", sAutoShopPriceStruct.iTintPrice) iCost += sAutoShopPriceStruct.iTintPrice ENDIF ELSE IF sAutoShopData.iTint != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_TINT)) sAutoShopPriceStruct.iTintPrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_TINT, eAutoShopID, sAutoShopData.iTint) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: changing Tint to ", sAutoShopData.iTint, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_TINT)), " add $", sAutoShopPriceStruct.iTintPrice) iCost += sAutoShopPriceStruct.iTintPrice ENDIF ENDIF // ----- EMBLEM ----- sAutoShopPriceStruct.iEmblemPrice = 0 IF eTradeInAutoShop != eAutoShopID IF sAutoShopData.iEmblem = 0 // Crew OR sAutoShopData.iEmblem = 1 // Hot Rod CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Emblem A and B is free") ELSE sAutoShopPriceStruct.iEmblemPrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_EMBLEM, eAutoShopID, sAutoShopData.iEmblem) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Emblem to ", sAutoShopData.iEmblem, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_EMBLEM)), " add $", sAutoShopPriceStruct.iEmblemPrice) iCost += sAutoShopPriceStruct.iEmblemPrice ENDIF ELSE IF sAutoShopData.iEmblem != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_EMBLEM)) sAutoShopPriceStruct.iEmblemPrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_EMBLEM, eAutoShopID, sAutoShopData.iEmblem) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: changing Emblem to ", sAutoShopData.iEmblem, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_EMBLEM)), " add $", sAutoShopPriceStruct.iEmblemPrice) iCost += sAutoShopPriceStruct.iEmblemPrice ENDIF ENDIF // ----- CREW NAME ----- sAutoShopPriceStruct.iCrewNamePrice = 0 IF eTradeInAutoShop != eAutoShopID IF sAutoShopData.iCrewName = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Crew Name A is free") ELSE sAutoShopPriceStruct.iCrewNamePrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_CREW_NAME, eAutoShopID, sAutoShopData.iCrewName) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Crew Name to ", sAutoShopData.iCrewName, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_CREW_NAME)), " add $", sAutoShopPriceStruct.iCrewNamePrice) iCost += sAutoShopPriceStruct.iCrewNamePrice ENDIF ELSE IF sAutoShopData.iCrewName != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_CREW_NAME)) sAutoShopPriceStruct.iCrewNamePrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_CREW_NAME, eAutoShopID, sAutoShopData.iCrewName) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: changing Crew Name to ", sAutoShopData.iCrewName, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_CREW_NAME)), " add $", sAutoShopPriceStruct.iCrewNamePrice) iCost += sAutoShopPriceStruct.iCrewNamePrice ENDIF ENDIF // ----- STAFF 1 ----- sAutoShopPriceStruct.iStaff1Price = 0 IF eTradeInAutoShop != eAutoShopID IF sAutoShopData.iStaff1 = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Staff 1 A is free") ELSE sAutoShopPriceStruct.iStaff1Price = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_STAFF_ONE, eAutoShopID, sAutoShopData.iStaff1) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Staff 1 to ", sAutoShopData.iStaff1, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_STAFF_ONE)), " add $", sAutoShopPriceStruct.iStaff1Price) iCost += sAutoShopPriceStruct.iStaff1Price ENDIF ELSE IF sAutoShopData.iStaff1 != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_STAFF_ONE)) sAutoShopPriceStruct.iStaff1Price = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_STAFF_ONE, eAutoShopID, sAutoShopData.iStaff1) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: changing Staff 1 to ", sAutoShopData.iStaff1, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_STAFF_ONE)), " add $", sAutoShopPriceStruct.iStaff1Price) iCost += sAutoShopPriceStruct.iStaff1Price ENDIF ENDIF // ----- STAFF 2 ----- sAutoShopPriceStruct.iStaff2Price = 0 IF eTradeInAutoShop != eAutoShopID IF sAutoShopData.iStaff2 = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Staff 2 A is free") ELSE sAutoShopPriceStruct.iStaff2Price = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_STAFF_TWO, eAutoShopID, sAutoShopData.iStaff2) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, Staff 2 to ", sAutoShopData.iStaff2, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_STAFF_TWO)), " add $", sAutoShopPriceStruct.iStaff2Price) iCost += sAutoShopPriceStruct.iStaff2Price ENDIF ELSE IF sAutoShopData.iStaff2 != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_STAFF_TWO)) sAutoShopPriceStruct.iStaff2Price = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_STAFF_TWO, eAutoShopID, sAutoShopData.iStaff2) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: changing Staff 2 to ", sAutoShopData.iStaff2, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_STAFF_TWO)), " add $", sAutoShopPriceStruct.iStaff2Price) iCost += sAutoShopPriceStruct.iStaff2Price ENDIF ENDIF // ----- CAR LIFT ----- sAutoShopPriceStruct.iCarLiftPrice = 0 IF eTradeInAutoShop != eAutoShopID IF sAutoShopData.iCarLift = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, iCarLift A is free") ELSE sAutoShopPriceStruct.iCarLiftPrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_CAR_LIFT, eAutoShopID, sAutoShopData.iCarLift) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, iCarLift to ", sAutoShopData.iCarLift, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_CAR_LIFT)), " add $", sAutoShopPriceStruct.iCarLiftPrice) iCost += sAutoShopPriceStruct.iCarLiftPrice ENDIF ELSE IF sAutoShopData.iCarLift != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_CAR_LIFT)) sAutoShopPriceStruct.iCarLiftPrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_CAR_LIFT, eAutoShopID, sAutoShopData.iCarLift) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: changing iCarLift to ", sAutoShopData.iCarLift, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_CAR_LIFT)), " add $", sAutoShopPriceStruct.iCarLiftPrice) iCost += sAutoShopPriceStruct.iCarLiftPrice ENDIF ENDIF // ----- PERSONAL QUARTERS ----- sAutoShopPriceStruct.iPersonalQuartersPrice = 0 IF eTradeInAutoShop != eAutoShopID IF sAutoShopData.iPersonalQuarters = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, iPersonalQuarters A is free") ELSE sAutoShopPriceStruct.iPersonalQuartersPrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_PERSONAL_QUARTERS, eAutoShopID, sAutoShopData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: new property, iPersonalQuarters to ", sAutoShopData.iPersonalQuarters, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_PERSONAL_QUARTERS)), " add $", sAutoShopPriceStruct.iPersonalQuartersPrice) iCost += sAutoShopPriceStruct.iPersonalQuartersPrice ENDIF ELSE IF sAutoShopData.iPersonalQuarters != GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_PERSONAL_QUARTERS)) sAutoShopPriceStruct.iPersonalQuartersPrice = GET_AUTO_SHOP_UPGRADE_COST(AUTO_SHOP_MOD_PERSONAL_QUARTERS, eAutoShopID, sAutoShopData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: changing iPersonalQuarters to ", sAutoShopData.iPersonalQuarters, " from ", GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_PERSONAL_QUARTERS)), " add $", sAutoShopPriceStruct.iPersonalQuartersPrice) iCost += sAutoShopPriceStruct.iPersonalQuartersPrice ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES: Total cost of changes: $", iCost) RETURN iCost ENDFUNC #IF FEATURE_FIXER FUNC INT CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES(FIXER_HQ_ID eFixerHQID, FIXER_HQ_PRICE_STRUCT &ref_sFixerHQPriceStruct) FIXER_HQ_ID eTradeInFixerHQ = GET_PLAYERS_OWNED_FIXER_HQ(PLAYER_ID()) INT iCost = 0 FIXER_HQ_DATA_STRUCT sFixerHQData GET_SCALEFORM_FIXER_HQ_DATA(sFixerHQData) // ----- ART ----- ref_sFixerHQPriceStruct.iArtPrice = 0 IF eTradeInFixerHQ != eFixerHQID IF sFixerHQData.iArt = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, Art 0 is free") ELSE ref_sFixerHQPriceStruct.iArtPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_ART, eFixerHQID, sFixerHQData.iArt) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, Art to ", sFixerHQData.iArt, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_ART)), " add $", ref_sFixerHQPriceStruct.iArtPrice) iCost += ref_sFixerHQPriceStruct.iArtPrice ENDIF ELSE IF sFixerHQData.iArt != GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_ART)) ref_sFixerHQPriceStruct.iArtPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_ART, eFixerHQID, sFixerHQData.iArt) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: changing Art to ", sFixerHQData.iArt, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_ART)), " add $", ref_sFixerHQPriceStruct.iArtPrice) iCost += ref_sFixerHQPriceStruct.iArtPrice ENDIF ENDIF // ----- WALLPAPER ----- ref_sFixerHQPriceStruct.iWallpaperPrice = 0 IF eTradeInFixerHQ != eFixerHQID IF sFixerHQData.iWallpaper = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, iWallpaper 0 is free") ELSE ref_sFixerHQPriceStruct.iWallpaperPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_WALLPAPER, eFixerHQID, sFixerHQData.iWallpaper) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, iWallpaper to ", sFixerHQData.iWallpaper, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_WALLPAPER)), " add $", ref_sFixerHQPriceStruct.iWallpaperPrice) iCost += ref_sFixerHQPriceStruct.iWallpaperPrice ENDIF ELSE IF sFixerHQData.iWallpaper != GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_WALLPAPER)) ref_sFixerHQPriceStruct.iWallpaperPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_WALLPAPER, eFixerHQID, sFixerHQData.iWallpaper) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: changing iWallpaper to ", sFixerHQData.iWallpaper, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_WALLPAPER)), " add $", ref_sFixerHQPriceStruct.iWallpaperPrice) iCost += ref_sFixerHQPriceStruct.iWallpaperPrice ENDIF ENDIF // ----- TINT ----- ref_sFixerHQPriceStruct.iTintPrice = 0 IF eTradeInFixerHQ != eFixerHQID IF sFixerHQData.iTint = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, iTint 0 is free") ELSE ref_sFixerHQPriceStruct.iTintPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_TINT, eFixerHQID, sFixerHQData.iTint) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, iTint to ", sFixerHQData.iTint, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_TINT)), " add $", ref_sFixerHQPriceStruct.iTintPrice) iCost += ref_sFixerHQPriceStruct.iTintPrice ENDIF ELSE IF sFixerHQData.iTint != GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_TINT)) ref_sFixerHQPriceStruct.iTintPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_TINT, eFixerHQID, sFixerHQData.iTint) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: changing iTint to ", sFixerHQData.iTint, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_TINT)), " add $", ref_sFixerHQPriceStruct.iTintPrice) iCost += ref_sFixerHQPriceStruct.iTintPrice ENDIF ENDIF // ----- VEHICLE WORKSHOP ----- ref_sFixerHQPriceStruct.iVehWorkshopPrice = 0 IF eTradeInFixerHQ != eFixerHQID IF sFixerHQData.iVehWorkshop = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, iVehWorkshop 0 is free") ELSE ref_sFixerHQPriceStruct.iVehWorkshopPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_VEH_WORKSHOP, eFixerHQID, sFixerHQData.iVehWorkshop) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, iVehWorkshop to ", sFixerHQData.iVehWorkshop, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_VEH_WORKSHOP)), " add $", ref_sFixerHQPriceStruct.iVehWorkshopPrice) iCost += ref_sFixerHQPriceStruct.iVehWorkshopPrice ENDIF ELSE IF sFixerHQData.iVehWorkshop != GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_VEH_WORKSHOP)) ref_sFixerHQPriceStruct.iVehWorkshopPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_VEH_WORKSHOP, eFixerHQID, sFixerHQData.iVehWorkshop) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: changing iVehWorkshop to ", sFixerHQData.iVehWorkshop, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_VEH_WORKSHOP)), " add $", ref_sFixerHQPriceStruct.iVehWorkshopPrice) iCost += ref_sFixerHQPriceStruct.iVehWorkshopPrice ENDIF ENDIF // ----- ARMORY ----- ref_sFixerHQPriceStruct.iArmoryPrice = 0 IF eTradeInFixerHQ != eFixerHQID IF sFixerHQData.iArmory = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, iArmory 0 is free") ELSE ref_sFixerHQPriceStruct.iArmoryPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_ARMORY, eFixerHQID, sFixerHQData.iArmory) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, iArmory to ", sFixerHQData.iArmory, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_ARMORY)), " add $", ref_sFixerHQPriceStruct.iArmoryPrice) iCost += ref_sFixerHQPriceStruct.iArmoryPrice ENDIF ELSE IF sFixerHQData.iArmory != GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_ARMORY)) ref_sFixerHQPriceStruct.iArmoryPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_ARMORY, eFixerHQID, sFixerHQData.iArmory) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: changing iArmory to ", sFixerHQData.iArmory, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_ARMORY)), " add $", ref_sFixerHQPriceStruct.iArmoryPrice) iCost += ref_sFixerHQPriceStruct.iArmoryPrice ENDIF ENDIF // ----- PERSONAL QUARTERS ----- ref_sFixerHQPriceStruct.iPersonalQuartersPrice = 0 IF eTradeInFixerHQ != eFixerHQID IF sFixerHQData.iPersonalQuarters = 0 CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, iPersonalQuarters 0 is free") ELSE ref_sFixerHQPriceStruct.iPersonalQuartersPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_PERSONAL_QUARTERS, eFixerHQID, sFixerHQData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: new property, iPersonalQuarters to ", sFixerHQData.iPersonalQuarters, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_PERSONAL_QUARTERS)), " add $", ref_sFixerHQPriceStruct.iPersonalQuartersPrice) iCost += ref_sFixerHQPriceStruct.iPersonalQuartersPrice ENDIF ELSE IF sFixerHQData.iPersonalQuarters != GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_PERSONAL_QUARTERS)) ref_sFixerHQPriceStruct.iPersonalQuartersPrice = GET_FIXER_HQ_UPGRADE_COST(FIXER_HQ_UPGRADE_PERSONAL_QUARTERS, eFixerHQID, sFixerHQData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: changing iPersonalQuarters to ", sFixerHQData.iPersonalQuarters, " from ", GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_PERSONAL_QUARTERS)), " add $", ref_sFixerHQPriceStruct.iPersonalQuartersPrice) iCost += ref_sFixerHQPriceStruct.iPersonalQuartersPrice ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES: Total cost of changes: $", iCost) RETURN iCost ENDFUNC #ENDIF PROC SAFE_NETWORK_EARN_FROM_PROPERTY(INT amount, INT propertyType) CONST_INT iEARN_FROM_PROPERTY_LIMIT 2500000 IF amount >= iEARN_FROM_PROPERTY_LIMIT NETWORK_EARN_FROM_PROPERTY(iEARN_FROM_PROPERTY_LIMIT-1, propertyType) amount -= iEARN_FROM_PROPERTY_LIMIT-1 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_EARN_FROM_PROPERTY(amount, propertyType) ENDPROC PROC SAFE_NETWORK_EARN_FROM_HANGAR_TRADE(INT amount, INT propertyHash) CONST_INT iEARN_FROM_HANGAR_LIMIT 2500000 IF amount >= iEARN_FROM_HANGAR_LIMIT NETWORK_EARN_FROM_HANGAR_TRADE(iEARN_FROM_HANGAR_LIMIT-1, propertyHash) amount -= iEARN_FROM_HANGAR_LIMIT-1 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_EARN_FROM_HANGAR_TRADE(amount, propertyHash) ENDPROC FUNC BOOL IS_PLAYER_ON_MISSION_BLOCKING_GANG_CREATION() #IF FEATURE_COPS_N_CROOKS IF GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) = FMMC_TYPE_DISPATCH RETURN TRUE ENDIF #ENDIF RETURN FALSE ENDFUNC PROC BUY_MP_PROPERTY_FROM_WEBSITE(INT iBuyPropertyIndex) REPLACE_MP_VEH_OR_PROP_MENU replaceMenu INT iResultSlot = -1, i, iOfficeRenovationCost, iClubhouseRenovationCost, iOfficeGarageRenovationCost BOOL bUpgradingOffice = FALSE, bUpgradingClubhouse = FALSE, bUpgradingOfficeGarage = FALSE IF iBuyPropertyIndex < 0 CASSERTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: iBuyPropertyIndex invalid, bailing") EXIT //bailout ENDIF IF IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_BKRCLNT") CLEAR_HELP() CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF ENDIF IF NOT IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase failed, player doesn't have sufficient rank") IF GET_PLAYER_RANK(GET_PLAYER_INDEX()) < 5 mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK ELSE mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK_PENDING ENDIF SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF IF USE_SERVER_TRANSACTIONS() IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CWARNINGLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: failed to process transaction - session pending!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF #IF FEATURE_DLC_1_2022 IF IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) IF GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_BIKER_CLIENT_VEHICLE_MODIFICATION()) != 0 mpPropertySiteFailReason = MPSFR_HAS_STOCK SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ELIF GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) = FMMC_TYPE_BAR_RESUPPLY OR GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) = FMMC_TYPE_CLUBHOUSE_CONTRACTS mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF #ENDIF //MP_PROPERTY_STRUCT propertyDetails //GET_MP_PROPERTY_DETAILS(propertyDetails,iBuyPropertyIndex) TEXT_LABEL_15 tLastClickedPropertyIndex = GET_PROPERTY_NAME(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: trying to purchase property #", iBuyPropertyIndex, " \"", tLastClickedPropertyIndex, "\"") INT iMaxTradeIn = 0 INT iOwned, propval INT iReplaceSpecificPropertySlot = -1 IF IS_PROPERTY_RESTRICTED_SLOT_ONLY(iBuyPropertyIndex) iReplaceSpecificPropertySlot = GET_PROPERTY_RESTRICTED_SLOT(iBuyPropertyIndex) iMaxTradeIn = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iReplaceSpecificPropertySlot) iOwned = GET_OWNED_PROPERTY(iReplaceSpecificPropertySlot) PRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: iReplaceSpecificPropertySlot #", iReplaceSpecificPropertySlot, " iOwned =",iOwned, " iBuyPropertyIndex =",iBuyPropertyIndex) IF iOwned = iBuyPropertyIndex IF NOT IS_PROPERTY_OFFICE(iOwned) AND NOT IS_PROPERTY_CLUBHOUSE(iOwned) AND NOT IS_PROPERTY_OFFICE_GARAGE(iOwned) SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF propval = 0 ELSE propval = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ENDIF ELSE REPEAT MAX_OWNED_PROPERTIES i IF iMaxTradeIn < GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(i) iMaxTradeIn = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(i) ENDIF ENDREPEAT REPEAT MAX_OWNED_PROPERTIES i iOwned = GET_OWNED_PROPERTY(i) IF iOwned = iBuyPropertyIndex SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDREPEAT propval = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: prop value of #", iBuyPropertyIndex, " is propval:$", propval) IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) propval = 0 ENDIF IF IS_PROPERTY_OFFICE(iBuyPropertyIndex) propval += CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES(iBuyPropertyIndex, sOffice_price_struct.iStylePrice, sOffice_price_struct.iPersonnelPrice, sOffice_price_struct.iNamePrice, sOffice_price_struct.iFontPrice, sOffice_price_struct.iColourPrice, sOffice_price_struct.iGunLockerPrice, sOffice_price_struct.iVaultPrice, sOffice_price_struct.iAccommodationPrice, sOffice_price_struct.iModshopPrice) ELIF IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) propval += CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES(iBuyPropertyIndex, sClubhouse_price_struct.iWallPrice, sClubhouse_price_struct.iHangingPrice, sClubhouse_price_struct.iFurniturePrice, sClubhouse_price_struct.iStylePrice, sClubhouse_price_struct.iNamePrice, sClubhouse_price_struct.iFontPrice, sClubhouse_price_struct.iFontColourPrice, sClubhouse_price_struct.iHideSignagePrice, sClubhouse_price_struct.iEmblemPrice, sClubhouse_price_struct.iGunLockerPrice, sClubhouse_price_struct.iGaragePrice) ELIF IS_PROPERTY_OFFICE_GARAGE(iBuyPropertyIndex) propval += CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES(iBuyPropertyIndex, sOffice_price_struct.iGarage1StylePrice, sOffice_price_struct.iGarage1LightingPrice, sOffice_price_struct.iGarage1NumberPrice, sOffice_price_struct.iGarage2StylePrice, sOffice_price_struct.iGarage2LightingPrice, sOffice_price_struct.iGarage2NumberPrice, sOffice_price_struct.iGarage3StylePrice, sOffice_price_struct.iGarage3LightingPrice, sOffice_price_struct.iGarage3NumberPrice) ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase valid, attempting index #", iBuyPropertyIndex, " for propval:$", propval) INT minPendingTransactionValue = propval - iMaxTradeIn INT finalPendingTransactionValue INT iPrevModshop CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: min pending: propval:$", propval, " - $", iMaxTradeIn, " = $", minPendingTransactionValue) IF IS_PROPERTY_OFFICE(iBuyPropertyIndex) IF iOwned = iBuyPropertyIndex OFFICE_PRICE_STRUCT sUpgrade_Office_price_struct minPendingTransactionValue = CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES(iBuyPropertyIndex, sUpgrade_Office_price_struct.iStylePrice, sUpgrade_Office_price_struct.iPersonnelPrice, sUpgrade_Office_price_struct.iNamePrice, sUpgrade_Office_price_struct.iFontPrice, sUpgrade_Office_price_struct.iColourPrice, sUpgrade_Office_price_struct.iGunLockerPrice, sUpgrade_Office_price_struct.iVaultPrice, sUpgrade_Office_price_struct.iAccommodationPrice, sUpgrade_Office_price_struct.iModshopPrice) iOfficeRenovationCost = minPendingTransactionValue bUpgradingOffice = TRUE ENDIF IF bUpgradingOffice AND g_bDontCrossRunning SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ELIF IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) IF iOwned = iBuyPropertyIndex CLUBHOUSE_PRICE_STRUCT sUpgrade_Clubhouse_price_struct minPendingTransactionValue = CALCULATE_COST_OF_CLUBHOUSE_INTERIOR_UPGRADES(iBuyPropertyIndex, sUpgrade_Clubhouse_price_struct.iWallPrice, sUpgrade_Clubhouse_price_struct.iHangingPrice, sUpgrade_Clubhouse_price_struct.iFurniturePrice, sUpgrade_Clubhouse_price_struct.iStylePrice, sUpgrade_Clubhouse_price_struct.iNamePrice, sUpgrade_Clubhouse_price_struct.iFontPrice, sUpgrade_Clubhouse_price_struct.iFontColourPrice, sUpgrade_Clubhouse_price_struct.iHideSignagePrice, sUpgrade_Clubhouse_price_struct.iEmblemPrice, sUpgrade_Clubhouse_price_struct.iGunLockerPrice, sUpgrade_Clubhouse_price_struct.iGaragePrice) iClubhouseRenovationCost = minPendingTransactionValue bUpgradingClubhouse = TRUE ENDIF IF bUpgradingClubhouse AND g_bDontCrossRunning SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ELIF IS_PROPERTY_OFFICE_GARAGE(iBuyPropertyIndex) IF iOwned = iBuyPropertyIndex OFFICE_PRICE_STRUCT sUpgrade_Office_price_struct minPendingTransactionValue = CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES(iBuyPropertyIndex, sUpgrade_Office_price_struct.iGarage1StylePrice, sUpgrade_Office_price_struct.iGarage1LightingPrice, sUpgrade_Office_price_struct.iGarage1NumberPrice, sUpgrade_Office_price_struct.iGarage2StylePrice, sUpgrade_Office_price_struct.iGarage2LightingPrice, sUpgrade_Office_price_struct.iGarage2NumberPrice, sUpgrade_Office_price_struct.iGarage3StylePrice, sUpgrade_Office_price_struct.iGarage3LightingPrice, sUpgrade_Office_price_struct.iGarage3NumberPrice) iOfficeGarageRenovationCost = minPendingTransactionValue bUpgradingOfficeGarage = TRUE ENDIF IF bUpgradingOfficeGarage AND g_bDontCrossRunning SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF iPrevModshop = GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_MODSHOP) INT iBankBalance = NETWORK_GET_VC_BANK_BALANCE() INT iWalletBalance = NETWORK_GET_VC_WALLET_BALANCE() TEXT_LABEL_15 tl_15PropertyName //is it a debit or refund IF minPendingTransactionValue >0 //do they have enough money // IF (iBankBalance+iWalletBalance) < minPendingTransactionValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", minPendingTransactionValue) // IF (minPendingTransactionValue <= 0 // OR (minPendingTransactionValue > 0 AND ((iBankBalance+iWalletBalance) < minPendingTransactionValue))) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < minPendingTransactionValue $", minPendingTransactionValue, "]") // mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH // SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // // tl_15PropertyName = GET_PROPERTY_NAME(iBuyPropertyIndex) // TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15PropertyName), minPendingTransactionValue) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // EXIT // ENDIF IF (minPendingTransactionValue <= 0 OR (minPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", minPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE tl_15PropertyName = GET_PROPERTY_NAME(iBuyPropertyIndex) TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15PropertyName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF // ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: min pending: $", minPendingTransactionValue, ", MAX trade val $",iMaxTradeIn) //BOOL bSmallerGarage IF IS_PROPERTY_CUSTOMISABLE(iBuyPropertyIndex) //IS_PROPERTY_CUSTOM_APARTMENT OR OFFICE_GARAGE(iBuyPropertyIndex) IF DISABLE_INTERIOR_VARIATION(iCustomAptVariant, iBuyPropertyIndex) mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase failed, custom apartment ", iCustomAptVariant, "is disabled") PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF IF (GET_OWNED_PROPERTY(0) > 0 AND iReplaceSpecificPropertySlot = -1 AND NOT (bUpgradingOffice OR bUpgradingClubhouse OR bUpgradingOfficeGarage)) OR ((iReplaceSpecificPropertySlot != -1 AND GET_OWNED_PROPERTY(iReplaceSpecificPropertySlot) > 0) AND NOT (bUpgradingOffice OR bUpgradingClubhouse OR bUpgradingOfficeGarage)) WHILE NOT RUN_REPLACE_PROPERTY_MENU(replaceMenu,iResultSlot,iBuyPropertyIndex,iReplaceSpecificPropertySlot,rpmt_0) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() //RENDER_BROWSER() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE //RENDER_BROWSER() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE buttons = NULL ELSE IF iReplaceSpecificPropertySlot != -1 iResultSlot = iReplaceSpecificPropertySlot ELSE iResultSlot = 0 ENDIF ENDIF IF iResultSlot = -1 mpPropertySiteFailReason = MPSFR_CANCELED SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE g_iPendingBrowserTimer = g_iBrowserTimer PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") CPRINTLN(DEBUG_INTERNET, "CDM: BUY_MP_PROPERTY_FROM_WEBSITE: Player backed out of property selection") EXIT ELSE IF bUpgradingOffice finalPendingTransactionValue = iOfficeRenovationCost CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: upgrade office[\"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\"] finalPendingTransactionValue:$", finalPendingTransactionValue) ELIF bUpgradingClubhouse finalPendingTransactionValue = iClubhouseRenovationCost CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: upgrade clubhouse[\"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\"] finalPendingTransactionValue:$", finalPendingTransactionValue) ELIF bUpgradingOfficeGarage finalPendingTransactionValue = iOfficeGarageRenovationCost CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: upgrade office garage[\"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\"] finalPendingTransactionValue:$", finalPendingTransactionValue) ELSE finalPendingTransactionValue = propval - GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: buy new property[\"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\"] propval:$", propval, " - $", GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot), " = finalPendingTransactionValue:$", finalPendingTransactionValue) IF IS_PROPERTY_OFFICE(iBuyPropertyIndex) IF finalPendingTransactionValue < 0 //url:bugstar:2850740 CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: floor the money pending for office finalPendingTransactionValue:$", finalPendingTransactionValue) finalPendingTransactionValue = 0 ENDIF ENDIF ENDIF ENDIF // Re-check if player can afford based on selected trade-in value IF finalPendingTransactionValue > 0 //do they have enough money CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " + trade:$", GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot), " <> finalPendingTransactionValue:$", finalPendingTransactionValue) // IF (iBankBalance+iWalletBalance+ GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot)) < finalPendingTransactionValue // CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash after trade selection [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < finalPendingTransactionValue finalPendingTransactionValue:$", finalPendingTransactionValue, "]") // mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH // SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // // tl_15PropertyName = GET_PROPERTY_NAME(iBuyPropertyIndex) // TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15PropertyName), finalPendingTransactionValue) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // EXIT // ENDIF IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE tl_15PropertyName = GET_PROPERTY_NAME(iBuyPropertyIndex) TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15PropertyName), finalPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF IF IS_PROPERTY_OFFICE(iBuyPropertyIndex) IF NOT IS_STRING_NULL_OR_EMPTY(g_sOfficeDataStruct.tl63NewOrgName) AND NOT ARE_STRINGS_EQUAL(g_sOfficeDataStruct.tl63OldOrgName, g_sOfficeDataStruct.tl63NewOrgName) IF NOT CAN_ORGANIZATION_BE_RENAMED(DEFAULT, finalPendingTransactionValue) mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase failed, organisation cannot be renamed from \"", g_sOfficeDataStruct.tl63OldOrgName, "\" to \"", g_sOfficeDataStruct.tl63NewOrgName, "\"") PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF ENDIF IF IS_PROPERTY_OFFICE(iBuyPropertyIndex) OR IS_PROPERTY_OFFICE_GARAGE(iBuyPropertyIndex) IF DOES_CURRENT_MISSION_USE_GANG_BOSS_FLOW() mpPropertySiteFailReason = MPSFR_ON_MISSION SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase failed, mission is SVM Flow") PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF #IF FEATURE_GEN9_EXCLUSIVE IF IS_PROPERTY_OFFICE(iBuyPropertyIndex) OR IS_PROPERTY_OFFICE_GARAGE(iBuyPropertyIndex) OR IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) IF IS_PLAYER_ON_MP_INTRO() mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase failed, player is on MP Intro") PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF #ENDIF INT iCachedReplaceProperty = GET_OWNED_PROPERTY(iResultSlot) INT iCachedSellingPrice = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: cached replace property ", iCachedReplaceProperty, ", selling price $", iCachedSellingPrice) IF USE_SERVER_TRANSACTIONS() // IF NOT IS_PROPERTY_OFFICE_XX(iBuyPropertyIndex) INT iVariation = 0 BOOL bStarterPackItem = FALSE IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) IF NOT COULD_PROPERTY_BE_FREE_FOR_PLAYER_WITH_CRIMINAL_ENTERPRISE_STARTER_PACK(iBuyPropertyIndex) iVariation = 1 ELSE bStarterPackItem = TRUE ENDIF ENDIF IF IS_PROPERTY_RESTRICTED_SLOT_ONLY(iBuyPropertyIndex) IF iOwned = iBuyPropertyIndex propval = 0 ELSE propval = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ENDIF ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_PROPERTY_KEY_FOR_CATALOGUE(iBuyPropertyIndex, iVariation, bStarterPackItem) INT iInventoryKey = GET_PROPERTY_INVENTORY_KEY_FOR_CATALOGUE(iResultSlot) INT iReplaceProperty = GET_OWNED_PROPERTY(iResultSlot) INT iItemInteriorID, iInventoryInteriorID IF IS_PROPERTY_CUSTOMISABLE(iBuyPropertyIndex) //IS_PROPERTY_CUSTOM_APARTMENT OR OFFICE_GARAGE(iBuyPropertyIndex) INT iItemType = 0 IF GET_BASE_PROPERTY_FROM_PROPERTY(iBuyPropertyIndex) = PROPERTY_OFFICE_2_BASE AND ((iCustomAptVariant - 1) = 4) //Style 1: "Executive: Rich" IF GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_0) != iBuyPropertyIndex iItemType = 1 ENDIF ENDIF INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop SWITCH iResultSlot CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1 GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) iItemInteriorID = GET_PROPERTY_INTERIOR_KEY_FOR_CATALOGUE(GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage1Style), iBuyPropertyIndex, iItemType) BREAK CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2 GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) iItemInteriorID = GET_PROPERTY_INTERIOR_KEY_FOR_CATALOGUE(GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage2Style), iBuyPropertyIndex, iItemType) BREAK CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3 GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) iItemInteriorID = GET_PROPERTY_INTERIOR_KEY_FOR_CATALOGUE(GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage3Style), iBuyPropertyIndex, iItemType) BREAK CASE PROPERTY_OWNED_SLOT_OFFICE_0 iItemInteriorID = GET_PROPERTY_INTERIOR_KEY_FOR_CATALOGUE(GET_OFFICE_INTERIOR_FROM_SF(iCustomAptVariant - 1)-1, iBuyPropertyIndex, iItemType) BREAK DEFAULT iItemInteriorID = GET_PROPERTY_INTERIOR_KEY_FOR_CATALOGUE(iCustomAptVariant - 1, iBuyPropertyIndex, iItemType) BREAK ENDSWITCH ELSE iItemInteriorID = GET_PROPERTY_INTERIOR_KEY_FOR_CATALOGUE(-1, iBuyPropertyIndex) ENDIF iInventoryInteriorID = GET_PROPERTY_INTERIOR_INVENTORY_KEY_FOR_CATALOGUE(iResultSlot) #IF IS_DEBUG_BUILD TEXT_LABEL_15 tlLastClickedPropertyIndex = GET_PROPERTY_NAME(iBuyPropertyIndex) IF IS_STRING_NULL_OR_EMPTY(tlLastClickedPropertyIndex) CASSERTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: label for last clicked property index #", iBuyPropertyIndex, " is empty!") ELSE CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: label for last clicked property index #", iBuyPropertyIndex, " is \"", tlLastClickedPropertyIndex, "\" (iReplaceProperty: ", iReplaceProperty, ")") ENDIF #ENDIF //for selling property INT iSellingPrice = 0 INT iSellingItemId = 0 IF (iReplaceProperty > 0) INT iSellingPropertyVariation = 0 BOOL bSellingPropertyStarterPackItem = FALSE iSellingPrice = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot) IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iReplaceProperty) IF (iResultSlot = 0 AND GET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_0)) OR (iResultSlot = 1 AND GET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_1)) OR (iResultSlot = 2 AND GET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_2)) OR (iResultSlot = 3 AND GET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_3)) OR (iResultSlot = 4 AND GET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_4)) OR (iResultSlot = PROPERTY_OWNED_SLOT_APT_6 AND GET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_5)) #IF FEATURE_SUMMER_2020 OR (iResultSlot = PROPERTY_OWNED_SLOT_APT_7 AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_7)) OR (iResultSlot = PROPERTY_OWNED_SLOT_APT_8 AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_8)) #ENDIF OR (iResultSlot = PROPERTY_OWNED_SLOT_APT_9 AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_9)) OR (iResultSlot = PROPERTY_OWNED_SLOT_APT_10 AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_10)) //CDM PROPERTY STAT UPDATE //OLD PROPERTIES CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: free property stat set for iResultSlot:", iResultSlot) IF NOT COULD_PROPERTY_BE_FREE_FOR_PLAYER_WITH_CRIMINAL_ENTERPRISE_STARTER_PACK(iReplaceProperty) iSellingPropertyVariation = 1 ELSE bSellingPropertyStarterPackItem = TRUE ENDIF iSellingPrice = 0 ELIF (iSellingPrice = 0) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: no free property stat to get for \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iSellingPrice:$FREE") IF NOT COULD_PROPERTY_BE_FREE_FOR_PLAYER_WITH_CRIMINAL_ENTERPRISE_STARTER_PACK(iReplaceProperty) iSellingPropertyVariation = 1 ELSE bSellingPropertyStarterPackItem = TRUE ENDIF iSellingPrice = 0 ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: no free property stat to get for \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iSellingPrice:$", iSellingPrice) ENDIF ENDIF iSellingItemId = GET_PROPERTY_KEY_FOR_CATALOGUE(iReplaceProperty, iSellingPropertyVariation, bSellingPropertyStarterPackItem) IF (iReplaceProperty = iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Renovating in property slot \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\" itemID ", iSellingItemId, " with sale value $", iSellingPrice) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Trading in property slot \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\" itemID ", iSellingItemId, " with sale value $", iSellingPrice) ENDIF #IF IS_DEBUG_BUILD TEXT_LABEL_15 tlOwnedResultSlotProperty = GET_PROPERTY_NAME(iReplaceProperty) IF IS_STRING_NULL_OR_EMPTY(tlOwnedResultSlotProperty) CASSERTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: label for traded property[\"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\"] index #", iReplaceProperty, " is empty!") ELSE CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: label for traded property[\"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\"] index #", iReplaceProperty, " is \"", tlLastClickedPropertyIndex, "\"") ENDIF #ENDIF ENDIF // INT iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT /////////////////////////////////////////// /// TRANSACTION FOR PROPERTY WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, propval, iResultSlot, CATEGORY_INVENTORY_PROPERTIE, NET_SHOP_ACTION_BUY_PROPERTY, iItemId, iInventoryKey, 0, iSellingPrice, iSellingItemId, NULL, iItemInteriorID, iInventoryInteriorID) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: failed to process transaction") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: success!!") BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: unknown iProcessSuccess: \"", iProcessSuccess, "\"") BREAK ENDSWITCH // ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF IF IS_PROPERTY_OFFICE(iBuyPropertyIndex) INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) CDEBUG1LN(DEBUG_INTERNET, "[EXEC_BYPASS] Setting interior var to: ", iStyle) IF iResultSlot >= 0 AND iResultSlot <= MAX_MP_PROPERTIES-1 FORCE_CLEAN_APARTMENT_MESS_DATA(iResultSlot) ENDIF IF GET_OWNED_PROPERTY_VARIATION(iResultSlot) != iStyle SET_BIT(g_iOfficePersonalAssistantSpeechBitset, OFF_PA_SPEECH_DECOR) ENDIF SET_INTERIOR_STAT_FOR_CUSTOM_APT(PROPERTY_OWNED_SLOT_OFFICE_0, iStyle) IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iPersonnel) //SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_PERSONNEL, 1) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_OFFICE_MALE_PA) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY_BROADCAST_BS_OFFICE_MALE_PA TRUE") ELSE //SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_PERSONNEL, 0) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_OFFICE_MALE_PA) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY_BROADCAST_BS_OFFICE_MALE_PA FALSE") ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_PA_GENDER_SET) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_PA_GENDER_SET) ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_PA_NEW_CLOTHES) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_PA_NEW_CLOTHES) ENDIF //SET_MP_INT_CHARACTER_STAT(MP_STAT_FONT_PLAYER_OFFICE, iFont) //SET_MP_INT_CHARACTER_STAT(MP_STAT_COLOUR_PLAYER_OFFICE, iColour) GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iOfficeNameFont = iFont GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iOfficeNameFontColour = iColour CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: iFont: ", iFont) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: iColour: ", iColour) IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iAccommodation) IF NOT IS_OFFICE_ACCOMMODATION_PURCHASED() SET_BIT(g_iOfficePersonalAssistantSpeechBitset, OFF_PA_SPEECH_ADDQUARTERS) ENDIF //SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_ACCOMMODATION, 1) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo, PROPERTY_BROADCAST_BS2_OFFICE_LIVINGQ_PURCHASED) ELSE //SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_ACCOMMODATION, 0) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo, PROPERTY_BROADCAST_BS2_OFFICE_LIVINGQ_PURCHASED) ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(g_sOfficeDataStruct.tl63NewOrgName) IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) AND NOT GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) GB_SET_ORGANIZATION_NAME(g_sOfficeDataStruct.tl63NewOrgName,GB_ORGANISATION_NAME_TYPE_OFFICE, TRUE) GB_SET_OFFICE_NAME(g_sOfficeDataStruct.tl63NewOrgName, TRUE) //GB_SETUP_AFTER_NAMING_GANG(GBKeyBoardData) GB_SEND_NAME_CHANGE_EVENT() ELSE GB_SET_OFFICE_NAME(g_sOfficeDataStruct.tl63NewOrgName, TRUE) ENDIF ELSE TEXT_LABEL_63 tlOfficeName = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_GB_OFFICE_NAME, MP_STAT_GB_OFFICE_NAME2) IF IS_STRING_NULL_OR_EMPTY(tlOfficeName) STRING sDefaultOrgName = GET_DEFAULT_GANG_NAME(PLAYER_ID(), TRUE) GB_SET_OFFICE_NAME(sDefaultOrgName, TRUE) ENDIF ENDIF BOOL bUpgradingOfficeModshop = FALSE IF IS_OFFICE_MODSHOP_PURCHASED() IF iModshop != iPrevModshop bUpgradingOfficeModshop = TRUE ENDIF ENDIF IF !bUpgradingOffice IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_GUN_VAULT_DOOR_OPENED) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_GUN_VAULT_DOOR_OPENED) ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_SAFE_VAULT_DOOR_OPENED) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_SAFE_VAULT_DOOR_OPENED) ENDIF ENDIF IF !HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) IF SHOULD_ALLOW_DISABLE_WEAPON_LOADOUT_FROM_INTERNET() SET_CUSTOM_WEAPON_LOADOUT(FALSE) RESET_CUSTOM_WEAPON_LOADOUT_STATS() ENDIF ENDIF IF IS_PROPERTY_OFFICE(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) AND IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_IN_OWNED_PROPERTY) AND bUpgradingOffice AND NOT bUpgradingOfficeModshop IF IS_PLAYER_IN_APARTMENT_WITH_BUDDY() AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) ELSE CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY set FALSE") ENDIF IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS , PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED ) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS , PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED ) ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW set FALSE") ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW set FALSE") ENDIF IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_RENOVATE) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_RENOVATE) ENDIF g_iCustomAptVariantPIM = iStyle SET_UPDATE_CUSTOM_APT(TRUE) ELIF bUpgradingOffice g_iCustomAptVariantPIM = iStyle IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_RENOVATE) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_RENOVATE) ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office purchase valid for ", iBuyPropertyIndex, " transactions unavailable! going to purchase success") SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_SUCCESS", TRUE, bUpgradingOffice, FALSE, FALSE, rpmt_0) ELIF IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) INT iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage GET_SCALEFORM_CLUBHOUSE_DATA(iBuyPropertyIndex, iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage) CDEBUG1LN(DEBUG_INTERNET, "[EXEC_BYPASS] Setting interior var to: ", iColourScheme) IF iResultSlot >= 0 AND iResultSlot <= MAX_MP_PROPERTIES-1 FORCE_CLEAN_APARTMENT_MESS_DATA(iResultSlot) ENDIF //IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iWall) // SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_WALL, 1) //ELSE // SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_WALL, 0) //ENDIF //IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iHanging) // SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_HANGING, 1) //ELSE // SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_HANGING, 0) //ENDIF //IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iFurniture) // SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FURNATURE, 1) //ELSE // SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FURNATURE, 0) //ENDIF SET_INTERIOR_STAT_FOR_CUSTOM_APT(PROPERTY_OWNED_SLOT_CLUBHOUSE, iColourScheme) IF GET_BASE_PROPERTY_FROM_PROPERTY(iBuyPropertyIndex) = PROPERTY_CLUBHOUSE_1_BASE_A //SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_PERSONNEL, 1) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_CLUBHOUSE_TRADITIONAL) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY_BROADCAST_BS2_CLUBHOUSE_TRADITIONAL TRUE") ELIF GET_BASE_PROPERTY_FROM_PROPERTY(iBuyPropertyIndex) = PROPERTY_CLUBHOUSE_7_BASE_B CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_CLUBHOUSE_TRADITIONAL) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY_BROADCAST_BS2_CLUBHOUSE_TRADITIONAL FALSE") ELSE // ENDIF // IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_PA_GENDER_SET) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_PA_GENDER_SET) // ENDIF // IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_PA_NEW_CLOTHES) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_PA_NEW_CLOTHES) // ENDIF //SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FONT, iFont) //SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_COLOUR, iFontColour) GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iClubhouseNameFont = iFont GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iClubhouseNameFontColour = iFontColour GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].bClubhouseHideName = iHideSinage CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE (MC): iFont: ", iFont) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE (MC): iColour: ", iFontColour) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE (MC): iHideSinage: ", iHideSinage) //SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_EMBLEM, iEmblem) //IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iHideSinage) // SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_SINAGEHIDE, 1) //ELSE // SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_SINAGEHIDE, 0) //ENDIF // //IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) // SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_GUNLOCKER, 1) //ELSE // SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_GUNLOCKER, 0) //ENDIF // IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGarage) //SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_GARAGE, 1) SET_PLAYER_OWNS_CLUBHOUSE_MOD_BOOTH(TRUE) ELSE //SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_GARAGE, 0) SET_PLAYER_OWNS_CLUBHOUSE_MOD_BOOTH(FALSE) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) SET_PLAYER_OWNS_CLUBHOUSE_GUN_LOCKER(TRUE) ELSE SET_PLAYER_OWNS_CLUBHOUSE_GUN_LOCKER(FALSE) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iWall) SET_PLAYER_CLUBHOUSE_WALL_STYLE(TRUE) ELSE SET_PLAYER_CLUBHOUSE_WALL_STYLE(FALSE) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iHanging) SET_PLAYER_CLUBHOUSE_WALL_HANGING_STYLE(TRUE) ELSE SET_PLAYER_CLUBHOUSE_WALL_HANGING_STYLE(FALSE) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iFurniture) SET_PLAYER_CLUBHOUSE_FURNISHINGS_STYLE(TRUE) ELSE SET_PLAYER_CLUBHOUSE_FURNISHINGS_STYLE(FALSE) ENDIF SET_PLAYER_CLUBHOUSE_MURAL_STYLE(iColourScheme) // IF NOT IS_STRING_NULL_OR_EMPTY(g_sClubhouseDataStruct.tl63NewSignage) // IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) // GB_SET_ORGANIZATION_NAME(g_sClubhouseDataStruct.tl63NewSignage, TRUE) // GB_SET_MC_CLUBHOUSE_NAME(g_sClubhouseDataStruct.tl63NewSignage, TRUE) // GB_SEND_NAME_CHANGE_EVENT() // ELSE // GB_SET_MC_CLUBHOUSE_NAME(g_sClubhouseDataStruct.tl63NewSignage, TRUE) // ENDIF // ELSE // TEXT_LABEL_63 tlClubhouseName = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_MC_CLBHOSE_NAME, MP_STAT_MC_CLBHOSE_NAME2) // IF IS_STRING_NULL_OR_EMPTY(tlClubhouseName) // GB_SET_MC_CLUBHOUSE_NAME(GET_DEFAULT_GANG_NAME(PLAYER_ID()), TRUE) // ENDIF // ENDIF // IF !bUpgradingClubhouse // IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_GUN_Garage_DOOR_OPENED) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_GUN_Garage_DOOR_OPENED) // ENDIF // IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_SAFE_Garage_DOOR_OPENED) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_SAFE_Garage_DOOR_OPENED) // ENDIF // ENDIF IF !HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) IF SHOULD_ALLOW_DISABLE_WEAPON_LOADOUT_FROM_INTERNET() SET_CUSTOM_WEAPON_LOADOUT(FALSE) RESET_CUSTOM_WEAPON_LOADOUT_STATS() ENDIF ENDIF IF IS_PROPERTY_CLUBHOUSE(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) AND IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_IN_OWNED_PROPERTY) AND bUpgradingClubhouse IF IS_PLAYER_IN_APARTMENT_WITH_BUDDY() AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) ELSE CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY set FALSE") ENDIF IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS , PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED ) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS , PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED ) ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW set FALSE") ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW set FALSE") ENDIF IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_RENOVATE) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_RENOVATE) ENDIF g_iCustomAptVariantPIM = iColourScheme SET_UPDATE_CUSTOM_APT(TRUE) ELIF bUpgradingClubhouse g_iCustomAptVariantPIM = iColourScheme IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_RENOVATE) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_RENOVATE) ENDIF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[PROPERTY_OWNED_SLOT_CLUBHOUSE] = g_iCustomAptVariantPIM ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: clubhouse purchase valid for ", iBuyPropertyIndex, " transactions unavailable! going to purchase success") SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_SUCCESS", TRUE, bUpgradingClubhouse, FALSE, FALSE, rpmt_0) ELIF IS_PROPERTY_OFFICE_GARAGE(iBuyPropertyIndex) INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) CDEBUG1LN(DEBUG_INTERNET, "[EXEC_BYPASS] Setting interior var to: ", iStyle) IF iResultSlot >= 0 AND iResultSlot <= MAX_MP_PROPERTIES-1 FORCE_CLEAN_APARTMENT_MESS_DATA(iResultSlot) ENDIF PRINTLN("Setting iGarage1Style: ", iGarage1Style, " iGarage1Lighting: ",iGarage1Lighting, " iGarage1Number: ", iGarage1Number, " iModshop: ", iModshop) PRINTLN("Setting iGarage2Style: ", iGarage2Style, " iGarage2Lighting: ",iGarage2Lighting, " iGarage2Number: ", iGarage2Number, " iModshop: ", iModshop) PRINTLN("Setting iGarage3Style: ", iGarage3Style, " iGarage3Lighting: ",iGarage3Lighting, " iGarage3Number: ", iGarage3Number, " iModshop: ", iModshop) SET_PLAYER_OFFICE_GARAGE_LVL1_INTERIOR_FLAGS(iGarage1Number, iGarage1Lighting, iGarage1Style, iModshop) SET_PLAYER_OFFICE_GARAGE_LVL2_INTERIOR_FLAGS(iGarage2Number, iGarage2Lighting, iGarage2Style, iModshop) SET_PLAYER_OFFICE_GARAGE_LVL3_INTERIOR_FLAGS(iGarage3Number, iGarage3Lighting, iGarage3Style, iModshop) IF GET_PROPERTY_RESTRICTED_SLOT(iBuyPropertyIndex) = GET_PROPERTY_RESTRICTED_SLOT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) AND bUpgradingOfficeGarage SET_PLAYER_RENOVATED_OFFICE_GARAGE_FLAG(TRUE) ENDIF // IF GET_OWNED_PROPERTY_VARIATION(iResultSlot) != iStyle // SET_BIT(g_iOfficePersonalAssistantSpeechBitset, OFF_PA_SPEECH_DECOR) // ENDIF // SET_INTERIOR_STAT_FOR_CUSTOM_APT(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_0, iStyle) // IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iPersonnel) // //SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GARAGE_PERSONNEL, 1) // SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_OFFICE_GARAGE_MALE_PA) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY_BROADCAST_BS_OFFICE_GARAGE_MALE_PA TRUE") // ELSE // //SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GARAGE_PERSONNEL, 0) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_OFFICE_GARAGE_MALE_PA) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY_BROADCAST_BS_OFFICE_GARAGE_MALE_PA FALSE") // ENDIF // IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_GARAGE_PA_GENDER_SET) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_GARAGE_PA_GENDER_SET) // ENDIF // IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_GARAGE_PA_NEW_CLOTHES) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_GARAGE_PA_NEW_CLOTHES) // ENDIF //SET_MP_INT_CHARACTER_STAT(MP_STAT_FONT_PLAYER_OFFICE_GARAGE, iFont) //SET_MP_INT_CHARACTER_STAT(MP_STAT_COLOUR_PLAYER_OFFICE_GARAGE, iColour) // GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iOFFICE_GARAGENameFont = iFont // GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iOFFICE_GARAGENameFontColour = iColour // CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: iFont: ", iFont) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: iColour: ", iColour) // IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iAccommodation) // IF NOT IS_OFFICE_GARAGE_ACCOMMODATION_PURCHASED() // SET_BIT(g_iOFFICE_GARAGEPersonalAssistantSpeechBitset, OFF_PA_SPEECH_ADDQUARTERS) // ENDIF // //SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GARAGE_ACCOMMODATION, 1) // SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo, PROPERTY_BROADCAST_BS2_OFFICE_GARAGE_LIVINGQ_PURCHASED) // ELSE // //SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GARAGE_ACCOMMODATION, 0) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo, PROPERTY_BROADCAST_BS2_OFFICE_GARAGE_LIVINGQ_PURCHASED) // ENDIF // // IF NOT IS_STRING_NULL_OR_EMPTY(g_sOFFICE_GARAGEDataStruct.tl63NewOrgName) // IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) // AND NOT GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) // GB_SET_ORGANIZATION_NAME(g_sOFFICE_GARAGEDataStruct.tl63NewOrgName,GB_ORGANISATION_NAME_TYPE_OFFICE_GARAGE, TRUE) // GB_SET_OFFICE_GARAGE_NAME(g_sOFFICE_GARAGEDataStruct.tl63NewOrgName, TRUE) // //GB_SETUP_AFTER_NAMING_GANG(GBKeyBoardData) // GB_SEND_NAME_CHANGE_EVENT() // ELSE // GB_SET_OFFICE_GARAGE_NAME(g_sOFFICE_GARAGEDataStruct.tl63NewOrgName, TRUE) // ENDIF // ELSE // TEXT_LABEL_63 tlOFFICE_GARAGEName = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_GB_OFFICE_GARAGE_NAME, MP_STAT_GB_OFFICE_GARAGE_NAME2) // IF IS_STRING_NULL_OR_EMPTY(tlOFFICE_GARAGEName) // STRING sDefaultOrgName = GET_DEFAULT_GANG_NAME(PLAYER_ID(), TRUE) // GB_SET_OFFICE_GARAGE_NAME(sDefaultOrgName, TRUE) // ENDIF // ENDIF // // IF !bUpgradingOfficeGarage // IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_GUN_VAULT_DOOR_OPENED) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_GUN_VAULT_DOOR_OPENED) // ENDIF // IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_SAFE_VAULT_DOOR_OPENED) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_SAFE_VAULT_DOOR_OPENED) // ENDIF // ENDIF // // IF !HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) // SET_CUSTOM_WEAPON_LOADOUT(FALSE) // RESET_CUSTOM_WEAPON_LOADOUT_STATS() // ENDIF IF IS_PROPERTY_OFFICE_GARAGE(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) AND IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_IN_OWNED_PROPERTY) AND bUpgradingOfficeGarage IF IS_PLAYER_IN_APARTMENT_WITH_BUDDY() AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) ELSE CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY set FALSE") ENDIF IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS , PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED ) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS , PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED ) ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW set FALSE") ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW set FALSE") ENDIF IF GET_PROPERTY_RESTRICTED_SLOT(iBuyPropertyIndex) = GET_PROPERTY_RESTRICTED_SLOT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) SET_PLAYER_RENOVATED_OFFICE_GARAGE_FLAG(TRUE) ENDIF // IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_GARAGE_RENOVATE) // SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_GARAGE_RENOVATE) // ENDIF IF GET_PROPERTY_RESTRICTED_SLOT(iBuyPropertyIndex) = GET_PROPERTY_RESTRICTED_SLOT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) g_iCustomAptVariantPIM = iStyle SET_UPDATE_CUSTOM_APT(TRUE) ENDIF ELIF bUpgradingOfficeGarage g_iCustomAptVariantPIM = iStyle // IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_GARAGE_RENOVATE) // SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_GARAGE_RENOVATE) // ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office garage purchase valid for ", iBuyPropertyIndex, " transactions unavailable! going to purchase success") SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_SUCCESS", TRUE, bUpgradingOfficeGarage, FALSE, FALSE, rpmt_0) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_SUCCESS", TRUE, FALSE, FALSE, FALSE, rpmt_0) ENDIF // IF finalPendingTransactionValue != 0 // AND GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY() > 0 // 1633010 // // INT itradeval = propval - iMaxTradeIn // // IF itradeval > 0 //its a cost // //flip it around so you tell them how much it will save them // itradeval = propval - itradeval // //ELSE // its a profit // // itradeval = -pendingTransactionValue//make sure its correct 1632591 // ENDIF // // IF GET_PROPERTY_GARAGE_SIZE(iBuyPropertyIndex) < GET_PROPERTY_GARAGE_SIZE() // bSmallerGarage = TRUE // ENDIF // // IF NOT BLOCKING_IS_PROPERTY_OVERWRITE_OK(itradeval,bSmallerGarage) // GO_TO_WEBSITE("WWW_DYNASTY8REALESTATE_COM_S_PURCHASE_D_ERROR") // mpPropertySiteFailReason = MPSFR_CANCELED // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // // EXIT // // ENDIF // ENDIF //GIVE_LOCAL_PLAYER_FM_CASH(-pendingTransasctionValue) //if its a refund then its a negative value already CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: final:$", finalPendingTransactionValue) IF HAS_MP_CRIMINAL_ENTERPRISE_PREMIUM_OR_STARTER_ACCESS() INT iReplaceProperty = GET_OWNED_PROPERTY(iResultSlot) IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iReplaceProperty) SWITCH iReplaceProperty CASE PROPERTY_OFFICE_2_BASE SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_PROPERTY_MAZE_BANK_WEST_EXECUTIVE_OFFICE, FALSE) BREAK CASE PROPERTY_CLUBHOUSE_4_BASE_A SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_PROPERTY_GREAT_CHAPARRAL_BIKER_CLUBHOUSE, FALSE) BREAK CASE PROPERTY_LOW_APT_2 SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_PROPERTY_1561_SAN_VITAS_STREET_APARTMENT, FALSE) BREAK CASE PROPERTY_GARAGE_NEW_19 SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_PROPERTY_1337_EXCEPTIONALISTS_WAY_10_CAR_GARAGE, FALSE) BREAK ENDSWITCH ENDIF ENDIF IF finalPendingTransactionValue >= 0 AND (finalPendingTransactionValue = 0 OR (finalPendingTransactionValue > 0 AND (USE_SERVER_TRANSACTIONS() OR NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue,FALSE,TRUE,FALSE)))) // INCREMENT_BY_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_PROPERTY,pendingTransactionValue) //NETWORK_SPENT_FROM_PROPERTY(-pendingTransactionValue, pendingTransactionValue) tl_15PropertyName = GET_PROPERTY_NAME(iResultSlot) IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF //NETWORK_BUY_PROPERTY(finalPendingTransactionValue, GET_HASH_KEY(tl_15PropertyName),FALSE,TRUE) IF iCachedReplaceProperty > 0 INT iSellingPrice = iCachedSellingPrice //GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot) IF iCachedSellingPrice >= 0 AND NOT (bUpgradingOffice OR bUpgradingClubhouse OR bUpgradingOfficeGarage) IF NOT IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) IF IS_PROPERTY_OFFICE(iBuyPropertyIndex) IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earn from office when buying free office set to zero :$", iSellingPrice, " ", tl_15PropertyName) iSellingPrice = 0 ENDIF ENDIF IF iSellingPrice >= 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 tl_15PropertyName = GET_PROPERTY_NAME(iCachedReplaceProperty) SAFE_NETWORK_EARN_FROM_PROPERTY(iSellingPrice, GET_HASH_KEY(tl_15PropertyName)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earn from property:$", iSellingPrice, " ", tl_15PropertyName) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earn nothing from property:$", iSellingPrice, " ", tl_15PropertyName, " as was free") ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earn nothing from clubhouse") ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earn nothing from property:$", iCachedSellingPrice, " ", tl_15PropertyName, PICK_STRING(bUpgradingOffice, ", bUpgradingOffice", ", not bUpgradingOffice"), PICK_STRING(bUpgradingClubhouse, ", bUpgradingClubhouse", ", not bUpgradingClubhouse"), PICK_STRING(bUpgradingOfficeGarage, ", bUpgradingOfficeGarage", ", not bUpgradingOfficeGarage")) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earn nothing, not trading") 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 IF IS_PROPERTY_OFFICE(iBuyPropertyIndex) INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) SPEND_OFFICE_AND_WAREHOUSE data IF NOT bUpgradingOffice data.m_Location = iBuyPropertyIndex IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) data.m_LocationAmount = GET_VALUE_OF_PROPERTY(iBuyPropertyIndex) ELSE data.m_LocationAmount = 0 ENDIF data.m_Style = iStyle data.m_StyleAmount = sOffice_price_struct.iStylePrice data.m_PaGender = GET_GENDER_METRIC_FROM_PERSONEL_INT(iPersonnel) data.m_PaGenderAmount = sOffice_price_struct.iPersonnelPrice data.m_Signage = g_sOfficeDataStruct.iOfficeNameID data.m_SignageAmount = (sOffice_price_struct.iNamePrice+sOffice_price_struct.iFontPrice+sOffice_price_struct.iColourPrice) data.m_GunLocker = iGunLocker data.m_GunLockerAmount = sOffice_price_struct.iGunLockerPrice data.m_Vault = iVault data.m_VaultAmount = sOffice_price_struct.iVaultPrice data.m_PersonalQuarters = iAccommodation data.m_PersonalQuartersAmount = sOffice_price_struct.iAccommodationPrice data.m_ModShop = iModshop data.m_ModShopAmount = sOffice_price_struct.iModshopPrice INT iAmount = (data.m_LocationAmount+data.m_StyleAmount+data.m_PaGenderAmount+data.m_SignageAmount+data.m_GunLockerAmount+data.m_VaultAmount+data.m_PersonalQuartersAmount+data.m_ModShopAmount) NETWORK_SPENT_PURCHASE_OFFICE_PROPERTY(iAmount, data, FALSE,TRUE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Buying office for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval) ELSE INT iAmount data.m_Location = iBuyPropertyIndex //IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) // data.m_LocationAmount = GET_VALUE_OF_PROPERTY(iBuyPropertyIndex) //ELSE // data.m_LocationAmount = 0 //ENDIF //iAmount = data.m_LocationAmount <-- WE DON'T ADD THIS FOR UPGRADE ! IF (sOffice_price_struct.iStylePrice >= 0) data.m_Style = iStyle data.m_StyleAmount = sOffice_price_struct.iStylePrice iAmount += data.m_StyleAmount ENDIF IF (sOffice_price_struct.iPersonnelPrice >= 0) data.m_PaGender = GET_GENDER_METRIC_FROM_PERSONEL_INT(iPersonnel) data.m_PaGenderAmount = sOffice_price_struct.iPersonnelPrice iAmount += data.m_PaGenderAmount ENDIF INT iSignageAmount = sOffice_price_struct.iNamePrice+sOffice_price_struct.iFontPrice+sOffice_price_struct.iColourPrice IF (iSignageAmount != 0) data.m_Signage = g_sOfficeDataStruct.iOfficeNameID data.m_SignageAmount = iSignageAmount iAmount += data.m_SignageAmount ENDIF IF (sOffice_price_struct.iGunLockerPrice >= 0) data.m_GunLocker = iGunLocker data.m_GunLockerAmount = sOffice_price_struct.iGunLockerPrice iAmount += data.m_GunLockerAmount ENDIF IF (sOffice_price_struct.iVaultPrice >= 0) data.m_Vault = iVault data.m_VaultAmount = sOffice_price_struct.iVaultPrice iAmount += data.m_VaultAmount ENDIF IF (sOffice_price_struct.iAccommodationPrice >= 0) data.m_PersonalQuarters = iAccommodation data.m_PersonalQuartersAmount = sOffice_price_struct.iAccommodationPrice iAmount += data.m_PersonalQuartersAmount ENDIF IF (sOffice_price_struct.iModshopPrice >= 0) data.m_ModShop = iModshop data.m_ModShopAmount = sOffice_price_struct.iModshopPrice iAmount += data.m_ModShopAmount ENDIF NETWORK_SPENT_UPGRADE_OFFICE_PROPERTY(iAmount, data, FALSE,TRUE) propval = finalPendingTransactionValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Upgrading office for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval) ENDIF ELIF IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) IF propval >= 0 OR finalPendingTransactionValue > 0 OR SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) OR GET_MP_PROPERTY_VALUE(iBuyPropertyIndex) = 0 INT iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage GET_SCALEFORM_CLUBHOUSE_DATA(iBuyPropertyIndex, iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage) INT iPropertyVariation = 0 BOOL bStarterPackItem = FALSE // IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) // IF NOT COULD_PROPERTY_BE_FREE_FOR_PLAYER_WITH_CRIMINAL_ENTERPRISE_STARTER_PACK(iBuyPropertyIndex) // iPropertyVariation = 1 // ELSE // bStarterPackItem = TRUE // ENDIF // ENDIF SPEND_CLUB_HOUSE data IF NOT bUpgradingClubhouse IF iCachedReplaceProperty != 0 INT iSellingPropertyVariation = 0 BOOL bSellingPropertyStarterPackItem = FALSE // iCachedReplacePropertyPrice -= GET_VALUE_OF_CURRENTLY_OWNED_CLUBHOUSE_MODS(PROPERTY_OWNED_SLOT_CLUBHOUSE, TRUE) // IF iCachedReplacePropertyPrice = 0 // IF NOT COULD_PROPERTY_BE_FREE_FOR_PLAYER_WITH_CRIMINAL_ENTERPRISE_STARTER_PACK(iCachedReplaceProperty) // iSellingPropertyVariation = 1 // ELSE // bSellingPropertyStarterPackItem = TRUE // ENDIF // ENDIF SPEND_CLUB_HOUSE earnData earnData.m_property_id = GET_PROPERTY_KEY_FOR_CATALOGUE(iCachedReplaceProperty, iSellingPropertyVariation, bSellingPropertyStarterPackItem) earnData.m_property_id_amount = iCachedSellingPrice earnData.m_mural_type = g_sClubhouseDataStruct.iColourScheme earnData.m_mural_type_amount = -1 earnData.m_wall_style = g_sClubhouseDataStruct.iWall earnData.m_wall_style_amount = -1 earnData.m_wall_hanging_style = g_sClubhouseDataStruct.iHanging earnData.m_wall_hanging_style_amount = -1 earnData.m_furniture_style = g_sClubhouseDataStruct.iFurniture earnData.m_furniture_style_amount = -1 earnData.m_emblem = g_sClubhouseDataStruct.iEmblem earnData.m_emblem_amount = -1 earnData.m_gun_locker = g_sClubhouseDataStruct.iGunLocker earnData.m_gun_locker_amount = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_LOCKER_GUN, g_sClubhouseDataStruct.iGunLocker) earnData.m_mod_shop = g_sClubhouseDataStruct.iGarage earnData.m_mod_shop_amount = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_GARAGE, g_sClubhouseDataStruct.iGarage) earnData.m_signage = g_sClubhouseDataStruct.iClubhouseNameID earnData.m_signage_amount = -1 earnData.m_font = g_sClubhouseDataStruct.iFont earnData.m_font_amount = -1 NETWORK_EARN_PURCHASE_CLUB_HOUSE(iCachedSellingPrice, earnData) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earning from Clubhouse for iAmount:$", iCachedSellingPrice, " - A") 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 ENDIF data.m_property_id = GET_PROPERTY_KEY_FOR_CATALOGUE(iBuyPropertyIndex, iPropertyVariation, bStarterPackItem) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) data.m_property_id_amount = GET_VALUE_OF_PROPERTY(iBuyPropertyIndex) ELSE data.m_property_id_amount = 0 ENDIF data.m_mural_type = iColourScheme data.m_mural_type_amount = sClubhouse_price_struct.iStylePrice data.m_wall_style = iWall data.m_wall_style_amount = sClubhouse_price_struct.iWallPrice data.m_wall_hanging_style = iHanging data.m_wall_hanging_style_amount = sClubhouse_price_struct.iHangingPrice data.m_furniture_style = iFurniture data.m_furniture_style_amount = sClubhouse_price_struct.iFurniturePrice data.m_emblem = iEmblem data.m_emblem_amount = sClubhouse_price_struct.iEmblemPrice IF (sClubhouse_price_struct.iGunLockerPrice >= 0) data.m_gun_locker = iGunLocker data.m_gun_locker_amount = sClubhouse_price_struct.iGunLockerPrice ENDIF IF (sClubhouse_price_struct.iGaragePrice >= 0) data.m_mod_shop = iGarage data.m_mod_shop_amount = sClubhouse_price_struct.iGaragePrice ENDIF data.m_signage = g_sClubhouseDataStruct.iClubhouseNameID data.m_signage_amount = sClubhouse_price_struct.iNamePrice data.m_font = iFont data.m_font_amount = sClubhouse_price_struct.iFontPrice INT iAmount = 0 IF (data.m_property_id_amount != -1) iAmount += data.m_property_id_amount ENDIF IF (data.m_mural_type_amount != -1) iAmount += data.m_mural_type_amount ENDIF IF (data.m_wall_style_amount != -1) iAmount += data.m_wall_style_amount ENDIF IF (data.m_wall_hanging_style_amount != -1) iAmount += data.m_wall_hanging_style_amount ENDIF IF (data.m_furniture_style_amount != -1) iAmount += data.m_furniture_style_amount ENDIF IF (data.m_emblem_amount != -1) iAmount += data.m_emblem_amount ENDIF IF (data.m_gun_locker_amount != -1) iAmount += data.m_gun_locker_amount ENDIF IF (data.m_mod_shop_amount != -1) iAmount += data.m_mod_shop_amount ENDIF IF (data.m_signage_amount != -1) iAmount += data.m_signage_amount ENDIF IF (data.m_font_amount != -1) iAmount += data.m_font_amount ENDIF NETWORK_SPENT_PURCHASE_CLUB_HOUSE(iAmount, data, FALSE,TRUE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Buying Clubhouse for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval, " iCachedSellingPrice:$", iCachedSellingPrice) ELSE INT iAmount = 0 // data.m_property_id = GET_PROPERTY_KEY_FOR_CATALOGUE(iBuyPropertyIndex, iPropertyVariation) IF (sClubhouse_price_struct.iStylePrice >= 0) data.m_mural_type = iColourScheme data.m_mural_type_amount = sClubhouse_price_struct.iStylePrice iAmount +=data.m_mural_type_amount ENDIF IF (sClubhouse_price_struct.iWallPrice >= 0) data.m_wall_style = iWall data.m_wall_style_amount = sClubhouse_price_struct.iWallPrice iAmount +=data.m_wall_style_amount ENDIF IF (sClubhouse_price_struct.iHangingPrice >= 0) data.m_wall_hanging_style = iHanging data.m_wall_hanging_style_amount = sClubhouse_price_struct.iHangingPrice iAmount +=data.m_wall_hanging_style_amount ENDIF IF (sClubhouse_price_struct.iFurniturePrice >= 0) data.m_furniture_style = iFurniture data.m_furniture_style_amount = sClubhouse_price_struct.iFurniturePrice iAmount +=data.m_furniture_style_amount ENDIF IF (sClubhouse_price_struct.iEmblemPrice >= 0) data.m_emblem = iEmblem data.m_emblem_amount = sClubhouse_price_struct.iEmblemPrice iAmount +=data.m_emblem_amount ENDIF IF (sClubhouse_price_struct.iGunLockerPrice >= 0) data.m_gun_locker = iGunLocker data.m_gun_locker_amount = sClubhouse_price_struct.iGunLockerPrice iAmount +=data.m_gun_locker_amount ENDIF IF (sClubhouse_price_struct.iGaragePrice >= 0) data.m_mod_shop = iGarage data.m_mod_shop_amount = sClubhouse_price_struct.iGaragePrice iAmount +=data.m_mod_shop_amount ENDIF IF (sClubhouse_price_struct.iNamePrice >= 0) data.m_signage = g_sClubhouseDataStruct.iClubhouseNameID data.m_signage_amount = sClubhouse_price_struct.iNamePrice iAmount +=data.m_signage_amount ENDIF IF (sClubhouse_price_struct.iFontPrice >= 0) data.m_font = iFont data.m_font_amount = sClubhouse_price_struct.iFontPrice iAmount +=data.m_font_amount ENDIF NETWORK_SPENT_UPGRADE_CLUB_HOUSE(iAmount, data, FALSE,TRUE) propval = finalPendingTransactionValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Upgrading Clubhouse for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchasing Clubhouse for finalPendingTransactionValue:$", finalPendingTransactionValue, " FREE") ENDIF ELIF IS_PROPERTY_OFFICE_GARAGE(iBuyPropertyIndex) INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) SPEND_OFFICE_GARAGE data IF NOT bUpgradingOfficeGarage data.m_Location = iBuyPropertyIndex IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) data.m_LocationAmount = GET_VALUE_OF_PROPERTY(iBuyPropertyIndex) ELSE data.m_LocationAmount = 0 ENDIF SWITCH iResultSlot CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1 data.m_Numbering = 1 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage1Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage1NumberPrice data.m_Lighting = iGarage1Lighting data.m_LightingAmount = sOffice_price_struct.iGarage1LightingPrice data.m_Wall = iGarage1Style data.m_WallAmount = sOffice_price_struct.iGarage1StylePrice BREAK CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2 data.m_Numbering = 2 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage2Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage2NumberPrice data.m_Lighting = iGarage2Lighting data.m_LightingAmount = sOffice_price_struct.iGarage2LightingPrice data.m_Wall = iGarage2Style data.m_WallAmount = sOffice_price_struct.iGarage2StylePrice BREAK CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3 data.m_Numbering = 3 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage3Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage3NumberPrice data.m_Lighting = iGarage3Lighting data.m_LightingAmount = sOffice_price_struct.iGarage3LightingPrice data.m_Wall = iGarage3Style data.m_WallAmount = sOffice_price_struct.iGarage3StylePrice BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: unknown iResultSlot ", iResultSlot, " for NETWORK_SPENT_PURCHASE_OFFICE_GARAGE") BREAK ENDSWITCH INT iAmount = (data.m_LocationAmount+data.m_NumberingStyleAmount+data.m_LightingAmount+data.m_WallAmount) NETWORK_SPENT_PURCHASE_OFFICE_GARAGE(iAmount, data, FALSE,TRUE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Buying office garage ", iResultSlot, " for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval) ELSE INT iAmount data.m_Location = iBuyPropertyIndex //IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) // data.m_LocationAmount = GET_VALUE_OF_PROPERTY(iBuyPropertyIndex) //ELSE // data.m_LocationAmount = 0 //ENDIF //iAmount = data.m_LocationAmount <-- WE DON'T ADD THIS FOR UPGRADE ! SWITCH iResultSlot CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1 IF (sOffice_price_struct.iGarage1NumberPrice >= 0) data.m_Numbering = 1 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage1Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage1NumberPrice iAmount += data.m_NumberingStyleAmount ENDIF IF (sOffice_price_struct.iGarage1LightingPrice >= 0) data.m_Lighting = iGarage1Lighting data.m_LightingAmount = sOffice_price_struct.iGarage1LightingPrice iAmount += data.m_LightingAmount ENDIF IF (sOffice_price_struct.iGarage1StylePrice >= 0) data.m_Wall = iGarage1Style data.m_WallAmount = sOffice_price_struct.iGarage1StylePrice iAmount += data.m_WallAmount ENDIF BREAK CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2 IF (sOffice_price_struct.iGarage2NumberPrice >= 0) data.m_Numbering = 2 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage2Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage2NumberPrice iAmount += data.m_NumberingStyleAmount ENDIF IF (sOffice_price_struct.iGarage2LightingPrice >= 0) data.m_Lighting = iGarage2Lighting data.m_LightingAmount = sOffice_price_struct.iGarage2LightingPrice iAmount += data.m_LightingAmount ENDIF IF (sOffice_price_struct.iGarage2StylePrice >= 0) data.m_Wall = iGarage2Style data.m_WallAmount = sOffice_price_struct.iGarage2StylePrice iAmount += data.m_WallAmount ENDIF BREAK CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3 IF (sOffice_price_struct.iGarage3NumberPrice >= 0) data.m_Numbering = 3 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage3Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage3NumberPrice iAmount += data.m_NumberingStyleAmount ENDIF IF (sOffice_price_struct.iGarage3LightingPrice >= 0) data.m_Lighting = iGarage3Lighting data.m_LightingAmount = sOffice_price_struct.iGarage3LightingPrice iAmount += data.m_LightingAmount ENDIF IF (sOffice_price_struct.iGarage3StylePrice >= 0) data.m_Wall = iGarage3Style data.m_WallAmount = sOffice_price_struct.iGarage3StylePrice iAmount += data.m_WallAmount ENDIF BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: unknown iResultSlot ", iResultSlot, " for NETWORK_SPENT_PURCHASE_OFFICE_GARAGE") BREAK ENDSWITCH NETWORK_SPENT_UPGRADE_OFFICE_GARAGE(iAmount, data, FALSE,TRUE) propval = finalPendingTransactionValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Upgrading office garage ", iResultSlot, " for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval) ENDIF ELSE tl_15PropertyName = GET_PROPERTY_NAME(iBuyPropertyIndex) NETWORK_BUY_PROPERTY(propval,GET_HASH_KEY(tl_15PropertyName),FALSE,TRUE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Buying property for propval:$", propval) ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION( GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF ELSE IF finalPendingTransactionValue < 0 //INCREMENT_BY_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_EARNED_PROPERTY,-pendingTransactionValue) //NETWORK_EARN_FROM_PROPERTY(-finalPendingTransactionValue, GET_HASH_KEY(tl_15PropertyName)) IF GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot) > 0 AND NOT (bUpgradingOffice OR bUpgradingClubhouse OR bUpgradingOfficeGarage) IF NOT IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) OR (iBuyPropertyIndex = PROPERTY_LOW_APT_2 OR iBuyPropertyIndex = PROPERTY_GARAGE_NEW_19 // OR iBuyPropertyIndex = PROPERTY_OFFICE_2_BASE // OR iBuyPropertyIndex = PROPERTY_CLUBHOUSE_4_BASE_A //IS_PROPERTY_CLUBHOUSE ) 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 tl_15PropertyName = GET_PROPERTY_NAME(GET_OWNED_PROPERTY(iResultSlot)) SAFE_NETWORK_EARN_FROM_PROPERTY(GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot), GET_HASH_KEY(tl_15PropertyName)) ELSE tl_15PropertyName = GET_PROPERTY_NAME(GET_OWNED_PROPERTY(iResultSlot)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earn nothing from property:$", GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot), " \"", tl_15PropertyName, "\" as was free") ENDIF ENDIF 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 IF IS_PROPERTY_OFFICE(iBuyPropertyIndex) INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) SPEND_OFFICE_AND_WAREHOUSE data IF NOT bUpgradingOffice data.m_Location = iBuyPropertyIndex IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) data.m_LocationAmount = GET_VALUE_OF_PROPERTY(iBuyPropertyIndex) ELSE data.m_LocationAmount = 0 ENDIF data.m_Style = iStyle data.m_StyleAmount = sOffice_price_struct.iStylePrice data.m_PaGender = GET_GENDER_METRIC_FROM_PERSONEL_INT(iPersonnel) data.m_PaGenderAmount = sOffice_price_struct.iPersonnelPrice data.m_Signage = g_sOfficeDataStruct.iOfficeNameID data.m_SignageAmount = (sOffice_price_struct.iNamePrice+sOffice_price_struct.iFontPrice+sOffice_price_struct.iColourPrice) data.m_GunLocker = iGunLocker data.m_GunLockerAmount = sOffice_price_struct.iGunLockerPrice data.m_Vault = iVault data.m_VaultAmount = sOffice_price_struct.iVaultPrice data.m_PersonalQuarters = iAccommodation data.m_PersonalQuartersAmount = sOffice_price_struct.iAccommodationPrice data.m_ModShop = iModshop data.m_ModShopAmount = sOffice_price_struct.iModshopPrice INT iAmount = (data.m_LocationAmount+data.m_StyleAmount+data.m_PaGenderAmount+data.m_SignageAmount+data.m_GunLockerAmount+data.m_VaultAmount+data.m_PersonalQuartersAmount+data.m_ModShopAmount) NETWORK_SPENT_PURCHASE_OFFICE_PROPERTY(iAmount, data, FALSE,TRUE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earning from office for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval) ELSE INT iAmount data.m_Location = iBuyPropertyIndex //IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) // data.m_LocationAmount = GET_VALUE_OF_PROPERTY(iBuyPropertyIndex) //ELSE // data.m_LocationAmount = 0 //ENDIF //iAmount = data.m_LocationAmount <-- WE DON'T ADD THIS FOR UPGRADE ! IF (sOffice_price_struct.iStylePrice >= 0) data.m_Style = iStyle data.m_StyleAmount = sOffice_price_struct.iStylePrice iAmount += data.m_StyleAmount ENDIF IF (sOffice_price_struct.iPersonnelPrice >= 0) data.m_PaGender = GET_GENDER_METRIC_FROM_PERSONEL_INT(iPersonnel) data.m_PaGenderAmount = sOffice_price_struct.iPersonnelPrice iAmount += data.m_PaGenderAmount ENDIF data.m_Signage = g_sOfficeDataStruct.iOfficeNameID data.m_SignageAmount = (sOffice_price_struct.iNamePrice+sOffice_price_struct.iFontPrice+sOffice_price_struct.iColourPrice) iAmount += data.m_SignageAmount IF (sOffice_price_struct.iGunLockerPrice >= 0) data.m_GunLocker = iGunLocker data.m_GunLockerAmount = sOffice_price_struct.iGunLockerPrice iAmount += data.m_GunLockerAmount ENDIF IF (sOffice_price_struct.iVaultPrice >= 0) data.m_Vault = iVault data.m_VaultAmount = sOffice_price_struct.iVaultPrice iAmount += data.m_VaultAmount ENDIF IF (sOffice_price_struct.iAccommodationPrice >= 0) data.m_PersonalQuarters = iAccommodation data.m_PersonalQuartersAmount = sOffice_price_struct.iAccommodationPrice iAmount += data.m_PersonalQuartersAmount ENDIF IF (sOffice_price_struct.iModshopPrice >= 0) data.m_ModShop = iModshop data.m_ModShopAmount = sOffice_price_struct.iModshopPrice iAmount += data.m_ModShopAmount ENDIF NETWORK_SPENT_UPGRADE_OFFICE_PROPERTY(iAmount, data, FALSE,TRUE) propval = finalPendingTransactionValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earning from office upgrade for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval) ENDIF ELIF IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) INT iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage GET_SCALEFORM_CLUBHOUSE_DATA(iBuyPropertyIndex, iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage) INT iPropertyVariation = 0 BOOL bStarterPackItem = FALSE // IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) // IF NOT COULD_PROPERTY_BE_FREE_FOR_PLAYER_WITH_CRIMINAL_ENTERPRISE_STARTER_PACK(i) // iPropertyVariation = 1 // ELSE // bStarterPackItem = TRUE // ENDIF // ENDIF SPEND_CLUB_HOUSE data IF NOT bUpgradingClubhouse IF iCachedReplaceProperty != 0 INT iSellingPropertyVariation = 0 BOOL bSellingPropertyStarterPackItem = FALSE // iCachedReplacePropertyPrice -= GET_VALUE_OF_CURRENTLY_OWNED_CLUBHOUSE_MODS(PROPERTY_OWNED_SLOT_CLUBHOUSE, TRUE) // IF iCachedReplacePropertyPrice = 0 // IF NOT COULD_PROPERTY_BE_FREE_FOR_PLAYER_WITH_CRIMINAL_ENTERPRISE_STARTER_PACK(iCachedReplaceProperty) // iSellingPropertyVariation = 1 // ELSE // bSellingPropertyStarterPackItem = TRUE // ENDIF // ENDIF SPEND_CLUB_HOUSE earnData earnData.m_property_id = GET_PROPERTY_KEY_FOR_CATALOGUE(iCachedReplaceProperty, iSellingPropertyVariation, bSellingPropertyStarterPackItem) earnData.m_property_id_amount = iCachedSellingPrice earnData.m_mural_type = g_sClubhouseDataStruct.iColourScheme earnData.m_mural_type_amount = -1 earnData.m_wall_style = g_sClubhouseDataStruct.iWall earnData.m_wall_style_amount = -1 earnData.m_wall_hanging_style = g_sClubhouseDataStruct.iHanging earnData.m_wall_hanging_style_amount = -1 earnData.m_furniture_style = g_sClubhouseDataStruct.iFurniture earnData.m_furniture_style_amount = -1 earnData.m_emblem = g_sClubhouseDataStruct.iEmblem earnData.m_emblem_amount = -1 earnData.m_gun_locker = g_sClubhouseDataStruct.iGunLocker earnData.m_gun_locker_amount = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_LOCKER_GUN, g_sClubhouseDataStruct.iGunLocker) earnData.m_mod_shop = g_sClubhouseDataStruct.iGarage earnData.m_mod_shop_amount = GET_CLUBHOUSE_PROPERTY_MOD_VALUE(CLUBHOUSE_MOD_GARAGE, g_sClubhouseDataStruct.iGarage) earnData.m_signage = g_sClubhouseDataStruct.iClubhouseNameID earnData.m_signage_amount = -1 earnData.m_font = g_sClubhouseDataStruct.iFont earnData.m_font_amount = -1 NETWORK_EARN_PURCHASE_CLUB_HOUSE(iCachedSellingPrice, earnData) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earning from Clubhouse for iAmount:$", iCachedSellingPrice, " - B") 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 ENDIF INT iAmount = 0 data.m_property_id = GET_PROPERTY_KEY_FOR_CATALOGUE(iBuyPropertyIndex, iPropertyVariation, bStarterPackItem) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) data.m_property_id_amount = GET_VALUE_OF_PROPERTY(iBuyPropertyIndex) ELSE data.m_property_id_amount = 0 ENDIF iAmount +=data.m_property_id_amount data.m_mural_type = iColourScheme data.m_mural_type_amount = sClubhouse_price_struct.iStylePrice iAmount +=data.m_mural_type_amount data.m_wall_style = iWall data.m_wall_style_amount = sClubhouse_price_struct.iWallPrice iAmount +=data.m_wall_style_amount data.m_wall_hanging_style = iHanging data.m_wall_hanging_style_amount = sClubhouse_price_struct.iHangingPrice iAmount +=data.m_wall_hanging_style_amount data.m_furniture_style = iFurniture data.m_furniture_style_amount = sClubhouse_price_struct.iFurniturePrice iAmount +=data.m_furniture_style_amount data.m_emblem = iEmblem data.m_emblem_amount = sClubhouse_price_struct.iEmblemPrice iAmount +=data.m_emblem_amount IF (sClubhouse_price_struct.iGunLockerPrice >= 0) data.m_gun_locker = iGunLocker data.m_gun_locker_amount = sClubhouse_price_struct.iGunLockerPrice iAmount +=data.m_gun_locker_amount ENDIF IF (sClubhouse_price_struct.iGaragePrice >= 0) data.m_mod_shop = iGarage data.m_mod_shop_amount = sClubhouse_price_struct.iGaragePrice iAmount +=data.m_mod_shop_amount ENDIF data.m_signage = g_sClubhouseDataStruct.iClubhouseNameID data.m_signage_amount = sClubhouse_price_struct.iNamePrice iAmount +=data.m_signage_amount data.m_font = iFont data.m_font_amount = sClubhouse_price_struct.iFontPrice iAmount +=data.m_font_amount NETWORK_SPENT_PURCHASE_CLUB_HOUSE(iAmount, data, FALSE,TRUE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Spend after earning from Clubhouse for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval) ELSE INT iAmount = 0 // data.m_property_id = GET_PROPERTY_KEY_FOR_CATALOGUE(iBuyPropertyIndex, iPropertyVariation) IF (sClubhouse_price_struct.iStylePrice >= 0) data.m_mural_type = iColourScheme data.m_mural_type_amount = sClubhouse_price_struct.iStylePrice iAmount +=data.m_mural_type_amount ENDIF IF (sClubhouse_price_struct.iWallPrice >= 0) data.m_wall_style = iWall data.m_wall_style_amount = sClubhouse_price_struct.iWallPrice iAmount +=data.m_wall_style_amount ENDIF IF (sClubhouse_price_struct.iHangingPrice >= 0) data.m_wall_hanging_style = iHanging data.m_wall_hanging_style_amount = sClubhouse_price_struct.iHangingPrice iAmount +=data.m_wall_hanging_style_amount ENDIF IF (sClubhouse_price_struct.iFurniturePrice >= 0) data.m_furniture_style = iFurniture data.m_furniture_style_amount = sClubhouse_price_struct.iFurniturePrice iAmount +=data.m_furniture_style_amount ENDIF IF (sClubhouse_price_struct.iEmblemPrice >= 0) data.m_emblem = iEmblem data.m_emblem_amount = sClubhouse_price_struct.iEmblemPrice iAmount +=data.m_emblem_amount ENDIF IF (sClubhouse_price_struct.iGunLockerPrice >= 0) data.m_gun_locker = iGunLocker data.m_gun_locker_amount = sClubhouse_price_struct.iGunLockerPrice iAmount +=data.m_gun_locker_amount ENDIF IF (sClubhouse_price_struct.iGaragePrice >= 0) data.m_mod_shop = iGarage data.m_mod_shop_amount = sClubhouse_price_struct.iGaragePrice iAmount +=data.m_mod_shop_amount ENDIF IF (sClubhouse_price_struct.iNamePrice >= 0) data.m_signage = g_sClubhouseDataStruct.iClubhouseNameID data.m_signage_amount = sClubhouse_price_struct.iNamePrice iAmount +=data.m_signage_amount ENDIF IF (sClubhouse_price_struct.iFontPrice >= 0) data.m_font = iFont data.m_font_amount = sClubhouse_price_struct.iFontPrice iAmount +=data.m_font_amount ENDIF NETWORK_SPENT_UPGRADE_CLUB_HOUSE(iAmount, data, FALSE,TRUE) propval = finalPendingTransactionValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Spent on Clubhouse upgrade for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval) ENDIF ELSE tl_15PropertyName = GET_PROPERTY_NAME(iBuyPropertyIndex) NETWORK_BUY_PROPERTY(propval,GET_HASH_KEY(tl_15PropertyName),FALSE,TRUE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earning from proprety: $", -finalPendingTransactionValue) ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF ELIF IS_PROPERTY_OFFICE_GARAGE(iBuyPropertyIndex) IF propval > 0 INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) SPEND_OFFICE_GARAGE data IF NOT bUpgradingOfficeGarage data.m_Location = iBuyPropertyIndex IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) data.m_LocationAmount = GET_VALUE_OF_PROPERTY(iBuyPropertyIndex) ELSE data.m_LocationAmount = 0 ENDIF SWITCH iResultSlot CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1 data.m_Numbering = 1 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage1Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage1NumberPrice data.m_Lighting = iGarage1Lighting data.m_LightingAmount = sOffice_price_struct.iGarage1LightingPrice data.m_Wall = iGarage1Style data.m_WallAmount = sOffice_price_struct.iGarage1StylePrice BREAK CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2 data.m_Numbering = 2 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage2Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage2NumberPrice data.m_Lighting = iGarage2Lighting data.m_LightingAmount = sOffice_price_struct.iGarage2LightingPrice data.m_Wall = iGarage2Style data.m_WallAmount = sOffice_price_struct.iGarage2StylePrice BREAK CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3 data.m_Numbering = 3 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage3Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage3NumberPrice data.m_Lighting = iGarage3Lighting data.m_LightingAmount = sOffice_price_struct.iGarage3LightingPrice data.m_Wall = iGarage3Style data.m_WallAmount = sOffice_price_struct.iGarage3StylePrice BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: unknown iResultSlot ", iResultSlot, " for NETWORK_SPENT_PURCHASE_OFFICE_GARAGE") BREAK ENDSWITCH INT iAmount = (data.m_LocationAmount+data.m_NumberingStyleAmount+data.m_LightingAmount+data.m_WallAmount) NETWORK_SPENT_PURCHASE_OFFICE_GARAGE(iAmount, data, FALSE,TRUE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earning from office garage for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval) ELSE INT iAmount data.m_Location = iBuyPropertyIndex //IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) // data.m_LocationAmount = GET_VALUE_OF_PROPERTY(iBuyPropertyIndex) //ELSE // data.m_LocationAmount = 0 //ENDIF SWITCH iResultSlot CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1 IF (sOffice_price_struct.iGarage1NumberPrice >= 0) data.m_Numbering = 1 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage1Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage1NumberPrice iAmount += data.m_NumberingStyleAmount ENDIF IF (sOffice_price_struct.iGarage1LightingPrice >= 0) data.m_Lighting = iGarage1Lighting data.m_LightingAmount = sOffice_price_struct.iGarage1LightingPrice iAmount += data.m_LightingAmount ENDIF IF (sOffice_price_struct.iGarage1StylePrice >= 0) data.m_Wall = iGarage1Style data.m_WallAmount = sOffice_price_struct.iGarage1StylePrice iAmount += data.m_WallAmount ENDIF BREAK CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2 IF (sOffice_price_struct.iGarage2NumberPrice >= 0) data.m_Numbering = 2 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage2Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage2NumberPrice iAmount += data.m_NumberingStyleAmount ENDIF IF (sOffice_price_struct.iGarage2LightingPrice >= 0) data.m_Lighting = iGarage2Lighting data.m_LightingAmount = sOffice_price_struct.iGarage2LightingPrice iAmount += data.m_LightingAmount ENDIF IF (sOffice_price_struct.iGarage2StylePrice >= 0) data.m_Wall = iGarage2Style data.m_WallAmount = sOffice_price_struct.iGarage2StylePrice iAmount += data.m_WallAmount ENDIF BREAK CASE PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3 IF (sOffice_price_struct.iGarage3NumberPrice >= 0) data.m_Numbering = 3 data.m_NumberingAmount = 0 data.m_NumberingStyle = iGarage3Number data.m_NumberingStyleAmount = sOffice_price_struct.iGarage3NumberPrice iAmount += data.m_NumberingStyleAmount ENDIF IF (sOffice_price_struct.iGarage3LightingPrice >= 0) data.m_Lighting = iGarage3Lighting data.m_LightingAmount = sOffice_price_struct.iGarage3LightingPrice iAmount += data.m_LightingAmount ENDIF IF (sOffice_price_struct.iGarage3StylePrice >= 0) data.m_Wall = iGarage3Style data.m_WallAmount = sOffice_price_struct.iGarage3StylePrice iAmount += data.m_WallAmount ENDIF BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: unknown iResultSlot ", iResultSlot, " for NETWORK_SPENT_PURCHASE_OFFICE_GARAGE") BREAK ENDSWITCH NETWORK_SPENT_UPGRADE_OFFICE_GARAGE(iAmount, data, FALSE,TRUE) propval = finalPendingTransactionValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: Earning from office garage upgrade for iAmount:$", iAmount, " finalPendingTransactionValue:$", finalPendingTransactionValue, " propval:$", propval) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchasing office garage for finalPendingTransactionValue:$", finalPendingTransactionValue, " FREE") ENDIF ELSE IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE: purchase going ahead, transaction value $" ,finalPendingTransactionValue, " combined bank and wallet balance $",(iBankBalance+iWalletBalance) ) IF GET_OWNED_PROPERTY(iResultSlot) > 0 AND NOT (bUpgradingOffice OR bUpgradingClubhouse OR bUpgradingOfficeGarage) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: incrementing trade in.") INCREMENT_BY_MP_INT_CHARACTER_AWARD(MP_AWARD_TRADE_IN_YOUR_PROPERTY,1) ENDIF WHILE NOT SET_CHIPS_FOR_PROPERTY_PURCHASE(iBuyPropertyIndex, eChipsTransactionState) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() RENDER_BROWSER() WAIT(0) ENDWHILE eChipsTransactionState = TRANSACTION_STATE_DEFAULT IF iResultSlot >= 0 AND iResultSlot <= MAX_MP_PROPERTIES-1 FORCE_CLEAN_APARTMENT_MESS_DATA(iResultSlot) ENDIF IF iResultSlot = PROPERTY_OWNED_SLOT_APT_1 IF GET_OWNED_PROPERTY(iResultSlot) <= 0 REQUEST_SYSTEM_ACTIVITY_TYPE_PURCHASED_FIRST_PROPERTY() ENDIF SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROPERTY_HOUSE, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROPERTY_HOUSE_TIME,GET_CLOUD_TIME_AS_INT()) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROPERTY_HOUSE_NEW,iBuyPropertyIndex) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROPERTY_HOUSE_NEW_TIME,GET_CLOUD_TIME_AS_INT()) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iCurrentPropertyValue = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iCurrentPropertyValue = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROPERTY_HOUSE_NEW_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iCurrentPropertyValue) IF IS_PROPERTY_CUSTOM_APARTMENT(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant:", iCustomAptVariant) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iCustomAptVariant) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF IF propval = 0 SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_0, TRUE) ELSE SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_0, FALSE) ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_2 IF GET_OWNED_PROPERTY(iResultSlot) <= 0 REQUEST_SYSTEM_ACTIVITY_TYPE_PURCHASED_SECOND_PROPERTY() ENDIF SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_1, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiProperty1Value = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiProperty1Value = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_VALUE_1,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiProperty1Value) IF IS_PROPERTY_CUSTOM_APARTMENT(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant:", iCustomAptVariant) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iCustomAptVariant) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF IF propval = 0 SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_1, TRUE) ELSE SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_1, FALSE) ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_3 IF GET_OWNED_PROPERTY(iResultSlot) <= 0 REQUEST_SYSTEM_ACTIVITY_TYPE_PURCHASED_THIRD_PROPERTY() ENDIF SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_2, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[0] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[0] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_VALUE_2,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[0]) IF IS_PROPERTY_CUSTOM_APARTMENT(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant:", iCustomAptVariant) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iCustomAptVariant) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF IF propval = 0 SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_2, TRUE) ELSE SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_2, FALSE) ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_4 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_3, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[1] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[1] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_VALUE_3,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[1]) IF IS_PROPERTY_CUSTOM_APARTMENT(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant:", iCustomAptVariant) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iCustomAptVariant) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF IF propval = 0 SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_3, TRUE) ELSE SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_3, FALSE) ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_5 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_4, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_VALUE_4,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) IF IS_PROPERTY_CUSTOM_APARTMENT(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant:", iCustomAptVariant) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iCustomAptVariant) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF IF propval = 0 SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_4, TRUE) ELSE SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_4, FALSE) ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_OFFICE_0 BOOL bOwnsOffice //Print a ticker the first time we purchase an office IF GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_0) <= 0 PRINT_TICKER("OFFPURCH_TICK") bOwnsOffice = FALSE ELSE bOwnsOffice = TRUE ENDIF //#2829938 g_bOfficeJustPurchased = TRUE IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_SPVE0A) CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchased office, set PURCHASE_HELP_BS_SPVE0A false") CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_SPVE0A) ENDIF IF NOT bOwnsOffice GB_SET_LOCAL_HELP_BIT(eGB_LOCAL_HELP_BITSET_NOTIFICATION_BUY_OFFICE) IF NOT GB_IS_PLAYER_MEMBER_OF_A_GANG(PLAYER_ID()) AND GB_GET_NUM_BOSSES_IN_SESSION() < GB_GET_MAX_NUM_GANGS() AND NOT NETWORK_IS_ACTIVITY_SESSION() AND NOT GB_IS_VIP_GAMEPLAY_DISABLED_FOR_PLAYER(PLAYER_ID()) AND NOT IS_PLAYER_ON_MISSION_BLOCKING_GANG_CREATION() IF NOT IS_STRING_NULL_OR_EMPTY(g_sOfficeDataStruct.tl63NewOrgName) GB_SET_ORGANIZATION_NAME(g_sOfficeDataStruct.tl63NewOrgName,GB_ORGANISATION_NAME_TYPE_OFFICE, TRUE) GB_SET_OFFICE_NAME(g_sOfficeDataStruct.tl63NewOrgName, TRUE) //GB_SETUP_AFTER_NAMING_GANG(GBKeyBoardData) GB_SEND_NAME_CHANGE_EVENT() ELSE TEXT_LABEL_63 tlOfficeName = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_GB_OFFICE_NAME, MP_STAT_GB_OFFICE_NAME2) IF NOT IS_STRING_NULL_OR_EMPTY(tlOfficeName) GB_SET_ORGANIZATION_NAME(tlOfficeName,GB_ORGANISATION_NAME_TYPE_OFFICE, TRUE) GB_SET_OFFICE_NAME(tlOfficeName, TRUE) ELSE GB_SET_ORGANIZATION_NAME(GET_DEFAULT_GANG_NAME(PLAYER_ID()),GB_ORGANISATION_NAME_TYPE_OFFICE, TRUE) GB_SET_OFFICE_NAME(GET_DEFAULT_GANG_NAME(PLAYER_ID(), TRUE), TRUE) ENDIF ENDIF GB_BOSS_CREATE_GANG() CLEANUP_TEMP_PASSIVE_MODE() CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office GB_BOSS_CREATE_GANG \"", g_sOfficeDataStruct.tl63NewOrgName, "\"") ELSE CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office don't call GB_BOSS_CREATE_GANG") ENDIF ENDIF SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT bUpgradingOffice IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: value:", g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: value ignored (upgrading office)") ENDIF INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) IF IS_PROPERTY_CUSTOMISABLE(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iStyle:", iStyle) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office iPersonnel: ", iPersonnel, ", iGunLocker: ", iGunLocker, " iVault: ", iVault, " iAccommodation: ", iAccommodation) IF GET_OWNED_PROPERTY_VARIATION(iResultSlot) != iStyle SET_BIT(g_iOfficePersonalAssistantSpeechBitset, OFF_PA_SPEECH_DECOR) ENDIF SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iStyle) IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iPersonnel) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_PERSONNEL, 1) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_OFFICE_MALE_PA) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office PROPERTY_BROADCAST_BS_OFFICE_MALE_PA TRUE") ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_PERSONNEL, 0) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_OFFICE_MALE_PA) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office PROPERTY_BROADCAST_BS_OFFICE_MALE_PA FALSE") ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_PA_GENDER_SET) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_PA_GENDER_SET) ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_PA_NEW_CLOTHES) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_PA_NEW_CLOTHES) ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_FONT_PLAYER_OFFICE, iFont) SET_MP_INT_CHARACTER_STAT(MP_STAT_COLOUR_PLAYER_OFFICE, iColour) GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iOfficeNameFont = iFont GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iOfficeNameFontColour = iColour CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office iFont: ", iFont) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office iColour: ", iColour) IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) IF NOT IS_OFFICE_GUN_LOCKER_PURCHASED() SET_BIT(g_iOfficePersonalAssistantSpeechBitset, OFF_PA_SPEECH_ADDLOCKER) ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_LOCKER_GUN, 1) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_LOCKER_GUN, 0) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iVault) IF NOT IS_OFFICE_CASH_VAULT_PURCHASED() SET_BIT(g_iOfficePersonalAssistantSpeechBitset, OFF_PA_SPEECH_ADDSAFE) ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_LOCKER_CASH, 1) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_LOCKER_CASH, 0) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iAccommodation) IF NOT IS_OFFICE_ACCOMMODATION_PURCHASED() SET_BIT(g_iOfficePersonalAssistantSpeechBitset, OFF_PA_SPEECH_ADDQUARTERS) ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_ACCOMMODATION, 1) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo, PROPERTY_BROADCAST_BS2_OFFICE_LIVINGQ_PURCHASED) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_ACCOMMODATION, 0) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo, PROPERTY_BROADCAST_BS2_OFFICE_LIVINGQ_PURCHASED) ENDIF BOOL bUpgradingOfficeModshop = FALSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office iModshop: ", iModshop, ", previously: ", iPrevModshop) #IF USE_FINAL_PRINTS PRINTLN_FINAL("[appInternet] -BUY_MP_PROPERTY_FROM_WEBSITE: office iModshop: ", iModshop, ", previously: ", iPrevModshop) #ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_MODSHOP, iModshop) IF IS_OFFICE_MODSHOP_PURCHASED() SET_PLAYER_OWNS_OFFICE_MOD_GARAGE(TRUE) IF iModshop != iPrevModshop bUpgradingOfficeModshop = TRUE IF iPrevModshop = 0 SET_BIT(g_iOfficePersonalAssistantSpeechBitset, OFF_PA_SPEECH_MODSHOP) ENDIF ENDIF #IF USE_FINAL_PRINTS PRINTLN_FINAL("[appInternet] -IS_OFFICE_MODSHOP_PURCHASED - TRUE") #ENDIF ELSE SET_PLAYER_OWNS_OFFICE_MOD_GARAGE(FALSE) #IF USE_FINAL_PRINTS PRINTLN_FINAL("[appInternet] - IS_OFFICE_MODSHOP_PURCHASED - FALSE") #ENDIF ENDIF IF bUpgradingOfficeModshop SET_PLAYER_OFFICE_GARAGE_MOD_INTERIOR_FLAGS(iModshop) IF (IS_PROPERTY_OFFICE_MOD_GARAGE(PLAYER_ID()) OR IS_PROPERTY_OFFICE_GARAGE(GET_PROPERTY_THAT_IM_CURRENTLY_IN())) AND (IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_IN_OWNED_PROPERTY)) SET_PLAYER_RENOVATED_OFFICE_GARAGE_FLAG(TRUE) SET_UPDATE_CUSTOM_APT(TRUE) g_iCustomAptVariantPIM = 999 // Setting to something obvious incase it breaks something. PRINTLN("COMPLETE_INTERIOR_PURCHASE: RENOVATING OFFICE MOD SHOP") ENDIF ENDIF IF !bUpgradingOffice IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_GUN_VAULT_DOOR_OPENED) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_GUN_VAULT_DOOR_OPENED) ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_SAFE_VAULT_DOOR_OPENED) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_SAFE_VAULT_DOOR_OPENED) ENDIF ENDIF IF !HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) IF SHOULD_ALLOW_DISABLE_WEAPON_LOADOUT_FROM_INTERNET() SET_CUSTOM_WEAPON_LOADOUT(FALSE) RESET_CUSTOM_WEAPON_LOADOUT_STATS() ENDIF ENDIF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant IF NOT IS_STRING_NULL_OR_EMPTY(g_sOfficeDataStruct.tl63NewOrgName) IF (GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) AND NOT GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID())) OR NOT GB_IS_PLAYER_MEMBER_OF_A_GANG(PLAYER_ID()) GB_SET_ORGANIZATION_NAME(g_sOfficeDataStruct.tl63NewOrgName,GB_ORGANISATION_NAME_TYPE_OFFICE, TRUE) GB_SET_OFFICE_NAME(g_sOfficeDataStruct.tl63NewOrgName, TRUE) //GB_SETUP_AFTER_NAMING_GANG(GBKeyBoardData) GB_SEND_NAME_CHANGE_EVENT() ELSE GB_SET_OFFICE_NAME(g_sOfficeDataStruct.tl63NewOrgName, TRUE) ENDIF ELIF NOT GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) OR GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) TEXT_LABEL_63 tlOfficeName = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_GB_OFFICE_NAME, MP_STAT_GB_OFFICE_NAME2) IF IS_STRING_NULL_OR_EMPTY(tlOfficeName) STRING sDefaultOrgName = GET_DEFAULT_GANG_NAME(PLAYER_ID(), TRUE) GB_SET_OFFICE_NAME(sDefaultOrgName, TRUE) ENDIF ENDIF IF IS_PROPERTY_OFFICE(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) AND IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_IN_OWNED_PROPERTY) AND bUpgradingOffice AND NOT bUpgradingOfficeModshop IF IS_PLAYER_IN_APARTMENT_WITH_BUDDY() AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) ELSE CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY set FALSE") ENDIF IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS , PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED ) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS , PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED ) ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW set FALSE") ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW set FALSE") ENDIF IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_RENOVATE) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_RENOVATE) ENDIF g_iCustomAptVariantPIM = iStyle SET_UPDATE_CUSTOM_APT(TRUE) ELIF bUpgradingOffice g_iCustomAptVariantPIM = iStyle IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_RENOVATE) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_OFFICE_RENOVATE) ENDIF ENDIF SET_PLAYER_OWNS_OFFICE(TRUE) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: office \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_CLUBHOUSE BOOL bOwnsClubhouse INT iForceDisplayUpdatedSlot //Print a ticker the first time we purchase an Clubhouse IF GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_CLUBHOUSE) <= 0 bOwnsClubhouse = FALSE ELSE bOwnsClubhouse = TRUE ENDIF //#2829938 SET_PLAYER_OWNS_CLUBHOUSE(TRUE) IF NOT bOwnsClubhouse IF NOT GB_IS_PLAYER_MEMBER_OF_A_GANG(PLAYER_ID()) GB_SET_LOCAL_BIKER_CALL_BIT(eGB_LOCAL_BIKER_CALL_BITSET_NOTIFICATION_BUY_CLUBHOUSE) ENDIF IF NOT GB_IS_PLAYER_MEMBER_OF_A_GANG(PLAYER_ID()) AND GB_GET_NUM_BOSSES_IN_SESSION() < GB_GET_MAX_NUM_GANGS() AND NOT NETWORK_IS_ACTIVITY_SESSION() AND NOT GB_IS_VIP_GAMEPLAY_DISABLED_FOR_PLAYER(PLAYER_ID()) AND NOT IS_PLAYER_ON_MISSION_BLOCKING_GANG_CREATION() IF GB_IS_LOCAL_PLAYER_BOSS_OF_A_GANG() GB_BOSS_RETIRE(FALSE) ENDIF GB_BOSS_CREATE_GANG(TRUE, GT_BIKER) IF NOT IS_STRING_NULL_OR_EMPTY(g_sClubhouseDataStruct.tl63NewSignage) GB_SET_ORGANIZATION_NAME(g_sClubhouseDataStruct.tl63NewSignage,GB_ORGANISATION_NAME_TYPE_CLUBHOUSE, TRUE) GB_SET_MC_CLUBHOUSE_NAME(g_sClubhouseDataStruct.tl63NewSignage, TRUE) //GB_SETUP_AFTER_NAMING_GANG(GBKeyBoardData) GB_SEND_NAME_CHANGE_EVENT() ELSE TEXT_LABEL_63 tlClubhouseName = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_MC_CLBHOSE_NAME, MP_STAT_MC_CLBHOSE_NAME2) IF NOT IS_STRING_NULL_OR_EMPTY(tlClubhouseName) GB_SET_ORGANIZATION_NAME(tlClubhouseName,GB_ORGANISATION_NAME_TYPE_CLUBHOUSE, TRUE) GB_SET_MC_CLUBHOUSE_NAME(tlClubhouseName, TRUE) ELSE GB_SET_ORGANIZATION_NAME(GET_DEFAULT_BIKER_GANG_NAME(),GB_ORGANISATION_NAME_TYPE_CLUBHOUSE, TRUE) GB_SET_MC_CLUBHOUSE_NAME(GET_DEFAULT_BIKER_GANG_NAME(), TRUE) ENDIF ENDIF TEXT_LABEL_63 stName = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_GB_GANG_NAME, MP_STAT_GB_GANG_NAME2) IF IS_STRING_NULL_OR_EMPTY(stName) // IF NOT IS_TEMP_PASSIVE_MODE_ENABLED() // SET_TEMP_PASSIVE_MODE() // ENDIF ELSE CLEANUP_TEMP_PASSIVE_MODE() GB_SET_ORGANIZATION_NAME_ON_ENTRY_TO_FM() GB_SET_OFFICE_NAME_ON_ENTRY_TO_FM() GB_SET_MC_CLUBHOUSE_NAME_ON_ENTRY_TO_FM() ENDIF CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: GB_BOSS_CREATE_GANG \"", stName, "\", GT_BIKER") ELSE CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: don't call GB_BOSS_CREATE_GANG") ENDIF ENDIF IF NOT IS_CONTACT_IN_PHONEBOOK(CHAR_BIKER_CH1, MULTIPLAYER_BOOK) BOOL bDisplay = FALSE // INT iStatInt = GET_MP_INT_CHARACTER_STAT(MP_STAT_FM_NON_MS_HELP_TEXT8) // IF NOT IS_BIT_SET(iStatInt, BI_FM_NMH11_UNLOCKED_PERSONAL_bikerANT) // SET_BIT(iStatInt, BI_FM_NMH11_UNLOCKED_PERSONAL_bikerANT) // SET_MP_INT_CHARACTER_STAT(MP_STAT_FM_NON_MS_HELP_TEXT8, iStatInt) // bDisplay = TRUE // ENDIF ADD_CONTACT_TO_PHONEBOOK(CHAR_BIKER_CH1,MULTIPLAYER_BOOK,bDisplay) CPRINTLN(DEBUG_INTERNET, "[BIKER_CONTACT] MAINTAIN_ADD_BIKER_CLUBHOUSE_CONTACT - ADD_CONTACT_TO_PHONEBOOK(", g_sCharacterSheetAll[CHAR_BIKER_CH1].label, ", bDisplay:", GET_STRING_FROM_BOOL(bDisplay), ")") ENDIF IF IS_CONTACT_IN_PHONEBOOK(CHAR_MP_RAY_LAVOY,MULTIPLAYER_BOOK) REMOVE_CONTACT_FROM_INDIVIDUAL_PHONEBOOK(CHAR_MP_RAY_LAVOY, MULTIPLAYER_BOOK) CPRINTLN(DEBUG_INTERNET, "[BIKER_CONTACT] MAINTAIN_ADD_BIKER_CLUBHOUSE_CONTACT - REMOVE_CONTACT_FROM_INDIVIDUAL_PHONEBOOK(", g_sCharacterSheetAll[CHAR_MP_RAY_LAVOY].label, ") - url:bugstar:2954910 - Can we replace the SecuroServ contact with the new Clubhouse contact on becoming a Biker President") ENDIF SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CLUBHOUSE, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT bUpgradingClubhouse IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: value:", g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CLUBHOUSE_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: value ignored (upgrading clubhouse)") ENDIF INT iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage GET_SCALEFORM_CLUBHOUSE_DATA(iBuyPropertyIndex, iWall, iHanging, iFurniture, iColourScheme, iFont, iFontColour, iEmblem, iHideSinage, iGunLocker, iGarage) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iColourScheme:", iColourScheme) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: iGunLocker: ", iGunLocker, " iGarage: ", iGarage) IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iWall) SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_WALL, 1) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_WALL, 0) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iHanging) SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_HANGING, 1) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_HANGING, 0) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iFurniture) SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FURNATURE, 1) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FURNATURE, 0) ENDIF SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iColourScheme) IF GET_BASE_PROPERTY_FROM_PROPERTY(iBuyPropertyIndex) = PROPERTY_CLUBHOUSE_1_BASE_A //SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_PERSONNEL, 1) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_CLUBHOUSE_TRADITIONAL) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY_BROADCAST_BS2_CLUBHOUSE_TRADITIONAL TRUE") ELIF GET_BASE_PROPERTY_FROM_PROPERTY(iBuyPropertyIndex) = PROPERTY_CLUBHOUSE_7_BASE_B CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_CLUBHOUSE_TRADITIONAL) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY_BROADCAST_BS2_CLUBHOUSE_TRADITIONAL FALSE") ELSE // ENDIF // IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_PA_GENDER_SET) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_PA_GENDER_SET) // ENDIF // IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_PA_NEW_CLOTHES) // CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_PA_NEW_CLOTHES) // ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FONT, iFont) SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_COLOUR, iFontColour) GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iClubhouseNameFont = iFont GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iClubhouseNameFontColour = iFontColour CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE (MC): iFont: ", iFont) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE (MC): iColour: ", iFontColour) SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_EMBLEM, iEmblem) GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iClubhouseEmblem = iEmblem PRINTLN("[CREW_EMBLEM] BUY_MP_PROPERTY_FROM_WEBSITE - Setting emblem to: ", GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iClubhouseEmblem) IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iHideSinage) SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_SINAGEHIDE, 1) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_SINAGEHIDE, 0) ENDIF GlobalPlayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].bClubhouseHideName = iHideSinage CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE (MC): iEmblem: ", iEmblem) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE (MC): iHideSinage: ", iHideSinage) IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_GUNLOCKER, 1) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_GUNLOCKER, 0) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGarage) SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_GARAGE, 1) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_GARAGE, 0) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iWall) SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_WALL, 1) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_WALL, 0) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iHanging) SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_HANGING, 1) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_HANGING, 0) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iFurniture) SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FURNATURE, 1) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_CLBHOS_FURNATURE, 0) ENDIF IF !bUpgradingClubhouse IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_GUN_VAULT_DOOR_OPENED) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_GUN_VAULT_DOOR_OPENED) ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_SAFE_VAULT_DOOR_OPENED) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_SAFE_VAULT_DOOR_OPENED) ENDIF ENDIF IF !HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) IF SHOULD_ALLOW_DISABLE_WEAPON_LOADOUT_FROM_INTERNET() SET_CUSTOM_WEAPON_LOADOUT(FALSE) RESET_CUSTOM_WEAPON_LOADOUT_STATS() ENDIF ENDIF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant IF NOT IS_STRING_NULL_OR_EMPTY(g_sClubhouseDataStruct.tl63NewSignage) IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) OR NOT GB_IS_PLAYER_MEMBER_OF_A_GANG(PLAYER_ID()) GB_SET_ORGANIZATION_NAME(g_sClubhouseDataStruct.tl63NewSignage,GB_ORGANISATION_NAME_TYPE_CLUBHOUSE, TRUE) GB_SET_MC_CLUBHOUSE_NAME(g_sClubhouseDataStruct.tl63NewSignage, TRUE) //GB_SETUP_AFTER_NAMING_GANG(GBKeyBoardData) GB_SEND_NAME_CHANGE_EVENT() ELSE GB_SET_MC_CLUBHOUSE_NAME(g_sClubhouseDataStruct.tl63NewSignage, TRUE) ENDIF ELIF NOT GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) TEXT_LABEL_63 tlClubhouseName = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_MC_CLBHOSE_NAME, MP_STAT_MC_CLBHOSE_NAME2) IF IS_STRING_NULL_OR_EMPTY(tlClubhouseName) GB_SET_MC_CLUBHOUSE_NAME(GET_DEFAULT_BIKER_GANG_NAME(), TRUE) ENDIF ENDIF IF IS_PROPERTY_CLUBHOUSE(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) AND IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_IN_OWNED_PROPERTY) AND bUpgradingClubhouse IF IS_PLAYER_IN_APARTMENT_WITH_BUDDY() AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) ELSE CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED_WITH_BUDDY set FALSE") ENDIF IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS , PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED ) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS , PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PURCHASED ) ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_PREVIEW set FALSE") ENDIF IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW) PRINTLN("COMPLETE_INTERIOR_PURCHASE: PROPERTY_BROADCAST_BS_PLAYER_APT_VARIANT_CANCEL_PREVIEW set FALSE") ENDIF IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_RENOVATE) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_RENOVATE) ENDIF g_iCustomAptVariantPIM = iColourScheme SET_UPDATE_CUSTOM_APT(TRUE) ELIF bUpgradingClubhouse g_iCustomAptVariantPIM = iColourScheme IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_RENOVATE) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSTwo,PROPERTY_BROADCAST_BS2_Clubhouse_RENOVATE) ENDIF GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[PROPERTY_OWNED_SLOT_CLUBHOUSE] = g_iCustomAptVariantPIM ENDIF IF NOT bOwnsClubhouse IF GET_OWNED_PROPERTY(0) <= 0 IF IS_PERSONAL_VEHICLE_DRIVEABLE_IN_FREEMODE() IF DOES_ENTITY_EXIST(MPGlobalsAmbience.vehPersonalVehicle) MPSV_GET_DISPLAY_SLOT_FROM_SAVE_SLOT(CURRENT_SAVED_VEHICLE_SLOT(),iForceDisplayUpdatedSlot) IF iForceDisplayUpdatedSlot <= 0 iForceDisplayUpdatedSlot = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,GET_ENTITY_MODEL(MPGlobalsAmbience.vehPersonalVehicle)) IF iForceDisplayUpdatedSlot >= 0 PRINTLN("Forcing Current bike slot display to #",iForceDisplayUpdatedSlot," when buying clubhouse") MPSV_SET_DISPLAY_SLOT(iForceDisplayUpdatedSlot,CURRENT_SAVED_VEHICLE_SLOT()) IF iForceDisplayUpdatedSlot != 0 MPSV_SET_DISPLAY_SLOT(0,-1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_6 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_5, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_VALUE_5,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) IF IS_PROPERTY_CUSTOM_APARTMENT(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant:", iCustomAptVariant) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iCustomAptVariant) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF IF propval = 0 SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_5, TRUE) ELSE SET_PACKED_STAT_BOOL(PACKED_MP_STAT_FREE_PROPERTY_SLOT_5, FALSE) ENDIF #IF FEATURE_SUMMER_2020 ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_7 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_6, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_VALUE_6,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) IF IS_PROPERTY_CUSTOM_APARTMENT(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant:", iCustomAptVariant) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iCustomAptVariant) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF IF propval = 0 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_7, TRUE) ELSE SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_7, FALSE) ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_8 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_7, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_VALUE_7,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) IF IS_PROPERTY_CUSTOM_APARTMENT(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant:", iCustomAptVariant) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iCustomAptVariant) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF IF propval = 0 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_8, TRUE) ELSE SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_8, FALSE) ENDIF #ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_9 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_8, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_VALUE_8,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) IF IS_PROPERTY_CUSTOM_APARTMENT(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant:", iCustomAptVariant) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iCustomAptVariant) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF IF propval = 0 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_9, TRUE) ELSE SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_9, FALSE) ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_APT_10 //MAX_OWNED_PROPERTIES //CDM PROPERTY STAT UPDATE //OLD PROPERTIES SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_9, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_VALUE_9,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) IF IS_PROPERTY_CUSTOM_APARTMENT(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant:", iCustomAptVariant) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iCustomAptVariant) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF IF propval = 0 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_10, TRUE) ELSE SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_FREE_OWNED_SLOT_APT_10, FALSE) ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1 BOOL bOwnsOfficeGarage INT iForceDisplayUpdatedSlot //Print a ticker the first time we purchase an Clubhouse IF GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1) <= 0 bOwnsOfficeGarage = FALSE SET_BIT(g_iOfficePersonalAssistantSpeechBitset, OFF_PA_SPEECH_GARAGE) ELSE bOwnsOfficeGarage = TRUE ENDIF INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1, iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY DETAIL TYPE:", mpProperties[iBuyPropertyIndex].iType) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: PROPERTY SIZE TYPE:", GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex)) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iGarage1Style:", iGarage1Style, " iGarage1Lighting:", iGarage1Lighting, " iGarage1Number:", iGarage1Number) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iGarage1Style) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1_LIGHTING, iGarage1Lighting) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1_NUMBERING, iGarage1Number) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iGarage1Style IF GET_PROPERTY_RESTRICTED_SLOT(iBuyPropertyIndex) = GET_PROPERTY_RESTRICTED_SLOT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) AND bUpgradingOfficeGarage SET_PLAYER_RENOVATED_OFFICE_GARAGE_FLAG(TRUE) ENDIF IF NOT bOwnsOfficeGarage IF GET_OWNED_PROPERTY(0) <= 0 IF IS_PERSONAL_VEHICLE_DRIVEABLE_IN_FREEMODE() IF DOES_ENTITY_EXIST(MPGlobalsAmbience.vehPersonalVehicle) MPSV_GET_DISPLAY_SLOT_FROM_SAVE_SLOT(CURRENT_SAVED_VEHICLE_SLOT(),iForceDisplayUpdatedSlot) IF iForceDisplayUpdatedSlot <= 0 iForceDisplayUpdatedSlot = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,GET_ENTITY_MODEL(MPGlobalsAmbience.vehPersonalVehicle)) IF iForceDisplayUpdatedSlot >= 0 PRINTLN("Forcing Current personal vehicle display to #",iForceDisplayUpdatedSlot," when buying an office garage") MPSV_SET_DISPLAY_SLOT(iForceDisplayUpdatedSlot,CURRENT_SAVED_VEHICLE_SLOT()) IF iForceDisplayUpdatedSlot != 0 MPSV_SET_DISPLAY_SLOT(0,-1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2 INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) IF GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2) <= 0 SET_BIT(g_iOfficePersonalAssistantSpeechBitset, OFF_PA_SPEECH_FLOORS) ENDIF SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2, iBuyPropertyIndex) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iGarage2Style:", iGarage2Style, " iGarage2Lighting:", iGarage2Lighting, " iGarage2Number:", iGarage2Number) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iGarage2Style) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2_LIGHTING, iGarage2Lighting) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2_NUMBERING, iGarage2Number) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iGarage2Style IF GET_PROPERTY_RESTRICTED_SLOT(iBuyPropertyIndex) = GET_PROPERTY_RESTRICTED_SLOT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) AND bUpgradingOfficeGarage SET_PLAYER_RENOVATED_OFFICE_GARAGE_FLAG(TRUE) ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3 INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) IF GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3) <= 0 SET_BIT(g_iOfficePersonalAssistantSpeechBitset, OFF_PA_SPEECH_FLOORS) ENDIF SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3, iBuyPropertyIndex) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) PRINTLN("PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3- iGarage3Style: ", iGarage3Style, " iGarage3Lighting: ", iGarage3Lighting, " iGarage3Number: ", iGarage3Number) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iGarage3Style:", iGarage3Style, " iGarage3Lighting:", iGarage3Lighting, " iGarage3Number:", iGarage3Number) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iGarage3Style) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3_LIGHTING, iGarage3Lighting) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3_NUMBERING, iGarage3Number) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iGarage3Style IF GET_PROPERTY_RESTRICTED_SLOT(iBuyPropertyIndex) = GET_PROPERTY_RESTRICTED_SLOT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) AND bUpgradingOfficeGarage SET_PLAYER_RENOVATED_OFFICE_GARAGE_FLAG(TRUE) ENDIF ELIF iResultSlot = PROPERTY_OWNED_SLOT_IE_WAREHOUSE SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_IE_WAREHOUSE, iBuyPropertyIndex) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_IE_WAREHOUSE_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) IF IS_PROPERTY_CUSTOM_APARTMENT(iBuyPropertyIndex) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant:", iCustomAptVariant) SET_INTERIOR_STAT_FOR_CUSTOM_APT(iResultSlot, iCustomAptVariant) GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iPropertyVariant[iResultSlot] = iCustomAptVariant ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\", iBuyPropertyIndex:", iBuyPropertyIndex, " iCustomAptVariant: NONE") ENDIF // #IF FEATURE_TUNER // ELIF iResultSlot = PROPERTY_OWNED_SLOT_AUTOSHOP_PROPERTY //MAX_OWNED_PROPERTIES // SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_AUTO_SHOP_OWNED, iBuyPropertyIndex) // INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) // IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) // g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) // ELSE // g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 // ENDIF // SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_AUTO_SHOP_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) // ELSE // #ENDIF // #IF FEATURE_FIXER // ELIF iResultSlot = PROPERTY_OWNED_SLOT_SECURITY_OFFICE_GAR //MAX_OWNED_PROPERTIES //CDM PROPERTY STAT UPDATE // SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_SECURITY_OFFICE, iBuyPropertyIndex) // INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) // IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) // g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) // ELSE // g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 // ENDIF // SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_SECURITY_OFFICE_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) // ELSE // #ENDIF CASSERTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: unknown iResultSlot: \"", GET_STRING_FROM_PROPERTY_OWNED_SLOT(iResultSlot), "\"") ENDIF SWITCH GET_PROPERTY_SIZE_TYPE(iBuyPropertyIndex) CASE PROP_SIZE_TYPE_SMALL_APT CASE PROP_SIZE_TYPE_MED_APT CASE PROP_SIZE_TYPE_LARGE_APT SET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_BUY_APPARTMENT, TRUE) SET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_BUY_GARAGE , TRUE) FALLTHRU// because all houses have garages CASE PROP_SIZE_TYPE_2_GAR CASE PROP_SIZE_TYPE_6_GAR CASE PROP_SIZE_TYPE_10_GAR SET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_BUY_GARAGE , TRUE) BREAK ENDSWITCH IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) IF HAS_MP_CRIMINAL_ENTERPRISE_PREMIUM_OR_STARTER_ACCESS() SWITCH iBuyPropertyIndex CASE PROPERTY_OFFICE_2_BASE SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_PROPERTY_MAZE_BANK_WEST_EXECUTIVE_OFFICE) BREAK CASE PROPERTY_CLUBHOUSE_4_BASE_A SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_PROPERTY_GREAT_CHAPARRAL_BIKER_CLUBHOUSE) BREAK CASE PROPERTY_LOW_APT_2 SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_PROPERTY_1561_SAN_VITAS_STREET_APARTMENT) BREAK CASE PROPERTY_GARAGE_NEW_19 SET_PLAYER_PURCHASED_CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT(CRIMINAL_ENTERPRISE_STARTER_PACK_CONTENT_PROPERTY_1337_EXCEPTIONALISTS_WAY_10_CAR_GARAGE) BREAK DEFAULT CASSERTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: unknown free Criminal Enterprise Starter Pack property ", iBuyPropertyIndex) BREAK ENDSWITCH ENDIF ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Special","WEB_NAVIGATION_SOUNDS_PHONE") //REQUEST_SAVE(STAT_SAVETYPE_END_SHOPPING) //REQUEST_SAVE(STAT_SAVETYPE_SCRIPT_MP_GLOBALS) bBrowserShoppingSavePending = TRUE CHECK_AMERICAN_DREAM_ACHIEVEMENT() //bBoughtProperty = TRUE CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase complete, index #", iBuyPropertyIndex) IF IS_PROPERTY_OFFICE(iBuyPropertyIndex) POPULATE_MP_EXEC_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_SUCCESS", TRUE, bUpgradingOffice, FALSE, FALSE, rpmt_0) ELIF IS_PROPERTY_CLUBHOUSE(iBuyPropertyIndex) #IF FEATURE_GEN9_STANDALONE // if this is a purchase rather than an upgrade, report activity as complete IF NOT bUpgradingClubhouse NETWORK_POST_UDS_ACTIVITY_END("PurchasePropertyClubhouse", UDS_ACTIVITY_END_REASON_COMPLETED) ENDIF #ENDIF // FEATURE_GEN9_STANDALONE #IF FEATURE_DLC_1_2022 IF !bUpgradingClubhouse CLEAR_BIKER_CLIENT_VEHICLE_STATS() CLEAR_BIKER_CLIENT_DELIVERY_DATA() ENDIF #ENDIF POPULATE_MP_BIKER_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_SUCCESS", TRUE, bUpgradingClubhouse, FALSE, FALSE, rpmt_0) ELIF IS_PROPERTY_OFFICE_GARAGE(iBuyPropertyIndex) POPULATE_MP_EXEC_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_SUCCESS", TRUE, bUpgradingOfficeGarage, FALSE, FALSE, rpmt_0) ELSE POPULATE_MP_PROPERTY_SITE_PIN_MAP(mov) ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase complete, refreshing pin map") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE iBoughtPropertyIndex = iBuyPropertyIndex eBoughtFactoryIndex = FACTORY_ID_INVALID eBoughtHangarIndex = HANGAR_ID_INVALID eBoughtDefunctBaseIndex = DEFUNCT_BASE_ID_INVALID eBoughtNightclubIndex = NIGHTCLUB_ID_INVALID eBoughtArenaIndex = ARENA_GARAGE_ID_INVALID eBoughtArcadeIndex = ARCADE_PROPERTY_ID_INVALID eBoughtCasinoIndex = CASINO_APARTMENT_ID_INVALID eBoughtAutoShopIndex = AUTO_SHOP_PROPERTY_ID_INVALID #IF FEATURE_FIXER eBoughtFixerHQIndex = FIXER_HQ_ID_INVALID #ENDIF iBoughtCasinoPreset = -1 REQUEST_SAVE(SSR_REASON_VEH_STORAGE_UPDATE,STAT_SAVETYPE_CRITICAL) CPRINTLN(DEBUG_INTERNET, "BUY_MP_PROPERTY_FROM_WEBSITE: purchase complete, resetting iCustomAptVariant to 1") ENDPROC PROC BUY_MP_FACTORY_FROM_WEBSITE(FACTORY_ID eFactoryId, INT &iResultSlot) INT minPendingTransactionValue, finalPendingTransactionValue, iOwnedFactoryValue INT iBankBalance = NETWORK_GET_VC_BANK_BALANCE() INT iWalletBalance = NETWORK_GET_VC_WALLET_BALANCE() IF NOT IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE) IF GET_PLAYER_RANK(GET_PLAYER_INDEX()) < 5 CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, player doesn't have sufficient rank (", GET_PLAYER_RANK(GET_PLAYER_INDEX()), ")") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, player pending unlock for sufficient rank") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK_PENDING ENDIF SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_1_FACTORY) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF INT iCurrentMission = GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) IF (iCurrentMission = FMMC_TYPE_GUNRUNNING_BUY OR iCurrentMission = FMMC_TYPE_GUNRUNNING_SELL OR iCurrentMission = FMMC_TYPE_GUNRUNNING_DEFEND #IF FEATURE_DLC_1_2022 OR iCurrentMission = FMMC_TYPE_SOURCE_RESEARCH #ENDIF) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, player current gang boss mission: ", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission)) mpPropertySiteFailReason = MPSFR_ON_MISSION SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_1_FACTORY) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF #IF FEATURE_CASINO_HEIST IF GB_GET_CASINO_HEIST_PREP_PLAYER_IS_ON(PLAYER_ID()) = CHV_ARMORED_EQUIPMENT_1 CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, player on CHV_ARMORED_EQUIPMENT_1") mpPropertySiteFailReason = MPSFR_ON_MISSION SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_1_FACTORY) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF #ENDIF IF USE_SERVER_TRANSACTIONS() IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CWARNINGLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed - session pending!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_1_FACTORY) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF TEXT_LABEL_15 tl_15FactoryName = GET_FACTORY_NAME_FROM_ID(eFactoryId) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: trying to purchase factory ", tl_15FactoryName, " #", eFactoryId) INT propval = CEIL(TO_FLOAT(GET_FACTORY_PRICE(eFactoryId))*g_sMPTunables.fPropertyMultiplier) IF SHOULD_FACTORY_BE_FREE_FOR_PLAYER(eFactoryId) propval = 0 ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase valid, attempting index ", tl_15FactoryName, " $", propval) minPendingTransactionValue = propval FACTORY_ID eTradeInFactory = GET_OWNED_BUNKER(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: currently owns factory #", eFactoryId) BOOL bRenovateFactory = FALSE IF (eFactoryId = eTradeInFactory) IF GET_LOCAL_PLAYER_USING_OFFICE_SEATID() != -1 CWARNINGLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed - using office seat ", GET_LOCAL_PLAYER_USING_OFFICE_SEATID(), "!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_1_FACTORY) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF propval = CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES(eFactoryId, sBunker_price_struct) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: renovate ", tl_15FactoryName, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) bRenovateFactory = TRUE ELSE IF IS_PAID_RESUPPLY_TIMER_RUNNING(BUNKER_SAVE_SLOT) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, paid resupply timer running") mpPropertySiteFailReason = MPSFR_PAID_RESUPPLY SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_1_FACTORY) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF propval += CALCULATE_COST_OF_BUNKER_INTERIOR_UPGRADES(eFactoryId, sBunker_price_struct) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase ", tl_15FactoryName, " for ", eTradeInFactory, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ENDIF minPendingTransactionValue = propval //is it a debit or refund IF eTradeInFactory = FACTORY_ID_INVALID OR eTradeInFactory = FACTORY_ID_MAX OR bRenovateFactory IF minPendingTransactionValue > 0 //do they have enough money // IF (iBankBalance+iWalletBalance) < minPendingTransactionValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", minPendingTransactionValue) // IF (minPendingTransactionValue <= 0 // OR (minPendingTransactionValue > 0 AND ((iBankBalance+iWalletBalance) < minPendingTransactionValue))) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < minPendingTransactionValue $", minPendingTransactionValue, "]") // mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, TRUE) // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // // TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15FactoryName), minPendingTransactionValue) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // EXIT // ENDIF IF (minPendingTransactionValue <= 0 OR (minPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", minPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_1_FACTORY) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15FactoryName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF // ENDIF ENDIF ELSE //is it a debit or refund IF minPendingTransactionValue >0 //do they have enough money // IF (iBankBalance+iWalletBalance) < minPendingTransactionValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", minPendingTransactionValue) // IF (minPendingTransactionValue <= 0 // OR (minPendingTransactionValue > 0 AND ((iBankBalance+iWalletBalance) < minPendingTransactionValue))) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < minPendingTransactionValue $", minPendingTransactionValue, "]") // mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, TRUE) // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // // TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15FactoryName), minPendingTransactionValue) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // EXIT // ENDIF IF (minPendingTransactionValue <= 0 OR (minPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", minPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_1_FACTORY) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15FactoryName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF // ENDIF ENDIF iResultSlot = GET_SAVE_SLOT_FOR_FACTORY(eTradeInFactory) INT iReplaceSpecificPropertySlot REPLACE_MP_VEH_OR_PROP_MENU replaceMenu WHILE NOT RUN_REPLACE_PROPERTY_MENU(replaceMenu,iResultSlot,ENUM_TO_INT(eFactoryId),iReplaceSpecificPropertySlot,rpmt_1_FACTORY) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() //RENDER_BROWSER() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE IF iResultSlot = -1 mpPropertySiteFailReason = MPSFR_CANCELED SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_1_FACTORY) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE g_iPendingBrowserTimer = g_iBrowserTimer PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") CPRINTLN(DEBUG_INTERNET, "CDM: BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, player backed out of property selection") EXIT ELSE // eTradeInFactory = GET_FACTORY_ID_FROM_FACTORY_SLOT(PLAYER_ID(), iResultSlot) iOwnedFactoryValue = GET_FACTORY_SALE_VALUE(eTradeInFactory) finalPendingTransactionValue = propval - iOwnedFactoryValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: Player selected iResultSlot ", iResultSlot, ", factory: ", eTradeInFactory, " for trade. propval $", propval, ", iOwnedFactoryValue: ", iOwnedFactoryValue, " 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 CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " + trade:$", iOwnedFactoryValue, " <> $", finalPendingTransactionValue) // IF (iBankBalance+iWalletBalance+ GET_FACTORY_SALE_VALUE(eTradeInFactory)) < finalPendingTransactionValue // CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash after trade selection [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < finalPendingTransactionValue finalPendingTransactionValue:$", finalPendingTransactionValue, "]") // mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, TRUE) // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // // TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15FactoryName), finalPendingTransactionValue) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // EXIT // ENDIF IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_1_FACTORY) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15FactoryName), finalPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ENDIF INT iDecor, iAccommodation, iFiringRange, iGunLocker, iTransportation GET_SCALEFORM_FACTORY_DATA(iDecor, iAccommodation, iFiringRange, iGunLocker, iTransportation) IF USE_SERVER_TRANSACTIONS() INT iPropval IF eFactoryId = eTradeInFactory iPropval = 0 ELSE iPropval = CEIL(TO_FLOAT(GET_FACTORY_PRICE(eFactoryId))*g_sMPTunables.fPropertyMultiplier) ENDIF BOOL bStarterPackItem = FALSE IF SHOULD_FACTORY_BE_FREE_FOR_PLAYER(eFactoryID) bStarterPackItem = TRUE ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_FACTORY_KEY_FOR_CATALOGUE(eFactoryId, bStarterPackItem) INT iInventoryKey = GET_FACTORY_INVENTORY_KEY_FOR_CATALOGUE(5) //bunker INT iSellingItemId = 0 IF eTradeInFactory != FACTORY_ID_INVALID AND eTradeInFactory != FACTORY_ID_MAX iSellingItemId = GET_FACTORY_KEY_FOR_CATALOGUE(eTradeInFactory) //for selling factory BOOL bSellingFactoryVariation = FALSE iOwnedFactoryValue = GET_FACTORY_SALE_VALUE(eTradeInFactory) IF SHOULD_FACTORY_BE_FREE_FOR_PLAYER(eTradeInFactory) IF (iOwnedFactoryValue = 0) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: free factory stat to get for \"", GET_FACTORY_NAME_FROM_ID(eTradeInFactory), "\", iOwnedFactoryValue:$FREE") bSellingFactoryVariation = TRUE iOwnedFactoryValue = 0 ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: no free factory stat to get for \"", GET_FACTORY_NAME_FROM_ID(eTradeInFactory), "\", iOwnedFactoryValue:$", iOwnedFactoryValue) ENDIF ENDIF iSellingItemId = GET_FACTORY_KEY_FOR_CATALOGUE(eTradeInFactory, bSellingFactoryVariation) IF (bRenovateFactory) CPRINTLN(DEBUG_INTERNET, "[BASKET] - Renovating in factory slot \"", GET_FACTORY_NAME_FROM_ID(eTradeInFactory), "\" iSellingItemId ", iSellingItemId, " iItemId ", iItemId, " iOwnedFactoryValue $", iOwnedFactoryValue) ELSE CPRINTLN(DEBUG_INTERNET, "[BASKET] - Trading in factory slot \"", GET_FACTORY_NAME_FROM_ID(eTradeInFactory), "\" iSellingItemId ", iSellingItemId, " iItemId ", iItemId, " iOwnedFactoryValue $", iOwnedFactoryValue) ENDIF #IF IS_DEBUG_BUILD TEXT_LABEL_15 tlOwnedResultSlotFactory = GET_FACTORY_NAME_FROM_ID(eTradeInFactory) IF IS_STRING_NULL_OR_EMPTY(tlOwnedResultSlotFactory) CASSERTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: label for traded factory[\"", GET_FACTORY_NAME_FROM_ID(eTradeInFactory), "\"] index #", eTradeInFactory, " is empty!") ELSE CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: label for traded factory[\"", GET_FACTORY_NAME_FROM_ID(eTradeInFactory), "\"] index #", eTradeInFactory, " is \"", tlOwnedResultSlotFactory, "\"") ENDIF #ENDIF // ENDIF INT iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT /////////////////////////////////////////// /// TRANSACTION FOR FACTORY WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, iPropval, iResultSlot, CATEGORY_INVENTORY_WAREHOUSE, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemId, iInventoryKey, 0, iOwnedFactoryValue, iSellingItemId) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) RENDER_BROWSER() SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, failed to process transaction") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_1_FACTORY) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: success!!") BREAK DEFAULT mpPropertySiteFailReason = MPSFR_NOT_SAFE CASSERTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase failed, unknown iProcessSuccess: \"", iProcessSuccess, "\"") EXIT BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: final:$", finalPendingTransactionValue, ", propval $", propval) //Assign the telemetry data //Increment the spending stat IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF SPENT_ON_BUNKER data //Check if we're trading of just buying IF (eTradeInFactory = FACTORY_ID_INVALID) OR (eTradeInFactory = FACTORY_ID_MAX) OR (bRenovateFactory) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = propval IF (sBunker_price_struct.iDecorPrice >= 0) SWITCH iDecor CASE 0 data.m_style = 3 BREAK //url:bugstar:3770268 CASE 1 data.m_style = 1 BREAK CASE 2 data.m_style = 2 BREAK DEFAULT data.m_style = iDecor BREAK ENDSWITCH data.m_style_amount = sBunker_price_struct.iDecorPrice iFinalPropValue -= data.m_style_amount ENDIF IF (sBunker_price_struct.iAccommodationPrice >= 0) data.m_personalquarter = iAccommodation data.m_personalquarter_amount = sBunker_price_struct.iAccommodationPrice iFinalPropValue -= data.m_personalquarter_amount ENDIF IF (sBunker_price_struct.iFiringRangePrice >= 0) data.m_firingrange = iFiringRange data.m_firingrange_amount = sBunker_price_struct.iFiringRangePrice iFinalPropValue -= data.m_firingrange_amount ENDIF IF (sBunker_price_struct.iGunLockerPrice >= 0) data.m_gunlocker = iGunLocker data.m_gunlocker_amount = sBunker_price_struct.iGunLockerPrice iFinalPropValue -= data.m_gunlocker_amount ENDIF IF (sBunker_price_struct.iTransportationPrice >= 0) data.m_caddy = iTransportation data.m_caddy_amount = sBunker_price_struct.iTransportationPrice iFinalPropValue -= data.m_caddy_amount ENDIF IF (iFinalPropValue >= 0) OR (SHOULD_FACTORY_BE_FREE_FOR_PLAYER(eFactoryID) AND NOT bRenovateFactory) data.m_location = GET_HASH_KEY(GET_FACTORY_NAME_FROM_ID(eFactoryId)) data.m_location_amount = iFinalPropValue ENDIF IF NOT bRenovateFactory CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: Bought factory for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_personalquarter:", data.m_personalquarter, " m_personalquarter_amount:$", data.m_personalquarter_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_firingrange:", data.m_firingrange, " m_firingrange_amount:$", data.m_firingrange_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_gunlocker:", data.m_gunlocker, " m_gunlocker_amount:$", data.m_gunlocker_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_caddy:", data.m_caddy, " m_caddy_amount:$", data.m_caddy_amount) NETWORK_SPENT_BUY_BUNKER(propval, FALSE, TRUE, data) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: Renovate factory for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_personalquarter:", data.m_personalquarter, " m_personalquarter_amount:$", data.m_personalquarter_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_firingrange:", data.m_firingrange, " m_firingrange_amount:$", data.m_firingrange_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_gunlocker:", data.m_gunlocker, " m_gunlocker_amount:$", data.m_gunlocker_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_caddy:", data.m_caddy, " m_caddy_amount:$", data.m_caddy_amount) NETWORK_SPENT_UPRADE_BUNKER(propval, FALSE, TRUE, data) ENDIF UNLOCK_CLOTHING_AWARD(CLOTHING_AWARD_PURCH_BUNKER) IF NOT bRenovateFactory SET_FACTORY_AS_OWNED(eFactoryId) ENDIF // Set up phonecall for purchasing bunker INT iStatInt = GET_MP_INT_CHARACTER_STAT(MP_STAT_HELP_BUNK_EMAIL) IF NOT IS_BIT_SET(iStatInt, biGR_Help_BOUGHT_BUNKER_CALL) PRINTLN("BUY_MP_FACTORY_FROM_WEBSITE: [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - eGB_LOCAL_GUNRUN_CALL_BITSET_NOTIFICATION_FLOW_PURCHASE_BUNKER - Requested call for purchasing a bunker") GB_SET_LOCAL_GUNRUN_CALL_BIT(eGB_LOCAL_GUNRUN_CALL_BITSET_NOTIFICATION_FLOW_PURCHASE_BUNKER) IF GB_IS_LOCAL_GUNRUN_CALL_BIT_SET(eGB_LOCAL_GUNRUN_CALL_BITSET_NOTIFICATION_FLOW_NO_BUNKER) PRINTLN("BUY_MP_FACTORY_FROM_WEBSITE: [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - Clearing call request for not owning a bunker") GB_CLEAR_LOCAL_GUNRUN_CALL_BIT(eGB_LOCAL_GUNRUN_CALL_BITSET_NOTIFICATION_FLOW_NO_BUNKER) ENDIF SET_BIT(iStatInt, biGR_Help_BOUGHT_BUNKER_CALL) SET_MP_INT_CHARACTER_STAT(MP_STAT_HELP_BUNK_EMAIL, iStatInt) g_bResetTruckReminder = TRUE IF IS_BIT_SET(MPGlobalsAmbience.iFmGbHelpBitSet3, BI_FM_GANG_BOSS_HELP_3_TRUCK_AVAILABLE_REMINDER_TEXT) CLEAR_BIT(MPGlobalsAmbience.iFmGbHelpBitSet3, BI_FM_GANG_BOSS_HELP_3_TRUCK_AVAILABLE_REMINDER_TEXT) PRINTLN("BUY_MP_FACTORY_FROM_WEBSITE: [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - Player has already received reminder text about buying a truck, resetting as we've just bought a bunker") ENDIF ELSE PRINTLN("BUY_MP_FACTORY_FROM_WEBSITE: [GUNRUN_CALL] - MAINTAIN_GUNRUNNING_NOTIFICATIONS - Buying a bunker but already made the call, ignoring") ENDIF // // Update scaleform with the new businees status. // ADD_FACTORY_TO_SCALEFORM_MOVIE(id) // // Set a flag so that closing the overlay forces the site to display the homepage // bGoHome = TRUE //Clear the help call bits GB_CLEAR_LOCAL_BIKER_CALL_BIT(eGB_LOCAL_BIKER_CALL_BITSET_NOTIFICATION_GET_BUSINESS_0) GB_CLEAR_LOCAL_BIKER_CALL_BIT(eGB_LOCAL_BIKER_CALL_BITSET_NOTIFICATION_GET_BUSINESS_1) START_FACTORY_DEFEND_MISSION_TIMER(GET_SAVE_SLOT_FOR_FACTORY(eFactoryId)) SAVE_FACOTRY_DEFEND_TIMER_FOR_SLOT(GET_SAVE_SLOT_FOR_FACTORY(eFactoryId)) SET_PACKED_STAT_BOOL(GET_STAT_ENUM_FOR_FACTORY_SETUP_DELAY_TIMER_SLOT(iResultSlot), FALSE) CLEAR_FACTORY_STAFF_ARRIVED_TEXT_MESSAGES(iResultSlot) CLEAR_FACTORY_PRODUCTION_LJT_CALL_TRIGGERS(iResultSlot) // //Set the flag to request a save when we leave the app // bRequestSave = TRUE // // Notify the player. // SHOW_OVERLAY(2001, "OR_PUR_SUC", "OR_OVRLY_OK", "") ELIF GET_FACTORY_BASE_PRICE(eTradeInFactory) > 0 IF (iOwnedFactoryValue != 0) OR SHOULD_FACTORY_BE_FREE_FOR_PLAYER(eTradeInFactory) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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_FACTORY_FROM_WEBSITE: Trading the business ", eTradeInFactory, " is earning the player:$", iOwnedFactoryValue) NETWORK_EARN_FROM_SELL_BUNKER(iOwnedFactoryValue, GET_HASH_KEY(GET_FACTORY_NAME_FROM_ID(eTradeInFactory))) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: Trading the business ", eTradeInFactory, " earning nothing for the player:$", iOwnedFactoryValue, " as was free") ENDIF IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = finalPendingTransactionValue iFinalPropValue += iOwnedFactoryValue IF (sBunker_price_struct.iDecorPrice >= 0) data.m_style = iDecor data.m_style_amount = sBunker_price_struct.iDecorPrice iFinalPropValue -= data.m_style_amount ENDIF IF (sBunker_price_struct.iAccommodationPrice >= 0) data.m_personalquarter = iAccommodation data.m_personalquarter_amount = sBunker_price_struct.iAccommodationPrice iFinalPropValue -= data.m_personalquarter_amount ENDIF IF (sBunker_price_struct.iFiringRangePrice >= 0) data.m_firingrange = iFiringRange data.m_firingrange_amount = sBunker_price_struct.iFiringRangePrice iFinalPropValue -= data.m_firingrange_amount ENDIF IF (sBunker_price_struct.iGunLockerPrice >= 0) data.m_gunlocker = iGunLocker data.m_gunlocker_amount = sBunker_price_struct.iGunLockerPrice iFinalPropValue -= data.m_gunlocker_amount ENDIF IF (sBunker_price_struct.iTransportationPrice >= 0) data.m_caddy = iTransportation data.m_caddy_amount = sBunker_price_struct.iTransportationPrice iFinalPropValue -= data.m_caddy_amount ENDIF IF (iFinalPropValue >= 0) OR (SHOULD_FACTORY_BE_FREE_FOR_PLAYER(eFactoryID)) data.m_location = GET_HASH_KEY(GET_FACTORY_NAME_FROM_ID(eFactoryId)) data.m_location_amount = iFinalPropValue ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: Trading factory for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_personalquarter:", data.m_personalquarter, " m_personalquarter_amount:$", data.m_personalquarter_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_firingrange:", data.m_firingrange, " m_firingrange_amount:$", data.m_firingrange_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_gunlocker:", data.m_gunlocker, " m_gunlocker_amount:$", data.m_gunlocker_amount) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: m_caddy:", data.m_caddy, " m_caddy_amount:$", data.m_caddy_amount) NETWORK_SPENT_BUY_BUNKER(propval, FALSE, TRUE, data) TRADE_BIKER_FACTORY(eFactoryId, eTradeInFactory) // // Update scaleform with the new businees status. // ADD_FACTORY_TO_SCALEFORM_MOVIE(ENUM_TO_INT(eOldFactory)) // ADD_FACTORY_TO_SCALEFORM_MOVIE(ENUM_TO_INT(eFactoryId)) // // Set a flag so that closing the overlay forces the site to display the homepage // bGoHome = TRUE // //Set the flag to request a save when we leave the app // bRequestSave = TRUE // // Notify the player. // SHOW_OVERLAY(2001, "OR_PUR_SUC", "OR_OVRLY_OK", "") ENDIF IF NOT bRenovateFactory IF SHOULD_FACTORY_BE_FREE_FOR_PLAYER(eFactoryId) SET_FACTORY_PAID_FOR_PURCHASE_PRICE(5, 0) ELSE SET_FACTORY_PAID_FOR_PURCHASE_PRICE(5, propval) ENDIF ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: iDecor: ", iDecor) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: iAccommodation: ", iAccommodation) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: iFiringRange: ", iFiringRange) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: iGunLocker: ", iGunLocker) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: iTransportation: ", iTransportation) // SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_DECOR, 0) // GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBunkerDecor = iDecor SWITCH iDecor CASE 0 // Bunker style A SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_DECOR, 0) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree, PROPERTY_BROADCAST_BS3_OWNS_BUNKER_DECOR_1) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree, PROPERTY_BROADCAST_BS3_OWNS_BUNKER_DECOR_2) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree, PROPERTY_BROADCAST_BS3_OWNS_BUNKER_DECOR_3) BREAK CASE 1 // Bunker style B SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_DECOR, 1) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree, PROPERTY_BROADCAST_BS3_OWNS_BUNKER_DECOR_1) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree, PROPERTY_BROADCAST_BS3_OWNS_BUNKER_DECOR_2) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree, PROPERTY_BROADCAST_BS3_OWNS_BUNKER_DECOR_3) BREAK CASE 2 // Bunker style C SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_DECOR, 2) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree, PROPERTY_BROADCAST_BS3_OWNS_BUNKER_DECOR_1) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree, PROPERTY_BROADCAST_BS3_OWNS_BUNKER_DECOR_2) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree, PROPERTY_BROADCAST_BS3_OWNS_BUNKER_DECOR_3) BREAK ENDSWITCH IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iAccommodation) IF (GET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_SAVEBED) != iAccommodation) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: set bunker spawn, player bought accomodation") SET_MP_SPAWN_POINT_SETTING(MP_SETTING_SPAWN_BUNKER) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: set bunker spawn, player already has accom so not a renovation") ENDIF ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iAccommodation) SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_SAVEBED, 1) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_SAVEBED) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_SAVEBED, 0) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_SAVEBED) ENDIF SWITCH iFiringRange CASE 0 //no firing range SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_FIRING_RANGE, 0) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_BLACK_FIRING_RANGE) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_WHITE_FIRING_RANGE) BREAK CASE 1 //black firing range SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_FIRING_RANGE, 1) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_BLACK_FIRING_RANGE) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_WHITE_FIRING_RANGE) BREAK CASE 2 //white firing range SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_FIRING_RANGE, 2) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_BLACK_FIRING_RANGE) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_WHITE_FIRING_RANGE) BREAK ENDSWITCH IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(iGunLocker) SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_GUNLOCKER, 1) SET_PLAYER_BUNKER_GUNLOCKER_PURCHASED(TRUE) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_GUNLOCKER, 0) SET_PLAYER_BUNKER_GUNLOCKER_PURCHASED(FALSE) IF SHOULD_ALLOW_DISABLE_WEAPON_LOADOUT_FROM_INTERNET() SET_CUSTOM_WEAPON_LOADOUT(FALSE) RESET_CUSTOM_WEAPON_LOADOUT_STATS() ENDIF ENDIF SWITCH iTransportation CASE 0 //no transportation SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_TRANSPORTATION, 0) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_TRANSPORTATION_STANDARD) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_TRANSPORTATION_UPDATED) BREAK CASE 1 //standard transportation SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_TRANSPORTATION, 1) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_TRANSPORTATION_STANDARD) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_TRANSPORTATION_UPDATED) BREAK CASE 2 //updated transportation SET_MP_INT_CHARACTER_STAT(MP_STAT_BUNKER_TRANSPORTATION, 2) CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_TRANSPORTATION_STANDARD) SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBSThree,PROPERTY_BROADCAST_BS3_OWNS_BUNKER_TRANSPORTATION_UPDATED) BREAK ENDSWITCH enumCharacterList CharacterToAdd = GET_GUNRUNNING_CONTACT() IF NOT IS_CONTACT_IN_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK) BOOL bDisplay = FALSE // INT iStatInt = GET_MP_INT_CHARACTER_STAT(MP_STAT_FM_NON_MS_HELP_TEXT_unknown) // IF NOT IS_BIT_SET(iStatInt, BI_FM_NMH11_UNLOCKED_BUNKER_unknown) // SET_BIT(iStatInt, BI_FM_NMH11_UNLOCKED_BUNKER_unknown) // SET_MP_INT_CHARACTER_STAT(MP_STAT_FM_NON_MS_HELP_TEXT_unknown, iStatInt) // bDisplay = TRUE // ENDIF ADD_CONTACT_TO_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK,bDisplay) CPRINTLN(DEBUG_INTERNET, "[BUNKER_CONTACT] MAINTAIN_ADD_GUNRUNNING_BUNKER_CONTACT - ADD_CONTACT_TO_PHONEBOOK(", g_sCharacterSheetAll[CharacterToAdd].label, ", MULTIPLAYER_BOOK, ", bDisplay, ")") ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Special","WEB_NAVIGATION_SOUNDS_PHONE") //REQUEST_SAVE(STAT_SAVETYPE_END_SHOPPING) //REQUEST_SAVE(STAT_SAVETYPE_SCRIPT_MP_GLOBALS) bBrowserShoppingSavePending = TRUE CHECK_AMERICAN_DREAM_ACHIEVEMENT() //bBoughtProperty = TRUE POPULATE_MP_BIKER_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_SUCCESS", TRUE, bRenovateFactory, FALSE, FALSE, rpmt_1_FACTORY) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase complete, refreshing pin map") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE iBoughtPropertyIndex = -1 eBoughtFactoryIndex = eFactoryId eBoughtHangarIndex = HANGAR_ID_INVALID eBoughtDefunctBaseIndex = DEFUNCT_BASE_ID_INVALID eBoughtNightclubIndex = NIGHTCLUB_ID_INVALID eBoughtArenaIndex = ARENA_GARAGE_ID_INVALID eBoughtArcadeIndex = ARCADE_PROPERTY_ID_INVALID eBoughtCasinoIndex = CASINO_APARTMENT_ID_INVALID eBoughtAutoShopIndex = AUTO_SHOP_PROPERTY_ID_INVALID #IF FEATURE_FIXER eBoughtFixerHQIndex = FIXER_HQ_ID_INVALID #ENDIF iBoughtCasinoPreset = -1 CPRINTLN(DEBUG_INTERNET, "BUY_MP_FACTORY_FROM_WEBSITE: purchase complete, resetting iCustomAptVariant to 1") ENDPROC PROC BUY_MP_HANGAR_FROM_WEBSITE(HANGAR_ID eHangarID, INT &iResultSlot) INT minPendingTransactionValue, finalPendingTransactionValue, iOwnedHangarValue INT iBankBalance = NETWORK_GET_VC_BANK_BALANCE() INT iWalletBalance = NETWORK_GET_VC_WALLET_BALANCE() IF NOT IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE) IF GET_PLAYER_RANK(GET_PLAYER_INDEX()) < 5 CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, player doesn't have sufficient rank (", GET_PLAYER_RANK(GET_PLAYER_INDEX()), ")") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, player pending unlock for sufficient rank") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK_PENDING ENDIF SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_2_HANGAR) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF IF USE_SERVER_TRANSACTIONS() IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CWARNINGLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed - session pending!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_2_HANGAR) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF TEXT_LABEL_15 tl_15HangarName = GET_HANGAR_NAME_FROM_ID(eHangarID) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: trying to purchase hangar ", tl_15HangarName, " #", eHangarID) INT propval = CEIL(TO_FLOAT(GET_HANGAR_PRICE(eHangarID))*g_sMPTunables.fPropertyMultiplier) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase valid, attempting index ", tl_15HangarName, " $", propval) minPendingTransactionValue = propval HANGAR_ID eTradeInHangar = GET_PLAYERS_OWNED_HANGAR(PLAYER_ID()) IF eTradeInHangar != HANGAR_ID_INVALID CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: currently owns hangar #", eTradeInHangar) INT iCurrentMission = GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) AND (iCurrentMission = FMMC_TYPE_SMUGGLER_BUY OR iCurrentMission = FMMC_TYPE_SMUGGLER_SELL OR iCurrentMission = FMMC_TYPE_SMUGGLER_WEAPONIZED_AIR_VEHICLE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, player current gang boss mission: ", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission)) mpPropertySiteFailReason = MPSFR_ON_MISSION SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_2_HANGAR) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF BOOL bRenovateHangar = FALSE IF (eHangarID = eTradeInHangar) IF GET_LOCAL_PLAYER_USING_OFFICE_SEATID() != -1 CWARNINGLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed - using office seat ", GET_LOCAL_PLAYER_USING_OFFICE_SEATID(), "!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_2_HANGAR) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF propval = CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES(eHangarID, sHangar_price_struct) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: renovate ", tl_15HangarName, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) bRenovateHangar = TRUE ELSE // IF GB_IS_PLAYER_ON_ANY_GANG_BOSS_MISSION // AND GB_IS_PLAYER_CRITICAL_TO_JOB IF eTradeInHangar != HANGAR_ID_INVALID IF NOT IS_PLAYERS_HANGAR_CONTRABAND_STORAGE_EMPTY(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed - can't trade, has stock!") mpPropertySiteFailReason = MPSFR_HAS_STOCK SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_2_HANGAR) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF propval += CALCULATE_COST_OF_HANGAR_INTERIOR_UPGRADES(eHangarID, sHangar_price_struct) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase ", tl_15HangarName, " for ", eTradeInHangar, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ENDIF minPendingTransactionValue = propval //is it a debit or refund IF eTradeInHangar = HANGAR_ID_INVALID OR eTradeInHangar = HANGAR_ID_MAX OR bRenovateHangar IF minPendingTransactionValue > 0 //do they have enough money // IF (iBankBalance+iWalletBalance) < minPendingTransactionValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", minPendingTransactionValue) // IF (minPendingTransactionValue <= 0 // OR (minPendingTransactionValue > 0 AND ((iBankBalance+iWalletBalance) < minPendingTransactionValue))) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < minPendingTransactionValue $", minPendingTransactionValue, "]") // mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE) // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // // TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15HangarName), minPendingTransactionValue) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // EXIT // ENDIF IF (minPendingTransactionValue <= 0 OR (minPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", minPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_2_HANGAR) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15HangarName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF // ENDIF ELSE //is it a debit or refund IF minPendingTransactionValue >0 //do they have enough money // IF (iBankBalance+iWalletBalance) < minPendingTransactionValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", minPendingTransactionValue) // IF (minPendingTransactionValue <= 0 // OR (minPendingTransactionValue > 0 AND ((iBankBalance+iWalletBalance) < minPendingTransactionValue))) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < minPendingTransactionValue $", minPendingTransactionValue, "]") // mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE) // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // // TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15HangarName), minPendingTransactionValue) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // EXIT // ENDIF IF (minPendingTransactionValue <= 0 OR (minPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", minPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_2_HANGAR) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15HangarName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF // ENDIF ENDIF // iResultSlot = GET_SAVE_SLOT_FOR_factory(eTradeInHangar) INT iReplaceSpecificPropertySlot REPLACE_MP_VEH_OR_PROP_MENU replaceMenu WHILE NOT RUN_REPLACE_PROPERTY_MENU(replaceMenu,iResultSlot,ENUM_TO_INT(eHangarID),iReplaceSpecificPropertySlot,rpmt_2_HANGAR) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() //RENDER_BROWSER() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE IF iResultSlot = -1 mpPropertySiteFailReason = MPSFR_CANCELED SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_2_HANGAR) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE g_iPendingBrowserTimer = g_iBrowserTimer PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") CPRINTLN(DEBUG_INTERNET, "CDM: BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, player backed out of property selection") EXIT ELSE // eTradeInHangar = GET_HANGAR_ID_FROM_factory_SLOT(PLAYER_ID(), iResultSlot) iOwnedHangarValue = GET_HANGAR_SALE_VALUE(eTradeInHangar) finalPendingTransactionValue = propval - iOwnedHangarValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: Player selected iResultSlot ", iResultSlot, ", hangar: ", eTradeInHangar, " for trade. propval $", propval, ", iOwnedHangarValue: ", iOwnedHangarValue, " 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 CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " + trade:$", iOwnedHangarValue, " <> $", finalPendingTransactionValue) // IF (iBankBalance+iWalletBalance+ GET_HANGAR_SALE_VALUE(eTradeInHangar)) < finalPendingTransactionValue // CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash after trade selection [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < finalPendingTransactionValue finalPendingTransactionValue:$", finalPendingTransactionValue, "]") // mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE) // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // // TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15HangarName), finalPendingTransactionValue) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // EXIT // ENDIF IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_2_HANGAR) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15HangarName), finalPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ENDIF HANGAR_DATA_STRUCT sHangarData GET_SCALEFORM_HANGAR_DATA(sHangarData) IF USE_SERVER_TRANSACTIONS() INT iPropval IF eHangarID = eTradeInHangar iPropval = 0 ELSE iPropval = CEIL(TO_FLOAT(GET_HANGAR_PRICE(eHangarID))*g_sMPTunables.fPropertyMultiplier) ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_HANGAR_KEY_FOR_CATALOGUE(eHangarID) INT iInventoryKey = GET_HANGAR_INVENTORY_KEY_FOR_CATALOGUE() INT iSellingItemId = 0 IF eTradeInHangar != HANGAR_ID_INVALID AND eTradeInHangar != HANGAR_ID_MAX iSellingItemId = GET_HANGAR_KEY_FOR_CATALOGUE(eTradeInHangar) ENDIF INT iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT /////////////////////////////////////////// /// TRANSACTION FOR HANGAR WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, iPropval, iResultSlot, CATEGORY_INVENTORY_WAREHOUSE, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemId, iInventoryKey, 0, iOwnedHangarValue, iSellingItemId) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) RENDER_BROWSER() SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, failed to process transaction") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_2_HANGAR) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: success!!") BREAK DEFAULT mpPropertySiteFailReason = MPSFR_NOT_SAFE CASSERTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase failed, unknown iProcessSuccess: \"", iProcessSuccess, "\"") EXIT BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: final:$", finalPendingTransactionValue, ", propval $", propval) //Assign the telemetry data //Increment the spending stat IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF SPEND_HANGAR data //Check if we're trading of just buying IF (eTradeInHangar = HANGAR_ID_INVALID) OR (eTradeInHangar = HANGAR_ID_MAX) OR (bRenovateHangar) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = propval IF (sHangar_price_struct.iFlooringPrice >= 0) OR NOT bRenovateHangar data.m_flooring = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_FLOORING, sHangarData.iFlooring)) data.m_flooring_amount = sHangar_price_struct.iFlooringPrice iFinalPropValue -= data.m_flooring_amount ENDIF IF (sHangar_price_struct.iAccommodationPrice >= 0) OR NOT bRenovateHangar data.m_livingQuarter = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_PERSONAL_QUARTERS, sHangarData.iSleepingQuarters)) data.m_livingQuarter_amount = sHangar_price_struct.iAccommodationPrice iFinalPropValue -= data.m_livingQuarter_amount ENDIF IF (sHangar_price_struct.iFurniturePrice >= 0) OR NOT bRenovateHangar data.m_furnitures = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_FURNITURE, sHangarData.iFurniture)) data.m_furnitures_amount = sHangar_price_struct.iFurniturePrice iFinalPropValue -= data.m_furnitures_amount ENDIF IF (sHangar_price_struct.iModshopPrice >= 0) OR NOT bRenovateHangar data.m_workshop = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_MODSHOP, sHangarData.iWorkshop)) data.m_workshop_amount = sHangar_price_struct.iModshopPrice iFinalPropValue -= data.m_workshop_amount ENDIF IF (sHangar_price_struct.iColourPrice >= 0) OR NOT bRenovateHangar data.m_style = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_STYLE, sHangarData.iStyle)) data.m_style_amount = sHangar_price_struct.iColourPrice iFinalPropValue -= data.m_style_amount ENDIF IF (sHangar_price_struct.iLightingPrice >= 0) OR NOT bRenovateHangar data.m_lighting = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_LIGHTING, sHangarData.iLighting)) data.m_lighting_amount = sHangar_price_struct.iLightingPrice iFinalPropValue -= data.m_lighting_amount ENDIF IF (iFinalPropValue >= 0) OR NOT bRenovateHangar data.m_location = GET_HASH_KEY(GET_HANGAR_NAME_FROM_ID(eHangarID)) data.m_location_amount = iFinalPropValue ENDIF IF NOT bRenovateHangar CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: Bought hangar for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_HANGAR_NAME_FROM_ID(eHangarID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_flooring:", data.m_flooring, " m_flooring_amount:$", data.m_flooring_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_FLOORING, sHangarData.iFlooring)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_furnitures:", data.m_furnitures, " m_furnitures_amount:$", data.m_furnitures_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_FURNITURE, sHangarData.iFurniture)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_workshop:", data.m_workshop, " m_workshop_amount:$", data.m_workshop_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_MODSHOP, sHangarData.iWorkshop)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_STYLE, sHangarData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_lighting:", data.m_lighting, " m_lighting_amount:$", data.m_lighting_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_LIGHTING, sHangarData.iLighting)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_livingQuarter:", data.m_livingQuarter, " m_livingQuarter_amount:$", data.m_livingQuarter_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_PERSONAL_QUARTERS, sHangarData.iSleepingQuarters)) NETWORK_SPENT_PURCHASE_HANGAR(propval, data, FALSE, TRUE) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: Renovate hangar for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_HANGAR_NAME_FROM_ID(eHangarID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_flooring:", data.m_flooring, " m_flooring_amount:$", data.m_flooring_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_FLOORING, sHangarData.iFlooring)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_furnitures:", data.m_furnitures, " m_furnitures_amount:$", data.m_furnitures_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_FURNITURE, sHangarData.iFurniture)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_workshop:", data.m_workshop, " m_workshop_amount:$", data.m_workshop_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_MODSHOP, sHangarData.iWorkshop)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_STYLE, sHangarData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_lighting:", data.m_lighting, " m_lighting_amount:$", data.m_lighting_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_LIGHTING, sHangarData.iLighting)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_livingQuarter:", data.m_livingQuarter, " m_livingQuarter_amount:$", data.m_livingQuarter_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_PERSONAL_QUARTERS, sHangarData.iSleepingQuarters)) NETWORK_SPENT_UPGRADE_HANGAR(propval, data, FALSE, TRUE) ENDIF // UNLOCK_CLOTHING_AWARD(CLOTHING_AWARD_PURCH_HANGAR) IF NOT bRenovateHangar SET_HANGAR_AS_OWNED(eHangarID) GB_SMUGGLER_SETUP_HANGAR_PURCHASED_FLOW_PHONECALL() ENDIF ELIF GET_HANGAR_BASE_PRICE(eTradeInHangar) > 0 // IF NOT SHOULD_HANGAR_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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_HANGAR_FROM_WEBSITE: Trading the business ", eTradeInHangar, " is earning the player:$", iOwnedHangarValue) SAFE_NETWORK_EARN_FROM_HANGAR_TRADE(iOwnedHangarValue, GET_HASH_KEY(GET_HANGAR_NAME_FROM_ID(eTradeInHangar))) // ELSE // CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: Trading the business ", eTradeInHangar, " is earning nothing the player:$", iOwnedHangarValue, " as was free") // ENDIF IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = finalPendingTransactionValue iFinalPropValue += iOwnedHangarValue // data.m_flooring = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_FLOORING, sHangarData.iFlooring)) data.m_flooring_amount = sHangar_price_struct.iFlooringPrice iFinalPropValue -= data.m_flooring_amount // data.m_livingQuarter = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_PERSONAL_QUARTERS, sHangarData.iSleepingQuarters)) data.m_livingQuarter_amount = sHangar_price_struct.iAccommodationPrice iFinalPropValue -= data.m_livingQuarter_amount // data.m_furnitures = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_FURNITURE, sHangarData.iFurniture)) data.m_furnitures_amount = sHangar_price_struct.iFurniturePrice iFinalPropValue -= data.m_furnitures_amount // data.m_workshop = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_MODSHOP, sHangarData.iWorkshop)) data.m_workshop_amount = sHangar_price_struct.iModshopPrice iFinalPropValue -= data.m_workshop_amount // data.m_style = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_STYLE, sHangarData.iStyle)) data.m_style_amount = sHangar_price_struct.iColourPrice iFinalPropValue -= data.m_style_amount // data.m_lighting = GET_HASH_KEY(GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_LIGHTING, sHangarData.iLighting)) data.m_lighting_amount = sHangar_price_struct.iLightingPrice iFinalPropValue -= data.m_lighting_amount // data.m_location = GET_HASH_KEY(GET_HANGAR_NAME_FROM_ID(eHangarID)) data.m_location_amount = iFinalPropValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: Trading hangar for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_HANGAR_NAME_FROM_ID(eHangarID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_flooring:", data.m_flooring, " m_flooring_amount:$", data.m_flooring_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_FLOORING, sHangarData.iFlooring)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_furnitures:", data.m_furnitures, " m_furnitures_amount:$", data.m_furnitures_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_FURNITURE, sHangarData.iFurniture)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_workshop:", data.m_workshop, " m_workshop_amount:$", data.m_workshop_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_MODSHOP, sHangarData.iWorkshop)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_STYLE, sHangarData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_lighting:", data.m_lighting, " m_lighting_amount:$", data.m_lighting_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_LIGHTING, sHangarData.iLighting)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: m_livingQuarter:", data.m_livingQuarter, " m_livingQuarter_amount:$", data.m_livingQuarter_amount, " ", GET_HANGAR_MOD_NAME_FROM_ID(eHANGAR_MOD_PERSONAL_QUARTERS, sHangarData.iSleepingQuarters)) NETWORK_SPENT_UPGRADE_HANGAR(propval, data, FALSE, TRUE) REMOTE_REQUEST_REMOVE_ALL_CONTRABAND_FROM_HANGAR() TRADE_HANGAR(eHangarID, eTradeInHangar) ENDIF INT iBuyPropertyIndex = PROPERTY_HANGAR SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_HANGAR, iBuyPropertyIndex) INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_NO_PROPERTIES_UNLOCK) IF NOT bRenovateHangar // IF NOT SHOULD_HANGAR_BE_FREE_FOR_PLAYER(eHangarID) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_HANGAR_VALUE, propval) // ELSE // SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_HANGAR_VALUE,0) // ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_HANGAR_VALUE_VALID, ENUM_TO_INT(eHangarID)) ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: iFloorDecal: ", sHangarData.iFlooring) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: iAccommodation: ", sHangarData.iSleepingQuarters) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: iFurniture: ", sHangarData.iFurniture) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: iModshop: ", sHangarData.iWorkshop) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: iColour: ", sHangarData.iStyle) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: iLighting: ", sHangarData.iLighting) SET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_FLOOR_DECAL, sHangarData.iFlooring) IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(sHangarData.iSleepingQuarters) IF (GET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_SAVEBED) != sHangarData.iSleepingQuarters) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: set hangar spawn, player bought accomodation") SET_MP_SPAWN_POINT_SETTING(MP_SETTING_SPAWN_HANGAR) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: set hangar spawn, player already has accom so not a renovation") ENDIF ENDIF SWITCH sHangarData.iSleepingQuarters CASE 0 //0. None. SET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_SAVEBED, 0) BREAK CASE 1 //2. Modern, comes with modern lighting. SET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_SAVEBED, 1) BREAK CASE 2 //3. Traditional, comes with traditional lighting. SET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_SAVEBED, 2) BREAK ENDSWITCH SWITCH sHangarData.iFurniture CASE 0 SET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_FURNITURE, 0) BREAK CASE 1 //1. Modern, comes with modern lighting. SET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_FURNITURE, 1) BREAK CASE 2 //2. Traditional, comes with traditional lighting. SET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_FURNITURE, 2) BREAK ENDSWITCH IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(sHangarData.iWorkshop) SET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_MODSHOP, 1) // SET_PLAYER_HANGAR_MODSHOP_PURCHASED(TRUE) ELSE SET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_MODSHOP, 0) // SET_PLAYER_HANGAR_MODSHOP_PURCHASED(FALSE) // SET_CUSTOM_WEAPON_LOADOUT(FALSE) // RESET_CUSTOM_WEAPON_LOADOUT_STATS() ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_COLOUR, sHangarData.iStyle) SET_MP_INT_CHARACTER_STAT(MP_STAT_HANGAR_LIGHTING, sHangarData.iLighting) BROADCAST_PLAYER_PURCHASED_HANGAR() enumCharacterList CharacterToAdd = GET_SMUGGLER_CONTACT() IF NOT IS_CONTACT_IN_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK) BOOL bDisplay = FALSE ADD_CONTACT_TO_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK,bDisplay) CPRINTLN(DEBUG_INTERNET, "[HANGAR_CONTACT] MAINTAIN_ADD_SMUGGLER_HANGAR_CONTACT - ADD_CONTACT_TO_PHONEBOOK(", g_sCharacterSheetAll[CharacterToAdd].label, ", MULTIPLAYER_BOOK, ", bDisplay, ")") ENDIF IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0HA) CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchased hangar, set bDisplayed_HELP_FDSE0ha false") CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0HA) ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Special","WEB_NAVIGATION_SOUNDS_PHONE") bBrowserShoppingSavePending = TRUE CHECK_AMERICAN_DREAM_ACHIEVEMENT() POPULATE_MP_BIKER_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_SUCCESS", TRUE, bRenovateHangar, FALSE, FALSE, rpmt_2_HANGAR) CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase complete, refreshing pin map") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE iBoughtPropertyIndex = -1 eBoughtFactoryIndex = FACTORY_ID_INVALID eBoughtHangarIndex = eHangarID eBoughtDefunctBaseIndex = DEFUNCT_BASE_ID_INVALID eBoughtNightclubIndex = NIGHTCLUB_ID_INVALID eBoughtArenaIndex = ARENA_GARAGE_ID_INVALID eBoughtArcadeIndex = ARCADE_PROPERTY_ID_INVALID eBoughtCasinoIndex = CASINO_APARTMENT_ID_INVALID iBoughtCasinoPreset = -1 eBoughtAutoShopIndex = AUTO_SHOP_PROPERTY_ID_INVALID #IF FEATURE_FIXER eBoughtFixerHQIndex = FIXER_HQ_ID_INVALID #ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_HANGAR_FROM_WEBSITE: purchase complete, resetting iCustomAptVariant to 1") ENDPROC PROC BUY_MP_DEFUNCT_BASE_FROM_WEBSITE(DEFUNCT_BASE_ID eBaseID, INT &iResultSlot) INT minPendingTransactionValue, finalPendingTransactionValue, iOwnedTradeBaseValue INT iBankBalance = NETWORK_GET_VC_BANK_BALANCE() INT iWalletBalance = NETWORK_GET_VC_WALLET_BALANCE() IF NOT IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE) IF GET_PLAYER_RANK(GET_PLAYER_INDEX()) < 5 CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase failed, player doesn't have sufficient rank (", GET_PLAYER_RANK(GET_PLAYER_INDEX()), ")") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase failed, player pending unlock for sufficient rank") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK_PENDING ENDIF SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_3_DEFUNCT_BASE) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF IF USE_SERVER_TRANSACTIONS() IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CWARNINGLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase failed - session pending!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_3_DEFUNCT_BASE) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF TEXT_LABEL_15 tl_15BaseName = GET_DEFUNCT_BASE_NAME_FROM_ID(eBaseID) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: trying to purchase base ", tl_15BaseName, " #", eBaseID) INT propval = CEIL(TO_FLOAT(GET_DEFUNCT_BASE_PRICE(eBaseID))*g_sMPTunables.fPropertyMultiplier) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase valid, attempting index ", tl_15BaseName, " $", propval) minPendingTransactionValue = propval DEFUNCT_BASE_ID eTradeInBase = GET_PLAYERS_OWNED_DEFUNCT_BASE(PLAYER_ID()) IF IS_DEFUNCT_BASE_ID_VALID(eTradeInBase) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: currently owns base #", eTradeInBase) INT iCurrentMission = GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: player current gang boss mission: \"", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission), "\"") IF (iCurrentMission = FMMC_TYPE_FM_GANGOPS) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase failed, player current gang boss mission: ", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission)) mpPropertySiteFailReason = MPSFR_ON_MISSION SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_3_DEFUNCT_BASE) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF ENDIF BOOL bRenovateBase = FALSE IF (eBaseID = eTradeInBase) IF GET_LOCAL_PLAYER_USING_OFFICE_SEATID() != -1 CWARNINGLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase failed - using office seat ", GET_LOCAL_PLAYER_USING_OFFICE_SEATID(), "!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_3_DEFUNCT_BASE) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF propval = CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES(eBaseID, sDefunct_base_price_struct) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: renovate ", tl_15BaseName, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) bRenovateBase = TRUE ELSE propval += CALCULATE_COST_OF_DEFUNCT_BASE_INTERIOR_UPGRADES(eBaseID, sDefunct_base_price_struct) IF NOT IS_DEFUNCT_BASE_ID_VALID(eTradeInBase) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase ", tl_15BaseName, " for ", eTradeInBase, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: trade ", tl_15BaseName, " for ", eTradeInBase, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ENDIF ENDIF minPendingTransactionValue = propval //is it a debit or refund IF NOT IS_DEFUNCT_BASE_ID_VALID(eTradeInBase) OR bRenovateBase IF minPendingTransactionValue > 0 //do they have enough money CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", minPendingTransactionValue) IF (minPendingTransactionValue <= 0 OR (minPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", minPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_3_DEFUNCT_BASE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15BaseName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ELSE //is it a debit or refund INT iTempMinPendingTransactionValue = minPendingTransactionValue-GET_DEFUNCT_BASE_SALE_VALUE(eTradeInBase) IF iTempMinPendingTransactionValue >0 //do they have enough money CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " > $", minPendingTransactionValue, "+", GET_DEFUNCT_BASE_SALE_VALUE(eTradeInBase)) IF (iTempMinPendingTransactionValue <= 0 OR (iTempMinPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iTempMinPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:iTempMinPendingTransactionValue $", minPendingTransactionValue, "+", GET_DEFUNCT_BASE_SALE_VALUE(eTradeInBase), "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_3_DEFUNCT_BASE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15BaseName), iTempMinPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <= $", minPendingTransactionValue, "+", GET_DEFUNCT_BASE_SALE_VALUE(eTradeInBase)) ENDIF INT iReplaceSpecificPropertySlot REPLACE_MP_VEH_OR_PROP_MENU replaceMenu WHILE NOT RUN_REPLACE_PROPERTY_MENU(replaceMenu,iResultSlot,ENUM_TO_INT(eBaseID),iReplaceSpecificPropertySlot,rpmt_3_DEFUNCT_BASE) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() //RENDER_BROWSER() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE IF iResultSlot = -1 mpPropertySiteFailReason = MPSFR_CANCELED SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_3_DEFUNCT_BASE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE g_iPendingBrowserTimer = g_iBrowserTimer PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") CPRINTLN(DEBUG_INTERNET, "CDM: BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase failed, player backed out of property selection") EXIT ELSE iOwnedTradeBaseValue = GET_DEFUNCT_BASE_SALE_VALUE(eTradeInBase) finalPendingTransactionValue = propval - iOwnedTradeBaseValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: Player selected iResultSlot ", iResultSlot, ", trade ba: ", eTradeInBase, " for trade. propval $", propval, ", iOwnedTradeBaseValue: ", iOwnedTradeBaseValue, " 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 CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " + trade:$", iOwnedTradeBaseValue, " <> $", finalPendingTransactionValue) IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_3_DEFUNCT_BASE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15BaseName), finalPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ENDIF DEFUNCT_BASE_DATA_STRUCT sDefunctBaseData GET_SCALEFORM_DEFUNCT_BASE_DATA(sDefunctBaseData) IF USE_SERVER_TRANSACTIONS() INT iPropval IF eBaseID = eTradeInBase iPropval = 0 ELSE iPropval = CEIL(TO_FLOAT(GET_DEFUNCT_BASE_PRICE(eBaseID))*g_sMPTunables.fPropertyMultiplier) ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_DEFUNCT_BASE_KEY_FOR_CATALOGUE(eBaseID) INT iInventoryKey = GET_DEFUNCT_BASE_INVENTORY_KEY_FOR_CATALOGUE() INT iSellingItemId = 0 IF IS_DEFUNCT_BASE_ID_VALID(eTradeInBase) iSellingItemId = GET_DEFUNCT_BASE_KEY_FOR_CATALOGUE(eTradeInBase) ENDIF INT iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT /////////////////////////////////////////// /// TRANSACTION FOR DEFUNCT_BASE WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, iPropval, iResultSlot, CATEGORY_INVENTORY_WAREHOUSE, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemId, iInventoryKey, 0, iOwnedTradeBaseValue, iSellingItemId) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) RENDER_BROWSER() SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase failed, failed to process transaction") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_3_DEFUNCT_BASE) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: success!!") BREAK DEFAULT mpPropertySiteFailReason = MPSFR_NOT_SAFE CASSERTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase failed, unknown iProcessSuccess: \"", iProcessSuccess, "\"") EXIT BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: final:$", finalPendingTransactionValue, ", propval $", propval) //Assign the telemetry data //Increment the spending stat IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF SPENT_ON_BASE data //Check if we're trading of just buying IF (NOT IS_DEFUNCT_BASE_ID_VALID(eTradeInBase)) OR (bRenovateBase) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = propval IF (sDefunct_base_price_struct.iPersonalQuartersPrice >= 0) OR NOT bRenovateBase data.m_livingQuarter = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PERSONAL_QUARTERS, sDefunctBaseData.iPersonalQuarters)) data.m_livingQuarter_amount = sDefunct_base_price_struct.iPersonalQuartersPrice iFinalPropValue -= data.m_livingQuarter_amount ENDIF IF (sDefunct_base_price_struct.iOrbitalWeaponPrice >= 0) OR NOT bRenovateBase data.m_orbcannon = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_ORBITAL_WEAPON, sDefunctBaseData.iOrbitalWeapon)) data.m_orbcannon_amount = sDefunct_base_price_struct.iOrbitalWeaponPrice iFinalPropValue -= data.m_orbcannon_amount ENDIF IF (sDefunct_base_price_struct.iSecurityRoomPrice >= 0) OR NOT bRenovateBase data.m_secroom = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_SECURITY_ROOM, sDefunctBaseData.iSecurityRoom)) data.m_secroom_amount = sDefunct_base_price_struct.iSecurityRoomPrice iFinalPropValue -= data.m_secroom_amount ENDIF IF (sDefunct_base_price_struct.iLoungePrice >= 0) OR NOT bRenovateBase data.m_lounge = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_LOUNGE, sDefunctBaseData.iLounge)) data.m_lounge_amount = sDefunct_base_price_struct.iLoungePrice iFinalPropValue -= data.m_lounge_amount ENDIF IF (sDefunct_base_price_struct.iPrivicyGlassPrice >= 0) OR NOT bRenovateBase data.m_privacyglass = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PRIVACY_GLASS, sDefunctBaseData.iPrivicyGlass)) data.m_privacyglass_amount = sDefunct_base_price_struct.iPrivicyGlassPrice iFinalPropValue -= data.m_privacyglass_amount ENDIF IF (sDefunct_base_price_struct.iStylePrice >= 0) OR NOT bRenovateBase data.m_style = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_STYLE, sDefunctBaseData.iStyle)) data.m_style_amount = sDefunct_base_price_struct.iStylePrice iFinalPropValue -= data.m_style_amount ENDIF IF (sDefunct_base_price_struct.iGraphicsPrice >= 0) OR NOT bRenovateBase data.m_graphics = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_GRAPHIC, GET_SF_FROM_DBASE_GRAPHICS(sDefunctBaseData.iGraphics))) data.m_graphics_amount = sDefunct_base_price_struct.iGraphicsPrice iFinalPropValue -= data.m_graphics_amount ENDIF IF (iFinalPropValue >= 0) OR NOT bRenovateBase data.m_location = GET_HASH_KEY(GET_DEFUNCT_BASE_NAME_FROM_ID(eBaseID)) data.m_location_amount = iFinalPropValue ENDIF IF NOT bRenovateBase CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: Bought defunct base for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_DEFUNCT_BASE_NAME_FROM_ID(eBaseID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_orbcannon:", data.m_orbcannon, " m_orbcannon_amount:$", data.m_orbcannon_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_ORBITAL_WEAPON, sDefunctBaseData.iOrbitalWeapon)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_secroom:", data.m_secroom, " m_secroom_amount:$", data.m_secroom_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_SECURITY_ROOM, sDefunctBaseData.iSecurityRoom)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_lounge:", data.m_lounge, " m_lounge_amount:$", data.m_lounge_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_LOUNGE, sDefunctBaseData.iLounge)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_privacyglass:", data.m_privacyglass, " m_privacyglass_amount:$", data.m_privacyglass_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PRIVACY_GLASS, sDefunctBaseData.iPrivicyGlass)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_STYLE, sDefunctBaseData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_graphics:", data.m_graphics, " m_graphics_amount:$", data.m_graphics_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_GRAPHIC, GET_SF_FROM_DBASE_GRAPHICS(sDefunctBaseData.iGraphics))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_livingQuarter:", data.m_livingQuarter, " m_livingQuarter_amount:$", data.m_livingQuarter_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PERSONAL_QUARTERS, sDefunctBaseData.iPersonalQuarters)) NETWORK_SPENT_BUY_BASE(propval, FALSE, TRUE, data) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: Renovate defunct base for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_DEFUNCT_BASE_NAME_FROM_ID(eBaseID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_orbcannon:", data.m_orbcannon, " m_orbcannon_amount:$", data.m_orbcannon_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_ORBITAL_WEAPON, sDefunctBaseData.iOrbitalWeapon)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_secroom:", data.m_secroom, " m_secroom_amount:$", data.m_secroom_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_SECURITY_ROOM, sDefunctBaseData.iSecurityRoom)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_lounge:", data.m_lounge, " m_lounge_amount:$", data.m_lounge_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_LOUNGE, sDefunctBaseData.iLounge)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_privacyglass:", data.m_privacyglass, " m_privacyglass_amount:$", data.m_privacyglass_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PRIVACY_GLASS, sDefunctBaseData.iPrivicyGlass)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_STYLE, sDefunctBaseData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_graphics:", data.m_graphics, " m_graphics_amount:$", data.m_graphics_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_GRAPHIC, GET_SF_FROM_DBASE_GRAPHICS(sDefunctBaseData.iGraphics))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_livingQuarter:", data.m_livingQuarter, " m_livingQuarter_amount:$", data.m_livingQuarter_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PERSONAL_QUARTERS, sDefunctBaseData.iPersonalQuarters)) NETWORK_SPENT_UPGRADE_BASE(propval, FALSE, TRUE, data) ENDIF IF NOT bRenovateBase SET_DEFUNCT_BASE_AS_OWNED(eBaseID) GANGOPS_SETUP_FACILITY_PURCHASED_FLOW_PHONECALL() #IF FEATURE_GEN9_EXCLUSIVE END_DOOMSDAY_HEIST_UDS_ACTIVITY_TASK(DOOMSDAY_HEIST_UDS_ACTIVITY_TASK_BUY_FACILITY, UDS_ACTIVITY_END_REASON_COMPLETED) END_DOOMSDAY_HEIST_UDS_ACTIVITY(UDS_ACTIVITY_END_REASON_ABANDONED) #ENDIF ENDIF ELIF GET_DEFUNCT_BASE_BASE_PRICE(eTradeInBase) > 0 // IF NOT SHOULD_DEFUNCT_BASE_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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_DEFUNCT_BASE_FROM_WEBSITE: Trading the business ", eTradeInBase, " is earning the player:$", iOwnedTradeBaseValue) IF iOwnedTradeBaseValue != 0 NETWORK_EARN_SELL_BASE(iOwnedTradeBaseValue, GET_HASH_KEY(GET_DEFUNCT_BASE_NAME_FROM_ID(eTradeInBase))) ENDIF // ELSE // CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: Earn nothing from property:$", GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot), " ", tl_15PropertyName, " as was free") // ENDIF IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = finalPendingTransactionValue iFinalPropValue += iOwnedTradeBaseValue // data.m_livingQuarter = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PERSONAL_QUARTERS, sDefunctBaseData.iPersonalQuarters)) data.m_livingQuarter_amount = sDefunct_base_price_struct.iPersonalQuartersPrice iFinalPropValue -= data.m_livingQuarter_amount // data.m_orbcannon = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_ORBITAL_WEAPON, sDefunctBaseData.iOrbitalWeapon)) data.m_orbcannon_amount = sDefunct_base_price_struct.iOrbitalWeaponPrice iFinalPropValue -= data.m_orbcannon_amount // data.m_secroom = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_SECURITY_ROOM, sDefunctBaseData.iSecurityRoom)) data.m_secroom_amount = sDefunct_base_price_struct.iSecurityRoomPrice iFinalPropValue -= data.m_secroom_amount // data.m_lounge = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_LOUNGE, sDefunctBaseData.iLounge)) data.m_lounge_amount = sDefunct_base_price_struct.iLoungePrice iFinalPropValue -= data.m_lounge_amount // data.m_privacyglass = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PRIVACY_GLASS, sDefunctBaseData.iPrivicyGlass)) data.m_privacyglass_amount = sDefunct_base_price_struct.iPrivicyGlassPrice iFinalPropValue -= data.m_privacyglass_amount // data.m_style = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_STYLE, sDefunctBaseData.iStyle)) data.m_style_amount = sDefunct_base_price_struct.iStylePrice iFinalPropValue -= data.m_style_amount // data.m_graphics = GET_HASH_KEY(GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_GRAPHIC, GET_SF_FROM_DBASE_GRAPHICS(sDefunctBaseData.iGraphics))) data.m_graphics_amount = sDefunct_base_price_struct.iGraphicsPrice iFinalPropValue -= data.m_graphics_amount // data.m_location = GET_HASH_KEY(GET_DEFUNCT_BASE_NAME_FROM_ID(eBaseID)) data.m_location_amount = iFinalPropValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: Trading defunct base for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_DEFUNCT_BASE_NAME_FROM_ID(eBaseID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_orbcannon:", data.m_orbcannon, " m_orbcannon_amount:$", data.m_orbcannon_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_ORBITAL_WEAPON, sDefunctBaseData.iOrbitalWeapon)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_secroom:", data.m_secroom, " m_secroom_amount:$", data.m_secroom_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_SECURITY_ROOM, sDefunctBaseData.iSecurityRoom)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_lounge:", data.m_lounge, " m_lounge_amount:$", data.m_lounge_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_LOUNGE, sDefunctBaseData.iLounge)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_privacyglass:", data.m_privacyglass, " m_privacyglass_amount:$", data.m_privacyglass_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PRIVACY_GLASS, sDefunctBaseData.iPrivicyGlass)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_STYLE, sDefunctBaseData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_graphics:", data.m_graphics, " m_graphics_amount:$", data.m_graphics_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_GRAPHIC, GET_SF_FROM_DBASE_GRAPHICS(sDefunctBaseData.iGraphics))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: m_livingQuarter:", data.m_livingQuarter, " m_livingQuarter_amount:$", data.m_livingQuarter_amount, " ", GET_DEFUNCT_BASE_MOD_NAME_FROM_ID(eDEFUNCT_BASE_MOD_PERSONAL_QUARTERS, sDefunctBaseData.iPersonalQuarters)) NETWORK_SPENT_UPGRADE_BASE(propval, FALSE, TRUE, data) // REMOTE_REQUEST_REMOVE_ALL_CONTRABAND_FROM_XXXXXX() TRADE_DEFUNCT_BASE(eBaseID, eTradeInBase) ENDIF INT iBuyPropertyIndex = PROPERTY_DEFUNC_BASE SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_DEFUNCBASE, iBuyPropertyIndex) IF NOT bRenovateBase SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_DEFUNCBASE_VALUE, propval) INT iForceDisplayUpdatedSlot IF GET_OWNED_PROPERTY(0) <= 0 IF IS_PERSONAL_VEHICLE_DRIVEABLE_IN_FREEMODE() IF DOES_ENTITY_EXIST(MPGlobalsAmbience.vehPersonalVehicle) MPSV_GET_DISPLAY_SLOT_FROM_SAVE_SLOT(CURRENT_SAVED_VEHICLE_SLOT(),iForceDisplayUpdatedSlot) IF iForceDisplayUpdatedSlot <= 0 iForceDisplayUpdatedSlot = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,GET_ENTITY_MODEL(MPGlobalsAmbience.vehPersonalVehicle)) IF iForceDisplayUpdatedSlot >= 0 PRINTLN("Forcing vehicle out in freemode slot display to #",iForceDisplayUpdatedSlot," when buying facility") MPSV_SET_DISPLAY_SLOT(iForceDisplayUpdatedSlot,CURRENT_SAVED_VEHICLE_SLOT()) IF iForceDisplayUpdatedSlot != 0 MPSV_SET_DISPLAY_SLOT(0,-1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: iPersonalQuarters: ", sDefunctBaseData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: iOrbitalWeapon: ", sDefunctBaseData.iOrbitalWeapon) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: iSecurityRoom: ", sDefunctBaseData.iSecurityRoom) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: iLounge: ", sDefunctBaseData.iLounge) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: iPrivicyGlass: ", sDefunctBaseData.iPrivicyGlass) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: iColour: ", sDefunctBaseData.iStyle) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: iGraphics: ", sDefunctBaseData.iGraphics) IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(sDefunctBaseData.iPersonalQuarters) IF (GET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_PERSONAL_QUARTERS) != sDefunctBaseData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: set defunct base spawn, player bought accomodation") SET_MP_SPAWN_POINT_SETTING(MP_SETTING_SPAWN_DEFUNCT_BASE) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: set defunct base spawn, player already has accom so not a renovation") ENDIF ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_PERSONAL_QUARTERS, sDefunctBaseData.iPersonalQuarters) SET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_ORBITAL_WEAPON, sDefunctBaseData.iOrbitalWeapon) SET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_SECURITY_ROOM, sDefunctBaseData.iSecurityRoom) SET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_LOUNGE, sDefunctBaseData.iLounge) SET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_PRIVACY_GLASS, sDefunctBaseData.iPrivicyGlass) SET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_FACILITY_STYLE, sDefunctBaseData.iStyle) SET_MP_INT_CHARACTER_STAT(MP_STAT_DBASE_FACILITY_GRAPHIC, sDefunctBaseData.iGraphics) BROADCAST_PLAYER_PURCHASED_DEFUNCT_BASE() enumCharacterList CharacterToAdd = GET_GANGOPS_CONTACT() IF NOT IS_CONTACT_IN_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK) BOOL bDisplay = FALSE ADD_CONTACT_TO_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK,bDisplay) CPRINTLN(DEBUG_INTERNET, "[DEFUNCT_BASE_CONTACT] MAINTAIN_ADD_GANGOPS_DEFUNCT_BASE_CONTACT - ADD_CONTACT_TO_PHONEBOOK(", g_sCharacterSheetAll[CharacterToAdd].label, ", MULTIPLAYER_BOOK, ", bDisplay, ")") ENDIF IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0DB) CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchased facility, set bDisplayed_HELP_FDSE0db false") CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_FDSE0DB) ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Special","WEB_NAVIGATION_SOUNDS_PHONE") bBrowserShoppingSavePending = TRUE CHECK_AMERICAN_DREAM_ACHIEVEMENT() POPULATE_MP_BIKER_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_SUCCESS", TRUE, bRenovateBase, FALSE, FALSE, rpmt_3_DEFUNCT_BASE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase complete, refreshing pin map") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE iBoughtPropertyIndex = -1 eBoughtFactoryIndex = FACTORY_ID_INVALID eBoughtHangarIndex = HANGAR_ID_INVALID eBoughtDefunctBaseIndex = eBaseID eBoughtNightclubIndex = NIGHTCLUB_ID_INVALID eBoughtArenaIndex = ARENA_GARAGE_ID_INVALID eBoughtArcadeIndex = ARCADE_PROPERTY_ID_INVALID eBoughtCasinoIndex = CASINO_APARTMENT_ID_INVALID iBoughtCasinoPreset = -1 eBoughtAutoShopIndex = AUTO_SHOP_PROPERTY_ID_INVALID #IF FEATURE_FIXER eBoughtFixerHQIndex = FIXER_HQ_ID_INVALID #ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_DEFUNCT_BASE_FROM_WEBSITE: purchase complete, resetting iCustomAptVariant to 1") ENDPROC PROC BUY_MP_NIGHTCLUB_FROM_WEBSITE(NIGHTCLUB_ID eNightclubID, INT &iResultSlot) INT minPendingTransactionValue, finalPendingTransactionValue, iOwnedTradeNightclubValue INT iBankBalance = NETWORK_GET_VC_BANK_BALANCE() INT iWalletBalance = NETWORK_GET_VC_WALLET_BALANCE() IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBSTY") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBLIG") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBDAN") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBICE") CLEAR_HELP() CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF IF NOT IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE) IF GET_PLAYER_RANK(GET_PLAYER_INDEX()) < 5 CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed, player doesn't have sufficient rank (", GET_PLAYER_RANK(GET_PLAYER_INDEX()), ")") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed, player pending unlock for sufficient rank") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK_PENDING ENDIF SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_4_NIGHTCLUB) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF IF USE_SERVER_TRANSACTIONS() IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CWARNINGLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed - session pending!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_4_NIGHTCLUB) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF TEXT_LABEL_15 tl_15NightclubName = GET_NIGHTCLUB_NAME_FROM_ID(eNightclubID) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: trying to purchase Nightclub ", tl_15NightclubName, " #", eNightclubID) INT propval = CEIL(TO_FLOAT(GET_NIGHTCLUB_PRICE(eNightclubID))*g_sMPTunables.fPropertyMultiplier) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase valid, attempting index ", tl_15NightclubName, " $", propval) minPendingTransactionValue = propval NIGHTCLUB_ID eTradeInNightclub = GET_PLAYERS_OWNED_NIGHTCLUB(PLAYER_ID()) IF IS_NIGHTCLUB_ID_VALID(eTradeInNightclub) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: currently owns Nightclub #", eTradeInNightclub) INT iCurrentMission = GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: player current gang boss mission: \"", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission), "\"") IF (iCurrentMission != -1) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed, player current gang boss mission: ", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission)) mpPropertySiteFailReason = MPSFR_ON_MISSION SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_4_NIGHTCLUB) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF ENDIF BOOL bRenovateNightclub = FALSE IF (eNightclubID = eTradeInNightclub) IF GET_LOCAL_PLAYER_USING_OFFICE_SEATID() != -1 CWARNINGLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed - using office seat ", GET_LOCAL_PLAYER_USING_OFFICE_SEATID(), "!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_4_NIGHTCLUB) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF propval = CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES(eNightclubID, sNightclub_price_struct) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: renovate ", tl_15NightclubName, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) bRenovateNightclub = TRUE ELSE IF eTradeInNightclub != NIGHTCLUB_ID_INVALID INT iTotalGoodsInHub = GET_PLAYERS_TOTAL_OF_ALL_GOODS_IN_HUB(PLAYER_ID()) IF iTotalGoodsInHub > 0 CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed - can't trade, has ", iTotalGoodsInHub, " goods in hub!") mpPropertySiteFailReason = MPSFR_HAS_STOCK SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_4_NIGHTCLUB) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF propval += CALCULATE_COST_OF_NIGHTCLUB_INTERIOR_UPGRADES(eNightclubID, sNightclub_price_struct) IF NOT IS_NIGHTCLUB_ID_VALID(eTradeInNightclub) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase ", tl_15NightclubName, " for ", eTradeInNightclub, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: trade ", tl_15NightclubName, " for ", eTradeInNightclub, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ENDIF ENDIF minPendingTransactionValue = propval //is it a debit or refund IF NOT IS_NIGHTCLUB_ID_VALID(eTradeInNightclub) OR bRenovateNightclub IF minPendingTransactionValue > 0 //do they have enough money CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", minPendingTransactionValue) IF (minPendingTransactionValue <= 0 OR (minPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", minPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_4_NIGHTCLUB) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15NightclubName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ELSE //is it a debit or refund INT iTempMinPendingTransactionValue = minPendingTransactionValue-GET_NIGHTCLUB_SALE_VALUE(eTradeInNightclub) IF iTempMinPendingTransactionValue >0 //do they have enough money CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " > $", minPendingTransactionValue, "+", GET_NIGHTCLUB_SALE_VALUE(eTradeInNightclub)) IF (iTempMinPendingTransactionValue <= 0 OR (iTempMinPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iTempMinPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:iTempMinPendingTransactionValue $", minPendingTransactionValue, "+", GET_NIGHTCLUB_SALE_VALUE(eTradeInNightclub), "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_4_NIGHTCLUB) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15NightclubName), iTempMinPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <= $", minPendingTransactionValue, "+", GET_NIGHTCLUB_SALE_VALUE(eTradeInNightclub)) ENDIF INT iReplaceSpecificPropertySlot REPLACE_MP_VEH_OR_PROP_MENU replaceMenu WHILE NOT RUN_REPLACE_PROPERTY_MENU(replaceMenu,iResultSlot,ENUM_TO_INT(eNightclubID),iReplaceSpecificPropertySlot,rpmt_4_NIGHTCLUB) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE IF iResultSlot = -1 mpPropertySiteFailReason = MPSFR_CANCELED SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_4_NIGHTCLUB) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE g_iPendingBrowserTimer = g_iBrowserTimer PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") CPRINTLN(DEBUG_INTERNET, "CDM: BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed, player backed out of property selection") EXIT ELSE iOwnedTradeNightclubValue = GET_NIGHTCLUB_SALE_VALUE(eTradeInNightclub) finalPendingTransactionValue = propval - iOwnedTradeNightclubValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: Player selected iResultSlot ", iResultSlot, ", trade ba: ", eTradeInNightclub, " for trade. propval $", propval, ", iOwnedTradeNightclubValue: ", iOwnedTradeNightclubValue, " 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 CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " + trade:$", iOwnedTradeNightclubValue, " <> $", finalPendingTransactionValue) IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_4_NIGHTCLUB) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15NightclubName), finalPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ENDIF NIGHTCLUB_DATA_STRUCT sNightclubData GET_SCALEFORM_NIGHTCLUB_DATA(sNightclubData) // IF IS_NIGHTCLUB_UPGRADE_PURCHASE_DISABLED(eNIGHTCLUB_MOD_DJ2_PURCHASED, eNightclubID, sNightclubData.iDJChoice) // CWARNINGLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed - DJ Choice ", sNightclubData.iDJChoice, " disabled") // mpPropertySiteFailReason = MPSFR_NOT_SAFE // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_4_NIGHTCLUB) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // EXIT // ELSE // CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: DJ Choice ", sNightclubData.iDJChoice, " enabled") // ENDIF IF USE_SERVER_TRANSACTIONS() INT iPropval IF eNightclubID = eTradeInNightclub iPropval = 0 ELSE iPropval = CEIL(TO_FLOAT(GET_NIGHTCLUB_PRICE(eNightclubID))*g_sMPTunables.fPropertyMultiplier) ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_NIGHTCLUB_KEY_FOR_CATALOGUE(eNightclubID) INT iInventoryKey = GET_NIGHTCLUB_INVENTORY_KEY_FOR_CATALOGUE() INT iSellingItemId = 0 IF IS_NIGHTCLUB_ID_VALID(eTradeInNightclub) iSellingItemId = GET_NIGHTCLUB_KEY_FOR_CATALOGUE(eTradeInNightclub) ENDIF INT iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT /////////////////////////////////////////// /// TRANSACTION FOR NIGHTCLUB WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, iPropval, iResultSlot, CATEGORY_INVENTORY_WAREHOUSE, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemId, iInventoryKey, 0, iOwnedTradeNightclubValue, iSellingItemId) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) RENDER_BROWSER() SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed, failed to process transaction") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_4_NIGHTCLUB) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: success!!") BREAK DEFAULT mpPropertySiteFailReason = MPSFR_NOT_SAFE CASSERTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase failed, unknown iProcessSuccess: \"", iProcessSuccess, "\"") EXIT BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: final:$", finalPendingTransactionValue, ", propval $", propval) //Assign the telemetry data //Increment the spending stat IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF STRUCT_SPENT_ON_NIGHTCLUB_AND_WAREHOUSE data //Check if we're trading of just buying IF (NOT IS_NIGHTCLUB_ID_VALID(eTradeInNightclub)) OR (bRenovateNightclub) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = propval IF (sNightclub_price_struct.iDancersPrice >= 0) OR NOT bRenovateNightclub data.m_podium = GET_HASH_KEY(GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DANCERS, sNightclubData.iDancers)) data.m_podium_amount = sNightclub_price_struct.iDancersPrice iFinalPropValue -= data.m_podium_amount ENDIF IF (sNightclub_price_struct.iDryIcePrice >= 0) OR NOT bRenovateNightclub data.m_dryice = GET_HASH_KEY(GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DRYICE, sNightclubData.iDryIce)) data.m_dryice_amount = sNightclub_price_struct.iDryIcePrice iFinalPropValue -= data.m_dryice_amount ENDIF IF (sNightclub_price_struct.iStoragePrice >= 0) OR NOT bRenovateNightclub data.m_whBasement2 = GET_HASH_KEY(GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_WAREHOUSE, sNightclubData.iStorage)) data.m_whBasement2_amount = sNightclub_price_struct.iStoragePrice iFinalPropValue -= data.m_whBasement2_amount ENDIF IF (sNightclub_price_struct.iGaragePrice >= 0) OR NOT bRenovateNightclub data.m_whGarage2 = GET_HASH_KEY(GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_GARAGE, sNightclubData.iGarage)) data.m_whGarage2_amount = sNightclub_price_struct.iGaragePrice iFinalPropValue -= data.m_whGarage2_amount ENDIF IF (sNightclub_price_struct.iStylePrice >= 0) OR NOT bRenovateNightclub data.m_style = GET_HASH_KEY(GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_STYLE, sNightclubData.iStyle)) data.m_style_amount = sNightclub_price_struct.iStylePrice iFinalPropValue -= data.m_style_amount ENDIF IF (sNightclub_price_struct.iLightingPrice >= 0) OR NOT bRenovateNightclub data.m_lighting = GET_HASH_KEY(GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_LIGHTING, GET_SF_FROM_NIGHTCLUB_LIGHTING(sNightclubData.iLighting))) data.m_lighting_amount = sNightclub_price_struct.iLightingPrice iFinalPropValue -= data.m_lighting_amount ENDIF IF (sNightclub_price_struct.iNamePrice >= 0) OR NOT bRenovateNightclub data.m_name = GET_HASH_KEY(GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_NAME, GET_SF_FROM_NIGHTCLUB_NAME(sNightclubData.iNameID))) data.m_name_amount = sNightclub_price_struct.iNamePrice iFinalPropValue -= data.m_name_amount ENDIF IF (iFinalPropValue >= 0) OR NOT bRenovateNightclub data.m_location = GET_HASH_KEY(GET_NIGHTCLUB_NAME_FROM_ID(eNightclubID)) data.m_location_amount = iFinalPropValue ENDIF IF NOT bRenovateNightclub CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: Bought nightclub for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_NIGHTCLUB_NAME_FROM_ID(eNightclubID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_STYLE, sNightclubData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_lighting:", data.m_lighting, " m_lighting_amount:$", data.m_lighting_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_LIGHTING, GET_SF_FROM_NIGHTCLUB_LIGHTING(sNightclubData.iLighting))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_podium:", data.m_podium, " m_podium_amount:$", data.m_podium_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DANCERS, sNightclubData.iDancers)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_dryice:", data.m_dryice, " m_dryice_amount:$", data.m_dryice_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DRYICE, sNightclubData.iDryIce)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_whBasement2:", data.m_whBasement2, " m_whBasement2_amount:$", data.m_whBasement2_amount, " ", GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_WAREHOUSE, sNightclubData.iStorage)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_whGarage2:", data.m_whGarage2, " m_whGarage2_amount:$", data.m_whGarage2_amount, " ", GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_GARAGE, sNightclubData.iGarage)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_name:", data.m_name, " m_name_amount:$", data.m_name_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_NAME, GET_SF_FROM_NIGHTCLUB_NAME(sNightclubData.iNameID))) NETWORK_SPENT_PURCHASE_NIGHTCLUB_AND_WAREHOUSE(propval, data, FALSE, TRUE) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: Renovate nightclub for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_NIGHTCLUB_NAME_FROM_ID(eNightclubID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_STYLE, sNightclubData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_lighting:", data.m_lighting, " m_lighting_amount:$", data.m_lighting_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_LIGHTING, GET_SF_FROM_NIGHTCLUB_LIGHTING(sNightclubData.iLighting))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_podium:", data.m_podium, " m_podium_amount:$", data.m_podium_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DANCERS, sNightclubData.iDancers)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_dryice:", data.m_dryice, " m_dryice_amount:$", data.m_dryice_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DRYICE, sNightclubData.iDryIce)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_whBasement2:", data.m_whBasement2, " m_whBasement2_amount:$", data.m_whBasement2_amount, " ", GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_WAREHOUSE, sNightclubData.iStorage)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_whGarage2:", data.m_whGarage2, " m_whGarage2_amount:$", data.m_whGarage2_amount, " ", GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_GARAGE, sNightclubData.iGarage)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_name:", data.m_name, " m_name_amount:$", data.m_name_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_NAME, GET_SF_FROM_NIGHTCLUB_NAME(sNightclubData.iNameID))) NETWORK_SPENT_UPGRADE_NIGHTCLUB_AND_WAREHOUSE(propval, data, FALSE, TRUE) ENDIF IF NOT bRenovateNightclub SET_NIGHTCLUB_AS_OWNED(eNightclubID) SET_BIT(MPGlobalsAmbience.iFmGbHelpBitSet6, BI_FM_GANG_BOSS_HELP_6_SEND_NIGHTCLUB_PURCHASED_TEXT) PRINTLN("[FMBB_CALL] - BUY_MP_NIGHTCLUB_FROM_WEBSITE - BI_FM_GANG_BOSS_HELP_6_SEND_NIGHTCLUB_PURCHASED_TEXT set") CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: set nightclub spawn, player bought accomodation") SET_MP_SPAWN_POINT_SETTING(MP_SETTING_SPAWN_NIGHTCLUB) SET_NIGHTCLUB_DJ_ACTIVE_STATE(DJ_SOLOMUN, TRUE) ENDIF ELIF GET_NIGHTCLUB_BASE_PRICE(eTradeInNightclub) > 0 // IF NOT SHOULD_NIGHTCLUB_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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_NIGHTCLUB_FROM_WEBSITE: Trading the business ", eTradeInNightclub, " is earning the player:$", iOwnedTradeNightclubValue) NETWORK_EARN_NIGHTCLUB_AND_WAREHOUSE(iOwnedTradeNightclubValue, GET_HASH_KEY(GET_NIGHTCLUB_NAME_FROM_ID(eTradeInNightclub)), 0, 0, 0, 0, 0) // ELSE // CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: Earn nothing from property:$", GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot), " ", tl_15PropertyName, " as was free") // ENDIF IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = finalPendingTransactionValue iFinalPropValue += iOwnedTradeNightclubValue // data.m_style = GET_HASH_KEY(GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_STYLE, sNightclubData.iStyle)) data.m_style_amount = sNightclub_price_struct.iStylePrice iFinalPropValue -= data.m_style_amount // data.m_lighting = GET_HASH_KEY(GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_LIGHTING, GET_SF_FROM_NIGHTCLUB_LIGHTING(sNightclubData.iLighting))) data.m_lighting_amount = sNightclub_price_struct.iLightingPrice iFinalPropValue -= data.m_lighting_amount // data.m_podium = GET_HASH_KEY(GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DANCERS, sNightclubData.iDancers)) data.m_podium_amount = sNightclub_price_struct.iDancersPrice iFinalPropValue -= data.m_podium_amount // data.m_dryice = GET_HASH_KEY(GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DRYICE, sNightclubData.iDryIce)) data.m_dryice_amount = sNightclub_price_struct.iDryIcePrice iFinalPropValue -= data.m_dryice_amount // data.m_whBasement2 = GET_HASH_KEY(GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_WAREHOUSE, sNightclubData.iStorage)) data.m_whBasement2_amount = sNightclub_price_struct.iStoragePrice iFinalPropValue -= data.m_whBasement2_amount // data.m_whGarage2 = GET_HASH_KEY(GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_GARAGE, sNightclubData.iGarage)) data.m_whGarage2_amount = sNightclub_price_struct.iGaragePrice iFinalPropValue -= data.m_whGarage2_amount // data.m_name = GET_HASH_KEY(GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_NAME, GET_SF_FROM_NIGHTCLUB_NAME(sNightclubData.iNameID))) data.m_name_amount = sNightclub_price_struct.inamePrice iFinalPropValue -= data.m_name_amount // data.m_location = GET_HASH_KEY(GET_NIGHTCLUB_NAME_FROM_ID(eNightclubID)) data.m_location_amount = iFinalPropValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: Trading nightclub for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_NIGHTCLUB_NAME_FROM_ID(eNightclubID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_STYLE, sNightclubData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_lighting:", data.m_lighting, " m_lighting_amount:$", data.m_lighting_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_LIGHTING, GET_SF_FROM_NIGHTCLUB_LIGHTING(sNightclubData.iLighting))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_podium:", data.m_podium, " m_podium_amount:$", data.m_podium_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DANCERS, sNightclubData.iDancers)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_dryice:", data.m_dryice, " m_dryice_amount:$", data.m_dryice_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_DRYICE, sNightclubData.iDryIce)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_whBasement2:", data.m_whBasement2, " m_whBasement2_amount:$", data.m_whBasement2_amount, " ", GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_WAREHOUSE, sNightclubData.iStorage)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_whGarage2:", data.m_whGarage2, " m_whGarage2_amount:$", data.m_whGarage2_amount, " ", GET_BUSINESS_HUB_MOD_NAME_FROM_ID(eBUSINESS_HUB_MOD_GARAGE, sNightclubData.iGarage)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: m_name:", data.m_name, " m_name_amount:$", data.m_name_amount, " ", GET_NIGHTCLUB_MOD_NAME_FROM_ID(eNIGHTCLUB_MOD_NAME, GET_SF_FROM_NIGHTCLUB_NAME(sNightclubData.iNameID))) NETWORK_SPENT_UPGRADE_NIGHTCLUB_AND_WAREHOUSE(propval, data, FALSE, TRUE) // REMOTE_REQUEST_REMOVE_ALL_CONTRABAND_FROM_XXXXXX() TRADE_NIGHTCLUB(eNightclubID, eTradeInNightclub) ENDIF INT iBuyPropertyIndex = PROPERTY_NIGHTCLUB iResultSlot = PROPERTY_OWNED_SLOT_NIGHTCLUB SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_NIGHTCLUB, iBuyPropertyIndex) IF NOT bRenovateNightclub SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_NIGHTCLUB_VALUE, propval) IF GET_OWNED_PROPERTY(0) <= 0 IF IS_PERSONAL_VEHICLE_DRIVEABLE_IN_FREEMODE() IF DOES_ENTITY_EXIST(MPGlobalsAmbience.vehPersonalVehicle) INT iForceDisplayUpdatedSlot MPSV_GET_DISPLAY_SLOT_FROM_SAVE_SLOT(CURRENT_SAVED_VEHICLE_SLOT(),iForceDisplayUpdatedSlot) IF iForceDisplayUpdatedSlot <= 0 iForceDisplayUpdatedSlot = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,GET_ENTITY_MODEL(MPGlobalsAmbience.vehPersonalVehicle)) IF iForceDisplayUpdatedSlot >= 0 PRINTLN("Forcing vehicle out in freemode slot display to #",iForceDisplayUpdatedSlot," when buying nightclub") MPSV_SET_DISPLAY_SLOT(iForceDisplayUpdatedSlot,CURRENT_SAVED_VEHICLE_SLOT()) IF iForceDisplayUpdatedSlot != 0 MPSV_SET_DISPLAY_SLOT(0,-1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF g_iHubDefendLaunchTimeRemaining = GET_BUSINESS_HUB_TOTAL_AMBIENT_MISSION_INTERVAL(AMB_TYPE_DEFEND) SET_MP_INT_CHARACTER_STAT(MP_STAT_BBT_DEFEND_TIMER_NCLUB, g_iHubDefendLaunchTimeRemaining) PRINTLN("[BUSINESS_HUB][HUB_DEFEND] Local player now owns a hub. Setting timer to: ", g_iHubDefendLaunchTimeRemaining) g_iHubPhoneMissionLaunchTimeRemaining = GET_BUSINESS_HUB_TOTAL_AMBIENT_MISSION_INTERVAL(AMB_TYPE_PHONECALL) SET_MP_INT_CHARACTER_STAT(MP_STAT_BBT_DEFEND_TIMER_NCLUB, g_iHubPhoneMissionLaunchTimeRemaining) PRINTLN("[BUSINESS_HUB][HUB_PHONE] Local player now owns a hub. Setting phone mission launch timer to: ", g_iHubPhoneMissionLaunchTimeRemaining) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: iStyle: ", sNightclubData.iStyle) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: iLighting: ", sNightclubData.iLighting) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: iDancers: ", sNightclubData.iDancers) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: iDryIce: ", sNightclubData.iDryIce) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: iStorage: ", sNightclubData.iStorage) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: iGarage: ", sNightclubData.iGarage) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: iNameID: ", sNightclubData.iNameID) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_STYLE), sNightclubData.iStyle) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_LIGHTING), sNightclubData.iLighting) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_DANCERS), sNightclubData.iDancers) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_DRYICE), sNightclubData.iDryIce) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_NIGHTCLUB_UPGRADE(eNIGHTCLUB_MOD_NAME), sNightclubData.iNameID) SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_NIGHTCLUB_DRY_ICE, (sNightclubData.iDryIce = 1)) BUSINESS_HUB_ID eHubID = INT_TO_ENUM(BUSINESS_HUB_ID, ENUM_TO_INT(eNightclubID)) IF NOT DOES_PLAYER_OWN_BUSINESS_HUB(PLAYER_ID(), eHubID) SET_BUSINESS_HUB_AS_OWNED(eHubID, !bRenovateNightclub) ENDIF SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_BUSINESS_HUB_UPGRADE(eBUSINESS_HUB_MOD_GARAGE), sNightclubData.iGarage) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_BUSINESS_HUB_UPGRADE(eBUSINESS_HUB_MOD_WAREHOUSE), sNightclubData.iStorage) IF IS_BUSINESS_HUB_GARAGE_02_PURCHASED() iBuyPropertyIndex = PROPERTY_MEGAWARE_GARAGE_LVL1 iResultSlot = PROPERTY_OWNED_SLOT_MEGAWARE_GARAGE_LVL1 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_MEGAWARE_GAR1, iBuyPropertyIndex) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_MEGAWARE_GAR1_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: MP_STAT_PROP_MEGAWARE_GAR1 iBuyPropertyIndex:", iBuyPropertyIndex) ENDIF IF IS_BUSINESS_HUB_GARAGE_03_PURCHASED() iBuyPropertyIndex = PROPERTY_MEGAWARE_GARAGE_LVL2 iResultSlot = PROPERTY_OWNED_SLOT_MEGAWARE_GARAGE_LVL2 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_MEGAWARE_GAR2, iBuyPropertyIndex) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_MEGAWARE_GAR2_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: MP_STAT_PROP_MEGAWARE_GAR2 iBuyPropertyIndex:", iBuyPropertyIndex) ENDIF IF IS_BUSINESS_HUB_GARAGE_04_PURCHASED() iBuyPropertyIndex = PROPERTY_MEGAWARE_GARAGE_LVL3 iResultSlot = PROPERTY_OWNED_SLOT_MEGAWARE_GARAGE_LVL3 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_MEGAWARE_GAR3, iBuyPropertyIndex) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_MEGAWARE_GAR3_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: MP_STAT_PROP_MEGAWARE_GAR3 iBuyPropertyIndex:", iBuyPropertyIndex) ENDIF CDEBUG1LN(DEBUG_PROPERTY, "BUY_MP_NIGHTCLUB_FROM_WEBSITE - Setting local player as owner of Business Hub: ", ENUM_TO_INT(eHubID)) BROADCAST_PLAYER_PURCHASED_BUSINESS_HUB() BROADCAST_PLAYER_PURCHASED_NIGHTCLUB() enumCharacterList CharacterToAdd = GET_BUSINESS_BATTLE_NIGHTCLUB_CONTACT() IF NOT IS_CONTACT_IN_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK) BOOL bDisplay = TRUE ADD_CONTACT_TO_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK,bDisplay) CPRINTLN(DEBUG_INTERNET, "[NIGHTCLUB_CONTACT] MAINTAIN_ADD_BUSINESS_BATTLE_NIGHTCLUB_CONTACT - ADD_CONTACT_TO_PHONEBOOK(", g_sCharacterSheetAll[CharacterToAdd].label, ", MULTIPLAYER_BOOK, ", bDisplay, ")") ENDIF IF IS_BIT_SET(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0NC) CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchased nightclub, set bDisplayed_HELP_BBSE0nc false") CLEAR_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_BBSE0NC) ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Special","WEB_NAVIGATION_SOUNDS_PHONE") bBrowserShoppingSavePending = TRUE CHECK_AMERICAN_DREAM_ACHIEVEMENT() POPULATE_MP_BIKER_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_SUCCESS", TRUE, bRenovateNightclub, FALSE, FALSE, rpmt_4_NIGHTCLUB) CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase complete, refreshing pin map") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE iBoughtPropertyIndex = -1 eBoughtFactoryIndex = FACTORY_ID_INVALID eBoughtHangarIndex = HANGAR_ID_INVALID eBoughtDefunctBaseIndex = DEFUNCT_BASE_ID_INVALID eBoughtNightclubIndex = eNightclubID eBoughtArenaIndex = ARENA_GARAGE_ID_INVALID eBoughtArcadeIndex = ARCADE_PROPERTY_ID_INVALID eBoughtCasinoIndex = CASINO_APARTMENT_ID_INVALID iBoughtCasinoPreset = -1 eBoughtAutoShopIndex = AUTO_SHOP_PROPERTY_ID_INVALID #IF FEATURE_FIXER eBoughtFixerHQIndex = FIXER_HQ_ID_INVALID #ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_NIGHTCLUB_FROM_WEBSITE: purchase complete, resetting iCustomAptVariant to 1") ENDPROC PROC BUY_MP_ARENA_GARAGE_FROM_WEBSITE(ARENA_GARAGE_ID eArenaID, INT &iResultSlot) INT minPendingTransactionValue, finalPendingTransactionValue, iOwnedTradeArenaValue INT iBankBalance = NETWORK_GET_VC_BANK_BALANCE() INT iWalletBalance = NETWORK_GET_VC_WALLET_BALANCE() // IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBSTY") // OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBLIG") // OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBDAN") // OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBICE") // CLEAR_HELP() // CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() // ENDIF IF NOT IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE) IF GET_PLAYER_RANK(GET_PLAYER_INDEX()) < 5 CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed, player doesn't have sufficient rank (", GET_PLAYER_RANK(GET_PLAYER_INDEX()), ")") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed, player pending unlock for sufficient rank") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK_PENDING ENDIF SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_5_ARENA_GARAGE) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF IF USE_SERVER_TRANSACTIONS() IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CWARNINGLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed - session pending!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_5_ARENA_GARAGE) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF TEXT_LABEL_15 tl_15ArenaName = GET_ARENA_GARAGE_NAME_FROM_ID(eArenaID) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: trying to purchase ARENA_GARAGE ", tl_15ArenaName, " #", eArenaID) INT propval = CEIL(TO_FLOAT(GET_ARENA_GARAGE_PRICE(eArenaID))*g_sMPTunables.fPropertyMultiplier) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase valid, attempting index ", tl_15ArenaName, " $", propval) minPendingTransactionValue = propval ARENA_GARAGE_ID eTradeInArena = GET_PLAYERS_OWNED_ARENA_GARAGE(PLAYER_ID()) IF IS_ARENA_GARAGE_ID_VALID(eTradeInArena) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: currently owns ARENA_GARAGE #", eTradeInArena) // INT iCurrentMission = GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) // IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: player current gang boss mission: \"", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission), "\"") // // IF (iCurrentMission = FMMC_TYPE_FMBB_DEFEND) // OR (iCurrentMission = FMMC_TYPE_FMBB_PHONECALL) // OR (iCurrentMission = FMMC_TYPE_FMBB_SELL) // OR (iCurrentMission = FMMC_TYPE_FMBB_CLUB_MANAGEMENT) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed, player current gang boss mission: ", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission)) // mpPropertySiteFailReason = MPSFR_ON_MISSION // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_5_ARENA_GARAGE) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // EXIT // ENDIF // ENDIF ENDIF BOOL bRenovateArenaGarage = FALSE IF (eArenaID = eTradeInArena) // IF GET_LOCAL_PLAYER_USING_ARENA_BOX_SEATID() != -1 // CWARNINGLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed - using arena box seat ", GET_LOCAL_PLAYER_USING_ARENA_BOX_SEATID(), "!") // mpPropertySiteFailReason = MPSFR_NOT_SAFE // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_5_ARENA_GARAGE) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // EXIT // ENDIF propval = CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES(eArenaID, sArena_garage_price_struct) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: renovate ", tl_15ArenaName, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) bRenovateArenaGarage = TRUE ELSE IF eTradeInArena != ARENA_GARAGE_ID_INVALID INT iTotalGoodsInHub = GET_PLAYERS_TOTAL_OF_ALL_GOODS_IN_HUB(PLAYER_ID()) IF iTotalGoodsInHub > 0 CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed - can't trade, has ", iTotalGoodsInHub, " goods in hub!") mpPropertySiteFailReason = MPSFR_HAS_STOCK SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_5_ARENA_GARAGE) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF propval += CALCULATE_COST_OF_ARENA_GARAGE_INTERIOR_UPGRADES(eArenaID, sArena_garage_price_struct) IF NOT IS_ARENA_GARAGE_ID_VALID(eTradeInArena) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase ", tl_15ArenaName, " for ", eTradeInArena, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: trade ", tl_15ArenaName, " for ", eTradeInArena, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ENDIF ENDIF minPendingTransactionValue = propval //is it a debit or refund IF NOT IS_ARENA_GARAGE_ID_VALID(eTradeInArena) OR bRenovateArenaGarage IF minPendingTransactionValue > 0 //do they have enough money CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", minPendingTransactionValue) IF (minPendingTransactionValue <= 0 OR (minPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", minPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_5_ARENA_GARAGE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ArenaName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ELSE //is it a debit or refund INT iTempMinPendingTransactionValue = minPendingTransactionValue-GET_ARENA_GARAGE_SALE_VALUE(eTradeInArena) IF iTempMinPendingTransactionValue >0 //do they have enough money CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " > $", minPendingTransactionValue, "+", GET_ARENA_GARAGE_SALE_VALUE(eTradeInArena)) IF (iTempMinPendingTransactionValue <= 0 OR (iTempMinPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iTempMinPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:iTempMinPendingTransactionValue $", minPendingTransactionValue, "+", GET_ARENA_GARAGE_SALE_VALUE(eTradeInArena), "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_5_ARENA_GARAGE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ArenaName), iTempMinPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <= $", minPendingTransactionValue, "+", GET_ARENA_GARAGE_SALE_VALUE(eTradeInArena)) ENDIF INT iReplaceSpecificPropertySlot REPLACE_MP_VEH_OR_PROP_MENU replaceMenu WHILE NOT RUN_REPLACE_PROPERTY_MENU(replaceMenu,iResultSlot,ENUM_TO_INT(eArenaID),iReplaceSpecificPropertySlot,rpmt_5_ARENA_GARAGE) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE IF iResultSlot = -1 mpPropertySiteFailReason = MPSFR_CANCELED SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_5_ARENA_GARAGE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE g_iPendingBrowserTimer = g_iBrowserTimer PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") CPRINTLN(DEBUG_INTERNET, "CDM: BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed, player backed out of property selection") EXIT ELSE iOwnedTradeArenaValue = GET_ARENA_GARAGE_SALE_VALUE(eTradeInArena) finalPendingTransactionValue = propval - iOwnedTradeArenaValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: Player selected iResultSlot ", iResultSlot, ", trade ba: ", eTradeInArena, " for trade. propval $", propval, ", iOwnedTradeArenaValue: ", iOwnedTradeArenaValue, " 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 CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " + trade:$", iOwnedTradeArenaValue, " <> $", finalPendingTransactionValue) IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_5_ARENA_GARAGE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ArenaName), finalPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ENDIF ARENA_GARAGE_DATA_STRUCT sArenaData GET_SCALEFORM_ARENA_GARAGE_DATA(sArenaData) // IF IS_ARENA_GARAGE_UPGRADE_PURCHASE_DISABLED(eARENA_GARAGE_MOD_DJ2_PURCHASED, eArenaID, sArenaData.iDJChoice) // CWARNINGLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed - DJ Choice ", sArenaData.iDJChoice, " disabled") // mpPropertySiteFailReason = MPSFR_NOT_SAFE // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_5_ARENA_GARAGE) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // EXIT // ELSE // CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: DJ Choice ", sArenaData.iDJChoice, " enabled") // ENDIF IF USE_SERVER_TRANSACTIONS() INT iPropval IF eArenaID = eTradeInArena iPropval = 0 ELSE iPropval = CEIL(TO_FLOAT(GET_ARENA_GARAGE_PRICE(eArenaID))*g_sMPTunables.fPropertyMultiplier) ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_ARENA_GARAGE_KEY_FOR_CATALOGUE(eArenaID) INT iInventoryKey = GET_ARENA_GARAGE_INVENTORY_KEY_FOR_CATALOGUE() INT iSellingItemId = 0 IF IS_ARENA_GARAGE_ID_VALID(eTradeInArena) iSellingItemId = GET_ARENA_GARAGE_KEY_FOR_CATALOGUE(eTradeInArena) ENDIF INT iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT /////////////////////////////////////////// /// TRANSACTION FOR ARENA_GARAGE WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, iPropval, iResultSlot, CATEGORY_INVENTORY_WAREHOUSE, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemId, iInventoryKey, 0, iOwnedTradeArenaValue, iSellingItemId) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) RENDER_BROWSER() SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed, failed to process transaction") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_5_ARENA_GARAGE) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: success!!") BREAK DEFAULT mpPropertySiteFailReason = MPSFR_NOT_SAFE CASSERTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase failed, unknown iProcessSuccess: \"", iProcessSuccess, "\"") EXIT BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: final:$", finalPendingTransactionValue, ", propval $", propval) //Assign the telemetry data //Increment the spending stat IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF TEXT_LABEL_31 tl31FloorHashname = "", tl31MechanicHashname = "" STRUCT_SPENT_ON_ARENA data //Check if we're trading of just buying IF (NOT IS_ARENA_GARAGE_ID_VALID(eTradeInArena)) OR (bRenovateArenaGarage) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = propval IF (sArena_garage_price_struct.iStylePrice >= 0) OR NOT bRenovateArenaGarage data.m_style = GET_HASH_KEY(GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_STYLE, sArenaData.iStyle)) data.m_style_amount = sArena_garage_price_struct.iStylePrice iFinalPropValue -= data.m_style_amount ENDIF IF (sArena_garage_price_struct.iGraphicsPrice >= 0) OR NOT bRenovateArenaGarage data.m_graphics = GET_HASH_KEY(GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_GRAPHICS, sArenaData.iGraphics)) data.m_graphics_amount = sArena_garage_price_struct.iGraphicsPrice iFinalPropValue -= data.m_graphics_amount ENDIF IF (sArena_garage_price_struct.iColourPrice >= 0) OR NOT bRenovateArenaGarage data.m_colour = GET_HASH_KEY(GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_COLOUR, sArenaData.iColour)) data.m_colour_amount = sArena_garage_price_struct.iColourPrice iFinalPropValue -= data.m_colour_amount ENDIF IF (sArena_garage_price_struct.iExpansionFloorB1Price >= 0) OR (sArena_garage_price_struct.iExpansionFloorB2Price >= 0) OR NOT bRenovateArenaGarage IF (sArena_garage_price_struct.iExpansionFloorB1Price != 0 AND sArena_garage_price_struct.iExpansionFloorB2Price >= 0) OR NOT bRenovateArenaGarage tl31FloorHashname = GET_ARENA_GARAGE_MOD_COMBINED_HASH(eARENA_GARAGE_MOD_EXPANSION_FLOOR_0, sArenaData.iExpansionFloorB1, eARENA_GARAGE_MOD_EXPANSION_FLOOR_1, sArenaData.iExpansionFloorB2) data.m_floor = GET_HASH_KEY(tl31FloorHashname) ELSE IF (sArena_garage_price_struct.iExpansionFloorB1Price >= 0) tl31FloorHashname = GET_ARENA_GARAGE_MOD_COMBINED_HASH(eARENA_GARAGE_MOD_EXPANSION_FLOOR_0, sArenaData.iExpansionFloorB1, eARENA_GARAGE_MOD_EXPANSION_FLOOR_1, -1) data.m_floor = GET_HASH_KEY(tl31FloorHashname) ELIF (sArena_garage_price_struct.iExpansionFloorB2Price >= 0) tl31FloorHashname = GET_ARENA_GARAGE_MOD_COMBINED_HASH(eARENA_GARAGE_MOD_EXPANSION_FLOOR_0, -1, eARENA_GARAGE_MOD_EXPANSION_FLOOR_1, sArenaData.iExpansionFloorB2) data.m_floor = GET_HASH_KEY(tl31FloorHashname) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: invalid m_floor values!!!") ENDIF ENDIF data.m_floor_amount = 0 IF (sArena_garage_price_struct.iExpansionFloorB1Price >= 0) data.m_floor_amount += sArena_garage_price_struct.iExpansionFloorB1Price ENDIF IF (sArena_garage_price_struct.iExpansionFloorB2Price >= 0) data.m_floor_amount += sArena_garage_price_struct.iExpansionFloorB2Price ENDIF iFinalPropValue -= data.m_floor_amount ENDIF IF (sArena_garage_price_struct.iBennyMechanicPrice >= 0) OR (sArena_garage_price_struct.iWeaponMechanicPrice >= 0) OR NOT bRenovateArenaGarage IF (sArena_garage_price_struct.iBennyMechanicPrice != 0 AND sArena_garage_price_struct.iWeaponMechanicPrice >= 0) OR NOT bRenovateArenaGarage tl31MechanicHashname = GET_ARENA_GARAGE_MOD_COMBINED_HASH(eARENA_GARAGE_MOD_BENNY_MECHANIC, sArenaData.iBennyMechanic, eARENA_GARAGE_MOD_WEAPON_MECHANIC, sArenaData.iWeaponMechanic) data.m_mechanic = GET_HASH_KEY(tl31MechanicHashname) ELSE IF (sArena_garage_price_struct.iBennyMechanicPrice >= 0) tl31MechanicHashname = GET_ARENA_GARAGE_MOD_COMBINED_HASH(eARENA_GARAGE_MOD_BENNY_MECHANIC, sArenaData.iBennyMechanic, eARENA_GARAGE_MOD_WEAPON_MECHANIC, -1) data.m_mechanic = GET_HASH_KEY(tl31MechanicHashname) ELIF (sArena_garage_price_struct.iWeaponMechanicPrice >= 0) tl31MechanicHashname = GET_ARENA_GARAGE_MOD_COMBINED_HASH(eARENA_GARAGE_MOD_BENNY_MECHANIC, -1, eARENA_GARAGE_MOD_WEAPON_MECHANIC, sArenaData.iWeaponMechanic) data.m_mechanic = GET_HASH_KEY(tl31MechanicHashname) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: invalid m_mechanic values!!!") ENDIF ENDIF data.m_mechanic_amount = 0 IF (sArena_garage_price_struct.iBennyMechanicPrice >= 0) data.m_mechanic_amount += sArena_garage_price_struct.iBennyMechanicPrice ENDIF IF (sArena_garage_price_struct.iWeaponMechanicPrice >= 0) data.m_mechanic_amount += sArena_garage_price_struct.iWeaponMechanicPrice ENDIF iFinalPropValue -= data.m_mechanic_amount ENDIF IF (sArena_garage_price_struct.iPersonalQuartersPrice >= 0) OR NOT bRenovateArenaGarage data.m_personalQuarters = GET_HASH_KEY(GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_PERSONAL_QUARTERS, sArenaData.iPersonalQuarters)) data.m_personalQuarters_amount = sArena_garage_price_struct.iPersonalQuartersPrice iFinalPropValue -= data.m_personalQuarters_amount ENDIF IF (iFinalPropValue >= 0) OR NOT bRenovateArenaGarage data.m_location = GET_HASH_KEY(GET_ARENA_GARAGE_NAME_FROM_ID(eArenaID)) data.m_location_amount = iFinalPropValue ENDIF IF NOT bRenovateArenaGarage CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: Bought ARENA_GARAGE for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_ARENA_GARAGE_NAME_FROM_ID(eArenaID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_STYLE, sArenaData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_graphics:", data.m_graphics, " m_graphics_amount:$", data.m_graphics_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_GRAPHICS, sArenaData.iGraphics)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_colour:", data.m_colour, " m_colour_amount:$", data.m_colour_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_COLOUR, sArenaData.iColour)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_floor:", data.m_floor, " ($", sArena_garage_price_struct.iExpansionFloorB1Price, "+$", sArena_garage_price_struct.iExpansionFloorB2Price, ") m_floor_amount:$", data.m_floor_amount, " ", tl31FloorHashname) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_mechanic:", data.m_mechanic, " ($", sArena_garage_price_struct.iBennyMechanicPrice, "+$", sArena_garage_price_struct.iWeaponMechanicPrice, ") m_mechanic_amount:$", data.m_mechanic_amount, " ", tl31MechanicHashname) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_personalQuarters:", data.m_personalQuarters," m_personalQuarters_amount:$", data.m_personalQuarters_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_PERSONAL_QUARTERS, sArenaData.iPersonalQuarters)) NETWORK_SPEND_BUY_ARENA(propval, FALSE, TRUE, data) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: Renovate ARENA_GARAGE for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_ARENA_GARAGE_NAME_FROM_ID(eArenaID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_STYLE, sArenaData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_graphics:", data.m_graphics, " m_graphics_amount:$", data.m_graphics_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_GRAPHICS, sArenaData.iGraphics)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_colour:", data.m_colour, " m_colour_amount:$", data.m_colour_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_COLOUR, sArenaData.iColour)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_floor:", data.m_floor, " ($", sArena_garage_price_struct.iExpansionFloorB1Price, "+$", sArena_garage_price_struct.iExpansionFloorB2Price, ") m_floor_amount:$", data.m_floor_amount, " ", tl31FloorHashname) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_mechanic:", data.m_mechanic, " ($", sArena_garage_price_struct.iBennyMechanicPrice, "+$", sArena_garage_price_struct.iWeaponMechanicPrice, ") m_mechanic_amount:$", data.m_mechanic_amount, " ", tl31MechanicHashname) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_personalQuarters:", data.m_personalQuarters," m_personalQuarters_amount:$", data.m_personalQuarters_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_PERSONAL_QUARTERS, sArenaData.iPersonalQuarters)) NETWORK_SPEND_UPGRADE_ARENA(propval, FALSE, TRUE, data) ENDIF IF NOT bRenovateArenaGarage SET_ARENA_GARAGE_AS_OWNED(eArenaID) SET_BIT(MPGlobalsAmbience.iFmGbHelpBitSet8, BI_FM_GANG_BOSS_HELP_8_ARENA_WORKSHOP_PURCHASED) PRINTLN("[FMBB_CALL] - BUY_MP_ARENA_GARAGE_FROM_WEBSITE - BI_FM_GANG_BOSS_HELP_8_ARENA_WORKSHOP_PURCHASED set") #IF IS_DEBUG_BUILD IF GET_COMMANDLINE_PARAM_EXISTS("sc_SkipArenaCutscenes") SET_LOCAL_PLAYER_HAS_VIEWED_ARENA_MOCAP_SCENE_1(TRUE) SET_LOCAL_PLAYER_HAS_VIEWED_ARENA_MOCAP_SCENE_2(TRUE) ENDIF #ENDIF // SET_ARENA_GARAGE_DJ_ACTIVE_STATE(DJ_SOLOMUN, TRUE) ENDIF ELIF GET_ARENA_GARAGE_BASE_PRICE(eTradeInArena) > 0 // IF NOT SHOULD_ARENA_GARAGE_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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_ARENA_GARAGE_FROM_WEBSITE: Trading the business ", eTradeInArena, " is earning the player:$", iOwnedTradeArenaValue) NETWORK_EARN_NIGHTCLUB_AND_WAREHOUSE(iOwnedTradeArenaValue, GET_HASH_KEY(GET_ARENA_GARAGE_NAME_FROM_ID(eTradeInArena)), 0, 0, 0, 0, 0) // ELSE // CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: Earn nothing from property:$", GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot), " ", tl_15PropertyName, " as was free") // ENDIF IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = finalPendingTransactionValue iFinalPropValue += iOwnedTradeArenaValue // data.m_style = GET_HASH_KEY(GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_STYLE, sArenaData.iStyle)) data.m_style_amount = sArena_garage_price_struct.iStylePrice iFinalPropValue -= data.m_style_amount // data.m_graphics = GET_HASH_KEY(GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_GRAPHICS, sArenaData.iGraphics)) data.m_graphics_amount = sArena_garage_price_struct.iGraphicsPrice iFinalPropValue -= data.m_graphics_amount // data.m_colour = GET_HASH_KEY(GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_COLOUR, sArenaData.iColour)) data.m_colour_amount = sArena_garage_price_struct.iColourPrice iFinalPropValue -= data.m_colour_amount // data.m_floor = GET_HASH_KEY(GET_ARENA_GARAGE_MOD_COMBINED_HASH(eARENA_GARAGE_MOD_EXPANSION_FLOOR_0, sArenaData.iExpansionFloorB1, eARENA_GARAGE_MOD_EXPANSION_FLOOR_1, sArenaData.iExpansionFloorB2)) data.m_floor_amount = sArena_garage_price_struct.iExpansionFloorB1Price data.m_floor_amount += sArena_garage_price_struct.iExpansionFloorB2Price iFinalPropValue -= data.m_floor_amount // data.m_mechanic = GET_HASH_KEY(GET_ARENA_GARAGE_MOD_COMBINED_HASH(eARENA_GARAGE_MOD_BENNY_MECHANIC, sArenaData.iBennyMechanic, eARENA_GARAGE_MOD_WEAPON_MECHANIC, sArenaData.iWeaponMechanic)) data.m_mechanic_amount = sArena_garage_price_struct.iBennyMechanicPrice data.m_mechanic_amount += sArena_garage_price_struct.iWeaponMechanicPrice iFinalPropValue -= data.m_mechanic_amount // data.m_personalQuarters = GET_HASH_KEY(GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_PERSONAL_QUARTERS, sArenaData.iPersonalQuarters)) data.m_personalQuarters_amount = sArena_garage_price_struct.iPersonalQuartersPrice iFinalPropValue -= data.m_personalQuarters_amount // data.m_location = GET_HASH_KEY(GET_ARENA_GARAGE_NAME_FROM_ID(eArenaID)) data.m_location_amount = iFinalPropValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: Trading ARENA_GARAGE for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_location:", data.m_location, " m_location_amount:$", data.m_location_amount, " ", GET_ARENA_GARAGE_NAME_FROM_ID(eArenaID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_style:", data.m_style, " m_style_amount:$", data.m_style_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_STYLE, sArenaData.iStyle)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_graphics:", data.m_graphics, " m_graphics_amount:$", data.m_graphics_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_GRAPHICS, sArenaData.iGraphics)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_colour:", data.m_colour, " m_colour_amount:$", data.m_colour_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_COLOUR, sArenaData.iColour)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_floor:", data.m_floor, " ($", sArena_garage_price_struct.iExpansionFloorB1Price, "+$", sArena_garage_price_struct.iExpansionFloorB2Price, ") m_floor_amount:$", data.m_floor_amount, " ", tl31FloorHashname) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_mechanic:", data.m_mechanic, " ($", sArena_garage_price_struct.iBennyMechanicPrice, "+$", sArena_garage_price_struct.iWeaponMechanicPrice, ") m_mechanic_amount:$", data.m_mechanic_amount, " ", tl31MechanicHashname) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: m_personalQuarters:", data.m_personalQuarters," m_personalQuarters_amount:$", data.m_personalQuarters_amount, " ", GET_ARENA_GARAGE_MOD_NAME_FROM_ID(eARENA_GARAGE_MOD_PERSONAL_QUARTERS, sArenaData.iPersonalQuarters)) NETWORK_SPEND_UPGRADE_ARENA(propval, FALSE, TRUE, data) // REMOTE_REQUEST_REMOVE_ALL_CONTRABAND_FROM_XXXXXX() // TRADE_ARENA_GARAGE(eArenaID, eTradeInArena) ENDIF INT iBuyPropertyIndex = PROPERTY_ARENAWARS_GARAGE_LVL1 iResultSlot = PROPERTY_ARENAWARS_GARAGE_LVL1 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_ARENAWARS_GAR1, iBuyPropertyIndex) IF NOT bRenovateArenaGarage SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_ARENAWARS_GAR1_VALUE,CEIL(TO_FLOAT(GET_ARENA_GARAGE_PRICE(eArenaID))*g_sMPTunables.fPropertyMultiplier)) IF GET_OWNED_PROPERTY(0) <= 0 IF IS_PERSONAL_VEHICLE_DRIVEABLE_IN_FREEMODE() IF DOES_ENTITY_EXIST(MPGlobalsAmbience.vehPersonalVehicle) INT iForceDisplayUpdatedSlot MPSV_GET_DISPLAY_SLOT_FROM_SAVE_SLOT(CURRENT_SAVED_VEHICLE_SLOT(),iForceDisplayUpdatedSlot) IF iForceDisplayUpdatedSlot <= 0 iForceDisplayUpdatedSlot = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,GET_ENTITY_MODEL(MPGlobalsAmbience.vehPersonalVehicle)) IF iForceDisplayUpdatedSlot >= 0 PRINTLN("Forcing vehicle out in freemode slot display to #",iForceDisplayUpdatedSlot," when buying ARENA_GARAGE") MPSV_SET_DISPLAY_SLOT(iForceDisplayUpdatedSlot,CURRENT_SAVED_VEHICLE_SLOT()) IF iForceDisplayUpdatedSlot != 0 MPSV_SET_DISPLAY_SLOT(0,-1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(sArenaData.iPersonalQuarters) IF (GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_PERSONAL_QUARTERS)) != sArenaData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: set ARENA_GARAGE spawn, player bought accomodation") SET_MP_SPAWN_POINT_SETTING(MP_SETTING_SPAWN_ARENA_GARAGE) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: set ARENA_GARAGE spawn, player already has accom so not a renovation") ENDIF ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: iStyle: ", sArenaData.iStyle) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: iGraphics: ", sArenaData.iGraphics) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: iColour: ", sArenaData.iColour) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: iExpansionFloorB1: ", sArenaData.iExpansionFloorB1) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: iExpansionFloorB2: ", sArenaData.iExpansionFloorB2) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: iBennyMechanic: ", sArenaData.iBennyMechanic) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: iWeaponMechanic: ", sArenaData.iWeaponMechanic) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: iPersonalQuarters: ", sArenaData.iPersonalQuarters) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_STYLE), sArenaData.iStyle) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_GRAPHICS), sArenaData.iGraphics) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_COLOUR), sArenaData.iColour) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_EXPANSION_FLOOR_0), sArenaData.iExpansionFloorB1) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_EXPANSION_FLOOR_1), sArenaData.iExpansionFloorB2) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_BENNY_MECHANIC), sArenaData.iBennyMechanic) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_WEAPON_MECHANIC), sArenaData.iWeaponMechanic) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARENA_GARAGE_UPGRADE(eARENA_GARAGE_MOD_PERSONAL_QUARTERS), sArenaData.iPersonalQuarters) IF (sArenaData.iExpansionFloorB1 >= 1) iBuyPropertyIndex = PROPERTY_ARENAWARS_GARAGE_LVL2 iResultSlot = PROPERTY_OWNED_SLOT_ARENAWARS_GARAGE_LVL1 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_ARENAWARS_GAR2, iBuyPropertyIndex) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_ARENAWARS_GAR2_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: MP_STAT_PROP_ARENAWARS_GAR2 iBuyPropertyIndex:", iBuyPropertyIndex) ENDIF IF (sArenaData.iExpansionFloorB2 >= 1) iBuyPropertyIndex = PROPERTY_ARENAWARS_GARAGE_LVL3 iResultSlot = PROPERTY_OWNED_SLOT_ARENAWARS_GARAGE_LVL2 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_ARENAWARS_GAR3, iBuyPropertyIndex) IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ELSE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 ENDIF SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_ARENAWARS_GAR3_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: MP_STAT_PROP_ARENAWARS_GAR3 iBuyPropertyIndex:", iBuyPropertyIndex) ENDIF SETUP_ARENA_GARAGE_BROADCAST_DATA() enumCharacterList CharacterToAdd = CHAR_BRYONY IF NOT IS_CONTACT_IN_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK) BOOL bDisplay = TRUE ADD_CONTACT_TO_PHONEBOOK(CharacterToAdd, MULTIPLAYER_BOOK,bDisplay) CPRINTLN(DEBUG_INTERNET, "[ARENA_GARAGE_CONTACT] MAINTAIN_ADD_ARENA_WARS_ARENA_GARAGE_CONTACT - ADD_CONTACT_TO_PHONEBOOK(", g_sCharacterSheetAll[CharacterToAdd].label, ", MULTIPLAYER_BOOK, ", bDisplay, ")") ENDIF // IF bDisplayed_HELP_AWSE0nc // CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchased ARENA_GARAGE, set bDisplayed_HELP_AWSE0nc false") // bDisplayed_HELP_AWSE0nc = FALSE // ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Special","WEB_NAVIGATION_SOUNDS_PHONE") bBrowserShoppingSavePending = TRUE CHECK_AMERICAN_DREAM_ACHIEVEMENT() POPULATE_MP_ARENA_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PROPERTY_D_PURCHASED", TRUE, bRenovateArenaGarage, FALSE, FALSE, rpmt_5_ARENA_GARAGE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase complete, refreshing pin map") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE iBoughtPropertyIndex = -1 eBoughtFactoryIndex = FACTORY_ID_INVALID eBoughtHangarIndex = HANGAR_ID_INVALID eBoughtDefunctBaseIndex = DEFUNCT_BASE_ID_INVALID eBoughtNightclubIndex = NIGHTCLUB_ID_INVALID eBoughtArenaIndex = eArenaID eBoughtArcadeIndex = ARCADE_PROPERTY_ID_INVALID eBoughtCasinoIndex = CASINO_APARTMENT_ID_INVALID iBoughtCasinoPreset = -1 eBoughtAutoShopIndex = AUTO_SHOP_PROPERTY_ID_INVALID #IF FEATURE_FIXER eBoughtFixerHQIndex = FIXER_HQ_ID_INVALID #ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARENA_GARAGE_FROM_WEBSITE: purchase complete, resetting iCustomAptVariant to 1") ENDPROC PROC BUY_MP_CASINO_MEMBERSHIP_FROM_WEBSITE() IF GET_CASINO_MEMBERSHIP_COST() > 0 AND NOT NETWORK_CAN_SPEND_MONEY(GET_CASINO_MEMBERSHIP_COST(), FALSE, TRUE, FALSE) mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_MEMBERSHIP_FROM_WEBSITE: NETWORK_CAN_SPEND_MONEY false") EXIT ENDIF GENERIC_TRANSACTION_STATE eTransactionResult WHILE NOT PURCHASE_CASINO_MEMBERSHIP(eTransactionResult, CMPP_WEBSITE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_MEMBERSHIP_FROM_WEBSITE: Running transaction") RENDER_BROWSER() WAIT(0) ENDWHILE RENDER_BROWSER() IF eTransactionResult = TRANSACTION_STATE_FAILED CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_MEMBERSHIP_FROM_WEBSITE: TRANSACTION_STATE_FAILED") GO_TO_WEBSITE("WWW_THEDIAMONDCASINOANDRESORT_COM_S_MEMBERSHIP_D_FAILED") EXIT ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_MEMBERSHIP_FROM_WEBSITE: ") POPULATE_MP_CASINO_PROPERTY_SITE_PIN_MAP(mov, TRUE) GO_TO_WEBSITE("WWW_THEDIAMONDCASINOANDRESORT_COM_S_MEMBERSHIP_D_SUCCESS") ENDPROC PROC BUY_MP_CASINO_APT_FROM_WEBSITE(CASINO_APT_ID eCasinoID, INT &iResultSlot) INT minPendingTransactionValue, finalPendingTransactionValue, iOwnedTradeArenaValue INT iBankBalance = NETWORK_GET_VC_BANK_BALANCE() INT iWalletBalance = NETWORK_GET_VC_WALLET_BALANCE() IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_CASWEB_0") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_CASWEB_0B") CLEAR_HELP() CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF IF NOT IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE) IF GET_PLAYER_RANK(GET_PLAYER_INDEX()) < 5 CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed, player doesn't have sufficient rank (", GET_PLAYER_RANK(GET_PLAYER_INDEX()), ")") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed, player pending unlock for sufficient rank") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK_PENDING ENDIF SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF IF USE_SERVER_TRANSACTIONS() IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CWARNINGLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed - session pending!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF TEXT_LABEL_15 tl_15ArenaName = GET_CASINO_APT_NAME_FROM_ID(eCasinoID) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: trying to purchase CASINO_APT ", tl_15ArenaName, " #", eCasinoID) INT propval = CEIL(TO_FLOAT(GET_CASINO_APT_PRICE(eCasinoID))*g_sMPTunables.fPropertyMultiplier) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase valid, attempting index ", tl_15ArenaName, " $", propval) minPendingTransactionValue = propval CASINO_APT_ID eTradeInArena = GET_PLAYERS_OWNED_CASINO_APARTMENT(PLAYER_ID()) IF IS_CASINO_APT_ID_VALID(eTradeInArena) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: currently owns CASINO_APT #", eTradeInArena) // INT iCurrentMission = GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) // IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: player current gang boss mission: \"", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission), "\"") // // IF (iCurrentMission = FMMC_TYPE_FMBB_DEFEND) // OR (iCurrentMission = FMMC_TYPE_FMBB_PHONECALL) // OR (iCurrentMission = FMMC_TYPE_FMBB_SELL) // OR (iCurrentMission = FMMC_TYPE_FMBB_CLUB_MANAGEMENT) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed, player current gang boss mission: ", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission)) // mpPropertySiteFailReason = MPSFR_ON_MISSION // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // EXIT // ENDIF // ENDIF ENDIF BOOL bRenovateArenaGarage = FALSE IF (eCasinoID = eTradeInArena) // IF GET_LOCAL_PLAYER_USING_ARENA_BOX_SEATID() != -1 // CWARNINGLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed - using arena box seat ", GET_LOCAL_PLAYER_USING_ARENA_BOX_SEATID(), "!") // mpPropertySiteFailReason = MPSFR_NOT_SAFE // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // EXIT // ENDIF propval = CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES(eCasinoID, sCasino_apt_price_struct) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: renovate ", tl_15ArenaName, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) bRenovateArenaGarage = TRUE ELSE IF eTradeInArena != CASINO_APARTMENT_ID_INVALID INT iTotalGoodsInHub = GET_PLAYERS_TOTAL_OF_ALL_GOODS_IN_HUB(PLAYER_ID()) IF iTotalGoodsInHub > 0 CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed - can't trade, has ", iTotalGoodsInHub, " goods in hub!") mpPropertySiteFailReason = MPSFR_HAS_STOCK SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF propval += CALCULATE_COST_OF_CASINO_APT_INTERIOR_UPGRADES(eCasinoID, sCasino_apt_price_struct) IF NOT IS_CASINO_APT_ID_VALID(eTradeInArena) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase ", tl_15ArenaName, " for ", eTradeInArena, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: trade ", tl_15ArenaName, " for ", eTradeInArena, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ENDIF ENDIF minPendingTransactionValue = propval //is it a debit or refund IF NOT IS_CASINO_APT_ID_VALID(eTradeInArena) OR bRenovateArenaGarage IF minPendingTransactionValue > 0 //do they have enough money CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", minPendingTransactionValue) IF (minPendingTransactionValue <= 0 OR (minPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", minPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ArenaName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ELSE //is it a debit or refund INT iTempMinPendingTransactionValue = minPendingTransactionValue-GET_CASINO_APT_SALE_VALUE(eTradeInArena) IF iTempMinPendingTransactionValue >0 //do they have enough money CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " > $", minPendingTransactionValue, "+", GET_CASINO_APT_SALE_VALUE(eTradeInArena)) IF (iTempMinPendingTransactionValue <= 0 OR (iTempMinPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iTempMinPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:iTempMinPendingTransactionValue $", minPendingTransactionValue, "+", GET_CASINO_APT_SALE_VALUE(eTradeInArena), "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ArenaName), iTempMinPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <= $", minPendingTransactionValue, "+", GET_CASINO_APT_SALE_VALUE(eTradeInArena)) ENDIF INT iReplaceSpecificPropertySlot REPLACE_MP_VEH_OR_PROP_MENU replaceMenu WHILE NOT RUN_REPLACE_PROPERTY_MENU(replaceMenu,iResultSlot,ENUM_TO_INT(eCasinoID),iReplaceSpecificPropertySlot,rpmt_6_CASINO_APARTMENT) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE IF iResultSlot = -1 mpPropertySiteFailReason = MPSFR_CANCELED SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE g_iPendingBrowserTimer = g_iBrowserTimer PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") CPRINTLN(DEBUG_INTERNET, "CDM: BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed, player backed out of property selection") EXIT ELSE iOwnedTradeArenaValue = GET_CASINO_APT_SALE_VALUE(eTradeInArena) finalPendingTransactionValue = propval - iOwnedTradeArenaValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: Player selected iResultSlot ", iResultSlot, ", trade ba: ", eTradeInArena, " for trade. propval $", propval, ", iOwnedTradeArenaValue: ", iOwnedTradeArenaValue, " 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 CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " + trade:$", iOwnedTradeArenaValue, " <> $", finalPendingTransactionValue) IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ArenaName), finalPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ENDIF CASINO_APT_DATA_STRUCT sCasinoData GET_SCALEFORM_CASINO_APT_DATA(sCasinoData) // IF IS_CASINO_APT_UPGRADE_PURCHASE_DISABLED(eCASINO_APT_MOD_DJ2_PURCHASED, eCasinoID, sCasinoData.iDJChoice) // CWARNINGLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed - DJ Choice ", sCasinoData.iDJChoice, " disabled") // mpPropertySiteFailReason = MPSFR_NOT_SAFE // SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // EXIT // ELSE // CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: DJ Choice ", sCasinoData.iDJChoice, " enabled") // ENDIF IF USE_SERVER_TRANSACTIONS() INT iPropval IF eCasinoID = eTradeInArena iPropval = 0 ELSE iPropval = CEIL(TO_FLOAT(GET_CASINO_APT_PRICE(eCasinoID))*g_sMPTunables.fPropertyMultiplier) ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_CASINO_APT_KEY_FOR_CATALOGUE(eCasinoID) INT iInventoryKey = GET_CASINO_APT_INVENTORY_KEY_FOR_CATALOGUE() INT iSellingItemId = 0 IF IS_CASINO_APT_ID_VALID(eTradeInArena) iSellingItemId = GET_CASINO_APT_KEY_FOR_CATALOGUE(eTradeInArena) ENDIF INT iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT /////////////////////////////////////////// /// TRANSACTION FOR ARENA_GARAGE_b WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, iPropval, iResultSlot, CATEGORY_INVENTORY_WAREHOUSE, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemId, iInventoryKey, 0, iOwnedTradeArenaValue, iSellingItemId) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) RENDER_BROWSER() SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed, failed to process transaction") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: success!!") BREAK DEFAULT mpPropertySiteFailReason = MPSFR_NOT_SAFE CASSERTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase failed, unknown iProcessSuccess: \"", iProcessSuccess, "\"") EXIT BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: final:$", finalPendingTransactionValue, ", propval $", propval) //Assign the telemetry data //Increment the spending stat IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF TEXT_LABEL_23 tl23PresetName = "CASWEB_PRESET_" tl23PresetName += iBoughtCasinoPreset IF bRenovateArenaGarage tl23PresetName = "CASWEB_PRESET_0" ENDIF IF NOT bRenovateArenaGarage IF IS_PLAYER_IN_CASINO(PLAYER_ID()) AND NOT IS_PLAYER_WALKING_IN_OR_OUT_OF_SIMPLE_INTERIOR(PLAYER_ID()) AND IS_LOCAL_PLAYER_PED_IN_CASINO_ROOM(CASINO_RECEPTION_ROOM) PRINTLN(" BUY_MP_CASINO_APT_FROM_WEBSITE - Set BS7_SIMPLE_INTERIOR_CASINO_MAITRE_D_PLAY_PURCHASED_PENTHOUSE_LINE") SET_BIT(g_SimpleInteriorData.iSeventhBS, BS7_SIMPLE_INTERIOR_CASINO_MAITRE_D_PLAY_PURCHASED_PENTHOUSE_LINE) ENDIF ENDIF STRUCT_SPENT_ON_CASINO data //Check if we're trading of just buying IF (NOT IS_CASINO_APT_ID_VALID(eTradeInArena)) OR (bRenovateArenaGarage) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = propval IF (sCasino_apt_price_struct.iColourOptionPrice >= 0) OR NOT bRenovateArenaGarage data.m_colour = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_COLOUR_OPTION, sCasinoData.iColourOption)) data.m_colour_amount = sCasino_apt_price_struct.iColourOptionPrice iFinalPropValue -= data.m_colour_amount ENDIF IF (sCasino_apt_price_struct.iStyleOptionPrice >= 0) OR NOT bRenovateArenaGarage data.m_graphics = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_STYLE_OPTION, sCasinoData.iStyleOption)) data.m_graphics_amount = sCasino_apt_price_struct.iStyleOptionPrice iFinalPropValue -= data.m_graphics_amount ENDIF IF (sCasino_apt_price_struct.iLoungePrice >= 0) OR NOT bRenovateArenaGarage data.m_lounge = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_LOUNGE, sCasinoData.iLounge)) data.m_lounge_amount = sCasino_apt_price_struct.iLoungePrice iFinalPropValue -= data.m_lounge_amount ENDIF IF (sCasino_apt_price_struct.iBarPrice >= 0) OR NOT bRenovateArenaGarage data.m_barParty = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_BAR, sCasinoData.iBar)) data.m_barParty_amount = sCasino_apt_price_struct.iBarPrice iFinalPropValue -= data.m_barParty_amount ENDIF IF (sCasino_apt_price_struct.iDealerPrice >= 0) OR NOT bRenovateArenaGarage data.m_dealer = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_DEALER, sCasinoData.iDealer)) data.m_dealer_amount = sCasino_apt_price_struct.iDealerPrice iFinalPropValue -= data.m_dealer_amount ENDIF IF (sCasino_apt_price_struct.iBedroomPrice >= 0) OR NOT bRenovateArenaGarage data.m_extraBedroom = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_Bedroom, sCasinoData.iBedroom)) data.m_extraBedroom_amount = sCasino_apt_price_struct.iBedroomPrice iFinalPropValue -= data.m_extraBedroom_amount ENDIF IF (sCasino_apt_price_struct.iMediaroomPrice >= 0) OR NOT bRenovateArenaGarage data.m_Mediaroom = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_Mediaroom, sCasinoData.iMediaroom)) data.m_Mediaroom_amount = sCasino_apt_price_struct.iMediaroomPrice iFinalPropValue -= data.m_Mediaroom_amount ENDIF IF (sCasino_apt_price_struct.iSpaPrice >= 0) OR NOT bRenovateArenaGarage data.m_spa = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_SPA, sCasinoData.iSpa)) data.m_spa_amount = sCasino_apt_price_struct.iSpaPrice iFinalPropValue -= data.m_spa_amount ENDIF IF (sCasino_apt_price_struct.iOfficePrice >= 0) OR NOT bRenovateArenaGarage data.m_office = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_OFFICE, sCasinoData.iOffice)) data.m_office_amount = sCasino_apt_price_struct.iOfficePrice iFinalPropValue -= data.m_office_amount ENDIF IF (sCasino_apt_price_struct.iGaragePrice >= 0) OR NOT bRenovateArenaGarage data.m_garage = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_GARAGE, sCasinoData.iGarage)) data.m_garage_amount = sCasino_apt_price_struct.iGaragePrice iFinalPropValue -= data.m_garage_amount ENDIF data.m_preset = GET_HASH_KEY(tl23PresetName) data.m_preset_amount = 0 IF (iFinalPropValue >= 0) OR NOT bRenovateArenaGarage data.m_masterBedroom = GET_HASH_KEY(GET_CASINO_APT_NAME_FROM_ID(eCasinoID)) data.m_masterBedroom_amount = iFinalPropValue ENDIF IF NOT bRenovateArenaGarage CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: Bought CASINO_APT for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_masterBedroom:", data.m_masterBedroom, " m_masterBedroom_amount:$", data.m_masterBedroom_amount, " ", GET_CASINO_APT_NAME_FROM_ID(eCasinoID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_colour:", data.m_colour, " m_colour_amount:$", data.m_colour_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_COLOUR_OPTION, sCasinoData.iColourOption)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_graphics:", data.m_graphics, " m_graphics_amount:$", data.m_graphics_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_STYLE_OPTION, sCasinoData.iStyleOption)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_lounge:", data.m_lounge, " m_lounge_amount:$", data.m_lounge_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_LOUNGE, sCasinoData.iLounge)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_barParty:", data.m_barParty, " m_barParty_amount:$", data.m_barParty_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_BAR, sCasinoData.iBar)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_dealer:", data.m_dealer, " m_dealer_amount:$", data.m_dealer_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_DEALER, sCasinoData.iDealer)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_extraBedroom:", data.m_extraBedroom, " m_extraBedroom_amount:$", data.m_extraBedroom_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_BEDROOM, sCasinoData.iBedroom)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_Mediaroom:", data.m_Mediaroom, " m_Mediaroom_amount:$", data.m_Mediaroom_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_MEDIAROOM, sCasinoData.iMediaroom)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_spa:", data.m_spa, " m_spa_amount:$", data.m_spa_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_SPA, sCasinoData.iSpa)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_office:", data.m_office, " m_office_amount:$", data.m_office_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_OFFICE, sCasinoData.iOffice)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_garage:", data.m_garage, " m_garage_amount:$", data.m_garage_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_GARAGE, sCasinoData.iGarage)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_preset:", data.m_preset, " m_preset_amount:$", data.m_preset_amount, " ", tl23PresetName) NETWORK_SPEND_BUY_CASINO(propval, FALSE, TRUE, data) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: Renovate CASINO_APT for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_masterBedroom:", data.m_masterBedroom, " m_masterBedroom_amount:$", data.m_masterBedroom_amount, " ", GET_CASINO_APT_NAME_FROM_ID(eCasinoID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_colour:", data.m_colour, " m_colour_amount:$", data.m_colour_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_COLOUR_OPTION, sCasinoData.iColourOption)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_graphics:", data.m_graphics, " m_graphics_amount:$", data.m_graphics_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_STYLE_OPTION, sCasinoData.iStyleOption)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_lounge:", data.m_lounge, " m_lounge_amount:$", data.m_lounge_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_LOUNGE, sCasinoData.iLounge)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_barParty:", data.m_barParty, " m_barParty_amount:$", data.m_barParty_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_BAR, sCasinoData.iBar)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_dealer:", data.m_dealer, " m_dealer_amount:$", data.m_dealer_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_DEALER, sCasinoData.iDealer)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_extraBedroom:", data.m_extraBedroom, " m_extraBedroom_amount:$", data.m_extraBedroom_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_BEDROOM, sCasinoData.iBedroom)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_Mediaroom:", data.m_Mediaroom, " m_Mediaroom_amount:$", data.m_Mediaroom_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_MEDIAROOM, sCasinoData.iMediaroom)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_spa:", data.m_spa, " m_spa_amount:$", data.m_spa_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_SPA, sCasinoData.iSpa)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_office:", data.m_office, " m_office_amount:$", data.m_office_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_OFFICE, sCasinoData.iOffice)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_garage:", data.m_garage, " m_garage_amount:$", data.m_garage_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_GARAGE, sCasinoData.iGarage)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_preset:", data.m_preset, " m_preset_amount:$", data.m_preset_amount, " ", tl23PresetName) NETWORK_SPEND_UPGRADE_CASINO(propval, FALSE, TRUE, data) ENDIF IF NOT bRenovateArenaGarage SET_CASINO_APARTMENT_AS_OWNED(eCasinoID) IF !IS_PLAYER_IN_CASINO(PLAYER_ID()) GB_SETUP_CASINO_PURCHASED_FLOW_CALL() PRINTLN("[FMBB_CALL] - BUY_MP_CASINO_APT_FROM_WEBSITE - GB_SETUP_CASINO_PURCHASED_FLOW_CALL set") ELSE g_bPurchasedCasinoAptInsideCasino = TRUE CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: g_bPurchasedCasinoAptInsideCasino = TRUE") ENDIF #IF DEFINED(NETWORK_CASINO_CAN_BET_PVC) IF NOT NETWORK_CASINO_CAN_BET_PVC() // [[HELP_CASWEB_1] // Please note: The Diamond Casino & Resort does not support the use of Shark Cards in your region. Only earned GTA$ can be used to purchase additional chips to use inside the casino. // CPRINTLN(DEBUG_INTERNET, " - display HELP_CASWEB_1 (iStaticCurrentPage: ", iStaticCurrentPage, ")") // SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_CASWEB_1", DEFAULT, TRUE) // iTutTimer = g_iBrowserTimer + 7500 ENDIF #ENDIF ENDIF ELIF GET_CASINO_APT_BASE_PRICE(eTradeInArena) > 0 // IF NOT SHOULD_CASINO_APT_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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_CASINO_APT_FROM_WEBSITE: Trading the business ", eTradeInArena, " is earning the player:$", iOwnedTradeArenaValue) NETWORK_EARN_NIGHTCLUB_AND_WAREHOUSE(iOwnedTradeArenaValue, GET_HASH_KEY(GET_CASINO_APT_NAME_FROM_ID(eTradeInArena)), 0, 0, 0, 0, 0) // ELSE // CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: Earn nothing from property:$", GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iResultSlot), " ", tl_15PropertyName, " as was free") // ENDIF IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iFinalPropValue = finalPendingTransactionValue iFinalPropValue += iOwnedTradeArenaValue // data.m_colour = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_COLOUR_OPTION, sCasinoData.iColourOption)) data.m_colour_amount = sCasino_apt_price_struct.iColourOptionPrice iFinalPropValue -= data.m_colour_amount // data.m_graphics = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_STYLE_OPTION, sCasinoData.iStyleOption)) data.m_graphics_amount = sCasino_apt_price_struct.iStyleOptionPrice iFinalPropValue -= data.m_graphics_amount // data.m_lounge = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_LOUNGE, sCasinoData.iLounge)) data.m_lounge_amount = sCasino_apt_price_struct.iLoungePrice iFinalPropValue -= data.m_lounge_amount // data.m_barParty = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_BAR, sCasinoData.iBar)) data.m_barParty_amount = sCasino_apt_price_struct.iBarPrice iFinalPropValue -= data.m_barParty_amount // data.m_dealer = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_DEALER, sCasinoData.iDealer)) data.m_dealer_amount = sCasino_apt_price_struct.iDealerPrice iFinalPropValue -= data.m_dealer_amount // data.m_extraBedroom = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_Bedroom, sCasinoData.iBedroom)) data.m_extraBedroom_amount = sCasino_apt_price_struct.iBedroomPrice iFinalPropValue -= data.m_extraBedroom_amount // data.m_Mediaroom = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_Mediaroom, sCasinoData.iMediaroom)) data.m_Mediaroom_amount = sCasino_apt_price_struct.iMediaroomPrice iFinalPropValue -= data.m_Mediaroom_amount // data.m_spa = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_SPA, sCasinoData.iSpa)) data.m_spa_amount = sCasino_apt_price_struct.iSpaPrice iFinalPropValue -= data.m_spa_amount // data.m_office = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_OFFICE, sCasinoData.iOffice)) data.m_office_amount = sCasino_apt_price_struct.iOfficePrice iFinalPropValue -= data.m_office_amount // data.m_garage = GET_HASH_KEY(GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_GARAGE, sCasinoData.iGarage)) data.m_garage_amount = sCasino_apt_price_struct.iGaragePrice iFinalPropValue -= data.m_garage_amount // data.m_preset = GET_HASH_KEY(tl23PresetName) data.m_preset_amount = 0 // data.m_masterBedroom = GET_HASH_KEY(GET_CASINO_APT_NAME_FROM_ID(eCasinoID)) data.m_masterBedroom_amount = iFinalPropValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: Trading CASINO_APT for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_masterBedroom:", data.m_masterBedroom, " m_masterBedroom_amount:$", data.m_masterBedroom_amount, " ", GET_CASINO_APT_NAME_FROM_ID(eCasinoID)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_colour:", data.m_colour, " m_colour_amount:$", data.m_colour_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_COLOUR_OPTION, sCasinoData.iColourOption)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_graphics:", data.m_graphics, " m_graphics_amount:$", data.m_graphics_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_STYLE_OPTION, sCasinoData.iStyleOption)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_lounge:", data.m_lounge, " m_lounge_amount:$", data.m_lounge_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_LOUNGE, sCasinoData.iLounge)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_barParty:", data.m_barParty, " m_barParty_amount:$", data.m_barParty_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_BAR, sCasinoData.iBar)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_dealer:", data.m_dealer, " m_dealer_amount:$", data.m_dealer_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_DEALER, sCasinoData.iDealer)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_extraBedroom:", data.m_extraBedroom, " m_extraBedroom_amount:$", data.m_extraBedroom_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_BEDROOM, sCasinoData.iBedroom)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_Mediaroom:", data.m_Mediaroom, " m_Mediaroom_amount:$", data.m_Mediaroom_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_MEDIAROOM, sCasinoData.iMediaroom)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_spa:", data.m_spa, " m_spa_amount:$", data.m_spa_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_SPA, sCasinoData.iSpa)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_office:", data.m_office, " m_office_amount:$", data.m_office_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_OFFICE, sCasinoData.iOffice)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_garage:", data.m_garage, " m_garage_amount:$", data.m_garage_amount, " ", GET_CASINO_APT_MOD_NAME_FROM_ID(eCASINO_APT_MOD_GARAGE, sCasinoData.iGarage)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: m_preset:", data.m_preset, " m_preset_amount:$", data.m_preset_amount, " ", tl23PresetName) NETWORK_SPEND_UPGRADE_CASINO(propval, FALSE, TRUE, data) // REMOTE_REQUEST_REMOVE_ALL_CONTRABAND_FROM_XXXXXX() // TRADE_ARENA_GARAGE_b(eCasinoID, eTradeInArena) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(sCasinoData.iGarage) INT iBuyPropertyIndex = PROPERTY_CASINO_GARAGE iResultSlot = PROPERTY_OWNED_SLOT_CASINO_GARAGE SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CASINO_GAR1, iBuyPropertyIndex) IF (GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_GARAGE)) != sCasinoData.iGarage) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CASINO_GAR1_VALUE,CEIL(TO_FLOAT(GET_CASINO_APT_PRICE(eCasinoID))*g_sMPTunables.fPropertyMultiplier)) IF GET_OWNED_PROPERTY(0) <= 0 IF IS_PERSONAL_VEHICLE_DRIVEABLE_IN_FREEMODE() IF DOES_ENTITY_EXIST(MPGlobalsAmbience.vehPersonalVehicle) INT iForceDisplayUpdatedSlot MPSV_GET_DISPLAY_SLOT_FROM_SAVE_SLOT(CURRENT_SAVED_VEHICLE_SLOT(),iForceDisplayUpdatedSlot) IF iForceDisplayUpdatedSlot <= 0 iForceDisplayUpdatedSlot = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,GET_ENTITY_MODEL(MPGlobalsAmbience.vehPersonalVehicle)) IF iForceDisplayUpdatedSlot >= 0 PRINTLN("Forcing vehicle out in freemode slot display to #",iForceDisplayUpdatedSlot," when buying xxxx_GARAGE_b") MPSV_SET_DISPLAY_SLOT(iForceDisplayUpdatedSlot,CURRENT_SAVED_VEHICLE_SLOT()) IF iForceDisplayUpdatedSlot != 0 MPSV_SET_DISPLAY_SLOT(0,-1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF #IF DEFINED(MP_SETTING_SPAWN_CASINO_APARTMENT) IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(sCasinoData.iBedroom) IF (GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BEDROOM)) != sCasinoData.iBedroom) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: set CASINO_APT spawn, player bought accomodation") SET_MP_SPAWN_POINT_SETTING(MP_SETTING_SPAWN_CASINO_APARTMENT) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: set CASINO_APT spawn, player already has accom so not a renovation") ENDIF ENDIF #ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: iColourOption: ", sCasinoData.iColourOption) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: iStyleOption: ", sCasinoData.iStyleOption) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: iLounge: ", sCasinoData.iLounge) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: iBar: ", sCasinoData.iBar) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: iDealer: ", sCasinoData.iDealer) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: iBedroom: ", sCasinoData.iBedroom) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: iMediaroom: ", sCasinoData.iMediaroom) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: iSpa: ", sCasinoData.iSpa) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: iOffice: ", sCasinoData.iOffice) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: iGarage: ", sCasinoData.iGarage) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_COLOUR_OPTION), sCasinoData.iColourOption) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_STYLE_OPTION), sCasinoData.iStyleOption) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_LOUNGE), sCasinoData.iLounge) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BAR), sCasinoData.iBar) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_DEALER), sCasinoData.iDealer) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_BEDROOM), sCasinoData.iBedroom) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_MEDIAROOM), sCasinoData.iMediaroom) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_SPA), sCasinoData.iSpa) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_OFFICE), sCasinoData.iOffice) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CASINO_APT_UPGRADE(eCASINO_APT_MOD_GARAGE), sCasinoData.iGarage) // IF (sCasinoData.iGarage >= 1) // iBuyPropertyIndex = PROPERTY_CASINO_GARAGE // iResultSlot = PROPERTY_OWNED_SLOT_CASINO_GARAGE // SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CASINO_GAR1, iBuyPropertyIndex) // IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) // g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) // ELSE // g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2] = 0 // ENDIF // SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CASINO_GAR1_VALUE,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot-2]) // // CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: MP_STAT_PROP_CASINO_GAR1 iBuyPropertyIndex:", iBuyPropertyIndex) // ENDIF SETUP_CASINO_APT_BROADCAST_DATA() // IF bDisplayed_HELP_AWSE0nc // CDEBUG1LN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchased ARENA_GARAGE_b, set bDisplayed_HELP_AWSE0nc false") // bDisplayed_HELP_AWSE0nc = FALSE // ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Special","WEB_NAVIGATION_SOUNDS_PHONE") bBrowserShoppingSavePending = TRUE CHECK_AMERICAN_DREAM_ACHIEVEMENT() POPULATE_MP_CASINO_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_SUCCESS", TRUE, bRenovateArenaGarage, FALSE, FALSE, rpmt_6_CASINO_APARTMENT) CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase complete, refreshing pin map") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE iBoughtPropertyIndex = -1 eBoughtFactoryIndex = FACTORY_ID_INVALID eBoughtHangarIndex = HANGAR_ID_INVALID eBoughtDefunctBaseIndex = DEFUNCT_BASE_ID_INVALID eBoughtNightclubIndex = NIGHTCLUB_ID_INVALID eBoughtArenaIndex = ARENA_GARAGE_ID_INVALID eBoughtArcadeIndex = ARCADE_PROPERTY_ID_INVALID eBoughtCasinoIndex = eCasinoID iBoughtCasinoPreset = -1 eBoughtAutoShopIndex = AUTO_SHOP_PROPERTY_ID_INVALID #IF FEATURE_FIXER eBoughtFixerHQIndex = FIXER_HQ_ID_INVALID #ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_CASINO_APT_FROM_WEBSITE: purchase complete, resetting iCustomAptVariant to 1") ENDPROC PROC BUY_MP_ARCADE_FROM_WEBSITE(ARCADE_PROPERTY_ID eArcadeID, INT &iResultSlot) INT minPendingTransactionValue, finalPendingTransactionValue, iOwnedTradeArcadeValue INT iBankBalance = NETWORK_GET_VC_BANK_BALANCE() INT iWalletBalance = NETWORK_GET_VC_WALLET_BALANCE() IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("ARCADEHELP") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("ARC_OPTIONS") CLEAR_HELP() CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF IF NOT IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE) IF GET_PLAYER_RANK(GET_PLAYER_INDEX()) < 5 CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase failed, player doesn't have sufficient rank (", GET_PLAYER_RANK(GET_PLAYER_INDEX()), ")") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase failed, player pending unlock for sufficient rank") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK_PENDING ENDIF SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_7_ARCADE) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF IF USE_SERVER_TRANSACTIONS() IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CWARNINGLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase failed - session pending!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_7_ARCADE) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF TEXT_LABEL_15 tl_15ArcadeName = GET_ARCADE_NAME_FROM_ID(eArcadeID) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: trying to purchase Arcade ", tl_15ArcadeName, " #", eArcadeID) INT propval = CEIL(TO_FLOAT(GET_ARCADE_PRICE(eArcadeID)) * g_sMPTunables.fPropertyMultiplier) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase valid, attempting index ", tl_15ArcadeName, " $", propval) minPendingTransactionValue = propval ARCADE_PROPERTY_ID eTradeInArcade = GET_PLAYERS_OWNED_ARCADE_PROPERTY(PLAYER_ID()) IF IS_ARCADE_PROPERTY_ID_VALID(eTradeInArcade) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: currently owns Arcade #", eTradeInArcade) INT iCurrentMission = GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: player current gang boss mission: \"", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission), "\"") IF (iCurrentMission = FMMC_TYPE_GB_CASINO_HEIST) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase failed, player current gang boss mission: ", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission)) mpPropertySiteFailReason = MPSFR_ON_MISSION SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_7_ARCADE) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF ENDIF BOOL bRenovateArcade = FALSE IF (eArcadeID = eTradeInArcade) IF GET_LOCAL_PLAYER_USING_OFFICE_SEATID() != -1 CWARNINGLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase failed - using office seat ", GET_LOCAL_PLAYER_USING_OFFICE_SEATID(), "!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_7_ARCADE) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF propval = CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES(eArcadeID, sArcade_price_struct) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: renovate ", tl_15ArcadeName, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) bRenovateArcade = TRUE ELSE propval += CALCULATE_COST_OF_ARCADE_INTERIOR_UPGRADES(eArcadeID, sArcade_price_struct) IF NOT IS_ARCADE_PROPERTY_ID_VALID(eTradeInArcade) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase ", tl_15ArcadeName, " for ", eTradeInArcade, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: trade ", tl_15ArcadeName, " for ", eTradeInArcade, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ENDIF ENDIF minPendingTransactionValue = propval //is it a debit or refund IF NOT IS_ARCADE_PROPERTY_ID_VALID(eTradeInArcade) OR bRenovateArcade IF minPendingTransactionValue > 0 //do they have enough money CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", minPendingTransactionValue) IF (minPendingTransactionValue <= 0 OR (minPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue, FALSE, TRUE, FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance + iWalletBalance) $", (iBankBalance + iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", minPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_7_ARCADE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ArcadeName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ELSE //is it a debit or refund INT iTempMinPendingTransactionValue = minPendingTransactionValue - GET_ARCADE_SALE_VALUE(eTradeInArcade) IF iTempMinPendingTransactionValue > 0 //do they have enough money CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " > $", minPendingTransactionValue, "+", GET_ARCADE_SALE_VALUE(eTradeInArcade)) IF (iTempMinPendingTransactionValue <= 0 OR (iTempMinPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iTempMinPendingTransactionValue, FALSE, TRUE, FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance + iWalletBalance) $", (iBankBalance + iWalletBalance), " < NETWORK_CAN_SPEND_MONEY: iTempMinPendingTransactionValue $", minPendingTransactionValue, "+", GET_ARCADE_SALE_VALUE(eTradeInArcade), "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_7_ARCADE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ArcadeName), iTempMinPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: bank: $", iBankBalance, " + wallet: $", iWalletBalance, " <= $", minPendingTransactionValue, "+", GET_ARCADE_SALE_VALUE(eTradeInArcade)) ENDIF INT iReplaceSpecificPropertySlot REPLACE_MP_VEH_OR_PROP_MENU replaceMenu WHILE NOT RUN_REPLACE_PROPERTY_MENU(replaceMenu, iResultSlot, ENUM_TO_INT(eArcadeID), iReplaceSpecificPropertySlot, rpmt_7_ARCADE) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE IF iResultSlot = -1 mpPropertySiteFailReason = MPSFR_CANCELED SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_7_ARCADE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE g_iPendingBrowserTimer = g_iBrowserTimer PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") CPRINTLN(DEBUG_INTERNET, "CDM: BUY_MP_ARCADE_FROM_WEBSITE: purchase failed, player backed out of property selection") EXIT ELSE iOwnedTradeArcadeValue = GET_ARCADE_SALE_VALUE(eTradeInArcade) finalPendingTransactionValue = propval - iOwnedTradeArcadeValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: Player selected iResultSlot ", iResultSlot, ", trade ba: ", eTradeInArcade, " for trade. propval $", propval, ", iOwnedTradeArcadeValue: ", iOwnedTradeArcadeValue, " 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 CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: bank: $", iBankBalance, " + wallet: $", iWalletBalance, " + trade: $", iOwnedTradeArcadeValue, " <> $", finalPendingTransactionValue) IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_7_ARCADE) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15ArcadeName), finalPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ENDIF ARCADE_DATA_STRUCT sArcadeData GET_SCALEFORM_ARCADE_DATA(sArcadeData) IF USE_SERVER_TRANSACTIONS() INT iPropval IF eArcadeID = eTradeInArcade iPropval = 0 ELSE iPropval = CEIL(TO_FLOAT(GET_ARCADE_PRICE(eArcadeID)) * g_sMPTunables.fPropertyMultiplier) ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_ARCADE_KEY_FOR_CATALOGUE(eArcadeID) INT iInventoryKey = GET_ARCADE_INVENTORY_KEY_FOR_CATALOGUE() INT iSellingItemId = 0 IF IS_ARCADE_PROPERTY_ID_VALID(eTradeInArcade) iSellingItemId = GET_ARCADE_KEY_FOR_CATALOGUE(eTradeInArcade) ENDIF INT iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT IF GET_ARCADE_BASE_PRICE(eTradeInArcade) > 0 INT iSafeCash = GET_MP_INT_CHARACTER_STAT(MP_STAT_ARCADE_SAFE_CASH_VALUE) IF iSafeCash > 0 g_iCachedPlayerCashForArcadeSafe = iSafeCash g_eCachedPlayerArcadeForArcadeSafe = GET_PLAYERS_OWNED_ARCADE_PROPERTY(PLAYER_ID()) PRINTLN("[ARCADE_PAYOUT] SAFE_SWAP - cacheing safe cash stat") ELSE PRINTLN("[ARCADE_PAYOUT] SAFE_SWAP - cash stat was 0 not cacheing") ENDIF ENDIF WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, iPropval, iResultSlot, CATEGORY_INVENTORY_WAREHOUSE, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemId, iInventoryKey, 0, iOwnedTradeArcadeValue, iSellingItemId) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) RENDER_BROWSER() SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase failed, failed to process transaction") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_7_ARCADE) g_iCachedPlayerCashForArcadeSafe = 0 g_eCachedPlayerArcadeForArcadeSafe = GET_PLAYERS_OWNED_ARCADE_PROPERTY(PLAYER_ID()) PRINTLN("[ARCADE_PAYOUT] SAFE_SWAP - clearing cached values") PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: success!!") BREAK DEFAULT mpPropertySiteFailReason = MPSFR_NOT_SAFE CASSERTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase failed, unknown iProcessSuccess: \"", iProcessSuccess, "\"") EXIT BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: final: $", finalPendingTransactionValue, ", propval $", propval) //Assign the telemetry data //Increment the spending stat IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF STRUCT_ARCADE sArcadeTelemetry sArcadeTelemetry.location = GET_HASH_KEY(GET_ARCADE_NAME_FROM_ID(eArcadeID)) sArcadeTelemetry.garage = GET_HASH_KEY(GET_ARCADE_MOD_NAME_FROM_ID(eARCADE_MOD_GARAGE, sArcadeData.iGarage)) sArcadeTelemetry.garage_amount = sArcade_price_struct.iGaragePrice sArcadeTelemetry.sleeping_quarter = GET_HASH_KEY(GET_ARCADE_MOD_NAME_FROM_ID(eARCADE_MOD_PERSONAL_QUARTERS, sArcadeData.iPersonalQuarters)) sArcadeTelemetry.sleeping_quarter_amount = sArcade_price_struct.iPersonalQuartersPrice sArcadeTelemetry.m_style = GET_HASH_KEY(GET_ARCADE_MOD_NAME_FROM_ID(eARCADE_MOD_CEILING, sArcadeData.iCeiling)) sArcadeTelemetry.m_style_amount = sArcade_price_struct.iCeilingPrice sArcadeTelemetry.m_mural = GET_HASH_KEY(GET_ARCADE_MOD_NAME_FROM_ID(eARCADE_MOD_WALL, sArcadeData.iWall)) sArcadeTelemetry.m_mural_amount = sArcade_price_struct.iWallPrice sArcadeTelemetry.m_floor = GET_HASH_KEY(GET_ARCADE_MOD_NAME_FROM_ID(eARCADE_MOD_FLOOR, sArcadeData.iFloor)) sArcadeTelemetry.m_floor_amount = sArcade_price_struct.iFloorPrice sArcadeTelemetry.m_neon_art = GET_HASH_KEY(GET_ARCADE_MOD_NAME_FROM_ID(eARCADE_MOD_NEON_LIGHTS, sArcadeData.iNeonLights)) sArcadeTelemetry.m_neon_art_amount = sArcade_price_struct.iNeonLightsPrice sArcadeTelemetry.m_highscore_screen = GET_HASH_KEY(GET_ARCADE_MOD_NAME_FROM_ID(eARCADE_MOD_SCREENS, sArcadeData.iScreens)) sArcadeTelemetry.m_highscore_screen_amount = sArcade_price_struct.iScreensPrice //Check if we're trading of just buying IF (NOT IS_ARCADE_PROPERTY_ID_VALID(eTradeInArcade)) OR (bRenovateArcade) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iLocationAmount = propval IF (sArcade_price_struct.iFloorPrice >= 0) OR NOT bRenovateArcade iLocationAmount -= sArcade_price_struct.iFloorPrice ENDIF IF (sArcade_price_struct.iCeilingPrice >= 0) OR NOT bRenovateArcade iLocationAmount -= sArcade_price_struct.iCeilingPrice ENDIF IF (sArcade_price_struct.iWallPrice >= 0) OR NOT bRenovateArcade iLocationAmount -= sArcade_price_struct.iWallPrice ENDIF IF (sArcade_price_struct.iPersonalQuartersPrice >= 0) OR NOT bRenovateArcade iLocationAmount -= sArcade_price_struct.iPersonalQuartersPrice ENDIF IF (sArcade_price_struct.iGaragePrice >= 0) OR NOT bRenovateArcade iLocationAmount -= sArcade_price_struct.iGaragePrice ENDIF IF (sArcade_price_struct.iNeonLightsPrice >= 0) OR NOT bRenovateArcade iLocationAmount -= sArcade_price_struct.iNeonLightsPrice ENDIF IF (sArcade_price_struct.iScreensPrice >= 0) OR NOT bRenovateArcade iLocationAmount -= sArcade_price_struct.iScreensPrice ENDIF IF NOT bRenovateArcade CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: Bought Arcade for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: m_location:", GET_HASH_KEY(GET_ARCADE_NAME_FROM_ID(eArcadeID)), " m_location_amount: $", iLocationAmount, " ", GET_ARCADE_NAME_FROM_ID(eArcadeID)) IF GET_LOCAL_PLAYER_ARCADE_CABINET_SAVE_SLOT_TYPE(ACM_SLOT_18, ACP_ARCADE) != ARCADE_CABINET_SAVE_SLOT_CA_STREET_CRIMES_PROP_A SET_ARCADE_CABINET_TO_DISPLAY_SAVE_SLOT(ACM_SLOT_18, ARCADE_CABINET_SAVE_SLOT_CA_STREET_CRIMES_PROP_A, ACP_ARCADE) ENDIF IF GET_LOCAL_PLAYER_ARCADE_CABINET_SAVE_SLOT_TYPE(ACM_SLOT_19, ACP_ARCADE) != ARCADE_CABINET_SAVE_SLOT_CA_STREET_CRIMES_PROP_B SET_ARCADE_CABINET_TO_DISPLAY_SAVE_SLOT(ACM_SLOT_19, ARCADE_CABINET_SAVE_SLOT_CA_STREET_CRIMES_PROP_B, ACP_ARCADE) ENDIF IF GET_LOCAL_PLAYER_ARCADE_CABINET_SAVE_SLOT_TYPE(ACM_SLOT_20, ACP_ARCADE) != ARCADE_CABINET_SAVE_SLOT_CA_STREET_CRIMES_PROP_C SET_ARCADE_CABINET_TO_DISPLAY_SAVE_SLOT(ACM_SLOT_20, ARCADE_CABINET_SAVE_SLOT_CA_STREET_CRIMES_PROP_C, ACP_ARCADE) ENDIF IF GET_LOCAL_PLAYER_ARCADE_CABINET_SAVE_SLOT_TYPE(ACM_SLOT_21, ACP_ARCADE) != ARCADE_CABINET_SAVE_SLOT_CA_STREET_CRIMES_PROP_D SET_ARCADE_CABINET_TO_DISPLAY_SAVE_SLOT(ACM_SLOT_21, ARCADE_CABINET_SAVE_SLOT_CA_STREET_CRIMES_PROP_D, ACP_ARCADE) ENDIF SET_ARCADE_AS_OWNED(eArcadeID) GB_SET_LOCAL_CASINO_HEIST_CALL_BIT(eGB_CASINO_HEIST_CALL_BITSET_ARCADE_PROPERTY_PURCHASED) #IF FEATURE_GEN9_EXCLUSIVE RESUME_CASINO_HEIST_UDS_ACTIVITY() END_CASINO_HEIST_UDS_ACTIVITY(UDS_ACTIVITY_END_REASON_ABANDONED) #ENDIF // only set location amount when buying the location sArcadeTelemetry.location_amount = iLocationAmount NETWORK_SPEND_BUY_ARCADE(propval, FALSE, TRUE, sArcadeTelemetry) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: Renovate Arcade for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: m_location:", GET_HASH_KEY(GET_ARCADE_NAME_FROM_ID(eArcadeID)), " m_location_amount: $", iLocationAmount, " ", GET_ARCADE_NAME_FROM_ID(eArcadeID)) NETWORK_SPEND_UPGRADE_ARCADE(propval, FALSE, TRUE, sArcadeTelemetry) ENDIF ELIF GET_ARCADE_BASE_PRICE(eTradeInArcade) > 0 IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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_ARCADE_FROM_WEBSITE: Trading the business ", eTradeInArcade, " is earning the player: $", iOwnedTradeArcadeValue) INT iLocationAmount = finalPendingTransactionValue + iOwnedTradeArcadeValue iLocationAmount -= sArcade_price_struct.iFloorPrice iLocationAmount -= sArcade_price_struct.iCeilingPrice iLocationAmount -= sArcade_price_struct.iWallPrice iLocationAmount -= sArcade_price_struct.iPersonalQuartersPrice iLocationAmount -= sArcade_price_struct.iGaragePrice iLocationAmount -= sArcade_price_struct.iNeonLightsPrice iLocationAmount -= sArcade_price_struct.iScreensPrice IF iOwnedTradeArcadeValue > 0 NETWORK_EARN_UPGRADE_ARCADE(iOwnedTradeArcadeValue, GET_HASH_KEY(GET_ARCADE_NAME_FROM_ID(eArcadeID)), iLocationAmount) ENDIF IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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_ARCADE_FROM_WEBSITE: Trading Arcade for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: m_location:", GET_HASH_KEY(GET_ARCADE_NAME_FROM_ID(eArcadeID)), " m_location_amount: $", iLocationAmount, " ", GET_ARCADE_NAME_FROM_ID(eArcadeID)) sArcadeTelemetry.location_amount = iLocationAmount NETWORK_SPEND_UPGRADE_ARCADE(propval, FALSE, TRUE, sArcadeTelemetry) TRADE_ARCADE(eArcadeID, eTradeInArcade) ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(sArcadeData.iPersonalQuarters) IF (GET_MP_INT_CHARACTER_STAT(MP_STAT_ARCADE_PERSONAL_QUARTERS) != sArcadeData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: set Arcade spawn, player bought personal quarters") // SET_MP_SPAWN_POINT_SETTING(MP_SETTING_SPAWN_ARCADE) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: do not set Arcade spawn, player already has personal quarters") ENDIF ENDIF IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(sArcadeData.iGarage) INT iBuyPropertyIndex = PROPERTY_ARCADE_GARAGE iResultSlot = PROPERTY_OWNED_SLOT_ARCADE_GARAGE SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_ARCADE_GAR1, iBuyPropertyIndex) IF (GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_GARAGE)) != sArcadeData.iGarage) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_ARCADE_GAR1_VALUE, propval) IF GET_OWNED_PROPERTY(0) <= 0 IF IS_PERSONAL_VEHICLE_DRIVEABLE_IN_FREEMODE() IF DOES_ENTITY_EXIST(MPGlobalsAmbience.vehPersonalVehicle) INT iForceDisplayUpdatedSlot MPSV_GET_DISPLAY_SLOT_FROM_SAVE_SLOT(CURRENT_SAVED_VEHICLE_SLOT(), iForceDisplayUpdatedSlot) IF iForceDisplayUpdatedSlot <= 0 iForceDisplayUpdatedSlot = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST, FALSE, GET_ENTITY_MODEL(MPGlobalsAmbience.vehPersonalVehicle)) IF iForceDisplayUpdatedSlot >= 0 PRINTLN("Forcing vehicle out in freemode slot display to #", iForceDisplayUpdatedSlot," when buying arcade garage") MPSV_SET_DISPLAY_SLOT(iForceDisplayUpdatedSlot, CURRENT_SAVED_VEHICLE_SLOT()) IF iForceDisplayUpdatedSlot != 0 MPSV_SET_DISPLAY_SLOT(0, -1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT bRenovateArcade propval -= sArcade_price_struct.iGaragePrice propval -= sArcade_price_struct.iScreensPrice CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: MP_STAT_PROP_ARCADE_VALUE = ", propval) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_ARCADE_VALUE, propval) SWITCH INT_TO_ENUM(ARCADE_PROPERTY_ID, eArcadeID) CASE ARCADE_PROPERTY_PALETO_BAY SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_ARCADE_PROPERTY_TSHIRT_PIXEL_PETES, TRUE) BREAK CASE ARCADE_PROPERTY_GRAPESEED SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_ARCADE_PROPERTY_TSHIRT_WONDERLAND, TRUE) BREAK CASE ARCADE_PROPERTY_DAVIS SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_ARCADE_PROPERTY_TSHIRT_WAREHOUSE, TRUE) BREAK CASE ARCADE_PROPERTY_WEST_VINEWOOD SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_ARCADE_PROPERTY_TSHIRT_EIGHT_BIT, TRUE) BREAK CASE ARCADE_PROPERTY_ROCKFORD_HILLS SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_ARCADE_PROPERTY_TSHIRT_INSERT_COIN, TRUE) BREAK CASE ARCADE_PROPERTY_LA_MESA SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_ARCADE_PROPERTY_TSHIRT_VIDEOGEDDON, TRUE) BREAK ENDSWITCH IF GET_OWNED_PROPERTY(0) <= 0 IF IS_PERSONAL_VEHICLE_DRIVEABLE_IN_FREEMODE() IF DOES_ENTITY_EXIST(MPGlobalsAmbience.vehPersonalVehicle) INT iForceDisplayUpdatedSlot MPSV_GET_DISPLAY_SLOT_FROM_SAVE_SLOT(CURRENT_SAVED_VEHICLE_SLOT(), iForceDisplayUpdatedSlot) IF iForceDisplayUpdatedSlot <= 0 iForceDisplayUpdatedSlot = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST, FALSE, GET_ENTITY_MODEL(MPGlobalsAmbience.vehPersonalVehicle)) IF iForceDisplayUpdatedSlot >= 0 PRINTLN("Forcing vehicle out in freemode slot display to #", iForceDisplayUpdatedSlot," when buying Arcade") MPSV_SET_DISPLAY_SLOT(iForceDisplayUpdatedSlot, CURRENT_SAVED_VEHICLE_SLOT()) IF iForceDisplayUpdatedSlot != 0 MPSV_SET_DISPLAY_SLOT(0, -1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: iFloor: ", sArcadeData.iFloor) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: iCeiling: ", sArcadeData.iCeiling) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: iWall: ", sArcadeData.iWall) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: iPersonalQuarters: ", sArcadeData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: iGarage: ", sArcadeData.iGarage) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: iNeonLights: ", sArcadeData.iNeonLights) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: iScreens: ", sArcadeData.iScreens) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_FLOOR), sArcadeData.iFloor) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_CEILING), sArcadeData.iCeiling) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_WALL), sArcadeData.iWall) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_PERSONAL_QUARTERS), sArcadeData.iPersonalQuarters) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_GARAGE), sArcadeData.iGarage) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_NEON_LIGHTS), sArcadeData.iNeonLights) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_ARCADE_UPGRADE(eARCADE_MOD_SCREENS), sArcadeData.iScreens) // IF IS_BUSINESS_HUB_GARAGE_02_PURCHASED() // iBuyPropertyIndex = PROPERTY_MEGAWARE_GARAGE_LVL1 // // iResultSlot = PROPERTY_OWNED_SLOT_MEGAWARE_GARAGE_LVL1 // // SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_MEGAWARE_GAR1, iBuyPropertyIndex) // // IF NOT SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) // g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot - 2] = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex)) * g_sMPTunables.fPropertyMultiplier) // ELSE // g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot - 2] = 0 // ENDIF // // SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_MEGAWARE_GAR1_VALUE, g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iMultiPropertyValueArray[iResultSlot - 2]) // // CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: MP_STAT_PROP_MEGAWARE_GAR1 iBuyPropertyIndex:", iBuyPropertyIndex) // ENDIF BROADCAST_PLAYER_PURCHASED_ARCADE() PLAY_SOUND_FRONTEND(-1, "Click_Special", "WEB_NAVIGATION_SOUNDS_PHONE") bBrowserShoppingSavePending = TRUE CHECK_AMERICAN_DREAM_ACHIEVEMENT() POPULATE_MP_BIKER_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_SUCCESS", TRUE, bRenovateArcade, FALSE, FALSE, rpmt_7_ARCADE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase complete, refreshing pin map") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE iBoughtPropertyIndex = -1 eBoughtFactoryIndex = FACTORY_ID_INVALID eBoughtHangarIndex = HANGAR_ID_INVALID eBoughtDefunctBaseIndex = DEFUNCT_BASE_ID_INVALID eBoughtNightclubIndex = NIGHTCLUB_ID_INVALID eBoughtArenaIndex = ARENA_GARAGE_ID_INVALID eBoughtArcadeIndex = eArcadeID eBoughtCasinoIndex = CASINO_APARTMENT_ID_INVALID iBoughtCasinoPreset = -1 eBoughtAutoShopIndex = AUTO_SHOP_PROPERTY_ID_INVALID #IF FEATURE_FIXER eBoughtFixerHQIndex = FIXER_HQ_ID_INVALID #ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: purchase complete, resetting iCustomAptVariant to 1") ENDPROC PROC BUY_MP_AUTO_SHOP_FROM_WEBSITE(AUTO_SHOP_PROPERTY_ID eAutoShopID, INT &iResultSlot) INT minPendingTransactionValue, finalPendingTransactionValue, iOwnedTradeAutoShopValue INT iBankBalance = NETWORK_GET_VC_BANK_BALANCE() INT iWalletBalance = NETWORK_GET_VC_WALLET_BALANCE() IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("AUT_OPTIONS") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_ASHOPSTY") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_ASHOPTNT") CLEAR_HELP() CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF // ----- Can't purchase if the player isn't a high enough rank. ----- IF NOT IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE) IF GET_PLAYER_RANK(GET_PLAYER_INDEX()) < 5 CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase failed, player doesn't have sufficient rank (", GET_PLAYER_RANK(GET_PLAYER_INDEX()), ")") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase failed, player pending unlock for sufficient rank") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK_PENDING ENDIF SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_8_AUTO_SHOP) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF /// ----- Can't purchase if the session isn't valid. ----- IF USE_SERVER_TRANSACTIONS() IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CWARNINGLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase failed - session pending!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_8_AUTO_SHOP) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF TEXT_LABEL_15 tl_15AutoShopName = GET_AUTO_SHOP_NAME_FROM_ID(eAutoShopID) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: trying to purchase Auto Shop ", tl_15AutoShopName, " #", eAutoShopID) INT propval = CEIL(TO_FLOAT(GET_AUTO_SHOP_PRICE(eAutoShopID)) * g_sMPTunables.fPropertyMultiplier) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase valid, attempting index ", tl_15AutoShopName, " $", propval) minPendingTransactionValue = propval AUTO_SHOP_PROPERTY_ID eTradeInAutoShop = GET_PLAYERS_OWNED_AUTO_SHOP_PROPERTY(PLAYER_ID()) // ----- Can't purchase if the player is on a mission. ----- IF IS_AUTO_SHOP_PROPERTY_ID_VALID(eTradeInAutoShop) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: currently owns Auto Shop #", eTradeInAutoShop) INT iCurrentMission = GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: player current gang boss mission: \"", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission), "\"") IF (iCurrentMission != -1) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase failed, player current gang boss mission: ", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission)) mpPropertySiteFailReason = MPSFR_ON_MISSION SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_8_AUTO_SHOP) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF ENDIF BOOL bRenovateAutoShop = FALSE IF (eAutoShopID = eTradeInAutoShop) // ----- Can't purchase if the player is using an office seat. ----- IF GET_LOCAL_PLAYER_USING_OFFICE_SEATID() != -1 CWARNINGLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase failed - using office seat ", GET_LOCAL_PLAYER_USING_OFFICE_SEATID(), "!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_8_AUTO_SHOP) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF propval = CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES(eAutoShopID, sAutoShop_price_struct) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: renovate ", tl_15AutoShopName, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) bRenovateAutoShop = TRUE ELSE IF GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CLIENT_VEHICLE_MODIFICATION(0)) != 0 OR GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_CLIENT_VEHICLE_MODIFICATION(1)) != 0 mpPropertySiteFailReason = MPSFR_HAS_STOCK SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_FAILED", FALSE, FALSE, FALSE, FALSE, rpmt_8_AUTO_SHOP) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ELSE propval += CALCULATE_COST_OF_AUTO_SHOP_INTERIOR_UPGRADES(eAutoShopID, sAutoShop_price_struct) IF NOT IS_AUTO_SHOP_PROPERTY_ID_VALID(eTradeInAutoShop) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase ", tl_15AutoShopName, " for ", eTradeInAutoShop, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: trade ", tl_15AutoShopName, " for ", eTradeInAutoShop, ", propval $", propval, ", minPendingTransactionValue $", minPendingTransactionValue) ENDIF ENDIF ENDIF minPendingTransactionValue = propval IF NOT IS_AUTO_SHOP_PROPERTY_ID_VALID(eTradeInAutoShop) OR bRenovateAutoShop IF minPendingTransactionValue > 0 // ----- Can't purchase if they don't have enough money ----- CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", minPendingTransactionValue) IF (minPendingTransactionValue <= 0 OR (minPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(minPendingTransactionValue, FALSE, TRUE, FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance + iWalletBalance) $", (iBankBalance + iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", minPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_8_AUTO_SHOP) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15AutoShopName), minPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ELSE INT iTempMinPendingTransactionValue = minPendingTransactionValue - GET_AUTO_SHOP_SALE_VALUE(eTradeInAutoShop) IF iTempMinPendingTransactionValue > 0 // ----- Can't purchase if they don't have enough money ----- CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " > $", minPendingTransactionValue, "+", GET_AUTO_SHOP_SALE_VALUE(eTradeInAutoShop)) IF (iTempMinPendingTransactionValue <= 0 OR (iTempMinPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iTempMinPendingTransactionValue, FALSE, TRUE, FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance + iWalletBalance) $", (iBankBalance + iWalletBalance), " < NETWORK_CAN_SPEND_MONEY: iTempMinPendingTransactionValue $", minPendingTransactionValue, "+", GET_AUTO_SHOP_SALE_VALUE(eTradeInAutoShop), "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_8_AUTO_SHOP) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15AutoShopName), iTempMinPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: bank: $", iBankBalance, " + wallet: $", iWalletBalance, " <= $", minPendingTransactionValue, "+", GET_AUTO_SHOP_SALE_VALUE(eTradeInAutoShop)) ENDIF INT iReplaceSpecificPropertySlot REPLACE_MP_VEH_OR_PROP_MENU replaceMenu WHILE NOT RUN_REPLACE_PROPERTY_MENU(replaceMenu, iResultSlot, ENUM_TO_INT(eAutoShopID), iReplaceSpecificPropertySlot, rpmt_8_AUTO_SHOP) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE IF iResultSlot = -1 mpPropertySiteFailReason = MPSFR_CANCELED SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_8_AUTO_SHOP) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE g_iPendingBrowserTimer = g_iBrowserTimer PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") CPRINTLN(DEBUG_INTERNET, "CDM: BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase failed, player backed out of property selection") EXIT ELSE iOwnedTradeAutoShopValue = GET_AUTO_SHOP_SALE_VALUE(eTradeInAutoShop) finalPendingTransactionValue = propval - iOwnedTradeAutoShopValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: Player selected iResultSlot ", iResultSlot, ", trade ba: ", eTradeInAutoShop, " for trade. propval $", propval, ", iOwnedTradeAutoShopValue: ", iOwnedTradeAutoShopValue, " 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 CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: bank: $", iBankBalance, " + wallet: $", iWalletBalance, " + trade: $", iOwnedTradeAutoShopValue, " <> $", finalPendingTransactionValue) IF NOT NETWORK_CAN_SPEND_MONEY(finalPendingTransactionValue, FALSE, TRUE, FALSE) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase failed, player failed on command NETWORK_CAN_SPEND_MONEY") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_8_AUTO_SHOP) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15AutoShopName), finalPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDIF ENDIF AUTO_SHOP_DATA_STRUCT sAutoShopData GET_SCALEFORM_AUTO_SHOP_DATA(sAutoShopData) // If the player is renovating the auto shop, but only purchasing the membership with no add-ons, we ship the next part. BOOL bOnlyPurchasingMembership IF USE_SERVER_TRANSACTIONS() IF bRenovateAutoShop AND HAS_SCALEFORM_OPTION_BEEN_SELECTED(sAutoShopData.iCarClubMembership) AND sAutoShopData.iWall = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_WALL)) AND sAutoShopData.iTint = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_TINT)) AND sAutoShopData.iEmblem = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_EMBLEM)) AND sAutoShopData.iCrewName = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_CREW_NAME)) AND sAutoShopData.iStaff1 = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_STAFF_ONE)) AND sAutoShopData.iStaff2 = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_STAFF_TWO)) AND sAutoShopData.iCarLift = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_CAR_LIFT)) AND sAutoShopData.iPersonalQuarters = GET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_PERSONAL_QUARTERS)) PRINTLN("BUY_MP_AUTO_SHOP_FROM_WEBSITE: Renovating Auto Shop with just the membership. Skipping transaction process.") bOnlyPurchasingMembership = TRUE ENDIF ENDIF IF USE_SERVER_TRANSACTIONS() AND NOT bOnlyPurchasingMembership INT iPropval IF eAutoShopID = eTradeInAutoShop iPropval = 0 ELSE iPropval = CEIL(TO_FLOAT(GET_AUTO_SHOP_PRICE(eAutoShopID)) * g_sMPTunables.fPropertyMultiplier) ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_AUTO_SHOP_KEY_FOR_CATALOGUE(eAutoShopID) INT iInventoryKey = GET_AUTO_SHOP_INVENTORY_KEY_FOR_CATALOGUE() INT iSellingItemId = 0 IF IS_AUTO_SHOP_PROPERTY_ID_VALID(eTradeInAutoShop) iSellingItemId = GET_AUTO_SHOP_KEY_FOR_CATALOGUE(eTradeInAutoShop) ENDIF INT iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, iPropval, iResultSlot, CATEGORY_INVENTORY_WAREHOUSE, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemId, iInventoryKey, 0, iOwnedTradeAutoShopValue, iSellingItemId) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) RENDER_BROWSER() SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase failed, failed to process transaction") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_8_AUTO_SHOP) //g_iCachedPlayerCashForArcadeSafe = 0 //g_eCachedPlayerArcadeForArcadeSafe = GET_PLAYERS_OWNED_ARCADE_PROPERTY(PLAYER_ID()) //PRINTLN("[ARCADE_PAYOUT] SAFE_SWAP - clearing cached values") PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: success!!") BREAK DEFAULT mpPropertySiteFailReason = MPSFR_NOT_SAFE CASSERTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase failed, unknown iProcessSuccess: \"", iProcessSuccess, "\"") EXIT BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: final: $", finalPendingTransactionValue, ", propval $", propval) //Assign the telemetry data //Increment the spending stat IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF STRUCT_BUY_AUTOSHOP sAutoShopTelemetry TEXT_LABEL_63 tlStaff tlStaff += GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_STAFF_ONE, sAutoShopData.iStaff1) tlStaff += GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_STAFF_TWO, sAutoShopData.iStaff2) sAutoShopTelemetry.location = GET_HASH_KEY(GET_AUTO_SHOP_NAME_FROM_ID(eAutoShopID)) sAutoShopTelemetry.style_amount = sAutoShop_price_struct.iWallPrice sAutoShopTelemetry.tint_amount = sAutoShop_price_struct.iTintPrice sAutoShopTelemetry.emblem_amount = sAutoShop_price_struct.iEmblemPrice sAutoShopTelemetry.crew_name_amount = sAutoShop_price_struct.iCrewNamePrice sAutoShopTelemetry.staff_amount = sAutoShop_price_struct.iStaff1Price + sAutoShop_price_struct.iStaff2Price sAutoShopTelemetry.lift_amount = sAutoShop_price_struct.iCarLiftPrice sAutoShopTelemetry.personal_quarter_amount = sAutoShop_price_struct.iPersonalQuartersPrice IF bRenovateAutoShop IF sAutoShopData.iWall != g_sAutoShopDataStruct.iWall sAutoShopTelemetry.style = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_WALL, sAutoShopData.iWall)) ENDIF IF sAutoShopData.iTint != g_sAutoShopDataStruct.iTint sAutoShopTelemetry.tint = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_TINT, sAutoShopData.iTint)) ENDIF IF sAutoShopData.iEmblem != g_sAutoShopDataStruct.iEmblem sAutoShopTelemetry.emblem = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_EMBLEM, sAutoShopData.iEmblem)) ENDIF IF sAutoShopData.iCrewName != g_sAutoShopDataStruct.iCrewName AND sAutoShopData.iCrewName > 0 sAutoShopTelemetry.crew_name = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_CREW_NAME, sAutoShopData.iCrewName)) ENDIF IF sAutoShopData.iStaff1 != g_sAutoShopDataStruct.iStaff1 OR sAutoShopData.iStaff2 != g_sAutoShopDataStruct.iStaff2 AND (sAutoShopData.iStaff1 > 0 OR sAutoShopData.iStaff2 > 0) sAutoShopTelemetry.staff = GET_HASH_KEY(tlStaff) ENDIF IF sAutoShopData.iCarLift != g_sAutoShopDataStruct.iCarLift AND sAutoShopData.iCarLift > 0 sAutoShopTelemetry.lift = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_CAR_LIFT, sAutoShopData.iCarLift)) ENDIF IF sAutoShopData.iPersonalQuarters != g_sAutoShopDataStruct.iPersonalQuarters AND sAutoShopData.iPersonalQuarters > 0 sAutoShopTelemetry.personal_quarter = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_PERSONAL_QUARTERS, sAutoShopData.iPersonalQuarters)) ENDIF ELSE sAutoShopTelemetry.style = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_WALL, sAutoShopData.iWall)) sAutoShopTelemetry.tint = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_TINT, sAutoShopData.iTint)) sAutoShopTelemetry.emblem = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_EMBLEM, sAutoShopData.iEmblem)) sAutoShopTelemetry.crew_name = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_CREW_NAME, sAutoShopData.iCrewName)) sAutoShopTelemetry.staff = GET_HASH_KEY(tlStaff) sAutoShopTelemetry.lift = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_CAR_LIFT, sAutoShopData.iCarLift)) sAutoShopTelemetry.personal_quarter = GET_HASH_KEY(GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_PERSONAL_QUARTERS, sAutoShopData.iPersonalQuarters)) ENDIF #IF IS_DEBUG_BUILD PRINTLN("===== Auto Shop telemetry =====") PRINTLN("sAutoShopTelemetry.location - Name: ", GET_AUTO_SHOP_NAME_FROM_ID(eAutoShopID), " Hash: ", sAutoShopTelemetry.location) PRINTLN("sAutoShopTelemetry.style - Name: ", GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_WALL, sAutoShopData.iWall), " Hash: ", sAutoShopTelemetry.style) PRINTLN("sAutoShopTelemetry.style_amount - ", sAutoShopTelemetry.style_amount) PRINTLN("sAutoShopTelemetry.tint - Name: ", GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_TINT, sAutoShopData.iTint), " Hash: ", sAutoShopTelemetry.tint) PRINTLN("sAutoShopTelemetry.tint_amount - ", sAutoShopTelemetry.tint_amount) PRINTLN("sAutoShopTelemetry.emblem - Name: ", GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_EMBLEM, sAutoShopData.iEmblem), " Hash: ", sAutoShopTelemetry.emblem) PRINTLN("sAutoShopTelemetry.emblem_amount - ", sAutoShopTelemetry.emblem_amount) PRINTLN("sAutoShopTelemetry.crew_name - Name: ", GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_CREW_NAME, sAutoShopData.iCrewName), " Hash: ", sAutoShopTelemetry.crew_name) PRINTLN("sAutoShopTelemetry.crew_name_amount - ", sAutoShopTelemetry.crew_name_amount) PRINTLN("sAutoShopTelemetry.staff - Name: ", tlStaff, " Hash: ", sAutoShopTelemetry.staff) PRINTLN("sAutoShopTelemetry.staff_amount - ", sAutoShopTelemetry.staff_amount) PRINTLN("sAutoShopTelemetry.lift - Name: ", GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_CAR_LIFT, sAutoShopData.iCarLift), " Hash: ", sAutoShopTelemetry.lift) PRINTLN("sAutoShopTelemetry.lift_amount - ", sAutoShopTelemetry.lift_amount) PRINTLN("sAutoShopTelemetry.personal_quarter - Name: ", GET_AUTO_SHOP_MOD_NAME_FROM_ID(AUTO_SHOP_MOD_PERSONAL_QUARTERS, sAutoShopData.iPersonalQuarters), " Hash: ", sAutoShopTelemetry.personal_quarter) PRINTLN("sAutoShopTelemetry.personal_quarter_amount - ", sAutoShopTelemetry.personal_quarter_amount) #ENDIF INT iLocationAmount // url:bugstar:7122350 // Skip all of this if the player is only purchasing the membnership IF NOT bOnlyPurchasingMembership //Check if we're trading or just buying IF (NOT IS_AUTO_SHOP_PROPERTY_ID_VALID(eTradeInAutoShop)) OR (bRenovateAutoShop) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 iLocationAmount = propval IF (sAutoShop_price_struct.iWallPrice >= 0) OR NOT bRenovateAutoShop iLocationAmount -= sAutoShop_price_struct.iWallPrice ENDIF IF (sAutoShop_price_struct.iTintPrice >= 0) OR NOT bRenovateAutoShop iLocationAmount -= sAutoShop_price_struct.iTintPrice ENDIF IF (sAutoShop_price_struct.iEmblemPrice >= 0) OR NOT bRenovateAutoShop iLocationAmount -= sAutoShop_price_struct.iEmblemPrice ENDIF IF (sAutoShop_price_struct.iCrewNamePrice >= 0) OR NOT bRenovateAutoShop iLocationAmount -= sAutoShop_price_struct.iCrewNamePrice ENDIF IF (sAutoShop_price_struct.iStaff1Price >= 0) OR NOT bRenovateAutoShop iLocationAmount -= sAutoShop_price_struct.iStaff1Price ENDIF IF (sAutoShop_price_struct.iStaff2Price >= 0) OR NOT bRenovateAutoShop iLocationAmount -= sAutoShop_price_struct.iStaff2Price ENDIF IF (sAutoShop_price_struct.iCarLiftPrice >= 0) OR NOT bRenovateAutoShop iLocationAmount -= sAutoShop_price_struct.iCarLiftPrice ENDIF IF (sAutoShop_price_struct.iPersonalQuartersPrice >= 0) OR NOT bRenovateAutoShop iLocationAmount -= sAutoShop_price_struct.iPersonalQuartersPrice ENDIF IF NOT bRenovateAutoShop CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: Bought Auto Shop for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: m_location:", GET_HASH_KEY(GET_AUTO_SHOP_NAME_FROM_ID(eAutoShopID)), " m_location_amount: $", iLocationAmount, " ", GET_AUTO_SHOP_NAME_FROM_ID(eAutoShopID)) SET_AUTO_SHOP_AS_OWNED(eAutoShopID) sAutoShopTelemetry.location_amount = iLocationAmount PRINTLN("sAutoShopTelemetry.location_amount - ", sAutoShopTelemetry.location_amount) NETWORK_SPEND_BUY_AUTOSHOP(propval, FALSE, TRUE, sAutoShopTelemetry) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: Renovate Auto Shop for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: m_location:", GET_HASH_KEY(GET_AUTO_SHOP_NAME_FROM_ID(eAutoShopID)), " m_location_amount: $", iLocationAmount, " ", GET_AUTO_SHOP_NAME_FROM_ID(eAutoShopID)) NETWORK_SPEND_UPGRADE_AUTOSHOP(propval, FALSE, TRUE, sAutoShopTelemetry) ENDIF ELIF GET_AUTO_SHOP_BASE_PRICE(eTradeInAutoShop) > 0 IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iTradeInAutoShopHash = GET_HASH_KEY(GET_AUTO_SHOP_NAME_FROM_ID(eTradeInAutoShop)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: Trading the business ", eTradeInAutoShop, " is earning the player: $", iOwnedTradeAutoShopValue, " Hash: ", iTradeInAutoShopHash) iLocationAmount = finalPendingTransactionValue + iOwnedTradeAutoShopValue iLocationAmount -= sAutoShop_price_struct.iWallPrice iLocationAmount -= sAutoShop_price_struct.iTintPrice iLocationAmount -= sAutoShop_price_struct.iEmblemPrice iLocationAmount -= sAutoShop_price_struct.iCrewNamePrice iLocationAmount -= sAutoShop_price_struct.iStaff1Price iLocationAmount -= sAutoShop_price_struct.iStaff2Price iLocationAmount -= sAutoShop_price_struct.iCarLiftPrice iLocationAmount -= sAutoShop_price_struct.iPersonalQuartersPrice IF iOwnedTradeAutoShopValue > 0 NETWORK_EARN_UPGRADE_AUTOSHOP(iOwnedTradeAutoShopValue, iTradeInAutoShopHash) ENDIF IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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_AUTO_SHOP_FROM_WEBSITE: Trading Auto Shop for $", propval) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: m_location:", GET_HASH_KEY(GET_AUTO_SHOP_NAME_FROM_ID(eAutoShopID)), " m_location_amount: $", iLocationAmount, " ", GET_AUTO_SHOP_NAME_FROM_ID(eAutoShopID)) sAutoShopTelemetry.location_amount = iLocationAmount PRINTLN("sAutoShopTelemetry.location_amount - ", sAutoShopTelemetry.location_amount) NETWORK_SPEND_UPGRADE_AUTOSHOP(propval, FALSE, TRUE, sAutoShopTelemetry) TRADE_AUTO_SHOP(eAutoShopID, eTradeInAutoShop) ENDIF ENDIF // ----- Set the spawn point for the new auto shop? ----- IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(sAutoShopData.iPersonalQuarters) IF (GET_MP_INT_CHARACTER_STAT(MP_STAT_AUTO_SHOP_PERSONAL_QUARTERS) != sAutoShopData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: set Auto Shop spawn, player bought personal quarters") SET_MP_SPAWN_POINT_SETTING(MP_SETTING_SPAWN_AUTO_SHOP) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: do not set Auto Shop spawn, player already has personal quarters") ENDIF ENDIF SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_AUTO_SHOP,PROPERTY_AUTO_SHOP) IF NOT bRenovateAutoShop CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: MP_STAT_PROP_AUTO_SHOP_VALUE = ", propval) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_AUTO_SHOP_VALUE, propval) IF GET_OWNED_PROPERTY(0) <= 0 IF IS_PERSONAL_VEHICLE_DRIVEABLE_IN_FREEMODE() IF DOES_ENTITY_EXIST(MPGlobalsAmbience.vehPersonalVehicle) INT iForceDisplayUpdatedSlot MPSV_GET_DISPLAY_SLOT_FROM_SAVE_SLOT(CURRENT_SAVED_VEHICLE_SLOT(),iForceDisplayUpdatedSlot) IF iForceDisplayUpdatedSlot <= 0 iForceDisplayUpdatedSlot = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,GET_ENTITY_MODEL(MPGlobalsAmbience.vehPersonalVehicle)) IF iForceDisplayUpdatedSlot >= 0 PRINTLN("Forcing vehicle out in freemode slot display to #",iForceDisplayUpdatedSlot," when buying autoshop") MPSV_SET_DISPLAY_SLOT(iForceDisplayUpdatedSlot,CURRENT_SAVED_VEHICLE_SLOT()) IF iForceDisplayUpdatedSlot != 0 MPSV_SET_DISPLAY_SLOT(0,-1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF // Process the Car Club Membership. // At this point the auto shop transaction has been successful, otherwise we would EXIT this function and display the fail page. BOOL bSuccessfullyPurchasedMembership = FALSE BOOL bSelectedCarClubMembership = HAS_SCALEFORM_OPTION_BEEN_SELECTED(sAutoShopData.iCarClubMembership) BOOL bAlreadyPurchasedMembership = HAS_PLAYER_PURCHASED_CAR_CLUB_MEMBERSHIP(PLAYER_ID()) IF bSelectedCarClubMembership AND NOT bAlreadyPurchasedMembership GENERIC_TRANSACTION_STATE eMembershipPurchaseState IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF WHILE NOT PURCHASE_CAR_CLUB_MEMBERSHIP(eMembershipPurchaseState, MEMBERSHIP_PURCHASE_WEBSITE) CPRINTLN(DEBUG_INTERNET, "[MEMBERSHIP] BUY_MP_AUTO_SHOP_FROM_WEBSITE: Purchasing Car Club Membership...") RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) RENDER_BROWSER() SWITCH eMembershipPurchaseState CASE TRANSACTION_STATE_FAILED CPRINTLN(DEBUG_INTERNET, "[MEMBERSHIP] BUY_MP_AUTO_SHOP_FROM_WEBSITE: Purchase Failed.") BREAK CASE TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "[MEMBERSHIP] BUY_MP_AUTO_SHOP_FROM_WEBSITE: Purchase Successful!") bSuccessfullyPurchasedMembership = TRUE BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, "[MEMBERSHIP] BUY_MP_AUTO_SHOP_FROM_WEBSITE: Purchase Unknown.") BREAK ENDSWITCH IF NOT (bSuccessfullyPurchasedMembership) IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("CLUB_MEM_FAIL") CLEAR_HELP() PRINT_HELP("CLUB_MEM_FAIL") ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "[MEMBERSHIP] BUY_MP_AUTO_SHOP_FROM_WEBSITE: Do not process Car Club Membership transaction.") CPRINTLN(DEBUG_INTERNET, "[MEMBERSHIP] BUY_MP_AUTO_SHOP_FROM_WEBSITE: Selected on website? - ", GET_STRING_FROM_BOOL(bSelectedCarClubMembership)) CPRINTLN(DEBUG_INTERNET, "[MEMBERSHIP] BUY_MP_AUTO_SHOP_FROM_WEBSITE: Already owns it? - ", GET_STRING_FROM_BOOL(bAlreadyPurchasedMembership)) ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: iWall: ", sAutoShopData.iWall) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: iTint: ", sAutoShopData.iTint) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: iEmblem: ", sAutoShopData.iEmblem) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: iCrewName: ", sAutoShopData.iCrewName) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: iStaff1: ", sAutoShopData.iStaff1) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: iStaff2: ", sAutoShopData.iStaff2) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: iCarLift: ", sAutoShopData.iCarLift) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: iPersonalQuarters: ", sAutoShopData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: iCarClubMembership: ", sAutoShopData.iCarClubMembership) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: bSuccessfullyPurchasedMembership: ", GET_STRING_FROM_BOOL(bSuccessfullyPurchasedMembership)) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_WALL), sAutoShopData.iWall) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_TINT), sAutoShopData.iTint) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_EMBLEM), sAutoShopData.iEmblem) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_CREW_NAME), sAutoShopData.iCrewName) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_STAFF_ONE), sAutoShopData.iStaff1) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_STAFF_TWO), sAutoShopData.iStaff2) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_CAR_LIFT), sAutoShopData.iCarLift) SET_MP_INT_CHARACTER_STAT(GET_FM_INT_STAT_FOR_AUTO_SHOP_UPGRADE(AUTO_SHOP_MOD_PERSONAL_QUARTERS), sAutoShopData.iPersonalQuarters) BROADCAST_PLAYER_PURCHASED_AUTO_SHOP() PLAY_SOUND_FRONTEND(-1, "Click_Special", "WEB_NAVIGATION_SOUNDS_PHONE") bBrowserShoppingSavePending = TRUE CHECK_AMERICAN_DREAM_ACHIEVEMENT() POPULATE_MP_BIKER_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_SUCCESS", TRUE, bRenovateAutoShop, FALSE, FALSE, rpmt_8_AUTO_SHOP) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase complete, refreshing pin map") IF !bRenovateAutoShop AND eTradeInAutoShop = AUTO_SHOP_PROPERTY_ID_INVALID SET_BIT(g_sTunerFlow.BitSet, ciTUNER_FLOW_BITSET__JUST_BOUGHT_AUTOSHOP) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: SET_BIT(g_sTunerFlow.BitSet, ciTUNER_FLOW_BITSET__JUST_BOUGHT_AUTOSHOP)") ENDIF IF !bRenovateAutoShop CLEAR_TUNER_CLIENT_VEHICLE_STATS(0) CLEAR_TUNER_CLIENT_VEHICLE_STATS(1) CLEAR_TUNER_CLIENT_DELIVERY_DATA(0) CLEAR_TUNER_CLIENT_DELIVERY_DATA(1) ENDIF iCustomAptVariant = 1 bCustomInteriorSelected = FALSE iBoughtPropertyIndex = -1 IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF eBoughtFactoryIndex = FACTORY_ID_INVALID eBoughtHangarIndex = HANGAR_ID_INVALID eBoughtDefunctBaseIndex = DEFUNCT_BASE_ID_INVALID eBoughtNightclubIndex = NIGHTCLUB_ID_INVALID eBoughtArenaIndex = ARENA_GARAGE_ID_INVALID eBoughtArcadeIndex = ARCADE_PROPERTY_ID_INVALID eBoughtCasinoIndex = CASINO_APARTMENT_ID_INVALID iBoughtCasinoPreset = -1 eBoughtAutoShopIndex = eAutoShopID CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: purchase complete, resetting iCustomAptVariant to 1") ENDPROC #IF FEATURE_FIXER /// PURPOSE: /// Checks the players rank before attempting to purchase a property. FUNC BOOL CHECK_PLAYER_RANK_BEFORE_PROPERTY_PURCHASE(REPLACE_PROPERTY_MENU_TYPE_ENUM ePropertyType) IF NOT IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE) IF GET_PLAYER_RANK(GET_PLAYER_INDEX()) < 5 CPRINTLN(DEBUG_INTERNET, "CHECK_PLAYER_RANK_BEFORE_PROPERTY_PURCHASE: purchase failed, player doesn't have sufficient rank (", GET_PLAYER_RANK(GET_PLAYER_INDEX()), ")") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK ELSE CPRINTLN(DEBUG_INTERNET, "CHECK_PLAYER_RANK_BEFORE_PROPERTY_PURCHASE: purchase failed, player pending unlock for sufficient rank") mpPropertySiteFailReason = MPSFR_INSUFFCIENT_RANK_PENDING ENDIF SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, ePropertyType) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE RETURN FALSE ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Checks the current session before attempting to purchase a property. FUNC BOOL CHECK_SESSION_BEFORE_PROPERTY_PURCHASE(REPLACE_PROPERTY_MENU_TYPE_ENUM ePropertyType) IF USE_SERVER_TRANSACTIONS() IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CWARNINGLN(DEBUG_INTERNET, "CHECK_SESSION_BEFORE_PROPERTY_PURCHASE: Purchase failed - session pending!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, ePropertyType) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE RETURN FALSE ENDIF ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Checks the current session before attempting to purchase / trade in a property. FUNC BOOL CHECK_ON_MISSION_BEFORE_PROPERTY_PURCHASE(REPLACE_PROPERTY_MENU_TYPE_ENUM ePropertyType) INT iCurrentMission = GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) BOOL bGangBossFlow = DOES_CURRENT_MISSION_USE_GANG_BOSS_FLOW() IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, "CHECK_ON_MISSION_BEFORE_PROPERTY_PURCHASE: Player current gang boss mission: \"", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission), "\"") CPRINTLN(DEBUG_INTERNET, "CHECK_ON_MISSION_BEFORE_PROPERTY_PURCHASE: Does current mission use gang boss flow: \"", GET_STRING_FROM_BOOL(bGangBossFlow), "\"") IF (iCurrentMission != -1) OR bGangBossFlow CPRINTLN(DEBUG_INTERNET, "CHECK_ON_MISSION_BEFORE_PROPERTY_PURCHASE: Purchase failed, player current gang boss mission: ", GANG_BOSS_GET_NAME_FOR_TYPE_FOR_DEBUG_PRINT(iCurrentMission)) mpPropertySiteFailReason = MPSFR_ON_MISSION SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, ePropertyType) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE RETURN FALSE ENDIF ENDIF RETURN TRUE ENDFUNC FUNC BOOL CHECK_USING_OFFICE_SEAT_BEFORE_PROPERTY_PURCHASE(REPLACE_PROPERTY_MENU_TYPE_ENUM ePropertyType) IF GET_LOCAL_PLAYER_USING_OFFICE_SEATID() != -1 CWARNINGLN(DEBUG_INTERNET, "CHECK_USING_OFFICE_SEAT_BEFORE_PROPERTY_PURCHASE: purchase failed - using office seat ", GET_LOCAL_PLAYER_USING_OFFICE_SEATID(), "!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, ePropertyType) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE RETURN FALSE ENDIF RETURN TRUE ENDFUNC FUNC BOOL CHECK_MONEY_BEFORE_PROPERTY_PURCHASE(INT iBankBalance, INT iWalletBalance, INT iMinPendingTransactionValue, REPLACE_PROPERTY_MENU_TYPE_ENUM ePropertyType, TEXT_LABEL_15 tl15PropertyName) #IF NOT IS_DEBUG_BUILD UNUSED_PARAMETER(iBankBalance) UNUSED_PARAMETER(iWalletBalance) #ENDIF CPRINTLN(DEBUG_INTERNET, "CHECK_MONEY_BEFORE_PROPERTY_PURCHASE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", iMinPendingTransactionValue) IF (iMinPendingTransactionValue <= 0 OR (iMinPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iMinPendingTransactionValue, FALSE, TRUE, FALSE))) CPRINTLN(DEBUG_INTERNET, "CHECK_MONEY_BEFORE_PROPERTY_PURCHASE: purchase failed, player doesn't have sufficient cash [(iBankBalance + iWalletBalance) $", (iBankBalance + iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:minPendingTransactionValue $", iMinPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, ePropertyType) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl15PropertyName), iMinPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") RETURN FALSE ENDIF RETURN TRUE ENDFUNC PROC BUY_MP_FIXER_HQ_FROM_WEBSITE(FIXER_HQ_ID eFixerHQID, INT &ref_iResultSlot) INT minPendingTransactionValue, finalPendingTransactionValue, iOwnedTradeFixerHQValue INT iBankBalance = NETWORK_GET_VC_BANK_BALANCE() INT iWalletBalance = NETWORK_GET_VC_WALLET_BALANCE() // If help text is being display during a specific upgrade, clear it here. // ----- Can't purchase if the player isn't a high enough rank. ----- IF NOT CHECK_PLAYER_RANK_BEFORE_PROPERTY_PURCHASE(rpmt_9_FIXER_HQ) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Purchase failed, player doesn't have sufficient rank (", GET_PLAYER_RANK(GET_PLAYER_INDEX()), ")") EXIT ENDIF /// ----- Can't purchase if the session isn't valid. ----- IF NOT CHECK_SESSION_BEFORE_PROPERTY_PURCHASE(rpmt_9_FIXER_HQ) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Purchase failed, invalid session.") EXIT ENDIF // ----- Check if the purchase is valid ----- TEXT_LABEL_15 tl15FixerHQName = GET_FIXER_HQ_NAME_FROM_ID(eFixerHQID) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: trying to purchase Fixer HQ ", tl15FixerHQName, " #", eFixerHQID) INT propVal = CEIL(TO_FLOAT(GET_FIXER_HQ_COST(eFixerHQID)) * g_sMPTunables.fPropertyMultiplier) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: purchase valid, attempting index ", tl15FixerHQName, " $", propVal) minPendingTransactionValue = propVal // ----- Check if player already owns a Fixer HQ ----- FIXER_HQ_ID eTradeInFixerHQ = GET_PLAYERS_OWNED_FIXER_HQ(PLAYER_ID()) // ----- Can't replace / renovate if the player is on a mission. ----- IF IS_FIXER_HQ_ID_VALID(eTradeInFixerHQ) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: currently owns Fixer HQ #", eTradeInFixerHQ) IF NOT CHECK_ON_MISSION_BEFORE_PROPERTY_PURCHASE(rpmt_9_FIXER_HQ) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Purchase / Renovation failed, currently on a mission") EXIT ENDIF ENDIF // ----- Check if player is purchasing a new Fixer HQ, or renovating ----- BOOL bRenovateFixerHQ = FALSE IF (eFixerHQID = eTradeInFixerHQ) // ----- Can't purchase if the player is using an office seat. ----- IF NOT CHECK_USING_OFFICE_SEAT_BEFORE_PROPERTY_PURCHASE(rpmt_9_FIXER_HQ) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Purchase failed, using office seat.") EXIT ENDIF propVal = CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES(eFixerHQID, sFixerHQ_price_struct) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: renovate ", tl15FixerHQName, ", propVal $", propVal, ", minPendingTransactionValue $", minPendingTransactionValue) bRenovateFixerHQ = TRUE ELSE propVal += CALCULATE_COST_OF_FIXER_HQ_INTERIOR_UPGRADES(eFixerHQID, sFixerHQ_price_struct) IF NOT IS_FIXER_HQ_ID_VALID(eTradeInFixerHQ) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: purchase ", tl15FixerHQName, " for ", eTradeInFixerHQ, ", propVal $", propVal, ", minPendingTransactionValue $", minPendingTransactionValue) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: trade ", tl15FixerHQName, " for ", eTradeInFixerHQ, ", propVal $", propVal, ", minPendingTransactionValue $", minPendingTransactionValue) ENDIF ENDIF minPendingTransactionValue = propVal // ----- Do added checks before proceeding ----- IF NOT IS_FIXER_HQ_ID_VALID(eTradeInFixerHQ) OR bRenovateFixerHQ IF minPendingTransactionValue > 0 // ----- Can't purchase if they don't have enough money ----- IF NOT CHECK_MONEY_BEFORE_PROPERTY_PURCHASE(iBankBalance, iWalletBalance, minPendingTransactionValue, rpmt_9_FIXER_HQ, tl15FixerHQName) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Purchase failed, not enough money - 1") EXIT ENDIF ENDIF ELSE INT iTempMinPendingTransactionValue = minPendingTransactionValue - GET_FIXER_HQ_SALE_VALUE(eTradeInFixerHQ) IF iTempMinPendingTransactionValue > 0 // ----- Can't purchase if they don't have enough money ----- IF NOT CHECK_MONEY_BEFORE_PROPERTY_PURCHASE(iBankBalance, iWalletBalance, iTempMinPendingTransactionValue, rpmt_9_FIXER_HQ, tl15FixerHQName) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Purchase failed, not enough money - 2") EXIT ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: bank: $", iBankBalance, " + wallet: $", iWalletBalance, " <= $", minPendingTransactionValue, "+", GET_FIXER_HQ_SALE_VALUE(eTradeInFixerHQ)) ENDIF INT iReplaceSpecificPropertySlot REPLACE_MP_VEH_OR_PROP_MENU replaceMenu WHILE NOT RUN_REPLACE_PROPERTY_MENU(replaceMenu, ref_iResultSlot, ENUM_TO_INT(eFixerHQID), iReplaceSpecificPropertySlot, rpmt_9_FIXER_HQ) AND DO_CHECK_TO_TERMINATE_WHILE_LOOPS() DISABLE_SELECTOR_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() WAIT(0) g_sMenuData.bKeepPhoneForNextDrawMenuCall = TRUE ENDWHILE IF ref_iResultSlot = -1 mpPropertySiteFailReason = MPSFR_CANCELED SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_9_FIXER_HQ) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE g_iPendingBrowserTimer = g_iBrowserTimer PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") CPRINTLN(DEBUG_INTERNET, "CDM: BUY_MP_FIXER_HQ_FROM_WEBSITE: purchase failed, player backed out of property selection") EXIT ELSE iOwnedTradeFixerHQValue = GET_FIXER_HQ_SALE_VALUE(eTradeInFixerHQ) finalPendingTransactionValue = propVal - iOwnedTradeFixerHQValue CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Player selected ref_iResultSlot ", ref_iResultSlot, ", trade ba: ", eTradeInFixerHQ, " for trade. propVal $", propVal, ", iOwnedTradeFixerHQValue: ", iOwnedTradeFixerHQValue, " Final trans value $", finalPendingTransactionValue) ENDIF // Re-check if player can afford based on selected trade-in value IF finalPendingTransactionValue > 0 IF NOT CHECK_MONEY_BEFORE_PROPERTY_PURCHASE(iBankBalance, iWalletBalance, finalPendingTransactionValue, rpmt_9_FIXER_HQ, tl15FixerHQName) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Purchase failed, not enough money - 3") EXIT ENDIF ENDIF ENDIF FIXER_HQ_DATA_STRUCT sFixerHQData GET_SCALEFORM_FIXER_HQ_DATA(sFixerHQData) IF USE_SERVER_TRANSACTIONS() INT iPropval IF eFixerHQID = eTradeInFixerHQ iPropval = 0 ELSE iPropval = CEIL(TO_FLOAT(GET_FIXER_HQ_COST(eFixerHQID)) * g_sMPTunables.fPropertyMultiplier) ENDIF bProcessingBasket = TRUE iProcessingBasketStage = SHOP_BASKET_STAGE_ADD INT iItemId = GET_FIXER_HQ_KEY_FOR_CATALOGUE(eFixerHQID) INT iInventoryKey = GET_FIXER_HQ_INVENTORY_KEY_FOR_CATALOGUE() INT iSellingItemId = 0 IF IS_FIXER_HQ_ID_VALID(eTradeInFixerHQ) iSellingItemId = GET_FIXER_HQ_KEY_FOR_CATALOGUE(eTradeInFixerHQ) INT iSafeCash = GET_MP_INT_CHARACTER_STAT(MP_STAT_FIXER_SAFE_CASH_VALUE) IF iSafeCash > 0 g_iCachedPlayerCashForFixerHQSafe = iSafeCash g_eCachedPlayerFixerHQForHQSafe = GET_PLAYERS_OWNED_FIXER_HQ(PLAYER_ID()) PRINTLN("[FIXER_AGENCY_PAYOUT] SAFE_SWAP - cacheing safe cash stat") ELSE PRINTLN("[FIXER_AGENCY_PAYOUT] SAFE_SWAP - cash stat was 0 not cacheing") ENDIF ENDIF INT iProcessSuccess = GENERIC_TRANSACTION_STATE_DEFAULT WHILE PROCESSING_INTERNET_SHOPPING_BASKET(iProcessSuccess, iPropval, ref_iResultSlot, CATEGORY_INVENTORY_WAREHOUSE, NET_SHOP_ACTION_BUY_WAREHOUSE, iItemId, iInventoryKey, 0, iOwnedTradeFixerHQValue, iSellingItemId) RENDER_BROWSER() TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(TRUE) WAIT(0) ENDWHILE TOGGLE_PLAYER_PROOFS_WHEN_PROCESSING_INTERNET_SHOPPING_BASKET(FALSE) RENDER_BROWSER() SWITCH iProcessSuccess CASE GENERIC_TRANSACTION_STATE_FAILED CWARNINGLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: purchase failed, failed to process transaction") mpPropertySiteFailReason = MPSFR_NOT_SAFE g_iCachedPlayerCashForFixerHQSafe = 0 g_eCachedPlayerFixerHQForHQSafe = GET_PLAYERS_OWNED_FIXER_HQ(PLAYER_ID()) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_9_FIXER_HQ) PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT BREAK CASE GENERIC_TRANSACTION_STATE_SUCCESS CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Success! Give us your money!") BREAK DEFAULT mpPropertySiteFailReason = MPSFR_NOT_SAFE CASSERTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: purchase failed, unknown iProcessSuccess: \"", iProcessSuccess, "\"") EXIT BREAK ENDSWITCH ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: ignore NETWORK_REQUEST_BASKET_TRANSACTION") ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: final: $", finalPendingTransactionValue, ", propVal $", propVal) //Assign the telemetry data //Increment the spending stat IF finalPendingTransactionValue > 0 INCREMENT_BY_MP_INT_PLAYER_STAT(MPPLY_INGAMESTORE_MONEYSPENT, finalPendingTransactionValue) ENDIF STRUCT_BUY_AGENCY sFixerHQTelemetry sFixerHQTelemetry.location = GET_HASH_KEY(GET_FIXER_HQ_NAME_FROM_ID(eFixerHQID)) sFixerHQTelemetry.style_amount = sFixerHQ_price_struct.iArtPrice sFixerHQTelemetry.wallpaper_amount = sFixerHQ_price_struct.iWallpaperPrice sFixerHQTelemetry.tint_amount = sFixerHQ_price_struct.iTintPrice sFixerHQTelemetry.weapon_workshop_amount = sFixerHQ_price_struct.iArmoryPrice sFixerHQTelemetry.vehicle_workshop_amount = sFixerHQ_price_struct.iVehWorkshopPrice sFixerHQTelemetry.personal_quarter_amount = sFixerHQ_price_struct.iPersonalQuartersPrice sFixerHQTelemetry.style = GET_HASH_KEY(GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_ART, sFixerHQData.iArt)) sFixerHQTelemetry.wallpaper = GET_HASH_KEY(GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_WALLPAPER, sFixerHQData.iWallpaper)) sFixerHQTelemetry.tint = GET_HASH_KEY(GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_TINT, sFixerHQData.iTint)) sFixerHQTelemetry.weapon_workshop = GET_HASH_KEY(GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_ARMORY, sFixerHQData.iArmory)) sFixerHQTelemetry.vehicle_workshop = GET_HASH_KEY(GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_VEH_WORKSHOP, sFixerHQData.iVehWorkshop)) sFixerHQTelemetry.personal_quarter = GET_HASH_KEY(GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_PERSONAL_QUARTERS, sFixerHQData.iPersonalQuarters)) #IF IS_DEBUG_BUILD PRINTLN("===== Fixer HQ telemetry =====") PRINTLN("sFixerHQTelemetry.location - Name: ", GET_FIXER_HQ_NAME_FROM_ID(eFixerHQID), " Hash: ", sFixerHQTelemetry.location) PRINTLN("sFixerHQTelemetry.style - Name: ", GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_ART, sFixerHQData.iArt), " Hash: ", sFixerHQTelemetry.style) PRINTLN("sFixerHQTelemetry.style_amount - ", sFixerHQTelemetry.style_amount) PRINTLN("sFixerHQTelemetry.wallpaper - Name: ", GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_WALLPAPER, sFixerHQData.iWallpaper), " Hash: ", sFixerHQTelemetry.wallpaper) PRINTLN("sFixerHQTelemetry.wallpaper_amount - ", sFixerHQTelemetry.wallpaper_amount) PRINTLN("sFixerHQTelemetry.tint - Name: ", GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_TINT, sFixerHQData.iTint), " Hash: ", sFixerHQTelemetry.tint) PRINTLN("sFixerHQTelemetry.tint_amount - ", sFixerHQTelemetry.tint_amount) PRINTLN("sFixerHQTelemetry.weapon_workshop - Name: ", GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_ARMORY, sFixerHQData.iArmory), " Hash: ", sFixerHQTelemetry.weapon_workshop) PRINTLN("sFixerHQTelemetry.weapon_workshop_amount - ", sFixerHQTelemetry.weapon_workshop_amount) PRINTLN("sFixerHQTelemetry.vehicle_workshop - Name: ", GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_VEH_WORKSHOP, sFixerHQData.iVehWorkshop), " Hash: ", sFixerHQTelemetry.vehicle_workshop) PRINTLN("sFixerHQTelemetry.vehicle_workshop_amount - ", sFixerHQTelemetry.vehicle_workshop_amount) PRINTLN("sFixerHQTelemetry.personal_quarter - Name: ", GET_FIXER_HQ_UPGRADE_NAME_FROM_ID(FIXER_HQ_UPGRADE_PERSONAL_QUARTERS, sFixerHQData.iPersonalQuarters), " Hash: ", sFixerHQTelemetry.personal_quarter) PRINTLN("sFixerHQTelemetry.personal_quarter_amount - ", sFixerHQTelemetry.personal_quarter_amount) #ENDIF INT iLocationAmount //Check if we're trading or just buying IF (NOT IS_FIXER_HQ_ID_VALID(eTradeInFixerHQ)) OR (bRenovateFixerHQ) IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 iLocationAmount = propVal IF (sFixerHQ_price_struct.iArtPrice >= 0) OR NOT bRenovateFixerHQ iLocationAmount -= sFixerHQ_price_struct.iArtPrice ENDIF IF (sFixerHQ_price_struct.iWallpaperPrice >= 0) OR NOT bRenovateFixerHQ iLocationAmount -= sFixerHQ_price_struct.iWallpaperPrice ENDIF IF (sFixerHQ_price_struct.iTintPrice >= 0) OR NOT bRenovateFixerHQ iLocationAmount -= sFixerHQ_price_struct.iTintPrice ENDIF IF (sFixerHQ_price_struct.iVehWorkshopPrice >= 0) OR NOT bRenovateFixerHQ iLocationAmount -= sFixerHQ_price_struct.iVehWorkshopPrice ENDIF IF (sFixerHQ_price_struct.iArmoryPrice >= 0) OR NOT bRenovateFixerHQ iLocationAmount -= sFixerHQ_price_struct.iArmoryPrice ENDIF IF (sFixerHQ_price_struct.iPersonalQuartersPrice >= 0) OR NOT bRenovateFixerHQ iLocationAmount -= sFixerHQ_price_struct.iPersonalQuartersPrice ENDIF IF NOT bRenovateFixerHQ CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Bought Fixer HQ for $", propVal) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: m_location:", GET_HASH_KEY(GET_FIXER_HQ_NAME_FROM_ID(eFixerHQID)), " m_location_amount: $", iLocationAmount, " ", GET_FIXER_HQ_NAME_FROM_ID(eFixerHQID)) SET_FIXER_HQ_AS_OWNED(eFixerHQID) sFixerHQTelemetry.location_amount = iLocationAmount PRINTLN("sFixerHQTelemetry.location_amount - ", sFixerHQTelemetry.location_amount) NETWORK_SPEND_BUY_AGENCY(propVal, FALSE, TRUE, sFixerHQTelemetry) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Renovate Fixer HQ for $", propVal) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: m_location:", GET_HASH_KEY(GET_FIXER_HQ_NAME_FROM_ID(eFixerHQID)), " m_location_amount: $", iLocationAmount, " ", GET_FIXER_HQ_NAME_FROM_ID(eFixerHQID)) NETWORK_SPEND_UPGRADE_AGENCY(propval, FALSE, TRUE, sFixerHQTelemetry) ENDIF ELIF GET_FIXER_HQ_BASE_COST(eTradeInFixerHQ) > 0 IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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 INT iTradeInFixerHQHash = GET_HASH_KEY(GET_FIXER_HQ_NAME_FROM_ID(eTradeInFixerHQ)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Trading the business ", GET_FIXER_HQ_NAME_FROM_ID(eTradeInFixerHQ), " is earning the player: $", iOwnedTradeFixerHQValue, " Hash: ", iTradeInFixerHQHash) iLocationAmount = finalPendingTransactionValue + iOwnedTradeFixerHQValue iLocationAmount -= sFixerHQ_price_struct.iArtPrice iLocationAmount -= sFixerHQ_price_struct.iWallpaperPrice iLocationAmount -= sFixerHQ_price_struct.iTintPrice iLocationAmount -= sFixerHQ_price_struct.iVehWorkshopPrice iLocationAmount -= sFixerHQ_price_struct.iArmoryPrice iLocationAmount -= sFixerHQ_price_struct.iPersonalQuartersPrice IF iOwnedTradeFixerHQValue > 0 NETWORK_EARN_UPGRADE_AGENCY(iOwnedTradeFixerHQValue, iTradeInFixerHQHash) ENDIF IF USE_SERVER_TRANSACTIONS() CPRINTLN(DEBUG_INTERNET, "[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_FIXER_HQ_FROM_WEBSITE: Trading Fixer HQ for $", propVal) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: m_location:", GET_HASH_KEY(GET_FIXER_HQ_NAME_FROM_ID(eFixerHQID)), " m_location_amount: $", iLocationAmount, " ", GET_FIXER_HQ_NAME_FROM_ID(eFixerHQID)) sFixerHQTelemetry.location_amount = iLocationAmount PRINTLN("sFixerHQTelemetry.location_amount - ", sFixerHQTelemetry.location_amount) NETWORK_SPEND_UPGRADE_AGENCY(propVal, FALSE, TRUE, sFixerHQTelemetry) TRADE_FIXER_HQ(eFixerHQID, eTradeInFixerHQ) ENDIF // ----- Set the spawn point for the new fixer hq? ----- /* IF HAS_SCALEFORM_OPTION_BEEN_SELECTED(sAutoShopData.iPersonalQuarters) IF (GET_MP_INT_CHARACTER_STAT(MP_STAT_AUTO_SHOP_PERSONAL_QUARTERS) != sAutoShopData.iPersonalQuarters) CPRINTLN(DEBUG_INTERNET, "BUY_MP_AUTO_SHOP_FROM_WEBSITE: set Auto Shop spawn, player bought personal quarters") SET_MP_SPAWN_POINT_SETTING(MP_SETTING_SPAWN_AUTO_SHOP) ELSE CPRINTLN(DEBUG_INTERNET, "BUY_MP_ARCADE_FROM_WEBSITE: do not set Auto Shop spawn, player already has personal quarters") ENDIF ENDIF */ // @TODO: Wait for PROPERTY_FIXER_HQ const? // SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_FIXER_HQ, PROPERTY_AUTO_SHOP) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_SECURITY_OFFICE_GAR,PROPERTY_SECURITY_OFFICE_GARAGE) IF NOT bRenovateFixerHQ CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: propVal = ", propVal) SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_FIXER_HQ_VALUE, propval) IF GET_OWNED_PROPERTY(0) <= 0 IF IS_PERSONAL_VEHICLE_DRIVEABLE_IN_FREEMODE() IF DOES_ENTITY_EXIST(MPGlobalsAmbience.vehPersonalVehicle) INT iForceDisplayUpdatedSlot MPSV_GET_DISPLAY_SLOT_FROM_SAVE_SLOT(CURRENT_SAVED_VEHICLE_SLOT(),iForceDisplayUpdatedSlot) IF iForceDisplayUpdatedSlot <= 0 iForceDisplayUpdatedSlot = MP_SAVE_VEHICLE_GET_EMPTY_DISPLAY_SLOT(MP_SAVE_VEH_SEARCH_EMPTY_FIRST,FALSE,GET_ENTITY_MODEL(MPGlobalsAmbience.vehPersonalVehicle)) IF iForceDisplayUpdatedSlot >= 0 PRINTLN("Forcing vehicle out in freemode slot display to #",iForceDisplayUpdatedSlot," when buying fixer HQ") MPSV_SET_DISPLAY_SLOT(iForceDisplayUpdatedSlot,CURRENT_SAVED_VEHICLE_SLOT()) IF iForceDisplayUpdatedSlot != 0 MPSV_SET_DISPLAY_SLOT(0,-1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: iArt: ", sFixerHQData.iArt) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: iWallpaper: ", sFixerHQData.iWallpaper) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: iTint: ", sFixerHQData.iTint) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: iVehWorkshop: ", sFixerHQData.iVehWorkshop) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: iArmory: ", sFixerHQData.iArmory) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: iPersonalQuarters: ", sFixerHQData.iPersonalQuarters) // ----- Renovation upgrade txt message ----- IF bRenovateFixerHQ // --- Style changes --- IF sFixerHQData.iArt != GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_ART)) OR sFixerHQData.iWallpaper != GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_WALLPAPER)) OR sFixerHQData.iTint != GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_TINT)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Changed style of fixer HQ, sending txt msg.") SET_BIT(g_SimpleInteriorData.iEleventhBS, BS11_SIMPLE_INTERIOR_FIXER_HQ_RENOVATED_STYLE) ENDIF // --- Purchased all upgrades --- BOOL bSendAllUpgradeTxtMessage = TRUE IF GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_VEH_WORKSHOP)) > 0 AND GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_ARMORY)) > 0 AND GET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_PERSONAL_QUARTERS)) > 0 CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: already owned all upgrades. Don't send txt message.") bSendAllUpgradeTxtMessage = FALSE ENDIF IF sFixerHQData.iVehWorkshop = 0 OR sFixerHQData.iArmory = 0 OR sFixerHQData.iPersonalQuarters = 0 CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: Has not purchased all upgrades. Don't send txt message.") bSendAllUpgradeTxtMessage = FALSE ENDIF IF bSendAllUpgradeTxtMessage SET_BIT(g_SimpleInteriorData.iEleventhBS, BS11_SIMPLE_INTERIOR_FIXER_HQ_BOUGHT_ALL_UPGRADES) ENDIF ENDIF SET_FIXER_HQ_AS_OWNED(eFixerHQID) SET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_ART), sFixerHQData.iArt) SET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_WALLPAPER), sFixerHQData.iWallpaper) SET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_TINT), sFixerHQData.iTint) SET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_VEH_WORKSHOP), sFixerHQData.iVehWorkshop) SET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_ARMORY), sFixerHQData.iArmory) SET_MP_INT_CHARACTER_STAT(GET_MP_INT_STAT_FOR_FIXER_HQ_UPGRADE(FIXER_HQ_UPGRADE_PERSONAL_QUARTERS), sFixerHQData.iPersonalQuarters) BROADCAST_PLAYER_PURCHASED_FIXER_HQ() PLAY_SOUND_FRONTEND(-1, "Click_Special", "WEB_NAVIGATION_SOUNDS_PHONE") bBrowserShoppingSavePending = TRUE CHECK_AMERICAN_DREAM_ACHIEVEMENT() POPULATE_MP_EXEC_PROPERTY_SITE_PIN_MAP(mov, TRUE) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_PURCHASE_D_SUCCESS", TRUE, bRenovateFixerHQ, FALSE, FALSE, rpmt_9_FIXER_HQ) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: purchase complete, refreshing pin map") IF !bRenovateFixerHQ IF eTradeInFixerHQ = FIXER_HQ_ID_INVALID // For flow guys - Set a bit here to start whatever flow there is :) SET_BIT(g_sFixerFlow.Bitset2, ciFIXER_FLOW_BITSET2__DO_FIXER_HQ_BOUGHT_HELP) CLEAR_BIT(g_sFixerFlow.Bitset, ciFIXER_FLOW_BITSET__DO_LAMAR_INTRO_CALL) CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: SET_BIT(g_sFixerFlow.Bitset2, ciFIXER_FLOW_BITSET2__DO_FIXER_HQ_BOUGHT_HELP)") ENDIF CLOSE_BROWSER_AFTER_SUCCESSFUL_PURCHASE(1000) ENDIF iCustomAptVariant = 1 bCustomInteriorSelected = FALSE iBoughtPropertyIndex = -1 IF USE_SERVER_TRANSACTIONS() DELETE_CASH_TRANSACTION(GET_BASKET_TRANSACTION_SCRIPT_INDEX()) ENDIF eBoughtFactoryIndex = FACTORY_ID_INVALID eBoughtHangarIndex = HANGAR_ID_INVALID eBoughtDefunctBaseIndex = DEFUNCT_BASE_ID_INVALID eBoughtNightclubIndex = NIGHTCLUB_ID_INVALID eBoughtArenaIndex = ARENA_GARAGE_ID_INVALID eBoughtArcadeIndex = ARCADE_PROPERTY_ID_INVALID eBoughtCasinoIndex = CASINO_APARTMENT_ID_INVALID iBoughtCasinoPreset = -1 eBoughtAutoShopIndex = AUTO_SHOP_PROPERTY_ID_INVALID eBoughtFixerHQIndex = eFixerHQID CPRINTLN(DEBUG_INTERNET, "BUY_MP_FIXER_HQ_FROM_WEBSITE: purchase complete, resetting iCustomAptVariant to 1") ENDPROC #ENDIF // #IF FEATURE_FIXER PROC BUY_MP_OFFICE_GARAGE_FROM_WEBSITE() mpPropertySiteFailReason = MPSFR_UNSET INT iOffice = GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_0) IF iOffice <= 0 CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE: purchase failed, doesn't own an office") mpPropertySiteFailReason = MPSFR_NOT_UNLOCKED SWITCH_TO_PROPERTY_RESULTS_PAGE(iOffice, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF INT iClickedOffice = GET_CACHED_LAST_CLICKED_OFFICE() IF iOffice != iClickedOffice CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE: purchase failed, owned office ", iOffice, " not same as last clicked office ", iClickedOffice) mpPropertySiteFailReason = MPSFR_NOT_UNLOCKED SWITCH_TO_PROPERTY_RESULTS_PAGE(iOffice, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF IF USE_SERVER_TRANSACTIONS() IF NOT NET_GAMESERVER_IS_SESSION_VALID(GET_ACTIVE_CHARACTER_SLOT()) OR NET_GAMESERVER_IS_SESSION_REFRESH_PENDING() CWARNINGLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE: failed to process transaction - session pending!") mpPropertySiteFailReason = MPSFR_NOT_SAFE SWITCH_TO_PROPERTY_RESULTS_PAGE(iOffice, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") iCustomAptVariant = 1 bCustomInteriorSelected = FALSE EXIT ENDIF ENDIF INT iOfficeGarage = GET_LAST_CLICKED_OFFICE_GARAGE() INT iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop GET_SCALEFORM_OFFICE_DATA(iStyle, iPersonnel, iFont, iColour, iGunLocker, iVault, iAccommodation, iGarage1Style, iGarage1Lighting, iGarage1Number, iGarage2Style, iGarage2Lighting, iGarage2Number, iGarage3Style, iGarage3Lighting, iGarage3Number, iModshop) INT iPendingTransactionValue = 0 INT iPendingGarage1Value = 0, iPendingGarage2Value = 0, iPendingGarage3Value = 0, iPendingModshopValue = 0 IF (iGarage1Style > 0 AND g_sOfficeDataStruct.iGarage1Style != GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage1Style)) OR (iGarage1Lighting >= 0 AND g_sOfficeDataStruct.iGarage1Lighting != GET_SF_FROM_OFFICE_GARAGE_LIGHTING(iGarage1Lighting)) OR (iGarage1Number >= 0 AND g_sOfficeDataStruct.iGarage1Number != GET_SF_FROM_OFFICE_GARAGE_NUMBERING(iGarage1Number)) // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // INT i, iBuyPropertyIndex = PROPERTY_OFFICE_1_GARAGE_LVL1 INT iMaxTradeIn = 0 INT iOwned, propval INT iReplaceSpecificPropertySlot = -1 IF IS_PROPERTY_RESTRICTED_SLOT_ONLY(iBuyPropertyIndex) iReplaceSpecificPropertySlot = GET_PROPERTY_RESTRICTED_SLOT(iBuyPropertyIndex) iMaxTradeIn = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iReplaceSpecificPropertySlot) iOwned = GET_OWNED_PROPERTY(iReplaceSpecificPropertySlot) IF iOwned = iBuyPropertyIndex propval = 0 ELSE propval = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ENDIF ELSE REPEAT MAX_OWNED_PROPERTIES i IF iMaxTradeIn < GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(i) iMaxTradeIn = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(i) ENDIF ENDREPEAT REPEAT MAX_OWNED_PROPERTIES i iOwned = GET_OWNED_PROPERTY(i) IF iOwned = iBuyPropertyIndex SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDREPEAT propval = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ENDIF iPendingGarage1Value = propval propval += CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES(iBuyPropertyIndex, sOffice_price_struct.iGarage1StylePrice, sOffice_price_struct.iGarage1LightingPrice, sOffice_price_struct.iGarage1NumberPrice, sOffice_price_struct.iGarage2StylePrice, sOffice_price_struct.iGarage2LightingPrice, sOffice_price_struct.iGarage2NumberPrice, sOffice_price_struct.iGarage3StylePrice, sOffice_price_struct.iGarage3LightingPrice, sOffice_price_struct.iGarage3NumberPrice) iPendingGarage1Value += (sOffice_price_struct.iGarage1StylePrice+sOffice_price_struct.iGarage1LightingPrice+sOffice_price_struct.iGarage1NumberPrice) IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) propval = 0 ENDIF INT minPendingTransactionValue = propval - iMaxTradeIn IF iOwned = iBuyPropertyIndex OFFICE_PRICE_STRUCT sUpgrade_Office_price_struct minPendingTransactionValue = CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES(iBuyPropertyIndex, sUpgrade_Office_price_struct.iGarage1StylePrice, sUpgrade_Office_price_struct.iGarage1LightingPrice, sUpgrade_Office_price_struct.iGarage1NumberPrice, sUpgrade_Office_price_struct.iGarage2StylePrice, sUpgrade_Office_price_struct.iGarage2LightingPrice, sUpgrade_Office_price_struct.iGarage2NumberPrice, sUpgrade_Office_price_struct.iGarage3StylePrice, sUpgrade_Office_price_struct.iGarage3LightingPrice, sUpgrade_Office_price_struct.iGarage3NumberPrice) ENDIF iPendingTransactionValue += iPendingGarage1Value CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE GAR1: iBuyPropertyIndex:", iBuyPropertyIndex, ", iPendingTransactionValue:$", iPendingTransactionValue, " (minPendingTransactionValue:$", minPendingTransactionValue, "), iPendingGarageValue:", iPendingGarage1Value) // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // ENDIF IF (iGarage2Style > 0 AND g_sOfficeDataStruct.iGarage2Style != GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage2Style)) OR (iGarage2Lighting >= 0 AND g_sOfficeDataStruct.iGarage2Lighting != GET_SF_FROM_OFFICE_GARAGE_LIGHTING(iGarage2Lighting)) OR (iGarage2Number >= 0 AND g_sOfficeDataStruct.iGarage2Number != GET_SF_FROM_OFFICE_GARAGE_NUMBERING(iGarage2Number)) // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // INT i, iBuyPropertyIndex = PROPERTY_OFFICE_1_GARAGE_LVL2 INT iMaxTradeIn = 0 INT iOwned, propval INT iReplaceSpecificPropertySlot = -1 IF IS_PROPERTY_RESTRICTED_SLOT_ONLY(iBuyPropertyIndex) iReplaceSpecificPropertySlot = GET_PROPERTY_RESTRICTED_SLOT(iBuyPropertyIndex) iMaxTradeIn = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iReplaceSpecificPropertySlot) iOwned = GET_OWNED_PROPERTY(iReplaceSpecificPropertySlot) IF iOwned = iBuyPropertyIndex propval = 0 ELSE propval = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ENDIF ELSE REPEAT MAX_OWNED_PROPERTIES i IF iMaxTradeIn < GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(i) iMaxTradeIn = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(i) ENDIF ENDREPEAT REPEAT MAX_OWNED_PROPERTIES i iOwned = GET_OWNED_PROPERTY(i) IF iOwned = iBuyPropertyIndex SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDREPEAT propval = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ENDIF iPendingGarage2Value = propval propval += CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES(iBuyPropertyIndex, sOffice_price_struct.iGarage1StylePrice, sOffice_price_struct.iGarage1LightingPrice, sOffice_price_struct.iGarage1NumberPrice, sOffice_price_struct.iGarage2StylePrice, sOffice_price_struct.iGarage2LightingPrice, sOffice_price_struct.iGarage2NumberPrice, sOffice_price_struct.iGarage3StylePrice, sOffice_price_struct.iGarage3LightingPrice, sOffice_price_struct.iGarage3NumberPrice) iPendingGarage2Value += (sOffice_price_struct.iGarage2StylePrice+sOffice_price_struct.iGarage2LightingPrice+sOffice_price_struct.iGarage2NumberPrice) IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) propval = 0 ENDIF INT minPendingTransactionValue = propval - iMaxTradeIn IF iOwned = iBuyPropertyIndex OFFICE_PRICE_STRUCT sUpgrade_Office_price_struct minPendingTransactionValue = CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES(iBuyPropertyIndex, sUpgrade_Office_price_struct.iGarage1StylePrice, sUpgrade_Office_price_struct.iGarage1LightingPrice, sUpgrade_Office_price_struct.iGarage1NumberPrice, sUpgrade_Office_price_struct.iGarage2StylePrice, sUpgrade_Office_price_struct.iGarage2LightingPrice, sUpgrade_Office_price_struct.iGarage2NumberPrice, sUpgrade_Office_price_struct.iGarage3StylePrice, sUpgrade_Office_price_struct.iGarage3LightingPrice, sUpgrade_Office_price_struct.iGarage3NumberPrice) ENDIF iPendingTransactionValue += iPendingGarage2Value CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE GAR2: iBuyPropertyIndex:", iBuyPropertyIndex, ", iPendingTransactionValue:$", iPendingTransactionValue, " (minPendingTransactionValue:$", minPendingTransactionValue, "), iPendingGarageValue:", iPendingGarage2Value) // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // ENDIF IF (iGarage3Style > 0 AND g_sOfficeDataStruct.iGarage3Style != GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage3Style)) OR (iGarage3Lighting >= 0 AND g_sOfficeDataStruct.iGarage3Lighting != GET_SF_FROM_OFFICE_GARAGE_LIGHTING(iGarage3Lighting)) OR (iGarage3Number >= 0 AND g_sOfficeDataStruct.iGarage3Number != GET_SF_FROM_OFFICE_GARAGE_NUMBERING(iGarage3Number)) // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // INT i, iBuyPropertyIndex = PROPERTY_OFFICE_1_GARAGE_LVL3 INT iMaxTradeIn = 0 INT iOwned, propval INT iReplaceSpecificPropertySlot = -1 IF IS_PROPERTY_RESTRICTED_SLOT_ONLY(iBuyPropertyIndex) iReplaceSpecificPropertySlot = GET_PROPERTY_RESTRICTED_SLOT(iBuyPropertyIndex) iMaxTradeIn = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iReplaceSpecificPropertySlot) iOwned = GET_OWNED_PROPERTY(iReplaceSpecificPropertySlot) IF iOwned = iBuyPropertyIndex propval = 0 ELSE propval = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ENDIF ELSE REPEAT MAX_OWNED_PROPERTIES i IF iMaxTradeIn < GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(i) iMaxTradeIn = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(i) ENDIF ENDREPEAT REPEAT MAX_OWNED_PROPERTIES i iOwned = GET_OWNED_PROPERTY(i) IF iOwned = iBuyPropertyIndex SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDREPEAT propval = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ENDIF iPendingGarage3Value = propval propval += CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES(iBuyPropertyIndex, sOffice_price_struct.iGarage1StylePrice, sOffice_price_struct.iGarage1LightingPrice, sOffice_price_struct.iGarage1NumberPrice, sOffice_price_struct.iGarage2StylePrice, sOffice_price_struct.iGarage2LightingPrice, sOffice_price_struct.iGarage2NumberPrice, sOffice_price_struct.iGarage3StylePrice, sOffice_price_struct.iGarage3LightingPrice, sOffice_price_struct.iGarage3NumberPrice) iPendingGarage3Value += (sOffice_price_struct.iGarage3StylePrice+sOffice_price_struct.iGarage3LightingPrice+sOffice_price_struct.iGarage3NumberPrice) IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) propval = 0 ENDIF INT minPendingTransactionValue = propval - iMaxTradeIn IF iOwned = iBuyPropertyIndex OFFICE_PRICE_STRUCT sUpgrade_Office_price_struct minPendingTransactionValue = CALCULATE_COST_OF_OFFICE_GARAGE_INTERIOR_UPGRADES(iBuyPropertyIndex, sUpgrade_Office_price_struct.iGarage1StylePrice, sUpgrade_Office_price_struct.iGarage1LightingPrice, sUpgrade_Office_price_struct.iGarage1NumberPrice, sUpgrade_Office_price_struct.iGarage2StylePrice, sUpgrade_Office_price_struct.iGarage2LightingPrice, sUpgrade_Office_price_struct.iGarage2NumberPrice, sUpgrade_Office_price_struct.iGarage3StylePrice, sUpgrade_Office_price_struct.iGarage3LightingPrice, sUpgrade_Office_price_struct.iGarage3NumberPrice) ENDIF iPendingTransactionValue += iPendingGarage3Value CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE GAR3: iBuyPropertyIndex:", iBuyPropertyIndex, ", iPendingTransactionValue:$", iPendingTransactionValue, " (minPendingTransactionValue:$", minPendingTransactionValue, "), iPendingGarageValue:", iPendingGarage3Value) // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // ENDIF IF iModshop > 0 AND g_sOfficeDataStruct.iModshop != GET_SF_FROM_OFFICE_MODSHOP_INTERIOR(iModshop) // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // INT i, iBuyPropertyIndex = GET_LAST_CLICKED_OFFICE() INT iMaxTradeIn = 0 INT iOwned, propval INT iReplaceSpecificPropertySlot = -1 IF IS_PROPERTY_RESTRICTED_SLOT_ONLY(iBuyPropertyIndex) iReplaceSpecificPropertySlot = GET_PROPERTY_RESTRICTED_SLOT(iBuyPropertyIndex) iMaxTradeIn = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(iReplaceSpecificPropertySlot) iOwned = GET_OWNED_PROPERTY(iReplaceSpecificPropertySlot) IF iOwned = iBuyPropertyIndex propval = 0 ELSE propval = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ENDIF ELSE REPEAT MAX_OWNED_PROPERTIES i IF iMaxTradeIn < GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(i) iMaxTradeIn = GET_VALUE_OF_CURRENTLY_OWNED_PROPERTY(i) ENDIF ENDREPEAT REPEAT MAX_OWNED_PROPERTIES i iOwned = GET_OWNED_PROPERTY(i) IF iOwned = iBuyPropertyIndex SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDREPEAT propval = CEIL(TO_FLOAT(GET_VALUE_OF_PROPERTY(iBuyPropertyIndex))*g_sMPTunables.fPropertyMultiplier) ENDIF propval += CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES(iBuyPropertyIndex, sOffice_price_struct.iStylePrice, sOffice_price_struct.iPersonnelPrice, sOffice_price_struct.iNamePrice, sOffice_price_struct.iFontPrice, sOffice_price_struct.iColourPrice, sOffice_price_struct.iGunLockerPrice, sOffice_price_struct.iVaultPrice, sOffice_price_struct.iAccommodationPrice, sOffice_price_struct.iModshopPrice) iPendingModshopValue = sOffice_price_struct.iModshopPrice IF SHOULD_PROPERTY_BE_FREE_FOR_PLAYER(iBuyPropertyIndex) propval = 0 ENDIF INT minPendingTransactionValue = propval - iMaxTradeIn IF iOwned = iBuyPropertyIndex OFFICE_PRICE_STRUCT sUpgrade_Office_price_struct minPendingTransactionValue = CALCULATE_COST_OF_OFFICE_INTERIOR_UPGRADES(iBuyPropertyIndex, sUpgrade_Office_price_struct.iStylePrice, sUpgrade_Office_price_struct.iPersonnelPrice, sUpgrade_Office_price_struct.iNamePrice, sUpgrade_Office_price_struct.iFontPrice, sUpgrade_Office_price_struct.iColourPrice, sUpgrade_Office_price_struct.iGunLockerPrice, sUpgrade_Office_price_struct.iVaultPrice, sUpgrade_Office_price_struct.iAccommodationPrice, sUpgrade_Office_price_struct.iModshopPrice) iPendingModshopValue = sUpgrade_Office_price_struct.iModshopPrice ENDIF iPendingTransactionValue += sOffice_price_struct.iModshopPrice CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE MODSHOP: iOwned:", iOwned, ", iBuyPropertyIndex:", iBuyPropertyIndex, ", iPendingTransactionValue:$", iPendingTransactionValue, " (minPendingTransactionValue:$", minPendingTransactionValue, "), iPendingModshopValue:", iPendingModshopValue) // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // ENDIF IF iPendingTransactionValue >0 INT iBankBalance = NETWORK_GET_VC_BANK_BALANCE() INT iWalletBalance = NETWORK_GET_VC_WALLET_BALANCE() UNUSED_PARAMETER(iBankBalance) UNUSED_PARAMETER(iWalletBalance) TEXT_LABEL_15 tl_15PropertyName // IF (iBankBalance+iWalletBalance) < iPendingTransactionValue INT iBuyPropertyIndex = GET_LAST_CLICKED_OFFICE_GARAGE() CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE: bank:$", iBankBalance, " + wallet:$", iWalletBalance, " <> $", iPendingTransactionValue) // IF (iPendingTransactionValue <= 0 // OR (iPendingTransactionValue > 0 AND ((iBankBalance+iWalletBalance) < iPendingTransactionValue))) // CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < iPendingTransactionValue $", iPendingTransactionValue, "]") // mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH // SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) // iCustomAptVariant = 1 // bCustomInteriorSelected = FALSE // // tl_15PropertyName = GET_PROPERTY_NAME(iBuyPropertyIndex) // TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15PropertyName), iPendingTransactionValue) // // PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") // EXIT // ENDIF IF (iPendingTransactionValue <= 0 OR (iPendingTransactionValue > 0 AND NOT NETWORK_CAN_SPEND_MONEY(iPendingTransactionValue,FALSE,TRUE,FALSE))) CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE: purchase failed, player doesn't have sufficient cash [(iBankBalance+iWalletBalance) $", (iBankBalance+iWalletBalance), " < NETWORK_CAN_SPEND_MONEY:iPendingTransactionValue $", iPendingTransactionValue, "]") mpPropertySiteFailReason = MPSFR_INSUFFICIENT_CASH SWITCH_TO_PROPERTY_RESULTS_PAGE(iBuyPropertyIndex, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) iCustomAptVariant = 1 bCustomInteriorSelected = FALSE tl_15PropertyName = GET_PROPERTY_NAME(iBuyPropertyIndex) TRIGGER_BROWSER_NAG_SCREEN(GET_HASH_KEY(tl_15PropertyName), iPendingTransactionValue) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF // ENDIF IF USE_SERVER_TRANSACTIONS() INT iWalletAmount = 0, iBankAmount = 0 INT iTempPrice = (iPendingGarage1Value+iPendingGarage2Value+iPendingGarage3Value+iPendingModshopValue) //iPendingTransactionValue CDEBUG1LN(DEBUG_INTERNET, "[BASKET] BUY_MP_OFFICE_GARAGE_FROM_WEBSITE - iTempPrice = (g1:$", iPendingGarage1Value, " + g2:$", iPendingGarage2Value, " + g3:$", iPendingGarage3Value, " + mod:$", iPendingModshopValue, ") =", iTempPrice) // Bank first IF (NETWORK_GET_VC_BANK_BALANCE() > 0) IF NETWORK_GET_VC_BANK_BALANCE() >= iTempPrice iBankAmount = iTempPrice ELSE iBankAmount = iTempPrice-(iTempPrice-NETWORK_GET_VC_BANK_BALANCE()) ENDIF iTempPrice -= iBankAmount ENDIF IF iTempPrice > 0 IF (NETWORK_GET_VC_WALLET_BALANCE() > 0) IF NETWORK_GET_VC_WALLET_BALANCE() >= iTempPrice iWalletAmount = iTempPrice ELSE iWalletAmount = iTempPrice-(iTempPrice-NETWORK_GET_VC_WALLET_BALANCE()) ENDIF iTempPrice -= iWalletAmount ENDIF ENDIF IF iTempPrice > 0 CASSERTLN(DEBUG_INTERNET, "[BASKET] BUY_MP_OFFICE_GARAGE_FROM_WEBSITE - Player can't afford this item! iTempPrice=", iTempPrice, ", iWalletAmount=", iWalletAmount, ", iBankAmount=", iBankAmount) ELSE CDEBUG1LN(DEBUG_INTERNET, "[BASKET] BUY_MP_OFFICE_GARAGE_FROM_WEBSITE - Player can afford this item... iTempPrice=", iTempPrice, ", iWalletAmount=", iWalletAmount, ", iBankAmount=", iBankAmount, " (iCouponPrice=", iPendingTransactionValue, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE(), ")") IF iWalletAmount != 0 OR iBankAmount != 0 CPRINTLN(DEBUG_INTERNET, "[BASKET] - CHANGE_FAKE_MP_CASH(wallet=$-", iWalletAmount, ", bank=$-", iBankAmount, "): iPendingTransactionValue=$", iPendingTransactionValue, ", bankBalance=$", NETWORK_GET_VC_BANK_BALANCE(), ", walletBalance=$", NETWORK_GET_VC_WALLET_BALANCE()) USE_FAKE_MP_CASH(TRUE) CHANGE_FAKE_MP_CASH(-iWalletAmount, -iBankAmount) bBypassFakeCash = TRUE ENDIF ENDIF ENDIF ELSE CDEBUG1LN(DEBUG_INTERNET, "[BASKET] BUY_MP_OFFICE_GARAGE_FROM_WEBSITE - iPendingTransactionValue:$", iPendingTransactionValue) ENDIF BOOL bPurchasedGarageMod = FALSE INT iCachedBoughtPropertyIndex = -1 IF (iGarage1Style > 0 AND g_sOfficeDataStruct.iGarage1Style != GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage1Style)) OR (iGarage1Lighting >= 0 AND g_sOfficeDataStruct.iGarage1Lighting != GET_SF_FROM_OFFICE_GARAGE_LIGHTING(iGarage1Lighting)) OR (iGarage1Number >= 0 AND g_sOfficeDataStruct.iGarage1Number != GET_SF_FROM_OFFICE_GARAGE_NUMBERING(iGarage1Number)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office Garage1 buy attempt triggered on Style: ", iGarage1Style , " (previously:", g_sOfficeDataStruct.iGarage1Style, "), Lighting: ", iGarage1Lighting , " (previously:", g_sOfficeDataStruct.iGarage1Lighting, "), Number: ", iGarage1Number , " (previously:", g_sOfficeDataStruct.iGarage1Number, ")") BUY_MP_PROPERTY_FROM_WEBSITE(PROPERTY_OFFICE_1_GARAGE_LVL1) IF iCachedBoughtPropertyIndex = -1 iCachedBoughtPropertyIndex = iBoughtPropertyIndex ENDIF bPurchasedGarageMod = TRUE ELSE CDEBUG2LN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office Garage1 not bought for Style: ", iGarage1Style , " (previously:", g_sOfficeDataStruct.iGarage1Style, "), Lighting: ", iGarage1Lighting , " (previously:", g_sOfficeDataStruct.iGarage1Lighting, "), Number: ", iGarage1Number , " (previously:", g_sOfficeDataStruct.iGarage1Number, ")") ENDIF IF (mpPropertySiteFailReason = MPSFR_UNSET) IF (iGarage2Style > 0 AND g_sOfficeDataStruct.iGarage2Style != GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage2Style)) OR (iGarage2Lighting >= 0 AND g_sOfficeDataStruct.iGarage2Lighting != GET_SF_FROM_OFFICE_GARAGE_LIGHTING(iGarage2Lighting)) OR (iGarage2Number >= 0 AND g_sOfficeDataStruct.iGarage2Number != GET_SF_FROM_OFFICE_GARAGE_NUMBERING(iGarage2Number)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office Garage2 buy attempt triggered on Style: ", iGarage2Style , " (previously:", g_sOfficeDataStruct.iGarage2Style, "), Lighting: ", iGarage2Lighting , " (previously:", g_sOfficeDataStruct.iGarage2Lighting, "), Number: ", iGarage2Number , " (previously:", g_sOfficeDataStruct.iGarage2Number, ")") BUY_MP_PROPERTY_FROM_WEBSITE(PROPERTY_OFFICE_1_GARAGE_LVL2) IF iCachedBoughtPropertyIndex = -1 iCachedBoughtPropertyIndex = iBoughtPropertyIndex ENDIF bPurchasedGarageMod = TRUE ELSE CDEBUG2LN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office Garage2 not bought for Style: ", iGarage2Style , " (previously:", g_sOfficeDataStruct.iGarage2Style, "), Lighting: ", iGarage2Lighting , " (previously:", g_sOfficeDataStruct.iGarage2Lighting, "), Number: ", iGarage2Number , " (previously:", g_sOfficeDataStruct.iGarage2Number, ")") ENDIF ELSE CDEBUG2LN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office Garage2 will not be not bought for Style: ", iGarage3Style , " (previously:", g_sOfficeDataStruct.iGarage3Style, "), Lighting: ", iGarage3Lighting , " (previously:", g_sOfficeDataStruct.iGarage3Lighting, "), Number: ", iGarage3Number , " (previously:", g_sOfficeDataStruct.iGarage3Number, ")") bPurchasedGarageMod = TRUE //fail condition already done ENDIF IF (mpPropertySiteFailReason = MPSFR_UNSET) IF (iGarage3Style > 0 AND g_sOfficeDataStruct.iGarage3Style != GET_SF_FROM_OFFICE_GARAGE_INTERIOR(iGarage3Style)) OR (iGarage3Lighting >= 0 AND g_sOfficeDataStruct.iGarage3Lighting != GET_SF_FROM_OFFICE_GARAGE_LIGHTING(iGarage3Lighting)) OR (iGarage3Number >= 0 AND g_sOfficeDataStruct.iGarage3Number != GET_SF_FROM_OFFICE_GARAGE_NUMBERING(iGarage3Number)) CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office Garage3 buy attempt triggered on Style: ", iGarage3Style , " (previously:", g_sOfficeDataStruct.iGarage3Style, "), Lighting: ", iGarage3Lighting , " (previously:", g_sOfficeDataStruct.iGarage3Lighting, "), Number: ", iGarage3Number , " (previously:", g_sOfficeDataStruct.iGarage3Number, ")") BUY_MP_PROPERTY_FROM_WEBSITE(PROPERTY_OFFICE_1_GARAGE_LVL3) IF iCachedBoughtPropertyIndex = -1 iCachedBoughtPropertyIndex = iBoughtPropertyIndex ENDIF bPurchasedGarageMod = TRUE ELSE CDEBUG2LN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office Garage3 not bought for Style: ", iGarage3Style , " (previously:", g_sOfficeDataStruct.iGarage3Style, "), Lighting: ", iGarage3Lighting , " (previously:", g_sOfficeDataStruct.iGarage3Lighting, "), Number: ", iGarage3Number , " (previously:", g_sOfficeDataStruct.iGarage3Number, ")") ENDIF ELSE CDEBUG2LN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office Garage3 will not be not bought for Style: ", iGarage3Style , " (previously:", g_sOfficeDataStruct.iGarage3Style, "), Lighting: ", iGarage3Lighting , " (previously:", g_sOfficeDataStruct.iGarage3Lighting, "), Number: ", iGarage3Number , " (previously:", g_sOfficeDataStruct.iGarage3Number, ")") bPurchasedGarageMod = TRUE //fail condition already done ENDIF IF (mpPropertySiteFailReason = MPSFR_UNSET) IF iModshop > 0 AND g_sOfficeDataStruct.iModshop != GET_SF_FROM_OFFICE_MODSHOP_INTERIOR(iModshop) CPRINTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office Garage Modshop buy attempt triggered on index: ", iOffice , " (selected:", iModshop, ", previously:", g_sOfficeDataStruct.iModshop, ")") BUY_MP_PROPERTY_FROM_WEBSITE(iOffice) IF iCachedBoughtPropertyIndex != -1 iBoughtPropertyIndex = iCachedBoughtPropertyIndex ENDIF bPurchasedGarageMod = TRUE ELSE CDEBUG2LN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office Garage Modshop not bought (selected:", iModshop, ", previously:", g_sOfficeDataStruct.iModshop, ")") ENDIF ELSE CDEBUG2LN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office Garage Modshop will not be not bought for Style: ", iGarage3Style , " (previously:", g_sOfficeDataStruct.iGarage3Style, "), Lighting: ", iGarage3Lighting , " (previously:", g_sOfficeDataStruct.iGarage3Lighting, "), Number: ", iGarage3Number , " (previously:", g_sOfficeDataStruct.iGarage3Number, ")") bPurchasedGarageMod = TRUE //fail condition already done ENDIF USE_FAKE_MP_CASH(FALSE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) bBypassFakeCash = FALSE g_iLastPendingGarageTransactionValue = iPendingTransactionValue IF NOT bPurchasedGarageMod CASSERTLN(DEBUG_INTERNET, "BUY_MP_OFFICE_GARAGE_FROM_WEBSITE(fail:", mpPropertySiteFailReason, "): Office ", iOfficeGarage, " garage and modshop buy attempt but no garage or mod was changed (iGarage1Style:", g_sOfficeDataStruct.iGarage1Style, ") (iGarage2Style:", g_sOfficeDataStruct.iGarage2Style, ") (iGarage3Style:", g_sOfficeDataStruct.iGarage3Style, ") (iModshop:", g_sOfficeDataStruct.iModshop, ") !?!") SWITCH_TO_PROPERTY_RESULTS_PAGE(iOfficeGarage, "_S_PURCHASE_D_ERROR", FALSE, FALSE, FALSE, FALSE, rpmt_0) PLAY_SOUND_FRONTEND(-1, "Click_Fail","WEB_NAVIGATION_SOUNDS_PHONE") EXIT ENDIF ENDPROC PROC DO_VEHICLE_SITE_PRICE_SET(WEBSITE_INDEX_ENUM site) IF site = WWW_LEGENDARYMOTORSPORT_NET OR site = WWW_ELITASTRAVEL_COM OR site = WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM OR site = WWW_DOCKTEASE_COM OR site = WWW_PANDMCYCLES_COM OR site = WWW_SOUTHERNSANANDREASSUPERAUTOS_COM OR site = WWW_BENNYSORIGINALMOTORWORKS_COM OR site = WWW_ARENAWAR_TV #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_INTERNET, "DO_VEHICLE_SITE_PRICE_SET: Updating vehicle prices for webpage ", GET_WEBSITE_FROM_INDEX(site)) #ENDIF IF g_bInMultiplayer UPDATE_VEHICLE_SITE_PRICES_MP(mov, site) ELSE UPDATE_VEHICLE_SITE_PRICES_SP(mov, site) ENDIF ENDIF ENDPROC PROC DO_STATIC_SITE_CHANGE_TRIGGERS() BOOL bUpdate = FALSE IF iStaticLastPage != iStaticCurrentPage OR eStaticLastSite != eStaticCurrentSite CPRINTLN(DEBUG_INTERNET,"DO_STATIC_SITE_CHANGE_TRIGGERS: ", iStaticLastPage, " != ", iStaticCurrentPage, " OR ", GET_WEBSITE_FROM_INDEX(eStaticLastSite), " != ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), ": DO_VEHICLE_SITE_PRICE_SET()") DO_VEHICLE_SITE_PRICE_SET(eStaticCurrentSite) //do the buggers anyway IF (eStaticCurrentSite = WWW_ARENAWAR_TV) AND (iStaticCurrentPage = 1 OR iStaticCurrentPage = 2 OR bPopulatePropertySitePinMap) AND g_bInMultiplayer // // IF g_bPropertyRefreshTrigger POPULATE_MP_ARENA_PROPERTY_SITE_PIN_MAP(mov) // g_bPropertyRefreshTrigger = FALSE // ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET,"DO_STATIC_SITE_CHANGE_TRIGGERS: ", iStaticLastPage, " = ", iStaticCurrentPage, " AND ", GET_WEBSITE_FROM_INDEX(eStaticLastSite), " = ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), ": don't do veh price set") ENDIF INT kbHistory = GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_HISTORY_FLAG_INDEX) IF kbHistory = 0 CPRINTLN(DEBUG_INTERNET, "DO_STATIC_SITE_CHANGE_TRIGGERS: kbHistory is zero ", kbHistory, " ", iStaticHistory) ELSE IF kbHistory < iStaticHistory CPRINTLN(DEBUG_INTERNET, "DO_STATIC_SITE_CHANGE_TRIGGERS: kbHistory is less than ", kbHistory, " < ", iStaticHistory) ELSE CPRINTLN(DEBUG_INTERNET, "DO_STATIC_SITE_CHANGE_TRIGGERS: kbHistory is greater than/equal to ", kbHistory, " >= ", iStaticHistory) ENDIF ENDIF // Webpage has changed IF iStaticLastPage != iStaticCurrentPage OR kbHistory < iStaticHistory CPRINTLN(DEBUG_INTERNET,"DO_STATIC_SITE_CHANGE_TRIGGERS: ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), " last page:", iStaticLastPage, " -> current page:", iStaticCurrentPage, " (g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ")") IF bColourPickingMode CPRINTLN(DEBUG_INTERNET, "DO_STATIC_SITE_CHANGE_TRIGGERS: Leaving colour picking mode") bColourPickingMode = FALSE ENDIF // Check whether we're on a locked DLC vehicle page IF IS_INDEX_DLC_FOR_VEH_SITE(eStaticCurrentSite, iStaticCurrentPage-3) AND IS_SBV_DLC_UNLOCKED(GET_VEHICLE_FROM_SITE_AND_PAGE_ID(eStaticCurrentSite, iStaticCurrentPage)) = FALSE CPRINTLN(DEBUG_INTERNET, "DO_STATIC_SITE_CHANGE_TRIGGERS: Player attempting access to locked DLC") TRIGGER_BROWSER_NAG_SCREEN(-1, -1, NSR_DLC) DO_VEHICLE_FAIL_PAGE(eStaticCurrentSite, VSFR_CANCELED, GET_VEHICLE_FROM_SITE_AND_PAGE_ID(eStaticCurrentSite, iStaticCurrentPage), -1) // First check for content uploads required for specific sites // Within the same site ELIF eStaticCurrentSite = eStaticLastSite OR kbHistory < iStaticHistory bColourPickingMode = FALSE SWITCH eStaticCurrentSite CASE WWW_LEGENDARYMOTORSPORT_NET CASE WWW_ELITASTRAVEL_COM CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM CASE WWW_DOCKTEASE_COM CASE WWW_PANDMCYCLES_COM CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_BENNYSORIGINALMOTORWORKS_COM // We are in colour picking mode! (Reduce for websites which actually support this) bColourPickingMode = FALSE // Update page IF iStaticCurrentPage != iStaticLastPage OR kbHistory < iStaticHistory SITE_BUYABLE_VEHICLE sbv sbv = GET_VEHICLE_FROM_SITE_AND_PAGE_ID(eStaticCurrentSite, iStaticCurrentPage) IF sbv != UNSET_BUYABLE_VEHICLE bColourPickingMode = TRUE IF SET_VEHICLE_DEFAULT_COLOUR(sbv, eStaticCurrentSite, bColourPickingMode, g_eLastBuyableVehicleColourSelected, g_bLastBuyableVehicleArmourSelected) CPRINTLN(DEBUG_INTERNET, "SET_VEHICLE_DEFAULT_COLOUR: Setting \"", GET_LABEL_BUYABLE_VEHICLE(sbv), "\" default colour = ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected), ", bColourPickingMode = ", GET_STRING_FROM_BOOL(bColourPickingMode), " - ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) ELSE CPRINTLN(DEBUG_INTERNET, "SET_VEHICLE_DEFAULT_COLOUR: not setting \"", GET_LABEL_BUYABLE_VEHICLE(sbv), "\" default colour = ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected), ", bColourPickingMode = ", GET_STRING_FROM_BOOL(bColourPickingMode), " - ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) ENDIF ENDIF eCursorInputProcessed = UNSET_BUYABLE_VEHICLE bWaitingForSelectionReturn = FALSE BOOL bShowingBrowserHelpMessage bShowingBrowserHelpMessage = FALSE IF g_bInMultiplayer INT iVehicleNum iVehicleNum = -1 IF (sbv = BV_LX_LUXOR2 OR sbv = BV_LX_SWIFT2 OR sbv = BV_AP_SUPERVOLITO1 OR sbv = BV_AP_SUPERVOLITO2 OR sbv = BV_EX_NIMBUS OR sbv = BV_EX_VOLATUS) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_PASSIVE") CPRINTLN(DEBUG_INTERNET, " - display HELP_PASSIVE (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_PASSIVE") iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF ELIF GET_CLOTHING_FOR_VEHICLE_PURCHASE(sbv, iVehicleNum) OR GET_CLOTHING_FOR_VEHICLE_WEBSITE_PURCHASE(eStaticCurrentSite) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHRE") CPRINTLN(DEBUG_INTERNET, " - display HELP_VEHRE (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_VEHRE") iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF ELIF GET_CHIPS_FOR_VEHICLE_PURCHASE(sbv, iVehicleNum) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHCH") CPRINTLN(DEBUG_INTERNET, " - display HELP_VEHCH (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_VEHCH", BHMT_STRING_WITH_NUMBER_AND_STRING, DEFAULT, g_sMPTunables.iCHIPS_FOR_WEBSITE_PURCHASE_CHIPS, DEFAULT, GET_LABEL_BUYABLE_VEHICLE(sbv)) iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF ELIF (sbv = BV_SC_ELEGY2 AND NOT NETWORK_HAS_SOCIAL_CLUB_ACCOUNT()) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHSC") CPRINTLN(DEBUG_INTERNET, " - display HELP_VEHSC (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_VEHSC") iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF ELIF (GET_SVM_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_SPVE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv // ELIF IS_SBV_A_VEHICLE_PREVIOUSLY_LASTGEN_ONLY(sbv) // CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_PLGO (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") // eCursorInputProcessed = sbv ELIF IS_SBV_A_VEHICLE_PREVIOUSLY_HEIST_LOCKED(sbv) AND !(sbv = BV_DLC_INSURGENT AND DOES_SAVE_HAVE_COUPON(COUPON_CAR2_XMAS2018)) CPRINTLN(DEBUG_INTERNET, " - consider displaying PHLO (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (sbv = BV_DLC_BALLISTIC_EQUIPMENT) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_BAEQ (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (GET_WVM_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_WEVE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (WAM_GET_STEAL_MISSION_UNLOCK_COUNT_FROM_VEHICLE_MODEL(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) > 0) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_WEAI (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (GET_FDS_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_FDSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (GET_BBS_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_BBSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (GET_AWS_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_AWSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv #IF FEATURE_CASINO_HEIST ELIF (GET_CH_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_CHSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (sbv = BV_CH_MINITANK) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_RCBA (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv #ENDIF #IF FEATURE_COPS_N_CROOKS ELIF (GET_CNC_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) AND IS_CNC_CONTENT_ENABLED() CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_CHSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv #ENDIF ELIF (GET_ISLAND_HEIST_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_CHSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (GET_TUNER_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_CHSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (GET_FIXER_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_CHSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv #IF FEATURE_DLC_1_2022 ELIF (GET_SUMMER_2022_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_CHSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv #ENDIF // #IF FEATURE_SUMMER_2020 // ELIF (GET_SUMMER20_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) // CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_CHSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") // eCursorInputProcessed = sbv // #ENDIF ELIF (sbv = BV_AW_RCBANDITO) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_RCBA (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (sbv = BV_GO_HERMES AND DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2017)) OR (sbv = BV_AW_CLIQUE AND DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2018)) OR (sbv = BV_A_BUZZARD AND DOES_SAVE_HAVE_COUPON(COUPON_HELI_XMAS2018)) OR (sbv = BV_DLC_INSURGENT AND DOES_SAVE_HAVE_COUPON(COUPON_CAR2_XMAS2018)) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHX17") CPRINTLN(DEBUG_INTERNET, " - display HELP_VEHX17 (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_VEHX17") iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF #IF FEATURE_GEN9_EXCLUSIVE ELIF (sbv = BV_G9E_S95 AND DOES_SAVE_HAVE_COUPON(COUPON_CAR_GEN9_MIGRATION)) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHGEN9M") CPRINTLN(DEBUG_INTERNET, " - display HELP_VEHGEN9M (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_VEHGEN9M") iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF #ENDIF ENDIF ENDIF IF NOT bShowingBrowserHelpMessage IF NOT IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) AND (ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_PASSIVE") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHRE") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHCH") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHSC") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHX17")) CPRINTLN(DEBUG_INTERNET, " - remove ", g_sBrowserHelpMessage.tl15Tag, " (iStaticCurrentPage: ", iStaticCurrentPage, ")") IF IS_HELP_MESSAGE_BEING_DISPLAYED() IF IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) CLEAR_HELP(TRUE) ENDIF ENDIF CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF ENDIF ENDIF // Error page, upload fail string IF IS_ERROR_PAGE_FOR_VEHICLE_SITE(eStaticCurrentSite, iStaticCurrentPage) DO_VEHICLE_SITE_FAIL_PAGE_REASON(lastVehicleFailReason) // Confirmation page ELIF IS_CONFIRM_PAGE_FOR_VEHICLE_SITE(eStaticCurrentSite, iStaticCurrentPage) DO_VEHICLE_CONF_PAGE_TEXT(eStaticCurrentSite) ENDIF UPDATE_VEHICLE_SITES_PAGE_CHANGE(eStaticCurrentSite,iStaticLastPage, iStaticCurrentPage) BREAK CASE WWW_ARENAWAR_TV // We are in colour picking mode! (Reduce for websites which actually support this) bColourPickingMode = FALSE // Update page IF iStaticCurrentPage != iStaticLastPage OR kbHistory < iStaticHistory SITE_BUYABLE_VEHICLE sbv sbv = GET_VEHICLE_FROM_SITE_AND_PAGE_ID(eStaticCurrentSite, iStaticCurrentPage) IF sbv != UNSET_BUYABLE_VEHICLE bColourPickingMode = TRUE IF SET_VEHICLE_DEFAULT_COLOUR(sbv, eStaticCurrentSite, bColourPickingMode, g_eLastBuyableVehicleColourSelected, g_bLastBuyableVehicleArmourSelected) CPRINTLN(DEBUG_INTERNET, "SET_VEHICLE_DEFAULT_COLOUR: Setting \"", GET_LABEL_BUYABLE_VEHICLE(sbv), "\" default colour = ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected), ", bColourPickingMode = ", GET_STRING_FROM_BOOL(bColourPickingMode), " - ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) ELSE CPRINTLN(DEBUG_INTERNET, "SET_VEHICLE_DEFAULT_COLOUR: not setting \"", GET_LABEL_BUYABLE_VEHICLE(sbv), "\" default colour = ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected), ", bColourPickingMode = ", GET_STRING_FROM_BOOL(bColourPickingMode), " - ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) ENDIF ENDIF eCursorInputProcessed = UNSET_BUYABLE_VEHICLE bWaitingForSelectionReturn = FALSE BOOL bShowingBrowserHelpMessage bShowingBrowserHelpMessage = FALSE IF g_bInMultiplayer INT iVehicleNum iVehicleNum = -1 IF (sbv = BV_LX_LUXOR2 OR sbv = BV_LX_SWIFT2 OR sbv = BV_AP_SUPERVOLITO1 OR sbv = BV_AP_SUPERVOLITO2 OR sbv = BV_EX_NIMBUS OR sbv = BV_EX_VOLATUS) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_PASSIVE") CPRINTLN(DEBUG_INTERNET, " - display HELP_PASSIVE (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_PASSIVE") iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF ELIF GET_CLOTHING_FOR_VEHICLE_PURCHASE(sbv, iVehicleNum) OR GET_CLOTHING_FOR_VEHICLE_WEBSITE_PURCHASE(eStaticCurrentSite) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHRE") CPRINTLN(DEBUG_INTERNET, " - display HELP_VEHRE (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_VEHRE") iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF ELIF GET_CHIPS_FOR_VEHICLE_PURCHASE(sbv, iVehicleNum) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHCH") CPRINTLN(DEBUG_INTERNET, " - display HELP_VEHCH (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_VEHCH", BHMT_STRING_WITH_NUMBER_AND_STRING, DEFAULT, g_sMPTunables.iCHIPS_FOR_WEBSITE_PURCHASE_CHIPS, DEFAULT, GET_LABEL_BUYABLE_VEHICLE(sbv)) iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF ELIF (sbv = BV_SC_ELEGY2 AND NOT NETWORK_HAS_SOCIAL_CLUB_ACCOUNT()) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHSC") CPRINTLN(DEBUG_INTERNET, " - display HELP_VEHSC (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_VEHSC") iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF ELIF (GET_SVM_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_SPVE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv // ELIF IS_SBV_A_VEHICLE_PREVIOUSLY_LASTGEN_ONLY(sbv) // CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_PLGO (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") // eCursorInputProcessed = sbv ELIF IS_SBV_A_VEHICLE_PREVIOUSLY_HEIST_LOCKED(sbv) AND !(sbv = BV_DLC_INSURGENT AND DOES_SAVE_HAVE_COUPON(COUPON_CAR2_XMAS2018)) CPRINTLN(DEBUG_INTERNET, " - consider displaying PHLO (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (sbv = BV_DLC_BALLISTIC_EQUIPMENT) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_BAEQ (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (GET_WVM_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_WEVE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (WAM_GET_STEAL_MISSION_UNLOCK_COUNT_FROM_VEHICLE_MODEL(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) > 0) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_WEAI (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (GET_FDS_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_FDSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (GET_BBS_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_BBSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (GET_AWS_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_AWSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv #IF FEATURE_CASINO_HEIST ELIF (GET_CH_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_CHSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (sbv = BV_CH_MINITANK) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_RCBA (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv #ENDIF #IF FEATURE_COPS_N_CROOKS ELIF (GET_CNC_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1) AND IS_CNC_CONTENT_ENABLED() CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_CHSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv #ENDIF // #IF FEATURE_SUMMER_2020 // ELIF GET_SUMMER20_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1 // CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_CHSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") // eCursorInputProcessed = sbv // #ENDIF #IF FEATURE_HEIST_ISLAND ELIF GET_ISLAND_HEIST_VEHICLE_INDEX(GET_MODEL_FOR_BUYABLE_VEHICLE(sbv)) != -1 CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_CHSE (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv #ENDIF ELIF (sbv = BV_AW_RCBANDITO) CPRINTLN(DEBUG_INTERNET, " - consider displaying HELP_RCBA (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") eCursorInputProcessed = sbv ELIF (sbv = BV_GO_HERMES AND DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2017)) OR (sbv = BV_AW_CLIQUE AND DOES_SAVE_HAVE_COUPON(COUPON_CAR_XMAS2018)) OR (sbv = BV_A_BUZZARD AND DOES_SAVE_HAVE_COUPON(COUPON_HELI_XMAS2018)) OR (sbv = BV_DLC_INSURGENT AND DOES_SAVE_HAVE_COUPON(COUPON_CAR2_XMAS2018)) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHX17") CPRINTLN(DEBUG_INTERNET, " - display HELP_VEHX17 (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_VEHX17") iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF #IF FEATURE_GEN9_EXCLUSIVE ELIF (sbv = BV_G9E_S95 AND DOES_SAVE_HAVE_COUPON(COUPON_CAR_GEN9_MIGRATION)) IF IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) OR NOT ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHGEN9M") CPRINTLN(DEBUG_INTERNET, " - display HELP_VEHGEN9M (sbv: ", GET_LABEL_BUYABLE_VEHICLE(sbv), ", iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_VEHGEN9M") iTutTimer = g_iBrowserTimer + 7500 bShowingBrowserHelpMessage = TRUE ENDIF #ENDIF ENDIF ENDIF IF NOT bShowingBrowserHelpMessage IF NOT IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) AND (ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_PASSIVE") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHRE") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHCH") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHSC") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_VEHX17")) CPRINTLN(DEBUG_INTERNET, " - remove ", g_sBrowserHelpMessage.tl15Tag, " (iStaticCurrentPage: ", iStaticCurrentPage, ")") IF IS_HELP_MESSAGE_BEING_DISPLAYED() IF IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) CLEAR_HELP(TRUE) ENDIF ENDIF CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF ENDIF ENDIF // Error page, upload fail string IF IS_ERROR_PAGE_FOR_VEHICLE_SITE(eStaticCurrentSite, iStaticCurrentPage) DO_VEHICLE_SITE_FAIL_PAGE_REASON(lastVehicleFailReason) // Confirmation page ELIF IS_CONFIRM_PAGE_FOR_VEHICLE_SITE(eStaticCurrentSite, iStaticCurrentPage) DO_VEHICLE_CONF_PAGE_TEXT(eStaticCurrentSite) // ELIF (iStaticCurrentPage = 12) INT iArenaGarage iArenaGarage = ENUM_TO_INT(ARENA_GARAGE_1) //GET_LAST_CLICKED_ARENA_GARAGE() // IF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 41) CPRINTLN(DEBUG_INTERNET, "ARENA_GARAGE property buy attempt triggered on index: ", iArenaGarage) // ELSE // CASSERTLN(DEBUG_INTERNET, "ARENA_GARAGE property replace(?) attempt triggered on index: ", iArenaGarage) // ENDIF INT iResultSlot iResultSlot = 0 BUY_MP_ARENA_GARAGE_FROM_WEBSITE(INT_TO_ENUM(ARENA_GARAGE_ID, iArenaGarage), iResultSlot) ENDIF UPDATE_VEHICLE_SITES_PAGE_CHANGE(eStaticCurrentSite,iStaticLastPage, iStaticCurrentPage) BREAK CASE WWW_IWILLSURVIVEITALL_COM SWITCH iStaticCurrentPage CASE 2 // Redirect if already owns portfolio IF BOUGHT_CON_SITE() GO_TO_WEBSITE("WWW_IWILLSURVIVEITALL_COM_S_MY_D_PORTFOLIO") ENDIF BREAK CASE 15 // Do transaction if char doesn't own portfolio IF NOT BUY_CON_SITE() GO_TO_WEBSITE("WWW_IWILLSURVIVEITALL_COM_S_PURCHASE_D_ERROR") ENDIF BREAK ENDSWITCH BREAK CASE WWW_DYNASTY8EXECUTIVEREALTY_COM IF (iStaticCurrentPage = 10) IF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 9) INT iOffice iOffice = GET_LAST_CLICKED_OFFICE() CPRINTLN(DEBUG_INTERNET, "Office buy attempt triggered on index: ", iOffice) BUY_MP_PROPERTY_FROM_WEBSITE(iOffice) ELIF (g_iLastSelectedWebIndex = 5 AND iStaticLastPage = 9) CPRINTLN(DEBUG_INTERNET, "Office Garage buy attempt triggered") BUY_MP_OFFICE_GARAGE_FROM_WEBSITE() #IF FEATURE_FIXER ELIF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 25) INT iFixerHQ iFixerHQ = GET_LAST_CLICKED_FIXER_HQ() CPRINTLN(DEBUG_INTERNET, "Fixer HQ buy attempt triggered") INT iResultSlot BUY_MP_FIXER_HQ_FROM_WEBSITE(INT_TO_ENUM(FIXER_HQ_ID, iFixerHQ), iResultSlot) #ENDIF ELSE CDEBUG3LN(DEBUG_INTERNET, "Potential property buy attempt (Dynasty 8 Exclusive) 1 - g_iLastSelectedWebIndex: ", g_iLastSelectedWebIndex, ", iStaticLastPage: ", iStaticLastPage, ", iStaticCurrentPage: ", iStaticCurrentPage) ENDIF ENDIF IF iStaticCurrentPage != iStaticLastPage bColourPickingMode = TRUE ENDIF BREAK CASE FORECLOSURES_MAZE_D_BANK_COM IF NOT g_bBrowser_help_bunkmod_seen // IF (iStaticCurrentPage = 15) //BUNKER STYLE IF (iStaticCurrentPage = 16) //PERSONAL QUARTERS OR (iStaticCurrentPage = 17) //SHOOTING RANGE OR (iStaticCurrentPage = 18) //GUN LOCKER OR (iStaticCurrentPage = 19) //TRANSPORTATION INT iHELP_BUNKMOD_SEEN_COUNT iHELP_BUNKMOD_SEEN_COUNT = GET_PACKED_STAT_INT(PACKED_MP_INT_HELP_BUNKMOD_SEEN_COUNT) CPRINTLN(DEBUG_INTERNET, " - display HELP_BUNKMOD (iStaticCurrentPage: ", iStaticCurrentPage, ", iHELP_BUNKMOD_SEEN_COUNT: ", iHELP_BUNKMOD_SEEN_COUNT, ")") IF iHELP_BUNKMOD_SEEN_COUNT < 3 SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_BUNKMOD") iTutTimer = g_iBrowserTimer + 7500 g_bBrowser_help_bunkmod_seen = TRUE SET_PACKED_STAT_INT(PACKED_MP_INT_HELP_BUNKMOD_SEEN_COUNT, iHELP_BUNKMOD_SEEN_COUNT) ENDIF // bShowingBrowserHelpMessage = TRUE ENDIF ENDIF IF (iStaticCurrentPage = 35) //NIGHTCLUB STYLE // [HELP_NCLUBSTY] // Please note: Your chosen style will be installed as you progress with the Nightclub set up. IF NOT (HAS_PLAYER_COMPLETED_NIGHTCLUB_SETUP_MISSION(PLAYER_ID(), MBV_COLLECT_EQUIPMENT) AND HAS_PLAYER_COMPLETED_NIGHTCLUB_SETUP_MISSION(PLAYER_ID(), MBV_COLLECT_STAFF)) CPRINTLN(DEBUG_INTERNET, " - display HELP_NCLUBSTY (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_NCLUBSTY", DEFAULT, TRUE) iTutTimer = g_iBrowserTimer + 7500 ENDIF ELIF (iStaticCurrentPage = 36) //NIGHTCLUB LIGHTING // [HELP_NCLUBLIG] // Please note: Your chosen lighting option will be installed as you progress with the Nightclub set up. IF NOT (HAS_PLAYER_COMPLETED_NIGHTCLUB_SETUP_MISSION(PLAYER_ID(), MBV_COLLECT_EQUIPMENT) OR HAS_PLAYER_COMPLETED_NIGHTCLUB_SETUP_MISSION(PLAYER_ID(), MBV_COLLECT_STAFF)) CPRINTLN(DEBUG_INTERNET, " - display HELP_NCLUBLIG (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_NCLUBLIG", DEFAULT, TRUE) iTutTimer = g_iBrowserTimer + 7500 ENDIF ELIF (iStaticCurrentPage = 39) //NIGHTCLUB DANCERS // [HELP_NCLUBDAN] // Please note: Your dancers will arrive after the Nightclub has been set up. IF NOT (HAS_PLAYER_COMPLETED_NIGHTCLUB_SETUP_MISSION(PLAYER_ID(), MBV_COLLECT_DJ_CRASH)) CPRINTLN(DEBUG_INTERNET, " - display HELP_NCLUBDAN (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_NCLUBDAN", DEFAULT, TRUE) iTutTimer = g_iBrowserTimer + 7500 ENDIF ELIF (iStaticCurrentPage = 40) //DRY ICE // [HELP_NCLUBICE] // Please note: Dry Ice will arrive after the Nightclub has been setup. IF NOT (HAS_PLAYER_COMPLETED_ALL_NIGHTCLUB_SETUP_MISSIONS(PLAYER_ID())) CPRINTLN(DEBUG_INTERNET, " - display HELP_NCLUBICE (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_NCLUBICE", DEFAULT, TRUE) iTutTimer = g_iBrowserTimer + 7500 ENDIF ELSE IF ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_NCLUBSTY") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_NCLUBLIG") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_NCLUBDAN") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_NCLUBICE") IF IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) CPRINTLN(DEBUG_INTERNET, " - clear ", g_sBrowserHelpMessage.tl15Tag, " (iStaticCurrentPage: ", iStaticCurrentPage, ")") CLEAR_HELP() CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF ELIF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBSTY") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBLIG") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBDAN") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_NCLUBICE") CPRINTLN(DEBUG_INTERNET, " - clear nightclub help (iStaticCurrentPage: ", iStaticCurrentPage, ")") CLEAR_HELP() ENDIF ENDIF #IF FEATURE_CASINO_HEIST IF (iStaticCurrentPage >= 42) AND (iStaticCurrentPage <= 48) IF NOT HAS_LOCAL_PLAYER_COMPLETE_FULL_ARCADE_SETUP() CPRINTLN(DEBUG_INTERNET, " - display ARC_OPTIONS (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("ARC_OPTIONS", DEFAULT, TRUE) iTutTimer = g_iBrowserTimer + 7500 ENDIF ELSE IF ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "ARC_OPTIONS") IF IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) CPRINTLN(DEBUG_INTERNET, " - clear ", g_sBrowserHelpMessage.tl15Tag, " (iStaticCurrentPage: ", iStaticCurrentPage, ")") CLEAR_HELP() CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF ELIF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("ARC_OPTIONS") CPRINTLN(DEBUG_INTERNET, " - clear nightclub help (iStaticCurrentPage: ", iStaticCurrentPage, ")") CLEAR_HELP() ENDIF ENDIF #ENDIF #IF FEATURE_TUNER IF (iStaticCurrentPage = 49) // AUTO SHOP STYLE // [HELP_ASHOPSTY] // Please note: Your chosen style will be installed after you complete the Auto Shop setup. IF NOT HAS_PLAYER_COMPLETED_AUTO_SHOP_SETUP_MISSION(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " - display HELP_ASHOPSTY (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_ASHOPSTY", DEFAULT, TRUE) iTutTimer = g_iBrowserTimer + 7500 ENDIF ELIF (iStaticCurrentPage = 50) // AUTO SHOP TINT // [HELP_ASHOPTNT] // Please note: Dry Ice will arrive after the Nightclub has been setup. IF NOT HAS_PLAYER_COMPLETED_AUTO_SHOP_SETUP_MISSION(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " - display HELP_ASHOPTNT (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_ASHOPTNT", DEFAULT, TRUE) iTutTimer = g_iBrowserTimer + 7500 ENDIF ELSE IF ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_ASHOPSTY") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_ASHOPTNT") IF IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) CPRINTLN(DEBUG_INTERNET, " - clear ", g_sBrowserHelpMessage.tl15Tag, " (iStaticCurrentPage: ", iStaticCurrentPage, ")") CLEAR_HELP() CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF ENDIF ENDIF #ENDIF #IF FEATURE_DLC_1_2022 IF (iStaticCurrentPage = 7) // CLUBHOUSE CUSTOM BIKE SHOP CPRINTLN(DEBUG_INTERNET, " - display HELP_BKRCLNT (iStaticCurrentPage: ", iStaticCurrentPage, ")") SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_BKRCLNT", DEFAULT, TRUE) iTutTimer = g_iBrowserTimer + 7500 ELSE IF ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_BKRCLNT") IF IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) CPRINTLN(DEBUG_INTERNET, " - clear ", g_sBrowserHelpMessage.tl15Tag, " (iStaticCurrentPage: ", iStaticCurrentPage, ")") CLEAR_HELP() CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF ENDIF ENDIF #ENDIF IF (iStaticCurrentPage = 9) IF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 8) INT iClubhouse iClubhouse = GET_LAST_CLICKED_CLUBHOUSE() CPRINTLN(DEBUG_INTERNET, "Clubhouse property buy attempt triggered on index: ", iClubhouse) BUY_MP_PROPERTY_FROM_WEBSITE(iClubhouse) ELIF (g_iLastSelectedWebIndex = 6 AND iStaticLastPage = 20) OR (g_iLastSelectedWebIndex = 1 AND iStaticLastPage = 20) INT iBunker iBunker = GET_LAST_CLICKED_BUNKER() IF (g_iLastSelectedWebIndex = 6 AND iStaticLastPage = 20) CPRINTLN(DEBUG_INTERNET, "Bunker property buy attempt triggered on index: ", iBunker) ELIF (g_iLastSelectedWebIndex = 1 AND iStaticLastPage = 20) CPRINTLN(DEBUG_INTERNET, "Bunker property trade attempt triggered on index: ", iBunker) ELSE CASSERTLN(DEBUG_INTERNET, "Bunker property replace(?) attempt triggered on index: ", iBunker) ENDIF INT iResultSlot BUY_MP_FACTORY_FROM_WEBSITE(INT_TO_ENUM(FACTORY_ID, iBunker), iResultSlot) ELIF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 27) OR (g_iLastSelectedWebIndex = 1 AND iStaticLastPage = 27) INT iHangar iHangar = GET_LAST_CLICKED_HANGAR() IF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 27) CPRINTLN(DEBUG_INTERNET, "Hangar property buy attempt triggered on index: ", iHangar) ELIF (g_iLastSelectedWebIndex = 1 AND iStaticLastPage = 27) CPRINTLN(DEBUG_INTERNET, "Hangar property trade attempt triggered on index: ", iHangar) ELSE CASSERTLN(DEBUG_INTERNET, "Hangar property replace(?) attempt triggered on index: ", iHangar) ENDIF INT iResultSlot BUY_MP_HANGAR_FROM_WEBSITE(INT_TO_ENUM(HANGAR_ID, iHangar), iResultSlot) ELIF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 34) INT iBase iBase = GET_LAST_CLICKED_DEFUNCT_BASE() IF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 34) CPRINTLN(DEBUG_INTERNET, "defunct base property buy attempt triggered on index: ", iBase) ELSE CASSERTLN(DEBUG_INTERNET, "defunct base property replace(?) attempt triggered on index: ", iBase) ENDIF INT iResultSlot BUY_MP_DEFUNCT_BASE_FROM_WEBSITE(INT_TO_ENUM(DEFUNCT_BASE_ID, iBase), iResultSlot) ELIF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 41) INT iNightclub iNightclub = GET_LAST_CLICKED_NIGHTCLUB() IF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 41) CPRINTLN(DEBUG_INTERNET, "nightclub property buy attempt triggered on index: ", iNightclub) ELSE CASSERTLN(DEBUG_INTERNET, "nightclub property replace(?) attempt triggered on index: ", iNightclub) ENDIF INT iResultSlot BUY_MP_NIGHTCLUB_FROM_WEBSITE(INT_TO_ENUM(NIGHTCLUB_ID, iNightclub), iResultSlot) ELIF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 48) INT iArcade iArcade = GET_LAST_CLICKED_ARCADE() IF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 48) CPRINTLN(DEBUG_INTERNET, "Arcade property buy attempt triggered on index: ", iArcade) ELSE CASSERTLN(DEBUG_INTERNET, "Arcade property replace(?) attempt triggered on index: ", iArcade) ENDIF INT iResultSlot BUY_MP_ARCADE_FROM_WEBSITE(INT_TO_ENUM(ARCADE_PROPERTY_ID, iArcade), iResultSlot) ELIF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 55) INT iAutoShop iAutoShop = GET_LAST_CLICKED_AUTO_SHOP() IF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 55) CPRINTLN(DEBUG_INTERNET, "Auto Shop property buy attempt triggered on index: ", iAutoShop) ELSE CASSERTLN(DEBUG_INTERNET, "Auto Shop property replace(?) attempt triggered on index: ", iAutoShop) ENDIF INT iResultSlot BUY_MP_AUTO_SHOP_FROM_WEBSITE(INT_TO_ENUM(AUTO_SHOP_PROPERTY_ID, iAutoShop), iResultSlot) ELSE CDEBUG3LN(DEBUG_INTERNET, "Potential property buy attempt - g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ", iStaticLastPage:", iStaticLastPage) ENDIF ENDIF IF iStaticCurrentPage != iStaticLastPage bColourPickingMode = TRUE ENDIF BREAK CASE WWW_THEDIAMONDCASINOANDRESORT_COM IF (iStaticCurrentPage = 4) CPRINTLN(DEBUG_INTERNET, "CASINO_MEM membership buy attempt triggered") BUY_MP_CASINO_MEMBERSHIP_FROM_WEBSITE() ENDIF IF (iStaticCurrentPage = 15) INT iCasinoApt iCasinoApt = ENUM_TO_INT(CASINO_APARTMENT_1) //GET_LAST_CLICKED_CASINO_APT() // IF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 41) CPRINTLN(DEBUG_INTERNET, "CASINO_APT property buy attempt triggered on index: ", iCasinoApt) // ELSE // CASSERTLN(DEBUG_INTERNET, "CASINO_APT property replace(?) attempt triggered on index: ", iCasinoApt) // ENDIF INT iResultSlot iResultSlot = 0 BUY_MP_CASINO_APT_FROM_WEBSITE(INT_TO_ENUM(CASINO_APT_ID, iCasinoApt), iResultSlot) ENDIF IF (iStaticCurrentPage = 0) // [HELP_CASWEB_1] // Please note: The Diamond Casino & Resort does not support the use of Shark Cards in your region. Only earned GTA$ can be used to purchase additional chips to use inside the casino. // IF NOT bDisplaying_HELP_CASWEB_1_for_first_time // AND NOT DOES_PLAYER_OWN_A_CASINO_APARTMENT(PLAYER_ID()) // IF NOT NETWORK_CASINO_CAN_BET_PVC() // CPRINTLN(DEBUG_INTERNET, " - display HELP_CASWEB_1 (iStaticCurrentPage: ", iStaticCurrentPage, ")") // bDisplaying_HELP_CASWEB_1_for_first_time = TRUE // SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_CASWEB_1", DEFAULT, TRUE) // iTutTimer = g_iBrowserTimer + 7500 // ENDIF // ENDIF ELSE // IF ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_CASWEB_1") // IF IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) // CPRINTLN(DEBUG_INTERNET, " - clear ", g_sBrowserHelpMessage.tl15Tag, " (iStaticCurrentPage: ", iStaticCurrentPage, ")") // CLEAR_HELP() // CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() // ENDIF // ELIF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_CASWEB_1") // CPRINTLN(DEBUG_INTERNET, " - clear casino help (iStaticCurrentPage: ", iStaticCurrentPage, ")") // CLEAR_HELP() // ENDIF ENDIF IF (iStaticCurrentPage = 14) //SUMMARY // [HELP_CASWEB_0] // Purchasing the suite will add $500 to the daily property utility charge. Each additional expansion will add a further $100. IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HELP_CASWEB_0_DISPLAYED) CPRINTLN(DEBUG_INTERNET, " - display HELP_CASWEB_0 (iStaticCurrentPage: ", iStaticCurrentPage, ")") IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HELP_CASWEB_0_DISPLAYED) SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HELP_CASWEB_0_DISPLAYED, TRUE) SET_BIT(iPurchaseHelpBS, PURCHASE_HELP_BS_CASWEB_0_FOR_FIRST_TIME) ENDIF IF IS_GAMBLING_APPROVED_REGION() SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_CASWEB_0", DEFAULT, TRUE) ELSE SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("HELP_CASWEB_0B", DEFAULT, TRUE) ENDIF iTutTimer = g_iBrowserTimer + 7500 ENDIF ELSE IF ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_CASWEB_0") OR ARE_STRINGS_EQUAL(g_sBrowserHelpMessage.tl15Tag, "HELP_CASWEB_0B") IF IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) CPRINTLN(DEBUG_INTERNET, " - clear ", g_sBrowserHelpMessage.tl15Tag, " (iStaticCurrentPage: ", iStaticCurrentPage, ")") CLEAR_HELP() CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() ENDIF ELIF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_CASWEB_0") OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP_CASWEB_0B") CPRINTLN(DEBUG_INTERNET, " - clear casino help (iStaticCurrentPage: ", iStaticCurrentPage, ")") CLEAR_HELP() ENDIF ENDIF BREAK CASE WWW_DYNASTY8REALESTATE_COM // We are in colour picking mode! (Reduce for websites which actually support this) bColourPickingMode = FALSE #IF IS_DEBUG_BUILD TEXT_LABEL_15 tlLastClickedPropertyName tlLastClickedPropertyName = GET_PROPERTY_NAME(iLastClickedPropertyIndex) #ENDIF // Update page IF iStaticCurrentPage != iStaticLastPage PRINTLN("kr_debug: IS_PROPERTY_CUSTOMISABLE = ", IS_PROPERTY_CUSTOMISABLE(iLastClickedPropertyIndex), ", iLastClickedPropertyIndex = ", iLastClickedPropertyIndex, ", name = ", GET_STRING_FROM_TEXT_FILE(tlLastClickedPropertyName)) IF IS_PROPERTY_CUSTOMISABLE(iLastClickedPropertyIndex) //Check if an interior has been selected before setting the default value IF NOT bCustomInteriorSelected iCustomAptVariant = 1 bColourPickingMode = TRUE CPRINTLN(DEBUG_INTERNET, "SET_PROPERTY_INTERIOR: Setting iStaticCurrentPage:", iStaticCurrentPage, ", iStaticLastPage = ", iStaticLastPage, " \"", tlLastClickedPropertyName, "\" - ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) ELSE CPRINTLN(DEBUG_INTERNET, "SET_PROPERTY_INTERIOR: Bypass iStaticCurrentPage:", iStaticCurrentPage, ", iStaticLastPage = ", iStaticLastPage, " \"", tlLastClickedPropertyName, "\" - ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) CPRINTLN(DEBUG_INTERNET," g_iLastSelectedWebIndex: ", g_iLastSelectedWebIndex, " iLastClickedPropertyIndex: ", iLastClickedPropertyIndex) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "SET_PROPERTY_INTERIOR: not setting iStaticCurrentPage:", iStaticCurrentPage, ", iStaticLastPage = ", iStaticLastPage, " \"", tlLastClickedPropertyName, "\" - ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "SET_PROPERTY_INTERIOR: ignoring iStaticCurrentPage:", iStaticCurrentPage, ", iStaticLastPage = ", iStaticLastPage, ", iLastClickedPropertyIndex = ", iLastClickedPropertyIndex, " - ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) ENDIF IF (iStaticLastPage = 21 AND NOT IS_PROPERTY_CUSTOMISABLE(iLastClickedPropertyIndex)) OR (iStaticLastPage = 27 AND IS_PROPERTY_CUSTOMISABLE(iLastClickedPropertyIndex)) IF (iStaticCurrentPage = 4) CPRINTLN(DEBUG_INTERNET, "Property buy attempt triggered on index: ",iLastClickedPropertyIndex) //try to buy property with index iLastClickedPropertyIndex IF iLastClickedPropertyIndex > -1 CPRINTLN(DEBUG_INTERNET, "Property buy attempt triggered on index: ",iLastClickedPropertyIndex) BUY_MP_PROPERTY_FROM_WEBSITE(iLastClickedPropertyIndex) ENDIF ENDIF ENDIF IF (iStaticLastPage = 21) OR (iStaticLastPage = 27 AND IS_PROPERTY_CUSTOMISABLE(iLastClickedPropertyIndex)) // Do gps placement for property IF (iStaticCurrentPage = 5) IF iLastClickedPropertyIndex > -1 CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on property: ", iLastClickedPropertyIndex, " \"", tlLastClickedPropertyName, "\" ", mpProperties[iLastClickedPropertyIndex].vPurchaseLocation) SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(mpProperties[iLastClickedPropertyIndex].vPurchaseLocation) ELSE CPRINTLN(DEBUG_INTERNET, "Property gps placement failed on: ", iLastClickedPropertyIndex, " \"", tlLastClickedPropertyName, "\"") ENDIF ENDIF ENDIF // PURCHASE_D_ERROR IF (iStaticCurrentPage = 23) //SlotID 1 = heading //SlotID 2 = message text CPRINTLN(DEBUG_INTERNET, "updating property site error content") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT_EMPTY") END_SCALEFORM_MOVIE_METHOD() CPRINTLN(DEBUG_INTERNET, "Updating property purchase error page fail reason ", mpPropertySiteFailReason, ".") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("VHSITPURFH") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SWITCH mpPropertySiteFailReason CASE MPSFR_INSUFFCIENT_RANK CPRINTLN(DEBUG_INTERNET, "Insufficient rank for property purchase, MPSFR_INSUFFCIENT_RANK") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LAR_IRANK") BREAK CASE MPSFR_INSUFFICIENT_CASH CPRINTLN(DEBUG_INTERNET, "Insufficient cash for property purchase, MPSFR_INSUFFICIENT_CASH") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LAR_ICASH") BREAK CASE MPSFR_NOT_UNLOCKED CPRINTLN(DEBUG_INTERNET, "Property not unlocked for purchase, MPSFR_NOT_UNLOCKED") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LAR_NLOCK") BREAK CASE MPSFR_INSUFFCIENT_RANK_PENDING CPRINTLN(DEBUG_INTERNET, "Insufficient pending rank for property purchase, MPSFR_INSUFFCIENT_RANK_PENDING") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LAR_IRANKC") BREAK CASE MPSFR_NOT_SAFE CPRINTLN(DEBUG_INTERNET, "Not safe for for property purchase, MPSFR_NOT_SAFE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LAR_SAVTRB") BREAK CASE MPSFR_ON_MISSION CPRINTLN(DEBUG_INTERNET, "Not safe for for property purchase, MPSFR_ON_MISSION") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LAR_MISS") BREAK CASE MPSFR_PAID_RESUPPLY CPRINTLN(DEBUG_INTERNET, "Not safe for for property purchase, MPSFR_PAID_RESUPPLY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LAR_SHIP") BREAK CASE MPSFR_HAS_STOCK CPRINTLN(DEBUG_INTERNET, "Not safe for for property purchase, MPSFR_HAS_STOCK") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LAR_STOCK") BREAK CASE MPSFR_UNSET CPRINTLN(DEBUG_INTERNET, "Property purchase failed flag unset, MPSFR_UNSET") BREAK CASE MPSFR_CANCELED CPRINTLN(DEBUG_INTERNET, "Cancelled property purchase, MPSFR_CANCELED") BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, "Unknown reason for failing property purchase, MPSFR_DEFAULT_", mpPropertySiteFailReason) BREAK ENDSWITCH END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT") END_SCALEFORM_MOVIE_METHOD() ENDIF BREAK CASE WWW_THECHILDRENOFTHEMOUNTAIN_COM IF iStaticCurrentPage = 1 IF g_iChildrenOfTheMountainStatus = 3 WHILE NOT REGISTER_EMAIL_FROM_CHARACTER_TO_PLAYER(EMAIL_COTM_ADRIAN_3, CT_AMBIENT, BIT_FRANKLIN, CHAR_BLANK_ENTRY, 1000, 5000, DEFAULT, CID_BLANK) CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Sending email with 'actuality' password...") WAIT(0) ENDWHILE CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Sent email with 'actuality' password") BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(4) END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_TEXT") END_SCALEFORM_MOVIE_METHOD() g_iChildrenOfTheMountainStatus = 4 CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: SET_DATA_SLOT set to 4") ENDIF ELIF iStaticCurrentPage = 14 IF g_iChildrenOfTheMountainStatus = 5 WHILE NOT REGISTER_EMAIL_FROM_CHARACTER_TO_PLAYER(EMAIL_COTM_ADRIAN_4, CT_AMBIENT, BIT_FRANKLIN, CHAR_BLANK_ENTRY, 1000, 5000, DEFAULT, CID_BLANK) CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Sending final email...") WAIT(0) ENDWHILE CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Sent final email") SET_PED_COMP_ITEM_ACQUIRED_SP(PLAYER_ONE, COMP_TYPE_TORSO, TORSO_P1_T_SHIRT_12, TRUE) CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Unlocked t-shirt") g_iChildrenOfTheMountainStatus = 6 ENDIF ENDIF BREAK ENDSWITCH ELSE IF g_eLastBuyableVehicleColourSelected != BCV_NO_COLOUR CPRINTLN(DEBUG_INTERNET, " invalidated vehicle colour from ", g_eLastBuyableVehicleColourSelected, " to BCV_NO_COLOUR.") g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR ENDIF IF g_bLastBuyableVehicleArmourSelected != FALSE CPRINTLN(DEBUG_INTERNET, " invalidated vehicle armour from ", GET_STRING_FROM_BOOL(g_bLastBuyableVehicleArmourSelected), " to FALSE.") g_bLastBuyableVehicleArmourSelected = FALSE ENDIF // Transitioning to another site SWITCH eStaticCurrentSite CASE WWW_THECHILDRENOFTHEMOUNTAIN_COM IF iStaticCurrentPage = 1 AND g_iChildrenOfTheMountainStatus < 1 WHILE NOT REGISTER_EMAIL_FROM_CHARACTER_TO_PLAYER(EMAIL_COTM_ADRIAN_2, CT_AMBIENT, BIT_FRANKLIN, CHAR_BLANK_ENTRY, 1000, 5000, DEFAULT, CID_BLANK) CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Sending email with 'futility' password...") WAIT(0) ENDWHILE CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Sent email with 'futility' password") BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_TEXT") END_SCALEFORM_MOVIE_METHOD() g_iChildrenOfTheMountainStatus = 1 CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: SET_DATA_SLOT set to 1") ENDIF BREAK CASE WWW_LEGENDARYMOTORSPORT_NET CASE WWW_ELITASTRAVEL_COM CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM CASE WWW_DOCKTEASE_COM CASE WWW_PANDMCYCLES_COM CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_BENNYSORIGINALMOTORWORKS_COM CASE WWW_ARENAWAR_TV // We are in colour picking mode! (Reduce for websites which actually support this) bColourPickingMode = FALSE SITE_BUYABLE_VEHICLE sbv sbv = GET_VEHICLE_FROM_SITE_AND_PAGE_ID(eStaticCurrentSite, iStaticCurrentPage) IF sbv != UNSET_BUYABLE_VEHICLE bColourPickingMode = TRUE IF SET_VEHICLE_DEFAULT_COLOUR(sbv, eStaticCurrentSite, bColourPickingMode, g_eLastBuyableVehicleColourSelected, g_bLastBuyableVehicleArmourSelected) CPRINTLN(DEBUG_INTERNET, "SET_VEHICLE_DEFAULT_COLOUR: Setting \"", GET_LABEL_BUYABLE_VEHICLE(sbv), "\" default colour = ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected), ", bColourPickingMode = ", GET_STRING_FROM_BOOL(bColourPickingMode), " - ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) ELSE CPRINTLN(DEBUG_INTERNET, "SET_VEHICLE_DEFAULT_COLOUR: not setting \"", GET_LABEL_BUYABLE_VEHICLE(sbv), "\" default colour = ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected), ", bColourPickingMode = ", GET_STRING_FROM_BOOL(bColourPickingMode), " - ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) ENDIF ENDIF BREAK ENDSWITCH ENDIF bUpdate = TRUE ELIF eStaticLastSite != eStaticCurrentSite IF eStaticCurrentSite = WWW_DYNASTY8EXECUTIVEREALTY_COM bUpdate = TRUE CPRINTLN(DEBUG_INTERNET, "DO_STATIC_SITE_CHANGE_TRIGGERS EXEC: Static site with id ", GET_WEBSITE_FROM_INDEX(eStaticLastSite), " -> ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), " : ",iStaticLastPage ," -> ", iStaticCurrentPage ," detected ") ENDIF ELIF eStaticLastSite != eStaticCurrentSite IF eStaticCurrentSite = FORECLOSURES_MAZE_D_BANK_COM bUpdate = TRUE CPRINTLN(DEBUG_INTERNET, "DO_STATIC_SITE_CHANGE_TRIGGERS BIKER: Static site with id ", GET_WEBSITE_FROM_INDEX(eStaticLastSite), " -> ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), " : ",iStaticLastPage ," -> ", iStaticCurrentPage ," detected ") ENDIF ENDIF IF bUpdate g_bPropertyRefreshTrigger = TRUE CPRINTLN(DEBUG_INTERNET, "DO_STATIC_SITE_CHANGE_TRIGGERS: Static site with id ", GET_WEBSITE_FROM_INDEX(eStaticLastSite), " -> ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), " : ",iStaticLastPage ," -> ", iStaticCurrentPage ," detected ") ENDIF iStaticHistory = kbHistory // OLD STATIC TRIGGERS - these should be converted to the above format // These static site triggers should perhaps get moved somewhere else sometime SWITCH eStaticCurrentSite CASE WWW_THEREALITYMILL_COM IF eStaticLastSite = WWW_THEREALITYMILL_COM AND iStaticLastPage = 1 AND iStaticCurrentPage = 15 enumCharacterList eChar eChar = GET_CURRENT_PLAYER_PED_ENUM() SWITCH eChar CASE CHAR_MICHAEL IF NOT g_savedGlobals.sAmbient.bWebsiteSubscription[0] IF GET_TOTAL_CASH(CHAR_MICHAEL) < 500 GO_TO_WEBSITE("WWW_THEREALITYMILL_COM_S_PURCHASE_D_ERROR") ELSE DO_BANK_ACCOUNT_ACTION(BANK_ACCOUNT_MICHAEL, BAA_DEBIT, BAAC_REALITY_MILL, 500) g_savedGlobals.sAmbient.bWebsiteSubscription[0] = TRUE ENDIF ENDIF BREAK CASE CHAR_FRANKLIN IF NOT g_savedGlobals.sAmbient.bWebsiteSubscription[1] IF GET_TOTAL_CASH(CHAR_FRANKLIN) < 500 GO_TO_WEBSITE("WWW_THEREALITYMILL_COM_S_PURCHASE_D_ERROR") ELSE DO_BANK_ACCOUNT_ACTION(BANK_ACCOUNT_FRANKLIN, BAA_DEBIT, BAAC_REALITY_MILL, 500) g_savedGlobals.sAmbient.bWebsiteSubscription[1] = TRUE ENDIF ENDIF BREAK CASE CHAR_TREVOR IF NOT g_savedGlobals.sAmbient.bWebsiteSubscription[2] IF GET_TOTAL_CASH(CHAR_TREVOR) < 500 GO_TO_WEBSITE("WWW_THEREALITYMILL_COM_S_PURCHASE_D_ERROR") ELSE // Debit account by $500 DO_BANK_ACCOUNT_ACTION(BANK_ACCOUNT_TREVOR, BAA_DEBIT, BAAC_REALITY_MILL, 500) g_savedGlobals.sAmbient.bWebsiteSubscription[2] = TRUE ENDIF ENDIF BREAK ENDSWITCH ENDIF BREAK CASE WWW_LENNYAVERY_D_REALTY_COM IF bPrimedAveryGps IF !g_bInMultiplayer IF iStaticCurrentPage = 5 bPrimedAveryGps = FALSE SWITCH iStaticAveryPrevious //House 1 CASE 6 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-1569.5250, 444.0400, 108.1350>>) BREAK //House 2 CASE 7 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-1352.8800, 613.7700, 134.3400>>) BREAK //House 3 CASE 8 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-1469.2000, -5.3300, 53.1050>>) BREAK //House 4 CASE 9 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-1632.8329, -413.8573, 39.9441>>) BREAK //House 5 CASE 10 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-1774.2250, -430.0300, 44.0400>>) BREAK //House 6 CASE 11 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-380.7500, 427.7900, 110.9700>>) BREAK //House 7 CASE 12 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-163.2826, 989.2324, 234.0641>>) BREAK //House 8 CASE 13 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-492.2117, 585.2451, 122.0000>>) BREAK //House 9 CASE 14 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-818.8400, 434.7400, 88.1500>>) BREAK //House 10 CASE 15 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-910.1000, 784.3440, 184.4710>>) BREAK //House 11 CASE 16 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-825.9200, -26.6700, 38.6800>>) BREAK //House 12 CASE 17 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-1103.5000, 587.2900, 102.8650>>) BREAK //House 13 CASE 18 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-1253.2550, 496.6150, 93.8200>>) BREAK //House 14 CASE 19 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<166.5500, 487.3100, 142.1200>>) BREAK //House 15 CASE 20 SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(<<-1163.8590, 319.1900, 67.9600>>) BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, "appInternet: Avery property site location set failed. Pass this bug to Default Levels.") BREAK ENDSWITCH ENDIF ENDIF ELSE bPrimedAveryGps = TRUE ENDIF iStaticAveryPrevious = iStaticCurrentPage BREAK ENDSWITCH eStaticLastSite = eStaticCurrentSite iStaticLastPage = iStaticCurrentPage ENDPROC PROC PROGRESS_FIRST_TIME_TUTORIAL() CDEBUG3LN(DEBUG_INTERNET, "PROGRESS_FIRST_TIME_TUTORIAL(\"", g_sBrowserHelpMessage.tl15Tag, "\"), iTutstage:", iTutstage, ", iTutTimer:", iTutTimer, ", g_iBrowserTimer:", g_iBrowserTimer, " //", TO_FLOAT(g_iBrowserTimer-iTutTimer)/1000.0) IF iTutstage = 0 PAUSE_FLOW_HELP_QUEUE(TRUE) iTutTimer = g_iBrowserTimer + 7500 IF NOT IS_PLAYER_DEAD(GET_PLAYER_INDEX()) g_iBrowserHealthDelta = GET_ENTITY_HEALTH(GET_PLAYER_PED(GET_PLAYER_INDEX())) ENDIF ++iTutstage ENDIF IF iTutstage != 0 SWITCH iTutstage CASE 1 g_sBrowserHelpMessage.bShow = TRUE g_sBrowserHelpMessage.tl15Tag = "BROWTUT1" g_sBrowserHelpMessage.eTextType = BHMT_STRING IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) // PC specific mouse help g_sBrowserHelpMessage.tl15Tag = "BROWTUT1_KM" ENDIF BREAK CASE 2 g_sBrowserHelpMessage.tl15Tag = "BROWTUT2" g_sBrowserHelpMessage.eTextType = BHMT_STRING IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) // PC specific mouse help g_sBrowserHelpMessage.tl15Tag = "BROWTUT2_KM" ENDIF BREAK CASE 3 g_sBrowserHelpMessage.tl15Tag = "BROWTUT3" g_sBrowserHelpMessage.eTextType = BHMT_STRING IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) // PC specific mouse help g_sBrowserHelpMessage.tl15Tag = "BROWTUT3_KM" ENDIF BREAK CASE 4 g_sBrowserHelpMessage.tl15Tag = "BROWTUT4" g_sBrowserHelpMessage.eTextType = BHMT_STRING BREAK CASE 5 g_sBrowserHelpMessage.tl15Tag = "BROWTUT5" g_sBrowserHelpMessage.eTextType = BHMT_STRING IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) // PC specific mouse help g_sBrowserHelpMessage.tl15Tag = "BROWTUT5_KM" ENDIF BREAK #IF IS_NEXTGEN_BUILD CASE 6 IF IS_PLAYSTATION_PLATFORM() g_sBrowserHelpMessage.tl15Tag = "BROWTUT1a" //The Track Pad may also be used to move the pointer." g_sBrowserHelpMessage.eTextType = BHMT_STRING ELSE iTutstage++ ENDIF BREAK #ENDIF DEFAULT //tutorial over g_sBrowserHelpMessage.bShow = FALSE iTutstage = 0 //g_bBrowserUserMode = TRUE//return player control g_savedGlobals.sFinanceData.bBrowserTutorialSeen = TRUE PAUSE_FLOW_HELP_QUEUE(FALSE) BREAK ENDSWITCH IF iTutTimer < g_iBrowserTimer iTutTimer = g_iBrowserTimer + 7500 ++iTutstage ENDIF ENDIF ENDPROC BOOL bTexitSeenUp = FALSE PROC SORT_NUMERICAL_INT_ARRAY(INT &intArray[],INT iSizeOfArray) INT i,j, tempInt REPEAT iSizeOfArray i FOR j=i+1 TO iSizeOfArray-1 IF intArray[j] < intArray[i] tempInt = intArray[j] intArray[j] = intArray[i] intArray[i] = tempInt ENDIF ENDFOR ENDREPEAT ENDPROC PROC RUN_OSK_FOR_ORG_NAME() BOOL bOfficeWebsite = FALSE, bIsMCClub = FALSE TEXT_LABEL_63 tlOfficeName = "" IF eStaticCurrentSite = WWW_DYNASTY8EXECUTIVEREALTY_COM bOfficeWebsite = TRUE // B* 2789770 bIsMCClub = FALSE tlOfficeName = g_sOfficeDataStruct.tl63OldOrgName CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] Runing keyboard for office \"", tlOfficeName, "\" ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) ELIF eStaticCurrentSite = FORECLOSURES_MAZE_D_BANK_COM bOfficeWebsite = FALSE bIsMCClub = TRUE tlOfficeName = g_sClubhouseDataStruct.tl63OldSignage CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] Runing keyboard for clubhouse \"", tlOfficeName, "\" ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite)) ENDIF IF GB_MANAGE_NAMING_GANG(GBKeyBoardData, TRUE, bOfficeWebsite, tlOfficeName, bIsMCClub, FALSE) TEXT_LABEL_63 tl63OrganisationName = GET_ONSCREEN_KEYBOARD_RESULT() IF NOT IS_STRING_NULL_OR_EMPTY(tl63OrganisationName) IF bOfficeWebsite g_sOfficeDataStruct.tl63NewOrgName = tl63OrganisationName // Player doesn't own Office IF GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_OFFICE_0) = 0 g_sOfficeDataStruct.iOfficeNameID = 0 CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] Office not purchased, id = ", g_sOfficeDataStruct.iOfficeNameID) // Player already has this name ELIF GET_HASH_KEY(g_sOfficeDataStruct.tl63NewOrgName) = GET_HASH_KEY(g_sOfficeDataStruct.tl63OldOrgName) g_sOfficeDataStruct.iOfficeNameID = GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_NAME_ID) CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] player already has this name, id = ", g_sOfficeDataStruct.iOfficeNameID) // Stats are out of sync! // ELIF GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_NAME_ID) != GET_PACKED_STAT_INT(PACKED_MP_CHAR_Office_NAME_ID) // g_sOfficeDataStruct.iOfficeNameID = 0 // CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] Office stats out of sync, id = ", g_sOfficeDataStruct.iOfficeNameID, ", packed=", GET_PACKED_STAT_INT(PACKED_MP_CHAR_Office_NAME_ID), ", profile=", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_NAME_ID)) // Change id ELIF GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_NAME_ID) != 1 g_sOfficeDataStruct.iOfficeNameID = 1 CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] changing name, id = ", g_sOfficeDataStruct.iOfficeNameID) ELIF GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_NAME_ID) != 2 g_sOfficeDataStruct.iOfficeNameID = 2 CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] changing name, id = ", g_sOfficeDataStruct.iOfficeNameID) ELSE CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] missing case, id = ", g_sOfficeDataStruct.iOfficeNameID) ENDIF POPULATE_OWNED_EXEC_OFFICE(mov) ELIF bIsMCClub g_sClubhouseDataStruct.tl63NewSignage = tl63OrganisationName // Player doesn't own Clubhouse IF GET_OWNED_PROPERTY(PROPERTY_OWNED_SLOT_CLUBHOUSE) = 0 g_sClubhouseDataStruct.iClubhouseNameID = 0 CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] Clubhouse not purchased, id = ", g_sClubhouseDataStruct.iClubhouseNameID) // Player already has this name ELIF GET_HASH_KEY(g_sClubhouseDataStruct.tl63NewSignage) = GET_HASH_KEY(g_sClubhouseDataStruct.tl63OldSignage) g_sClubhouseDataStruct.iClubhouseNameID = GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CLBHOSE_NAME_ID) CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] player already has this name, id = ", g_sClubhouseDataStruct.iClubhouseNameID) // Stats are out of sync! // ELIF GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CLBHOSE_NAME_ID) != GET_PACKED_STAT_INT(PACKED_MP_CHAR_CLUBHOUSE_NAME_ID) // g_sClubhouseDataStruct.iClubhouseNameID = 0 // CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] CLUBHOUSE stats out of sync, id = ", g_sClubhouseDataStruct.iClubhouseNameID, ", packed=", GET_PACKED_STAT_INT(PACKED_MP_CHAR_CLUBHOUSE_NAME_ID), ", profile=", GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CLBHOSE_NAME_ID)) // Change id ELIF GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CLBHOSE_NAME_ID) != 1 g_sClubhouseDataStruct.iClubhouseNameID = 1 CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] changing name, id = ", g_sClubhouseDataStruct.iClubhouseNameID) ELIF GET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CLBHOSE_NAME_ID) != 2 g_sClubhouseDataStruct.iClubhouseNameID = 2 CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] changing name, id = ", g_sClubhouseDataStruct.iClubhouseNameID) ELSE CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] missing case, id = ", g_sClubhouseDataStruct.iClubhouseNameID) ENDIF POPULATE_OWNED_BIKER_CLUBHOUSE(mov) ENDIF CPRINTLN(DEBUG_INTERNET, "[MGR_EXEC_WEB] Result = ", tl63OrganisationName) ENDIF GBKeyBoardData.bCanceled = FALSE bRunningOrgNameKeyboard = FALSE BROWSER_CURSOR_LOADING(TRUE) ENDIF ENDPROC PROC RUN_OSK_FOR_YACHT(TEXT_LABEL_63 tl63Name) WHILE NOT RUN_ON_SCREEN_KEYBOARD(KeyBoardData.eStatus, //OSK_STATUS &oskStatus, KeyBoardData.iProfanityToken, //INT &iProfanityToken, KeyBoardData.iCurrentStatus, //INT &iCurrentstatus, FALSE, //BOOL bIsObjectiveText = FALSE, FALSE, //BOOL bMissionName = TRUE, tl63Name, //STRING stToChange = NULL, DEFAULT, //BOOL bSMSMessage = FALSE, DEFAULT, //INT iMissObjectiveType = 0, DEFAULT, //BOOL bSMSMessageShort = FALSE, DEFAULT, //BOOL bMissionTags = FALSE, DEFAULT, //STRING stToChange2 = NULL, DEFAULT, //BOOL bUsingLaptopEmail = FALSE, DEFAULT, //BOOL bRenameOutfit = FALSE, DEFAULT, //BOOL bCutsceneName = FALSE, DEFAULT, //BOOL bCustomTeamName = FALSE, DEFAULT, //BOOL bCustomRoleName = FALSE, DEFAULT, //INT iCurrentSMS = 0, TRUE, //BOOL bCustomYachtName = FALSE) DEFAULT, //BOOL bCustomOrganization = FALSE) DEFAULT, //BOOL bTooShort = FALSE) DEFAULT, //BOOL bCanceled = FALSE) DEFAULT, //BOOL bInUse = FALSE) TRUE) //BOOL bUGC = FALSE) RENDER_BROWSER() IF KeyBoardData.eStatus = OSK_CANCELLED OR IS_PED_INJURED(PLAYER_PED_ID()) OR NOT DO_CHECK_TO_TERMINATE_WHILE_LOOPS() IF KeyBoardData.eStatus = OSK_CANCELLED CPRINTLN(DEBUG_INTERNET, " ...cancelled keyboard!") ELIF IS_PED_INJURED(PLAYER_PED_ID()) CPRINTLN(DEBUG_INTERNET, " ...injured keyboard!") ELIF NOT DO_CHECK_TO_TERMINATE_WHILE_LOOPS() CPRINTLN(DEBUG_INTERNET, " ...terminated keyboard!") ELSE CPRINTLN(DEBUG_INTERNET, " ...UNKNOWN keyboard!") ENDIF KeyBoardData.eStatus = OSK_PENDING KeyBoardData.iCurrentstatus = OSK_STAGE_SET_UP KeyBoardData.iProfanityToken = 0 EXIT ENDIF WAIT(0) ENDWHILE ENDPROC PROC PASS_INPUTS_TO_BROWSER(SCALEFORM_INDEX movin) IF g_iBrowserNoInputTimer != -1 IF g_iBrowserNoInputTimer > g_iBrowserTimer CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Browser input delayed") EXIT ELSE g_iBrowserNoInputTimer = -1 ENDIF ENDIF IF IS_SYSTEM_UI_BEING_DISPLAYED() EXIT ENDIF IF IS_PAUSE_MENU_ACTIVE() CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: IS_PAUSE_MENU_ACTIVE") EXIT ENDIF IF IS_SCREEN_FADED_OUT() CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: IS_SCREEN_FADED_OUT") EXIT ELIF IS_SCREEN_FADING_IN() CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: IS_SCREEN_FADING_IN") EXIT ELIF IS_SCREEN_FADED_OUT() CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: IS_SCREEN_FADED_OUT") EXIT ENDIF IF g_bBrowserGoToStoreTrigger CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: g_bBrowserGoToStoreTrigger()") IF g_bBrowserNagScreenState OR g_bBrowserVoucherNagScreenState IF g_bBrowserNagScreenState IF g_bBrowserVoucherNagScreenState CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: g_bBrowserNagScreenState AND g_bBrowserVoucherNagScreenState") ELSE CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: g_bBrowserNagScreenState") ENDIF ELSE IF g_bBrowserVoucherNagScreenState CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: g_bBrowserVoucherNagScreenState") ELSE CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: UNKNOWN NAG SCREEN STATE") ENDIF ENDIF IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) OR (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_ACCEPT) AND NOT IS_WARNING_MESSAGE_ACTIVE()) OR (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) AND NOT IS_WARNING_MESSAGE_ACTIVE()) g_bBrowserVoucherNagScreenState = FALSE g_bBrowserGoToStoreTrigger = FALSE BROWSER_SET_CURSOR_STATE("ARROW") PREP_BROWSER_BUTTONS(TRUE) //Store the current page as we need to open it again when this comes back from the store //1621761 //lastSiteURL IF g_bBrowserNagScreenState IF NOT IS_STRING_NULL_OR_EMPTY(lastSiteURL) //plug it into the globals for the relaunch on coming back from the shop IF g_bInMultiplayer // these only work in MP SET_TRANSITION_SESSION_RESTORE_SHOP_STATE_ON_RESPAWN() SET_TRANSITION_SESSION_SHOP_STATE_INITIALISED() // dont wait for initialisation on return ENDIF ENDIF SET_LAST_VIEWED_SHOP_ITEM(g_iBrowserGoToStoreItemHash, g_iBrowserGoToStoreItemPrice, 0) OPEN_COMMERCE_STORE("", "", SPL_PHONE) g_bBrowserNagScreenState = FALSE WHILE IS_COMMERCE_STORE_OPEN() RENDER_BROWSER() WAIT(0) ENDWHILE ENDIF g_iBrowserNoInputTimer = g_iBrowserTimer + 500 SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(nagScreen) nagScreen = null 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()) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL) OR (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_CANCEL) AND NOT IS_WARNING_MESSAGE_ACTIVE()) CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: canceled, bailing") g_sTransitionSessionData.sEndReserve.stMPBrowserFromShopSite = "" BROWSER_SET_CURSOR_STATE("ARROW") PLAY_SOUND_FRONTEND(-1, "BACK","HUD_FRONTEND_DEFAULT_SOUNDSET") g_bBrowserNagScreenState = FALSE g_bBrowserVoucherNagScreenState = FALSE g_bBrowserGoToStoreTrigger = FALSE PREP_BROWSER_BUTTONS(TRUE) SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(nagScreen) nagScreen = null g_iBrowserNoInputTimer = g_iBrowserTimer + 500 ENDIF ENDIF EXIT ENDIF BAWSAQ_TRADERS bttarget SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_MICHAEL bttarget = BS_TR_MIKE BREAK CASE CHAR_TREVOR bttarget = BS_TR_TREVOR BREAK CASE CHAR_FRANKLIN bttarget = BS_TR_FRANKLIN BREAK ENDSWITCH IF NOT IS_BROWSER_OPEN() CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: bail due to browser not visible") EXIT ENDIF // If there has been keyboard text this frame then the user is using the PC keyboard to type so ignore all other // inputs has they can conflict. IF PASS_KEYBOARD_INPUT_TO_SCALEFORM(movin) OR b_Creating_Email_Message_Body_from_OSK OR b_Creating_Email_Message_Subject_from_OSK EXIT ENDIF //function SET_ANALOG_STICK_INPUT(isLeftStick:Boolean, mouseX:Number, mouseY:Number):Void // ANALOG STICKS //GET_POSITION_OF_ANALOGUE_STICKS(PAD1,iPadLeftX,iPadLeftY,iPadRightX,iPadRightY) GET_CONTROL_VALUE_OF_ANALOGUE_STICKS_UNBOUND( iPadLeftX, iPadLeftY, iPadRightX, iPadRightY, TRUE) // iPadLeftX = GET_CONTROL_VALUE(FRONTEND_CONTROL,INPUT_FRONTEND_AXIS_X) -128 // iPadLeftY = GET_CONTROL_VALUE(FRONTEND_CONTROL,INPUT_FRONTEND_AXIS_Y)-128 // iPadRightX = GET_CONTROL_VALUE(FRONTEND_CONTROL,INPUT_FRONTEND_RIGHT_AXIS_X)-128 // iPadRightY = GET_CONTROL_VALUE(FRONTEND_CONTROL,INPUT_FRONTEND_RIGHT_AXIS_Y)-128 //deadzone IF ((iPadLeftX < 10) AND (iPadLeftX > -10)) iPadLeftX = 0 ENDIF IF ((iPadLeftY < 10) AND (iPadLeftY > -10)) iPadLeftY = 0 ENDIF IF ((iPadRightX < 10) AND (iPadRightX > -10)) iPadRightX = 0 ENDIF IF ((iPadRightY < 10) AND (iPadRightY > -10)) iPadRightY = 0 ENDIF // CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Browserblah : ", iPadLeftX, " ", iPadLeftY, " ",iPadRightX, " ", iPadRightY) FLOAT delta = 1.0 +@ g_fWebCursorSensitivity IF NOT bTVOn // Disabling the cursor and scrolling controls whilst playing video. // Mouse cursor control IF IS_USING_CURSOR(FRONTEND_CONTROL) 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(movin, "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 ENDIF IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) // Scroll up and down using cursor keys, as in real world browsers. IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) OR IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) fMouseWheelScrollSpeed = 200 ELIF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) OR IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) fMouseWheelScrollSpeed = -200 ELIF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN) // Mouse scroll wheel down: If not already scrolling down set to 200, otherwise increase speed. (Speed decays with smoothing below) IF fMouseWheelScrollSpeed <= 0.0 fMouseWheelScrollSpeed = 200.0 ELSE fMouseWheelScrollSpeed += 200.0 IF fMouseWheelScrollSpeed >= 1000.0 fMouseWheelScrollSpeed = 1000.0 ENDIF ENDIF ELIF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP) // Mouse scroll wheel up: If not already scrolling up set to -200, otherwise increase speed. (Speed decays with smoothing below) IF fMouseWheelScrollSpeed >= 0.0 fMouseWheelScrollSpeed = -200.0 ELSE fMouseWheelScrollSpeed -= 200.0 IF fMouseWheelScrollSpeed <= -1000.0 fMouseWheelScrollSpeed = -1000.0 ENDIF ENDIF ENDIF ELSE // Gamepad control IF (NOT (iPadLeftXLast = iPadLeftX)) OR (NOT (iPadLeftYLast = iPadLeftY)) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(1.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT((TO_FLOAT(iPadLeftX)) * delta) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT((TO_FLOAT(iPadLeftY)) * delta) END_SCALEFORM_MOVIE_METHOD() iPadLeftXLast = iPadLeftX iPadLeftYLast = iPadLeftY ENDIF IF (NOT (iPadRightXLast = iPadRightX)) OR (NOT (iPadRightYLast = iPadRightY)) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT((TO_FLOAT(iPadRightX)) * delta) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT((TO_FLOAT(iPadRightY)) * delta) END_SCALEFORM_MOVIE_METHOD() iPadRightXLast = iPadRightX iPadRightYLast = iPadRightY fMouseWheelScrollSpeed = 0.0 ENDIF ENDIF // Mouse wheel scroll IF fMouseWheelScrollSpeed != 0.0 // Decay scroll speed with smoothing fMouseWheelScrollSpeed *= 0.9 IF fMouseWheelScrollSpeed < 5.0 AND fMouseWheelScrollSpeed > -5.0 fMouseWheelScrollSpeed = 0.0 ENDIF // Apply scroll speed BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fMouseWheelScrollSpeed) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) END_SCALEFORM_MOVIE_METHOD() ENDIF IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_LB) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_LB) IF !bRunningOrgNameKeyboard IF bLeftShoulder = FALSE bLeftShoulder = TRUE CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending an LEFT BUMPER input event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_LEFTSHOULDER1))) END_SCALEFORM_MOVIE_METHOD() ENDIF ENDIF ELSE bLeftShoulder = FALSE ENDIF IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_LT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_LT) IF bLeftShoulder2 = FALSE bLeftShoulder2 = TRUE CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending a LEFT TRIGGER input event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_LEFTSHOULDER2))) END_SCALEFORM_MOVIE_METHOD() ENDIF ELSE bLeftShoulder2 = FALSE ENDIF IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_RB) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_RB) IF !bRunningOrgNameKeyboard IF bRightShoulder = FALSE bRightShoulder = TRUE CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending a RIGHT BUMPER input event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_RIGHTSHOULDER1))) END_SCALEFORM_MOVIE_METHOD() ENDIF ENDIF ELSE bRightShoulder = FALSE ENDIF IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_RT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_RT) IF bRightShoulder2 = FALSE bRightShoulder2 = TRUE CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending a RIGHT TRIGGER input event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_RIGHTSHOULDER2))) END_SCALEFORM_MOVIE_METHOD() ENDIF ELSE bRightShoulder2 = FALSE ENDIF IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL,INPUT_FRONTEND_RT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_RT) bRightShoulder2 = FALSE CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending a RIGHT TRIGGER release event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_RELEASE_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_RIGHTSHOULDER2))) END_SCALEFORM_MOVIE_METHOD() ENDIF IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL,INPUT_FRONTEND_LT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_LT) bLeftShoulder2 = FALSE CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending a LEFT TRIGGER release event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_RELEASE_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_LEFTSHOULDER2))) END_SCALEFORM_MOVIE_METHOD() ENDIF IF NOT IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_UP) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) IF bDPadUp = FALSE bDPadUp = TRUE CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending a UP input event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_UP))) END_SCALEFORM_MOVIE_METHOD() ENDIF ELSE bDPadUp = FALSE ENDIF IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_DOWN) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) IF bDPadDown = FALSE bDPadDown = TRUE CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending a DOWN input event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_DOWN))) END_SCALEFORM_MOVIE_METHOD() ENDIF ELSE bDPadDown = FALSE ENDIF IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_LEFT) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT) IF bDPadLeft = FALSE bDPadLeft = TRUE CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending a LEFT input event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_LEFT))) END_SCALEFORM_MOVIE_METHOD() ENDIF ELSE bDPadLeft = FALSE ENDIF IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_RIGHT) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT) IF bDPadRight = FALSE bDPadRight = TRUE CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending a RIGHT input event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_RIGHT))) END_SCALEFORM_MOVIE_METHOD() ENDIF ELSE bDPadRight = FALSE ENDIF ELSE IF IS_CONTROL_RELEASED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) OR IS_DISABLED_CONTROL_RELEASED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) IF bMouseAccept = TRUE bMouseAccept = FALSE CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending a INPUT_CURSOR_ACCEPT input event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_RELEASE_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(INPUT_CURSOR_ACCEPT))) END_SCALEFORM_MOVIE_METHOD() ENDIF ELSE bMouseAccept = TRUE ENDIF ENDIF IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_SELECT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_SELECT) IF bPadSelect = FALSE bPadSelect = TRUE //CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(movin,"SET_INPUT_EVENT",TO_FLOAT(ENUM_TO_INT(SELECT))) CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending a SELECT input event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_SELECT))) END_SCALEFORM_MOVIE_METHOD() ENDIF ELSE bPadSelect = FALSE ENDIF ENDIF BAWSAQ_COMPANIES coindex FLOAT fBalance = TO_FLOAT(g_BankAccounts[bttarget].iBalance) IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) OR (IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_ACCEPT) AND NOT IS_WARNING_MESSAGE_ACTIVE()) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) OR (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_ACCEPT) AND NOT IS_WARNING_MESSAGE_ACTIVE()) IF bPadCross = FALSE bPadCross = TRUE IF bTVOn CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Website click IGNORED as video is playing back.") EXIT ENDIF // Don't process the accept if the keyboard is up and you're using keyboard and mouse. IF GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_KEYBOARD_FLAG_INDEX) !=0 IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Website keyboard frontend accept IGNORED as keyboard is up") EXIT ENDIF ENDIF ENDIF //CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(movin,"SET_INPUT_EVENT",TO_FLOAT(ENUM_TO_INT(CROSS))) CDEBUG3LN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: App internet sending an ACCEPT input event to scaleform on frame ", GET_FRAME_COUNT()) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_CROSS))) ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_LEFT_CLICK))) ENDIF END_SCALEFORM_MOVIE_METHOD() IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(movin, "GET_CURRENT_SELECTION") fudp = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Appinternet waiting for site response on getting current selection...") WHILE NOT IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(fudp) BROWSER_CURSOR_LOADING(FALSE) IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE fudret = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(fudp) INT i = fudret g_bLastSelectedWebIndexInvalid = TRUE IF i > -1 g_bLastSelectedWebIndexInvalid = FALSE g_iLastSelectedWebIndex = i bClickDetector = TRUE IF EmailState = eCOMPOSING OR EmailState = eNEUTRAL_BROWSING OR EmailState = eSTATUS_UPDATE b_EmailClickDetected = TRUE ENDIF CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Valid web entity index on click detected [i = ", i, "]") // ELSE // thats where GET_CURRENT_SELECTION == -2 will come in handy... // that means you're on the toolbar. Then you call // GET_CURRENT_OBJECT_TYPE and if it's 2 its the toolbar back button ENDIF CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Browser on button click GET_CURRENT_SELECTION returned: ", i) IF g_eWebSiteIndexFeedback = WWW_DYNASTY8REALESTATE_COM AND g_iWebPageIndexFeedback = 2 IF i > -1 AND i < COUNT_OF(g_iPropertyIDStoredInWebSlot) CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Updating last clicked property to ", i) iLastClickedPropertyIndex = g_iPropertyIDStoredInWebSlot[i] ENDIF ENDIF // Colour selection for the Legendary Motorsport and Southern San Andreas Super Autos! IF bColourPickingMode IF !g_bLastSelectedWebIndexInvalid IF eStaticCurrentSite = WWW_LEGENDARYMOTORSPORT_NET OR eStaticCurrentSite = WWW_ELITASTRAVEL_COM OR eStaticCurrentSite = WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM OR eStaticCurrentSite = WWW_DOCKTEASE_COM OR eStaticCurrentSite = WWW_PANDMCYCLES_COM OR eStaticCurrentSite = WWW_SOUTHERNSANANDREASSUPERAUTOS_COM OR eStaticCurrentSite = WWW_BENNYSORIGINALMOTORWORKS_COM OR eStaticCurrentSite = WWW_ARENAWAR_TV SITE_BUYABLE_VEHICLE sbv = GET_VEHICLE_FROM_SITE_AND_PAGE_ID(eStaticCurrentSite, iStaticCurrentPage) #IF NOT IS_NEXTGEN_BUILD UNUSED_PARAMETER(sbv) #ENDIF IF IS_INDEX_VALID_FOR_VEH_COLOUR(eStaticCurrentSite, g_iLastSelectedWebIndex) BOOL bBuyNow IF sbv = BV_NG_MARSHALL PICK_VEHICLE_COUNTRY_FROM_BUTTON_INT(g_iLastSelectedWebIndex, bBuyNow) ELIF IS_SBV_A_VEHICLE_WITH_ARMOUR_OPTION(sbv) PICK_VEHICLE_COLOUR_AND_ARMOUR_FROM_BUTTON_INT(eStaticCurrentSite, g_iLastSelectedWebIndex, bBuyNow) ELIF (sbv = BV_DLC_BIG_YACHT) // PICK_YACHT_MOD_FROM_BUTTON_INT(g_iLastSelectedWebIndex, iStaticCurrentPage, bBuyNow) IF iStaticCurrentPage = 24 AND g_iLastSelectedWebIndex = 0 TEXT_LABEL_63 tl63YachtName = "" IF IS_STRING_NULL_OR_EMPTY(g_sYachtDataStruct.tl63NewName) tl63YachtName = g_sYachtDataStruct.tl63Name CPRINTLN(DEBUG_INTERNET, " start keyboard tl63Name \"", tl63YachtName, "\" (tl63NewName:null)...") ELSE tl63YachtName = g_sYachtDataStruct.tl63NewName CPRINTLN(DEBUG_INTERNET, " start keyboard tl63NewName \"", tl63YachtName, "\" (tl63Name:\"", g_sYachtDataStruct.tl63Name, "\")...") ENDIF RUN_OSK_FOR_YACHT(tl63YachtName) g_sYachtDataStruct.tl63NewName = GET_ONSCREEN_KEYBOARD_RESULT() TEXT_LABEL_63 tl63YachtNameFromStat = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_YACHT_NAME, MP_STAT_YACHT_NAME2) // Player doesn't own yacht IF GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_YACHT_MODEL_0) = 0 g_sYachtDataStruct.iYachtNameID = 0 CPRINTLN(DEBUG_INTERNET, "[KR_DEBUG] yacht not purchased, id = ", g_sYachtDataStruct.iYachtNameID) // Player already has this name ELIF GET_HASH_KEY(g_sYachtDataStruct.tl63NewName) = GET_HASH_KEY(tl63YachtNameFromStat) g_sYachtDataStruct.iYachtNameID = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_NAME_ID) CPRINTLN(DEBUG_INTERNET, "[KR_DEBUG] player already has this name, id = ", g_sYachtDataStruct.iYachtNameID) // Stats are out of sync! // ELIF GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_YACHT_NAME_ID) != GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_NAME_ID) // g_sYachtDataStruct.iYachtNameID = 0 // CPRINTLN(DEBUG_INTERNET, "[KR_DEBUG] yacht stats out of sync, id = ", g_sYachtDataStruct.iYachtNameID, ", packed=", GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_NAME_ID), ", profile=", GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_YACHT_NAME_ID)) // Change id ELIF GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_YACHT_NAME_ID) != 1 g_sYachtDataStruct.iYachtNameID = 1 CPRINTLN(DEBUG_INTERNET, "[KR_DEBUG] changing name, id = ", g_sYachtDataStruct.iYachtNameID) ELIF GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_YACHT_NAME_ID) != 2 g_sYachtDataStruct.iYachtNameID = 2 CPRINTLN(DEBUG_INTERNET, "[KR_DEBUG] changing name, id = ", g_sYachtDataStruct.iYachtNameID) ELSE CPRINTLN(DEBUG_INTERNET, "[KR_DEBUG] missing case, id = ", g_sYachtDataStruct.iYachtNameID) ENDIF SCALEFORM_MOVIE_METHOD_ADD_YACHT_DATA(mov, 18, IS_BIG_ASS_VEHICLE_BS_SET(GET_BIGASS_VEHICLE_INDICE_BIT_FROM_ENUM(BV_DLC_BIG_YACHT)), g_sYachtDataStruct, GET_BUYABLE_VEHICLE_PRICE_MP(eStaticCurrentSite, sbv, FALSE), "KEYBOARD") CPRINTLN(DEBUG_INTERNET, " ...end keyboard \"", g_sYachtDataStruct.tl63Name, "\" -> \"", g_sYachtDataStruct.tl63NewName, "\"") // g_sYachtDataStruct.tl63Name = g_sYachtDataStruct.tl63NewName KeyBoardData.eStatus = OSK_PENDING KeyBoardData.iCurrentstatus = OSK_STAGE_SET_UP KeyBoardData.iProfanityToken = 0 ENDIF ELIF sbv = BV_BB_BLIMP3 PICK_VEHICLE_LIVERY_FROM_BUTTON_INT(sbv, g_iLastSelectedWebIndex, bBuyNow) ELIF sbv = BV_BB_PBUS2 PICK_VEHICLE_LIVERY_FROM_BUTTON_INT(sbv, g_iLastSelectedWebIndex, bBuyNow) ELSE PICK_VEHICLE_COLOUR_FROM_BUTTON_INT(sbv, eStaticCurrentSite, g_iLastSelectedWebIndex, bBuyNow) ENDIF CPRINTLN(DEBUG_INTERNET, " colour selected for \"", GET_LABEL_BUYABLE_VEHICLE(sbv), "\" as ", GET_STRING_FROM_SITE_BUYABLE_VEHICLE_COLOURS(sbv, g_eLastBuyableVehicleColourSelected), " [g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ", armour:", GET_STRING_FROM_BOOL(g_bLastBuyableVehicleArmourSelected), ", bBuyNow:", GET_STRING_FROM_BOOL(bBuyNow), "].") ELSE CPRINTLN(DEBUG_INTERNET, " colour selected for \"", GET_LABEL_BUYABLE_VEHICLE(sbv), "\" not a valid ID [\"", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), "\", g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, "].") ENDIF ELIF eStaticCurrentSite = WWW_DYNASTY8REALESTATE_COM IF (g_iLastSelectedWebIndex = 11) iCustomAptVariant = 1 bCustomInteriorSelected = TRUE ELIF (g_iLastSelectedWebIndex = 12) iCustomAptVariant = 2 bCustomInteriorSelected = TRUE ELIF (g_iLastSelectedWebIndex = 13) iCustomAptVariant = 3 bCustomInteriorSelected = TRUE ELIF (g_iLastSelectedWebIndex = 14) iCustomAptVariant = 4 bCustomInteriorSelected = TRUE ELIF (g_iLastSelectedWebIndex = 15) iCustomAptVariant = 5 bCustomInteriorSelected = TRUE ELIF (g_iLastSelectedWebIndex = 16) iCustomAptVariant = 6 bCustomInteriorSelected = TRUE ELIF (g_iLastSelectedWebIndex = 17) iCustomAptVariant = 7 bCustomInteriorSelected = TRUE ELIF (g_iLastSelectedWebIndex = 18) iCustomAptVariant = 8 bCustomInteriorSelected = TRUE ENDIF #IF IS_DEBUG_BUILD TEXT_LABEL_15 tlLastClickedPropertyName = GET_PROPERTY_NAME(iLastClickedPropertyIndex) #ENDIF CPRINTLN(DEBUG_INTERNET, " colour selected for ", tlLastClickedPropertyName, " - ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), ", g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ", iCustomAptVariant:", iCustomAptVariant) ELIF eStaticCurrentSite = WWW_DYNASTY8EXECUTIVEREALTY_COM IF iStaticCurrentPage = 5 //#2786374 AND g_iLastSelectedWebIndex = 7 //#2786374 bRunningOrgNameKeyboard = TRUE BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) END_SCALEFORM_MOVIE_METHOD() BROWSER_CURSOR_LOADING(FALSE) ENDIF ELIF eStaticCurrentSite = FORECLOSURES_MAZE_D_BANK_COM IF iStaticCurrentPage = 5 //#2786374 AND g_iLastSelectedWebIndex = 7 //#2786374 bRunningOrgNameKeyboard = TRUE BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) END_SCALEFORM_MOVIE_METHOD() BROWSER_CURSOR_LOADING(FALSE) ENDIF ELSE CPRINTLN(DEBUG_INTERNET, " colour selection ignored for web index ", GET_WEBSITE_FROM_INDEX(eStaticLastSite), ".") ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, " colour picking mode turned off.") ENDIF BOOL BSinput = FALSE //g_iWebPageIndexFeedback = pageID //g_eWebSiteIndexFeedback = siteID SWITCH g_eWebSiteIndexFeedback CASE WWW_BAWSAQ_COM BSinput = TRUE BREAK CASE WWW_EPSILONPROGRAM_COM HANDLE_EPSILON_SELECT(i) MARK_ROBE_PAGE_VISITED() BREAK CASE WWW_LCN_D_EXCHANGE_COM BSinput = TRUE BREAK CASE WWW_LEGENDARYMOTORSPORT_NET CASE WWW_ELITASTRAVEL_COM CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM CASE WWW_DOCKTEASE_COM CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_BENNYSORIGINALMOTORWORKS_COM CASE WWW_ARENAWAR_TV IF g_iWebPageIndexFeedback = 15 IF g_iLastSelectedWebIndex = 2 // Confirm yes button IF NOT confCheck AND g_eWebSiteIndexFeedback = WWW_BENNYSORIGINALMOTORWORKS_COM // CWARNINGLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: bypass!! g_eWebSiteIndexFeedback:", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback), ", g_iWebPageIndexFeedback:", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ", confCheck:", GET_STRING_FROM_BOOL(confCheck)) ELIF NOT confCheck AND g_eWebSiteIndexFeedback = WWW_ARENAWAR_TV // CWARNINGLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: bypass!! g_eWebSiteIndexFeedback:", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback), ", g_iWebPageIndexFeedback:", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ", confCheck:", GET_STRING_FROM_BOOL(confCheck)) ELSE INT iAltVersion iAltVersion = -1 IF IS_SBV_AN_ALTERNATE_VEHICLE(confSbv, g_eWebSiteIndexFeedback, g_eLastBuyableVehicleColourSelected) iAltVersion = 1 ENDIF CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: g_eWebSiteIndexFeedback:", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback), ", g_iWebPageIndexFeedback:", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ", confCheck:", GET_STRING_FROM_BOOL(confCheck)) DO_MP_VEHICLE_BUY(g_eWebSiteIndexFeedback, iAltVersion) ENDIF ELIF g_iLastSelectedWebIndex = 3 // Confirm no button //DO_VEHICLE_FAIL_PAGE(g_eWebSiteIndexFeedback,VSFR_CANCELED) confCheck = FALSE ENDIF ENDIF BREAK ENDSWITCH IF BSinput FLOAT fCurrentLoggedPrice SWITCH g_iWebPageIndexFeedback CASE 6 // buy IF g_iLastSelectedWebIndex = 21 AND (i != -1)//plus g_iSharesToBuySell++ g_bForceBrowserRefresh = TRUE CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Increased shares selected on buy page : this increments g_iSharesToBuySell to ", g_iSharesToBuySell) bSelectionHoldActionDetector = TRUE bSelectionHoldActionPolarity = TRUE iSelectionHoldActionRateTracker = 0 ELSE IF g_iLastSelectedWebIndex = 22 AND (i != -1)//minus g_iSharesToBuySell-- g_bForceBrowserRefresh = TRUE CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Reduce shares selected on buy page : this decrements g_iSharesToBuySell to ", g_iSharesToBuySell) bSelectionHoldActionDetector = TRUE bSelectionHoldActionPolarity = FALSE iSelectionHoldActionRateTracker = 0 ENDIF ENDIF BREAK CASE 7 // sell IF g_iLastSelectedWebIndex = 21 AND (i != -1)//plus g_iSharesToBuySell++ g_bForceBrowserRefresh = TRUE CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Increased shares selected on sell page : this increments g_iSharesToBuySell to ", g_iSharesToBuySell) bSelectionHoldActionDetector = TRUE bSelectionHoldActionPolarity = TRUE iSelectionHoldActionRateTracker = 0 ELSE IF g_iLastSelectedWebIndex = 22 AND (i != -1)//minus g_iSharesToBuySell-- g_bForceBrowserRefresh = TRUE CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Reduce shares selected on sell page : this decrements g_iSharesToBuySell to ", g_iSharesToBuySell) bSelectionHoldActionDetector = TRUE bSelectionHoldActionPolarity = FALSE iSelectionHoldActionRateTracker= 0 ENDIF ENDIF IF g_iLastSelectedWebIndex = 30 // Sell all of this attempt CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Attempted to fire sell all.") CDEBUG1LN(DEBUG_STOCKS, "Calculating buy/sell value for shares on website...") g_iSharesToBuySell = GET_OWNED_TOTAL_FROM_PORTFOLIO(ENUM_TO_INT(bttarget),g_iStockSelectedPortfolioIndex) CDEBUG1LN(DEBUG_STOCKS, "The player owns ", g_iSharesToBuySell, " shares of company ", ENUM_TO_INT(bttarget), ".") IF g_iSharesToBuySell > 0 coindex = GET_COMPANY_INDEX_FROM_PORTFOLIO(ENUM_TO_INT(bttarget),g_iStockSelectedPortfolioIndex) fCurrentLoggedPrice = GET_CURRENT_STOCK_PRICE(ENUM_TO_INT(coindex)) g_fShareTotal = g_iSharesToBuySell*fCurrentLoggedPrice CDEBUG1LN(DEBUG_STOCKS, "Total value of shares is $", g_fShareTotal, ".") // Check cap the share total if needed. IF (fBalance + g_fShareTotal) > 2147483647.0 g_iSharesToBuySell = FLOOR((2147483647.0-fBalance)/fCurrentLoggedPrice) g_fShareTotal = g_iSharesToBuySell*fCurrentLoggedPrice CDEBUG1LN(DEBUG_STOCKS, "Capping shares sold to stop bank account overruning. Shares to sell now ", g_iSharesToBuySell, " for total value of $", g_fShareTotal, ".") ENDIF g_fOriginalProfit = TO_FLOAT(GET_OWNED_TOTAL_FROM_PORTFOLIO(ENUM_TO_INT(bttarget),g_iStockSelectedPortfolioIndex)) // change this value to owned shares, and string to match g_fCurrentProfit = GET_INVESTED_TOTAL_FROM_PORTFOLIO(ENUM_TO_INT(bttarget),g_iStockSelectedPortfolioIndex) ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ELSE IF bSelectionHoldActionDetector BROWSER_SET_CURSOR_STATE("ARROW") ENDIF bSelectionHoldActionDetector = FALSE bPadCross = FALSE ENDIF // Fix for backspace on PC keyboard (frontend cancel) quitting the virtual keyboard // instead of deleting characters. Fixes B* 1860158 // Player can still use right mouse button to go back. //BOOL bDisableBackButtonForPCKeyboard = FALSE IF GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_KEYBOARD_FLAG_INDEX) != 0 IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) ENDIF ENDIF IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL) OR (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_CANCEL) AND NOT IS_WARNING_MESSAGE_ACTIVE()) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL) OR (IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_CANCEL) AND NOT IS_WARNING_MESSAGE_ACTIVE()) IF bPadCircle = FALSE bPadCircle = TRUE IF bRunningOrgNameKeyboard CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Backstep overriden KeyBoardData.iCurrentstatus = ", KeyBoardData.iCurrentstatus, " store trigger ", g_bBrowserGoToStoreTrigger) ELIF g_iPendingBrowserTimer != -1 OR ChildInitStage != 3 CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: Backstep overriden t = ",g_iPendingBrowserTimer, " stage = ", ChildInitStage, " store trigger ", g_bBrowserGoToStoreTrigger) //bflag = 1//deny backbutton when a change is pending ELSE INT bflag = GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_BACKBUTTON_FLAG_INDEX) CPRINTLN(DEBUG_INTERNET, "PASS_INPUTS_TO_BROWSER: GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_BACKBUTTON_FLAG_INDEX) returned : " , bflag) IF bFlag = 1 IF NOT BACK_BUTTON_INTERCEPT(g_eWebSiteIndexFeedback, movin) BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_TRIANGLE))) END_SCALEFORM_MOVIE_METHOD() CPRINTLN(DEBUG_INTERNET, " Executing browser default back step...Resetting emailstate to dormant also!") IF EmailState > eDORMANT //Critical! CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: Was using Eyefind Inbox.") FORCE_CLOSE_BROWSER() ENDIF IF g_BrowserStartState != SBSS_CashMachineFinance BEGIN_SCALEFORM_MOVIE_METHOD(movin, "GO_BACK") //GO_FORWARD END_SCALEFORM_MOVIE_METHOD() PLAY_SOUND_FRONTEND(-1, "CLICK_BACK","WEB_NAVIGATION_SOUNDS_PHONE") ELSE CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: g_BrowserStartState = SBSS_CashMachineFinance") FORCE_CLOSE_BROWSER() ENDIF IF g_eLastBuyableVehicleColourSelected != BCV_NO_COLOUR CPRINTLN(DEBUG_INTERNET, " updating last picked vehicle colour from ", g_eLastBuyableVehicleColourSelected, " to BCV_NO_COLOUR.") g_eLastBuyableVehicleColourSelected = BCV_NO_COLOUR ENDIF IF g_bLastBuyableVehicleArmourSelected != FALSE CPRINTLN(DEBUG_INTERNET, " updating last picked vehicle armour from ", GET_STRING_FROM_BOOL(g_bLastBuyableVehicleArmourSelected), " to FALSE.") g_bLastBuyableVehicleArmourSelected = FALSE ENDIF IF !(GET_GAME_TIMER() > g_iTimeLastBrowserRefresh + WEB_BROWSER_PAGE_REFRESH_RATE) CPRINTLN(DEBUG_INTERNET, " set the time last browser refresh to now.") g_iTimeLastBrowserRefresh = GET_GAME_TIMER() ENDIF // IF NOT IS_STRING_NULL_OR_EMPTY(g_sBrowserHelpMessage.tl15Tag) // AND IS_THIS_BROWSER_HELP_MESSAGE_BEING_DISPLAYED(g_sBrowserHelpMessage) CPRINTLN(DEBUG_INTERNET, " - remove ", g_sBrowserHelpMessage.tl15Tag, ", cancel pressed") CLEAR_HELP() CLEAR_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT() // ENDIF ENDIF ELSE CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: Backbutton press with SCALEFORM_BACKBUTTON_FLAG_INDEX set!") FORCE_CLOSE_BROWSER() ENDIF ENDIF ENDIF // Shut down TV playback IF bTVOn CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: turn off TV") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SUPRESS_HISTORY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) END_SCALEFORM_MOVIE_METHOD() SET_TV_CHANNEL(TVCHANNELTYPE_CHANNEL_NONE) STOP_AUDIO_SCENE("INTERNET_BROWSER_VIDEO_SCENE") bTVOn = FALSE iTVOnTimeoutFrameCount = -1 ENDIF ELSE bPadCircle = FALSE ENDIF IF NOT IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) AND (IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y)) IF bPadTriangle = FALSE AND bTexitSeenUp bPadTriangle = TRUE BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_CIRCLE))) END_SCALEFORM_MOVIE_METHOD() IF g_BrowserStartState != SBSS_CashMachineFinance CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: g_BrowserStartState = SBSS_CashMachineFinance") FORCE_CLOSE_BROWSER() ENDIF ENDIF ELSE bPadTriangle = FALSE bTexitSeenUp = TRUE ENDIF INT iGLOBAL_ACTIONSCRIPT_FLAG_BROWSER_CLOSE = GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_BROWSER_CLOSE) IF iGLOBAL_ACTIONSCRIPT_FLAG_BROWSER_CLOSE != 0 IF HAS_SCALEFORM_MOVIE_LOADED(movin) CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_BROWSER_CLOSE) = ", iGLOBAL_ACTIONSCRIPT_FLAG_BROWSER_CLOSE) FORCE_CLOSE_BROWSER() ELSE CPRINTLN(DEBUG_INTERNET, " don't force close browset, scaleform movie not loaded: GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_BROWSER_CLOSE) = ", iGLOBAL_ACTIONSCRIPT_FLAG_BROWSER_CLOSE) ENDIF ENDIF IF NOT bRunningOrgNameKeyboard BROWSER_CURSOR_LOADING(TRUE) ENDIF ENDPROC /// PURPOSE: /// loads the text slot required for the eyefind news stories to display PROC LOAD_EYEFIND_TEXT_SLOT() // We must make sure the internet's text slot is loaded before progressing IF ARE_STRINGS_EQUAL(tl23RequestedInternetTextBlock, "") CLEAR_ADDITIONAL_TEXT(SHOP_TEXT_SLOT, TRUE) tl23RequestedInternetTextBlock = GET_EYEFIND_REQUIRED_TEXT_BLOCK() // set initial value shared by EyeFind News and LifeInvader //RENDER_BROWSER() //WAIT(0) // need frame as HAS_ADDITIONAL_TEXT_LOADED will return true even if CLEAR_ADDITIONAL_TEXT was called CPRINTLN(DEBUG_INTERNET, " LOAD_EYEFIND_TEXT_SLOT() : set initial tl23RequestedInternetTextBlock = ", tl23RequestedInternetTextBlock) ELIF NOT ARE_STRINGS_EQUAL(tl23RequestedInternetTextBlock, GET_EYEFIND_REQUIRED_TEXT_BLOCK()) CLEAR_ADDITIONAL_TEXT(SHOP_TEXT_SLOT, TRUE) tl23RequestedInternetTextBlock = GET_EYEFIND_REQUIRED_TEXT_BLOCK() // set the text block to be requested for Eyefind News //RENDER_BROWSER() //WAIT(0) // need frame as HAS_ADDITIONAL_TEXT_LOADED will return true even if CLEAR_ADDITIONAL_TEXT was called CPRINTLN(DEBUG_INTERNET, " LOAD_EYEFIND_TEXT_SLOT() : updated tl23RequestedInternetTextBlock = ", tl23RequestedInternetTextBlock) ENDIF // using bIsInternetTextSupported as return value for REQUEST_ADDITIONAL_TEXT commented out for now incase it's needed again at a later date //IF REQUEST_ADDITIONAL_TEXT(tl23RequestedInternetTextBlock, SHOP_TEXT_SLOT) // ensure the current text block has been requested before checking HAS_ADDITIONAL_TEXT_LOADED REQUEST_ADDITIONAL_TEXT(tl23RequestedInternetTextBlock, SHOP_TEXT_SLOT) // ensure the current text block has been requested before checking HAS_ADDITIONAL_TEXT_LOADED bIsInternetTextSupported = TRUE CPRINTLN(DEBUG_INTERNET, " LOAD_EYEFIND_TEXT_SLOT() : requested tl23RequestedInternetTextBlock = ", tl23RequestedInternetTextBlock) IF DOES_TEXT_BLOCK_EXIST(tl23RequestedInternetTextBlock) WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(SHOP_TEXT_SLOT) RENDER_BROWSER() CPRINTLN(DEBUG_INTERNET, " LOAD_EYEFIND_TEXT_SLOT() : Waiting for eyefind text slot to load for tl23RequestedInternetTextBlock = ", tl23RequestedInternetTextBlock) WAIT(0) ENDWHILE CPRINTLN(DEBUG_INTERNET, " LOAD_EYEFIND_TEXT_SLOT() : eyefind text slot loaded with tl23RequestedInternetTextBlock = ", tl23RequestedInternetTextBlock) ENDIF //ELSE // bIsInternetTextSupported = FALSE // CPRINTLN(DEBUG_INTERNET, " LOAD_EYEFIND_TEXT_SLOT() : eyefind text slot not loaded bIsInternetTextSupported failed !") //ENDIF ENDPROC #IF IS_DEBUG_BUILD BOOL bDebugRaiseKey = FALSE BOOL bDebugCrashKey = FALSE #ENDIF PROC STOCK_SYSTEM_CHECK(BOOL bDoStockFunctionality) IF bDoStockFunctionality IF !g_bInMultiplayer IF (NOT g_savedGlobals.sFinanceData.bFirstTimeTutorialSeen) AND (NOT g_bBAWSAQWebTutorialInProgress) CPRINTLN(DEBUG_INTERNET, "Stock system tutorial activated") //g_bBAWSAQWebTutorialInProgress = TRUE //g_bBrowserUserMode = FALSE//take player control //g_savedGlobals.sFinanceData.bFirstTimeTutorialSeen = TRUE IF g_savedGlobals.sFinanceData.bBrowserTutorialSeen IF NOT g_savedGlobals.sFinanceData.bFirstTimeTutorialSeen ADD_HELP_TO_FLOW_QUEUE("BS_TUT_1", FHP_HIGH, 0, 1000) g_savedGlobals.sFinanceData.bFirstTimeTutorialSeen = TRUE ENDIF ENDIF ENDIF ENDIF //check for buy or sell situation IF iPageIDCheck = 8//transaction confirmation page //transaction type IF iPageIDLast = 6 // buy CPRINTLN(DEBUG_INTERNET, "Buy primed") g_bBuySell = TRUE ENDIF IF iPageIDLast = 7 //sell CPRINTLN(DEBUG_INTERNET, "Sell primed") g_bBuySell = FALSE ENDIF ENDIF IF iPageIDCheck = 9//Transaction complete page IF iPageIDLast = 8 //coming from the confirm page //carry out the transaction IF g_bBuySell CPRINTLN(DEBUG_INTERNET, "Attempting buy stock: index ",g_iStockSelectionFocus," number ",g_iSharesToBuySell) BAWSAQ_TRADERS bttarget enumBankAccountName batarget SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_MICHAEL bttarget = BS_TR_MIKE batarget = BANK_ACCOUNT_MICHAEL BREAK CASE CHAR_TREVOR bttarget = BS_TR_TREVOR batarget = BANK_ACCOUNT_TREVOR BREAK CASE CHAR_FRANKLIN bttarget = BS_TR_FRANKLIN batarget = BANK_ACCOUNT_FRANKLIN BREAK ENDSWITCH //find the correct selection focus from market mode /* INT targetselection = g_iStockSelectionFocus INT selectedindex = 0 INT i = 0 CPRINTLN(DEBUG_INTERNET, "Stock selection is: ") PRINTINT(g_iStockSelectionFocus) PRINTNL() WHILE (NOT (i = targetselection)) //FIND CORRECT SELECTED INDEX IF g_bOnlineMarket = g_BS_Listings[i].bOnlineStock //only count entries that have the same online status ++i ENDIF ++selectedindex ENDWHILE */ CPRINTLN(DEBUG_INTERNET, "Stock selection is: ", g_iStockSelectionFocus) IF g_iSharesToBuySell >= 0 BUY_STOCKS(batarget, bttarget,INT_TO_ENUM(BAWSAQ_COMPANIES, g_iStockSelectionFocus), g_iSharesToBuySell, g_fShareTotal) ELSE CASSERTLN(DEBUG_INTERNET, "Cannot buy zero shares! Button should have been greyed out") ENDIF ELSE CPRINTLN(DEBUG_INTERNET, "Attempting sell stock: index ", g_iStockSelectionFocus) BAWSAQ_TRADERS bttarget enumBankAccountName batarget SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_MICHAEL bttarget = BS_TR_MIKE batarget = BANK_ACCOUNT_MICHAEL BREAK CASE CHAR_TREVOR bttarget = BS_TR_TREVOR batarget = BANK_ACCOUNT_TREVOR BREAK CASE CHAR_FRANKLIN bttarget = BS_TR_FRANKLIN batarget = BANK_ACCOUNT_FRANKLIN BREAK ENDSWITCH IF g_iSharesToBuySell > 0 SELL_STOCKS(batarget, bttarget, INT_TO_ENUM(BAWSAQ_COMPANIES, g_iStockSelectionFocus), g_iSharesToBuySell, g_fShareTotal) ELSE CASSERTLN(DEBUG_INTERNET, "Cannot sell zero shares! Button should have been greyed out.") ENDIF ENDIF ELIF iPageIDLast = 16 // Coming from the sell all page, oh snap. g_iStockSelectionFocus = -2 // Purge all owned stocks. BAWSAQ_TRADERS bttarget enumBankAccountName batarget SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_MICHAEL bttarget = BS_TR_MIKE batarget = BANK_ACCOUNT_MICHAEL BREAK CASE CHAR_TREVOR bttarget = BS_TR_TREVOR batarget = BANK_ACCOUNT_TREVOR BREAK CASE CHAR_FRANKLIN bttarget = BS_TR_FRANKLIN batarget = BANK_ACCOUNT_FRANKLIN BREAK ENDSWITCH SELL_ALL_STOCKS(batarget, bttarget) ENDIF ENDIF // Reset of selection data IF iPageIDLast = 4 //coming from 44 // is currently on buy amount selection IF iPageIDCheck = 6 OR iPageIDCheck = 7 g_iSharesToBuySell = 0 CPRINTLN(DEBUG_INTERNET, "g_iSharesToBuySell zeroed by appInternet") ENDIF ENDIF IF iPageIDCheck = 4 // entering 44 IF iPageIDLast = 3 OR iPageIDLast = 2 //coming from the listing pages, so a new listing will need to be set g_iStockSelectionFocus = -1//unset the selection ENDIF ENDIF ENDIF ENDPROC //---------------------- // Epsilon Presentation //---------------------- BOOL epsConvLoaded TEXT_LABEL epsBlock PROC START_EPSILON_PRESENTATION() CPRINTLN(DEBUG_INTERNET, "EPSILON: Attempting to start presentation!") ADD_PED_FOR_DIALOGUE(spfc,0,NULL,"CRIS") epsConvLoaded = FALSE epsBlock = "EPSW_VOICE1" ENDPROC PROC UPDATE_EPSILON_PRESENTATION() IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND g_iEpsilonTutorialStage != -1 IF NOT epsConvLoaded IF CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC(spfc, "EPSWAUD", epsBlock, CONV_PRIORITY_VERY_HIGH, DISPLAY_SUBTITLES, DO_NOT_ADD_TO_BRIEF_SCREEN) CPRINTLN(DEBUG_INTERNET, "EPSILON: Created conversation for stage ", g_iEpsilonTutorialStage) epsConvLoaded = TRUE ENDIF ELSE epsConvLoaded = FALSE ++g_iEpsilonTutorialStage SWITCH g_iEpsilonTutorialStage CASE 2 epsBlock = "EPSW_VOICE2" BREAK CASE 3 epsBlock = "EPSW_VOICE3" BREAK CASE 4 epsBlock = "EPSW_VOICE4" BREAK CASE 5 epsBlock = "EPSW_VOICE5" BREAK CASE 6 BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PROXY_FUNCTION") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(6) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(g_iEpsilonTutorialStage) END_SCALEFORM_MOVIE_METHOD() g_iEpsilonTutorialStage = -1 BREAK DEFAULT g_iEpsilonTutorialStage = -1 BREAK ENDSWITCH ENDIF ENDIF ENDPROC PROC DO_WEBSITE_ANALYTICS_HASH_SET() CPRINTLN(DEBUG_INTERNET, "DO_WEBSITE_ANALYTICS_HASH_SET: triggered") BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_WEBSITE") SCALEFORM_RETURN_INDEX retindex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() CPRINTLN(DEBUG_INTERNET, "Appinternet waiting for site response to PLAYSTATS_WEBSITE_VISITED call...") WHILE NOT IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(retindex) BROWSER_CURSOR_LOADING(FALSE) IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE STRING strret = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_STRING(retindex) INT key = GET_HASH_KEY(strret) PLAYSTATS_WEBSITE_VISITED(key, iCurrentSiteTimer) CPRINTLN(DEBUG_INTERNET, "Analytics website set : ", strret) lastSiteURL = strret //used internally for 1621761 IF ARE_STRINGS_EQUAL(strret, "WWW_MYDIVINEWITHIN_COM") AND NOT IS_BIT_SET(g_savedGlobals.sRandomChars.g_iWebsiteQueryBit, ENUM_TO_INT(RC_WEB_VISITED_COM_SITE)) SET_BIT(g_savedGlobals.sRandomChars.g_iWebsiteQueryBit, ENUM_TO_INT(RC_WEB_VISITED_COM_SITE)) WHILE NOT REGISTER_EMAIL_FROM_CHARACTER_TO_PLAYER(EMAIL_COTM_ADRIAN_1, CT_AMBIENT, BIT_FRANKLIN, CHAR_BLANK_ENTRY, 1000, 5000, DEFAULT, CID_BLANK) CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Sending initial email to Franklin...") WAIT(0) ENDWHILE CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Sent initial email to Franklin") ELIF ARE_STRINGS_EQUAL(strret, "WWW_THECHILDRENOFTHEMOUNTAIN_COM") BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(g_iChildrenOfTheMountainStatus) END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_TEXT") END_SCALEFORM_MOVIE_METHOD() CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Set SET_DATA_SLOT to ", g_iChildrenOfTheMountainStatus) ENDIF g_sLastLastSiteHash = g_sLastSiteHash g_sLastSiteHash = GET_HASH_KEY(strret) ENDPROC PROC DISABLE_VIDEO_PLAYBACK() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "DISABLE_VIDEO") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov,"UPDATE_TEXT") END_SCALEFORM_MOVIE_METHOD() bVideoDisabled = TRUE ENDPROC PROC SETUP_VIDEO_PLAYBACK( STRING sPlaylist ) IF bVideoDisabled = TRUE EXIT ENDIF SET_TV_CHANNEL_PLAYLIST(TVCHANNELTYPE_CHANNEL_1, sPlaylist, TRUE) SET_TV_AUDIO_FRONTEND(TRUE) SET_TV_VOLUME(-5.0) ENABLE_MOVIE_SUBTITLES(TRUE) SET_TV_CHANNEL(TVCHANNELTYPE_CHANNEL_1) SET_TEXT_RENDER_ID(GET_DEFAULT_SCRIPT_RENDERTARGET_RENDER_ID()) SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_AFTER_HUD) SET_SCRIPT_GFX_DRAW_BEHIND_PAUSEMENU(TRUE) DRAW_TV_CHANNEL(0.5,0.5,0.5,0.5,0.0,255,255,255,255) BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SUPRESS_HISTORY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) END_SCALEFORM_MOVIE_METHOD() START_AUDIO_SCENE("INTERNET_BROWSER_VIDEO_SCENE") iPadLeftX = 0 iPadLeftY = 0 BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(1.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(iPadLeftX)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(iPadLeftY)) END_SCALEFORM_MOVIE_METHOD() bTVOn = TRUE ENDPROC PROC DO_STATIC_SITE_CHECKS() INT iPage = GET_CURRENT_WEBPAGE_ID() // END_SCALEFORM_MOVIE_METHOD_INT() WEBSITE_INDEX_ENUM eSite = INT_TO_ENUM(WEBSITE_INDEX_ENUM, GET_CURRENT_WEBSITE_ID()) // fudret IF (eStaticCurrentSite = WWW_DYNASTY8REALESTATE_COM) AND (iStaticCurrentPage = 1 OR iStaticCurrentPage = 2 OR bPopulatePropertySitePinMap) AND g_bInMultiplayer IF g_bPropertyRefreshTrigger//g_bInMultiplayer AND //this is the property site map with pins POPULATE_MP_PROPERTY_SITE_PIN_MAP(mov) g_bPropertyRefreshTrigger = FALSE ENDIF ENDIF IF (eStaticCurrentSite = WWW_DYNASTY8EXECUTIVEREALTY_COM) AND (iStaticCurrentPage = 1 OR iStaticCurrentPage = 2 OR bPopulatePropertySitePinMap) AND g_bInMultiplayer IF g_bPropertyRefreshTrigger POPULATE_MP_EXEC_PROPERTY_SITE_PIN_MAP(mov) g_bPropertyRefreshTrigger = FALSE ENDIF ENDIF IF (eStaticCurrentSite = WWW_DYNASTY8EXECUTIVEREALTY_COM) AND iStaticCurrentPage = 2 AND g_bInMultiplayer PRINT_HELP_FOR_WEBSITE_DYNASTY_8_EXECUTIVE() ENDIF IF (eStaticCurrentSite = FORECLOSURES_MAZE_D_BANK_COM) AND (iStaticCurrentPage = 1 OR iStaticCurrentPage = 2 OR bPopulatePropertySitePinMap) AND g_bInMultiplayer IF g_bPropertyRefreshTrigger POPULATE_MP_BIKER_PROPERTY_SITE_PIN_MAP(mov) g_bPropertyRefreshTrigger = FALSE ENDIF ENDIF IF (eStaticCurrentSite = WWW_ARENAWAR_TV) AND (iStaticCurrentPage = 1 OR iStaticCurrentPage = 2 OR bPopulatePropertySitePinMap) AND g_bInMultiplayer IF g_bPropertyRefreshTrigger POPULATE_MP_ARENA_PROPERTY_SITE_PIN_MAP(mov) g_bPropertyRefreshTrigger = FALSE ENDIF ENDIF IF (eStaticCurrentSite = WWW_THEDIAMONDCASINOANDRESORT_COM) AND (iStaticCurrentPage = 1 OR iStaticCurrentPage = 2 OR iStaticCurrentPage = 8 OR iStaticCurrentPage = 9 OR bPopulatePropertySitePinMap) AND g_bInMultiplayer IF g_bPropertyRefreshTrigger POPULATE_MP_CASINO_PROPERTY_SITE_PIN_MAP(mov) g_bPropertyRefreshTrigger = FALSE ENDIF ENDIF bPopulatePropertySitePinMap = FALSE BOOL eitherChanged = FALSE IF iPage > 0 IF iStaticCurrentPage != iPage CPRINTLN(DEBUG_INTERNET, "DO_STATIC_SITE_CHECKS: iStaticCurrentPage != iPage, iStaticCurrentPage will now = ", iPage) eitherChanged = TRUE ENDIF iStaticCurrentPage = iPage g_bLastStaticSiteInvalid = FALSE ELSE g_bLastStaticSiteInvalid = TRUE ENDIF IF ENUM_TO_INT(eSite) > 0 IF eStaticCurrentSite != eSite CPRINTLN(DEBUG_INTERNET, "DO_STATIC_SITE_CHECKS: eStaticCurrentSite != eSite, eStaticCurrentSite will now = ", GET_WEBSITE_FROM_INDEX(eSite)) eitherChanged = TRUE ENDIF eStaticCurrentSite = eSite ELSE g_bLastStaticSiteInvalid = TRUE ENDIF IF g_eWebSiteIndexFeedback != eStaticCurrentSite iCurrentSiteTimer = 0 CPRINTLN(DEBUG_INTERNET, "Resetting site timer S") ENDIF g_iWebPageIndexFeedback = iStaticCurrentPage g_eWebSiteIndexFeedback = eStaticCurrentSite IF eitherChanged // Set these again - one of them changed, so set BOTH to the current website/webpage so they're consistent (was causing B*1576939) iStaticCurrentPage = iPage eStaticCurrentSite = eSite g_iWebPageIndexFeedback = iStaticCurrentPage g_eWebSiteIndexFeedback = eStaticCurrentSite CPRINTLN(DEBUG_INTERNET, "DO_STATIC_SITE_CHECKS: eStaticCurrentSite = ", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), ". iStaticCurrentPage = ", iStaticCurrentPage) DO_STATIC_SITE_CHANGE_TRIGGERS() ENDIF ENDPROC #IF IS_DEBUG_BUILD PROC CATALOGUE_MISSING_ENTRIES() IF NETWORK_IS_GAME_IN_PROGRESS() CPRINTLN(DEBUG_SHOPS, "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() - Rebuilding for vehicles(website) - COLOURS ONLY" ) SITE_BUYABLE_VEHICLE eSiteVeh VEHICLE_SETUP_STRUCT_MP sVSSMP VEHICLE_SETUP_STRUCT sVSSBlank ScriptCatalogItem sCatalogueData INT iNewEntriesCount = 0 // Loop through every site buyable vehicle and generate keys, adding any currently missing from the catalogue. REPEAT COUNT_OF( SITE_BUYABLE_VEHICLE ) eSiteVeh IF GET_MODEL_FOR_BUYABLE_VEHICLE( eSiteVeh ) != DUMMY_MODEL_FOR_SCRIPT CPRINTLN(DEBUG_SHOPS, "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() - Rebuilding vehicle(website) - eSiteVeh = ", GET_LABEL_BUYABLE_VEHICLE( eSiteVeh ) ) VEHICLE_INDEX vehTemp = NULL BOOL bAltVersion = FALSE // Loop through colours SITE_BUYABLE_VEHICLE_COLOURS eSiteVehColours FOR eSiteVehColours = BCV_NO_COLOUR TO BCV_WHITE_COLOUR PRINTLN( "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() Colour loop start, colour = ", eSiteVehColours ) // Configure the vehicle setup struct for this colour sVSSMP.VehicleSetup = sVSSBlank g_eLastBuyableVehicleColourSelected = eSiteVehColours CONFIGURE_STRUCT_FOR_BUYABLE_VEHICLE( eSiteVeh, sVSSMP, TRUE) // Verify model IF sVSSMP.VehicleSetup.eModel != DUMMY_MODEL_FOR_SCRIPT AND IS_MODEL_A_VEHICLE( sVSSMP.VehicleSetup.eModel ) // Create new vehicle IF NOT DOES_ENTITY_EXIST( vehTemp ) OR NOT IS_VEHICLE_DRIVEABLE( vehTemp ) IF DOES_ENTITY_EXIST( vehTemp ) DELETE_VEHICLE( vehTemp) PRINTLN( "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() Deleted undriveable vehicle" ) ENDIF PRINTLN( "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() Creating new vehicle - waiting for CREATE_AND_POPULATE_VEHICLE_DETAILS_FOR_MP_WEBSITE_VEHICLE_BUY...") WHILE NOT CREATE_AND_POPULATE_VEHICLE_DETAILS_FOR_MP_WEBSITE_VEHICLE_BUY( eSiteVeh, WWW_NOT_EXIST, sVSSMP, vehTemp, bAltVersion ) WAIT(0) ENDWHILE SET_MODEL_AS_NO_LONGER_NEEDED( sVSSMP.VehicleSetup.eModel ) // already have a working vehicle, update vehicle colours for this loop ELSE SET_VEHICLE_SETUP_MP( vehTemp, sVSSMP ) PRINTLN( "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() Updating vehicle colour" ) ENDIF IF DOES_ENTITY_EXIST( vehTemp ) AND IS_VEHICLE_DRIVEABLE( vehTemp ) PRINTLN( "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() Retrieving colour details = ", eSiteVehColours ) // Reset colour vars MOD_COLOR_TYPE eModColorType1 = MCT_NONE MOD_COLOR_TYPE eModColorType2 = MCT_NONE MOD_COLOR_TYPE eModColorTypeExtra1 = MCT_NONE TEXT_LABEL_15 sModCol1Name = "" TEXT_LABEL_15 sModCol2Name = "" TEXT_LABEL_15 sModCol1NameExtra = "" INT iCol1 = 0 INT iCol2 = 0 INT iCol3 = 0 INT iCol4 = 0 // Find colour details GET_VEH_MOD_COLOUR_DETAILS( vehTemp, eModColorType1, sModCol1Name, iCol1, eModColorType2, sModCol2Name, iCol2, eModColorTypeExtra1, sModCol1NameExtra, iCol3, iCol4 ) CPRINTLN(DEBUG_SHOPS, "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() sModCol1Name = ", sModCol1Name, " iCol1 = ", iCol1 ) CPRINTLN(DEBUG_SHOPS, "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() sModCol1Name = ", sModCol1NameExtra, " iCol3 = ", iCol3 ) CPRINTLN(DEBUG_SHOPS, "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() sModCol2Name = ", sModCol2Name, " iCol2 = ", iCol2 ) INT iPriceVariation = GET_VEHICLE_SHARED_MOD_PRICE_VARIATION_FOR_CATALOGUE( sVSSMP.VehicleSetup.eModel) // Generate catalogue entry for Color 1 GENERATE_KEY_FOR_SHOP_CATALOGUE(sCatalogueData.m_key, sModCol1Name, DUMMY_MODEL_FOR_SCRIPT, SHOP_TYPE_CARMOD, ENUM_TO_INT(CMT_RESPRAY_PRIMARY), iPriceVariation, 1, ENUM_TO_INT( eModColorType1 ) ) sCatalogueData.m_textTag = sModCol1Name sCatalogueData.m_category = CATEGORY_VEHICLE_MOD sCatalogueData.m_price = 1000 sCatalogueData.m_storagetype = NET_SHOP_ISTORAGE_INT sCatalogueData.m_statvalue = iCol1 sCatalogueData.m_bitsize = 0 sCatalogueData.m_stathash = ENUM_TO_INT(MPIntStatNamesArray[MP_STAT_MPSV_VEHICLE_BS_0][GET_SLOT_NUMBER(g_iPedComponentSlot)]) IF NOT NET_GAMESERVER_CATALOG_ITEM_IS_VALID(sCatalogueData.m_key) iNewEntriesCount++ ENDIF ADD_ITEM_TO_CATALOG_WITH_CHECK(sCatalogueData) // Generate catalogue entry for Color Extra 1 GENERATE_KEY_FOR_SHOP_CATALOGUE(sCatalogueData.m_key, sModCol1NameExtra, DUMMY_MODEL_FOR_SCRIPT, SHOP_TYPE_CARMOD, ENUM_TO_INT(CMT_RESPRAY_PRIMARY), iPriceVariation, 3, ENUM_TO_INT( eModColorTypeExtra1 ) ) sCatalogueData.m_textTag = sModCol1NameExtra sCatalogueData.m_category = CATEGORY_VEHICLE_MOD sCatalogueData.m_price = 1000 sCatalogueData.m_storagetype = NET_SHOP_ISTORAGE_INT sCatalogueData.m_statvalue = iCol3 sCatalogueData.m_bitsize = 0 sCatalogueData.m_stathash = ENUM_TO_INT(MPIntStatNamesArray[MP_STAT_MPSV_VEHICLE_BS_0][GET_SLOT_NUMBER(g_iPedComponentSlot)]) IF NOT NET_GAMESERVER_CATALOG_ITEM_IS_VALID(sCatalogueData.m_key) iNewEntriesCount++ ENDIF ADD_ITEM_TO_CATALOG_WITH_CHECK(sCatalogueData) // Generate catalogue entry for Color 2 GENERATE_KEY_FOR_SHOP_CATALOGUE(sCatalogueData.m_key, sModCol2Name, DUMMY_MODEL_FOR_SCRIPT, SHOP_TYPE_CARMOD, ENUM_TO_INT(CMT_RESPRAY_SECONDARY), iPriceVariation, 2, ENUM_TO_INT( eModColorType2 ) ) sCatalogueData.m_textTag = sModCol2Name sCatalogueData.m_category = CATEGORY_VEHICLE_MOD sCatalogueData.m_price = 1000 sCatalogueData.m_storagetype = NET_SHOP_ISTORAGE_INT sCatalogueData.m_statvalue = iCol2 sCatalogueData.m_bitsize = 0 sCatalogueData.m_stathash = ENUM_TO_INT(MPIntStatNamesArray[MP_STAT_MPSV_VEHICLE_BS_0][GET_SLOT_NUMBER(g_iPedComponentSlot)]) IF NOT NET_GAMESERVER_CATALOG_ITEM_IS_VALID(sCatalogueData.m_key) iNewEntriesCount++ ENDIF ADD_ITEM_TO_CATALOG_WITH_CHECK(sCatalogueData) ENDIF ELSE CPRINTLN(DEBUG_SHOPS, "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() - Invalid Model - sVSSMP.VehicleSetup.eModel = ", ENUM_TO_INT( sVSSMP.VehicleSetup.eModel ) ) eSiteVehColours = BCV_COLOUR_1 // break colour loop ENDIF ENDFOR // end colour loop CPRINTLN(DEBUG_SHOPS, "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() Cleaning up veh & model" ) DELETE_VEHICLE( vehTemp ) ELSE CPRINTLN(DEBUG_SHOPS, "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() - Invalid eSiteVeh = ", ENUM_TO_INT( eSiteVeh ) ) ENDIF ENDREPEAT // end vehicle loop CPRINTLN(DEBUG_SHOPS, "[CATALOGUE] CATALOGUE_MISSING_ENTRIES() - Rebuild complete - iNewEntriesCount = ", iNewEntriesCount ) ENDIF ENDPROC #ENDIF PROC MP_PROPERTY_DATA_INITIALISE() g_sYachtDataStruct.iMod = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_MOD) g_sYachtDataStruct.iFixture = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_FIXTURE) g_sYachtDataStruct.iLighting = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_LIGHTING) g_sYachtDataStruct.iFlag = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_FLAG) g_sYachtDataStruct.iColour = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_COLOR) g_sYachtDataStruct.tl63Name = GET_MP_LONG_STRING_CHARACTER_STAT(MP_STAT_YACHT_NAME, MP_STAT_YACHT_NAME2) g_sYachtDataStruct.tl63NewName = "" IF IS_STRING_NULL_OR_EMPTY(g_sYachtDataStruct.tl63Name) g_sYachtDataStruct.tl63NewName = GET_FILENAME_FOR_AUDIO_CONVERSATION("YACHT_GSY") ENDIF g_sYachtDataStruct.iYachtNameID = GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_YACHT_NAME_ID) ALIGN_PROPERTY_ORGANIZATION_NAMES() SETUP_OFFICE_GLOBALS_FROM_STATS() g_sOfficeDataStruct.tl63NewOrgName = "" RESET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_DATA) RESET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_A_DATA) RESET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_OFFICE_GARAGE_B_DATA) SETUP_CLUBHOUSE_GLOBALS_FROM_STATS() g_sClubhouseDataStruct.tl63NewSignage = "" SETUP_BUNKER_GLOBALS_FROM_STATS() SETUP_TRUCK_GLOBALS_FROM_STATS() SETUP_HANGAR_GLOBALS_FROM_STATS() SETUP_DEFUNCT_BASE_GLOBALS_FROM_STATS() SETUP_PLANE_GLOBALS_FROM_STATS() SETUP_NIGHTCLUB_GLOBALS_FROM_STATS() SETUP_HACKER_TRUCK_GLOBALS_FROM_STATS() SETUP_KOSATKA_GLOBALS_FROM_STATS() SETUP_ARCADE_GLOBALS_FROM_STATS() SETUP_AUTO_SHOP_GLOBALS_FROM_STATS() SETUP_FIXER_HQ_GLOBALS_FROM_STATS() #IF FEATURE_DLC_2_2022 SETUP_MULTISTOREY_GARAGE_GLOBALS_FROM_STATS() #ENDIF SETUP_ARENA_GARAGE_GLOBALS_FROM_STATS() RESET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_ARENA_WARS_DATA) SETUP_CASINO_APT_GLOBALS_FROM_STATS() RESET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CASINO_DATA) RESET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_CLUBHOUSE_DATA) UPDATE_PROPERTY_VALUES() ENDPROC SCRIPT CPRINTLN(DEBUG_INTERNET, "Web browser script launched! ") g_bBSWebsiteNoSpaceTrigger = FALSE g_iPendingBrowserTimer = -1 g_bBSWebsiteTerminated = FALSE Clear_PlayerList_Details_For_Email() RESET_VEHICLE_SETUP_STRUCT_MP(g_sConfVssMP) IF g_bInMultiplayer MP_PROPERTY_DATA_INITIALISE() ENDIF MP_FORCE_TERMINATE_INTERNET_CLEAR() SP_FORCE_TERMINATE_INTERNET_CLEAR() MISSION_REPEAT_INFO sRepeatInfo #IF IS_DEBUG_BUILD IF GET_COMMANDLINE_PARAM_EXISTS("skipBrowserTutorial") g_savedGlobals.sFinanceData.bBrowserTutorialSeen = TRUE ENDIF #ENDIF IF IS_FAKE_MULTIPLAYER_MODE_SET() CPRINTLN(DEBUG_INTERNET, "Web browser disallowed due to fake MP ") TERMINATE_THIS_THREAD() ENDIF IF g_bMagDemoActive CPRINTLN(DEBUG_INTERNET, "Web browser in mag demo launch prevention triggered. ") TERMINATE_THIS_THREAD() ENDIF REQUEST_BAWSAQ_STOCK_PRICE_VALUES() //WEB_BROWSER.gfx //g_bSingleShotLCNRedirect = FALSE g_bTickerPriceChange = TRUE //IS_SITE_DYNAMIC //call on mov //0 or 1 //GET_SITE_ID //call on mov // id int // -1 if not dynamic //GET_PAGE_ID //call on mov // id int NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME() EmailState = eDORMANT //Steve T email Work. IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("appinternet")) > 1 EXIT ENDIF #IF IS_DEBUG_BUILD DEBUG_MAKE_BROWSER_WIDGETS() IF GET_DRAW_DEBUG_COMMANDLINE_PARAM_EXISTS() SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE) bDrawDebugStuff = TRUE ENDIF #ENDIF IF IS_STUNT_JUMP_IN_PROGRESS() g_CellPhone.PhoneDS = PDS_AWAY EXIT ENDIF //////////////////////// PREP_BROWSER_BUTTONS(TRUE) //////////////////////// // INIT_VEH_SITE_PRICES() INT iReturnPadding = 0 INT pgi = 0 WEBSITE_INDEX_ENUM wsi = WWW_NOT_EXIST bPanicShutdownStart = FALSE /* IF HAS_FORCE_CLEANUP_OCCURRED() CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: HAS_FORCE_CLEANUP_OCCURRED()") FORCE_CLOSE_BROWSER() EXIT ENDIF */ g_sBrowserHelpMessage.bShow = FALSE g_bBrowserQuitMessage = FALSE SCALEFORM_INDEX fontindex fontindex = REQUEST_SCALEFORM_MOVIE("font_lib_web") CPRINTLN(DEBUG_INTERNET, "Font_lib_web loading") WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(fontindex)) WAIT(0) ENDWHILE //Activate multihead blinders on PC IF SET_MULTIHEAD_SAFE(TRUE,TRUE,DEFAULT,TRUE) bActivatedMultiheadBlinders = TRUE ENDIF IF (g_BrowserStartState = SBSS_CashMachineFinance) //DISABLE_PLAYER_FIRING(GET_PLAYER_INDEX(),TRUE)//so player doesn't punch the atm /* IF (NOT IS_PLAYER_DEAD(GET_PLAYER_INDEX())) AND (NOT IS_ENTITY_DEAD(GET_PLAYER_PED(GET_PLAYER_INDEX()))) SET_DISABLE_AMBIENT_MELEE_MOVE(GET_PLAYER_INDEX(),TRUE) ENDIF */ ENDIF // If the movie isn't prestreamed IF mov = NULL mov = REQUEST_SCALEFORM_MOVIE("web_browser") ENDIF INT gtime = g_iBrowserTimer + g_iDelayATMDisplay CPRINTLN(DEBUG_INTERNET, "Web_browser loading...") WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(mov)) WAIT(0) ENDWHILE BROWSER_CURSOR_LOADING(FALSE) IF NOT IS_PLAYER_DEAD(GET_PLAYER_INDEX()) g_iBrowserHealthDelta = GET_ENTITY_HEALTH(GET_PLAYER_PED(GET_PLAYER_INDEX())) ENDIF DO_CHECK_FOR_RAGDOLL_OR_DEAD() IF (g_BrowserStartState = SBSS_CashMachineFinance) gtime = gtime - (g_iBrowserTimer) IF gtime > 0 WAIT(gtime) ENDIF PLAY_SOUND_FRONTEND(-1, "ATM_WINDOW","HUD_FRONTEND_DEFAULT_SOUNDSET") ENDIF #IF IS_JAPANESE_BUILD BEGIN_SCALEFORM_MOVIE_METHOD(mov,"IS_JAPANESE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) END_SCALEFORM_MOVIE_METHOD() #ENDIF #IF FEATURE_GEN9_EXCLUSIVE IF g_bInMultiplayer IF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_GEN9") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) PRINTLN(DEBUG_INTERNET, "Setting gen 9 exclusive content - TRUE") END_SCALEFORM_MOVIE_METHOD() ENDIF ENDIF #ENDIF IF GET_IS_WIDESCREEN() CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_NORET(mov,"SET_WIDESCREEN",1.0) ELSE CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_NORET(mov,"SET_WIDESCREEN",0.0) ENDIF IF g_BrowserStartState = SBSS_CashMachineFinance CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_NORET(mov,"SET_BROWSER_SKIN",4.0) ELSE IF g_bInMultiplayer CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_NORET(mov,"SET_BROWSER_SKIN",1.0) ELSE SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_MICHAEL CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_NORET(mov,"SET_BROWSER_SKIN",0.0) BREAK CASE CHAR_FRANKLIN CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_NORET(mov,"SET_BROWSER_SKIN",2.0) BREAK CASE CHAR_TREVOR CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_NORET(mov,"SET_BROWSER_SKIN",3.0) BREAK ENDSWITCH ENDIF ENDIF //BROWSER_ON_STARTUP_HISTORY_RESTORE() /* IF (((NOT (g_BrowserStartState = SBSS_CashMachineFinance)) AND GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH ("cellphone_flashhand")) > 0)) HIDE_ACTIVE_PHONE(TRUE) ENDIF */ // SET_PLAYER_CONTROL(GET_PLAYER_INDEX(),FALSE, SPC_ALLOW_PLAYER_DAMAGE | SPC_DONT_STOP_OTHER_CARS_AROUND_PLAYER | SPC_REENABLE_CONTROL_ON_DEATH | SPC_PREVENT_EVERYBODY_BACKOFF ) CPRINTLN(DEBUG_INTERNET, " Game paused by browser") SET_BROWSER_OPEN(TRUE) BOOL bTempFirstLoad = FALSE HANG_UP_AND_PUT_AWAY_PHONE(TRUE) // B*154147 - Stop player from being able to be pushed around IF IS_PLAYER_PLAYING(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " Setting kinematic mode on player ped.") SET_PED_CONFIG_FLAG(PLAYER_PED_ID(),PCF_UseKinematicModeWhenStationary,TRUE) ENDIF IF g_bInMultiplayer SET_MULTIPLAYER_WALLET_CASH() SET_MULTIPLAYER_BANK_CASH() DISABLE_KILL_YOURSELF_OPTION() ENDIF IF NOT g_sBrowserHelpMessage.bShow IF IS_HELP_MESSAGE_BEING_DISPLAYED() CLEAR_HELP() CPRINTLN(DEBUG_INTERNET, "Browser cleared help as per 1532352") ENDIF ENDIF /// main update and render loop WHILE IS_BROWSER_OPEN() IF g_bInMultiplayer AND bRunningOrgNameKeyboard RUN_OSK_FOR_ORG_NAME() ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(tl63sPopulatePropertySitePinMap) GO_TO_WEBSITE(tl63sPopulatePropertySitePinMap) tl63sPopulatePropertySitePinMap = "" ENDIF // If the Epsilon music is playing or been requested and IS_GAME_IN_CONTROL_OF_MUSIC() returns false, stop the music IF bStreamLoaded OR bDoLoadStream IF NOT IS_GAME_IN_CONTROL_OF_MUSIC() CPRINTLN(DEBUG_INTERNET, "IS_GAME_IN_CONTROL_OF_MUSIC returned false while music was playing, stop it...") STOP_STREAM() STOP_AUDIO_SCENE("WEB_EPSILONISM_SITE_MUSIC_SCENE") bStreamLoaded = FALSE bDoLoadStream = FALSE ENDIF ENDIF // IF bAWStreamLoaded OR bDoLoadAWStream IF NOT IS_GAME_IN_CONTROL_OF_MUSIC() CPRINTLN(DEBUG_INTERNET, "IS_GAME_IN_CONTROL_OF_MUSIC returned false while arena wars music was playing, stop it...") STOP_STREAM() // STOP_AUDIO_SCENE("DLC_AW_Arena_Websites_Sounds") bAWStreamLoaded = FALSE bDoLoadAWStream = FALSE ENDIF ENDIF IF bRefreshButtons //refresh the damn buttons PREP_BROWSER_BUTTONS(TRUE) bRefreshButtons = FALSE ELSE //check if the buttons need refreshing INT kbFlag = GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_KEYBOARD_FLAG_INDEX) IF kbFlag = 0 IF bKeyboardHelp bRefreshButtons = TRUE bKeyboardHelp = FALSE ENDIF ELSE IF !bKeyboardHelp bRefreshButtons = TRUE bKeyboardHelp = TRUE ENDIF ENDIF INT backflag = 0// GET_GLOBAL_ACTIONSCRIPT_FLAG(SCALEFORM_BACKBUTTON_FLAG_INDEX) IF backflag = 0 IF bShowingBackButton bRefreshButtons = TRUE bShowingBackButton = FALSE ENDIF ELSE IF !bShowingBackButton bRefreshButtons = TRUE bShowingBackButton = TRUE ENDIF ENDIF IF HAVE_CONTROLS_CHANGED(FRONTEND_CONTROL) bRefreshButtons = TRUE ENDIF ENDIF DO_CHECK_FOR_RAGDOLL_OR_DEAD() IF (NOT IS_SKYSWOOP_AT_GROUND()) OR IS_TRANSITION_ACTIVE() OR IS_SCREEN_FADED_OUT() OR IS_INTERACTION_MENU_OPEN() #IF FEATURE_FIXER OR g_bBlockInternetApp #ENDIF SET_BROWSER_OPEN(FALSE) g_bBrowserQuitMessage = TRUE ENDIF IF IS_CUTSCENE_PLAYING() // OR (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH ("cellphone_flashhand")) > 0 // AND CHECK_FOR_ABNORMAL_EXIT()) CPRINTLN(DEBUG_INTERNET, "Browser abnormal exit") SET_BROWSER_OPEN(FALSE) g_bBrowserQuitMessage = TRUE ENDIF IF IS_BROWSER_OPEN() //Steve T - Eyefind Email handling routines. /* IF b_MessageBodyFilledThisCycle DISPLAY_TEXT_WITH_LITERAL_STRING (0.35, 0.14, "STRING", "TRUE TRUE TRUE TRUE TRUE") ELSE DISPLAY_TEXT_WITH_LITERAL_STRING (0.35, 0.14, "STRING", "FALS FALS FALS FALS FALS") ENDIF */ //Critical! IF b_GamertagGrabSignalledForceClose = TRUE #IF IS_DEBUG_BUILD cdPrintstring("AppInternet - b_GamertagGrabSignalledForceClose was TRUE after grab process completed. Aborting browser.") cdPrintnl() #ENDIF b_GamertagGrabSignalledForceClose = FALSE FORCE_CLOSE_BROWSER() ENDIF IF EmailState >= eSF_FILLING IF GET_CURRENT_WEBSITE_ID() = ENUM_TO_INT(WWW_EYEFIND_INFO) IF GET_CURRENT_WEBPAGE_ID() <> 7 AND GET_CURRENT_WEBPAGE_ID() <> 8 IF EmailState <> eSTATUS_UPDATE EmailState = eDORMANT #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("AppInternet - Eyefind Email. Move from Eyefind Email page detected - returning to eDORMANT state.") cdPrintnl() #ENDIF ELSE /* #IF IS_DEBUG_BUILD cdPrintnl() cdPrintstring("AppInternet - Eyefind Email. Move from Eyefind Email page detected - remaining in eSTATUS_UPDATE.") cdPrintnl() #ENDIF */ ENDIF ENDIF ENDIF ENDIF SWITCH EmailState CASE eDORMANT IF IS_ACCOUNT_OVER_17_FOR_CHAT(PLAYER_ID()) //Fix for 2437163. The inbox will always be empty and no contacts will appear if the user account does not have communication privileges. CheckForEmailAwakeningFromDormantState() CheckForComposeAwakening() ENDIF BREAK CASE eINITIAL IF i_InboxDepth = 0 InitialiseEmailRetrieval(0, 6) //First param is the starting index Second param is the number of emails to grab. Only 5 per page but need to check the sixth for displaying the older button. ELSE InitialiseEmailRetrieval( (5 * i_InboxDepth) , 6) ENDIF BREAK CASE eRETRIEVAL MaintainRetrievalProcess() BREAK CASE eSF_FILLING IF i_InboxDepth = 0 FillScaleformWithRetrievedEmails( 0, 5 ) ELSE FillScaleformWithRetrievedEmails( 0, 5 ) //This seems to work so the indices are reset when you grab a new batch! //FillScaleformWithRetrievedEmails( (5 * i_InboxDepth), ((5 * i_InboxDepth) + 5) ) //Hardcoded. Need to have these batch numbers dynamically update according to what part of the inbox we're scrolling through. ENDIF BREAK CASE eNEUTRAL_BROWSING IF b_WaitingToRetrieveGamerTag = FALSE //Steve T - This would need to be wrapped in a check for the scaleform webpage details, so we know ww are on the Eyefind page. Player_to_Player_Email_Main() CheckForComposeAwakening() ENDIF BREAK CASE eCOMPOSING IF b_WaitingToRetrieveGamerTag = FALSE Player_to_Player_Composing_Main() ENDIF BREAK CASE eSTATUS_UPDATE IF b_WaitingToRetrieveGamerTag = FALSE Status_Update_Screen_Handling() ENDIF //Might need to be included again for a stronger fix for #1903168. /* IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL) #IF IS_DEBUG_BUILD cdPrintstring ("AppInternet - FORCE_CLOSE_BROWSER from Eyefind Email Status Update Screen.") cdPrintnl() #ENDIF CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER from Eyefind Email Status Update Screen.") FORCE_CLOSE_BROWSER() ENDIF */ BREAK ENDSWITCH //End of Steve T MP human to human email work IF bClickDetector IF g_eWebSiteIndexFeedback != INVALID_WEBSITE_INDEX // Website element click detection #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_INTERNET, "Valid website click detected: Site = ", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback), " Page = ", g_iWebPageIndexFeedback, " Index = ", g_iLastSelectedWebIndex) #ENDIF #IF IS_DEBUG_BUILD cdPrintnl() cdPrintnl() cdPrintstring("SteveT_Click Detection. g_eWebSiteIndexFeedback was ") cdPrintint(ENUM_TO_INT(g_eWebSiteIndexFeedback)) cdPrintnl() #ENDIF // This should be somewhere else... SWITCH g_eWebSiteIndexFeedback // Vehicle websites CASE WWW_LEGENDARYMOTORSPORT_NET CASE WWW_ELITASTRAVEL_COM CASE WWW_WARSTOCK_D_CACHE_D_AND_D_CARRY_COM CASE WWW_DOCKTEASE_COM CASE WWW_PANDMCYCLES_COM CASE WWW_SOUTHERNSANANDREASSUPERAUTOS_COM CASE WWW_BENNYSORIGINALMOTORWORKS_COM IF g_iWebPageIndexFeedback = 15 IF g_iLastSelectedWebIndex = 2 //confirm yes button IF NOT confCheck AND g_eWebSiteIndexFeedback = WWW_BENNYSORIGINALMOTORWORKS_COM // CWARNINGLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: bypass!! g_eWebSiteIndexFeedback:", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback), ", g_iWebPageIndexFeedback:", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ", confCheck:", GET_STRING_FROM_BOOL(confCheck)) ELSE INT iAltVersion iAltVersion = -1 IF IS_SBV_AN_ALTERNATE_VEHICLE(confSbv, g_eWebSiteIndexFeedback, g_eLastBuyableVehicleColourSelected) iAltVersion = 1 ENDIF CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: g_eWebSiteIndexFeedback:", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback), ", g_iWebPageIndexFeedback:", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ", confCheck:", GET_STRING_FROM_BOOL(confCheck)) DO_MP_VEHICLE_BUY(g_eWebSiteIndexFeedback, iAltVersion) ENDIF ELIF g_iLastSelectedWebIndex = 3//confirm no button DO_VEHICLE_FAIL_PAGE(g_eWebSiteIndexFeedback, VSFR_CANCELED,UNSET_BUYABLE_VEHICLE, -1) ENDIF ELIF g_iWebPageIndexFeedback = 4 IF g_eWebSiteIndexFeedback = WWW_BENNYSORIGINALMOTORWORKS_COM AND g_iLastSelectedWebIndex = 3 // IF IS_SHOP_AVAILABLE(CARMOD_SHOP_SUPERMOD) CPRINTLN(DEBUG_INTERNET, "WWW_BENNYSORIGINALMOTORWORKS_COM: SET GPS ROUTE") SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(GET_SHOP_COORDS(CARMOD_SHOP_SUPERMOD)) // ELSE // CPRINTLN(DEBUG_INTERNET, "WWW_BENNYSORIGINALMOTORWORKS_COM: don't set gps route, supermod shop not available") // ENDIF ENDIF ENDIF BREAK CASE WWW_ARENAWAR_TV SWITCH g_iWebPageIndexFeedback //==Arena Garage Purchase Page== CASE 10 IF g_iLastSelectedWebIndex = 6 INT iArenaGarage iArenaGarage = ENUM_TO_INT(ARENA_GARAGE_1) //GET_LAST_CLICKED_ARENA_GARAGE() // IF (g_iLastSelectedWebIndex = 7 AND iStaticLastPage = 41) CPRINTLN(DEBUG_INTERNET, "ARENA_GARAGE property buy attempt triggered on index: ", iArenaGarage) // ELSE // CASSERTLN(DEBUG_INTERNET, "ARENA_GARAGE property replace(?) attempt triggered on index: ", iArenaGarage) // ENDIF // INT iResultSlot // iResultSlot = 0 // BUY_MP_ARENA_GARAGE_FROM_WEBSITE(INT_TO_ENUM(ARENA_GARAGE_ID, iArenaGarage), iResultSlot) ENDIF BREAK CASE 14 IF g_iLastSelectedWebIndex = 0 AND (eBoughtArenaIndex != ARENA_GARAGE_ID_INVALID) SIMPLE_INTERIORS eSimpleInteriorID eSimpleInteriorID = GET_SIMPLE_INTERIOR_ID_FROM_ARENA_GARAGE_ID(eBoughtArenaIndex) VECTOR vPurchaseLocation vPurchaseLocation = GET_ARENA_GARAGE_BLIP_COORDS(eSimpleInteriorID) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on ARENA_GARAGE: ", eBoughtArenaIndex, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_5_ARENA_GARAGE) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_5_ARENA_GARAGE) ENDIF ENDIF BREAK // //==Arena Contender Vehicle Pages== // CASE 29 // CASE 31 // IF g_iLastSelectedWebIndex = 0 // OR g_iLastSelectedWebIndex = 1 // IF NOT confCheck // // // CWARNINGLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: bypass!! g_eWebSiteIndexFeedback:", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback), ", g_iWebPageIndexFeedback:", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ", confCheck:", GET_STRING_FROM_BOOL(confCheck)) // ELSE // INT iAltVersion // iAltVersion = -1 // IF IS_SBV_AN_ALTERNATE_VEHICLE(confSbv, g_eWebSiteIndexFeedback, g_eLastBuyableVehicleColourSelected) // iAltVersion = 1 // ENDIF // // CPRINTLN(DEBUG_INTERNET, "DO_MP_VEHICLE_BUY: g_eWebSiteIndexFeedback:", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback), ", g_iWebPageIndexFeedback:", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ", confCheck:", GET_STRING_FROM_BOOL(confCheck)) // DO_MP_VEHICLE_BUY(g_eWebSiteIndexFeedback, iAltVersion) // ENDIF // ELIF g_iLastSelectedWebIndex = 3//confirm no button // DO_VEHICLE_FAIL_PAGE(g_eWebSiteIndexFeedback, VSFR_CANCELED,UNSET_BUYABLE_VEHICLE, -1) // ENDIF // BREAK ENDSWITCH BREAK CASE WWW_BLEETER_COM HANDLE_BLEETER_SELECT(mov) BREAK CASE WWW_LIFEINVADER_COM IF g_iLastSelectedWebIndex >= 4 CHANGE_LIFEINVADER_PROFILE(mov, g_iLastSelectedWebIndex) ELSE HANDLE_LIFEINVADER_PROFILE_BUTTON_CLICK(mov, g_iLastSelectedWebIndex) ENDIF BREAK #IF NOT IS_JAPANESE_BUILD // CASE WWW_HUSHSMUSH_COM // CHECK_HUSHSMUSH_CLICK(g_iWebPageIndexFeedback, g_iLastSelectedWebIndex) // BREAK #ENDIF CASE WWW_THECHILDRENOFTHEMOUNTAIN_COM IF iStaticCurrentPage = 4 IF g_iLastSelectedWebIndex = 0 AND g_iChildrenOfTheMountainStatus < 2 IF GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) >= 199 CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Player has enough money, deducted 199") DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_UNLOGGED_SMALL_ACTION, 199) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2) END_SCALEFORM_MOVIE_METHOD() CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: SET_DATA_SLOT set to 2") g_iChildrenOfTheMountainStatus = 2 ELSE CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Player doesn't have enough money") PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") GO_TO_WEBSITE("WWW_THECHILDRENOFTHEMOUNTAIN_COM_S_PAYMENTERROR") ENDIF ENDIF ELIF iStaticCurrentPage = 6 IF g_iLastSelectedWebIndex = 0 AND g_iChildrenOfTheMountainStatus < 3 IF GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) >= 4999 CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Player has enough money, deducted 4999") DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_UNLOGGED_SMALL_ACTION, 4999) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(3) END_SCALEFORM_MOVIE_METHOD() g_iChildrenOfTheMountainStatus = 3 CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: SET_DATA_SLOT set to 3") ELSE CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Player doesn't have enough money") PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") GO_TO_WEBSITE("WWW_THECHILDRENOFTHEMOUNTAIN_COM_S_PAYMENTERROR") ENDIF ENDIF ELIF iStaticCurrentPage = 8 IF g_iLastSelectedWebIndex = 0 AND g_iChildrenOfTheMountainStatus < 5 IF GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) >= 9999 CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Player has enough money, deducted 9999") DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_UNLOGGED_SMALL_ACTION, 9999) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(5) END_SCALEFORM_MOVIE_METHOD() g_iChildrenOfTheMountainStatus = 5 CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: SET_DATA_SLOT set to 5") ELSE CPRINTLN(DEBUG_INTERNET, "WWW_THECHILDRENOFTHEMOUNTAIN_COM: Player doesn't have enough money") PLAY_SOUND_FRONTEND(-1, "Click_Fail", "WEB_NAVIGATION_SOUNDS_PHONE") GO_TO_WEBSITE("WWW_THECHILDRENOFTHEMOUNTAIN_COM_S_PAYMENTERROR") ENDIF ENDIF ENDIF BREAK CASE WWW_MAZE_D_BANK_COM // MP only IF g_bInMultiplayer IF g_iWebPageIndexFeedback = 3 // Evaluate button press from menu page SF_BANK_MENU_UPDATE_MP(g_iLastSelectedWebIndex) ELIF g_iWebPageIndexFeedback = 4 // Evaluate button press from withdrawals page SF_BANK_WITHDRAWAL_UPDATE_MP(g_iLastSelectedWebIndex) ELIF g_iWebPageIndexFeedback = 5 // Evaluate button press from deposits page SF_BANK_DEPOSIT_UPDATE_MP(g_iLastSelectedWebIndex) ELIF g_iWebPageIndexFeedback = 8 // Evaluate button press from message screen SF_BANK_MESSAGE_UPDATE_MP(mov, g_iLastSelectedWebIndex, &RENDER_BROWSER) ENDIF ENDIF BREAK CASE WWW_DYNASTY8EXECUTIVEREALTY_COM // MP only IF g_bInMultiplayer IF g_iWebPageIndexFeedback = 11 AND g_iLastSelectedWebIndex = 0 IF NOT IS_PROPERTY_OFFICE_GARAGE(iBoughtPropertyIndex) #IF FEATURE_FIXER AND (eBoughtFixerHQIndex = FIXER_HQ_ID_INVALID) #ENDIF INT iOffice iOffice = GET_LAST_CLICKED_OFFICE() CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on office: ", iOffice, " ", mpProperties[iOffice].vPurchaseLocation, " [iBoughtPropertyIndex:", iBoughtPropertyIndex, "]") IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(mpProperties[iOffice].vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(iOffice, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_0) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(iOffice, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_0) ENDIF #IF FEATURE_FIXER ELIF (eBoughtFixerHQIndex != FIXER_HQ_ID_INVALID) SIMPLE_INTERIORS eSimpleInteriorID eSimpleInteriorID = GET_SIMPLE_INTERIOR_ID_FROM_FIXER_HQ_ID(eBoughtFixerHQIndex) VECTOR vPurchaseLocation vPurchaseLocation = GET_FIXER_HQ_BLIP_COORDS(eSimpleInteriorID) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on Fixer HQ: ", eBoughtFixerHQIndex, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_9_FIXER_HQ) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_9_FIXER_HQ) ENDIF #ENDIF ELSE INT iGarage iGarage = GET_LAST_CLICKED_OFFICE() //iBoughtPropertyIndex CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on office garage: ", iGarage, " ", mpProperties[iGarage].vBlipLocation[2], " [iBoughtPropertyIndex:", iBoughtPropertyIndex, "]") IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(mpProperties[iGarage].vBlipLocation[2]) SWITCH_TO_PROPERTY_RESULTS_PAGE(iGarage, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_0) IF g_bForceCloseBrowserForOfficeGarageGPS CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: Shutdown due to gps placement on office garage: ", iGarage, " ", mpProperties[iGarage].vBlipLocation[2], "") FORCE_CLOSE_BROWSER() ENDIF ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(iGarage, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_0) ENDIF ENDIF ENDIF IF iStaticCurrentPage = 2 //offices INT iThisLastClickedOffice iThisLastClickedOffice = 0 SWITCH g_iLastSelectedWebIndex CASE 0 //Renovate button clicked iThisLastClickedOffice = iLastClickedOffice BREAK CASE 4 CASE 5 iThisLastClickedOffice = PROPERTY_OFFICE_1 BREAK CASE 6 CASE 7 iThisLastClickedOffice = PROPERTY_OFFICE_2_BASE BREAK CASE 8 CASE 9 iThisLastClickedOffice = PROPERTY_OFFICE_3 BREAK CASE 10 CASE 11 iThisLastClickedOffice = PROPERTY_OFFICE_4 BREAK ENDSWITCH IF iThisLastClickedOffice != iLastClickedOffice CPRINTLN(DEBUG_INTERNET, "Clicked Office iStaticCurrentPage[", iStaticCurrentPage, "] iThisLastClickedOffice:", iThisLastClickedOffice, ", replacing:", iLastClickedOffice) iLastClickedOffice = iThisLastClickedOffice ENDIF // iLastClickedOffice = GET_LAST_CLICKED_OFFICE() // CPRINTLN(DEBUG_INTERNET, "Last Clicked Office: iStaticCurrentPage[", iStaticCurrentPage, "] g_iLastSelectedWebIndex:", g_iLastSelectedWebIndex, ", iLastClickedOffice:", iLastClickedOffice) ENDIF ENDIF BREAK CASE FORECLOSURES_MAZE_D_BANK_COM // MP only IF g_bInMultiplayer IF g_iWebPageIndexFeedback = 10 AND g_iLastSelectedWebIndex = 0 IF (eBoughtFactoryIndex != FACTORY_ID_INVALID) SIMPLE_INTERIORS eSimpleInteriorID eSimpleInteriorID = GET_SIMPLE_INTERIOR_ID_FROM_FACTORY_ID(eBoughtFactoryIndex) VECTOR vPurchaseLocation vPurchaseLocation = GET_BUNKER_BLIP_COORDS(eSimpleInteriorID) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on bunker: ", eBoughtFactoryIndex, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_1_FACTORY) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_1_FACTORY) ENDIF ELIF (eBoughtHangarIndex != HANGAR_ID_INVALID) SIMPLE_INTERIORS eSimpleInteriorID eSimpleInteriorID = GET_SIMPLE_INTERIOR_ID_FROM_HANGAR_ID(eBoughtHangarIndex) VECTOR vPurchaseLocation vPurchaseLocation = GET_HANGAR_BLIP_COORDS(eSimpleInteriorID) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on hangar: ", eBoughtHangarIndex, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_2_HANGAR) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_2_HANGAR) ENDIF ELIF (eBoughtDefunctBaseIndex != DEFUNCT_BASE_ID_INVALID) SIMPLE_INTERIORS eSimpleInteriorID eSimpleInteriorID = GET_SIMPLE_INTERIOR_ID_FROM_DEFUNCT_BASE_ID(eBoughtDefunctBaseIndex) VECTOR vPurchaseLocation vPurchaseLocation = GET_DEFUNCT_BASE_MAZEBANK_BLIP_COORDS(eSimpleInteriorID) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on defunct base: ", eBoughtDefunctBaseIndex, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_3_DEFUNCT_BASE) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_3_DEFUNCT_BASE) ENDIF ELIF (eBoughtNightclubIndex != NIGHTCLUB_ID_INVALID) SIMPLE_INTERIORS eSimpleInteriorID eSimpleInteriorID = GET_SIMPLE_INTERIOR_ID_FROM_NIGHTCLUB_ID(eBoughtNightclubIndex) VECTOR vPurchaseLocation vPurchaseLocation = GET_NIGHTCLUB_BLIP_COORDS(eSimpleInteriorID) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on nightclub: ", eBoughtNightclubIndex, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_4_NIGHTCLUB) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_4_NIGHTCLUB) ENDIF ELIF (eBoughtArcadeIndex != ARCADE_PROPERTY_ID_INVALID) SIMPLE_INTERIORS eSimpleInteriorID eSimpleInteriorID = GET_SIMPLE_INTERIOR_ID_FROM_ARCADE_PROPERTY_ID(eBoughtArcadeIndex) VECTOR vPurchaseLocation vPurchaseLocation = GET_ARCADE_BLIP_COORDS(eSimpleInteriorID) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on Arcade: ", eBoughtArcadeIndex, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_7_ARCADE) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_7_ARCADE) ENDIF ELIF (eBoughtAutoShopIndex != AUTO_SHOP_PROPERTY_ID_INVALID) SIMPLE_INTERIORS eSimpleInteriorID eSimpleInteriorID = GET_SIMPLE_INTERIOR_ID_FROM_AUTO_SHOP_PROPERTY_ID(eBoughtAutoShopIndex) VECTOR vPurchaseLocation vPurchaseLocation = GET_AUTO_SHOP_BLIP_COORDS(eSimpleInteriorID) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on Auto shop: ", eBoughtAutoShopIndex, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_8_AUTO_SHOP) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_8_AUTO_SHOP) ENDIF ELSE INT iClubhouse iClubhouse = GET_LAST_CLICKED_CLUBHOUSE() CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on clubhouse: ", iClubhouse, " ", mpProperties[iClubhouse].vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(mpProperties[iClubhouse].vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(iClubhouse, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_0) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(iClubhouse, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_0) ENDIF ENDIF ENDIF IF iStaticCurrentPage = 36 AND NOT bTVOn SWITCH g_iLastSelectedWebIndex CASE 11 //LIGHTING 1 CPRINTLN(DEBUG_INTERNET, "FORECLOSURES_MAZE_D_BANK_COM: PLAY LIGHTING 1 VIDEO - currentPage:", iStaticCurrentPage, ", lastIndex:", g_iLastSelectedWebIndex) // SETUP_VIDEO_PLAYBACK("PL_WEB_FOS") // iTVOnTimeoutFrameCount = GET_FRAME_COUNT()+5000 BREAK CASE 12 //LIGHTING 2 CPRINTLN(DEBUG_INTERNET, "FORECLOSURES_MAZE_D_BANK_COM: PLAY LIGHTING 2 VIDEO - currentPage:", iStaticCurrentPage, ", lastIndex:", g_iLastSelectedWebIndex) SETUP_VIDEO_PLAYBACK("PL_WEB_LR1") iTVOnTimeoutFrameCount = GET_FRAME_COUNT()+644 //- Cathedral - 19 seconds BREAK CASE 13 //LIGHTING 3 CPRINTLN(DEBUG_INTERNET, "FORECLOSURES_MAZE_D_BANK_COM: PLAY LIGHTING 3 VIDEO - currentPage:", iStaticCurrentPage, ", lastIndex:", g_iLastSelectedWebIndex) SETUP_VIDEO_PLAYBACK("PL_WEB_LR2") iTVOnTimeoutFrameCount = GET_FRAME_COUNT()+443 //- Lightning Storm - 18.5 seconds BREAK CASE 14 //LIGHTING 4 CPRINTLN(DEBUG_INTERNET, "FORECLOSURES_MAZE_D_BANK_COM: PLAY LIGHTING 4 VIDEO - currentPage:", iStaticCurrentPage, ", lastIndex:", g_iLastSelectedWebIndex) SETUP_VIDEO_PLAYBACK("PL_WEB_LR3") iTVOnTimeoutFrameCount = GET_FRAME_COUNT()+522 //- Surge - 16 seconds BREAK CASE 15 //LIGHTING 5 CPRINTLN(DEBUG_INTERNET, "FORECLOSURES_MAZE_D_BANK_COM: PLAY LIGHTING 5 VIDEO - currentPage:", iStaticCurrentPage, ", lastIndex:", g_iLastSelectedWebIndex) SETUP_VIDEO_PLAYBACK("PL_WEB_LR4") iTVOnTimeoutFrameCount = GET_FRAME_COUNT()+528 //- Dazzle - 23 seconds BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, "FORECLOSURES_MAZE_D_BANK_COM: no video - currentPage:", iStaticCurrentPage, ", lastIndex:", g_iLastSelectedWebIndex) BREAK ENDSWITCH ENDIF ENDIF BREAK CASE WWW_THEDIAMONDCASINOANDRESORT_COM IF g_iWebPageIndexFeedback = 17 AND g_iLastSelectedWebIndex = 0 AND (eBoughtCasinoIndex != CASINO_APARTMENT_ID_INVALID) //==Casino Apt Waypoint Set - PURCHASED== VECTOR vPurchaseLocation vPurchaseLocation = GET_CASINO_BLIP_COORDS(SIMPLE_INTERIOR_CASINO) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on CASINO_APT: ", eBoughtCasinoIndex, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_6_CASINO_APARTMENT) IF NOT IS_PLAYER_IN_CASINO_APARTMENT_THEY_OWN(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, "FORCE_CLOSE_BROWSER - url:bugstar:5726270 - Can we please close the website if players press \"Set Waypoint\" after purchasing the Penthouse?") FORCE_CLOSE_BROWSER() ENDIF ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_6_CASINO_APARTMENT) ENDIF ELIF g_iWebPageIndexFeedback = 1 AND g_iLastSelectedWebIndex = 1 //==Casino Apt Waypoint Set - HOME PAGE== VECTOR vPurchaseLocation vPurchaseLocation = GET_CASINO_BLIP_COORDS(SIMPLE_INTERIOR_CASINO) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on CASINO_APT: ", CASINO_APARTMENT_1, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_6_CASINO_APARTMENT) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_6_CASINO_APARTMENT) ENDIF ELIF g_iWebPageIndexFeedback = 6 AND g_iLastSelectedWebIndex = 0 //==Casino Apt Waypoint Set - MEMBERSHIP== VECTOR vPurchaseLocation vPurchaseLocation = GET_CASINO_BLIP_COORDS(SIMPLE_INTERIOR_CASINO) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on CASINO_APT: ", CASINO_APARTMENT_1, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_6_CASINO_APARTMENT) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_6_CASINO_APARTMENT) ENDIF ELIF g_iWebPageIndexFeedback = 2 AND g_iLastSelectedWebIndex = 0 //==Casino Apt Waypoint Set - CASINO== VECTOR vPurchaseLocation vPurchaseLocation = GET_CASINO_BLIP_COORDS(SIMPLE_INTERIOR_CASINO) CPRINTLN(DEBUG_INTERNET, "Property gps placement attempted on CASINO_APT: ", CASINO_APARTMENT_1, " ", vPurchaseLocation) IF SET_ROUTE_TARGET_FOR_AVERY_SITE_GPS(vPurchaseLocation) SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, TRUE, FALSE, rpmt_6_CASINO_APARTMENT) ELSE SWITCH_TO_PROPERTY_RESULTS_PAGE(-1, "_S_WAYPOINT_D_SET", FALSE, FALSE, FALSE, TRUE, rpmt_6_CASINO_APARTMENT) ENDIF ELIF g_iWebPageIndexFeedback = 8 AND g_iLastSelectedWebIndex = 2 //==Casino Apt DESIGN YOUR OWN== CPRINTLN(DEBUG_INTERNET, "DESIGN YOUR OWN: g_iWebPageIndexFeedback: ", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex: ", g_iLastSelectedWebIndex, " - ", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback)) iBoughtCasinoPreset = 1 ELIF g_iWebPageIndexFeedback = 8 AND g_iLastSelectedWebIndex = 4 //==Casino Apt HIGH ROLLER== CPRINTLN(DEBUG_INTERNET, "HIGH ROLLER: g_iWebPageIndexFeedback: ", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex: ", g_iLastSelectedWebIndex, " - ", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback)) iBoughtCasinoPreset = 2 ELIF g_iWebPageIndexFeedback = 8 AND g_iLastSelectedWebIndex = 6 //==Casino Apt CRASH PAD== CPRINTLN(DEBUG_INTERNET, "CRASH PAD: g_iWebPageIndexFeedback: ", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex: ", g_iLastSelectedWebIndex, " - ", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback)) iBoughtCasinoPreset = 3 ELIF g_iWebPageIndexFeedback = 8 AND g_iLastSelectedWebIndex = 8 //==Casino Apt PARTY PENTHOUSE== CPRINTLN(DEBUG_INTERNET, "PARTY PENTHOUSE: g_iWebPageIndexFeedback: ", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex: ", g_iLastSelectedWebIndex, " - ", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback)) iBoughtCasinoPreset = 4 ELSE CPRINTLN(DEBUG_INTERNET, "unknown g_iWebPageIndexFeedback: ", g_iWebPageIndexFeedback, ", g_iLastSelectedWebIndex: ", g_iLastSelectedWebIndex, " - ", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback)) ENDIF IF iStaticCurrentPage = 1 AND NOT bTVOn SWITCH g_iLastSelectedWebIndex CASE 0 //CASINO TRAILER CPRINTLN(DEBUG_INTERNET, "WWW_THEDIAMONDCASINOANDRESORT_COM: PLAY CASINO TRAILER VIDEO - currentPage:", iStaticCurrentPage, ", lastIndex:", g_iLastSelectedWebIndex) SETUP_VIDEO_PLAYBACK("PL_WEB_CAS") iTVOnTimeoutFrameCount = GET_FRAME_COUNT()+2467+500 BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, "WWW_THEDIAMONDCASINOANDRESORT_COM: no video - currentPage:", iStaticCurrentPage, ", lastIndex:", g_iLastSelectedWebIndex) BREAK ENDSWITCH ENDIF BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, "invalid g_eWebSiteIndexFeedback: ", g_eWebSiteIndexFeedback, " - ", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback)) BREAK ENDSWITCH IF eStaticCurrentSite != WWW_DYNASTY8EXECUTIVEREALTY_COM iLastClickedOffice = 0 ENDIF ELSE // Website element click detection #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_INTERNET, "Invalid website click detected: Site = ", GET_WEBSITE_FROM_INDEX(g_eWebSiteIndexFeedback), " Page = ", g_iWebPageIndexFeedback, " Index = ", g_iLastSelectedWebIndex, " g_sLastSiteHash = ", GET_WEBSITE_FROM_HASH(g_sLastSiteHash)) #ENDIF SWITCH g_sLastSiteHash // Websites with embedded video CASE HASH("WWW_FAMEORSHAME_NET") IF NOT bTVOn IF iStaticCurrentPage = 2 AND g_iLastSelectedWebIndex = 6 //Watch Now CPRINTLN(DEBUG_INTERNET, "WWW_FAMEORSHAME_NET: PLAY VIDEO") SETUP_VIDEO_PLAYBACK("PL_WEB_FOS") ELIF iStaticCurrentPage = 1 AND g_iLastSelectedWebIndex = 8 //homepage SETUP_VIDEO_PLAYBACK("PL_WEB_FOS") ELIF iStaticCurrentPage = 4 AND g_iLastSelectedWebIndex = 8 // Top acts CPRINTLN(DEBUG_INTERNET, "WWW_FAMEORSHAME_NET: PLAY VIDEO") SETUP_VIDEO_PLAYBACK("PL_WEB_FOS") ELIF iStaticCurrentPage = 4 AND g_iLastSelectedWebIndex = 8 // Top acts CPRINTLN(DEBUG_INTERNET, "WWW_FAMEORSHAME_NET: PLAY VIDEO") SETUP_VIDEO_PLAYBACK("PL_WEB_FOS") ENDIF ENDIF BREAK CASE HASH("WWW_JACKHOWITZER_COM") #IF NOT IS_JAPANESE_BUILD IF NOT bTVOn IF g_iLastSelectedWebIndex = 7 CPRINTLN(DEBUG_INTERNET, "WWW_JACKHOWITZER_COM: PLAY VIDEO") SETUP_VIDEO_PLAYBACK("PL_WEB_HOWITZER") ENDIF ENDIF #ENDIF BREAK CASE HASH("WWW_KUNGFURAINBOWLAZERFORCE_COM") IF NOT bTVOn IF g_iLastSelectedWebIndex = 6 CPRINTLN(DEBUG_INTERNET, "WWW_KUNGFURAINBOWLAZERFORCE_COM: PLAY VIDEO") SETUP_VIDEO_PLAYBACK("PL_WEB_KFLF") ENDIF ENDIF BREAK CASE HASH("WWW_PRINCESSROBOTBUBBLEGUM_COM") // Disabled for PC ratings build B* 2199116 IF NOT (IS_PC_VERSION() AND NOT IS_DLC_PRESENT(HASH("patchDay3NG"))) IF NOT bTVOn IF g_iLastSelectedWebIndex = 6 CPRINTLN(DEBUG_INTERNET, "WWW_PRINCESSROBOTBUBBLEGUM_COM: PLAY VIDEO") SETUP_VIDEO_PLAYBACK("PL_WEB_PRB2") ENDIF ENDIF ENDIF BREAK CASE HASH("WWW_REPUBLICANSPACERANGERS_COM") IF NOT bTVOn IF g_iLastSelectedWebIndex = 8 CPRINTLN(DEBUG_INTERNET, "WWW_REPUBLICANSPACERANGERS_COM: PLAY VIDEO") SETUP_VIDEO_PLAYBACK("PL_WEB_RANGERS") ENDIF ENDIF BREAK CASE HASH("WWW_RIGHTEOUSSLAUGHTER7_COM") IF NOT bTVOn IF g_iLastSelectedWebIndex = 3 CPRINTLN(DEBUG_INTERNET, "WWW_RIGHTEOUSSLAUGHTER7_COM: PLAY VIDEO") SETUP_VIDEO_PLAYBACK("PL_WEB_RS") ENDIF ENDIF BREAK CASE HASH("WWW_SAWATERANDPOWER_COM") IF g_iLastSelectedWebIndex = 5 CPRINTLN(DEBUG_INTERNET, "WWW_SAWATERANDPOWER_COM: PLAY VIDEO") ENDIF BREAK // Taco dialogue CASE HASH("WWW_TACO_D_BOMB_COM") IF g_iWebPageIndexFeedback = 2 CPRINTLN(DEBUG_INTERNET, "WWW_TACO_D_BOMB_COM: PLAY_TACO_LINE") SWITCH g_iLastSelectedWebIndex CASE 0 PLAY_TACO_LINE(TSL_PACOW_TASTY, spfc) BREAK CASE 1 PLAY_TACO_LINE(TSL_PACOW_COLON, spfc) BREAK CASE 2 PLAY_TACO_LINE(TSL_PACOW_CSEC, spfc) BREAK CASE 3 PLAY_TACO_LINE(TSL_PACOW_DOG, spfc) BREAK CASE 4 PLAY_TACO_LINE(TSL_PACOW_VOMIT, spfc) BREAK CASE 5 PLAY_TACO_LINE(TSL_PACOW_PAIN, spfc) BREAK CASE 6 PLAY_TACO_LINE(TSL_PACOW_MELT, spfc) BREAK ENDSWITCH ENDIF BREAK DEFAULT CPRINTLN(DEBUG_INTERNET, "unknown g_sLastSiteHash: ", g_sLastSiteHash, " - ", GET_WEBSITE_FROM_HASH(g_sLastSiteHash)) BREAK ENDSWITCH ENDIF bClickDetector = FALSE ENDIF IF IS_FLOATING_HELP_TEXT_ON_SCREEN(FLOATING_HELP_TEXT_ID_1) CLEAR_FLOATING_HELP(FLOATING_HELP_TEXT_ID_1) ENDIF IF IS_FLOATING_HELP_TEXT_ON_SCREEN(FLOATING_HELP_TEXT_ID_2) CLEAR_FLOATING_HELP(FLOATING_HELP_TEXT_ID_2) ENDIF RENDER_BROWSER() WAIT(0) // Has to render SET_INPUT_EXCLUSIVE (PLAYER_CONTROL, (INT_TO_ENUM (CONTROL_ACTION, PHONE_DELETE_OPTION_INPUT))) SET_INPUT_EXCLUSIVE (PLAYER_CONTROL, (INT_TO_ENUM (CONTROL_ACTION, PHONE_SPECIAL_OPTION_INPUT))) IF g_bBrowserUserMode PASS_INPUTS_TO_BROWSER(mov) ELSE BROWSER_CURSOR_LOADING(FALSE) IF iBSTutorialProgress = 3 //scroll on the listings page CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_NORET(mov, "SET_ANALOG_STICK_INPUT",0.0,0.0,33.0) ELSE CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_NORET(mov, "SET_ANALOG_STICK_INPUT",0.0,0.0,0.0) ENDIF ENDIF IF (NOT (bTempFirstLoad)) TEXT_LABEL_63 sGoto = "WWW_EYEFIND_INFO" SWITCH g_BrowserStartState CASE SBSS_CashMachineFinance sGoto = "WWW_BANK_COM" BREAK CASE SBSS_EyeFind sGoto = "WWW_EYEFIND_INFO" BREAK CASE SBSS_LifeInvader sGoto = "WWW_LIFEINVADER_COM" g_iLifeInvaderTutorialLastVisitedPage = -1 BREAK CASE SBSS_LifeInvader_BrucieResponse g_iLifeInvaderTutorialLastVisitedPage = -1 sGoto = "WWW_LIFEINVADER_COM_S_USER584348_3" BREAK CASE SBSS_Launch_Link sGoto = g_BrowserLinkToLaunch BREAK CASE SBSS_Bawsaq sGoto = "WWW_BAWSAQ_COM" BREAK CASE SBSS_SHOP_RESTORE sGoto = g_sTransitionSessionData.sEndReserve.stMPBrowserFromShopSite BREAK CASE SBSS_ArenaWar sGoto = "WWW_ARENAWAR_TV" BREAK CASE SBSS_Casino IF !DOES_PLAYER_OWN_A_CASINO_APARTMENT(PLAYER_ID()) sGoto = "WWW_THEDIAMONDCASINOANDRESORT_COM_S_SUITES" ELSE sGoto = "WWW_THEDIAMONDCASINOANDRESORT_COM_S_RENOVATE" ENDIF BREAK ENDSWITCH CPRINTLN(DEBUG_INTERNET, " initial triggered with: ",sGoto) BEGIN_SCALEFORM_MOVIE_METHOD(mov,"GO_TO_WEBPAGE") BEGIN_TEXT_COMMAND_SCALEFORM_STRING("STRING") ADD_TEXT_COMPONENT_SUBSTRING_WEBSITE(sGoto) END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() IF ARE_STRINGS_EQUAL(sGoto, "WWW_EYEFIND_INFO") LOAD_EYEFIND_TEXT_SLOT() g_iWebPageIndexFeedback = 1 g_eWebSiteIndexFeedback = WWW_EYEFIND_INFO //url:bugstar:5396844 - Internet - Shop tiles become unresponsive / unclickable after going to the inbox then quickly back to the Eyefind homepage IF GET_CURRENT_WEBPAGE_ID() <> 7 AND GET_CURRENT_WEBPAGE_ID() <> 8 CPRINTLN(DEBUG_INTERNET, " \"",sGoto, "\" triggered with webpageID ", GET_CURRENT_WEBPAGE_ID(), ", call SET_DATA_SLOT_EMPTY") BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_DATA_SLOT_EMPTY") END_SCALEFORM_MOVIE_METHOD() ELSE CPRINTLN(DEBUG_INTERNET, " \"",sGoto, "\" triggered with webpageID ", GET_CURRENT_WEBPAGE_ID(), ", dont call SET_DATA_SLOT_EMPTY") ENDIF SF_EYEFIND(mov, 1, sRepeatInfo, FALSE) g_iTimeLastBrowserRefresh = GET_GAME_TIMER() ELIF ARE_STRINGS_EQUAL(sGoto, "WWW_DYNASTY8REALESTATE_COM_S_LOS_D_SANTOS") GO_TO_WEBSITE("WWW_DYNASTY8REALESTATE_COM") //works g_iWebPageIndexFeedback = 1 g_eWebSiteIndexFeedback = WWW_DYNASTY8REALESTATE_COM POPULATE_MP_PROPERTY_SITE_PIN_MAP(mov) g_iTimeLastBrowserRefresh = GET_GAME_TIMER() bPopulatePropertySitePinMap = TRUE tl63sPopulatePropertySitePinMap = (sGoto) ELIF ARE_STRINGS_EQUAL(sGoto, "WWW_DYNASTY8EXECUTIVEREALTY_COM_S_OFFICES") GO_TO_WEBSITE("WWW_DYNASTY8EXECUTIVEREALTY_COM") // g_iWebPageIndexFeedback = 1 // g_eWebSiteIndexFeedback = WWW_DYNASTY8EXECUTIVEREALTY_COM // // POPULATE_MP_EXEC_PROPERTY_SITE_PIN_MAP(mov, TRUE) // g_iTimeLastBrowserRefresh = GET_GAME_TIMER() // bPopulatePropertySitePinMap = TRUE // // tl63sPopulatePropertySitePinMap = (sGoto) ELIF ARE_STRINGS_EQUAL(sGoto, "FORECLOSURES_MAZE_D_BANK_COM_S_PROPERTIES") GO_TO_WEBSITE("FORECLOSURES_MAZE_D_BANK_COM") // g_iWebPageIndexFeedback = 1 // g_eWebSiteIndexFeedback = FORECLOSURES_MAZE_D_BANK_COM // // POPULATE_MP_BIKER_PROPERTY_SITE_PIN_MAP(mov, TRUE) // g_iTimeLastBrowserRefresh = GET_GAME_TIMER() // bPopulatePropertySitePinMap = TRUE // // tl63sPopulatePropertySitePinMap = (sGoto) ELIF ARE_STRINGS_EQUAL(sGoto, "WWW_THEDIAMONDCASINOANDRESORT_COM_S_SUITES") OR ARE_STRINGS_EQUAL(sGoto, "WWW_THEDIAMONDCASINOANDRESORT_COM_S_RENOVATE") // GO_TO_WEBSITE("WWW_THEDIAMONDCASINOANDRESORT_COM") // // g_iWebPageIndexFeedback = 1 // g_eWebSiteIndexFeedback = WWW_THEDIAMONDCASINOANDRESORT_COM // POPULATE_MP_CASINO_PROPERTY_SITE_PIN_MAP(mov) g_iTimeLastBrowserRefresh = GET_GAME_TIMER() bPopulatePropertySitePinMap = TRUE g_bPropertyRefreshTrigger = TRUE // // tl63sPopulatePropertySitePinMap = ("WWW_THEDIAMONDCASINOANDRESORT_COM") ENDIF bTempFirstLoad = TRUE ENDIF IF ChildInitStage != 0 // If the first stage is complete then IF bPanicShutdownStart // Check for panic bailout SET_BROWSER_OPEN(FALSE) ENDIF ENDIF IF NOT bHasLoadedChildContent INT iStageTimeout = 0 BOOL bTimedOut = FALSE SWITCH ChildInitStage CASE 0 WHILE NOT HAS_SCALEFORM_CONTAINER_MOVIE_LOADED_INTO_PARENT(mov) AND (!bTimedOut) CPRINTLN(DEBUG_INTERNET, "Web browser stage 0 startup - waiting for HAS_SCALEFORM_CONTAINER_MOVIE_LOADED_INTO_PARENT (iStageTimeout:", iStageTimeout, ")") BROWSER_CURSOR_LOADING(FALSE) IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF iStageTimeout += FLOOR(0 +@ 1000) IF iStageTimeout > 10000 CPRINTLN(DEBUG_INTERNET, "Browser timed out waiting for scaleform in stage 0") bTimedOut = TRUE ENDIF RENDER_BROWSER() IF NOT HAS_SCALEFORM_CONTAINER_MOVIE_LOADED_INTO_PARENT(mov) AND (!bTimedOut) AND (iStageTimeout > 2000) AND(IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL) OR IS_DISABLED_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, "FORCE_CLOSE_BROWSER from waiting web browser stage 0 startup.") FORCE_CLOSE_BROWSER() SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov) EXIT ENDIF WAIT(0) ENDWHILE IF !bTimedOut CPRINTLN(DEBUG_INTERNET, "Scaleform return true to HAS_SCALEFORM_CONTAINER_MOVIE_LOADED_INTO_PARENT after ", iStageTimeout, "seconds, move to stage two") ChildInitStage = 2 ELSE CASSERTLN(DEBUG_INTERNET, "FORCE_CLOSE_BROWSER due to timeout, this means scaleform did not return true to HAS_SCALEFORM_CONTAINER_MOVIE_LOADED_INTO_PARENT in 10 seconds") FORCE_CLOSE_BROWSER() ENDIF BREAK CASE 2 CPRINTLN(DEBUG_INTERNET, "Web browser stage 2 - complete, calling init") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"INITIALISE_WEBSITE") END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "IS_SITE_DYNAMIC") fudp = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() iStageTimeout = g_iBrowserTimer + 6000 bTimedOut = FALSE CPRINTLN(DEBUG_INTERNET, "Appinternet waiting for site response in stage 3, waiting for IS_SITE_DYNAMIC to return...") WHILE (NOT IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(fudp)) AND (!bTimedOut) BROWSER_CURSOR_LOADING(FALSE) IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER() IF g_iBrowserTimer > iStageTimeout bTimedOut = TRUE ELSE WAIT(0) ENDIF ENDWHILE IF NOT bTimedOut fudret = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(fudp) ELSE //assume the bugger is static and throw an assert fudret = 0 CASSERTLN(DEBUG_INTERNET, " Browser timed out waiting for IS_SITE_DYNAMIC to return true. Pass this bug to Default Levels.") ENDIF DO_WEBSITE_ANALYTICS_HASH_SET() IF fudret = 1 iStaticLastPage = -1 iStaticCurrentPage = 0 eStaticLastSite = INVALID_WEBSITE_INDEX eStaticCurrentSite = WWW_NOT_EXIST CPRINTLN(DEBUG_INTERNET, " Dynamic site ID check.") bDynamic = TRUE CPRINTLN(DEBUG_INTERNET, " Waiting a second before calling GET_CURRENT_WEBSITE_ID() on currently loaded dynamic page.") // GET_CURRENT_WEBSITE_ID() takes a moment to line up iReturnPadding = 10 WHILE iReturnPadding != 0 --iReturnPadding IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE pgi = GET_CURRENT_WEBPAGE_ID() wsi = INT_TO_ENUM(WEBSITE_INDEX_ENUM, GET_CURRENT_WEBSITE_ID()) //CPRINTLN(DEBUG_INTERNET, "GET_CURRENT_WEBPAGE_ID_WRAPPED = ", pgi ," GET_CURRENT_WEBSITE_ID_WRAPPED = ", wsi) IF pgi != 0 IF pgi != iPageIDCheck iPageIDLast = iPageIDCheck iPageIDCheck = pgi ENDIF ELSE pgi = iPageIDCheck ENDIF IF wsi != WWW_NOT_EXIST IF wsi != eSiteIDCheck iCurrentSiteTimer = 0 CPRINTLN(DEBUG_INTERNET, "Resetting site timer") ENDIF eSiteIDCheck = wsi ELSE wsi = eSiteIDCheck ENDIF SWITCH g_BrowserStartState CASE SBSS_Default CPRINTLN(DEBUG_INTERNET, "SWITCH g_BrowserStartState -> SBSS_Default") IF wsi = WWW_EYEFIND_INFO LOAD_EYEFIND_TEXT_SLOT() ENDIF CPRINTLN(DEBUG_INTERNET, "about to call SF_UPDATE_DYNAMIC_SITE_CONTENT from g_BrowserStartState -> SBSS_Default") SF_UPDATE_DYNAMIC_SITE_CONTENT((wsi), pgi, mov, sRepeatInfo, spfc, TRUE) bUpdatedEyeFindNewsThisFrame = FALSE // make sure the next call to SF_UPDATE_DYNAMIC_SITE_CONTENT doesn't update the news story IF wsi = WWW_LIFEINVADER_COM IF bIsInternetTextSupported // We must make sure the Lifeinvader text has loaded before progressing WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(SHOP_TEXT_SLOT) RENDER_BROWSER() CPRINTLN(DEBUG_INTERNET, "Waiting for Lifeinvader text to load") WAIT(0) ENDWHILE IF HAS_ADDITIONAL_TEXT_LOADED(SHOP_TEXT_SLOT) CPRINTLN(DEBUG_INTERNET, "Lifeinvader text loaded!") ENDIF //UPDATE_LIFEINVADER_PAGE(mov) g_iTimeLastBrowserRefresh = GET_GAME_TIMER() - WEB_BROWSER_PAGE_REFRESH_RATE ELSE CPRINTLN(DEBUG_INTERNET, " load lifeinvader text failed bIsInternetTextSupported = FALSE") ENDIF ENDIF BREAK CASE SBSS_LifeInvader CASE SBSS_LifeInvader_BrucieResponse CPRINTLN(DEBUG_INTERNET, "SWITCH g_BrowserStartState -> SBSS_LifeInvader or SBSS_LifeInvader_BrucieResponse") CPRINTLN(DEBUG_INTERNET, "LFTUTORIALPRINT!") bLifeInvaderTutorialMode = TRUE SF_UPDATE_DYNAMIC_SITE_CONTENT((wsi),pgi,mov, sRepeatInfo, spfc) BREAK ENDSWITCH CPRINTLN(DEBUG_INTERNET, " Website ", GET_WEBSITE_FROM_INDEX(wsi), " is dynamic...") // IF (wsi = WWW_EYEFIND_INFO) // IF g_bInMultiplayer // AND NOT g_bBrowser_MBANKHELP_seen // IF DOES_LOCAL_PLAYER_STAT_OWN_DEFUNCT_BASE() // CPRINTLN(DEBUG_INTERNET, " - display MBANKHELP (iStaticCurrentPage: ", iStaticCurrentPage, "), already owns DBASE") // g_bBrowser_MBANKHELP_seen = TRUE // ELSE // CPRINTLN(DEBUG_INTERNET, " - display MBANKHELP (iStaticCurrentPage: ", iStaticCurrentPage, ")") // // SET_GLOBAL_BROWSER_HELP_MESSAGE_STRUCT("MBANKHELP", DEFAULT, FALSE) // iTutTimer = g_iBrowserTimer + 7500 // g_bBrowser_MBANKHELP_seen = TRUE // ENDIF // ENDIF // ENDIF ELSE CPRINTLN(DEBUG_INTERNET, " Website ", GET_WEBSITE_FROM_HASH(g_sLastSiteHash), " not dynamic...") CPRINTLN(DEBUG_INTERNET, " Waiting a second before calling GET_CURRENT_WEBSITE_ID() on currently loaded dynamic page.") // GET_CURRENT_WEBSITE_ID() takes a moment to line up iReturnPadding = 10 WHILE iReturnPadding != 0 --iReturnPadding IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE DO_STATIC_SITE_CHECKS() bDynamic = FALSE IF g_sLastSiteHash = HASH("WWW_FAMEORSHAME_NET") IF GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_4) CPRINTLN(DEBUG_INTERNET, "Entered Fame Or Shame - Post Family 4") ELSE CPRINTLN(DEBUG_INTERNET, "Entered Fame Or Shame - Pre Family 4") BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_DATA_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) END_SCALEFORM_MOVIE_METHOD() ENDIF ENDIF BOOL bDisableVideo bDisableVideo = FALSE // B*1557251 - Disable video on websites when cinema or tv script is active IF NOT bDisableVideo IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("act_cinema")) <> 0 CPRINTLN(DEBUG_INTERNET, "Disabling video functionality for ", GET_WEBSITE_FROM_HASH(g_sLastSiteHash), " as cinema script is active.") bDisableVideo = TRUE ELIF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("ob_tv")) <> 0 CPRINTLN(DEBUG_INTERNET, "Disabling video functionality for ", GET_WEBSITE_FROM_HASH(g_sLastSiteHash), " as tv object script is active.") bDisableVideo = TRUE ELIF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("am_mp_property_int")) <> 0 // Stop internet videos from working in MP apartments (url:bugstar:1605987) CPRINTLN(DEBUG_INTERNET, "Disabling video functionality for ", GET_WEBSITE_FROM_HASH(g_sLastSiteHash), " as property script is active.") bDisableVideo = TRUE ENDIF ENDIF // B*5248616 - Nightclub Purchase Flow - Preview bink videos are not suppressed in the Hangar, but do not play. IF NOT bDisableVideo IF IS_PLAYER_IN_HANGAR(PLAYER_ID()) PLAYER_INDEX hangarOwner hangarOwner = globalPlayerBD[NATIVE_TO_INT(PLAYER_ID())].SimpleInteriorBD.propertyOwner IF hangarOwner != INVALID_PLAYER_INDEX() IF IS_PLAYER_HANGAR_FURNITURE_TRADITIONAL_PURCHASED(hangarOwner) OR IS_PLAYER_HANGAR_FURNITURE_MODERN_PURCHASED(hangarOwner) CPRINTLN(DEBUG_INTERNET, "Disabling video functionality for ", GET_WEBSITE_FROM_HASH(g_sLastSiteHash), " as player is in ", GET_PLAYER_NAME(hangarOwner), " hangar which has a tv.") bDisableVideo = TRUE ENDIF ENDIF ENDIF ENDIF // B*5248616 - Nightclub Purchase Flow - Preview bink videos are not suppressed in the Hangar, but do not play. IF NOT bDisableVideo IF IS_PLAYER_IN_CASINO(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, "Disabling video functionality for ", GET_WEBSITE_FROM_HASH(g_sLastSiteHash), " as player is in casino which has a tv.") bDisableVideo = TRUE ELIF IS_PLAYER_IN_CASINO_APARTMENT(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, "Disabling video functionality for ", GET_WEBSITE_FROM_HASH(g_sLastSiteHash), " as player is in casino apartment which has a tv.") bDisableVideo = TRUE ELIF IS_PLAYER_IN_ARCADE_PROPERTY(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, "Disabling video functionality for ", GET_WEBSITE_FROM_HASH(g_sLastSiteHash), " as player is in arcade which has a tv.") bDisableVideo = TRUE ENDIF IF g_sLastSiteHash = HASH("WWW_THEDIAMONDCASINOANDRESORT_COM") IF NOT IS_GAMBLING_APPROVED_REGION() CPRINTLN(DEBUG_INTERNET, "Disabling video functionality for ", GET_WEBSITE_FROM_HASH(g_sLastSiteHash), " restricted region.") bDisableVideo = TRUE ENDIF ENDIF ENDIF IF bDisableVideo // Websites with embedded video IF g_sLastSiteHash = HASH("WWW_FAMEORSHAME_NET") OR g_sLastSiteHash = HASH("WWW_JACKHOWITZER_COM") OR g_sLastSiteHash = HASH("WWW_KUNGFURAINBOWLAZERFORCE_COM") OR g_sLastSiteHash = HASH("WWW_PRINCESSROBOTBUBBLEGUM_COM") OR g_sLastSiteHash = HASH("WWW_REPUBLICANSPACERANGERS_COM") OR g_sLastSiteHash = HASH("WWW_RIGHTEOUSSLAUGHTER7_COM") OR g_sLastSiteHash = HASH("FORECLOSURES_MAZE_D_BANK_COM") OR g_sLastSiteHash = HASH("WWW_THEDIAMONDCASINOANDRESORT_COM") DISABLE_VIDEO_PLAYBACK() ELSE bVideoDisabled = FALSE ENDIF ENDIF // DISABLE PRINCESS ROBOT BUBBLEGUM ON PC VERSION FOR RATINGS BUILD - See B* 2199116 IF IS_PC_VERSION() AND NOT IS_DLC_PRESENT(HASH("patchDay3NG")) IF g_sLastSiteHash = HASH("WWW_PRINCESSROBOTBUBBLEGUM_COM") CPRINTLN(DEBUG_INTERNET, "Disabling video functionality for Princess Robot Bubblegum, as this is now \"patchDay3NG\" DLC.") DISABLE_VIDEO_PLAYBACK() ENDIF ENDIF // Disable Jack Howitzer for Japanese build #IF IS_JAPANESE_BUILD IF g_sLastSiteHash = HASH("WWW_JACKHOWITZER_COM") CPRINTLN(DEBUG_INTERNET, "Disabling video functionality for Japanese build") DISABLE_VIDEO_PLAYBACK() ENDIF #ENDIF // Windmill video hasn't got a standalone clip at present IF g_sLastSiteHash = HASH("WWW_SAWATERANDPOWER_COM") CPRINTLN(DEBUG_INTERNET, "Disabling video functionality as video is not available as a standalone.") DISABLE_VIDEO_PLAYBACK() ENDIF ENDIF ChildInitStage = 3 bHasLoadedChildContent = TRUE BREAK ENDSWITCH // Child content is loaded, check if anything needs to change ELSE IF bPanicShutdownStart SET_BROWSER_OPEN(FALSE) ENDIF //check if child movie has changed //cm = GET_SCALEFORM_CONTAINER_MOVIE_REQUESTED() IF NOT HAS_SCALEFORM_CONTAINER_MOVIE_LOADED_INTO_PARENT(mov)//NOT (cm = NULL) //update is happening CPRINTLN(DEBUG_INTERNET, " Site change detected!") IF bStreamLoaded OR bDoLoadStream STOP_STREAM() CPRINTLN(DEBUG_INTERNET, "appInternet: Trying to stop streamed audio") bStreamLoaded = FALSE bDoLoadStream = FALSE ENDIF IF bAWStreamLoaded OR bDoLoadAWStream STOP_STREAM() CPRINTLN(DEBUG_INTERNET, "appInternet: Trying to stop streamed arena wars audio") bAWStreamLoaded = FALSE bDoLoadAWStream = FALSE ENDIF IF HAS_ADDITIONAL_TEXT_LOADED(SHOP_TEXT_SLOT) CPRINTLN(DEBUG_INTERNET, "Clearing SHOP_TEXT_SLOT on website change") CLEAR_ADDITIONAL_TEXT(SHOP_TEXT_SLOT, FALSE) RESET_LIFEINVADER() // if the shop text has loaded, we were just on Lifeinvader but have left it, reset the vars for it ENDIF bHasLoadedChildContent = FALSE g_bForceBrowserRefresh = FALSE ChildInitStage = 0//now goes to init stage ELSE BOOL bChangeDetected = FALSE IF bDynamic // If the site is dynamic then keep an eye on page changes // Check for page index change iPgBack = GET_CURRENT_WEBPAGE_ID() wsi = INT_TO_ENUM(WEBSITE_INDEX_ENUM, GET_CURRENT_WEBSITE_ID()) //CPRINTLN(DEBUG_INTERNET, "WEBDEBUG : DYNAMIC : GET_CURRENT_WEBPAGE_ID_WRAPPED = ", iPgBack ," GET_CURRENT_WEBSITE_ID_WRAPPED = ", wsi) WEBSITE_INDEX_ENUM wsiLast = eSiteIDCheck IF wsi != WWW_NOT_EXIST eSiteIDCheck = wsi ENDIF IF iPgBack != 0 iPageIDCheck = iPgBack ENDIF IF iPageIDCheck != iPageIDLast OR eSiteIDCheck != wsiLast OR g_sLastLastSiteHash != g_sLastSiteHash // to catch situation between market pages with same index g_sLastLastSiteHash = g_sLastSiteHash bSelectionHoldActionDetector = FALSE //do site and page specific callbacks BOOL bDoStockFunctionality = FALSE SWITCH eSiteIDCheck CASE WWW_BAWSAQ_COM // Coming from somewhere else, update ticker IF wsiLast != WWW_BAWSAQ_COM g_bTickerPriceChange = TRUE ENDIF bDoStockFunctionality = TRUE BREAK CASE WWW_EPSILONPROGRAM_COM // Setup audio trigger IF NOT bStreamLoaded bDoLoadStream = TRUE ENDIF BREAK CASE WWW_LIFEINVADER_COM IF (NOT IS_CURRENTLY_ON_MISSION_TO_TYPE()) AND (NOT bLifeInvaderTutorialMode) //redirect broke the back button functionality. //killing it because this site is placeholder these days //CPRINTLN(DEBUG_INTERNET, "Lifeinvader redirect") //GO_TO_WEBSITE("WWW_LIFEINVADER_COM") ELSE SWITCH iPageIDCheck CASE 6 g_bLifeInvaderMissionMessageToBruciePosted = TRUE BREAK CASE 8 g_bLifeInvaderMissionResponseToBruciePosted = TRUE BREAK ENDSWITCH ENDIF BREAK CASE WWW_LCN_D_EXCHANGE_COM // Coming from somewhere else, update ticker IF wsiLast != WWW_LCN_D_EXCHANGE_COM g_bTickerPriceChange = TRUE ENDIF bDoStockFunctionality = TRUE BREAK CASE WWW_ARENAWAR_TV // Setup audio trigger IF NOT bAWStreamLoaded bDoLoadAWStream = TRUE ENDIF BREAK ENDSWITCH STOCK_SYSTEM_CHECK(bDoStockFunctionality) //IF g_iLastSelectedWebIndex <> 22 //AND g_iLastSelectedWebIndex <> 23 //AND g_eWebSiteIndexFeedback <> 2 IF eSiteIDCheck = WWW_EYEFIND_INFO LOAD_EYEFIND_TEXT_SLOT() ENDIF CPRINTLN(DEBUG_INTERNET, "about to call SF_UPDATE_DYNAMIC_SITE_CONTENT [iPageIDCheck != iPageIDLast:", iPageIDCheck != iPageIDLast, "] OR [eSiteIDCheck != wsiLast:", eSiteIDCheck != wsiLast, "] OR [g_sLastLastSiteHash != g_sLastSiteHash:", g_sLastLastSiteHash != g_sLastSiteHash, "] , bUpdatedEyeFindNewsThisFrame = ", bUpdatedEyeFindNewsThisFrame) SF_UPDATE_DYNAMIC_SITE_CONTENT(eSiteIDCheck,iPageIDCheck,mov, sRepeatInfo, spfc, bUpdatedEyeFindNewsThisFrame) bUpdatedEyeFindNewsThisFrame = TRUE // make sure the next call to SF_UPDATE_DYNAMIC_SITE_CONTENT resets the update's the news story iPageIDLast = iPageIDCheck IF bDoLoadStream IF IS_GAME_IN_CONTROL_OF_MUSIC() // Fix for TRC 1590789 CPRINTLN(DEBUG_INTERNET, "Appinternet waiting for site music to load:LOAD_STREAM(MUSIC, EPSILONISM_SITE_MUSIC)") WHILE NOT LOAD_STREAM("MUSIC", "EPSILONISM_SITE_SOUNDS") BROWSER_CURSOR_LOADING(FALSE) IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE bStreamLoaded = TRUE PLAY_STREAM_FRONTEND() bDoLoadStream = FALSE START_AUDIO_SCENE("WEB_EPSILONISM_SITE_MUSIC_SCENE") ELSE CPRINTLN(DEBUG_INTERNET, "Appinternet wanted to stream Epsilon music but IS_GAME_IN_CONTROL_OF_MUSIC returned false") bStreamLoaded = FALSE bDoLoadStream = FALSE ENDIF ENDIF IF bDoLoadAWStream IF IS_GAME_IN_CONTROL_OF_MUSIC() CPRINTLN(DEBUG_INTERNET, "Appinternet waiting for arena wars site music to load:LOAD_STREAM(MUSIC, DLC_AW_Arena_Websites_Sounds)") WHILE NOT LOAD_STREAM("MUSIC", "DLC_AW_Arena_Websites_Sounds") BROWSER_CURSOR_LOADING(FALSE) IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )) END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_ANALOG_STICK_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0) END_SCALEFORM_MOVIE_METHOD() fMouseWheelScrollSpeed = 0.0 ENDIF RENDER_BROWSER() WAIT(0) ENDWHILE bAWStreamLoaded = TRUE PLAY_STREAM_FRONTEND() bDoLoadAWStream = FALSE // START_AUDIO_SCENE("DLC_AW_Arena_Websites_Sounds") ELSE CPRINTLN(DEBUG_INTERNET, "Appinternet wanted to stream arena wars music but IS_GAME_IN_CONTROL_OF_MUSIC returned false") bAWStreamLoaded = FALSE bDoLoadAWStream = FALSE ENDIF ENDIF ELSE // Do temp debug stock modifier key check //BOOL bDebugRaiseKey = FALSE #IF IS_DEBUG_BUILD IF NOT bDebugRaiseKey IF IS_KEYBOARD_KEY_PRESSED(KEY_K) bDebugRaiseKey = TRUE CPRINTLN(DEBUG_INTERNET, "BRT bought modifier posted.") //BAWSAQ_INTERNAL_INCREMENT_MODIFIER(BSMF_VA_BOUGHT_VH_BRUTE,25) ENDIF ELSE IF NOT IS_KEYBOARD_KEY_PRESSED(KEY_K) bDebugRaiseKey = FALSE ENDIF ENDIF //BOOL bDebugCrashKey = FALSE IF NOT bDebugCrashKey IF IS_KEYBOARD_KEY_PRESSED(KEY_L) bDebugCrashKey = TRUE CPRINTLN(DEBUG_INTERNET, "BRT destroy modifier posted.") //BAWSAQ_INTERNAL_INCREMENT_MODIFIER(BSMF_VA_DESTROYED_VH_BRUTE,25) ENDIF ELSE IF NOT IS_KEYBOARD_KEY_PRESSED(KEY_L) bDebugCrashKey = FALSE ENDIF ENDIF #ENDIF // Do update if on the stock site and on a page that should refresh IF g_bStockMarketBrowserUpdateTick IF (g_iWebPageIndexFeedback = 4) IF(NOT((iPageIDCheck = 9) OR (iPageIDCheck = 8) )) g_bForceBrowserRefresh = TRUE ENDIF ENDIF ENDIF g_bStockMarketBrowserUpdateTick = FALSE IF g_bForceBrowserRefresh IF eSiteIDCheck = WWW_EYEFIND_INFO LOAD_EYEFIND_TEXT_SLOT() ENDIF CPRINTLN(DEBUG_INTERNET, "about to call SF_UPDATE_DYNAMIC_SITE_CONTENT from g_bForceBrowserRefresh TRUE : bUpdatedEyeFindNewsThisFrame = ", bUpdatedEyeFindNewsThisFrame) g_bForceBrowserRefresh = FALSE SF_UPDATE_DYNAMIC_SITE_CONTENT(eSiteIDCheck,iPageIDCheck,mov, sRepeatInfo, spfc, bUpdatedEyeFindNewsThisFrame) bUpdatedEyeFindNewsThisFrame = TRUE // make sure the next call to SF_UPDATE_DYNAMIC_SITE_CONTENT resets the update's the news story ENDIF ENDIF ELSE // Static site, clear settings that could mess stuff up bSelectionHoldActionDetector = FALSE DO_STATIC_SITE_CHECKS() ENDIF IF NOT bChangeDetected IF g_iPendingBrowserTimer > -1 IF g_iPendingBrowserTimer < g_iBrowserTimer BOOL bSafeToCall_GO_TO_WEBPAGE = TRUE IF NOT IS_STRING_NULL_OR_EMPTY(tl63sPropertyResultsWebpage) WEBSITE_INDEX_ENUM eSite = INT_TO_ENUM(WEBSITE_INDEX_ENUM, GET_CURRENT_WEBSITE_ID()) // fudret IF (eSite = WWW_DYNASTY8REALESTATE_COM) AND ARE_STRINGS_EQUAL(tl63sPropertyResultsWebpage, "WWW_DYNASTY8REALESTATE_COM") OR (eSite = WWW_DYNASTY8EXECUTIVEREALTY_COM) AND ARE_STRINGS_EQUAL(tl63sPropertyResultsWebpage, "WWW_DYNASTY8EXECUTIVEREALTY_COM") OR (eSite = FORECLOSURES_MAZE_D_BANK_COM) AND ARE_STRINGS_EQUAL(tl63sPropertyResultsWebpage, "FORECLOSURES_MAZE_D_BANK_COM") OR (eSite = WWW_ARENAWAR_TV) AND ARE_STRINGS_EQUAL(tl63sPropertyResultsWebpage, "WWW_ARENAWAR_TV") OR (eSite = WWW_THEDIAMONDCASINOANDRESORT_COM) AND ARE_STRINGS_EQUAL(tl63sPropertyResultsWebpage, "WWW_THEDIAMONDCASINOANDRESORT_COM") IF (eSite = eStaticCurrentSite) CDEBUG1LN(DEBUG_INTERNET, "SWITCH_TO_PROPERTY_RESULTS_PAGE - eSite:", GET_WEBSITE_FROM_INDEX(eSite), ", tl63sPropertyResultsWebpage:\"", tl63sPropertyResultsWebpage, "\", all ok") ELSE CDEBUG1LN(DEBUG_INTERNET, "SWITCH_TO_PROPERTY_RESULTS_PAGE - eSite:", GET_WEBSITE_FROM_INDEX(eSite), ", eStaticCurrentSite:", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), ", tl63sPropertyResultsWebpage:\"", tl63sPropertyResultsWebpage, "\", all ok") ENDIF ELSE // IF (eSite = eStaticCurrentSite) CASSERTLN(DEBUG_INTERNET, "SWITCH_TO_PROPERTY_RESULTS_PAGE - eSite:", GET_WEBSITE_FROM_INDEX(eSite), ", tl63sPropertyResultsWebpage:\"", tl63sPropertyResultsWebpage, "\", bail from success page") ELSE CASSERTLN(DEBUG_INTERNET, "SWITCH_TO_PROPERTY_RESULTS_PAGE - eSite:", GET_WEBSITE_FROM_INDEX(eSite), ", eStaticCurrentSite:", GET_WEBSITE_FROM_INDEX(eStaticCurrentSite), ", tl63sPropertyResultsWebpage:\"", tl63sPropertyResultsWebpage, "\", bail from success page") ENDIF bSafeToCall_GO_TO_WEBPAGE = FALSE ENDIF ENDIF IF bSafeToCall_GO_TO_WEBPAGE CPRINTLN(DEBUG_INTERNET, " change triggered with: ",g_sPendingBrowserPage) BEGIN_SCALEFORM_MOVIE_METHOD(mov,"GO_TO_WEBPAGE") BEGIN_TEXT_COMMAND_SCALEFORM_STRING("STRING") ADD_TEXT_COMPONENT_SUBSTRING_WEBSITE(g_sPendingBrowserPage) END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() ENDIF g_iPendingBrowserTimer = -1 tl63sPropertyResultsWebpage = "" ENDIF ENDIF ENDIF ENDIF IF bDynamic IF eSiteIDCheck = WWW_BAWSAQ_COM OR eSiteIDCheck = WWW_LCN_D_EXCHANGE_COM FLOAT delta = 0 +@ 1.0 INT dms = FLOOR(delta*1000.0) //CPRINTLN(DEBUG_INTERNET, "Procdelta ", dms) QUICK_INCREMENT_INT_STAT(TIME_SPENT_ON_STOCKMARKET,dms) ENDIF ENDIF bControlsEnabled = TRUE IF g_BrowserStartState != SBSS_Launch_Link IF IS_FLOW_HELP_QUEUE_EMPTY() IF (NOT g_savedGlobals.sFinanceData.bBrowserTutorialSeen) AND (NOT g_bInMultiplayer) AND (NOT IS_CURRENTLY_ON_MISSION_OF_ANY_TYPE()) PROGRESS_FIRST_TIME_TUTORIAL() ENDIF ENDIF ENDIF ENDIF //////////////////////////////////////////////////////////////////////// // Epsilon Presentation IF g_iEpsilonTutorialStage != epsTutorialLast IF g_iEpsilonTutorialStage > 6 CPRINTLN(DEBUG_INTERNET, "EPSILON: Presentation has finished!") g_iEpsilonTutorialStage = -1 ENDIF IF epsTutorialLast = -1 AND g_iEpsilonTutorialStage > 0 // g_bBrowserUserMode = FALSE PAUSE_CLOCK(TRUE) START_EPSILON_PRESENTATION() ELIF g_iEpsilonTutorialStage = -1 AND epsTutorialLast > 0 PAUSE_CLOCK(FALSE) // g_bBrowserUserMode = TRUE ENDIF // The first param passed must be 0. Pass the slideshow page as the second param. // Valid range is 0 to 8 (nine pages to match the audio). IF g_iEpsilonTutorialStage > -1 AND g_iEpsilonTutorialStage < 6 CPRINTLN(DEBUG_INTERNET, "EPSILON: Presentation, stage = ", g_iEpsilonTutorialStage) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PROXY_FUNCTION") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(g_iEpsilonTutorialStage) END_SCALEFORM_MOVIE_METHOD() ENDIF epsTutorialLast = g_iEpsilonTutorialStage ENDIF // Epsilon tutorial in progress update IF g_iEpsilonTutorialStage > -1 UPDATE_EPSILON_PRESENTATION() ENDIF IF bTVon IF IS_PAUSE_MENU_ACTIVE() //B * 1629013 - In MP we need to turn off bink playback if the pause menu is active, as there's not enough memory. CPRINTLN(DEBUG_INTERNET, " Pause menu active: turn off TV") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SUPRESS_HISTORY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) END_SCALEFORM_MOVIE_METHOD() SET_TV_CHANNEL(TVCHANNELTYPE_CHANNEL_NONE) STOP_AUDIO_SCENE("INTERNET_BROWSER_VIDEO_SCENE") bTVOn = FALSE iTVOnTimeoutFrameCount = -1 ELSE SET_TEXT_RENDER_ID(GET_DEFAULT_SCRIPT_RENDERTARGET_RENDER_ID()) SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_AFTER_HUD) SET_SCRIPT_GFX_DRAW_BEHIND_PAUSEMENU(TRUE) DRAW_TV_CHANNEL(0.5,0.5,0.5,0.5,0.0,255,255,255,255) ENDIF IF iTVOnTimeoutFrameCount != -1 INT iFrameCount = GET_FRAME_COUNT() CDEBUG3LN(DEBUG_INTERNET, " TV Frame Count: should turn off TV after ", TO_FLOAT(iTVOnTimeoutFrameCount-iFrameCount)/1000.0, "ms?") IF iFrameCount >= iTVOnTimeoutFrameCount CPRINTLN(DEBUG_INTERNET, " TV Frame Count: turn off TV") BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SUPRESS_HISTORY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) END_SCALEFORM_MOVIE_METHOD() SET_TV_CHANNEL(TVCHANNELTYPE_CHANNEL_NONE) STOP_AUDIO_SCENE("INTERNET_BROWSER_VIDEO_SCENE") bTVOn = FALSE iTVOnTimeoutFrameCount = -1 ENDIF ENDIF ENDIF // Called every frame while the browser is open. IF HAS_NET_TIMER_STARTED(timerAutoCloseDelay) IF HAS_NET_TIMER_EXPIRED(timerAutoCloseDelay, iAutoCloseDelayTime) CPRINTLN(DEBUG_INTERNET, " timerAutoCloseDelay - Auto closing browser!") FORCE_CLOSE_BROWSER() RESET_NET_TIMER(timerAutoCloseDelay) iAutoCloseDelayTime = ciAUTO_CLOSE_DELAY_TIME_DEFAULT ENDIF ENDIF ELSE WAIT(200) ENDIF IF IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD) CPRINTLN(DEBUG_INTERNET, "Browser script hud bail.") g_bBrowserQuitMessage = TRUE ENDIF IF IS_REPLAY_BEING_PROCESSED() g_bBrowserQuitMessage = TRUE ENDIF IF g_bBrowserQuitMessage = TRUE IF bHasLoadedChildContent // no termination during child content load g_bBrowserQuitMessage = FALSE CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: Shutdown due to quit message being posted") FORCE_CLOSE_BROWSER() ENDIF ENDIF IF bSelectionHoldActionDetector IF iSelectionHoldActionRateTracker > 20 BROWSER_SET_CURSOR_STATE("BUSY") IF bSelectionHoldActionPolarity g_iSharesToBuySell+= 1 + ((g_iSharesToBuySell+1)/50) g_bForceBrowserRefresh = TRUE IF g_iSharesToBuySell > g_iSharesBuySellCap g_iSharesToBuySell = g_iSharesBuySellCap ENDIF ELSE g_iSharesToBuySell-= 1 + ((g_iSharesToBuySell+1)/100) g_bForceBrowserRefresh = TRUE ENDIF ELSE ++iSelectionHoldActionRateTracker ENDIF ENDIF IF bPanicShutdownStart SET_BROWSER_OPEN(FALSE) ENDIF #IF IS_DEBUG_BUILD //BOOL DebugAttemptToForceWebsite = FALSE //STRING DebugForceSiteTo = "WWW_EYEFIND_INFO" IF DebugAttemptToForceWebsite DebugAttemptToForceWebsite = FALSE IF DOES_WIDGET_GROUP_EXIST(DebugBrowserWidgets) GO_TO_WEBSITE(GET_CONTENTS_OF_TEXT_WIDGET(forceTo)) ENDIF ENDIF IF DebugLudicrousMoney = TRUE DebugLudicrousMoney = FALSE g_BankAccounts[BANK_ACCOUNT_MICHAEL].iBalance = 2147483647 BANK_FORCE_UPDATE_LINKED_ACCOUNT_STATS(BANK_ACCOUNT_MICHAEL) g_BankAccounts[BANK_ACCOUNT_FRANKLIN].iBalance = 2147483647 BANK_FORCE_UPDATE_LINKED_ACCOUNT_STATS(BANK_ACCOUNT_FRANKLIN) g_BankAccounts[BANK_ACCOUNT_TREVOR].iBalance = 2147483647 BANK_FORCE_UPDATE_LINKED_ACCOUNT_STATS(BANK_ACCOUNT_TREVOR) IF g_bInMultiplayer GIVE_LOCAL_PLAYER_FM_CASH(20000000) ENDIF ENDIF IF !(DebugNagScreen = 0) TRIGGER_BROWSER_NAG_SCREEN(-1, -1, INT_TO_ENUM(NAG_SCREEN_REASON, DebugNagScreen-1)) DebugNagScreen = 0 ENDIF INT iStory IF g_bForceBawsaqNews REPEAT BAWSAQ_STORIES_PER_CATEGORY iStory g_BS_NewsStack[0][iStory] = g_BS_PriceTriggers[iStoryCount[iStory]].s SET_CONTENTS_OF_TEXT_WIDGET(storyHeader[iStory], g_BS_NewsStack[0][iStory].tHeader) SET_CONTENTS_OF_TEXT_WIDGET(storyText[iStory], GET_STRING_FROM_TEXT_FILE(g_BS_NewsStack[0][iStory].tHeader)) ENDREPEAT ELSE REPEAT BAWSAQ_STORIES_PER_CATEGORY iStory SET_CONTENTS_OF_TEXT_WIDGET(storyHeader[iStory], "null") SET_CONTENTS_OF_TEXT_WIDGET(storyText[iStory], "null") ENDREPEAT ENDIF IF bSetOwnedProperties INT iSlot = GET_ACTIVE_CHARACTER_SLOT() SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROPERTY_HOUSE, g_MP_STAT_PROPERTY_HOUSE[iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_1, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_2-1][iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_2, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_3-1][iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_3, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_4-1][iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_4, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_5-1][iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_OFFICE_0-1][iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_CLUBHOUSE, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_CLUBHOUSE-1][iSlot], iSlot) IF g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_CLUBHOUSE-1][iSlot] = 0 REMOVE_FACTORY(GET_OWNED_BUNKER(PLAYER_ID())) ENDIF SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_5, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_6-1][iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR1, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1-1][iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR2, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL2-1][iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_GAR3, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL3-1][iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_IE_WAREHOUSE, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_IE_WAREHOUSE-1][iSlot], iSlot) IF g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_OFFICE_GARAGE_LVL1-1][iSlot] = 0 SET_MP_INT_CHARACTER_STAT(MP_STAT_PROP_OFFICE_MODSHOP, 0) ENDIF SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_HANGAR, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_HANGAR-1][iSlot], iSlot) #IF FEATURE_SUMMER_2020 SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_6, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_7-1][iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_7, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_8-1][iSlot], iSlot) #ENDIF SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_8, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_9-1][iSlot], iSlot) SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_MULTI_PROPERTY_9, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_APT_10-1][iSlot], iSlot) //CDM PROPERTY STAT UPDATE //OLD PROPERTIES // #IF FEATURE_GANG_OPS // SET_HEAVILY_ACCESSED_MP_INT_CHARACTER_STAT(MP_STAT_PROP_XXXXXX, g_MP_STAT_MULTI_PROPERTY[PROPERTY_OWNED_SLOT_XXXXXX-1][iSlot], iSlot) // #ENDIF bSetOwnedProperties = FALSE ENDIF IF bSaveVehicleLabels OPEN_DEBUG_FILE() SITE_BUYABLE_VEHICLE sbv REPEAT TOTAL_BUYABLE_VEHICLES sbv MODEL_NAMES eSBVModel = GET_MODEL_FOR_BUYABLE_VEHICLE(sbv) STRING sSBVLabel = GET_LABEL_BUYABLE_VEHICLE(sbv) STRING sModelDisplayName = GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(eSBVModel) SAVE_STRING_TO_DEBUG_FILE(" \"") SAVE_STRING_TO_DEBUG_FILE(sSBVLabel) SAVE_STRING_TO_DEBUG_FILE("\" \"") SAVE_STRING_TO_DEBUG_FILE(sModelDisplayName) SAVE_STRING_TO_DEBUG_FILE("\"") IF ARE_STRINGS_EQUAL(sSBVLabel, sModelDisplayName) SAVE_STRING_TO_DEBUG_FILE(" are equal") ELSE SAVE_STRING_TO_DEBUG_FILE(" are NOT equal") ENDIF SAVE_NEWLINE_TO_DEBUG_FILE() ENDREPEAT SAVE_NEWLINE_TO_DEBUG_FILE() CLOSE_DEBUG_FILE() bSaveVehicleLabels = FALSE ENDIF #ENDIF // Replaced deatharrest due to scaleform unable to cleanup in one frame... IF IS_PLAYER_DEAD(GET_PLAYER_INDEX()) OR IS_PLAYER_PED_SWITCH_IN_PROGRESS() CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: IS_PLAYER_DEAD or IS_PLAYER_PED_SWITCH_IN_PROGRESS") FORCE_CLOSE_BROWSER() ENDIF IF g_bInMultiplayer AND IS_PLAYER_IN_CORONA() CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: player is in corona") FORCE_CLOSE_BROWSER() ENDIF IF g_bInMultiplayer AND MP_FORCE_TERMINATE_INTERNET_ACTIVE() CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: MP force kill set") FORCE_CLOSE_BROWSER() ENDIF IF NOT g_bInMultiplayer AND SP_FORCE_TERMINATE_INTERNET_ACTIVE() CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: SP force kill set") FORCE_CLOSE_BROWSER() ENDIF #IF IS_DEBUG_BUILD IF b_debug_CatalogueMissingEntries CATALOGUE_MISSING_ENTRIES() b_debug_CatalogueMissingEntries = FALSE ENDIF DEBUG_DRAW_MYSTERIOUS_PAGE_VALUES() #ENDIF ENDWHILE IF g_bInMultiplayer REMOVE_MULTIPLAYER_WALLET_CASH() REMOVE_MULTIPLAYER_BANK_CASH() ENDIF //------------------------------ // Script cleanup starts here! //------------------------------ CPRINTLN(DEBUG_INTERNET, " FORCE_CLOSE_BROWSER: Shutdown due to browser visible set to FALSE") FORCE_CLOSE_BROWSER() // History suppression for Video playback. BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SUPRESS_HISTORY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) END_SCALEFORM_MOVIE_METHOD() //DISABLE_CELLPHONE(FALSE) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHUTDOWN_MOVIE") END_SCALEFORM_MOVIE_METHOD() bControlsEnabled = FALSE DISABLE_CONTROL_ACTIONS_GENERAL() // This delay is here because calling both of these the same frame makes scaleform shit itself... WAIT(0) SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov) mov = NULL SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(buttons) buttons = NULL IF nagScreen != NULL SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(nagScreen) nagScreen = NULL ENDIF INT iGameTime = GET_GAME_TIMER() CPRINTLN(DEBUG_INTERNET, "Waiting for buttons to unload...") WHILE HAS_SCALEFORM_MOVIE_LOADED(buttons) AND GET_GAME_TIMER() <= (iGameTime+0500) DISABLE_CONTROL_ACTIONS_GENERAL() WAIT(0) ENDWHILE #IF IS_DEBUG_BUILD IF HAS_SCALEFORM_MOVIE_LOADED(buttons) CERRORLN(DEBUG_INTERNET, "Still waiting to unload buttons, ", GET_GAME_TIMER() - iGameTime, "ms have passed") ELSE #ENDIF CPRINTLN(DEBUG_INTERNET, "...buttons unloaded in ", GET_GAME_TIMER() - iGameTime, "ms") #IF IS_DEBUG_BUILD ENDIF #ENDIF buttons = NULL IF bStreamLoaded OR bDoLoadStream STOP_STREAM() STOP_AUDIO_SCENE("WEB_EPSILONISM_SITE_MUSIC_SCENE") bStreamLoaded = FALSE ENDIF IF bAWStreamLoaded OR bDoLoadAWStream STOP_STREAM() // STOP_AUDIO_SCENE("DLC_AW_Arena_Websites_Sounds") bAWStreamLoaded = FALSE ENDIF g_BrowserStartState = SBSS_Default IF bIHidRadar DISPLAY_RADAR(TRUE) ENDIF IF bIDisabledCarRadio STOP_AUDIO_SCENE("WEB_GENERAL_BROWSING_SCENE") ENDIF IF bIDisabledAptRadio STOP_AUDIO_SCENE("GTAO_Computer_Screen_Active_Scene") bIDisabledAptRadio = FALSE ENDIF REMOVE_HELP_FROM_FLOW_QUEUE("BS_TUT_1") // Unload the font, this has to happen iGameTime = GET_GAME_TIMER() CPRINTLN(DEBUG_INTERNET, "Waiting for mov to unload...") WHILE HAS_SCALEFORM_MOVIE_LOADED(mov) AND GET_GAME_TIMER() <= (iGameTime+0500) DISABLE_CONTROL_ACTIONS_GENERAL() WAIT(0) ENDWHILE #IF IS_DEBUG_BUILD IF HAS_SCALEFORM_MOVIE_LOADED(mov) CERRORLN(DEBUG_INTERNET, "Still waiting to unload mov, ", GET_GAME_TIMER() - iGameTime, "ms have passed") ELSE #ENDIF CPRINTLN(DEBUG_INTERNET, "...mov unloaded in ", GET_GAME_TIMER() - iGameTime, "ms") #IF IS_DEBUG_BUILD ENDIF #ENDIF mov = NULL DISABLE_CONTROL_ACTIONS_GENERAL() WAIT(0) IF bBrowserShoppingSavePending //IF bBoughtProperty REQUEST_NET_SPEND_COMMON_DATA_UPDATE() REQUEST_SAVE(SSR_REASON_WEBSITE, STAT_SAVETYPE_IMMEDIATE_FLUSH) CPRINTLN(DEBUG_INTERNET, "CDM:REQUEST_SAVE App internet triggering a requested save. Immediate flush.") //ELSE // REQUEST_SAVE(STAT_SAVETYPE_SCRIPT_MP_GLOBALS) //ENDIF //bBoughtProperty = FALSE bBrowserShoppingSavePending = FALSE ENDIF CPRINTLN(DEBUG_INTERNET, " Waiting 10 frames before releasing font...") INT dli2 = g_iBrowserTimer + 500 INT dli = 10 WHILE dli > 0 //SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) //SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) DISABLE_CONTROL_ACTIONS_GENERAL() g_iBrowserTimer += ROUND(0 +@ 1000) WAIT(0) --dli ENDWHILE SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(fontindex) // Delay to prevent button press spillover CPRINTLN(DEBUG_INTERNET, " Closing and waiting to terminate script...") WHILE dli2 > g_iBrowserTimer //SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) //SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) DISABLE_CONTROL_ACTIONS_GENERAL() g_iBrowserTimer += ROUND(0 +@ 1000) WAIT(0) ENDWHILE CLEAR_ADDITIONAL_TEXT(SHOP_TEXT_SLOT, TRUE) // make sure the requested additional text is removed IF g_bInMultiplayer ENABLE_KILL_YOURSELF_OPTION() ENDIF #IF IS_DEBUG_BUILD //Steve T addition for 2133870. Failsafe to make absolutely sure the movie is freed. cdPrintnl() cdPrintstring("AppInternet - Secondary marking of Eyefind email instructional buttons as no longer needed and removing text entry box.") cdPrintnl() #ENDIF SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED (SF_EyefindInstButtonsIndex) //2133870 FORCE_CLOSE_TEXT_INPUT_BOX() //Fix for 2232389 - Prevent the text entry box on PC in the first instance from persisting when the browser has closed. // B*154147 - Restore player's ability to be pushed around IF IS_PLAYER_PLAYING(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " Disabling kinematic mode on player ped.") SET_PED_CONFIG_FLAG(PLAYER_PED_ID(),PCF_UseKinematicModeWhenStationary,FALSE) ENDIF g_bBSWebsiteNoSpaceTrigger = FALSE //Deativate multihead blinders on PC - Should not get here with blinders on - visible lag IF SET_MULTIHEAD_SAFE(FALSE,FALSE,bActivatedMultiheadBlinders, TRUE) bActivatedMultiheadBlinders = FALSE ENDIF CPRINTLN(DEBUG_INTERNET, " Thread terminated!") ENDSCRIPT