2135 lines
74 KiB
Python
Executable File
2135 lines
74 KiB
Python
Executable File
///// 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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, "<APP_SMUGGLER>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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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("<APP_SMUGGLER>, 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_SMUGGLER> [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_SMUGGLER> [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("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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,"<APP_SMUGGLER> 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> SEND_ALL_DATA_TO_SCALEFORM - Player holds all cargo of the same type")
|
|
ELSE
|
|
PRINTLN("<APP_SMUGGLER> SEND_ALL_DATA_TO_SCALEFORM - Player holds no cargo")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
SET_BIT(iBS, SM_BS_STORED_CARGO_ALL_ONE_TYPE)
|
|
ELSE
|
|
PRINTLN("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> LAUNCH_MISSION Mixed type for sell. Player only owns this type.")
|
|
ENDIF
|
|
|
|
g_sSMUGGLER_Telemetry_data.m_FromHackerTruck = 0
|
|
PRINTLN("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER><APP_SMUGGLER_TUT> HAVE_ALL_DIALOGUE_TUTORIALS_BEEN_COMPLETED TRUE")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_SMUGGLER><APP_SMUGGLER_TUT> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER><APP_SMUGGLER_TUT> 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, "<APP_SMUGGLER><APP_SMUGGLER_TUT> 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, "<APP_SMUGGLER><APP_SMUGGLER_TUT> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER>[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, "<APP_SMUGGLER>[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, "<APP_SMUGGLER>[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, "<APP_SMUGGLER> Shutting down! No network game is currently active")
|
|
SCRIPT_CLEANUP()
|
|
ELIF IS_PAUSE_MENU_ACTIVE_EX()
|
|
CPRINTLN(DEBUG_INTERNET, "<APP_SMUGGLER> Shutting down! Player opend the pause menu")
|
|
SCRIPT_CLEANUP()
|
|
ELIF IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_SAFEHOUSE, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> ADD_PLAYER_TO_ACTIVE_SMUGGLER_LIST. Adding: ", tlUserList[i], " to slot: ", i)
|
|
EXIT
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
CDEBUG1LN(DEBUG_SAFEHOUSE, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> REMOVE_PLAYER_FROM_ACTIVE_SMUGGLER_LIST. index: ", iIndex)
|
|
CDEBUG1LN(DEBUG_SAFEHOUSE, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> 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, "<APP_SMUGGLER> bRunningFmIntroCut is true so cleaning up!")
|
|
ENDIF
|
|
|
|
CDEBUG1LN(DEBUG_SAFEHOUSE, "<APP_SMUGGLER> 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> 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, "<APP_SMUGGLER> started \"", GET_THIS_SCRIPT_NAME(), "\"")
|
|
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY("appSmuggler")) > 1
|
|
CDEBUG1LN(DEBUG_SAFEHOUSE, "<APP_SMUGGLER> Smuggler app script already running! cleaning up.")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
SCRIPT_INITALISE()
|
|
CDEBUG1LN(DEBUG_SAFEHOUSE, "<APP_SMUGGLER> 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("<APP_SMUGGLER> 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("<APP_SMUGGLER> Triggering simple interior exit")
|
|
TRIGGER_EXIT_FROM_SIMPLE_INTERIOR_NOW()
|
|
g_bLaunchedMissionFrmLaptop = TRUE
|
|
SCRIPT_CLEANUP()
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
// Script should never reach here. Always terminate with cleanup function.
|
|
CASSERTLN(DEBUG_SAFEHOUSE, "<APP_SMUGGLER> \"", GET_THIS_SCRIPT_NAME(), "\" should never reach here. Always terminate with cleanup function.")
|
|
ENDSCRIPT
|
|
|