669 lines
22 KiB
Scheme
Executable File
669 lines
22 KiB
Scheme
Executable File
//╒═════════════════════════════════════════════════════════════════════════════╕
|
|
//│ Author: Ben Rollinson Date: 28/03/13 │
|
|
//╞═════════════════════════════════════════════════════════════════════════════╡
|
|
//│ │
|
|
//│ GTA V - General Help Message Triggering │
|
|
//│ │
|
|
//╘═════════════════════════════════════════════════════════════════════════════╛
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
|
|
USING "commands_audio.sch"
|
|
USING "commands_camera.sch"
|
|
|
|
USING "flow_help_public.sch"
|
|
USING "flow_public_game.sch"
|
|
USING "Mission_Control_Public.sch"
|
|
USING "code_control_public.sch"
|
|
|
|
|
|
TYPEDEF FUNC BOOL HelpCheck()
|
|
|
|
CONST_INT NUM_CONDITION_PASSES_BEFORE_DISPLAY 5
|
|
|
|
|
|
STRUCT FlowHelpMessageVars
|
|
INT iMessageToCheckThisFrame = 0
|
|
INT iConditionPassCounter = 0
|
|
HelpCheck fpHelpCheck
|
|
ENDSTRUCT
|
|
|
|
/*
|
|
GET_CURRENT_WEBPAGE_ID now no longer resets it's value.
|
|
It's just a get, but these functions are used all over
|
|
*/
|
|
FUNC INT GET_CURRENT_WEBSITE_ID_WRAPPED() // END_SCALEFORM_MOVIE_METHOD_INT()
|
|
INT raw = GET_CURRENT_WEBSITE_ID()
|
|
RETURN raw
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_CONVERTIBLE_ROOF()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
VEHICLE_INDEX vehPlayer = GET_PLAYERS_LAST_VEHICLE()
|
|
IF IS_VEHICLE_DRIVEABLE(vehPlayer)
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPlayer)
|
|
IF IS_THIS_MODEL_A_CAR(GET_ENTITY_MODEL(vehPlayer))
|
|
IF IS_VEHICLE_A_CONVERTIBLE(vehPlayer)
|
|
AND GET_ENTITY_MODEL(vehPlayer) != VOLTIC
|
|
CONVERTIBLE_ROOF_STATE eState = GET_CONVERTIBLE_ROOF_STATE(vehPlayer)
|
|
IF eState = CRS_RAISED
|
|
IF NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_NO_STAMINA()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF GET_PLAYER_SPRINT_TIME_REMAINING(PLAYER_ID()) < 5.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL DOES_PLAYER_HAVE_MULTIPLE_WEAPONS_IN_A_WEAPON_WHEEL_GROUP()
|
|
INT i, iWepGroupIndex
|
|
WEAPON_SLOT eWeaponSlot
|
|
WEAPON_TYPE eWeaponType
|
|
WEAPON_GROUP eWeaponGroup
|
|
INT iWeaponsInGroupCount[NUM_PLAYER_PED_WEAPON_GROUPS]
|
|
|
|
FOR i = 0 TO (ENUM_TO_INT(NUM_WEAPONSLOTS) - 1)
|
|
|
|
eWeaponSlot = GET_PLAYER_PED_WEAPON_SLOT_FROM_INT(i)
|
|
IF eWeaponSlot != WEAPONSLOT_INVALID
|
|
eWeaponType = GET_PED_WEAPONTYPE_IN_SLOT(PLAYER_PED_ID(), GET_PLAYER_PED_WEAPON_SLOT_FROM_INT(i))
|
|
IF eWeaponType != WEAPONTYPE_INVALID
|
|
eWeaponGroup = GET_WEAPONTYPE_GROUP(eWeaponType)
|
|
//CDEBUG3LN(DEBUG_FLOW_HELP, "multiWeaponInSlotWheelHelp.sc - eWeaponType is valid : ", eWeaponType, " returned weapon group is :", eWeaponGroup, " i = ", i)
|
|
IF eWeaponGroup != WEAPONGROUP_INVALID
|
|
|
|
//unable to get the weapongroup for unarmed so have to set this based of the weapontype
|
|
IF eWeaponType = WEAPONTYPE_UNARMED
|
|
//CDEBUG3LN(DEBUG_FLOW_HELP, "multiWeaponInSlotWheelHelp.sc - eWeaponType was unarmed, :", eWeaponType, "set group to WEAPONGROUP_MELEE : ", WEAPONGROUP_MELEE, " i = ", i)
|
|
eWeaponGroup = WEAPONGROUP_MELEE
|
|
ENDIF
|
|
|
|
// merge some groups together which appear in the same wheel_ group
|
|
SWITCH eWeaponGroup
|
|
CASE WEAPONGROUP_FIREEXTINGUISHER
|
|
FALLTHRU
|
|
CASE WEAPONGROUP_PETROLCAN
|
|
eWeaponGroup = WEAPONGROUP_THROWN
|
|
//CDEBUG3LN(DEBUG_FLOW_HELP, "multiWeaponInSlotWheelHelp.sc - current eWeaponGroup ", eWeaponGroup, " merged to rWEAPONGROUP_THROWN : ", WEAPONGROUP_THROWN, " i = ", i)
|
|
BREAK
|
|
CASE WEAPONGROUP_STUNGUN
|
|
eWeaponGroup = WEAPONGROUP_PISTOL
|
|
//CDEBUG3LN(DEBUG_FLOW_HELP, "multiWeaponInSlotWheelHelp.sc - current eWeaponGroup ", eWeaponGroup, " merged to WEAPONGROUP_PISTOL : ", WEAPONGROUP_PISTOL, " i = ", i)
|
|
BREAK
|
|
CASE WEAPONGROUP_MG
|
|
eWeaponGroup = WEAPONGROUP_SMG
|
|
//CDEBUG3LN(DEBUG_FLOW_HELP, "multiWeaponInSlotWheelHelp.sc - current eWeaponGroup ", eWeaponGroup, " merged to WEAPONGROUP_SMG : ", WEAPONGROUP_SMG, " i = ", i)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
iWepGroupIndex = GET_INT_FROM_PLAYER_PED_WEAPON_GROUP(eWeaponGroup)
|
|
|
|
// check the returned weapon group index is valid
|
|
IF iWepGroupIndex <> -1
|
|
|
|
iWeaponsInGroupCount[iWepGroupIndex]++
|
|
|
|
// check if the weapon group now has more than one entry
|
|
IF iWeaponsInGroupCount[iWepGroupIndex] > 1
|
|
//CDEBUG2LN(DEBUG_FLOW_HELP, "multiWeaponInSlotWheelHelp.sc - DOES_PLAYER_HAVE_MULTIPLE_WEAPONS_IN_A_WEAPON_WHEEL_GROUP - return TRUE, for group : ", iWepGroupIndex, " i = ", i, " Frame Count : ", GET_FRAME_COUNT())
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
//CDEBUG3LN(DEBUG_FLOW_HELP, "multiWeaponInSlotWheelHelp.sc - iWepGroupIndex isn't valid : ", iWepGroupIndex, " i = ", i)
|
|
ENDIF
|
|
ELSE
|
|
//CDEBUG3LN(DEBUG_FLOW_HELP, "multiWeaponInSlotWheelHelp.sc - wep group invalid : ", eWeaponGroup, " i = ", i)
|
|
ENDIF
|
|
ELSE
|
|
//CDEBUG3LN(DEBUG_FLOW_HELP, "multiWeaponInSlotWheelHelp.sc - wep type invalid : ", eWeaponType, " i = ", i)
|
|
ENDIF
|
|
ELSE
|
|
//CDEBUG3LN(DEBUG_FLOW_HELP, "multiWeaponInSlotWheelHelp.sc - wep slot invalid : ", eWeaponSlot, " i = ", i)
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
//CDEBUG2LN(DEBUG_FLOW_HELP, "multiWeaponInSlotWheelHelp.sc - DOES_PLAYER_HAVE_MULTIPLE_WEAPONS_IN_A_WEAPON_WHEEL_GROUP - return FALSE", " Frame Count : ", GET_FRAME_COUNT())
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_MULTI_WEAPONS_IN_SLOT()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
// detect when the weapon wheel is on screen
|
|
IF IS_HUD_COMPONENT_ACTIVE(NEW_HUD_WEAPON_WHEEL)
|
|
IF NOT IS_PHONE_ONSCREEN()
|
|
AND IS_PED_ON_FOOT(PLAYER_PED_ID()) // Fix B*1061199
|
|
IF DOES_PLAYER_HAVE_MULTIPLE_WEAPONS_IN_A_WEAPON_WHEEL_GROUP()
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_VEHICLE_RADIO_HELP_A()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID()) AND (NOT IS_CURRENTLY_ON_MISSION_TO_TYPE())
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
VEHICLE_INDEX vehPlayer = GET_PLAYERS_LAST_VEHICLE()
|
|
IF IS_VEHICLE_DRIVEABLE(vehPlayer)
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPlayer)
|
|
IF GET_PED_IN_VEHICLE_SEAT(vehPlayer) = PLAYER_PED_ID()
|
|
IF NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
IF DOES_PLAYER_VEH_HAVE_RADIO()
|
|
//Don't let this help text show if the Simeon call is still queued.
|
|
IF NOT IS_COMMUNICATION_REGISTERED(CALL_ARM2_UNLOCK)
|
|
and not IS_COMMUNICATION_REGISTERED(CALL_CARDMG_ARM2_UNLOCK)
|
|
IF NOT IS_PHONE_ONSCREEN()
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_VEHICLE_RADIO_HELP_B()
|
|
IF HAS_ONE_TIME_HELP_DISPLAYED(FHM_VEHICLE_RADIO_A)
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
VEHICLE_INDEX vehPlayer = GET_PLAYERS_LAST_VEHICLE()
|
|
IF IS_VEHICLE_DRIVEABLE(vehPlayer)
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPlayer)
|
|
IF GET_PED_IN_VEHICLE_SEAT(vehPlayer) = PLAYER_PED_ID()
|
|
IF NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
IF DOES_PLAYER_VEH_HAVE_RADIO()
|
|
IF IS_HUD_COMPONENT_ACTIVE(NEW_HUD_RADIO_STATIONS)
|
|
//Don't let this help text show if the Simeon call is still queued.
|
|
IF NOT IS_COMMUNICATION_REGISTERED(CALL_ARM2_UNLOCK)
|
|
and not IS_COMMUNICATION_REGISTERED(CALL_CARDMG_ARM2_UNLOCK)
|
|
IF NOT IS_PHONE_ONSCREEN()
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_VEHICLE_ROLLED()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
VEHICLE_INDEX vehPlayer = GET_PLAYERS_LAST_VEHICLE()
|
|
IF IS_VEHICLE_DRIVEABLE(vehPlayer)
|
|
MODEL_NAMES eModel = GET_ENTITY_MODEL(vehPlayer)
|
|
IF NOT IS_THIS_MODEL_A_BOAT(eModel)
|
|
AND NOT IS_THIS_MODEL_A_HELI(eModel)
|
|
AND NOT IS_THIS_MODEL_A_PLANE(eModel)
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPlayer)
|
|
IF GET_PED_IN_VEHICLE_SEAT(vehPlayer, VS_DRIVER) = PLAYER_PED_ID()
|
|
IF NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_ENTITY_UPSIDEDOWN(vehPlayer)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
FUNC BOOL CHECK_OBTAINED_AUTO_PARACHUTE()
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
if GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_AIR_VEHICLE_PARACHUTE_UNLOCKED)
|
|
VEHICLE_INDEX vehPlayer = GET_PLAYERS_LAST_VEHICLE()
|
|
IF IS_VEHICLE_DRIVEABLE(vehPlayer)
|
|
MODEL_NAMES eModel = GET_ENTITY_MODEL(vehPlayer)
|
|
IF IS_THIS_MODEL_A_HELI(eModel)
|
|
or IS_THIS_MODEL_A_PLANE(eModel)
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPlayer)
|
|
IF GET_PED_IN_VEHICLE_SEAT(vehPlayer, VS_DRIVER) = PLAYER_PED_ID()
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CHECK_PLAYER_ENTERED_TRAIN_IN_GROUP()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
GROUP_INDEX groupPlayer = GET_PLAYER_GROUP(PLAYER_ID())
|
|
INT iLeaders, iFollowers
|
|
GET_GROUP_SIZE(groupPlayer, iLeaders, iFollowers)
|
|
IF iLeaders > 1 OR iFollowers > 0
|
|
IF IS_PED_IN_ANY_TRAIN(PLAYER_PED_ID())
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_PLAYER_USING_PROG_AR()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
WEAPON_TYPE eWeapon
|
|
IF GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), eWeapon)
|
|
IF eWeapon = WEAPONTYPE_DLC_PROGRAMMABLEAR
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_SOCIAL_CLUB_LINK()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF NOT IS_GAME_LINKED_TO_SOCIAL_CLUB(TRUE, TRUE)
|
|
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_2)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
// Linked to social club so stop the checks.
|
|
REMOVE_HELP_FROM_FLOW_QUEUE("AM_H_SOCIAL", FALSE)
|
|
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_SOCIAL_CLUB_LINK)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_FRIEND_ACTIVITY_HELP()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF g_savedGlobals.sFriendsData.g_bHelpDoneCanPhoneFriend
|
|
OR GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_1)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CHECK_ZOOMED_MOVEMENT_HELP()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_1)
|
|
WEAPON_TYPE eCurrentWeapon
|
|
IF GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), eCurrentWeapon)
|
|
AND eCurrentWeapon != WEAPONTYPE_INVALID
|
|
AND eCurrentWeapon != WEAPONTYPE_UNARMED
|
|
AND eCurrentWeapon != WEAPONTYPE_OBJECT
|
|
IF GET_WEAPONTYPE_GROUP(eCurrentWeapon) = WEAPONGROUP_SNIPER
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CHECK_DRIVEBY_CONTROL_HELP()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_1)
|
|
VEHICLE_INDEX vehPlayer = GET_PLAYERS_LAST_VEHICLE()
|
|
IF IS_VEHICLE_DRIVEABLE(vehPlayer) AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPlayer)
|
|
MODEL_NAMES eModel = GET_ENTITY_MODEL(vehPlayer)
|
|
IF IS_THIS_MODEL_A_CAR(eModel)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CHECK_TRI_3_UNLOCKED_WHILE_EXILED()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
//Check if player after exile
|
|
IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MICHAEL_TREVOR_EXILE_FINISHED)
|
|
AND (g_savedGlobals.sTriathlonData.eCurrentRaceUnlocked = TRIATHLON_RACE_IRONMAN)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_PLAYER_LOGGED_FOR_STOCKS()
|
|
IF NOT IS_PLAYER_ONLINE()
|
|
//Numbers for Stock exchange sites
|
|
AND (GET_CURRENT_WEBSITE_ID_WRAPPED() = 4)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_FIRST_PERSON_HELP_REMINDER_A()
|
|
IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON
|
|
|
|
IF NOT GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_HAS_USED_FP_VIEW)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_HAS_USED_FP_VIEW, TRUE)
|
|
ENDIF
|
|
|
|
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_1)
|
|
IF g_iFlowHelpFirstPersonTimer = -1
|
|
g_iFlowHelpFirstPersonTimer = GET_GAME_TIMER()
|
|
ELIF (GET_GAME_TIMER() - g_iFlowHelpFirstPersonTimer) > 10000
|
|
IF IS_FLOW_HELP_QUEUE_EMPTY()
|
|
OR IS_FLOW_HELP_MESSAGE_QUEUED("AM_H_FP1")
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF g_iFlowHelpFirstPersonTimer != -1
|
|
g_iFlowHelpFirstPersonTimer = -1
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_FIRST_PERSON_HELP_REMINDER_B()
|
|
IF HAS_ONE_TIME_HELP_DISPLAYED(FHM_FIRST_PERSON_HELP_REMINDER_A)
|
|
IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON
|
|
IF g_iFlowHelpFirstPersonTimer = -1
|
|
g_iFlowHelpFirstPersonTimer = GET_GAME_TIMER()
|
|
ELIF (GET_GAME_TIMER() - g_iFlowHelpFirstPersonTimer) > 120000
|
|
IF IS_FLOW_HELP_QUEUE_EMPTY()
|
|
OR IS_FLOW_HELP_MESSAGE_QUEUED("AM_H_FP2")
|
|
g_iFlowHelpFirstPersonTimer = -1
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELIF g_iFlowHelpFirstPersonTimer != -1
|
|
g_iFlowHelpFirstPersonTimer = -1
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL CHECK_ROCKSTAR_EDITOR_INTRO_HELP()
|
|
#IF USE_REPLAY_RECORDING_TRIGGERS
|
|
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_1)
|
|
RETURN TRUE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CHECK_ROCKSTAR_EDITOR_INTRO_HELP2()
|
|
#IF USE_REPLAY_RECORDING_TRIGGERS
|
|
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_1)
|
|
and HAS_ONE_TIME_HELP_DISPLAYED(FHM_ROCKSTAR_EDITOR_INTRO1)
|
|
and IS_SELECTOR_ONSCREEN()
|
|
and not HAS_ONE_TIME_HELP_DISPLAYED(FHM_ROCKSTAR_EDITOR_INTRO2)
|
|
RETURN TRUE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CHECK_HYDRAULICS_HELP()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
VEHICLE_INDEX vehPlayer = GET_PLAYERS_LAST_VEHICLE()
|
|
IF IS_VEHICLE_DRIVEABLE(vehPlayer)
|
|
//IF GET_ENTITY_MODEL(vehPlayer) = BUCCANEER2
|
|
IF IS_VEHICLE_A_SUPERMOD_MODEL(GET_ENTITY_MODEL(vehPlayer), SUPERMOD_FLAG_HAS_HYDRAULICS)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
FUNC BOOL IS_OTH_MESSAGE_REPEATING(FlowHelpMessage fhm)
|
|
//Check a list of one-time flow help messages that should be repeated
|
|
IF fhm = FHM_PLAYER_LOGGED_FOR_STOCKS
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PROCESS_HELP_MESSAGE(STRING strHelp, FlowHelpMessage eFlowHelpMessage, FlowHelpMessageVars &sVars, BOOL bDisplayOnMission = FALSE, INT iQueueDelay = 0, INT iHelpDuration = DEFAULT_HELP_TEXT_TIME, FlowHelpPriority fhPriority = FHP_MEDIUM, CC_CodeID eCodeID = CID_BLANK)
|
|
IF NOT HAS_ONE_TIME_HELP_DISPLAYED(eFlowHelpMessage)
|
|
IF NOT IS_CURRENTLY_ON_MISSION_OF_ANY_TYPE()
|
|
IF CALL sVars.fpHelpCheck()
|
|
sVars.iConditionPassCounter++
|
|
IF sVars.iConditionPassCounter >= NUM_CONDITION_PASSES_BEFORE_DISPLAY
|
|
SWITCH GET_FLOW_HELP_MESSAGE_STATUS(strHelp)
|
|
CASE FHS_EXPIRED
|
|
ADD_HELP_TO_FLOW_QUEUE(strHelp, fhPriority, iQueueDelay, 2500, iHelpDuration, 7, CID_BLANK, eCodeID)
|
|
BREAK
|
|
CASE FHS_DISPLAYED
|
|
IF NOT IS_OTH_MESSAGE_REPEATING(eFlowHelpMessage)
|
|
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(eFlowHelpMessage)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
RETURN TRUE
|
|
ELSE
|
|
sVars.iConditionPassCounter = 0
|
|
IF IS_FLOW_HELP_MESSAGE_QUEUED(strHelp)
|
|
REMOVE_HELP_FROM_FLOW_QUEUE(strHelp)
|
|
ENDIF
|
|
ENDIF
|
|
ELIF bDisplayOnMission
|
|
IF CALL sVars.fpHelpCheck()
|
|
sVars.iConditionPassCounter++
|
|
IF sVars.iConditionPassCounter >= NUM_CONDITION_PASSES_BEFORE_DISPLAY
|
|
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
IF NOT IS_CUTSCENE_PLAYING()
|
|
IF IS_SCREEN_FADED_IN()
|
|
IF NOT IS_WARNING_MESSAGE_ACTIVE()
|
|
IF g_sPlayerPedRequest.eState != PR_STATE_PROCESSING
|
|
PRINT_HELP(strHelp)
|
|
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(eFlowHelpMessage)
|
|
IF eCodeID != CID_BLANK
|
|
Execute_Code_ID(eCodeID)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN TRUE
|
|
ELSE
|
|
sVars.iConditionPassCounter = 0
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC PROCESS_SP_HELP_MESSAGES(FlowHelpMessageVars &sVars)
|
|
|
|
//Don't process help messages during a debug flow launch.
|
|
#IF IS_DEBUG_BUILD
|
|
IF g_flowUnsaved.bUpdatingGameflow
|
|
EXIT
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
#IF FEATURE_SP_DLC_DIRECTOR_MODE
|
|
CONST_INT NUM_HELP_MESSAGES 19
|
|
#ENDIF
|
|
#IF NOT FEATURE_SP_DLC_DIRECTOR_MODE
|
|
CONST_INT NUM_HELP_MESSAGES 17
|
|
#ENDIF
|
|
|
|
BOOL bProcessing = FALSE
|
|
|
|
SWITCH sVars.iMessageToCheckThisFrame
|
|
CASE 0
|
|
sVars.fpHelpCheck = &CHECK_CONVERTIBLE_ROOF
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_CNVRT", FHM_CONVERTIBLE_ROOF, sVars)
|
|
BREAK
|
|
CASE 1
|
|
sVars.fpHelpCheck = &CHECK_NO_STAMINA
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_NOSTAM", FHM_NO_STAMINA, sVars)
|
|
BREAK
|
|
CASE 2
|
|
sVars.fpHelpCheck = &CHECK_MULTI_WEAPONS_IN_SLOT
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_MULTWEP", FHM_MULTI_WEAPONS_IN_SLOT, sVars)
|
|
BREAK
|
|
CASE 3
|
|
sVars.fpHelpCheck = &CHECK_VEHICLE_RADIO_HELP_A
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_RADIO1", FHM_VEHICLE_RADIO_A, sVars)
|
|
BREAK
|
|
CASE 4
|
|
sVars.fpHelpCheck = &CHECK_VEHICLE_RADIO_HELP_B
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_RADIO2", FHM_VEHICLE_RADIO_B, sVars)
|
|
BREAK
|
|
CASE 5
|
|
sVars.fpHelpCheck = &CHECK_VEHICLE_ROLLED
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_VROLL", FHM_VEHICLE_ROLLED, sVars)
|
|
BREAK
|
|
CASE 6
|
|
sVars.fpHelpCheck = &CHECK_PLAYER_ENTERED_TRAIN_IN_GROUP
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_GTRA", FHM_ENTERED_TRAIN_IN_GROUP, sVars, TRUE)
|
|
BREAK
|
|
CASE 7
|
|
sVars.fpHelpCheck = &CHECK_PLAYER_USING_PROG_AR
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_PROGAR", FHM_PROG_AR, sVars)
|
|
BREAK
|
|
CASE 8
|
|
sVars.fpHelpCheck = &CHECK_SOCIAL_CLUB_LINK
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_SOCIAL", FHM_SOCIAL_CLUB_LINK, sVars, FALSE, 10000, 15000)
|
|
BREAK
|
|
CASE 9
|
|
sVars.fpHelpCheck = &CHECK_OBTAINED_AUTO_PARACHUTE
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_PARA", FHM_OBTAINED_AUTO_PARACHUTE, sVars)
|
|
BREAK
|
|
CASE 10
|
|
sVars.fpHelpCheck = &CHECK_FRIEND_ACTIVITY_HELP
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_FFRND", FHM_FRIEND_ACTIVITY_HELP, sVars)
|
|
BREAK
|
|
CASE 11
|
|
sVars.fpHelpCheck = &CHECK_ZOOMED_MOVEMENT_HELP
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_ZOOMOVE", FHM_SNIPER_ZOOMED_MOVEMENT, sVars)
|
|
BREAK
|
|
CASE 12
|
|
sVars.fpHelpCheck = &CHECK_DRIVEBY_CONTROL_HELP
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_DRIVEBY", FHM_DRIVEBY_CONTROL, sVars)
|
|
BREAK
|
|
CASE 13 //Triathlon 3 unlocked while in exile
|
|
sVars.fpHelpCheck = &CHECK_TRI_3_UNLOCKED_WHILE_EXILED
|
|
bProcessing = PROCESS_HELP_MESSAGE("TRI_NEWRC",FHM_TRI_3_UNLOCKED_IN_EXILE,sVars)
|
|
BREAK
|
|
CASE 14 //Player needs to log in to access stocks
|
|
sVars.fpHelpCheck = &CHECK_PLAYER_LOGGED_FOR_STOCKS
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_LOGSTOCKS",FHM_PLAYER_LOGGED_FOR_STOCKS, sVars, FALSE, 0, DEFAULT_HELP_TEXT_TIME, FHP_VERY_HIGH)
|
|
BREAK
|
|
CASE 15
|
|
sVars.fpHelpCheck = &CHECK_FIRST_PERSON_HELP_REMINDER_A
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_FP1", FHM_FIRST_PERSON_HELP_REMINDER_A, sVars)
|
|
BREAK
|
|
CASE 16
|
|
sVars.fpHelpCheck = &CHECK_FIRST_PERSON_HELP_REMINDER_B
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_FP2", FHM_FIRST_PERSON_HELP_REMINDER_B, sVars)
|
|
BREAK
|
|
|
|
#IF FEATURE_SP_DLC_DIRECTOR_MODE
|
|
CASE 17
|
|
sVars.fpHelpCheck = &CHECK_ROCKSTAR_EDITOR_INTRO_HELP
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_EDIT_1", FHM_ROCKSTAR_EDITOR_INTRO1, sVars)
|
|
BREAK
|
|
CASE 18
|
|
sVars.fpHelpCheck = &CHECK_ROCKSTAR_EDITOR_INTRO_HELP2
|
|
bProcessing = PROCESS_HELP_MESSAGE("AM_H_EDIT_2", FHM_ROCKSTAR_EDITOR_INTRO2, sVars,FALSE, 0, 7500)
|
|
BREAK
|
|
#ENDIF
|
|
//#IF FEATURE_LOWRIDER_CONTENT
|
|
// CASE 19
|
|
// sVars.fpHelpCheck = &CHECK_HYDRAULICS_HELP
|
|
// bProcessing = PROCESS_HELP_MESSAGE("AM_H_HYDR", FHM_HYDRAULICS_HELP, sVars)
|
|
// BREAK
|
|
//#ENDIF
|
|
|
|
ENDSWITCH
|
|
|
|
IF NOT bProcessing
|
|
sVars.iMessageToCheckThisFrame++
|
|
IF sVars.iMessageToCheckThisFrame = NUM_HELP_MESSAGES
|
|
sVars.iMessageToCheckThisFrame = 0
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|