1327 lines
33 KiB
Scheme
Executable File
1327 lines
33 KiB
Scheme
Executable File
//╒═════════════════════════════════════════════════════════════════════════════╕
|
|
//│ Author: Adam Westwood Date: 22/01/14 │
|
|
//╞═════════════════════════════════════════════════════════════════════════════╡
|
|
//│ │
|
|
//│ Heist Bags │
|
|
//│ │
|
|
//│ Controls minigame and determines the fullness level of a heist bag │
|
|
//| │
|
|
//│ │
|
|
//╘═════════════════════════════════════════════════════════════════════════════╛
|
|
|
|
|
|
//if u use the original prop_gold_trolly_full.
|
|
//I have added:
|
|
//Prop_Gold_Trolly_Half_Full
|
|
//Prop_Gold_Trolly_Empty
|
|
//
|
|
//and if u use the original PROP_CASH_CRATE_01
|
|
//I have added:
|
|
//Prop_Cash_Crate_Half_full
|
|
//Prop_Cash_Crate_Empty
|
|
//
|
|
//assetes added for next build
|
|
//
|
|
//CJ
|
|
|
|
|
|
USING "timer_public.sch"
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
|
|
USING "commands_audio.sch"
|
|
USING "commands_camera.sch"
|
|
USING "commands_clock.sch"
|
|
USING "commands_debug.sch"
|
|
USING "commands_fire.sch"
|
|
USING "commands_graphics.sch"
|
|
USING "commands_hud.sch"
|
|
USING "commands_misc.sch"
|
|
USING "commands_object.sch"
|
|
USING "commands_pad.sch"
|
|
USING "commands_ped.sch"
|
|
USING "commands_player.sch"
|
|
USING "commands_script.sch"
|
|
USING "commands_streaming.sch"
|
|
USING "commands_task.sch"
|
|
USING "commands_vehicle.sch"
|
|
USING "commands_interiors.sch"
|
|
USING "net_include.sch"
|
|
|
|
USING "model_enums.sch"
|
|
USING "script_player.sch"
|
|
USING "script_misc.sch"
|
|
USING "selector_public.sch"
|
|
USING "timer_public.sch"
|
|
|
|
USING "LineActivation.sch"
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
USING "shared_debug.sch"
|
|
USING "script_debug.sch"
|
|
#ENDIF
|
|
|
|
CONST_INT CASH_GRAB_BS_CASH_BAGGED 0
|
|
CONST_INT CASH_GRAB_BS_BAG_REMOVED 1
|
|
CONST_INT CASH_GRAB_BS_GRAB_ANIM_STOPPED 2
|
|
CONST_INT CASH_GRAB_BS_MINIGAME_COMPLETED 3
|
|
CONST_INT CASH_GRAB_BS_ANIM_EVENTS_STARTED 4
|
|
CONST_INT CASH_GRAB_BS_USE_HIGH_HEELS_ANIMS 5
|
|
CONST_INT CASH_GRAB_BS_WALK_TASK_GIVEN_EARLY 6
|
|
CONST_INT CASH_GRAB_BS_SKIP_WALK_AND_DO_INTRO 7
|
|
CONST_INT CASH_GRAB_BS_BAG_PROP_LOCALLY_VISIBLE 8
|
|
|
|
ENUM HEIST_BAG_STATE
|
|
HBS_NONE,
|
|
HBS_DUFFLE_BAG_EMPTY,
|
|
HBS_DUFFLE_BAG_FULL,
|
|
HBS_DUFFLE_BAG_EMPTY_FOR_BODY_ARMOUR,
|
|
HBS_DUFFLE_BAG_FULL_FOR_BODY_ARMOUR,
|
|
HBS_SPORTS_BAG_EMPTY,
|
|
HBS_SPORTS_BAG_FULL,
|
|
HBS_SPORTS_BAG_EMPTY_FOR_BODY_ARMOUR,
|
|
HBS_SPORTS_BAG_FULL_FOR_BODY_ARMOUR
|
|
ENDENUM
|
|
|
|
ENUM HEIST_BAG_GRAB_STATE
|
|
|
|
HBGS_NONE,
|
|
HBGS_APPROACH,
|
|
HBGS_INTRO_ANIM,
|
|
HBGS_IDLE_ANIM,
|
|
HBGS_GRAB_ANIM,
|
|
HBGS_EXIT_ANIM
|
|
|
|
ENDENUM
|
|
|
|
ENUM HEIST_BAG_TYPE
|
|
HBT_DUFFLE_BAG,
|
|
HBT_SPORTS_BAG
|
|
ENDENUM
|
|
|
|
ENUM CASH_TYPE
|
|
CT_GOLD,
|
|
CT_PAPER
|
|
ENDENUM
|
|
|
|
ENUM GRAB_DIFFICULTY
|
|
GD_EASY,
|
|
GD_MEDIUM,
|
|
GD_HARD
|
|
ENDENUM
|
|
|
|
STRUCT PLAYER_HEIST_BAG
|
|
HEIST_BAG_STATE e_heist_bag_state = HBS_NONE
|
|
FLOAT fAmountInBag
|
|
ENDSTRUCT
|
|
|
|
STRUCT S_CASH_GRAB_DATA
|
|
|
|
HEIST_BAG_GRAB_STATE eState
|
|
GRAB_DIFFICULTY eDifficulty
|
|
CAMERA_INDEX cameraIndex
|
|
|
|
INT iCashGrabOngoingInteractionIndex = -1
|
|
|
|
INT iGrabAmount
|
|
INT iBonusCashPiles
|
|
INT iTotalCashPiles
|
|
INT iBonusCashPilesGrabbed
|
|
INT iPlayerSceneID
|
|
INT iTrolleySceneID
|
|
|
|
INT iBaseCashPileValue
|
|
INT iBonusCashPileValue
|
|
|
|
INT iBitSet
|
|
|
|
FLOAT fGrabPhase
|
|
FLOAT fGrabSpeed
|
|
FLOAT fMaxGrabSpeed
|
|
|
|
VECTOR vCamStartPos
|
|
VECTOR vCamPointPos
|
|
|
|
FLOAT fCamRotOffset
|
|
FLOAT fDesiredCamRotOffset
|
|
FLOAT fCamHeightOffset
|
|
FLOAT fDesiredCamHeightOffset
|
|
|
|
FLOAT fMissionDifficultyModifier
|
|
|
|
STRING sBagAnimDict
|
|
ENDSTRUCT
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
DEBUGONLY FUNC STRING GET_HEIST_BAG_GRAB_STATE(S_CASH_GRAB_DATA &data)
|
|
|
|
SWITCH data.eState
|
|
|
|
CASE HBGS_NONE
|
|
RETURN "HBGS_NONE"
|
|
BREAK
|
|
|
|
CASE HBGS_APPROACH
|
|
RETURN "HBGS_APPROACH"
|
|
BREAK
|
|
|
|
CASE HBGS_INTRO_ANIM
|
|
RETURN "HBGS_INTRO_ANIM"
|
|
BREAK
|
|
|
|
CASE HBGS_IDLE_ANIM
|
|
RETURN "HBGS_IDLE_ANIM"
|
|
BREAK
|
|
|
|
CASE HBGS_GRAB_ANIM
|
|
RETURN "HBGS_GRAB_ANIM"
|
|
BREAK
|
|
|
|
CASE HBGS_EXIT_ANIM
|
|
RETURN "HBGS_EXIT_ANIM"
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN ""
|
|
|
|
ENDFUNC
|
|
|
|
DEBUGONLY FUNC STRING GET_HEIST_BAG_GRAB_DIFFICULTY(S_CASH_GRAB_DATA &data)
|
|
|
|
SWITCH data.eDifficulty
|
|
|
|
CASE GD_EASY
|
|
RETURN "GD_EASY"
|
|
BREAK
|
|
CASE GD_MEDIUM
|
|
RETURN "GD_MEDIUM"
|
|
BREAK
|
|
CASE GD_HARD
|
|
RETURN "GD_HARD"
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN ""
|
|
|
|
ENDFUNC
|
|
|
|
#ENDIF
|
|
|
|
FUNC BOOL IS_CASH_TROLLEY(MODEL_NAMES mnToCheck)
|
|
RETURN mnToCheck = HEI_PROP_HEI_CASH_TROLLY_01
|
|
OR mnToCheck = CH_PROP_CASH_LOW_TROLLY_01A
|
|
OR mnToCheck = CH_PROP_CH_CASH_TROLLY_01A
|
|
OR mnToCheck = CH_PROP_CH_CASH_TROLLY_01B
|
|
OR mnToCheck = CH_PROP_CH_CASH_TROLLY_01C
|
|
OR mnToCheck = CH_PROP_CASH_LOW_TROLLY_01B
|
|
OR mnToCheck = CH_PROP_CASH_LOW_TROLLY_01C
|
|
ENDFUNC
|
|
FUNC BOOL IS_LOW_CASH_TROLLEY(MODEL_NAMES mnToCheck)
|
|
RETURN mnToCheck = CH_PROP_CASH_LOW_TROLLY_01A
|
|
OR mnToCheck = CH_PROP_CASH_LOW_TROLLY_01B
|
|
OR mnToCheck = CH_PROP_CASH_LOW_TROLLY_01C
|
|
ENDFUNC
|
|
FUNC BOOL IS_DIAMOND_TROLLEY(MODEL_NAMES mnToCheck)
|
|
RETURN mnToCheck = CH_PROP_DIAMOND_TROLLY_01A
|
|
OR mnToCheck = CH_PROP_DIAMOND_TROLLY_01B
|
|
OR mnToCheck = CH_PROP_DIAMOND_TROLLY_01C
|
|
ENDFUNC
|
|
FUNC BOOL IS_GOLD_TROLLEY(MODEL_NAMES mnToCheck)
|
|
RETURN mnToCheck = PROP_GOLD_TROLLY_FULL
|
|
OR mnToCheck = CH_PROP_GOLD_TROLLY_01A
|
|
OR mnToCheck = CH_PROP_GOLD_TROLLY_01B
|
|
OR mnToCheck = CH_PROP_GOLD_TROLLY_01C
|
|
ENDFUNC
|
|
FUNC BOOL IS_COKE_TROLLEY(MODEL_NAMES mnToCheck)
|
|
RETURN mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("imp_prop_impexp_coke_trolly"))
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_PAINTING(MODEL_NAMES mnToCheck)
|
|
RETURN mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("CH_prop_vault_painting_01a"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("CH_prop_vault_painting_01b"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("CH_prop_vault_painting_01c"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("CH_prop_vault_painting_01d"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("CH_prop_vault_painting_01e"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("CH_prop_vault_painting_01f"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("CH_prop_vault_painting_01g"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("CH_prop_vault_painting_01h"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("CH_prop_vault_painting_01i"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("CH_prop_vault_painting_01j"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Painting_01a"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Painting_01b"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Painting_01c"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Painting_01d"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Painting_01e"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Painting_01f"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Painting_01g"))
|
|
OR mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Painting_01h"))
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_CASH_PILE(MODEL_NAMES mnToCheck)
|
|
RETURN mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Cash_Stack_01a"))
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_COKE_PILE(MODEL_NAMES mnToCheck)
|
|
RETURN mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Coke_Stack_01a"))
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_WEED_PILE(MODEL_NAMES mnToCheck)
|
|
RETURN mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Weed_Stack_01a"))
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_GOLD_PILE(MODEL_NAMES mnToCheck)
|
|
RETURN mnToCheck = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Gold_Stack_01a"))
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_LOOT_PILE(MODEL_NAMES mnToCheck)
|
|
RETURN IS_CASH_PILE(mnToCheck)
|
|
OR IS_COKE_PILE(mnToCheck)
|
|
OR IS_WEED_PILE(mnToCheck)
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_GRAB_PILE(MODEL_NAMES mnToCheck)
|
|
RETURN IS_LOOT_PILE(mnToCheck)
|
|
OR IS_GOLD_PILE(mnToCheck)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Get the name of the animation dictionary for heist bag minigame depending on the mission prop's model.
|
|
/// PARAMS:
|
|
/// tempObj - Mission prop object that the grab minigame animations are played for.
|
|
/// RETURNS:
|
|
/// The name of the animation dictionary specific for the mission prop.
|
|
FUNC STRING GET_HEIST_BAG_MINIGAME_ANIM_DICT(OBJECT_INDEX tempObj, BOOL bUseHighHeelsAnims)
|
|
|
|
IF DOES_ENTITY_EXIST(tempObj)
|
|
|
|
MODEL_NAMES mnObj = GET_ENTITY_MODEL(tempObj)
|
|
|
|
IF GET_ENTITY_MODEL(tempObj) = INT_TO_ENUM(MODEL_NAMES, HASH("imp_prop_impexp_coke_trolly"))
|
|
OR IS_DIAMOND_TROLLEY(mnObj)
|
|
OR IS_CASH_TROLLEY(mnObj)
|
|
OR IS_GOLD_TROLLEY(mnObj)
|
|
IF bUseHighHeelsAnims
|
|
RETURN "anim@heists@ornate_bank@grab_cash_heels"
|
|
ELSE
|
|
RETURN "anim@heists@ornate_bank@grab_cash"
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PAINTING(mnObj)
|
|
RETURN "ANIM_HEIST@HS3F@IG11_STEAL_PAINTING@MALE@"
|
|
ENDIF
|
|
|
|
IF IS_LOOT_PILE(mnObj)
|
|
IF bUseHighHeelsAnims
|
|
RETURN "ANIM@SCRIPTED@PLAYER@MISSION@TUN_TABLE_GRAB@CASH@HEELED@"
|
|
ELSE
|
|
RETURN "ANIM@SCRIPTED@PLAYER@MISSION@TUN_TABLE_GRAB@CASH@"
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_GOLD_PILE(mnObj)
|
|
IF bUseHighHeelsAnims
|
|
RETURN "ANIM@SCRIPTED@PLAYER@MISSION@TUN_TABLE_GRAB@GOLD@HEELED@"
|
|
ELSE
|
|
RETURN "ANIM@SCRIPTED@PLAYER@MISSION@TUN_TABLE_GRAB@GOLD@"
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH mnObj
|
|
CASE HEI_PROP_HEI_CASH_TROLLY_01
|
|
IF bUseHighHeelsAnims
|
|
RETURN "anim@heists@ornate_bank@grab_cash_heels"
|
|
ELSE
|
|
RETURN "anim@heists@ornate_bank@grab_cash"
|
|
ENDIF
|
|
BREAK
|
|
CASE PROP_GOLD_TROLLY_FULL
|
|
RETURN "anim@heists@ornate_bank@ig_4_grab_gold"
|
|
BREAK
|
|
DEFAULT
|
|
RETURN "anim@heists@money_grab@duffel"
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN ""
|
|
|
|
ENDFUNC
|
|
|
|
PROC REQUEST_HEIST_BAG_ASSETS(MODEL_NAMES mnBag = HEI_P_M_BAG_VAR22_ARM_S)
|
|
|
|
REQUEST_MODEL(mnBag)
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if heist bag assets have loaded.
|
|
/// RETURNS:
|
|
/// Returns true if heist bag assets have loaded, false otherwise.
|
|
FUNC BOOL HAVE_HEIST_BAG_ASSETS_LOADED(MODEL_NAMES mnBag = HEI_P_M_BAG_VAR22_ARM_S)
|
|
|
|
RETURN HAS_MODEL_LOADED(mnBag)
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Request audio bank for heist bag minigame depending on the mission prop's model.
|
|
/// PARAMS:
|
|
/// tempObj - Mission prop object that the grab minigame uses.
|
|
PROC REQUEST_HEIST_BAG_MINIGAME_AUDIO_BANK(OBJECT_INDEX tempObj)
|
|
|
|
IF IS_PAINTING(GET_ENTITY_MODEL(tempObj))
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(tempObj)
|
|
SWITCH GET_ENTITY_MODEL(tempObj)
|
|
CASE HEI_PROP_HEI_CASH_TROLLY_01
|
|
// don't request any audio bank
|
|
BREAK
|
|
CASE PROP_GOLD_TROLLY_FULL
|
|
REQUEST_SCRIPT_AUDIO_BANK("DLC_MPHEIST/HEIST_STASH_SWAG")
|
|
BREAK
|
|
DEFAULT
|
|
REQUEST_SCRIPT_AUDIO_BANK("DLC_MPHEIST/HEIST_STASH_SWAG")
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC RELEASE_HEIST_BAG_MINIGAME_AUDIO_BANK()
|
|
RELEASE_NAMED_SCRIPT_AUDIO_BANK("DLC_MPHEIST/HEIST_STASH_SWAG")
|
|
PRINTLN("RELEASE_HEIST_BAG_MINIGAME_AUDIO_BANK - Releasing audio bank")
|
|
ENDPROC
|
|
|
|
FUNC BOOL HAS_HEIST_BAG_MINIGAME_AUDIO_BANK_LOADED(OBJECT_INDEX tempObj)
|
|
|
|
IF DOES_ENTITY_EXIST(tempObj)
|
|
SWITCH GET_ENTITY_MODEL(tempObj)
|
|
CASE HEI_PROP_HEI_CASH_TROLLY_01
|
|
RETURN TRUE
|
|
BREAK
|
|
CASE PROP_GOLD_TROLLY_FULL
|
|
RETURN REQUEST_SCRIPT_AUDIO_BANK("DLC_MPHEIST/HEIST_STASH_SWAG")
|
|
BREAK
|
|
DEFAULT
|
|
RETURN REQUEST_SCRIPT_AUDIO_BANK("DLC_MPHEIST/HEIST_STASH_SWAG")
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF GET_ENTITY_MODEL(tempObj) = INT_TO_ENUM(MODEL_NAMES, HASH("imp_prop_impexp_coke_trolly"))
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC REQUEST_HEIST_BAG_MINIGAME_ASSETS(OBJECT_INDEX tempObj, BOOL bUseHighHeelsAnims, MODEL_NAMES mnBag = HEI_P_M_BAG_VAR22_ARM_S)
|
|
|
|
//request models
|
|
REQUEST_MODEL(mnBag)
|
|
MODEL_NAMES mnObj = GET_ENTITY_MODEL(tempObj)
|
|
IF mnObj = INT_TO_ENUM(MODEL_NAMES, HASH("imp_prop_impexp_coke_trolly"))
|
|
OR mnObj = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Coke_Stack_01a"))
|
|
REQUEST_MODEL(INT_TO_ENUM(MODEL_NAMES, HASH("imp_prop_impexp_coke_pile")))
|
|
|
|
ELIF IS_DIAMOND_TROLLEY(mnObj)
|
|
REQUEST_MODEL(ch_Prop_Vault_Dimaondbox_01a)
|
|
|
|
ELIF IS_GOLD_TROLLEY(mnObj)
|
|
OR mnObj = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Gold_Stack_01a"))
|
|
REQUEST_MODEL(CH_PROP_GOLD_BAR_01A)
|
|
|
|
ELIF mnObj = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Weed_Stack_01a"))
|
|
REQUEST_MODEL(hei_prop_heist_weed_block_01b)
|
|
|
|
ELSE
|
|
REQUEST_MODEL(HEI_PROP_HEIST_CASH_PILE)
|
|
ENDIF
|
|
|
|
//request animation dictionaries
|
|
REQUEST_ANIM_DICT(GET_HEIST_BAG_MINIGAME_ANIM_DICT(tempObj, bUseHighHeelsAnims))
|
|
|
|
//request audio banks
|
|
REQUEST_HEIST_BAG_MINIGAME_AUDIO_BANK(tempObj)
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL HAVE_HEIST_BAG_MINIGAME_ASSETS_LOADED(OBJECT_INDEX tempObj, BOOL bUseHighHeelsAnims, MODEL_NAMES mnBag = HEI_P_M_BAG_VAR22_ARM_S)
|
|
|
|
MODEL_NAMES mnObj = GET_ENTITY_MODEL(tempObj)
|
|
|
|
IF mnObj = INT_TO_ENUM(MODEL_NAMES, HASH("imp_prop_impexp_coke_trolly"))
|
|
OR mnObj = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Coke_Stack_01a"))
|
|
IF HAS_MODEL_LOADED(mnBag)
|
|
AND HAS_MODEL_LOADED(INT_TO_ENUM(MODEL_NAMES, HASH("imp_prop_impexp_coke_pile")))
|
|
AND HAS_HEIST_BAG_MINIGAME_AUDIO_BANK_LOADED(tempObj)
|
|
AND HAS_ANIM_DICT_LOADED(GET_HEIST_BAG_MINIGAME_ANIM_DICT(tempObj, bUseHighHeelsAnims))
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
ELIF IS_DIAMOND_TROLLEY(mnObj)
|
|
IF HAS_MODEL_LOADED(mnBag)
|
|
AND HAS_MODEL_LOADED(INT_TO_ENUM(MODEL_NAMES, HASH("ch_Prop_Vault_Dimaondbox_01a")))
|
|
AND HAS_HEIST_BAG_MINIGAME_AUDIO_BANK_LOADED(tempObj)
|
|
AND HAS_ANIM_DICT_LOADED(GET_HEIST_BAG_MINIGAME_ANIM_DICT(tempObj, bUseHighHeelsAnims))
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
ELIF IS_GOLD_TROLLEY(mnObj)
|
|
OR mnObj = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Gold_Stack_01a"))
|
|
IF HAS_MODEL_LOADED(mnBag)
|
|
AND HAS_MODEL_LOADED(CH_PROP_GOLD_BAR_01A)
|
|
AND HAS_HEIST_BAG_MINIGAME_AUDIO_BANK_LOADED(tempObj)
|
|
AND HAS_ANIM_DICT_LOADED(GET_HEIST_BAG_MINIGAME_ANIM_DICT(tempObj, bUseHighHeelsAnims))
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_PAINTING(mnObj)
|
|
IF HAS_MODEL_LOADED(mnBag)
|
|
AND HAS_ANIM_DICT_LOADED(GET_HEIST_BAG_MINIGAME_ANIM_DICT(tempObj, bUseHighHeelsAnims))
|
|
PRINTLN("[ML] Bag and anim dict for bag loaded")
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF mnObj = INT_TO_ENUM(MODEL_NAMES, HASH("h4_Prop_h4_Weed_Stack_01a"))
|
|
IF HAS_MODEL_LOADED(mnBag)
|
|
AND HAS_MODEL_LOADED(hei_prop_heist_weed_block_01b)
|
|
AND HAS_HEIST_BAG_MINIGAME_AUDIO_BANK_LOADED(tempObj)
|
|
AND HAS_ANIM_DICT_LOADED(GET_HEIST_BAG_MINIGAME_ANIM_DICT(tempObj, bUseHighHeelsAnims))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
ELSE
|
|
IF HAS_MODEL_LOADED(mnBag)
|
|
AND HAS_MODEL_LOADED(HEI_PROP_HEIST_CASH_PILE)
|
|
AND HAS_HEIST_BAG_MINIGAME_AUDIO_BANK_LOADED(tempObj)
|
|
AND HAS_ANIM_DICT_LOADED(GET_HEIST_BAG_MINIGAME_ANIM_DICT(tempObj, bUseHighHeelsAnims))
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC CLEANUP_HEIST_BAG_MINIGAME_ASSETS(OBJECT_INDEX tempObj, BOOL bUseHighHeelsAnims, MODEL_NAMES mnBag = HEI_P_M_BAG_VAR22_ARM_S)
|
|
|
|
//remove models
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(mnBag)
|
|
IF GET_ENTITY_MODEL(tempObj) = INT_TO_ENUM(MODEL_NAMES, HASH("imp_prop_impexp_coke_trolly"))
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(INT_TO_ENUM(MODEL_NAMES, HASH("imp_prop_impexp_coke_pile")))
|
|
ELIF IS_DIAMOND_TROLLEY(GET_ENTITY_MODEL(tempObj))
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(INT_TO_ENUM(MODEL_NAMES, HASH("ch_Prop_Vault_Dimaondbox_01a")))
|
|
ELIF IS_GOLD_TROLLEY(GET_ENTITY_MODEL(tempObj))
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(CH_PROP_GOLD_BAR_01A)
|
|
ELSE
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(HEI_PROP_HEIST_CASH_PILE)
|
|
ENDIF
|
|
|
|
//request animation dictionaries
|
|
REMOVE_ANIM_DICT(GET_HEIST_BAG_MINIGAME_ANIM_DICT(tempObj, bUseHighHeelsAnims))
|
|
|
|
RELEASE_HEIST_BAG_MINIGAME_AUDIO_BANK()
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_PED_PLAYING_ANY_CASH_GRAB_ANIM(PED_INDEX PedIndex)
|
|
|
|
IF NOT IS_PED_INJURED(PedIndex)
|
|
IF IS_ENTITY_PLAYING_ANIM(PedIndex, "anim@heists@ornate_bank@grab_cash", "intro")
|
|
OR IS_ENTITY_PLAYING_ANIM(PedIndex, "anim@heists@ornate_bank@grab_cash", "grab_idle")
|
|
OR IS_ENTITY_PLAYING_ANIM(PedIndex, "anim@heists@ornate_bank@grab_cash", "grab")
|
|
OR IS_ENTITY_PLAYING_ANIM(PedIndex, "anim@heists@ornate_bank@grab_cash", "exit")
|
|
//high heels version of anims
|
|
OR IS_ENTITY_PLAYING_ANIM(PedIndex, "anim@heists@ornate_bank@grab_cash_heels", "intro")
|
|
OR IS_ENTITY_PLAYING_ANIM(PedIndex, "anim@heists@ornate_bank@grab_cash_heels", "grab_idle")
|
|
OR IS_ENTITY_PLAYING_ANIM(PedIndex, "anim@heists@ornate_bank@grab_cash_heels", "grab")
|
|
OR IS_ENTITY_PLAYING_ANIM(PedIndex, "anim@heists@ornate_bank@grab_cash_heels", "exit")
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC RESET_CASH_GRAB_MINIGAME_DATA(S_CASH_GRAB_DATA &data)
|
|
|
|
data.fGrabSpeed = 1.0
|
|
data.fMaxGrabSpeed = 1.0
|
|
data.eState = HBGS_NONE
|
|
data.iCashGrabOngoingInteractionIndex = -1
|
|
CLEAR_BIT(data.iBitSet, CASH_GRAB_BS_MINIGAME_COMPLETED)
|
|
CLEAR_BIT(data.iBitSet, CASH_GRAB_BS_USE_HIGH_HEELS_ANIMS)
|
|
ENDPROC
|
|
|
|
PROC RESET_CASH_GRAB_SPEED(S_CASH_GRAB_DATA &data)
|
|
|
|
data.fGrabSpeed = 1.0
|
|
data.fMaxGrabSpeed = 1.0
|
|
|
|
ENDPROC
|
|
|
|
PROC CONVERGE_VALUE(FLOAT &fCurrentValue, FLOAT fDesiredValue, FLOAT fAmountToConverge, BOOL bAdjustForFramerate = FALSE)
|
|
IF fCurrentValue != fDesiredValue
|
|
FLOAT fConvergeAmountThisFrame = fAmountToConverge
|
|
IF bAdjustForFramerate
|
|
fConvergeAmountThisFrame = 0.0 +@ (fAmountToConverge * 30.0)
|
|
ENDIF
|
|
|
|
IF fCurrentValue - fDesiredValue > fConvergeAmountThisFrame
|
|
fCurrentValue -= fConvergeAmountThisFrame
|
|
ELIF fCurrentValue - fDesiredValue < -fConvergeAmountThisFrame
|
|
fCurrentValue += fConvergeAmountThisFrame
|
|
ELSE
|
|
fCurrentValue = fDesiredValue
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC UPDATE_CASH_GRAB_SPEED(S_CASH_GRAB_DATA &data, FLOAT fMinSpeed = 0.75, FLOAT fMaxSpeed = 1.50)
|
|
|
|
//increase the max speed when player presses the button
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT)
|
|
SWITCH data.eDifficulty
|
|
CASE GD_EASY
|
|
data.fMaxGrabSpeed = CLAMP(data.fMaxGrabSpeed +(0.100) , fMinSpeed, fMaxSpeed)
|
|
BREAK
|
|
CASE GD_MEDIUM
|
|
data.fMaxGrabSpeed = CLAMP(data.fMaxGrabSpeed +(0.090) , fMinSpeed, fMaxSpeed)
|
|
BREAK
|
|
CASE GD_HARD
|
|
data.fMaxGrabSpeed = CLAMP(data.fMaxGrabSpeed +(0.080) , fMinSpeed, fMaxSpeed)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ELSE
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
SWITCH data.eDifficulty
|
|
CASE GD_EASY
|
|
data.fMaxGrabSpeed = CLAMP(data.fMaxGrabSpeed +(0.100) , fMinSpeed, fMaxSpeed)
|
|
BREAK
|
|
CASE GD_MEDIUM
|
|
data.fMaxGrabSpeed = CLAMP(data.fMaxGrabSpeed +(0.090) , fMinSpeed, fMaxSpeed)
|
|
BREAK
|
|
CASE GD_HARD
|
|
data.fMaxGrabSpeed = CLAMP(data.fMaxGrabSpeed +(0.080) , fMinSpeed, fMaxSpeed)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//make the max speed always decrease and clamp it between min and max speed values
|
|
SWITCH data.eDifficulty
|
|
CASE GD_EASY
|
|
data.fMaxGrabSpeed = CLAMP(data.fMaxGrabSpeed -@(0.010 * 30) , fMinSpeed, fMaxSpeed)
|
|
BREAK
|
|
CASE GD_MEDIUM
|
|
data.fMaxGrabSpeed = CLAMP(data.fMaxGrabSpeed -@(0.0125 * 30) , fMinSpeed, fMaxSpeed)
|
|
BREAK
|
|
CASE GD_HARD
|
|
data.fMaxGrabSpeed = CLAMP(data.fMaxGrabSpeed -@(0.0135 * 30) , fMinSpeed, fMaxSpeed)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
//make the current speed achieve the max speed
|
|
CONVERGE_VALUE(data.fGrabSpeed , data.fMaxGrabSpeed , 0.02, TRUE)
|
|
|
|
//clamp the current speed between min and max speed values
|
|
data.fGrabSpeed = CLAMP(data.fGrabSpeed , fMinSpeed, fMaxSpeed)
|
|
|
|
ENDPROC
|
|
|
|
FUNC STRING GET_ANIM_EVENT_NAME_FROM_INT(INT iValue)
|
|
|
|
STRING sAnimEventName
|
|
|
|
SWITCH iValue
|
|
|
|
CASE 1
|
|
sAnimEventName = "one"
|
|
BREAK
|
|
|
|
CASE 2
|
|
sAnimEventName = "two"
|
|
BREAK
|
|
|
|
CASE 3
|
|
sAnimEventName = "three"
|
|
BREAK
|
|
|
|
CASE 4
|
|
sAnimEventName = "four"
|
|
BREAK
|
|
|
|
CASE 5
|
|
sAnimEventName = "five"
|
|
BREAK
|
|
|
|
CASE 6
|
|
sAnimEventName = "six"
|
|
BREAK
|
|
|
|
CASE 7
|
|
sAnimEventName = "seven"
|
|
BREAK
|
|
|
|
CASE 8
|
|
sAnimEventName = "eight"
|
|
BREAK
|
|
|
|
CASE 9
|
|
sAnimEventName = "nine"
|
|
BREAK
|
|
|
|
CASE 10
|
|
sAnimEventName = "ten"
|
|
BREAK
|
|
|
|
CASE 11
|
|
sAnimEventName = "eleven"
|
|
BREAK
|
|
|
|
CASE 12
|
|
sAnimEventName = "tweleve"
|
|
BREAK
|
|
|
|
CASE 13
|
|
sAnimEventName = "thirteen"
|
|
BREAK
|
|
|
|
CASE 14
|
|
sAnimEventName = "fourteen"
|
|
BREAK
|
|
|
|
CASE 15
|
|
sAnimEventName = "fifteen"
|
|
BREAK
|
|
|
|
CASE 16
|
|
sAnimEventName = "sixteen"
|
|
BREAK
|
|
|
|
CASE 17
|
|
sAnimEventName = "seventeen"
|
|
BREAK
|
|
|
|
CASE 18
|
|
sAnimEventName = "eighteen"
|
|
BREAK
|
|
|
|
CASE 19
|
|
sAnimEventName = "nineteen"
|
|
BREAK
|
|
|
|
CASE 20
|
|
sAnimEventName = "twenty"
|
|
BREAK
|
|
|
|
CASE 21
|
|
sAnimEventName = "twentyone"
|
|
BREAK
|
|
|
|
CASE 22
|
|
sAnimEventName = "twentytwo"
|
|
BREAK
|
|
|
|
CASE 23
|
|
sAnimEventName = "twentythree"
|
|
BREAK
|
|
|
|
CASE 24
|
|
sAnimEventName = "twentyfour"
|
|
BREAK
|
|
|
|
CASE 25
|
|
sAnimEventName = "twentyfive"
|
|
BREAK
|
|
|
|
CASE 26
|
|
sAnimEventName = "twentysix"
|
|
BREAK
|
|
|
|
CASE 27
|
|
sAnimEventName = "twentyseven"
|
|
BREAK
|
|
|
|
CASE 28
|
|
sAnimEventName = "twentyeight"
|
|
BREAK
|
|
|
|
CASE 29
|
|
sAnimEventName = "twentynine"
|
|
BREAK
|
|
|
|
CASE 30
|
|
sAnimEventName = "thirty"
|
|
BREAK
|
|
|
|
CASE 31
|
|
sAnimEventName = "thirtyone"
|
|
BREAK
|
|
|
|
CASE 32
|
|
sAnimEventName = "thirtytwo"
|
|
BREAK
|
|
|
|
CASE 33
|
|
sAnimEventName = "thirtythree"
|
|
BREAK
|
|
|
|
CASE 34
|
|
sAnimEventName = "thirtyfour"
|
|
BREAK
|
|
|
|
CASE 35
|
|
sAnimEventName = "thirtyfive"
|
|
BREAK
|
|
|
|
CASE 36
|
|
sAnimEventName = "thirtysix"
|
|
BREAK
|
|
|
|
CASE 37
|
|
sAnimEventName = "thirtyseven"
|
|
BREAK
|
|
|
|
CASE 38
|
|
sAnimEventName = "thirtyeight"
|
|
BREAK
|
|
|
|
CASE 39
|
|
sAnimEventName = "thirtynine"
|
|
BREAK
|
|
|
|
CASE 40
|
|
sAnimEventName = "forty"
|
|
BREAK
|
|
|
|
CASE 41
|
|
sAnimEventName = "fortyone"
|
|
BREAK
|
|
|
|
CASE 42
|
|
sAnimEventName = "fortytwo"
|
|
BREAK
|
|
|
|
CASE 43
|
|
sAnimEventName = "fortythree"
|
|
BREAK
|
|
|
|
CASE 44
|
|
sAnimEventName = "fortyfour"
|
|
BREAK
|
|
|
|
CASE 45
|
|
sAnimEventName = "fortyfive"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN sAnimEventName
|
|
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GET_ANIMATION_RESUMPTION_PHASE_FROM_INT(INT iValue)
|
|
|
|
FLOAT fResumePhase
|
|
|
|
SWITCH iValue
|
|
|
|
CASE 1
|
|
fResumePhase = 0.022253
|
|
BREAK
|
|
|
|
CASE 2
|
|
fResumePhase = 0.043811
|
|
BREAK
|
|
|
|
CASE 3
|
|
fResumePhase = 0.061196
|
|
BREAK
|
|
|
|
CASE 4
|
|
fResumePhase = 0.084145
|
|
BREAK
|
|
|
|
CASE 5
|
|
fResumePhase = 0.102225
|
|
BREAK
|
|
|
|
CASE 6
|
|
fResumePhase = 0.118915
|
|
BREAK
|
|
|
|
CASE 7
|
|
fResumePhase = 0.138387
|
|
BREAK
|
|
|
|
CASE 8
|
|
fResumePhase = 0.156467
|
|
BREAK
|
|
|
|
CASE 9
|
|
fResumePhase = 0.182197
|
|
BREAK
|
|
|
|
CASE 10
|
|
fResumePhase = 0.202364
|
|
BREAK
|
|
|
|
CASE 11
|
|
fResumePhase = 0.226704
|
|
BREAK
|
|
|
|
CASE 12
|
|
fResumePhase = 0.249652
|
|
BREAK
|
|
|
|
CASE 13
|
|
fResumePhase = 0.270515
|
|
BREAK
|
|
|
|
CASE 14
|
|
fResumePhase = 0.292768
|
|
BREAK
|
|
|
|
CASE 15
|
|
fResumePhase = 0.315021
|
|
BREAK
|
|
|
|
CASE 16
|
|
fResumePhase = 0.342142
|
|
BREAK
|
|
|
|
CASE 17
|
|
fResumePhase = 0.363700
|
|
BREAK
|
|
|
|
CASE 18
|
|
fResumePhase = 0.385257
|
|
BREAK
|
|
|
|
CASE 19
|
|
fResumePhase = 0.406120
|
|
BREAK
|
|
|
|
CASE 20
|
|
fResumePhase = 0.426287
|
|
BREAK
|
|
|
|
CASE 21
|
|
fResumePhase = 0.454798
|
|
BREAK
|
|
|
|
CASE 22
|
|
fResumePhase = 0.476356
|
|
BREAK
|
|
|
|
CASE 23
|
|
fResumePhase = 0.503477
|
|
BREAK
|
|
|
|
CASE 24
|
|
fResumePhase = 0.524339
|
|
BREAK
|
|
|
|
CASE 25
|
|
fResumePhase = 0.541725
|
|
BREAK
|
|
|
|
CASE 26
|
|
fResumePhase = 0.565369
|
|
BREAK
|
|
|
|
CASE 27
|
|
fResumePhase = 0.586926
|
|
BREAK
|
|
|
|
CASE 28
|
|
fResumePhase = 0.611961
|
|
BREAK
|
|
|
|
CASE 29
|
|
fResumePhase = 0.634910
|
|
BREAK
|
|
|
|
CASE 30
|
|
fResumePhase = 0.655772
|
|
BREAK
|
|
|
|
CASE 31
|
|
fResumePhase = 0.678025
|
|
BREAK
|
|
|
|
CASE 32
|
|
fResumePhase = 0.698192
|
|
BREAK
|
|
|
|
CASE 33
|
|
fResumePhase = 0.719750
|
|
BREAK
|
|
|
|
CASE 34
|
|
fResumePhase = 0.738526
|
|
BREAK
|
|
|
|
CASE 35
|
|
fResumePhase = 0.760779
|
|
BREAK
|
|
|
|
CASE 36
|
|
fResumePhase = 0.781641
|
|
BREAK
|
|
|
|
CASE 37
|
|
fResumePhase = 0.812239
|
|
BREAK
|
|
|
|
CASE 38
|
|
fResumePhase = 0.830320
|
|
BREAK
|
|
|
|
CASE 39
|
|
fResumePhase = 0.853268
|
|
BREAK
|
|
|
|
CASE 40
|
|
fResumePhase = 0.886648
|
|
BREAK
|
|
|
|
CASE 41
|
|
fResumePhase = 0.913769
|
|
BREAK
|
|
|
|
CASE 42
|
|
fResumePhase = 0.934631
|
|
BREAK
|
|
|
|
CASE 43
|
|
fResumePhase = 0.953408
|
|
BREAK
|
|
|
|
CASE 44
|
|
fResumePhase = 0.975661
|
|
BREAK
|
|
|
|
CASE 45
|
|
fResumePhase = 1.000000
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN fResumePhase
|
|
|
|
ENDFUNC
|
|
|
|
//SPECIAL 2
|
|
//1,2,3,4,5,6,7,8,9
|
|
//no bag - 3,8,9
|
|
|
|
FUNC BOOL IS_PLAYER_WEARING_VISIBLE_BODY_ARMOUR()
|
|
PED_COMP_NAME_ENUM ePedComp
|
|
INT iCompNum
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
ePedComp = GET_PED_COMP_ITEM_CURRENT_MP(PLAYER_PED_ID(),COMP_TYPE_SPECIAL2)
|
|
ENDIF
|
|
iCompNum = ENUM_TO_INT(ePedComp)
|
|
IF iCompNum = 1
|
|
OR iCompNum = 2
|
|
OR iCompNum = 4
|
|
OR iCompNum = 5
|
|
OR iCompNum = 6
|
|
OR iCompNum = 7
|
|
OR iCompNum = 8
|
|
OR iCompNum = 9
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC INT GET_PLAYER_BAG_TYPE( PED_INDEX playerPed )
|
|
PED_COMP_NAME_ENUM ePedComp
|
|
IF NOT IS_PED_INJURED( playerPed )
|
|
ePedComp = GET_PED_COMP_ITEM_CURRENT_MP( playerPed, COMP_TYPE_HAND )
|
|
ENDIF
|
|
|
|
RETURN ENUM_TO_INT( ePedComp )
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_PLAYER_HAVE_A_BAG( PED_INDEX playerPed )
|
|
IF GET_PLAYER_BAG_TYPE( playerPed ) = 9
|
|
OR GET_PLAYER_BAG_TYPE( playerPed ) = 10
|
|
OR GET_PLAYER_BAG_TYPE( playerPed ) = 11
|
|
OR GET_PLAYER_BAG_TYPE( playerPed ) = 12
|
|
OR GET_PLAYER_BAG_TYPE( playerPed ) = 13
|
|
OR GET_PLAYER_BAG_TYPE( playerPed ) = 14
|
|
OR GET_PLAYER_BAG_TYPE( playerPed ) = 15
|
|
OR GET_PLAYER_BAG_TYPE( playerPed ) = 16
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC REMOVE_PLAYER_BAG()
|
|
//IF DOES_PLAYER_HAVE_A_BAG( PLAYER_PED_ID() )
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 0, 0)
|
|
//ENDIF
|
|
ENDPROC
|
|
|
|
//MP_M_FREEMODE_01
|
|
//MP_F_FREEMODE_01
|
|
|
|
PROC FILL_PLAYERS_HEIST_BAG()
|
|
|
|
//Duffel Bag Empty //SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 9, 0)
|
|
IF GET_PLAYER_BAG_TYPE( PLAYER_PED_ID() ) = 9
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 10, 0)
|
|
ENDIF
|
|
//Duffel Bag Empty player with armour //SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 11, 0)
|
|
IF IS_PLAYER_WEARING_VISIBLE_BODY_ARMOUR()
|
|
IF GET_PLAYER_BAG_TYPE( PLAYER_PED_ID() ) = 11
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 12, 0)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Sports Bag Empty //SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 14, 0)
|
|
IF GET_PLAYER_BAG_TYPE( PLAYER_PED_ID() ) = 13
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 14, 0)
|
|
ENDIF
|
|
|
|
//Sports Bag Empty player with armour //SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 15, 0)
|
|
IF IS_PLAYER_WEARING_VISIBLE_BODY_ARMOUR()
|
|
IF GET_PLAYER_BAG_TYPE( PLAYER_PED_ID() ) = 15
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 16, 0)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC GIVE_PLAYER_COMPONENT_BAG()
|
|
|
|
//Sports Bag Empty player with armour //SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 15, 0)
|
|
IF IS_PLAYER_WEARING_VISIBLE_BODY_ARMOUR()
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 16, 0)
|
|
ELSE
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 14, 0)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC TOGGLE_PLAYER_HEIST_BAG(BOOL bShowBag)
|
|
|
|
IF bShowBag
|
|
IF GET_PLAYER_BAG_TYPE( PLAYER_PED_ID() ) = 13
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 14, 0)
|
|
ENDIF
|
|
//Sports Bag Empty player with armour //SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 15, 0)
|
|
IF IS_PLAYER_WEARING_VISIBLE_BODY_ARMOUR()
|
|
IF GET_PLAYER_BAG_TYPE( PLAYER_PED_ID() ) = 15
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 16, 0)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_HAND, 0, 0)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
FUNC BOOL NEW_CREATE_BAG_OBJECTS(NETWORK_INDEX niThisBagIndex, NETWORK_INDEX niThisStrapIndex)
|
|
|
|
REQUEST_MODEL(P_LD_Heist_Bag_S_1)
|
|
REQUEST_MODEL(P_CSH_Strap_01_S)
|
|
IF HAS_MODEL_LOADED(P_LD_Heist_Bag_S_1)
|
|
AND HAS_MODEL_LOADED(P_CSH_Strap_01_S)
|
|
IF CAN_REGISTER_MISSION_OBJECTS(2)
|
|
RESERVE_NETWORK_MISSION_OBJECTS(GET_NUM_RESERVED_MISSION_OBJECTS(FALSE) + 2)
|
|
IF NOT NETWORK_DOES_NETWORK_ID_EXIST(niThisBagIndex)
|
|
IF CREATE_NET_OBJ(niThisBagIndex,P_LD_Heist_Bag_S_1,GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
SET_ENTITY_INVINCIBLE(NET_TO_OBJ(niThisBagIndex), TRUE)
|
|
ENDIF
|
|
ELSE
|
|
IF NOT NETWORK_DOES_NETWORK_ID_EXIST(niThisStrapIndex)
|
|
IF CREATE_NET_OBJ(niThisStrapIndex,P_CSH_Strap_01_S,GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
SET_ENTITY_INVINCIBLE(NET_TO_OBJ(niThisStrapIndex), TRUE)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(P_CSH_Strap_01_S)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(P_LD_Heist_Bag_S_1)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
//INT iGrabTimer
|
|
|
|
FUNC BOOL MANAGE_GRAB_TIMER(INT&start_time, INT time)
|
|
INT current_time
|
|
current_time = GET_GAME_TIMER()
|
|
|
|
IF ((current_time - start_time) > time)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL MANAGE_THIS_TIMER(INT&start_time, INT time)
|
|
INT current_time
|
|
current_time = GET_GAME_TIMER()
|
|
|
|
IF ((current_time - start_time) > time)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// FORCE_QUIT_FAIL_CASH_GRAB_MINIGAME_KEEP_DATA (pass in your own grab data struct)
|
|
/// NOTES: Force the termination of the hacking minigame and cause the player to fail but preserves variable data.
|
|
/// PURPOSE:
|
|
/// Force the termination of the hacking minigame and cause the player to fail.
|
|
/// PARAMS:
|
|
/// S_HACKING_DATA &hacking_data - hacking data
|
|
/// RETURNS:
|
|
/// No Returns
|
|
///
|
|
PROC FORCE_QUIT_FAIL_CASH_GRAB_MINIGAME_KEEP_DATA(S_CASH_GRAB_DATA &cash_grab_data)
|
|
SET_PED_CURRENT_WEAPON_VISIBLE(PLAYER_PED_ID(),TRUE)
|
|
IF IS_MINIGAME_IN_PROGRESS()
|
|
SET_MINIGAME_IN_PROGRESS(FALSE)
|
|
ENDIF
|
|
CLEAR_HELP()
|
|
SET_PLAYER_CONTROL(PLAYER_ID(),TRUE)
|
|
DISABLE_CELLPHONE(FALSE)
|
|
DISABLE_SCRIPT_HUD_THIS_FRAME_RESET()
|
|
RESET_CASH_GRAB_MINIGAME_DATA(cash_grab_data)
|
|
ENDPROC
|
|
|
|
PROC FORCE_QUIT_PASS_CASH_GRAB_MINIGAME_KEEP_DATA(S_CASH_GRAB_DATA &cash_grab_data)
|
|
SET_PED_CURRENT_WEAPON_VISIBLE(PLAYER_PED_ID(),TRUE)
|
|
IF IS_MINIGAME_IN_PROGRESS()
|
|
SET_MINIGAME_IN_PROGRESS(FALSE)
|
|
ENDIF
|
|
CLEAR_HELP()
|
|
SET_PLAYER_CONTROL(PLAYER_ID(),TRUE)
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
DISABLE_CELLPHONE(FALSE)
|
|
DISABLE_SCRIPT_HUD_THIS_FRAME_RESET()
|
|
RESET_CASH_GRAB_MINIGAME_DATA(cash_grab_data)
|
|
ENDPROC
|
|
|
|
FUNC BOOL HAS_PLAYER_BEAT_CASH_GRAB(S_CASH_GRAB_DATA &cash_grab_data,BOOL bAndForceQuit = FALSE)
|
|
|
|
IF IS_BIT_SET(cash_grab_data.iBitSet, CASH_GRAB_BS_MINIGAME_COMPLETED)
|
|
IF bAndForceQuit
|
|
FORCE_QUIT_PASS_CASH_GRAB_MINIGAME_KEEP_DATA(cash_grab_data)
|
|
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_PED_ROUGHLY_FACING_THIS_DIRECTION(PED_INDEX ped, FLOAT idealHeading, FLOAT acceptableRange = 30.0)
|
|
FLOAT upperLimit, lowerLimit
|
|
upperLimit = idealHeading + (acceptableRange/2)
|
|
IF upperLimit > 360
|
|
upperLimit -= 360.0
|
|
ENDIF
|
|
|
|
lowerLimit = idealHeading - (acceptableRange/2)
|
|
IF lowerLimit < 0
|
|
lowerLimit += 360.0
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(ped)
|
|
IF upperLimit > lowerLimit
|
|
IF GET_ENTITY_HEADING(ped) < upperLimit
|
|
AND GET_ENTITY_HEADING(ped) > lowerLimit
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ELSE
|
|
IF GET_ENTITY_HEADING(ped) < upperLimit
|
|
OR GET_ENTITY_HEADING(ped) > lowerLimit
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_GRAB_OBJECT_CASH(OBJECT_INDEX tempGrabObj)
|
|
|
|
IF GET_ENTITY_MODEL(tempGrabObj) = PROP_CASH_CRATE_01
|
|
OR GET_ENTITY_MODEL(tempGrabObj) = PROP_CASH_TROLLY
|
|
OR GET_ENTITY_MODEL(tempGrabObj) = HEI_PROP_HEI_CASH_TROLLY_01
|
|
OR GET_ENTITY_MODEL(tempGrabObj) = HEI_PROP_HEI_CASH_TROLLY_02
|
|
OR GET_ENTITY_MODEL(tempGrabObj) = HEI_PROP_HEI_CASH_TROLLY_03
|
|
OR GET_ENTITY_MODEL(tempGrabObj) = INT_TO_ENUM(MODEL_NAMES, HASH("ch_Prop_Ch_Cash_Trolly_01A"))
|
|
OR GET_ENTITY_MODEL(tempGrabObj) = INT_TO_ENUM(MODEL_NAMES, HASH("ch_Prop_Ch_Cash_Trolly_01B"))
|
|
OR GET_ENTITY_MODEL(tempGrabObj) = INT_TO_ENUM(MODEL_NAMES, HASH("ch_Prop_Ch_Cash_Trolly_01C"))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC CLEANUP_CASH_GRAB_SCRIPTED_CAMERA(S_CASH_GRAB_DATA &data)
|
|
|
|
IF DOES_CAM_EXIST(data.cameraIndex)
|
|
DESTROY_CAM(data.cameraIndex)
|
|
ENDIF
|
|
|
|
DISPLAY_HUD(TRUE)
|
|
DISPLAY_RADAR(TRUE)
|
|
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
ENDPROC
|
|
|
|
PROC SET_PED_PROOFS_FOR_MINIGAME(PED_INDEX PedIndex)
|
|
IF NOT IS_FAKE_MULTIPLAYER_MODE_SET()
|
|
IF NOT IS_PED_INJURED(PedIndex)
|
|
SET_ENTITY_PROOFS(PedIndex, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CLEAR_PED_PROOFS_FOR_MINIGAME(PED_INDEX PedIndex)
|
|
IF NOT IS_FAKE_MULTIPLAYER_MODE_SET()
|
|
IF NOT IS_PED_INJURED(PedIndex)
|
|
SET_ENTITY_PROOFS(PedIndex, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|