///// appSmuggler ///// Mark Richardson - 26/06/17 ///// Bunker app functionality USING "rage_builtins.sch" USING "globals.sch" USING "cellphone_public.sch" USING "commands_zone.sch" USING "menu_public.sch" USING "net_realty_hangar.sch" USING "net_gang_boss.sch" USING "net_simple_interior.sch" //***********Script CONSTS*********** //Local BS consts CONST_INT SM_BS_WAITING_FOR_BUTTON_RETURN_VALUE 0 CONST_INT SM_BS_OVERLAY_SCREEN_ACTIVE 1 CONST_INT SM_BS_LAUNCHED_MISSION 2 CONST_INT SM_BS_PRINTED_PAUSE_MENU_ACTIVE 3 CONST_INT SM_BS_CURRENTLY_PLAYING_TUTORIAL 4 CONST_INT SM_BS_DIALOGUE_TUTORIAL_COMPLETE 5 CONST_INT SM_BS_DONE_SETUP_MISSION_HELP 6 CONST_INT SM_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP 7 CONST_INT SM_BS_HELP_TEXT_TUTORIAL_COMPLETE 8 CONST_INT SM_BS_SETUP_COMPLETE 9 CONST_INT SM_BS_STORED_CARGO_ALL_ONE_TYPE 10 CONST_INT SM_BS_SHOW_BONUS_LOST_HELP 11 CONST_INT SM_BS_SHOW_BONUS_HELP 12 CONST_INT SM_BS_SHOW_SETUP_HELP 13 CONST_INT SM_BS_SELL_BONUS_AVAIABLE 14 CONST_INT ciINPUT_KEYBOARD_DOWN 300 CONST_INT ciINPUT_KEYBOARD_UP 301 CONST_INT NUM_RIVAL_SMUGGLERS 31 CONST_INT MAX_DELIVERABLES_PER_GANG 8 //Button state consts CONST_INT UA_BUTTON_STATE_HIDDEN 0 CONST_INT UA_BUTTON_STATE_DISABLED 1 CONST_INT UA_BUTTON_STATE_ENABLED 2 //Research state consts (Used to avoid ENUM_TO_INT()) CONST_INT UA_RESEARCH_STATE_INACTIVE 0 CONST_INT UA_RESEARCH_STATE_LOCKED 1 CONST_INT UA_RESEARCH_STATE_UNLOCKED 2 //Enum for button indexes returned by SF ENUM SM_BUTTON_INDEXES BUTTON_OVERLAY_CANCEL = 0, BUTTON_OVERLAY_ACCEPT, BUTTON_STEAL_ALL_GOODS, BUTTON_STEAL_GOODS_NARCOTICS, BUTTON_STEAL_GOODS_CHEMICALS, BUTTON_STEAL_GOODS_MEDICAL, BUTTON_STEAL_GOODS_ANIMAL, BUTTON_STEAL_GOODS_ART, BUTTON_STEAL_GOODS_GEMS, BUTTON_STEAL_GOODS_TOBACCO, BUTTON_STEAL_COUNTERFIT_GOODS, BUTTON_NAV_SELL_ALL_GOODS = 13, BUTTON_NAV_SELL_GOODS_NARCOTICS, BUTTON_NAV_SELL_GOODS_CHEMICALS, BUTTON_NAV_SELL_GOODS_MEDICAL, BUTTON_NAV_SELL_GOODS_ANIMAL, BUTTON_NAV_SELL_GOODS_ART, BUTTON_NAV_SELL_GOODS_GEMS, BUTTON_NAV_SELL_GOODS_TOBACCO, BUTTON_NAV_SELL_COUNTERFIT_GOODS, BUTTON_GRAPH_NARCOTICS, BUTTON_GRAPH_CHEMICALS, BUTTON_GRAPH_MEDICAL_SUPPLIES, BUTTON_GRAPH_ANIMAL_MATERIALS, BUTTON_GRAPH_ART, BUTTON_GRAPH_GEMS, BUTTON_GRAPH_TOBACCO, BUTTON_GRAPH_COUNTERFIT_GOODS, BUTTON_ORG_1, BUTTON_ORG_2, BUTTON_ORG_3, BUTTON_ORG_4, BUTTON_ORG_5, BUTTON_NAV_OVERVIEW, BUTTON_STEAL_CARGO, BUTTON_SELL_CARGO ENDENUM //Enum for the current page ID ENUM SM_PAGE_ID PAGE_OVERVIEW = 0, PAGE_STEAL, PAGE_SELL ENDENUM ENUM SMUGGLER_APP_STAGE_ID SM_STAGE_IDLE = 0, //Overlay on screen stages SM_STAGE_CONFIRM_SELL_LAUNCH, //Confirm the launch of a sell mission SM_STAGE_CONFIRM_BUY_LAUNCH, //Confirm the launch of a buy mission SM_STAGE_FAIL_OVERLAY, //Overlay screen for failed mission launches or transactions SM_STAGE_GANG_SIZE_WARNING, //Overlay screen warning the player to hire more gang members SM_STAGE_LAUNCH_SETUP //Overlay screen for launching Setup ENDENUM //***********Script variables*********** INT iBS = 0 INT iPlayerLoop = 0 INT iTutorialDialogueID = -1 INT iTutorialHelpTime = 0 INT iCargoTotal = 0 INT iGangListBS = 0 INT iNumGoons[MAX_NUM_GANGS] INT iGangIndex[MAX_NUM_GANGS] STRING sMissionLanuchFailReason = "" HANGAR_ID eOwnedHangar = HANGAR_ID_INVALID SM_PAGE_ID eCurrentPage = PAGE_OVERVIEW SMUGGLER_APP_STAGE_ID eCurrentStage = SM_STAGE_IDLE eSMUGGLED_GOODS_TYPE eSelectedGoods = eSGT_MIXED SCRIPT_TIMER stExitDelay SCRIPT_TIMER stTutorialTimer SCRIPT_TIMER stCDUpdateTimer SCRIPT_TIMER stHelpTextTutorialTimer SCRIPT_TIMER stStockUpdateTimer structPedsForConversation tutPedStruct //Hangar individal type totals INT iGoodsTotal[ciTOTAL_HANGAR_GOODS_TYPES] //Used to maintain a list of organisations for the securoserv app INT iActiveUsers[NUM_RIVAL_SMUGGLERS] //Needed so we can remove this user from the list if they leave the game TEXT_LABEL_63 tlUserList[NUM_RIVAL_SMUGGLERS] //The Scaleform movie SCALEFORM_INDEX mov SCALEFORM_RETURN_INDEX currentSelectionReturnIndex //Control input variables INT iLeftX INT iLeftY INT iRightX INT iRightY //***********Script functions*********** PROC SCRIPT_CLEANUP(BOOL bDontCleanupBrowserFlag = FALSE, BOOL bPlayExitSound = TRUE) SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov) SET_BROWSER_OPEN(bDontCleanupBrowserFlag) DISABLE_CELLPHONE(FALSE) Unpause_Objective_Text() SET_AUDIO_SCRIPT_CLEANUP_TIME(1000) IF bPlayExitSound PLAY_SOUND_FRONTEND(-1, "Exit", "GTAO_SMG_Hangar_Computer_Sounds") ENDIF IF IS_PC_VERSION() SET_MULTIHEAD_SAFE(FALSE, TRUE, TRUE, TRUE) ENDIF THEFEED_RESUME() IF IS_AUDIO_SCENE_ACTIVE("GTAO_Computer_Screen_Active_Scene") STOP_AUDIO_SCENE("GTAO_Computer_Screen_Active_Scene") ENDIF g_sBusAppManagement.iRenderHandShakeFC = -1 TERMINATE_THIS_THREAD() ENDPROC FUNC eSMUGGLED_GOODS_TYPE GET_SELECTED_GOODS_TYPE() RETURN eSelectedGoods ENDFUNC PROC SET_SMUGGLED_GOODS_TYPE(eSMUGGLED_GOODS_TYPE eNewType) PRINTLN(" SET_SMUGGLED_GOODS_TYPE new type = ", DEBUG_GET_SMUGGLED_GOODS_TYPE_NAME(eNewType)) eSelectedGoods = eNewType ENDPROC /// PURPOSE: /// Grabs the name of our gang. If we're checking the local player we need to /// avoid the restricted account checks: 2770221 FUNC STRING GET_PLAYER_ORGANISATION_NAME(PLAYER_INDEX piPlayer) IF piPlayer = PLAYER_ID() PLAYER_INDEX playerID = GB_GET_THIS_PLAYER_GANG_BOSS(piPlayer) IF playerID != INVALID_PLAYER_INDEX() STRING stReturn = GB_TO_STRING(GlobalplayerBD_FM_3[NATIVE_TO_INT(playerID)].sMagnateGangBossData.tlGangName) IF IS_STRING_NULL_OR_EMPTY(stReturn) RETURN GET_DEFAULT_GANG_NAME(playerID) ELSE RETURN stReturn ENDIF ENDIF ENDIF RETURN GB_GET_PLAYER_ORGANIZATION_NAME_AS_A_STRING(piPlayer) ENDFUNC PROC PLAY_CLICK_LINK_SOUND() PLAY_SOUND_FRONTEND(-1, "Click_Link", "GTAO_SMG_Hangar_Computer_Sounds") ENDPROC #IF IS_DEBUG_BUILD FUNC STRING DEBUG_GET_BUTTON_NAME(SM_BUTTON_INDEXES eButton) SWITCH eButton CASE BUTTON_OVERLAY_CANCEL RETURN "BUTTON_OVERLAY_CANCEL" CASE BUTTON_OVERLAY_ACCEPT RETURN "BUTTON_OVERLAY_ACCEPT" CASE BUTTON_STEAL_ALL_GOODS RETURN "BUTTON_STEAL_ALL_GOODS" CASE BUTTON_STEAL_GOODS_NARCOTICS RETURN "BUTTON_STEAL_GOODS_NARCOTICS" CASE BUTTON_STEAL_GOODS_CHEMICALS RETURN "BUTTON_STEAL_GOODS_CHEMICALS" CASE BUTTON_STEAL_GOODS_MEDICAL RETURN "BUTTON_STEAL_GOODS_MEDICAL" CASE BUTTON_STEAL_GOODS_ANIMAL RETURN "BUTTON_STEAL_GOODS_ANIMAL" CASE BUTTON_STEAL_GOODS_ART RETURN "BUTTON_STEAL_GOODS_ART" CASE BUTTON_STEAL_GOODS_GEMS RETURN "BUTTON_STEAL_GOODS_GEMS" CASE BUTTON_STEAL_GOODS_TOBACCO RETURN "BUTTON_STEAL_GOODS_TOBACCO" CASE BUTTON_STEAL_COUNTERFIT_GOODS RETURN "BUTTON_STEAL_COUNTERFIT_GOODS" CASE BUTTON_NAV_OVERVIEW RETURN "BUTTON_NAV_OVERVIEW" CASE BUTTON_STEAL_CARGO RETURN "BUTTON_STEAL_CARGO" CASE BUTTON_SELL_CARGO RETURN "BUTTON_SELL_CARGO" CASE BUTTON_NAV_SELL_ALL_GOODS RETURN "BUTTON_NAV_SELL_ALL_GOODS" CASE BUTTON_NAV_SELL_GOODS_NARCOTICS RETURN "BUTTON_NAV_SELL_GOODS_NARCOTICS" CASE BUTTON_NAV_SELL_GOODS_CHEMICALS RETURN "BUTTON_NAV_SELL_GOODS_CHEMICALS" CASE BUTTON_NAV_SELL_GOODS_MEDICAL RETURN "BUTTON_NAV_SELL_GOODS_MEDICAL" CASE BUTTON_NAV_SELL_GOODS_ANIMAL RETURN "BUTTON_NAV_SELL_GOODS_ANIMAL" CASE BUTTON_NAV_SELL_GOODS_ART RETURN "BUTTON_NAV_SELL_GOODS_ART" CASE BUTTON_NAV_SELL_GOODS_GEMS RETURN "BUTTON_NAV_SELL_GOODS_GEMS" CASE BUTTON_NAV_SELL_GOODS_TOBACCO RETURN "BUTTON_NAV_SELL_GOODS_TOBACCO" CASE BUTTON_NAV_SELL_COUNTERFIT_GOODS RETURN "BUTTON_NAV_SELL_COUNTERFIT_GOODS" CASE BUTTON_GRAPH_NARCOTICS RETURN "BUTTON_GRAPH_NARCOTICS" CASE BUTTON_GRAPH_CHEMICALS RETURN "BUTTON_GRAPH_CHEMICALS" CASE BUTTON_GRAPH_MEDICAL_SUPPLIES RETURN "BUTTON_GRAPH_MEDICAL_SUPPLIES" CASE BUTTON_GRAPH_ANIMAL_MATERIALS RETURN "BUTTON_GRAPH_ANIMAL_MATERIALS" CASE BUTTON_GRAPH_ART RETURN "BUTTON_GRAPH_ART" CASE BUTTON_GRAPH_GEMS RETURN "BUTTON_GRAPH_GEMS" CASE BUTTON_GRAPH_TOBACCO RETURN "BUTTON_GRAPH_TOBACCO" CASE BUTTON_GRAPH_COUNTERFIT_GOODS RETURN "BUTTON_GRAPH_COUNTERFIT_GOODS" CASE BUTTON_ORG_1 RETURN "BUTTON_ORG_1" CASE BUTTON_ORG_2 RETURN "BUTTON_ORG_2" CASE BUTTON_ORG_3 RETURN "BUTTON_ORG_3" CASE BUTTON_ORG_4 RETURN "BUTTON_ORG_4" CASE BUTTON_ORG_5 RETURN "BUTTON_ORG_5" ENDSWITCH RETURN "***INVALID***" ENDFUNC FUNC STRING DEBUG_GET_PAGE_NAME(SM_PAGE_ID ePage) SWITCH ePage CASE PAGE_OVERVIEW RETURN "PAGE_OVERVIEW" CASE PAGE_SELL RETURN "PAGE_SELL" CASE PAGE_STEAL RETURN "PAGE_STEAL" ENDSWITCH RETURN "***INVALID***" ENDFUNC FUNC STRING SMUGGLER_APP_GET_APP_STAGE_DEBUG_NAME(SMUGGLER_APP_STAGE_ID eStage) SWITCH eStage CASE SM_STAGE_IDLE RETURN "SM_STAGE_IDLE" CASE SM_STAGE_CONFIRM_SELL_LAUNCH RETURN "SM_STAGE_CONFIRM_SELL_LAUNCH" CASE SM_STAGE_CONFIRM_BUY_LAUNCH RETURN "SM_STAGE_CONFIRM_BUY_LAUNCH" CASE SM_STAGE_FAIL_OVERLAY RETURN "SM_STAGE_FAIL_OVERLAY" CASE SM_STAGE_GANG_SIZE_WARNING RETURN "SM_STAGE_GANG_SIZE_WARNING" CASE SM_STAGE_LAUNCH_SETUP RETURN "SM_STAGE_LAUNCH_SETUP" ENDSWITCH RETURN "****Invalid****" ENDFUNC #ENDIF /// PURPOSE: /// Returns the current app stage FUNC SMUGGLER_APP_STAGE_ID SMUGGLER_APP_GET_APP_STAGE() RETURN eCurrentStage ENDFUNC /// PURPOSE: /// Sets the current app stage PROC SMUGGLER_APP_SET_APP_STAGE(SMUGGLER_APP_STAGE_ID eNewStage) IF eCurrentStage != eNewStage eCurrentStage = eNewStage PRINTLN(" SMUGGLER_APP_SET_APP_STAGE Setting new stage to: ", SMUGGLER_APP_GET_APP_STAGE_DEBUG_NAME(eNewStage)) ENDIF ENDPROC /// PURPOSE: /// Returns if the overlay screen is currently active FUNC BOOL SMUGGLER_APP_IS_OVERLAY_OPEN() RETURN IS_BIT_SET(iBS, SM_BS_OVERLAY_SCREEN_ACTIVE) ENDFUNC PROC SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON(STRING sReason) sMissionLanuchFailReason = sReason #IF IS_DEBUG_BUILD PRINTLN(" SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON Setting new fail reason: ", GET_FILENAME_FOR_AUDIO_CONVERSATION(sReason)) #ENDIF ENDPROC PROC SMUGGLER_APP_CLEAR_MISSION_LAUNCH_FAIL_REASON() sMissionLanuchFailReason = "" PRINTLN(" SMUGGLER_APP_CLEAR_MISSION_LAUNCH_FAIL_REASON called.") ENDPROC FUNC STRING SMUGGLER_APP_GET_MISSION_LAUNCH_FAIL_REASON() RETURN sMissionLanuchFailReason ENDFUNC /// PURPOSE: /// Sets the mission unavailable value FUNC BOOL CAN_PLAYER_LAUNCH_MISSION(INT iMissionToLaunch) // Check that mission is available IF NOT GB_IS_BOSS_MISSION_AVAILABLE(PLAYER_ID(), iMissionToLaunch, FALSE) CPRINTLN(DEBUG_INTERNET, "CAN_PLAYER_LAUNCH_MISSION: NOPE! mission unavailable") INT iReason = GB_GET_BOSS_MISSION_UNAVAILABLE_REASON(PLAYER_ID(), iMissionToLaunch, FALSE) IF iReason = GB_MU_REASON_GOON_CRITICAL_TO_FME IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("UA_ML_F_GOON1") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("UA_ML_F_GOON2") ELSE SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("UA_ML_F_GOON3") ENDIF ELIF iReason = GB_MU_REASON_GOON_IS_ANIMAL IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G1") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G2") ELSE SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G3") ENDIF ELIF iReason = GB_MU_REASON_GOON_GAMBLING IF GB_IS_PLAYER_BOSS_OF_A_BIKER_GANG(PLAYER_ID()) SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G4") ELIF DOES_PLAYER_OWN_OFFICE(PLAYER_ID()) SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G5") ELSE SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("GENERAL_MLF_G6") ENDIF ELSE SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R6") ENDIF RETURN FALSE ENDIF IF NOT GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_LAUNCH_MISSION: NOPE! GB_IS_PLAYER_BOSS_OF_A_GANG is false") SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("DBG_BUN_NB") RETURN FALSE ENDIF // Check we're not taking part in some other mission IF GB_IS_PLAYER_CRITICAL_TO_JOB(PLAYER_ID()) CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_LAUNCH_MISSION: NOPE! player critical to job") SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R3") RETURN FALSE ENDIF IF NETWORK_IS_ACTIVITY_SESSION() CPRINTLN(DEBUG_INTERNET, " CAN_PLAYER_LAUNCH_MISSION: NOPE! NETWORK_IS_ACTIVITY_SESSION is true") SMUGGLER_APP_SET_MISSION_LAUNCH_FAIL_REASON("BKR_TF_R3") RETURN FALSE ENDIF RETURN TRUE ENDFUNC PROC SHOW_OVERLAY(STRING sTitle, STRING sMessage, STRING sAcceptButtonLabel, STRING sCancelButtonLabel, BOOL bPlayFailSound, BOOL bPlayClickSound, INT iAdditionalINT = -1, SMUGGLER_APP_STAGE_ID eNewAppStage = SM_STAGE_IDLE, INT iSecondAdditionalINT = -1, STRING sAdditionalString = NULL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SHOW_OVERLAY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sTitle) //Build the string we need to display BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sMessage) //These parameters need to be given in the correct order(May need a new function if more are added) IF NOT IS_STRING_NULL_OR_EMPTY(sAdditionalString) //Add the first int if needed IF iadditionalINT != -1 ADD_TEXT_COMPONENT_INTEGER(iadditionalINT) ENDIF //Add the string ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(sAdditionalString) //Add the extra int if needed IF iSecondAdditionalINT != -1 //For messages that use all available parameters: Int-String-Int ADD_TEXT_COMPONENT_INTEGER(iSecondAdditionalINT) ENDIF ELSE IF iadditionalINT != -1 ADD_TEXT_COMPONENT_INTEGER(iadditionalINT) ENDIF ENDIF END_TEXT_COMMAND_SCALEFORM_STRING() SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sAcceptButtonLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sCancelButtonLabel) END_SCALEFORM_MOVIE_METHOD() IF bPlayClickSound PLAY_SOUND_FRONTEND(-1, "Click_Link", "GTAO_SMG_Hangar_Computer_Sounds") ELIF bPlayFailSound PLAY_SOUND_FRONTEND(-1, "Click_Fail", "GTAO_SMG_Hangar_Computer_Sounds") ENDIF SET_BIT(iBS, SM_BS_OVERLAY_SCREEN_ACTIVE) SMUGGLER_APP_SET_APP_STAGE(eNewAppStage) CDEBUG1LN(DEBUG_INTERNET, " SHOW_OVERLAY with title: ", sTitle, " message: ", sMessage, " Accebt button: ", sAcceptButtonLabel, " Cancel button: ", sCancelButtonLabel) ENDPROC PROC HIDE_OVERLAY() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "HIDE_OVERLAY") END_SCALEFORM_MOVIE_METHOD() SMUGGLER_APP_SET_APP_STAGE(SM_STAGE_IDLE) CLEAR_BIT(iBS, SM_BS_OVERLAY_SCREEN_ACTIVE) CDEBUG1LN(DEBUG_INTERNET, " HIDE_OVERLAY") ENDPROC PROC APP_CONTROL_DISABLE() SET_CLEAR_ON_CALL_HUD_THIS_FRAME() IF (NOT IS_SYSTEM_UI_BEING_DISPLAYED()) AND (NOT IS_PAUSE_MENU_ACTIVE()) DISABLE_ALL_CONTROL_ACTIONS(PLAYER_CONTROL) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE) ENDIF ENDPROC PROC SET_INPUT_EXCLUSIVE_AND_ENABLED(CONTROL_TYPE eType, CONTROL_ACTION eAction, BOOL bEnableRelatedActions = TRUE) IF NOT IS_PAUSE_MENU_ACTIVE_EX() SET_INPUT_EXCLUSIVE(eType, eAction) ENABLE_CONTROL_ACTION(eType, eAction, bEnableRelatedActions) ELSE #IF IS_DEBUG_BUILD IF NOT IS_BIT_SET(iBS, SM_BS_PRINTED_PAUSE_MENU_ACTIVE) PRINTLN(", SET_INPUT_EXCLUSIVE_AND_ACTIVE called but IS_PAUSE_MENU_ACTIVE_EX returned true") SET_BIT(iBS, SM_BS_PRINTED_PAUSE_MENU_ACTIVE) ENDIF #ENDIF ENDIF ENDPROC PROC RENDER_SMUGGLER_APP() HIDE_HUD_AND_RADAR_THIS_FRAME() HIDE_SCRIPTED_HUD_COMPONENT_THIS_FRAME(HUD_MP_RANK_BAR) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) APP_CONTROL_DISABLE() IF g_bInMultiplayer SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_MP_CASH)//1544427 SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_MP_MESSAGE) SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH) ENDIF THEFEED_HIDE_THIS_FRAME() SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL,INPUT_FRONTEND_PAUSE) SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) DRAW_RECT_FROM_CORNER(0.0, 0.0, 1.0, 1.0, 0, 0, 0, 255) SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,255) REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME() DISABLE_CELLPHONE_THIS_FRAME_ONLY() DISABLE_ALL_MP_HUD_THIS_FRAME() g_sBusAppManagement.iRenderHandShakeFC = GET_FRAME_COUNT() ENDPROC PROC HANDLE_CANCEL_BUTTON_PRESS() IF NOT IS_HANGAR_SETUP_MISSION_COMPLETE() SCRIPT_CLEANUP() ENDIF IF eCurrentPage = PAGE_OVERVIEW IF NOT SMUGGLER_APP_IS_OVERLAY_OPEN() SCRIPT_CLEANUP() ELSE CDEBUG1LN(DEBUG_INTERNET, " [APP_CLOSE] 2 Back pressed not closing the app. page: ", eCurrentPage, " overlay: ", SMUGGLER_APP_IS_OVERLAY_OPEN()) ENDIF ELIF !SMUGGLER_APP_IS_OVERLAY_OPEN() eCurrentPage = PAGE_OVERVIEW CDEBUG1LN(DEBUG_INTERNET, " [APP_CLOSE] Back pressed not closing the app. page: ", eCurrentPage) //Show the overview page CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SHOW_SCREEN", 0.0) PLAY_SOUND_FRONTEND(-1, "Show_Overview_Menu", "GTAO_SMG_Hangar_Computer_Sounds") EXIT ENDIF IF SMUGGLER_APP_IS_OVERLAY_OPEN() HIDE_OVERLAY() ELSE CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_CANCEL))) ENDIF PLAY_SOUND_FRONTEND(-1, "Click_Back", "GTAO_SMG_Hangar_Computer_Sounds") ENDPROC PROC PASS_INPUTS_TO_SCALEFORM() // bCursorInputProcessed = FALSE #IF IS_DEBUG_BUILD CLEAR_BIT(iBS, SM_BS_PRINTED_PAUSE_MENU_ACTIVE) #ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_LB) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LB) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_LB))) IF eCurrentPage = PAGE_STEAL PRINTLN(" PASS_INPUTS_TO_SCALEFORM LB - New page = PAGE_OVERVIEW") eCurrentPage = PAGE_OVERVIEW PLAY_SOUND_FRONTEND(-1, "Show_Overview_Menu", "GTAO_SMG_Hangar_Computer_Sounds") ELIF eCurrentPage = PAGE_SELL PRINTLN(" PASS_INPUTS_TO_SCALEFORM LB - New page = PAGE_STEAL") eCurrentPage = PAGE_STEAL PLAY_SOUND_FRONTEND(-1, "Show_Source_Menu", "GTAO_SMG_Hangar_Computer_Sounds") ENDIF ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_RB) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RB) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_RB))) IF eCurrentPage = PAGE_OVERVIEW PRINTLN(" PASS_INPUTS_TO_SCALEFORM RB - New page = PAGE_STEAL") eCurrentPage = PAGE_STEAL PLAY_SOUND_FRONTEND(-1, "Show_Source_Menu", "GTAO_SMG_Hangar_Computer_Sounds") ELIF eCurrentPage = PAGE_STEAL PRINTLN(" PASS_INPUTS_TO_SCALEFORM RB - New page = PAGE_STEAL") eCurrentPage = PAGE_SELL PLAY_SOUND_FRONTEND(-1, "Show_Sell_Menu", "GTAO_SMG_Hangar_Computer_Sounds") ENDIF ENDIF IF IS_USING_CURSOR(FRONTEND_CONTROL) SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(ciINPUT_KEYBOARD_UP))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(ciINPUT_KEYBOARD_DOWN))) ENDIF IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_RELEASE_EVENT", TO_FLOAT(ENUM_TO_INT(ciINPUT_KEYBOARD_DOWN))) ENDIF IF IS_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_RELEASE_EVENT", TO_FLOAT(ENUM_TO_INT(ciINPUT_KEYBOARD_UP))) ENDIF ELSE SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_UP))) // bCursorInputProcessed = TRUE ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_DOWN))) //bCursorInputProcessed = TRUE ENDIF ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_LEFT))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_RIGHT))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_ACCEPT))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) HANDLE_CANCEL_BUTTON_PRESS() ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_X) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_X) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_X))) ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_Y) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_Y))) ENDIF IF IS_USING_CURSOR(FRONTEND_CONTROL) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_MOUSE_INPUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_X)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_Y)) //bCursorInputProcessed = TRUE END_SCALEFORM_MOVIE_METHOD() SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SET_INPUT_EVENT", TO_FLOAT(ENUM_TO_INT(INPUT_FRONTEND_ACCEPT))) ENDIf SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL) HANDLE_CANCEL_BUTTON_PRESS() ENDIf ELSE SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_X) SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_Y) INT iLeftXNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_X) INT iLeftYNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_AXIS_Y) IF (iLeftXNew != 127) OR (iLeftX != 127) OR (iLeftYNew != 127) OR (iLeftY != 127) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") iLeftX = iLeftXNew iLeftY = iLeftYNew SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iLeftX) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iLeftY) END_SCALEFORM_MOVIE_METHOD() // bCursorInputProcessed = TRUE ENDIF ENDIF SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_X) SET_INPUT_EXCLUSIVE_AND_ENABLED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_Y) INT iRightXNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_X) INT iRightYNew = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_Y) IF (iRightXNew != 127) OR (iRightX != 127) OR (iRightYNew != 127) OR (iRightY != 127) BOOL bUsingScrollWheel = (IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN)) IF NOT bUsingScrollWheel bUsingScrollWheel = (IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP) OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP)) ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_ANALOG_STICK_INPUT") iRightX = iRightXNew iRightY = iRightYNew SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iRightX) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iRightY) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bUsingScrollWheel) END_SCALEFORM_MOVIE_METHOD() // IF NOT bUsingScrollWheel // bCursorInputProcessed = TRUE // ENDIF ENDIF IF (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y)) AND NOT IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) CPRINTLN(DEBUG_INTERNET," EXITING WEBSITE for Triangle press") SCRIPT_CLEANUP() ENDIF #IF IS_DEBUG_BUILD IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)) SCRIPT_CLEANUP() ENDIF #ENDIF ENDPROC FUNC FLOAT GET_PERCENTAGE_AS_FLOAT(INT a, INT b) RETURN (TO_FLOAT(a)/TO_FLOAT(b) * 100) ENDFUNC /// PURPOSE: /// Converts how scaleform orders the smuggler goods types to the script enum /// Keeping this just in case the order changes later on FUNC eSMUGGLED_GOODS_TYPE CONVERT_SCALEFROM_ORDER_TO_ENUM(INT i) SWITCH i CASE 0 RETURN eSGT_MIXED CASE 1 RETURN eSGT_NARCOTICS CASE 2 RETURN eSGT_CHEMICALS CASE 3 RETURN eSGT_MEDICAL_SUPPLIES CASE 4 RETURN eSGT_ANIMAL_MATERIALS CASE 5 RETURN eSGT_ART_AND_ANTIQUES CASE 6 RETURN eSGT_JEWELRY_AND_GEMSTONES CASE 7 RETURN eSGT_TOBACCO_AND_ALCOHOL CASE 8 RETURN eSGT_COUNTERFEIT_GOODS ENDSWITCH RETURN eSGT_INVALID ENDFUNC /// PURPOSE: /// Converts how scaleform orders the smuggler goods types to the script enum /// Keeping this just in case the order changes later on FUNC INT CONVERT_ENUM_TO_SCALEFORM_ORDER(eSMUGGLED_GOODS_TYPE eGoodsType) SWITCH eGoodsType CASE eSGT_MIXED RETURN 0 CASE eSGT_NARCOTICS RETURN 1 CASE eSGT_CHEMICALS RETURN 2 CASE eSGT_MEDICAL_SUPPLIES RETURN 3 CASE eSGT_ANIMAL_MATERIALS RETURN 4 CASE eSGT_ART_AND_ANTIQUES RETURN 5 CASE eSGT_JEWELRY_AND_GEMSTONES RETURN 6 CASE eSGT_TOBACCO_AND_ALCOHOL RETURN 7 CASE eSGT_COUNTERFEIT_GOODS RETURN 8 ENDSWITCH RETURN 0 ENDFUNC FUNC BOOL BS_DOES_PLAYER_HOLD_ONLY_ONE_CARGO_TYPE() RETURN IS_BIT_SET(iBS, SM_BS_STORED_CARGO_ALL_ONE_TYPE) ENDFUNC FUNC eSMUGGLED_GOODS_TYPE GET_FIRST_OWNED_CARGO_TYPE() INT i REPEAT ciTOTAL_HANGAR_GOODS_TYPES i IF iGoodsTotal[i] > 0 AND i != 0 RETURN CONVERT_SCALEFROM_ORDER_TO_ENUM(i) ENDIF ENDREPEAT RETURN eSGT_INVALID ENDFUNC PROC SEND_HANGAR_DATA_TO_SCALEFORM() STRING sOrgName = GB_GET_PLAYER_ORGANIZATION_NAME_AS_A_STRING(PLAYER_ID()) INT iLocation = 0 INT iStealsComplete = GET_COUNT_OF_HANAGR_BUY_MISSIONS_COMPLETED() INT iSalesCompleted = GET_COUNT_OF_HANAGR_SELL_MISSIONS_COMPLETED() INT iRivalCratesStolen = GET_HANGAR_CONTRABAND_STOLEN_FROM_RIVALS() INT iTotalEarnings = GET_HANAGR_SELL_MISSION_EARNINGS() INT iBonusEarnings = GET_HANAGR_SELL_MISSION_BONUS_EARNINGS() iCargoTotal = GET_LOCAL_PLAYERS_CONTRABAND_UNITS_TOTAL_FOR_HANGAR() INT iStockCapacity = 50 INT iSellPrice = iCargoTotal * GET_UNIT_VALUE_OF_SMUGGLED_GOOD_TYPE(eSGT_MIXED) FLOAT fStealsSuccessRate = GET_PERCENTAGE_AS_FLOAT(iStealsComplete, GET_COUNT_OF_HANAGR_BUY_MISSIONS_UNDERTAKEN()) FLOAT fSalesSuccessRate = GET_PERCENTAGE_AS_FLOAT(iSalesCompleted, GET_COUNT_OF_HANAGR_SELL_MISSIONS_UNDERTAKEN()) fStealsSuccessRate = CLAMP(fStealsSuccessRate, 0.0, 100.0) fSalesSuccessRate = CLAMP(fSalesSuccessRate, 0.0, 100.0) IF IS_HANGAR_IN_FORT_ZANCUDO(eOwnedHangar) iLocation = 1 //Fort Zancudo ENDIF IF BS_DOES_PLAYER_HOLD_ONLY_ONE_CARGO_TYPE() eSMUGGLED_GOODS_TYPE eType = GET_FIRST_OWNED_CARGO_TYPE() iSellPrice = iCargoTotal * GET_UNIT_VALUE_OF_SMUGGLED_GOOD_TYPE(eType) FLOAT fBonusPercent = (GET_SMUGGLER_REWARD_BONUS_PERCENTAGE(eType, iCargoTotal) * 100.0) IF fBonusPercent > 0.0 INT iBonus = GET_REWARD_BONUS_FOR_SMUGGLED_GOOD_TYPE(eType, iCargoTotal) iSellPrice += iBonus ENDIF ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_STATS") SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sOrgName) // Gang name SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iLocation) // LSIA or Zancudo? SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iStealsComplete) // Mission completed count SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fStealsSuccessRate) // Steal success rate SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSalesCompleted) // Sales completed SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSalesSuccessRate) // sales success rate SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iRivalCratesStolen) // Rival crates stolen SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iTotalEarnings) // total earnings from sales SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iBonusEarnings) // Bonus earnings from sales SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iCargoTotal) // Stored crates SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iStockCapacity) // Hangar crate capacity SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellPrice) // Sell all price END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC INIT_CARGO_TOTALS() INT i REPEAT ciTOTAL_HANGAR_GOODS_TYPES i eSMUGGLED_GOODS_TYPE eType = CONVERT_SCALEFROM_ORDER_TO_ENUM(i) iGoodsTotal[i] = GET_COUNT_OF_CONTRABAND_TYPE_IN_HANGAR(eType) PRINTLN(" INIT_CARGO_TOTALS - ", DEBUG_GET_SMUGGLED_GOODS_TYPE_NAME(eType), " Total = ", iGoodsTotal[i]) ENDREPEAT ENDPROC PROC SEND_CARGO_DATA_TO_SCALEFORM(INT iType) // 0 = All cargo // 1 = Narcotics // 2 = Chemicals // 3 = Medical Supplies // 4 = Animal Materials // 5 = Art & Antiques // 6 = Jewelry & Gemstones // 7 = Tobacco & Alcohol // 8 = Counterfeit Goods INT iStockLevel = iGoodsTotal[iType] INT iTotalStockLevel = 50 INT iSellPrice = GET_TOTAL_VALUE_OF_SMUGGLED_GOOD_TYPE(CONVERT_SCALEFROM_ORDER_TO_ENUM(iType), iStockLevel) INT fBonusPercent = ROUND(GET_SMUGGLER_REWARD_BONUS_PERCENTAGE(CONVERT_SCALEFROM_ORDER_TO_ENUM(iType), iStockLevel) * 100.0) IF fBonusPercent > 0.0 INT iBonus = GET_REWARD_BONUS_FOR_SMUGGLED_GOOD_TYPE(CONVERT_SCALEFROM_ORDER_TO_ENUM(iType), iStockLevel) iSellPrice += iBonus SET_BIT(iBS, SM_BS_SELL_BONUS_AVAIABLE) ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_CARGO") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iType) // Cargo type SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iStockLevel) // Current count of this cargo type (percent) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iTotalStockLevel) // Total stock level SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(fBonusPercent)) // Bonus sell for selling just this cargo type SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSellPrice) // sell success rate LS (percent) END_SCALEFORM_MOVIE_METHOD() ENDPROC FUNC INT GET_TIME_IN_SECONDS(INT iTimeMs) RETURN (iTimeMs / 1000) ENDFUNC FUNC INT GET_TIME_REMAINING(SCRIPT_TIMER eTimer, INT iTotalTime) INT iTimeRemaining = (iTotalTime - (ABSI(GET_TIME_DIFFERENCE(GET_NETWORK_TIME(), eTimer.Timer)))) iTimeRemaining = (iTimeRemaining / 1000) RETURN iTimeRemaining ENDFUNC PROC UPDATE_SELL_COOLDOWN_TIMER() IF SMUGGLER_HAS_SELL_COOLDOWN_STARTED() BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_SELL_COOLDOWN") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TIME_REMAINING(g_sSmugglerCDVars.stSellCoolDownTimer, g_sSmugglerCDVars.iSellCooldownTime)) // Time Remaining SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TIME_IN_SECONDS(g_sSmugglerCDVars.iSellCooldownTime) ) // Total time END_SCALEFORM_MOVIE_METHOD() ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_SELL_COOLDOWN") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) // Time Remaining SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) // Total time END_SCALEFORM_MOVIE_METHOD() ENDIF ENDPROC PROC UPDATE_STEAL_COOLDOWN_TIMER() INT i BEGIN_SCALEFORM_MOVIE_METHOD(mov, "UPDATE_STEAL_COOLDOWN") FOR i = 1 TO eSGT_MIXED eSMUGGLED_GOODS_TYPE eType = CONVERT_SCALEFROM_ORDER_TO_ENUM(i) INT iTypeIndex = ENUM_TO_INT(eType) IF SMUGGLER_HAS_STEAL_COOLDOWN_STARTED(eType) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TIME_REMAINING(g_sSmugglerCDVars.stStealCoolDownTimer[iTypeIndex], g_sSmugglerCDVars.iStealCooldownTimes[iTypeIndex])) // Time Remaining ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) // Time Remaining ENDIF ENDFOR END_SCALEFORM_MOVIE_METHOD() ENDPROC FUNC BOOL DOES_PLAYER_HOLD_ONLY_ONE_CARGO_TYPE() INT i INT iCount = 0 REPEAT ciTOTAL_HANGAR_GOODS_TYPES i IF iGoodsTotal[i] > 0 iCount ++ IF iCount > 2 RETURN FALSE ENDIF ENDIF ENDREPEAT PRINTLN(" DOES_PLAYER_HOLD_ONLY_ONE_CARGO_TYPE - iCount = ", iCount) RETURN (iCount <= 2) ENDFUNC PROC SEND_ALL_DATA_TO_SCALEFORM() INT i //Get totals INIT_CARGO_TOTALS() //Determine the mix of products held IF DOES_PLAYER_HOLD_ONLY_ONE_CARGO_TYPE() #IF IS_DEBUG_BUILD IF GET_LOCAL_PLAYERS_CONTRABAND_UNITS_TOTAL_FOR_HANGAR() > 0 PRINTLN(" SEND_ALL_DATA_TO_SCALEFORM - Player holds all cargo of the same type") ELSE PRINTLN(" SEND_ALL_DATA_TO_SCALEFORM - Player holds no cargo") ENDIF #ENDIF SET_BIT(iBS, SM_BS_STORED_CARGO_ALL_ONE_TYPE) ELSE PRINTLN(" SEND_ALL_DATA_TO_SCALEFORM DOES_PLAYER_HOLD_ONLY_ONE_CARGO_TYPE = FALSE") ENDIF //Base data SEND_HANGAR_DATA_TO_SCALEFORM() //Cargo data REPEAT ciTOTAL_HANGAR_GOODS_TYPES i SEND_CARGO_DATA_TO_SCALEFORM(i) ENDREPEAT //Update the cooldown timers UPDATE_STEAL_COOLDOWN_TIMER() UPDATE_SELL_COOLDOWN_TIMER() START_NET_TIMER(stCDUpdateTimer) ENDPROC //////////////////////////////////////////// /// Scaleform methods FUNC BOOL IS_ACCEPT_BUTTON_INPUT_JUST_PRESSED() IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT) RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC MAINTAIN_CHECKS_FOR_CURRENT_SELECTION_ID() IF IS_ACCEPT_BUTTON_INPUT_JUST_PRESSED() IF NOT IS_BIT_SET(iBS, SM_BS_WAITING_FOR_BUTTON_RETURN_VALUE) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "GET_CURRENT_SELECTION") currentSelectionReturnIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() SET_BIT(iBS, SM_BS_WAITING_FOR_BUTTON_RETURN_VALUE) ENDIF ENDIF ENDPROC FUNC BOOL DOES_PLAYER_HAVE_STOCK_OF_GOODS_TO_SELL(eSMUGGLED_GOODS_TYPE eMissionGoodsType) SWITCH eMissionGoodsType CASE eSGT_MIXED RETURN !IS_PLAYERS_HANGAR_CONTRABAND_STORAGE_EMPTY(PLAYER_ID()) DEFAULT RETURN (iGoodsTotal[CONVERT_ENUM_TO_SCALEFORM_ORDER(eMissionGoodsType)] > 0) ENDSWITCH RETURN FALSE ENDFUNC /// PURPOSE: /// Checks if we can launch a sell mission and sets up the overlay screen with the necessary text PROC RUN_INITIAL_SELL_CARGO_CHECKS(eSMUGGLED_GOODS_TYPE eMissionGoodsType, BOOL bIgnoreGangSizeCHeck = FALSE) INT iStockLevel = GET_PLAYERS_CONTRABAND_UNITS_TOTAL_FOR_HANGAR(PLAYER_ID()) IF eMissionGoodsType != eSGT_MIXED iStockLevel = iGoodsTotal[CONVERT_ENUM_TO_SCALEFORM_ORDER(eMissionGoodsType)] ENDIF IF NOT DOES_PLAYER_HAVE_STOCK_OF_GOODS_TO_SELL(eMissionGoodsType) //FAIL: Empty not enough stock TEXT_LABEL_15 tlError = "HAPP_SELL_D1" TEXT_LABEL_15 tlSubString = "" IF eMissionGoodsType != eSGT_MIXED tlError = "HAPP_SELL_D0" tlSubString = GET_HANGAR_STOCK_TYPE_TEXT_LABEL(eMissionGoodsType) ENDIF SHOW_OVERLAY("HAPP_SELL_T", tlError, "OR_OVRLY_OK", "", TRUE, FALSE, DEFAULT, DEFAULT, DEFAULT, tlSubString) ELIF SMUGGLER_HAS_SELL_COOLDOWN_STARTED() SHOW_OVERLAY("HAPP_SELL_T", "HAPP_SELL_C3", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF NOT CAN_PLAYER_LAUNCH_MISSION(FMMC_TYPE_SMUGGLER_SELL) //FAIL: Not available SHOW_OVERLAY("HAPP_SELL_T", SMUGGLER_APP_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ELIF GET_SMUGGLER_SELL_SIZE_FROM_COUNT(iStockLevel) != eSMUGGLER_SELL_SIZE_SMALL //Show gang size warning AND NOT bIgnoreGangSizeCHeck SET_SMUGGLED_GOODS_TYPE(eMissionGoodsType) SHOW_OVERLAY("HAPP_SELL_T", "HAPP_SELL_GDB", "OR_OVRLY_OK", "", FALSE, TRUE, DEFAULT, SM_STAGE_GANG_SIZE_WARNING) ELSE //Confirm Launch TEXT_LABEL_15 tlConfirm = "HAPP_SELL_C2" TEXT_LABEL_15 tlSubString = "" INT iBonus = -1 INT iSellPrice = -1 IF (BS_DOES_PLAYER_HOLD_ONLY_ONE_CARGO_TYPE() AND GET_FIRST_OWNED_CARGO_TYPE() != eSGT_INVALID) OR eMissionGoodsType != eSGT_MIXED IF BS_DOES_PLAYER_HOLD_ONLY_ONE_CARGO_TYPE() eMissionGoodsType = GET_FIRST_OWNED_CARGO_TYPE() iStockLevel = iGoodsTotal[CONVERT_ENUM_TO_SCALEFORM_ORDER(eMissionGoodsType)] ENDIF iSellPrice = GET_TOTAL_VALUE_OF_SMUGGLED_GOOD_TYPE(eMissionGoodsType, iStockLevel) //Basic message for selling without a bonus tlConfirm = "HAPP_SELL_C0" FLOAT fBonusPercent = (GET_SMUGGLER_REWARD_BONUS_PERCENTAGE(eMissionGoodsType, iStockLevel) * 100.0) //If we have a bonus to give then give the bonus value also IF fBonusPercent > 0.0 iBonus = GET_REWARD_BONUS_FOR_SMUGGLED_GOOD_TYPE(eMissionGoodsType, iStockLevel) iSellPrice += iBonus tlConfirm = "HAPP_SELL_C1" //Once we've calculated the full sell value, get the percentage added iBonus = ROUND(fBonusPercent) ENDIF tlSubString = GET_HANGAR_STOCK_TYPE_TEXT_LABEL(eMissionGoodsType) ELIF eMissionGoodsType = eSGT_MIXED SET_BIT(iBS, SM_BS_SHOW_BONUS_LOST_HELP) ENDIF SET_SMUGGLED_GOODS_TYPE(eMissionGoodsType) #IF FEATURE_DLC_1_2022 // Chech for first help msg IF DID_I_JOIN_A_PRIVATE_SESSION() IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_APP_SELL_GOODS_HELP_TEXT_SMUGGLER) IF NOT IS_THIS_PRINT_BEING_DISPLAYED("APP_SG_HELP") PRINT_HELP("APP_SG_HELP") ENDIF SET_PACKED_STAT_BOOL (PACKED_MP_BOOL_APP_SELL_GOODS_HELP_TEXT_SMUGGLER, TRUE) ENDIF ENDIF #ENDIF // #IF FEATURE_DLC_1_2022 IF iBonus > 0 SET_BIT(iBS, SM_BS_SHOW_BONUS_HELP) SHOW_OVERLAY("HAPP_SELL_T", tlConfirm, "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, iBonus, SM_STAGE_CONFIRM_SELL_LAUNCH, iSellPrice, tlSubString) ELSE SHOW_OVERLAY("HAPP_SELL_T", tlConfirm, "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, iSellPrice, SM_STAGE_CONFIRM_SELL_LAUNCH, iBonus, tlSubString) ENDIF ENDIF SMUGGLER_APP_CLEAR_MISSION_LAUNCH_FAIL_REASON() ENDPROC /// PURPOSE: /// Checks if a setup or resupply mission is available and shows the relevant overlay screen PROC RUN_INITIAL_STEAL_CARGO_CHECKS(eSMUGGLED_GOODS_TYPE eMissionGoodsType) IF IS_PLAYERS_HANGAR_CONTRABAND_STORAGE_FULL(PLAYER_ID()) //FAIL: We have 100% supplies already SHOW_OVERLAY("HAPP_STEAL_T", "HAPP_STEAL_D", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF eMissionGoodsType != eSGT_MIXED AND SMUGGLER_HAS_STEAL_COOLDOWN_STARTED(eMissionGoodsType) SHOW_OVERLAY("HAPP_STEAL_T", "HAPP_STEAL_D1", "OR_OVRLY_OK", "", TRUE, FALSE) ELIF NOT CAN_PLAYER_LAUNCH_MISSION(FMMC_TYPE_SMUGGLER_BUY) //FAIL: Not available SHOW_OVERLAY("HAPP_STEAL_T", SMUGGLER_APP_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE) ELSE SET_SMUGGLED_GOODS_TYPE(eMissionGoodsType) TEXT_LABEL_15 tlConfirm = "HAPP_STEAL_C1" TEXT_LABEL_15 tlConfirmSubString = "" IF eMissionGoodsType != eSGT_MIXED tlConfirm = "HAPP_STEAL_C0" tlConfirmSubString = GET_HANGAR_STOCK_TYPE_TEXT_LABEL(eMissionGoodsType) ENDIF SHOW_OVERLAY("HAPP_STEAL_T", tlConfirm, "WHOUSE_CONF", "WHOUSE_CANC", FALSE, TRUE, DEFAULT, SM_STAGE_CONFIRM_BUY_LAUNCH, -1, tlConfirmSubString) ENDIF SMUGGLER_APP_CLEAR_MISSION_LAUNCH_FAIL_REASON() ENDPROC FUNC BOOL DO_LAUNCH_MISSION_TRANSACTION(BOOL bSellMission) IF NOT USE_SERVER_TRANSACTIONS() RETURN TRUE ENDIF CONTRABAND_TRANSACTION_STATE eResult WHILE NOT PROCESS_TRANSACTION_FOR_HANGAR_CONTRABAND_MISSION(eResult, bSellMission) RENDER_SMUGGLER_APP() WAIT(0) ENDWHILE RENDER_SMUGGLER_APP() RETURN (eResult = CONTRABAND_TRANSACTION_STATE_SUCCESS) ENDFUNC PROC LAUNCH_MISSION(INT iMissionType, BOOL bSetup = FALSE) eSMUGGLED_GOODS_TYPE eLaunchType = GET_SELECTED_GOODS_TYPE() IF eLaunchType = eSGT_MIXED AND iMissionType = FMMC_TYPE_SMUGGLER_BUY PRINTLN(" LAUNCH_MISSION Mixed type not supported. Choosing random new type") eLaunchType = INT_TO_ENUM(eSMUGGLED_GOODS_TYPE, GET_RANDOM_INT_IN_RANGE(0, ENUM_TO_INT(eSGT_MIXED))) GB_SET_GLOBAL_NON_BD_BIT0(eGB_GLOBAL_NON_BD_BITSET_0_LAUNCHED_SMUG_MISSION_WHIT_ANY_TYPE) ELSE GB_CLEAR_GLOBAL_NON_BD_BIT0(eGB_GLOBAL_NON_BD_BITSET_0_LAUNCHED_SMUG_MISSION_WHIT_ANY_TYPE) ENDIF IF bSetup PRINTLN(" LAUNCH_MISSION - Launching setup mission") GB_SET_PLAYER_GANG_BOSS_MISSION_VARIATION(ENUM_TO_INT(SMV_SETUP_RON)) ENDIF IF iMissionType = FMMC_TYPE_SMUGGLER_SELL AND BS_DOES_PLAYER_HOLD_ONLY_ONE_CARGO_TYPE() AND eLaunchType = eSGT_MIXED eLaunchType = GET_FIRST_OWNED_CARGO_TYPE() PRINTLN(" LAUNCH_MISSION Mixed type for sell. Player only owns this type.") ENDIF g_sSMUGGLER_Telemetry_data.m_FromHackerTruck = 0 PRINTLN(" LAUNCH_MISSION Requesting mission launch of type: ", iMissionType, " with goods type: ", DEBUG_GET_SMUGGLED_GOODS_TYPE_NAME(eLaunchType)) GB_BOSS_REQUEST_SMUGGLER_MISSION_LAUNCH_FROM_SERVER(iMissionType, FREEMODE_DELIVERY_LOCATION_CITY, eLaunchType) //DO_SCREEN_FADE_OUT(500) TRIGGER_EXIT_FROM_SIMPLE_INTERIOR_NOW() g_bLaunchedMissionFrmLaptop = TRUE SET_BIT(iBS, SM_BS_LAUNCHED_MISSION) ENDPROC /// PURPOSE: /// Handles the player pressing confirm on the overlay screen PROC HANDLE_ACCEPT_OVERLAY_PRESS() SWITCH SMUGGLER_APP_GET_APP_STAGE() CASE SM_STAGE_CONFIRM_BUY_LAUNCH IF DO_LAUNCH_MISSION_TRANSACTION(FALSE) INCREMENT_HANGAR_BUY_MISSIONS_UNDERTAKEN() PLAY_SOUND_FRONTEND(-1, "Click_Special", "GTAO_SMG_Hangar_Computer_Sounds") LAUNCH_MISSION(FMMC_TYPE_SMUGGLER_BUY) ELSE SHOW_OVERLAY("", "BKR_TF_R6", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE SM_STAGE_CONFIRM_SELL_LAUNCH IF DO_LAUNCH_MISSION_TRANSACTION(TRUE) INCREMENT_HANGAR_SELL_MISSIONS_UNDERTAKEN() PLAY_SOUND_FRONTEND(-1, "Click_Special", "GTAO_SMG_Hangar_Computer_Sounds") LAUNCH_MISSION(FMMC_TYPE_SMUGGLER_SELL) PRINTLN(" Sell mission launch - set BS2_SIMPLE_INTERIOR_HOLD_EXIT_FADE_IN_UNTIL_MISSION_OK") ELSE SHOW_OVERLAY("", "BKR_TF_R6", "OR_OVRLY_OK", "", TRUE, FALSE) ENDIF BREAK CASE SM_STAGE_FAIL_OVERLAY //HIDE_OVERLAY() BREAK CASE SM_STAGE_GANG_SIZE_WARNING HIDE_OVERLAY() RUN_INITIAL_SELL_CARGO_CHECKS(GET_SELECTED_GOODS_TYPE(), TRUE) EXIT CASE SM_STAGE_LAUNCH_SETUP IF NOT CAN_PLAYER_LAUNCH_MISSION(FMMC_TYPE_SMUGGLER_BUY) SHOW_OVERLAY("HAPP_T1", SMUGGLER_APP_GET_MISSION_LAUNCH_FAIL_REASON(), "OR_OVRLY_OK", "", TRUE, FALSE, DEFAULT) ELSE IF DO_LAUNCH_MISSION_TRANSACTION(FALSE) INCREMENT_HANGAR_BUY_MISSIONS_UNDERTAKEN() PLAY_SOUND_FRONTEND(-1, "Click_Special", "GTAO_SMG_Hangar_Computer_Sounds") LAUNCH_MISSION(FMMC_TYPE_SMUGGLER_BUY, TRUE) EXIT ELSE SHOW_OVERLAY("HAPP_T1", "BKR_TF_R6", "OR_OVRLY_OK", "", TRUE, FALSE, DEFAULT) ENDIF ENDIF BREAK DEFAULT PLAY_CLICK_LINK_SOUND() BREAK ENDSWITCH HIDE_OVERLAY() ENDPROC FUNC eSMUGGLED_GOODS_TYPE GET_SGT_FROM_BUTTON(SM_BUTTON_INDEXES eButton) SWITCH eButton CASE BUTTON_STEAL_ALL_GOODS CASE BUTTON_NAV_SELL_ALL_GOODS RETURN eSGT_MIXED BREAK CASE BUTTON_STEAL_GOODS_NARCOTICS CASE BUTTON_NAV_SELL_GOODS_NARCOTICS CASE BUTTON_GRAPH_NARCOTICS RETURN eSGT_NARCOTICS BREAK CASE BUTTON_STEAL_GOODS_CHEMICALS CASE BUTTON_NAV_SELL_GOODS_CHEMICALS CASE BUTTON_GRAPH_CHEMICALS RETURN eSGT_CHEMICALS BREAK CASE BUTTON_STEAL_GOODS_MEDICAL CASE BUTTON_NAV_SELL_GOODS_MEDICAL CASE BUTTON_GRAPH_MEDICAL_SUPPLIES RETURN eSGT_MEDICAL_SUPPLIES BREAK CASE BUTTON_STEAL_GOODS_ANIMAL CASE BUTTON_NAV_SELL_GOODS_ANIMAL CASE BUTTON_GRAPH_ANIMAL_MATERIALS RETURN eSGT_ANIMAL_MATERIALS BREAK CASE BUTTON_STEAL_GOODS_ART CASE BUTTON_NAV_SELL_GOODS_ART CASE BUTTON_GRAPH_ART RETURN eSGT_ART_AND_ANTIQUES BREAK CASE BUTTON_STEAL_GOODS_GEMS CASE BUTTON_NAV_SELL_GOODS_GEMS CASE BUTTON_GRAPH_GEMS RETURN eSGT_JEWELRY_AND_GEMSTONES BREAK CASE BUTTON_STEAL_GOODS_TOBACCO CASE BUTTON_NAV_SELL_GOODS_TOBACCO CASE BUTTON_GRAPH_TOBACCO RETURN eSGT_TOBACCO_AND_ALCOHOL BREAK CASE BUTTON_STEAL_COUNTERFIT_GOODS CASE BUTTON_NAV_SELL_COUNTERFIT_GOODS CASE BUTTON_GRAPH_COUNTERFIT_GOODS RETURN eSGT_COUNTERFEIT_GOODS BREAK ENDSWITCH ASSERTLN(" GET_SGT_FROM_BUTTON passed invalid button ID: (", eButton, ") ", DEBUG_GET_BUTTON_NAME(eButton)) RETURN eSGT_INVALID ENDFUNC PROC CHECK_BUTTON_PRESS() MAINTAIN_CHECKS_FOR_CURRENT_SELECTION_ID() IF IS_BIT_SET(iBS, SM_BS_WAITING_FOR_BUTTON_RETURN_VALUE) IF IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(currentSelectionReturnIndex) SM_BUTTON_INDEXES eButtonPressed = INT_TO_ENUM(SM_BUTTON_INDEXES, GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(currentSelectionReturnIndex)) CDEBUG1LN(DEBUG_INTERNET, " CHECK_BUTTON_PRESS button press returned = ", DEBUG_GET_BUTTON_NAME(eButtonPressed), " ID: ", eButtonPressed) SWITCH eButtonPressed CASE BUTTON_OVERLAY_CANCEL PLAY_CLICK_LINK_SOUND() HIDE_OVERLAY() BREAK CASE BUTTON_OVERLAY_ACCEPT HANDLE_ACCEPT_OVERLAY_PRESS() BREAK CASE BUTTON_NAV_OVERVIEW IF eCurrentPage != PAGE_OVERVIEW PLAY_SOUND_FRONTEND(-1, "Show_Overview_Menu", "GTAO_SMG_Hangar_Computer_Sounds") ENDIF eCurrentPage = PAGE_OVERVIEW BREAK CASE BUTTON_STEAL_CARGO IF eCurrentPage != PAGE_STEAL PLAY_SOUND_FRONTEND(-1, "Show_Source_Menu", "GTAO_SMG_Hangar_Computer_Sounds") ENDIF eCurrentPage = PAGE_STEAL BREAK CASE BUTTON_SELL_CARGO IF eCurrentPage != PAGE_SELL PLAY_SOUND_FRONTEND(-1, "Show_Sell_Menu", "GTAO_SMG_Hangar_Computer_Sounds") ENDIF eCurrentPage = PAGE_SELL BREAK CASE BUTTON_NAV_SELL_ALL_GOODS CASE BUTTON_NAV_SELL_GOODS_NARCOTICS CASE BUTTON_NAV_SELL_GOODS_CHEMICALS CASE BUTTON_NAV_SELL_GOODS_MEDICAL CASE BUTTON_NAV_SELL_GOODS_ANIMAL CASE BUTTON_NAV_SELL_GOODS_ART CASE BUTTON_NAV_SELL_GOODS_GEMS CASE BUTTON_NAV_SELL_GOODS_TOBACCO CASE BUTTON_NAV_SELL_COUNTERFIT_GOODS RUN_INITIAL_SELL_CARGO_CHECKS(GET_SGT_FROM_BUTTON(eButtonPressed)) BREAK CASE BUTTON_GRAPH_NARCOTICS CASE BUTTON_GRAPH_CHEMICALS CASE BUTTON_GRAPH_MEDICAL_SUPPLIES CASE BUTTON_GRAPH_ANIMAL_MATERIALS CASE BUTTON_GRAPH_ART CASE BUTTON_GRAPH_GEMS CASE BUTTON_GRAPH_TOBACCO CASE BUTTON_GRAPH_COUNTERFIT_GOODS IF GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HANGAR_APP_D_TUT_2) RUN_INITIAL_SELL_CARGO_CHECKS(GET_SGT_FROM_BUTTON(eButtonPressed)) ELSE //Show the sell page eCurrentPage = PAGE_SELL CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(mov, "SHOW_SCREEN", 2.0) ENDIF BREAK CASE BUTTON_STEAL_ALL_GOODS CASE BUTTON_STEAL_GOODS_NARCOTICS CASE BUTTON_STEAL_GOODS_CHEMICALS CASE BUTTON_STEAL_GOODS_MEDICAL CASE BUTTON_STEAL_GOODS_ANIMAL CASE BUTTON_STEAL_GOODS_ART CASE BUTTON_STEAL_GOODS_GEMS CASE BUTTON_STEAL_GOODS_TOBACCO CASE BUTTON_STEAL_COUNTERFIT_GOODS RUN_INITIAL_STEAL_CARGO_CHECKS(GET_SGT_FROM_BUTTON(eButtonPressed)) BREAK ENDSWITCH CLEAR_BIT(iBS, SM_BS_WAITING_FOR_BUTTON_RETURN_VALUE) ENDIF ENDIF ENDPROC ///////////////////////////////////////////////////////////////////// /// Dialogue tutorials FUNC BOOL HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() IF GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HANGAR_APP_D_TUT_1) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HANGAR_APP_D_TUT_2) AND GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HANGAR_APP_D_TUT_3) CPRINTLN(DEBUG_INTERNET, " HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED TRUE") RETURN TRUE ENDIF CPRINTLN(DEBUG_INTERNET, " HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED FALSE") RETURN FALSE ENDFUNC FUNC STRING SMUGGLER_TUT_GET_ROOT_LABEL(INT iTutorialID) SWITCH iTutorialID CASE 0 RETURN "SMGC_LAPTUT1" //Overview page CASE 1 RETURN "SMGC_LAPTUT2" //Steal page CASE 2 RETURN "SMGC_LAPTUT3" //Sell page ENDSWITCH CASSERTLN(DEBUG_SAFEHOUSE, "SMUGGLER_TUT_GET_ROOT_LABEL: Invalid tutorial ID: ", iTutorialID) RETURN "SMGC_LAPTUT1" ENDFUNC PROC SMUGGLER_START_TUTORIAL_DIALOGUE(INT iTutorialID) IF CREATE_CONVERSATION(tutPedStruct, "SMGCAUD", SMUGGLER_TUT_GET_ROOT_LABEL(iTutorialID), CONV_PRIORITY_HIGH) CPRINTLN(DEBUG_INTERNET, " Created tutorial converstion: ", iTutorialID) iTutorialDialogueID = -1 ENDIF ENDPROC PROC SMUGGLER_RUN_TUTORIAL_DIALOGUE() //Start the dialogue IF iTutorialDialogueID != -1 SMUGGLER_START_TUTORIAL_DIALOGUE(iTutorialDialogueID) ENDIF ENDPROC PROC SMUGGLER_PRINT_TUTORIAL_HELP(STRING sStringToDisplay, INT HelpTime) BEGIN_TEXT_COMMAND_DISPLAY_HELP(sStringToDisplay) END_TEXT_COMMAND_DISPLAY_HELP(HELP_TEXT_SLOT_STANDARD, FALSE, TRUE, HelpTime) ENDPROC PROC SMUGGLER_SELECT_APP_DIALOGUE_TUTORIAL() BOOL bStartNewDialogue IF NOT IS_BIT_SET(iBS, SM_BS_CURRENTLY_PLAYING_TUTORIAL) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF eCurrentPage = PAGE_OVERVIEW IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HANGAR_APP_D_TUT_1) //First login bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = 0 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HANGAR_APP_D_TUT_1, TRUE) ENDIF ELIF eCurrentPage = PAGE_SELL IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HANGAR_APP_D_TUT_2) //Collections page bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = 2 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HANGAR_APP_D_TUT_2, TRUE) ENDIF ELIF eCurrentPage = PAGE_STEAL IF NOT GET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HANGAR_APP_D_TUT_3) //Collections page bStartNewDialogue = TRUE iTutorialHelpTime = 9000 iTutorialDialogueID = 1 SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_HANGAR_APP_D_TUT_3, TRUE) ENDIF ENDIF ENDIF IF bStartNewDialogue SET_BIT(iBS, SM_BS_CURRENTLY_PLAYING_TUTORIAL) CPRINTLN(DEBUG_INTERNET, " SMUGGLER_SELECT_APP_DIALOGUE_TUTORIAL Running tutorial for: ", iTutorialHelpTime, " seconds. Tutorial ID: ", iTutorialDialogueID) ELIF IS_BIT_SET(iBS, SM_BS_CURRENTLY_PLAYING_TUTORIAL) IF NOT HAS_NET_TIMER_STARTED(stTutorialTimer) START_NET_TIMER(stTutorialTimer) CPRINTLN(DEBUG_INTERNET, " SMUGGLER_SELECT_APP_DIALOGUE_TUTORIAL Starting timer time: ", iTutorialHelpTime, " Tutorial ID: ", iTutorialDialogueID) ELIF HAS_NET_TIMER_EXPIRED(stTutorialTimer, iTutorialHelpTime) CLEAR_BIT(iBS, SM_BS_CURRENTLY_PLAYING_TUTORIAL) iTutorialHelpTime = 0 RESET_NET_TIMER(stTutorialTimer) CPRINTLN(DEBUG_INTERNET, " SMUGGLER_SELECT_APP_DIALOGUE_TUTORIAL Starting timer expired time: ", iTutorialHelpTime, " Tutorial ID: ", iTutorialDialogueID) //Once all the tutorial are complete we no longer need this function IF HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, SM_BS_DIALOGUE_TUTORIAL_COMPLETE) ENDIF ENDIF ENDIF ENDPROC PROC SMUGGLER_SETUP_TUTORIAL_DIALOGUE() IF HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, SM_BS_DIALOGUE_TUTORIAL_COMPLETE) ELSE //Introduce an inital delay as we no longer have a login screen SET_BIT(iBS, SM_BS_CURRENTLY_PLAYING_TUTORIAL) iTutorialHelpTime = 800 SET_USE_DLC_DIALOGUE(TRUE) ADD_PED_FOR_DIALOGUE(tutPedStruct, 2, NULL, "NERVOUSRON") CPRINTLN(DEBUG_INTERNET, " SMUGGLER_SETUP_TUTORIAL_DIALOGUE ped added for dialogue") ENDIF ENDPROC PROC INCREMENT_TUTORIAL_COUNT(eWEBSITE_TUTORIAL_BS2_INDEX eTutorialID) SWITCH eTutorialID CASE eWTBS2_SMG_LOOSE_BONUS INCREMENT_TUTORIAL_PACKED_STAT(PACKED_MP_BOOL_TUT_LOOSE_BONUS) BREAK CASE eWTBS2_SMG_SELL_BONUS INCREMENT_TUTORIAL_PACKED_STAT(PACKED_MP_BOOL_TUT_SELL_BONUS) BREAK CASE eWTBS2_SMG_SETUP_OVERLAY INCREMENT_TUTORIAL_PACKED_STAT(PACKED_MP_BOOL_TUT_SETUP_OVERLAY) BREAK CASE eWTBS2_SMG_OVERVIEW_PAGE INCREMENT_TUTORIAL_PACKED_STAT(PACKED_MP_BOOL_TUT_OVERVIEW_PAGE) BREAK CASE eWTBS2_SMG_STEAL_PAGE_1 INCREMENT_TUTORIAL_PACKED_STAT(PACKED_MP_BOOL_TUT_STEAL_PAGE_1) BREAK CASE eWTBS2_SMG_STEAL_PAGE_2 INCREMENT_TUTORIAL_PACKED_STAT(PACKED_MP_BOOL_TUT_STEAL_PAGE_2) BREAK CASE eWTBS2_SMG_SELL_PAGE_1 INCREMENT_TUTORIAL_PACKED_STAT(PACKED_MP_BOOL_TUT_SELL_PAGE_1) BREAK CASE eWTBS2_SMG_SELL_PAGE_2 INCREMENT_TUTORIAL_PACKED_STAT(PACKED_MP_BOOL_TUT_SELL_PAGE_2) BREAK CASE eWTBS2_SMG_SELL_PAGE_3 INCREMENT_TUTORIAL_PACKED_STAT(PACKED_MP_BOOL_TUT_SELL_PAGE_3) BREAK ENDSWITCH ENDPROC FUNC BOOL HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWEBSITE_TUTORIAL_BS2_INDEX eTutorialID) SWITCH eTutorialID CASE eWTBS2_SMG_LOOSE_BONUS RETURN CHECK_TUTORIAL_PACKED_STATS(PACKED_MP_BOOL_TUT_LOOSE_BONUS) CASE eWTBS2_SMG_SELL_BONUS RETURN CHECK_TUTORIAL_PACKED_STATS(PACKED_MP_BOOL_TUT_SELL_BONUS) CASE eWTBS2_SMG_SETUP_OVERLAY RETURN CHECK_TUTORIAL_PACKED_STATS(PACKED_MP_BOOL_TUT_SETUP_OVERLAY) CASE eWTBS2_SMG_OVERVIEW_PAGE RETURN CHECK_TUTORIAL_PACKED_STATS(PACKED_MP_BOOL_TUT_OVERVIEW_PAGE) CASE eWTBS2_SMG_STEAL_PAGE_1 RETURN CHECK_TUTORIAL_PACKED_STATS(PACKED_MP_BOOL_TUT_STEAL_PAGE_1) CASE eWTBS2_SMG_STEAL_PAGE_2 RETURN CHECK_TUTORIAL_PACKED_STATS(PACKED_MP_BOOL_TUT_STEAL_PAGE_2) CASE eWTBS2_SMG_SELL_PAGE_1 RETURN CHECK_TUTORIAL_PACKED_STATS(PACKED_MP_BOOL_TUT_SELL_PAGE_1) CASE eWTBS2_SMG_SELL_PAGE_2 RETURN CHECK_TUTORIAL_PACKED_STATS(PACKED_MP_BOOL_TUT_SELL_PAGE_2) CASE eWTBS2_SMG_SELL_PAGE_3 RETURN CHECK_TUTORIAL_PACKED_STATS(PACKED_MP_BOOL_TUT_SELL_PAGE_3) ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL HAVE_ALL_SMUGGLER_HELP_TUTORIALS_BEEN_COMPLETED() IF HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_LOOSE_BONUS) AND HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_SELL_BONUS) AND HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_SETUP_OVERLAY) AND HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_OVERVIEW_PAGE) AND HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_STEAL_PAGE_1) AND HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_SELL_PAGE_1) AND HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_SELL_PAGE_2) AND HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_SELL_PAGE_3) RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_SMUGGLER_HELP_TUTORIAL_BE_DISPLAYED(eWEBSITE_TUTORIAL_BS2_INDEX eTutorialID) INT iTutorialID = ENUM_TO_INT(eTutorialID) IF NOT IS_BIT_SET(iBS, SM_BS_SETUP_COMPLETE) AND eTutorialID != eWTBS2_SMG_SETUP_OVERLAY RETURN FALSE ENDIF SWITCH eTutorialID CASE eWTBS2_SMG_LOOSE_BONUS IF NOT HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eTutorialID) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, iTutorialID) AND IS_BIT_SET(iBS, SM_BS_SHOW_BONUS_LOST_HELP) RETURN TRUE ENDIF BREAK CASE eWTBS2_SMG_SELL_BONUS IF NOT HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eTutorialID) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, iTutorialID) AND IS_BIT_SET(iBS, SM_BS_SHOW_BONUS_HELP) RETURN TRUE ENDIF BREAK CASE eWTBS2_SMG_SETUP_OVERLAY IF NOT HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eTutorialID) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, iTutorialID) AND IS_BIT_SET(iBS, SM_BS_SHOW_SETUP_HELP) RETURN TRUE ENDIF BREAK CASE eWTBS2_SMG_OVERVIEW_PAGE IF NOT HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eTutorialID) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, iTutorialID) AND IS_BIT_SET(iBS, SM_BS_SETUP_COMPLETE) AND eCurrentPage = PAGE_OVERVIEW RETURN TRUE ENDIF BREAK CASE eWTBS2_SMG_STEAL_PAGE_1 IF NOT HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eTutorialID) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, iTutorialID) AND eCurrentPage = PAGE_STEAL RETURN TRUE ENDIF BREAK CASE eWTBS2_SMG_STEAL_PAGE_2 IF NOT HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eTutorialID) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, iTutorialID) AND eCurrentPage = PAGE_STEAL AND (IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, ENUM_TO_INT(eWTBS2_SMG_STEAL_PAGE_1)) OR HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_STEAL_PAGE_1)) RETURN TRUE ENDIF BREAK CASE eWTBS2_SMG_SELL_PAGE_1 IF NOT HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eTutorialID) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, iTutorialID) AND eCurrentPage = PAGE_SELL RETURN TRUE ENDIF BREAK CASE eWTBS2_SMG_SELL_PAGE_2 IF NOT HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eTutorialID) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, iTutorialID) AND eCurrentPage = PAGE_SELL AND (IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, ENUM_TO_INT(eWTBS2_SMG_SELL_PAGE_1)) OR HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_SELL_PAGE_1)) RETURN TRUE ENDIF BREAK CASE eWTBS2_SMG_SELL_PAGE_3 IF NOT HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eTutorialID) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, iTutorialID) AND IS_BIT_SET(iBS, SM_BS_SELL_BONUS_AVAIABLE) AND eCurrentPage = PAGE_SELL AND (IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, ENUM_TO_INT(eWTBS2_SMG_SELL_PAGE_1)) OR HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_SELL_PAGE_1)) AND (IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, ENUM_TO_INT(eWTBS2_SMG_SELL_PAGE_2)) OR HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_SELL_PAGE_2)) RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC TEXT_LABEL_15 GET_TUTORIAL_HELP_LABEL(eWEBSITE_TUTORIAL_BS2_INDEX eTutorial) TEXT_LABEL_15 tlReturn = "" SWITCH eTutorial CASE eWTBS2_SMG_LOOSE_BONUS tlReturn = "HAPP_HELP_1" BREAK CASE eWTBS2_SMG_SELL_BONUS tlReturn = "HAPP_HELP_2" BREAK CASE eWTBS2_SMG_SETUP_OVERLAY tlReturn = "HAPP_HELP_3" BREAK CASE eWTBS2_SMG_OVERVIEW_PAGE tlReturn = "HAPP_HELP_4" BREAK CASE eWTBS2_SMG_STEAL_PAGE_1 tlReturn = "HAPP_HELP_5" BREAK CASE eWTBS2_SMG_STEAL_PAGE_2 tlReturn = "HAPP_HELP_6" BREAK CASE eWTBS2_SMG_SELL_PAGE_1 tlReturn = "HAPP_HELP_7" BREAK CASE eWTBS2_SMG_SELL_PAGE_2 tlReturn = "HAPP_HELP_8" BREAK CASE eWTBS2_SMG_SELL_PAGE_3 tlReturn = "HAPP_HELP_9" BREAK ENDSWITCH RETURN tlReturn ENDFUNC FUNC INT GET_TUTORIAL_HELP_TIME(eWEBSITE_TUTORIAL_BS2_INDEX eTutorial) SWITCH eTutorial CASE eWTBS2_SMG_LOOSE_BONUS RETURN 14000 CASE eWTBS2_SMG_SELL_BONUS RETURN 15000 CASE eWTBS2_SMG_SETUP_OVERLAY RETURN 14000 CASE eWTBS2_SMG_OVERVIEW_PAGE RETURN 14500 CASE eWTBS2_SMG_STEAL_PAGE_1 RETURN 14000 CASE eWTBS2_SMG_STEAL_PAGE_2 RETURN 14000 CASE eWTBS2_SMG_SELL_PAGE_1 RETURN 14000 CASE eWTBS2_SMG_SELL_PAGE_2 RETURN 15000 CASE eWTBS2_SMG_SELL_PAGE_3 RETURN 14500 ENDSWITCH RETURN 0 ENDFUNC PROC SMUGGLER_RUN_APP_HELP_TEXT_TUTORIAL() TEXT_LABEL_15 tlHelp INT i INT iMaxTutorial = (ENUM_TO_INT(eWTBS2_SMG_SELL_PAGE_3) + 1) IF NOT IS_BIT_SET(iBS, SM_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() REPEAT iMaxTutorial i eWEBSITE_TUTORIAL_BS2_INDEX eTutorial = INT_TO_ENUM(eWEBSITE_TUTORIAL_BS2_INDEX, i) IF SHOULD_SMUGGLER_HELP_TUTORIAL_BE_DISPLAYED(eTutorial) tlHelp = GET_TUTORIAL_HELP_LABEL(eTutorial) iTutorialHelpTime = GET_TUTORIAL_HELP_TIME(eTutorial) SET_BIT(g_iWebsiteTutorialDisplayedBS2, i) INCREMENT_TUTORIAL_COUNT(eTutorial) BREAKLOOP ENDIF ENDREPEAT ENDIF IF NOT IS_BIT_SET(iBS, SM_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) AND NOT IS_STRING_NULL_OR_EMPTY(tlHelp) //Display the relevant help text SMUGGLER_PRINT_TUTORIAL_HELP(tlHelp, iTutorialHelpTime) SET_BIT(iBS, SM_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) CPRINTLN(DEBUG_INTERNET, "[TUTORIAL] SMUGGLER_RUN_APP_HELP_TEXT_TUTORIAL Printing: tlHelp: ", tlHelp, " time: ", iTutorialHelpTime) ELIF IS_BIT_SET(iBS, SM_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) IF NOT HAS_NET_TIMER_STARTED(stHelpTextTutorialTimer) START_NET_TIMER(stHelpTextTutorialTimer) CPRINTLN(DEBUG_INTERNET, "[TUTORIAL] SMUGGLER_RUN_APP_HELP_TEXT_TUTORIAL Starting timer for: ", tlHelp, " time: ", iTutorialHelpTime) ELIF HAS_NET_TIMER_EXPIRED(stHelpTextTutorialTimer, iTutorialHelpTime) CLEAR_BIT(iBS, SM_BS_CURRENTLY_DISPLAYING_TUTORIAL_HELP) iTutorialHelpTime = 0 RESET_NET_TIMER(stHelpTextTutorialTimer) CPRINTLN(DEBUG_INTERNET, "[TUTORIAL] SMUGGLER_RUN_APP_HELP_TEXT_TUTORIAL Starting timer expired for: ", tlHelp, " time: ", iTutorialHelpTime) IF HAVE_ALL_SMUGGLER_HELP_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, SM_BS_HELP_TEXT_TUTORIAL_COMPLETE) ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Check for any flags that mean this script should terminate PROC RUN_CLEANUP_CHECKS() IF NOT NETWORK_IS_GAME_IN_PROGRESS() CDEBUG1LN(DEBUG_SAFEHOUSE, " Shutting down! No network game is currently active") SCRIPT_CLEANUP() ELIF IS_PAUSE_MENU_ACTIVE_EX() CPRINTLN(DEBUG_INTERNET, " Shutting down! Player opend the pause menu") SCRIPT_CLEANUP() ELIF IS_ENTITY_DEAD(PLAYER_PED_ID()) CDEBUG1LN(DEBUG_SAFEHOUSE, " Shutting down! Player is injured or dead") SCRIPT_CLEANUP() ENDIF ENDPROC /// PURPOSE: /// Initalises the iActiveUsers array to -1 PROC INIT_ACTIVE_SMUGGLER_LIST() INT i = 0 REPEAT NUM_RIVAL_SMUGGLERS i CDEBUG1LN(DEBUG_SAFEHOUSE, " INIT_ACTIVE_SMUGGLER_LIST Setting value: ", i, " of app active user list to -1") iActiveUsers[i] = -1 ENDREPEAT i = 0 REPEAT MAX_NUM_GANGS i iGangIndex[i] = -1 iNumGoons[i] = 0 ENDREPEAT ENDPROC /// PURPOSE: /// Checks a local array for the current player in the loop (iPlayerLoop) FUNC BOOL IS_PLAYER_IN_ACTIVE_SMUGGLER_LIST() INT i = 0 REPEAT NUM_RIVAL_SMUGGLERS i IF iActiveUsers[i] = iPlayerLoop RETURN TRUE ENDIF ENDREPEAT RETURN FALSE ENDFUNC PROC SET_NUM_GOONS_IN_PLAYERS_GANG(PLAYER_INDEX pPlayer, INT iNumberOfGoons) INT i REPEAT MAX_NUM_GANGS i IF iGangIndex[i] = -1 iNumGoons[i] = iNumberOfGoons iGangIndex[i] = NATIVE_TO_INT(pPlayer) EXIT ENDIF ENDREPEAT ENDPROC PROC CLEAR_NUM_GOONS_IN_PLAYERS_GANG(PLAYER_INDEX pPlayer) INT i REPEAT MAX_NUM_GANGS i IF iGangIndex[i] = NATIVE_TO_INT(pPlayer) iNumGoons[i] = 0 iGangIndex[i] = -1 EXIT ENDIF ENDREPEAT ENDPROC FUNC BOOL HAVE_PLAYERS_NUM_GANG_MEMBERS_CHANGED() INT i REPEAT MAX_NUM_GANGS i IF iGangIndex[i] = iPlayerLoop IF NOT GB_IS_PLAYER_BOSS_OF_A_GANG(INT_TO_PLAYERINDEX(iPlayerLoop)) RETURN TRUE ELSE RETURN (iNumGoons[i] != GB_GET_NUM_GOONS_IN_PLAYER_GANG(INT_TO_PLAYERINDEX(iPlayerLoop))) ENDIF ENDIF ENDREPEAT RETURN FALSE ENDFUNC /// PURPOSE: /// Adds a player to the local array and calls the relevant scaleform method PROC ADD_PLAYER_TO_ACTIVE_SMUGGLER_LIST(PLAYER_INDEX piPlayer, INT iPlayerID) INT i = 0 STRING sPlayerName = GET_PLAYER_NAME(piPlayer) IF ARE_STRINGS_EQUAL(sPlayerName, "**Invalid**") CDEBUG1LN(DEBUG_SAFEHOUSE, " ADD_PLAYER_TO_ACTIVE_SMUGGLER_LIST. tried to add **Invalid** player to list") EXIT ENDIF INT iIter INT iMaxNumGoons = GB_MAX_GANG_GOONS TEXT_LABEL_63 tlGoons[GB_MAX_GANG_GOONS] IF GB_IS_PLAYER_BOSS_OF_A_GANG(piPlayer) REPEAT iMaxNumGoons iIter PLAYER_INDEX piGoon = GlobalplayerBD_FM_3[iPlayerID].sMagnateGangBossData.GangMembers[iIter] IF piGoon != INVALID_PLAYER_INDEX() tlGoons[iIter] = GET_PLAYER_NAME(piGoon) ELSE tlGoons[iIter] = "" ENDIF ENDREPEAT //Make sure there are no spaces in the list REPEAT iMaxNumGoons iIter IF IS_STRING_NULL_OR_EMPTY(tlGoons[iIter]) IF iIter != iMaxNumGoons INT j FOR j = iIter TO (iMaxNumGoons -1) IF NOT IS_STRING_NULL_OR_EMPTY(tlGoons[j]) tlGoons[iIter] = tlGoons[j] tlGoons[j] = "" j = (iMaxNumGoons -1) CDEBUG1LN(DEBUG_INTERNET, " ADD_PLAYER_TO_ACTIVE_SMUGGLER_LIST Updating list order Empty player slot: ", iIter, " Moving Goon: ", j, " down the list") ENDIF ENDFOR ENDIF ENDIF ENDREPEAT BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_ACTIVE_ORGANISATION") SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(GET_PLAYER_ORGANISATION_NAME(piPlayer)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sPlayerName) REPEAT iMaxNumGoons iIter SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(tlGoons[iIter]) ENDREPEAT END_SCALEFORM_MOVIE_METHOD() sPlayerName = GET_PLAYER_ORGANISATION_NAME(piPlayer) SET_NUM_GOONS_IN_PLAYERS_GANG(piPlayer, GB_GET_NUM_GOONS_IN_PLAYER_GANG(piPlayer)) SET_BIT(iGangListBS, iPlayerID) ELSE BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_ACTIVE_ORGANISATION") SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(sPlayerName) END_SCALEFORM_MOVIE_METHOD() ENDIF REPEAT NUM_RIVAL_SMUGGLERS i IF iActiveUsers[i] = -1 iActiveUsers[i] = iPlayerID tlUserList[i] = sPlayerName CDEBUG1LN(DEBUG_SAFEHOUSE, " ADD_PLAYER_TO_ACTIVE_SMUGGLER_LIST. Adding: ", tlUserList[i], " to slot: ", i) EXIT ENDIF ENDREPEAT CDEBUG1LN(DEBUG_SAFEHOUSE, " ADD_PLAYER_TO_ACTIVE_SMUGGLER_LIST. We have more players to add than GB_GET_MAX_NUM_GANGS: ", GB_GET_MAX_NUM_GANGS()) ENDPROC /// PURPOSE: /// Removes a player from the local array and calls the relevant scaleform method PROC REMOVE_PLAYER_FROM_ACTIVE_SMUGGLER_LIST() INT i = 0 INT iIndex = -1 REPEAT NUM_RIVAL_SMUGGLERS i IF iActiveUsers[i] = iPlayerLoop iActiveUsers[i] = -1 iIndex = i ENDIF ENDREPEAT IF iIndex != -1 AND iIndex < NUM_RIVAL_SMUGGLERS CDEBUG1LN(DEBUG_SAFEHOUSE, " REMOVE_PLAYER_FROM_ACTIVE_SMUGGLER_LIST. index: ", iIndex) CDEBUG1LN(DEBUG_SAFEHOUSE, " REMOVE_PLAYER_FROM_ACTIVE_SMUGGLER_LIST. removing: ", tlUserList[iIndex]) BEGIN_SCALEFORM_MOVIE_METHOD(mov, "REMOVE_ACTIVE_ORGANISATION") SCALEFORM_MOVIE_METHOD_ADD_PARAM_LITERAL_STRING(tlUserList[iIndex]) END_SCALEFORM_MOVIE_METHOD() tlUserList[iIndex] = "" CLEAR_BIT(iGangListBS, iPlayerLoop) CLEAR_NUM_GOONS_IN_PLAYERS_GANG(INT_TO_PLAYERINDEX(iPlayerLoop)) ELSE CASSERTLN(DEBUG_SAFEHOUSE, " REMOVE_PLAYER_FROM_ACTIVE_SMUGGLER_LIST. Can't find player to remove: ", iIndex) ENDIF ENDPROC /// PURPOSE: One player per frame loop to check gang status /// Maintains the list of organizations to be displayed in the app PROC MAINTAIN_ACTIVE_ORGANIZATION_LIST() iPlayerLoop ++ IF iPlayerLoop = NUM_NETWORK_PLAYERS iPlayerLoop = 0 ENDIF PLAYER_INDEX pPlayer = INT_TO_NATIVE(PLAYER_INDEX, iPlayerLoop) IF pPlayer = PLAYER_ID() EXIT ENDIF IF NETWORK_IS_PLAYER_ACTIVE(pPlayer) AND DOES_PLAYER_OWN_A_HANGER(pPlayer) AND NOT GB_IS_PLAYER_MEMBER_OF_A_GANG(pPlayer, FALSE) AND NOT HAVE_PLAYERS_NUM_GANG_MEMBERS_CHANGED() IF NOT IS_PLAYER_IN_ACTIVE_SMUGGLER_LIST() CDEBUG1LN(DEBUG_SAFEHOUSE, " Adding player: ", iPlayerLoop, " to app active user list") ADD_PLAYER_TO_ACTIVE_SMUGGLER_LIST(pPlayer, iPlayerLoop) ENDIF ELSE IF IS_PLAYER_IN_ACTIVE_SMUGGLER_LIST() CDEBUG1LN(DEBUG_SAFEHOUSE, " Removing player: ", iPlayerLoop, " from app active user list") REMOVE_PLAYER_FROM_ACTIVE_SMUGGLER_LIST() ENDIF ENDIF IF IS_BIT_SET(iGangListBS, iPlayerLoop) IF NOT GB_IS_PLAYER_BOSS_OF_A_GANG(pPlayer) AND IS_PLAYER_IN_ACTIVE_SMUGGLER_LIST() CDEBUG1LN(DEBUG_SAFEHOUSE, " Removing player: ", iPlayerLoop, " from app active user list") REMOVE_PLAYER_FROM_ACTIVE_SMUGGLER_LIST() ENDIF ELSE IF GB_IS_PLAYER_BOSS_OF_A_GANG(pPlayer) AND IS_PLAYER_IN_ACTIVE_SMUGGLER_LIST() CDEBUG1LN(DEBUG_SAFEHOUSE, " Removing player: ", iPlayerLoop, " from app active user list") REMOVE_PLAYER_FROM_ACTIVE_SMUGGLER_LIST() ENDIF ENDIF ENDPROC PROC SCRIPT_INITALISE() RUN_CLEANUP_CHECKS() mov = REQUEST_SCALEFORM_MOVIE("HANGAR_CARGO") WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(mov)) WAIT(0) ENDWHILE HANG_UP_AND_PUT_AWAY_PHONE(TRUE) DISABLE_CELLPHONE(TRUE) Pause_Objective_Text() THEFEED_PAUSE() SET_BROWSER_OPEN(TRUE) // Default cleanup IF HAS_FORCE_CLEANUP_OCCURRED() OR MPGlobalsAmbience.bRunningFmIntroCut IF MPGlobalsAmbience.bRunningFmIntroCut CDEBUG1LN(DEBUG_SAFEHOUSE, " bRunningFmIntroCut is true so cleaning up!") ENDIF CDEBUG1LN(DEBUG_SAFEHOUSE, " DEFAULT CLEANUP") SCRIPT_CLEANUP() ENDIF SET_BROWSER_OPEN(TRUE) eOwnedHangar = GET_LOCAL_PLAYERS_OWNED_HANGAR() SEND_ALL_DATA_TO_SCALEFORM() SMUGGLER_SETUP_TUTORIAL_DIALOGUE() IF HAVE_ALL_SMUGGLER_HELP_TUTORIALS_BEEN_COMPLETED() SET_BIT(iBS, SM_BS_HELP_TEXT_TUTORIAL_COMPLETE) PRINTLN(" SCRIPT_INITALISE - All help text tutorials have been completed") ENDIF INIT_ACTIVE_SMUGGLER_LIST() IF IS_HANGAR_SETUP_MISSION_COMPLETE() PLAY_SOUND_FRONTEND(-1, "Show_Overview_Menu", "GTAO_SMG_Hangar_Computer_Sounds") ELSE PRINTLN(" SCRIPT_INITALISE - Local player has not done the setup mission") ENDIF IF IS_PC_VERSION() SET_MULTIHEAD_SAFE(TRUE, TRUE, TRUE, TRUE) ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("GTAO_Computer_Screen_Active_Scene") START_AUDIO_SCENE("GTAO_Computer_Screen_Active_Scene") ENDIF #IF FEATURE_GEN9_EXCLUSIVE SET_MP_BOOL_CHARACTER_STAT(MP_STAT_DARKNETACCESSED, TRUE) #ENDIF ENDPROC PROC MAINTAIN_COOLDOWN_TIMERS() IF HAS_NET_TIMER_STARTED(stCDUpdateTimer) IF HAS_NET_TIMER_EXPIRED(stCDUpdateTimer, 1000) UPDATE_STEAL_COOLDOWN_TIMER() UPDATE_SELL_COOLDOWN_TIMER() REINIT_NET_TIMER(stCDUpdateTimer) ENDIF ELSE START_NET_TIMER(stCDUpdateTimer) ENDIF ENDPROC PROC MAINATIN_PRE_SETUP_OVERLAY() IF NOT IS_BIT_SET(iBS, SM_BS_SETUP_COMPLETE) IF NOT SMUGGLER_APP_IS_OVERLAY_OPEN() IF NOT IS_HANGAR_SETUP_MISSION_COMPLETE() SET_BIT(iBS, SM_BS_SHOW_SETUP_HELP) SHOW_OVERLAY("HAPP_T1", "HAPP_D1", "HAPP_SU", "", FALSE, FALSE, DEFAULT, SM_STAGE_LAUNCH_SETUP) IF NOT HAS_SMUGGLER_WEBSITE_TUT_BEEN_DONE(eWTBS2_SMG_SETUP_OVERLAY) AND NOT IS_BIT_SET(g_iWebsiteTutorialDisplayedBS2, ENUM_TO_INT(eWTBS2_SMG_SETUP_OVERLAY)) AND IS_BIT_SET(iBS, SM_BS_SHOW_SETUP_HELP) SMUGGLER_PRINT_TUTORIAL_HELP("HAPP_HELP_3", 14000) SET_BIT(g_iWebsiteTutorialDisplayedBS2, ENUM_TO_INT(eWTBS2_SMG_SETUP_OVERLAY)) INCREMENT_TUTORIAL_COUNT(eWTBS2_SMG_SETUP_OVERLAY) ENDIF ELSE SET_BIT(iBS, SM_BS_SETUP_COMPLETE) ENDIF ENDIF ENDIF ENDPROC PROC MONITOR_STOCK_LEVELS() IF iCargoTotal != GET_LOCAL_PLAYERS_CONTRABAND_UNITS_TOTAL_FOR_HANGAR() IF NOT HAS_NET_TIMER_STARTED(stStockUpdateTimer) START_NET_TIMER(stStockUpdateTimer) ELIF HAS_NET_TIMER_EXPIRED(stStockUpdateTimer, 750) RESET_NET_TIMER(stStockUpdateTimer) SEND_ALL_DATA_TO_SCALEFORM() ENDIF ENDIF ENDPROC //FEATURE_SMUGGLER //***********SCRIPT*********** SCRIPT CDEBUG1LN(DEBUG_INTERNET, " started \"", GET_THIS_SCRIPT_NAME(), "\"") IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY("appSmuggler")) > 1 CDEBUG1LN(DEBUG_SAFEHOUSE, " Smuggler app script already running! cleaning up.") SCRIPT_CLEANUP() ENDIF SCRIPT_INITALISE() CDEBUG1LN(DEBUG_SAFEHOUSE, " Initalisation complete. Hangar = ", eOwnedHangar) /// main update loop WHILE IS_BROWSER_OPEN() RUN_CLEANUP_CHECKS() IF NOT IS_BIT_SET(iBS, SM_BS_DIALOGUE_TUTORIAL_COMPLETE) AND IS_HANGAR_SETUP_MISSION_COMPLETE() SMUGGLER_SELECT_APP_DIALOGUE_TUTORIAL() SMUGGLER_RUN_TUTORIAL_DIALOGUE() ENDIF IF NOT IS_BIT_SET(iBS, SM_BS_HELP_TEXT_TUTORIAL_COMPLETE) AND IS_BIT_SET(iBS, SM_BS_DIALOGUE_TUTORIAL_COMPLETE) SMUGGLER_RUN_APP_HELP_TEXT_TUTORIAL() ENDIF MAINATIN_PRE_SETUP_OVERLAY() RENDER_SMUGGLER_APP() PASS_INPUTS_TO_SCALEFORM() MAINTAIN_ACTIVE_ORGANIZATION_LIST() MAINTAIN_COOLDOWN_TIMERS() MONITOR_STOCK_LEVELS() IF NOT IS_BIT_SET(iBS, SM_BS_LAUNCHED_MISSION) CHECK_BUTTON_PRESS() ELSE //for: url:bugstar:3015579 IF NOT HAS_NET_TIMER_STARTED(stExitDelay) START_NET_TIMER(stExitDelay) PRINTLN(" Started exit delay timer for mission launch") ELIF HAS_NET_TIMER_EXPIRED(stExitDelay, 200) IF NOT g_SimpleInteriorData.bTriggerExit AND IS_SCREEN_FADED_OUT() PRINTLN(" Triggering simple interior exit") TRIGGER_EXIT_FROM_SIMPLE_INTERIOR_NOW() g_bLaunchedMissionFrmLaptop = TRUE SCRIPT_CLEANUP() ENDIF ENDIF ENDIF WAIT(0) ENDWHILE // Script should never reach here. Always terminate with cleanup function. CASSERTLN(DEBUG_SAFEHOUSE, " \"", GET_THIS_SCRIPT_NAME(), "\" should never reach here. Always terminate with cleanup function.") ENDSCRIPT