1459 lines
56 KiB
Scheme
Executable File
1459 lines
56 KiB
Scheme
Executable File
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
|
|
USING "commands_misc.sch"
|
|
USING "commands_player.sch"
|
|
USING "commands_graphics.sch"
|
|
USING "blip_enums.sch"
|
|
USING "mission_control_private.sch"
|
|
USING "mission_stat_public.sch"
|
|
USING "blip_control_public.sch"
|
|
USING "flow_mission_data_public.sch"
|
|
USING "flow_help_public.sch"
|
|
USING "player_ped_public.sch"
|
|
USING "vehicle_gen_private.sch"
|
|
USING "shop_public.sch"
|
|
#IF IS_DEBUG_BUILD
|
|
USING "select_mission_stage.sch"
|
|
USING "flow_debug_game.sch"
|
|
#ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// MISSION NAME : mission_control_public.sch
|
|
// AUTHOR : Ak
|
|
// DESCRIPTION : Allows communication with the mission launching candidate
|
|
// controller and the mission triggering system
|
|
// also contains
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
|
|
|
|
FUNC BOOL IS_MISSION_STATE_SAFE_FOR_FAMILY_SCENE()
|
|
SWITCH g_OnMissionState
|
|
CASE MISSION_TYPE_STORY
|
|
CASE MISSION_TYPE_STORY_PREP
|
|
CASE MISSION_TYPE_STORY_FRIENDS
|
|
CASE MISSION_TYPE_RANDOM_EVENT
|
|
RETURN FALSE
|
|
ENDSWITCH
|
|
RETURN TRUE //anything else is allowed
|
|
ENDFUNC
|
|
|
|
|
|
PROC DO_MISSION_PASSED_OR_FAILED_STAT_UPDATE(BOOL passed,INT MissionIndex)
|
|
IF MissionIndex != -1
|
|
//g_sMissionStaticData[iMissionDataIndex].triggerCharBitset
|
|
IF Is_Mission_Triggerable_By_Character(g_sMissionStaticData[MissionIndex].triggerCharBitset,CHAR_MICHAEL)
|
|
STATSENUM e = SP0_MISSIONS_FAILED
|
|
IF passed
|
|
e = SP0_MISSIONS_PASSED
|
|
ENDIF
|
|
INT InStat
|
|
STAT_GET_INT(e,InStat)
|
|
InStat++
|
|
STAT_SET_INT(e,InStat)
|
|
ENDIF
|
|
IF Is_Mission_Triggerable_By_Character(g_sMissionStaticData[MissionIndex].triggerCharBitset,CHAR_FRANKLIN)
|
|
STATSENUM e = SP1_MISSIONS_FAILED
|
|
IF passed
|
|
e = SP1_MISSIONS_PASSED
|
|
ENDIF
|
|
INT InStat
|
|
STAT_GET_INT(e,InStat)
|
|
InStat++
|
|
STAT_SET_INT(e,InStat)
|
|
ENDIF
|
|
IF Is_Mission_Triggerable_By_Character(g_sMissionStaticData[MissionIndex].triggerCharBitset,CHAR_TREVOR)
|
|
STATSENUM e = SP2_MISSIONS_FAILED
|
|
IF passed
|
|
e = SP2_MISSIONS_PASSED
|
|
ENDIF
|
|
INT InStat
|
|
STAT_GET_INT(e,InStat)
|
|
InStat++
|
|
STAT_SET_INT(e,InStat)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
// *****************************************************************************************
|
|
// **************************************Mission triggering controls************************
|
|
|
|
//TODO
|
|
/*
|
|
BOOL g_bMissionTriggerFired
|
|
INT g_iMissionTriggerableToTrigger
|
|
|
|
INT g_iRegisteredMissionTriggers
|
|
CONST_INT MAX_MISSION_TRIGGERS 64
|
|
TRIGGERABLE_MISSION_INDEX_STRUCT g_TriggerableMissions[MAX_MISSION_TRIGGERS]
|
|
*/
|
|
//Register contact point mission // STATIC_BLIP_NAME_ENUM , blip to get location from
|
|
|
|
//DLC-specific version of main function below
|
|
#IF USE_CLF_DLC
|
|
PROC REGISTER_BASE_MISSION_TRIGGER_CLF(INT &trigger_id_out, SP_MISSIONS missionID, STRANDS strand, m_enumMissionCandidateTypeID mission_type_involved, INT char_flags = -1)
|
|
|
|
CPRINTLN(DEBUG_TRIGGER, "Configuring base trigger settings.")
|
|
|
|
// Find a free index.
|
|
INT freeindex = -1
|
|
INT i = 0
|
|
REPEAT g_iRegisteredMissionTriggers i
|
|
IF g_TriggerableMissionsTU[i].bUsed = FALSE
|
|
freeindex = i
|
|
ELSE
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
// If no indexes available to reuse then expand the list.
|
|
IF freeindex = -1
|
|
freeindex = g_iRegisteredMissionTriggers
|
|
g_iRegisteredMissionTriggers++
|
|
|
|
IF g_iRegisteredMissionTriggers > MAX_MISSION_TRIGGERS_TU
|
|
SCRIPT_ASSERT("Max mission triggers CLF exceeded.")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Setup core data.
|
|
g_TriggerableMissionsTU[freeindex].bUsed = TRUE
|
|
g_TriggerableMissionsTU[freeindex].bLaunchMe = FALSE
|
|
g_TriggerableMissionsTU[freeindex].eStrand = strand
|
|
g_TriggerableMissionsTU[freeindex].eCandidateType = mission_type_involved
|
|
g_TriggerableMissionsTU[freeindex].iCandidateIndex = NO_CANDIDATE_ID
|
|
g_TriggerableMissionsTU[freeindex].eMissionID = missionID
|
|
|
|
// Setup character specific settings.
|
|
g_TriggerableMissionsTU[freeindex].iTriggerableCharBitset = char_flags
|
|
CPRINTLN(DEBUG_TRIGGER, "Valid characters for trigger [Michael:",
|
|
IS_BIT_SET(char_flags, ENUM_TO_INT(CHAR_MICHAEL)),
|
|
" Franklin:",
|
|
IS_BIT_SET(char_flags, ENUM_TO_INT(CHAR_FRANKLIN)),
|
|
" Trevor:",
|
|
IS_BIT_SET(char_flags, ENUM_TO_INT(CHAR_TREVOR)),
|
|
"].")
|
|
|
|
//Turn on the leave area flag for this mission as this trigger is activated.
|
|
//Safeguards the player from triggering missions that activate where they are standing.
|
|
IF NOT IS_BIT_SET(g_sMissionStaticData[missionID].settingsBitset, MF_INDEX_NO_LEAVE_AREA_CHECK)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT g_bSceneAutoTrigger
|
|
Set_Leave_Area_Flag_For_Mission(missionID, TRUE)
|
|
ENDIF
|
|
#ENDIF
|
|
#IF IS_FINAL_BUILD
|
|
Set_Leave_Area_Flag_For_Mission(missionID, TRUE)
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
trigger_id_out = freeindex
|
|
CPRINTLN(DEBUG_TRIGGER, "Trigger sucessfully registered in index ", trigger_id_out, ".")
|
|
ENDPROC
|
|
#ENDIF
|
|
#IF USE_NRM_DLC
|
|
PROC REGISTER_BASE_MISSION_TRIGGER_NRM(INT &trigger_id_out, SP_MISSIONS missionID, STRANDS strand, m_enumMissionCandidateTypeID mission_type_involved, INT char_flags = -1)
|
|
|
|
CPRINTLN(DEBUG_TRIGGER, "Configuring base trigger settings.")
|
|
|
|
// Find a free index.
|
|
INT freeindex = -1
|
|
INT i = 0
|
|
REPEAT g_iRegisteredMissionTriggers i
|
|
IF g_TriggerableMissionsTU[i].bUsed = FALSE
|
|
freeindex = i
|
|
ELSE
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
// If no indexes available to reuse then expand the list.
|
|
IF freeindex = -1
|
|
freeindex = g_iRegisteredMissionTriggers
|
|
g_iRegisteredMissionTriggers++
|
|
|
|
IF g_iRegisteredMissionTriggers > MAX_MISSION_TRIGGERS_TU
|
|
SCRIPT_ASSERT("Max mission triggers NRM exceeded.")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Setup core data.
|
|
g_TriggerableMissionsTU[freeindex].bUsed = TRUE
|
|
g_TriggerableMissionsTU[freeindex].bLaunchMe = FALSE
|
|
g_TriggerableMissionsTU[freeindex].eStrand = strand
|
|
g_TriggerableMissionsTU[freeindex].eCandidateType = mission_type_involved
|
|
g_TriggerableMissionsTU[freeindex].iCandidateIndex = NO_CANDIDATE_ID
|
|
g_TriggerableMissionsTU[freeindex].eMissionID = missionID
|
|
|
|
// Setup character specific settings.
|
|
g_TriggerableMissionsTU[freeindex].iTriggerableCharBitset = char_flags
|
|
CPRINTLN(DEBUG_TRIGGER, "Valid characters for trigger [Michael:",
|
|
IS_BIT_SET(char_flags, ENUM_TO_INT(CHAR_MICHAEL)),
|
|
" Franklin:",
|
|
IS_BIT_SET(char_flags, ENUM_TO_INT(CHAR_FRANKLIN)),
|
|
" Trevor:",
|
|
IS_BIT_SET(char_flags, ENUM_TO_INT(CHAR_TREVOR)),
|
|
"].")
|
|
|
|
//Turn on the leave area flag for this mission as this trigger is activated.
|
|
//Safeguards the player from triggering missions that activate where they are standing.
|
|
IF NOT IS_BIT_SET(g_sMissionStaticData[missionID].settingsBitset, MF_INDEX_NO_LEAVE_AREA_CHECK)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT g_bSceneAutoTrigger
|
|
Set_Leave_Area_Flag_For_Mission(missionID, TRUE)
|
|
ENDIF
|
|
#ENDIF
|
|
#IF IS_FINAL_BUILD
|
|
Set_Leave_Area_Flag_For_Mission(missionID, TRUE)
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
trigger_id_out = freeindex
|
|
CPRINTLN(DEBUG_TRIGGER, "Trigger sucessfully registered in index ", trigger_id_out, ".")
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Register everything needed for all types of mission triggers. To be called by more specific trigger type registration procedures.
|
|
/// PARAMS:
|
|
/// trigger_id_out - this will store the index of your created trigger, used to perform operations on
|
|
/// triggers
|
|
/// mission_type_involved - The mission type that is going to launch on triggering this.
|
|
/// Used for conflict resolution.
|
|
PROC REGISTER_BASE_MISSION_TRIGGER(INT &trigger_id_out, SP_MISSIONS missionID, STRANDS strand, m_enumMissionCandidateTypeID mission_type_involved, INT char_flags = -1)
|
|
|
|
#IF USE_CLF_DLC
|
|
REGISTER_BASE_MISSION_TRIGGER_CLF(trigger_id_out,missionID,strand,mission_type_involved,char_flags)
|
|
#ENDIF
|
|
#IF USE_NRM_DLC
|
|
REGISTER_BASE_MISSION_TRIGGER_NRM(trigger_id_out,missionID,strand,mission_type_involved,char_flags)
|
|
#ENDIF
|
|
#IF NOT USE_CLF_DLC
|
|
#IF NOT USE_NRM_DLC
|
|
CPRINTLN(DEBUG_TRIGGER, "Configuring base trigger settings.")
|
|
|
|
// Find a free index.
|
|
INT freeindex = -1
|
|
INT i = 0
|
|
REPEAT g_iRegisteredMissionTriggers i
|
|
IF g_TriggerableMissions[i].bUsed = FALSE
|
|
freeindex = i
|
|
ELSE
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
// If no indexes available to reuse then expand the list.
|
|
IF freeindex = -1
|
|
freeindex = g_iRegisteredMissionTriggers
|
|
g_iRegisteredMissionTriggers++
|
|
|
|
IF g_iRegisteredMissionTriggers > MAX_MISSION_TRIGGERS
|
|
SCRIPT_ASSERT("Max mission triggers exceeded.")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Setup core data.
|
|
g_TriggerableMissions[freeindex].bUsed = TRUE
|
|
g_TriggerableMissions[freeindex].bLaunchMe = FALSE
|
|
g_TriggerableMissions[freeindex].eStrand = strand
|
|
g_TriggerableMissions[freeindex].eCandidateType = mission_type_involved
|
|
g_TriggerableMissions[freeindex].iCandidateIndex = NO_CANDIDATE_ID
|
|
g_TriggerableMissions[freeindex].eMissionID = missionID
|
|
|
|
// Setup character specific settings.
|
|
g_TriggerableMissions[freeindex].iTriggerableCharBitset = char_flags
|
|
CPRINTLN(DEBUG_TRIGGER, "Valid characters for trigger [Michael:",
|
|
IS_BIT_SET(char_flags, ENUM_TO_INT(CHAR_MICHAEL)),
|
|
" Franklin:",
|
|
IS_BIT_SET(char_flags, ENUM_TO_INT(CHAR_FRANKLIN)),
|
|
" Trevor:",
|
|
IS_BIT_SET(char_flags, ENUM_TO_INT(CHAR_TREVOR)),
|
|
"].")
|
|
|
|
//Turn on the leave area flag for this mission as this trigger is activated.
|
|
//Safeguards the player from triggering missions that activate where they are standing.
|
|
IF NOT IS_BIT_SET(g_sMissionStaticData[missionID].settingsBitset, MF_INDEX_NO_LEAVE_AREA_CHECK)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT g_bSceneAutoTrigger
|
|
Set_Leave_Area_Flag_For_Mission(missionID, TRUE)
|
|
ENDIF
|
|
#ENDIF
|
|
#IF IS_FINAL_BUILD
|
|
Set_Leave_Area_Flag_For_Mission(missionID, TRUE)
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
trigger_id_out = freeindex
|
|
CPRINTLN(DEBUG_TRIGGER, "Trigger sucessfully registered in index ", trigger_id_out, ".")
|
|
#ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
|
|
#IF USE_CLF_DLC
|
|
PROC REGISTER_SCENE_MISSION_TRIGGER_CLF(INT &trigger_id_out, STATIC_BLIP_NAME_ENUM blip_involved, SP_MISSIONS missionID, STRANDS strand, m_enumMissionCandidateTypeID mission_type_involved, INT char_flags = -1)
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_TRIGGER, "Setting up new SCENE mission trigger: [",
|
|
GET_SP_MISSION_DISPLAY_STRING_FROM_ID(missionID), ", ",
|
|
DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), "].")
|
|
#ENDIF
|
|
|
|
// Setup base trigger.
|
|
REGISTER_BASE_MISSION_TRIGGER(trigger_id_out, missionID, strand, mission_type_involved, char_flags)
|
|
|
|
// Scene trigger specific setup.
|
|
g_TriggerableMissionsTU[trigger_id_out].eType = MISSION_TRIGGER_TYPE_SCENE
|
|
g_TriggerableMissionsTU[trigger_id_out].eBlip = blip_involved
|
|
|
|
// Reset the blip visibility status.
|
|
RESET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved)
|
|
|
|
// Setup the blip to be character specific.
|
|
IF g_TriggerableMissionsTU[trigger_id_out].iTriggerableCharBitset != 7 //BIT_MICHAEL|BIT_FRANKLIN|BIT_TREVOR
|
|
// Make blip specific to who it is for
|
|
BOOL firstset = FALSE
|
|
BOOL secondset = FALSE
|
|
|
|
IF IS_BIT_SET(g_TriggerableMissionsTU[trigger_id_out].iTriggerableCharBitset, ENUM_TO_INT(CHAR_MICHAEL))
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved,TRUE,CHAR_MICHAEL,firstset)
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now visible for Michael.")
|
|
firstset = TRUE
|
|
ENDIF
|
|
|
|
IF IS_BIT_SET(g_TriggerableMissionsTU[trigger_id_out].iTriggerableCharBitset, ENUM_TO_INT(CHAR_FRANKLIN))
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved,TRUE,CHAR_FRANKLIN,firstset)
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now visible for Franklin.")
|
|
IF firstset = TRUE
|
|
secondset = TRUE
|
|
ENDIF
|
|
firstset = TRUE
|
|
ENDIF
|
|
|
|
IF IS_BIT_SET(g_TriggerableMissionsTU[trigger_id_out].iTriggerableCharBitset, ENUM_TO_INT(CHAR_TREVOR)) AND (NOT secondset)
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved,TRUE,CHAR_TREVOR,firstset)
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now visible for Trevor.")
|
|
ENDIF
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now set to be none character specific.")
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved, FALSE, CHAR_MICHAEL)
|
|
ENDIF
|
|
|
|
// Set the blips mission type.
|
|
IF CAN_STORY_MISSION_LAUNCH_WITH_FRIENDS(missionID)
|
|
SET_STATIC_BLIP_MISSION_LAUNCH_LEVEL_LOCKED(blip_involved, MISSION_TYPE_STORY_FRIENDS)
|
|
ELSE
|
|
SET_STATIC_BLIP_MISSION_LAUNCH_LEVEL_LOCKED(blip_involved, MISSION_TYPE_STORY)
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
#IF USE_NRM_DLC
|
|
PROC REGISTER_SCENE_MISSION_TRIGGER_NRM(INT &trigger_id_out, STATIC_BLIP_NAME_ENUM blip_involved, SP_MISSIONS missionID, STRANDS strand, m_enumMissionCandidateTypeID mission_type_involved, INT char_flags = -1)
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_TRIGGER, "Setting up new SCENE mission trigger: [",
|
|
GET_SP_MISSION_DISPLAY_STRING_FROM_ID(missionID), ", ",
|
|
DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), "].")
|
|
#ENDIF
|
|
|
|
// Setup base trigger.
|
|
REGISTER_BASE_MISSION_TRIGGER(trigger_id_out, missionID, strand, mission_type_involved, char_flags)
|
|
|
|
// Scene trigger specific setup.
|
|
g_TriggerableMissionsTU[trigger_id_out].eType = MISSION_TRIGGER_TYPE_SCENE
|
|
g_TriggerableMissionsTU[trigger_id_out].eBlip = blip_involved
|
|
|
|
// Reset the blip visibility status.
|
|
RESET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved)
|
|
|
|
// Setup the blip to be character specific.
|
|
IF g_TriggerableMissionsTU[trigger_id_out].iTriggerableCharBitset != 7 //BIT_MICHAEL|BIT_FRANKLIN|BIT_TREVOR
|
|
// Make blip specific to who it is for
|
|
BOOL firstset = FALSE
|
|
BOOL secondset = FALSE
|
|
|
|
IF IS_BIT_SET(g_TriggerableMissionsTU[trigger_id_out].iTriggerableCharBitset, ENUM_TO_INT(CHAR_MICHAEL))
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved,TRUE,CHAR_MICHAEL,firstset)
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now visible for Michael.")
|
|
firstset = TRUE
|
|
ENDIF
|
|
|
|
IF IS_BIT_SET(g_TriggerableMissionsTU[trigger_id_out].iTriggerableCharBitset, ENUM_TO_INT(CHAR_FRANKLIN))
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved,TRUE,CHAR_FRANKLIN,firstset)
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now visible for Franklin.")
|
|
IF firstset = TRUE
|
|
secondset = TRUE
|
|
ENDIF
|
|
firstset = TRUE
|
|
ENDIF
|
|
|
|
IF IS_BIT_SET(g_TriggerableMissionsTU[trigger_id_out].iTriggerableCharBitset, ENUM_TO_INT(CHAR_TREVOR)) AND (NOT secondset)
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved,TRUE,CHAR_TREVOR,firstset)
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now visible for Trevor.")
|
|
ENDIF
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now set to be none character specific.")
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved, FALSE, CHAR_MICHAEL)
|
|
ENDIF
|
|
|
|
// Set the blips mission type.
|
|
IF CAN_STORY_MISSION_LAUNCH_WITH_FRIENDS(missionID)
|
|
SET_STATIC_BLIP_MISSION_LAUNCH_LEVEL_LOCKED(blip_involved, MISSION_TYPE_STORY_FRIENDS)
|
|
ELSE
|
|
SET_STATIC_BLIP_MISSION_LAUNCH_LEVEL_LOCKED(blip_involved, MISSION_TYPE_STORY)
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
PROC REGISTER_SCENE_MISSION_TRIGGER(INT &trigger_id_out, STATIC_BLIP_NAME_ENUM blip_involved, SP_MISSIONS missionID, STRANDS strand, m_enumMissionCandidateTypeID mission_type_involved, INT char_flags = -1)
|
|
#IF USE_CLF_DLC
|
|
REGISTER_SCENE_MISSION_TRIGGER_CLF(trigger_id_out, blip_involved, missionID, strand, mission_type_involved, char_flags)
|
|
#ENDIF
|
|
#IF USE_NRM_DLC
|
|
REGISTER_SCENE_MISSION_TRIGGER_NRM(trigger_id_out, blip_involved, missionID, strand, mission_type_involved, char_flags)
|
|
#ENDIF
|
|
|
|
#IF NOT USE_CLF_DLC
|
|
#IF NOT USE_NRM_DLC
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_TRIGGER, "Setting up new SCENE mission trigger: [",
|
|
GET_SP_MISSION_DISPLAY_STRING_FROM_ID(missionID), ", ",
|
|
DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), "].")
|
|
#ENDIF
|
|
|
|
// Setup base trigger.
|
|
REGISTER_BASE_MISSION_TRIGGER(trigger_id_out, missionID, strand, mission_type_involved, char_flags)
|
|
|
|
// Scene trigger specific setup.
|
|
g_TriggerableMissions[trigger_id_out].eType = MISSION_TRIGGER_TYPE_SCENE
|
|
g_TriggerableMissions[trigger_id_out].eBlip = blip_involved
|
|
|
|
// Reset the blip visibility status.
|
|
RESET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved)
|
|
|
|
// Setup the blip to be character specific.
|
|
IF g_TriggerableMissions[trigger_id_out].iTriggerableCharBitset != 7 //BIT_MICHAEL|BIT_FRANKLIN|BIT_TREVOR
|
|
// Make blip specific to who it is for
|
|
BOOL firstset = FALSE
|
|
BOOL secondset = FALSE
|
|
|
|
IF IS_BIT_SET(g_TriggerableMissions[trigger_id_out].iTriggerableCharBitset, ENUM_TO_INT(CHAR_MICHAEL))
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved,TRUE,CHAR_MICHAEL,firstset)
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now visible for Michael.")
|
|
firstset = TRUE
|
|
ENDIF
|
|
|
|
IF IS_BIT_SET(g_TriggerableMissions[trigger_id_out].iTriggerableCharBitset, ENUM_TO_INT(CHAR_FRANKLIN))
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved,TRUE,CHAR_FRANKLIN,firstset)
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now visible for Franklin.")
|
|
IF firstset = TRUE
|
|
secondset = TRUE
|
|
ENDIF
|
|
firstset = TRUE
|
|
ENDIF
|
|
|
|
IF IS_BIT_SET(g_TriggerableMissions[trigger_id_out].iTriggerableCharBitset, ENUM_TO_INT(CHAR_TREVOR)) AND (NOT secondset)
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved,TRUE,CHAR_TREVOR,firstset)
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now visible for Trevor.")
|
|
ENDIF
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_TRIGGER, DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(blip_involved)), " now set to be none character specific.")
|
|
SET_STATIC_BLIP_CHARACTER_VISIBILITY(blip_involved, FALSE, CHAR_MICHAEL)
|
|
ENDIF
|
|
|
|
// Set the blips mission type.
|
|
IF CAN_STORY_MISSION_LAUNCH_WITH_FRIENDS(missionID)
|
|
SET_STATIC_BLIP_MISSION_LAUNCH_LEVEL_LOCKED(blip_involved, MISSION_TYPE_STORY_FRIENDS)
|
|
ELSE
|
|
SET_STATIC_BLIP_MISSION_LAUNCH_LEVEL_LOCKED(blip_involved, MISSION_TYPE_STORY)
|
|
ENDIF
|
|
#ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
PROC REGISTER_SWITCH_MISSION_TRIGGER(INT &trigger_id_out, SP_MISSIONS missionID, STRANDS strand, m_enumMissionCandidateTypeID mission_type_involved, INT char_flags = -1)
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_TRIGGER, "Setting up new SWITCH mission trigger: [",
|
|
GET_SP_MISSION_DISPLAY_STRING_FROM_ID(missionID), "].")
|
|
#ENDIF
|
|
|
|
// Setup base trigger.
|
|
Register_Base_Mission_Trigger(trigger_id_out, missionID, strand, mission_type_involved, char_flags)
|
|
|
|
#IF USE_CLF_DLC
|
|
g_TriggerableMissionsTU[trigger_id_out].eType = MISSION_TRIGGER_TYPE_SWITCH
|
|
#ENDIF
|
|
|
|
#IF USE_NRM_DLC
|
|
g_TriggerableMissionsTU[trigger_id_out].eType = MISSION_TRIGGER_TYPE_SWITCH
|
|
#ENDIF
|
|
|
|
#IF NOT USE_CLF_DLC
|
|
#IF NOT USE_NRM_DLC
|
|
g_TriggerableMissions[trigger_id_out].eType = MISSION_TRIGGER_TYPE_SWITCH
|
|
#ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
|
|
//check for "should I trigger?" //
|
|
/// PURPOSE:
|
|
/// Checks if the conditions to activate the trigger with the registered index have been met
|
|
/// RETURNS:
|
|
/// FALSE - mission not triggered
|
|
/// TRUE - The trigger has been fired and the mission is clear to launch, remember to
|
|
/// inform the system that you are done with it using Triggered_Mission_Has_Terminated
|
|
#IF USE_CLF_DLC
|
|
FUNC BOOL Has_Mission_Trigger_Triggered_CLF(INT trigger_id_in)
|
|
IF (trigger_id_in < 0) OR (trigger_id_in > (MAX_MISSION_TRIGGERS_TU-1))
|
|
SCRIPT_ASSERT("Has_Mission_Trigger_Triggered AGT: Invalid trigger ID passed.")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF g_TriggerableMissionsTU[trigger_id_in].bLaunchMe
|
|
g_TriggerableMissionsTU[trigger_id_in].bLaunchMe = FALSE
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDFUNC
|
|
#ENDIF
|
|
|
|
#IF USE_NRM_DLC
|
|
FUNC BOOL Has_Mission_Trigger_Triggered_NRM(INT trigger_id_in)
|
|
IF (trigger_id_in < 0) OR (trigger_id_in > (MAX_MISSION_TRIGGERS_TU-1))
|
|
SCRIPT_ASSERT("Has_Mission_Trigger_Triggered NRM: Invalid trigger ID passed.")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF g_TriggerableMissionsTU[trigger_id_in].bLaunchMe
|
|
g_TriggerableMissionsTU[trigger_id_in].bLaunchMe = FALSE
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDFUNC
|
|
#ENDIF
|
|
|
|
FUNC BOOL Has_Mission_Trigger_Triggered(INT trigger_id_in)
|
|
#IF USE_CLF_DLC
|
|
RETURN Has_Mission_Trigger_Triggered_CLF( trigger_id_in)
|
|
#ENDIF
|
|
#IF USE_NRM_DLC
|
|
RETURN Has_Mission_Trigger_Triggered_NRM( trigger_id_in)
|
|
#ENDIF
|
|
|
|
#IF NOT USE_CLF_DLC
|
|
#IF NOT USE_NRM_DLC
|
|
IF (trigger_id_in < 0) OR (trigger_id_in > (MAX_MISSION_TRIGGERS-1))
|
|
SCRIPT_ASSERT("Has_Mission_Trigger_Triggered: Invalid trigger ID passed.")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF g_TriggerableMissions[trigger_id_in].bLaunchMe
|
|
g_TriggerableMissions[trigger_id_in].bLaunchMe = FALSE
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
#ENDIF
|
|
ENDFUNC
|
|
|
|
|
|
//Terminated trigger started mission
|
|
/// PURPOSE:
|
|
/// Informs the mission triggering system that the mission that previously launched after
|
|
/// recieving approval from Has_Mission_Trigger_Triggered has now terminated.
|
|
///
|
|
/// PARAMS:
|
|
/// trigger_id_in - the trigger index that was previously launched with Has_Mission_Trigger_Triggered
|
|
#IF USE_CLF_DLC
|
|
PROC Triggered_Mission_Has_Terminated_CLF(INT trigger_id_in)
|
|
IF NOT (IS_CURRENTLY_ON_MISSION_TO_TYPE())
|
|
SCRIPT_ASSERT("Triggered_Mission_Has_Terminated: Cannot be fired when not on mission.")
|
|
EXIT
|
|
ENDIF
|
|
IF (trigger_id_in < 0) OR (trigger_id_in > (MAX_MISSION_TRIGGERS_TU-1))
|
|
SCRIPT_ASSERT("Triggered_Mission_Has_Terminated: Invalid trigger index passed.")
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_bMissionTriggerFired = FALSE
|
|
|
|
// Note that this is also changed directly in Mission_Over.
|
|
g_OnMissionState = MISSION_TYPE_OFF_MISSION// = FALSE
|
|
|
|
// Forcibly reset the firing list.
|
|
g_TriggerableMissionsTU[trigger_id_in].iCandidateIndex = NO_CANDIDATE_ID // This ID isn't useful anymore.
|
|
|
|
//Ensure the trigger's blip is disabled.
|
|
IF g_TriggerableMissionsTU[trigger_id_in].eBlip != STATIC_BLIP_NAME_DUMMY_FINAL
|
|
SET_STATIC_BLIP_ACTIVE_STATE(g_TriggerableMissionsTU[trigger_id_in].eBlip, FALSE)
|
|
ENDIF
|
|
|
|
Reset_Mission_Trigger(trigger_id_in)
|
|
|
|
CPRINTLN(DEBUG_TRIGGER, "Mission termination informed for trigger index ", trigger_id_in, ".")
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
#IF USE_NRM_DLC
|
|
PROC Triggered_Mission_Has_Terminated_NRM(INT trigger_id_in)
|
|
IF NOT (IS_CURRENTLY_ON_MISSION_TO_TYPE())
|
|
SCRIPT_ASSERT("Triggered_Mission_Has_Terminated: Cannot be fired when not on mission.")
|
|
EXIT
|
|
ENDIF
|
|
IF (trigger_id_in < 0) OR (trigger_id_in > (MAX_MISSION_TRIGGERS_TU-1))
|
|
SCRIPT_ASSERT("Triggered_Mission_Has_Terminated: Invalid trigger index passed.")
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_bMissionTriggerFired = FALSE
|
|
|
|
// Note that this is also changed directly in Mission_Over.
|
|
g_OnMissionState = MISSION_TYPE_OFF_MISSION// = FALSE
|
|
|
|
// Forcibly reset the firing list.
|
|
g_TriggerableMissionsTU[trigger_id_in].iCandidateIndex = NO_CANDIDATE_ID // This ID isn't useful anymore.
|
|
|
|
//Ensure the trigger's blip is disabled.
|
|
IF g_TriggerableMissionsTU[trigger_id_in].eBlip != STATIC_BLIP_NAME_DUMMY_FINAL
|
|
SET_STATIC_BLIP_ACTIVE_STATE(g_TriggerableMissionsTU[trigger_id_in].eBlip, FALSE)
|
|
ENDIF
|
|
|
|
Reset_Mission_Trigger(trigger_id_in)
|
|
|
|
CPRINTLN(DEBUG_TRIGGER, "Mission termination informed for trigger index ", trigger_id_in, ".")
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
PROC Triggered_Mission_Has_Terminated(INT trigger_id_in)
|
|
#IF USE_CLF_DLC
|
|
Triggered_Mission_Has_Terminated_CLF( trigger_id_in)
|
|
#ENDIF
|
|
#IF USE_NRM_DLC
|
|
Triggered_Mission_Has_Terminated_NRM( trigger_id_in)
|
|
#ENDIF
|
|
|
|
#IF NOT USE_CLF_DLC
|
|
#IF NOT USE_NRM_DLC
|
|
IF NOT (IS_CURRENTLY_ON_MISSION_TO_TYPE())
|
|
SCRIPT_ASSERT("Triggered_Mission_Has_Terminated: Cannot be fired when not on mission.")
|
|
EXIT
|
|
ENDIF
|
|
IF (trigger_id_in < 0) OR (trigger_id_in > (MAX_MISSION_TRIGGERS-1))
|
|
SCRIPT_ASSERT("Triggered_Mission_Has_Terminated: Invalid trigger index passed.")
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_bMissionTriggerFired = FALSE
|
|
|
|
// Note that this is also changed directly in Mission_Over.
|
|
g_OnMissionState = MISSION_TYPE_OFF_MISSION// = FALSE
|
|
|
|
// Forcibly reset the firing list.
|
|
g_TriggerableMissions[trigger_id_in].iCandidateIndex = NO_CANDIDATE_ID // This ID isn't useful anymore.
|
|
|
|
//Ensure the trigger's blip is disabled.
|
|
IF g_TriggerableMissions[trigger_id_in].eBlip != STATIC_BLIP_NAME_DUMMY_FINAL
|
|
SET_STATIC_BLIP_ACTIVE_STATE(g_TriggerableMissions[trigger_id_in].eBlip, FALSE)
|
|
ENDIF
|
|
|
|
Reset_Mission_Trigger(trigger_id_in)
|
|
|
|
CPRINTLN(DEBUG_TRIGGER, "Mission termination informed for trigger index ", trigger_id_in, ".")
|
|
#ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
#IF USE_CLF_DLC
|
|
PROC Remove_Mission_Trigger_CLF(INT trigger_id_in)
|
|
|
|
IF ((g_bMissionTriggerFired OR IS_CURRENTLY_ON_MISSION_TO_TYPE()) AND (g_iMissionTriggerableToTrigger = trigger_id_in))
|
|
SCRIPT_ASSERT("Remove_Mission_Trigger: Cannot remove the launched trigger.")
|
|
EXIT
|
|
ENDIF
|
|
IF (trigger_id_in < 0) OR (trigger_id_in > (MAX_MISSION_TRIGGERS_TU-1))
|
|
SCRIPT_ASSERT("Remove_Mission_Trigger: Invalid trigger index passed.")
|
|
EXIT
|
|
ENDIF
|
|
IF NOT (g_TriggerableMissionsTU[trigger_id_in].bUsed)
|
|
CPRINTLN(DEBUG_TRIGGER, "Unused trigger index passed. Ignoring remove request.")
|
|
EXIT
|
|
ENDIF
|
|
|
|
//Ensure the trigger's blip is disabled.
|
|
IF g_TriggerableMissionsTU[trigger_id_in].eBlip != STATIC_BLIP_NAME_DUMMY_FINAL
|
|
SET_STATIC_BLIP_ACTIVE_STATE(g_TriggerableMissionsTU[trigger_id_in].eBlip, FALSE)
|
|
ENDIF
|
|
|
|
Reset_Mission_Trigger(trigger_id_in)
|
|
|
|
CPRINTLN(DEBUG_TRIGGER, "Mission trigger at index ", trigger_id_in, " was removed.")
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
#IF USE_NRM_DLC
|
|
PROC Remove_Mission_Trigger_NRM(INT trigger_id_in)
|
|
|
|
IF ((g_bMissionTriggerFired OR IS_CURRENTLY_ON_MISSION_TO_TYPE()) AND (g_iMissionTriggerableToTrigger = trigger_id_in))
|
|
SCRIPT_ASSERT("Remove_Mission_Trigger: Cannot remove the launched trigger.")
|
|
EXIT
|
|
ENDIF
|
|
IF (trigger_id_in < 0) OR (trigger_id_in > (MAX_MISSION_TRIGGERS_TU-1))
|
|
SCRIPT_ASSERT("Remove_Mission_Trigger: Invalid trigger index passed.")
|
|
EXIT
|
|
ENDIF
|
|
IF NOT (g_TriggerableMissionsTU[trigger_id_in].bUsed)
|
|
CPRINTLN(DEBUG_TRIGGER, "Unused trigger index passed. Ignoring remove request.")
|
|
EXIT
|
|
ENDIF
|
|
|
|
//Ensure the trigger's blip is disabled.
|
|
IF g_TriggerableMissionsTU[trigger_id_in].eBlip != STATIC_BLIP_NAME_DUMMY_FINAL
|
|
SET_STATIC_BLIP_ACTIVE_STATE(g_TriggerableMissionsTU[trigger_id_in].eBlip, FALSE)
|
|
ENDIF
|
|
|
|
Reset_Mission_Trigger(trigger_id_in)
|
|
|
|
CPRINTLN(DEBUG_TRIGGER, "Mission trigger at index ", trigger_id_in, " was removed.")
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
// Purge a specific mission trigger.
|
|
PROC Remove_Mission_Trigger(INT trigger_id_in)
|
|
#IF USE_CLF_DLC
|
|
Remove_Mission_Trigger_CLF(trigger_id_in)
|
|
#ENDIF
|
|
|
|
#IF USE_NRM_DLC
|
|
Remove_Mission_Trigger_NRM(trigger_id_in)
|
|
#ENDIF
|
|
|
|
#IF NOT USE_CLF_DLC
|
|
#IF NOT USE_NRM_DLC
|
|
IF ((g_bMissionTriggerFired OR IS_CURRENTLY_ON_MISSION_TO_TYPE()) AND (g_iMissionTriggerableToTrigger = trigger_id_in))
|
|
SCRIPT_ASSERT("Remove_Mission_Trigger: Cannot remove the launched trigger.")
|
|
EXIT
|
|
ENDIF
|
|
IF (trigger_id_in < 0) OR (trigger_id_in > (MAX_MISSION_TRIGGERS-1))
|
|
SCRIPT_ASSERT("Remove_Mission_Trigger: Invalid trigger index passed.")
|
|
EXIT
|
|
ENDIF
|
|
IF NOT (g_TriggerableMissions[trigger_id_in].bUsed)
|
|
CPRINTLN(DEBUG_TRIGGER, "Unused trigger index passed. Ignoring remove request.")
|
|
EXIT
|
|
ENDIF
|
|
|
|
//Ensure the trigger's blip is disabled.
|
|
IF g_TriggerableMissions[trigger_id_in].eBlip != STATIC_BLIP_NAME_DUMMY_FINAL
|
|
SET_STATIC_BLIP_ACTIVE_STATE(g_TriggerableMissions[trigger_id_in].eBlip, FALSE)
|
|
ENDIF
|
|
|
|
Reset_Mission_Trigger(trigger_id_in)
|
|
|
|
CPRINTLN(DEBUG_TRIGGER, "Mission trigger at index ", trigger_id_in, " was removed.")
|
|
|
|
#ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
|
|
FUNC INT GET_AVAILABLE_MISSION_INDEX_FOR_MISSION(SP_MISSIONS paramMissionID)
|
|
INT iAvailableIndex
|
|
#IF USE_CLF_DLC
|
|
REPEAT MAX_MISSIONS_AVAILABLE_TU iAvailableIndex
|
|
IF g_availableMissionsTU[iAvailableIndex].index != ILLEGAL_ARRAY_POSITION
|
|
IF g_flowUnsaved.coreVars[g_availableMissionsTU[iAvailableIndex].index].iValue1 = ENUM_TO_INT(paramMissionID)
|
|
RETURN iAvailableIndex
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
#ENDIF
|
|
#IF USE_NRM_DLC
|
|
REPEAT MAX_MISSIONS_AVAILABLE_TU iAvailableIndex
|
|
IF g_availableMissionsTU[iAvailableIndex].index != ILLEGAL_ARRAY_POSITION
|
|
IF g_flowUnsaved.coreVars[g_availableMissionsTU[iAvailableIndex].index].iValue1 = ENUM_TO_INT(paramMissionID)
|
|
RETURN iAvailableIndex
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
#ENDIF
|
|
#IF NOT USE_CLF_DLC
|
|
#IF NOT USE_NRM_DLC
|
|
REPEAT MAX_MISSIONS_AVAILABLE iAvailableIndex
|
|
IF g_availableMissions[iAvailableIndex].index != ILLEGAL_ARRAY_POSITION
|
|
IF g_flowUnsaved.coreVars[g_availableMissions[iAvailableIndex].index].iValue1 = ENUM_TO_INT(paramMissionID)
|
|
RETURN iAvailableIndex
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
#ENDIF
|
|
#ENDIF
|
|
RETURN -1
|
|
ENDFUNC
|
|
|
|
|
|
FUNC INT GET_TRIGGER_INDEX_FOR_MISSION(SP_MISSIONS paramMissionID)
|
|
INT iTriggerIndex
|
|
#IF USE_CLF_DLC
|
|
REPEAT MAX_MISSION_TRIGGERS_TU iTriggerIndex
|
|
IF g_TriggerableMissionsTU[iTriggerIndex].eMissionID = paramMissionID
|
|
RETURN iTriggerIndex
|
|
ENDIF
|
|
ENDREPEAT
|
|
#ENDIF
|
|
|
|
#IF USE_NRM_DLC
|
|
REPEAT MAX_MISSION_TRIGGERS_TU iTriggerIndex
|
|
IF g_TriggerableMissionsTU[iTriggerIndex].eMissionID = paramMissionID
|
|
RETURN iTriggerIndex
|
|
ENDIF
|
|
ENDREPEAT
|
|
#ENDIF
|
|
|
|
#IF NOT USE_CLF_DLC
|
|
#IF NOT USE_NRM_DLC
|
|
REPEAT MAX_MISSION_TRIGGERS iTriggerIndex
|
|
IF g_TriggerableMissions[iTriggerIndex].eMissionID = paramMissionID
|
|
RETURN iTriggerIndex
|
|
ENDIF
|
|
ENDREPEAT
|
|
#ENDIF
|
|
#ENDIF
|
|
RETURN -1
|
|
ENDFUNC
|
|
|
|
|
|
ENUM SCRIPT_TYPE
|
|
ST_STORY_MISSION,
|
|
ST_STORY_MISSION_SEAMLESS_PREP,
|
|
ST_RANDOM_CHARACTER,
|
|
ST_RCM_VEHICLE,
|
|
ST_RANDOM_EVENT,
|
|
ST_FAMILY_SCENE,
|
|
ST_MINIGAME,
|
|
ST_AMBIENT_FRIEND,
|
|
ST_PLANNING_BOARD,
|
|
ST_SPMC_INSTANCE//mission creator single player mission instance
|
|
ENDENUM
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
FUNC STRING GET_SCRIPT_TYPE_DEBUG_STRING(SCRIPT_TYPE paramScriptType)
|
|
SWITCH paramScriptType
|
|
CASE ST_STORY_MISSION RETURN "STORY_MISSION" BREAK
|
|
CASE ST_STORY_MISSION_SEAMLESS_PREP RETURN "STORY_MISSION_SEAMLESS_PREP" BREAK
|
|
CASE ST_RANDOM_CHARACTER RETURN "RANDOM_CHARACTER" BREAK
|
|
CASE ST_RCM_VEHICLE RETURN "RCM_VEHICLE" BREAK
|
|
CASE ST_RANDOM_EVENT RETURN "RANDOM_EVENT" BREAK
|
|
CASE ST_FAMILY_SCENE RETURN "FAMILY_SCENE" BREAK
|
|
CASE ST_MINIGAME RETURN "MINIGAME" BREAK
|
|
CASE ST_AMBIENT_FRIEND RETURN "AMBIENT_FRIEND" BREAK
|
|
CASE ST_PLANNING_BOARD RETURN "PLANNING_BOARD" BREAK
|
|
CASE ST_SPMC_INSTANCE RETURN "SPMC_INSTANCE" BREAK
|
|
ENDSWITCH
|
|
RETURN "INVALID"
|
|
ENDFUNC
|
|
#ENDIF
|
|
|
|
/// PURPOSE: Contains lists of all fiddly checks that should restrict a certain type of script from triggering from open world gameplay.
|
|
///
|
|
/// PARAMS:
|
|
/// scriptType An enum defining the type of script that is checking if it is safe to trigger.
|
|
/// RETURNS: TRUE if it's safe to trigger. FALSE if it is not.
|
|
///
|
|
FUNC BOOL IS_IT_SAFE_TO_TRIGGER_SCRIPT_TYPE(SCRIPT_TYPE scriptType)
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
enumCharacterList ePlayerPed = GET_CURRENT_PLAYER_PED_ENUM()
|
|
IF NOT IS_PLAYER_PED_PLAYABLE(ePlayerPed)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
//NB. Keeping all the checks as distinct lists to make this more readable.
|
|
SWITCH scriptType
|
|
CASE ST_SPMC_INSTANCE // made these the same as the single player for now
|
|
CASE ST_STORY_MISSION
|
|
IF NOT IS_PLAYER_READY_FOR_CUTSCENE(PLAYER_ID())
|
|
OR IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
OR IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
OR IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
OR IS_PED_FALLING(PLAYER_PED_ID())
|
|
OR IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
OR IS_PLAYER_CLIMBING(PLAYER_ID())
|
|
OR IS_PED_IN_COMBAT(PLAYER_PED_ID())
|
|
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
OR g_bPlayerIsInTaxi
|
|
OR g_bIsOnRampage
|
|
OR IS_TRANSITION_ACTIVE()
|
|
OR IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
OR IS_PLAYER_IN_ANY_SHOP()
|
|
OR IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
OR IS_RESULT_SCREEN_DISPLAYING()
|
|
OR Is_Player_Timetable_Scene_In_Progress()
|
|
OR g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_PLAYER_READY_FOR_CUTSCENE(PLAYER_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player not ready for cutscene.")
|
|
ENDIF
|
|
IF IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player in air.")
|
|
ENDIF
|
|
IF IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player getting into vehicle.")
|
|
ENDIF
|
|
IF IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player ragdolling.")
|
|
ENDIF
|
|
IF IS_PED_FALLING(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player falling.")
|
|
ENDIF
|
|
IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player being arrested.")
|
|
ENDIF
|
|
IF IS_PLAYER_CLIMBING(PLAYER_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player climbing.")
|
|
ENDIF
|
|
IF IS_PED_IN_COMBAT(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player in combat.")
|
|
ENDIF
|
|
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player switch in progress.")
|
|
ENDIF
|
|
IF g_bPlayerIsInTaxi
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player in taxi.")
|
|
ENDIF
|
|
IF g_bIsOnRampage
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player on rampage.")
|
|
ENDIF
|
|
IF IS_TRANSITION_ACTIVE()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") SP<->MP transition active.")
|
|
ENDIF
|
|
IF IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Transition HUD displaying.")
|
|
ENDIF
|
|
IF IS_RESULT_SCREEN_DISPLAYING()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Result screen displaying.")
|
|
ENDIF
|
|
IF IS_PLAYER_IN_ANY_SHOP()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player is in a shop.")
|
|
ENDIF
|
|
IF IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player is browsing items in a shop.")
|
|
ENDIF
|
|
IF Is_Player_Timetable_Scene_In_Progress()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Timetable scene in progress.")
|
|
ENDIF
|
|
IF g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") End of mission communication queued.")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE ST_STORY_MISSION_SEAMLESS_PREP
|
|
IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
OR g_bIsOnRampage
|
|
OR IS_TRANSITION_ACTIVE()
|
|
OR IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
OR IS_RESULT_SCREEN_DISPLAYING()
|
|
OR IS_PLAYER_IN_ANY_SHOP()
|
|
OR IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
OR Is_Player_Timetable_Scene_In_Progress()
|
|
OR g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player being arrested.")
|
|
ENDIF
|
|
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Switch in progress.")
|
|
ENDIF
|
|
IF g_bIsOnRampage
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player on a rampage.")
|
|
ENDIF
|
|
IF IS_TRANSITION_ACTIVE()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") MP transition is active.")
|
|
ENDIF
|
|
IF IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") MP transition HUD displaying.")
|
|
ENDIF
|
|
IF IS_RESULT_SCREEN_DISPLAYING()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Result screen displaying.")
|
|
ENDIF
|
|
IF IS_PLAYER_IN_ANY_SHOP()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player is in a shop.")
|
|
ENDIF
|
|
IF IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player is browsing items in a shop.")
|
|
ENDIF
|
|
IF Is_Player_Timetable_Scene_In_Progress()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Timetable scene in progress.")
|
|
ENDIF
|
|
IF g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") End of mission communication queued.")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE ST_RANDOM_CHARACTER
|
|
IF NOT IS_PLAYER_READY_FOR_CUTSCENE(PLAYER_ID())
|
|
OR IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
OR IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
OR IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
OR IS_PED_FALLING(PLAYER_PED_ID())
|
|
OR IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
OR IS_PLAYER_CLIMBING(PLAYER_ID())
|
|
OR IS_PED_IN_COMBAT(PLAYER_PED_ID())
|
|
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
OR g_bPlayerIsInTaxi
|
|
OR g_bIsOnRampage
|
|
OR IS_TRANSITION_ACTIVE()
|
|
OR IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
OR IS_RESULT_SCREEN_DISPLAYING()
|
|
OR IS_PLAYER_IN_ANY_SHOP()
|
|
OR IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
OR Is_Player_Timetable_Scene_In_Progress()
|
|
OR g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
OR g_iCallInProgress != -1
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_PLAYER_READY_FOR_CUTSCENE(PLAYER_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player not ready for cutscene.")
|
|
ENDIF
|
|
IF IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player in air.")
|
|
ENDIF
|
|
IF IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player getting into vehicle.")
|
|
ENDIF
|
|
IF IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player ragdolling.")
|
|
ENDIF
|
|
IF IS_PED_FALLING(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player falling.")
|
|
ENDIF
|
|
IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player being arrested.")
|
|
ENDIF
|
|
IF IS_PLAYER_CLIMBING(PLAYER_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player climbing.")
|
|
ENDIF
|
|
IF IS_PED_IN_COMBAT(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player in combat.")
|
|
ENDIF
|
|
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player switch in progress.")
|
|
ENDIF
|
|
IF g_bPlayerIsInTaxi
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player in taxi.")
|
|
ENDIF
|
|
IF g_bIsOnRampage
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player on rampage.")
|
|
ENDIF
|
|
IF IS_TRANSITION_ACTIVE()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") SP<->MP transition active.")
|
|
ENDIF
|
|
IF IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Transition HUD displaying.")
|
|
ENDIF
|
|
IF IS_RESULT_SCREEN_DISPLAYING()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Result screen displaying.")
|
|
ENDIF
|
|
IF IS_PLAYER_IN_ANY_SHOP()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player is in a shop.")
|
|
ENDIF
|
|
IF IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player is browsing items in a shop.")
|
|
ENDIF
|
|
IF Is_Player_Timetable_Scene_In_Progress()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Timetable scene in progress.")
|
|
ENDIF
|
|
IF g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") End of mission communication queued.")
|
|
ENDIF
|
|
IF g_iCallInProgress != -1
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") The comms controller has a call in progress.")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE ST_RCM_VEHICLE
|
|
/*
|
|
The following checks prevent an RCM mission from triggering
|
|
when the player enters a vehicle from the passenger seat.
|
|
*/
|
|
//IF NOT IS_PLAYER_READY_FOR_CUTSCENE(PLAYER_ID())
|
|
//OR IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
//OR IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
//OR IS_PLAYER_CLIMBING(PLAYER_ID())
|
|
|
|
IF IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
OR IS_PED_FALLING(PLAYER_PED_ID())
|
|
OR IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
OR IS_PED_IN_COMBAT(PLAYER_PED_ID())
|
|
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
OR g_bPlayerIsInTaxi
|
|
OR g_bIsOnRampage
|
|
OR IS_TRANSITION_ACTIVE()
|
|
OR IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
OR IS_PLAYER_IN_ANY_SHOP()
|
|
OR IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
OR Is_Player_Timetable_Scene_In_Progress()
|
|
OR g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE ST_RANDOM_EVENT
|
|
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
OR GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0
|
|
OR IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
OR Is_Player_Timetable_Scene_In_Progress()
|
|
OR IS_MISSION_LEADIN_ACTIVE()
|
|
OR g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Switch in progress.")
|
|
ENDIF
|
|
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Player has a wanted level.")
|
|
ENDIF
|
|
IF IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") MP transition HUD displaying.")
|
|
ENDIF
|
|
IF Is_Player_Timetable_Scene_In_Progress()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Timetable scene in progress.")
|
|
ENDIF
|
|
IF IS_MISSION_LEADIN_ACTIVE()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") Mission leadin is active.")
|
|
ENDIF
|
|
IF g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(",GET_SCRIPT_TYPE_DEBUG_STRING(scriptType),
|
|
") End of mission communication queued.")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE ST_FAMILY_SCENE
|
|
IF IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
// OR GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0
|
|
OR IS_PLAYER_IN_ANY_SHOP()
|
|
OR IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
// OR Is_Player_Timetable_Scene_In_Progress()
|
|
OR IS_MISSION_LEADIN_ACTIVE()
|
|
// OR g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
// OR NOT CAN_MISSION_TYPE_START_AGAINST_CURRENT_TYPE(g_OnMissionState)
|
|
OR IS_AUTOSAVE_REQUEST_IN_PROGRESS()
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF IS_PLAYER_SWITCH_IN_PROGRESS()
|
|
AND (GET_PLAYER_SWITCH_TYPE() != SWITCH_TYPE_SHORT)
|
|
AND (GET_PLAYER_SWITCH_STATE() < SWITCH_STATE_JUMPCUT_DESCENT)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE ST_MINIGAME
|
|
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
|
|
IF IS_PED_IN_COMBAT(PLAYER_PED_ID())
|
|
OR GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0
|
|
OR IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
OR IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
OR IS_PED_FALLING(PLAYER_PED_ID())
|
|
OR IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
OR IS_PLAYER_CLIMBING(PLAYER_ID())
|
|
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
OR g_bIsOnRampage
|
|
OR IS_TRANSITION_ACTIVE()
|
|
OR IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
OR IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
OR IS_RESULT_SCREEN_DISPLAYING()
|
|
OR Is_Player_Timetable_Scene_In_Progress()
|
|
OR g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
#IF IS_DEBUG_BUILD
|
|
IF IS_PED_IN_COMBAT(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player in combat.")
|
|
ENDIF
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(),0)
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player wanted.")
|
|
ENDIF
|
|
IF IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player in air.")
|
|
ENDIF
|
|
IF IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player ragdoll.")
|
|
ENDIF
|
|
IF IS_PED_FALLING(PLAYER_PED_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player falling.")
|
|
ENDIF
|
|
IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player under arrest.")
|
|
ENDIF
|
|
IF IS_PLAYER_CLIMBING(PLAYER_ID())
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player climbing.")
|
|
ENDIF
|
|
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player switching.")
|
|
ENDIF
|
|
IF g_bIsOnRampage
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player on rampage.")
|
|
ENDIF
|
|
IF IS_TRANSITION_ACTIVE()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player transitioning.")
|
|
ENDIF
|
|
IF IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player displaying script transition.")
|
|
ENDIF
|
|
IF IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player in shop.")
|
|
ENDIF
|
|
IF IS_RESULT_SCREEN_DISPLAYING()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Player displaying results screen.")
|
|
ENDIF
|
|
IF Is_Player_Timetable_Scene_In_Progress()
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Timetable scene in progress.")
|
|
ENDIF
|
|
IF g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
CDEBUG1LN(DEBUG_TRIGGER, "SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME) Something about comms.")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE ST_AMBIENT_FRIEND
|
|
IF IS_PED_IN_COMBAT(PLAYER_PED_ID())
|
|
OR NOT IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
OR NOT IS_PLAYER_READY_FOR_CUTSCENE(PLAYER_ID())
|
|
OR NOT IS_SCREEN_FADED_IN()
|
|
OR IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
OR IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
OR IS_PED_FALLING(PLAYER_PED_ID())
|
|
OR IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
OR IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
OR g_bPlayerIsInTaxi
|
|
OR g_bIsOnRampage
|
|
OR IS_TRANSITION_ACTIVE()
|
|
OR g_isPlayerDrunk
|
|
OR IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
OR IS_RESULT_SCREEN_DISPLAYING()
|
|
OR IS_MISSION_LEADIN_ACTIVE()
|
|
OR Is_Player_Timetable_Scene_In_Progress()
|
|
OR g_savedGlobals.sCommsControlData.eCharacterPriorityLevel[ePlayerPed] = CPR_VERY_HIGH
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE ST_PLANNING_BOARD
|
|
IF IS_PED_IN_COMBAT(PLAYER_PED_ID())
|
|
OR NOT IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
OR NOT IS_PLAYER_READY_FOR_CUTSCENE(PLAYER_ID())
|
|
OR NOT IS_SCREEN_FADED_IN()
|
|
OR IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
OR IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
OR IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
|
|
OR IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
OR IS_PED_FALLING(PLAYER_PED_ID())
|
|
OR IS_PED_SWIMMING(PLAYER_PED_ID())
|
|
OR IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
OR IS_PLAYER_CLIMBING(PLAYER_ID())
|
|
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
OR g_bPlayerIsInTaxi
|
|
OR g_bIsOnRampage
|
|
OR IS_TRANSITION_ACTIVE()
|
|
OR IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
OR IS_RESULT_SCREEN_DISPLAYING()
|
|
OR IS_MISSION_LEADIN_ACTIVE()
|
|
OR IS_PLAYER_IN_ANY_SHOP()
|
|
OR IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
OR Is_Player_Timetable_Scene_In_Progress()
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
|
|
PROC DRAW_MARKER_FOR_TRIGGER_LOCATION(VECTOR paramLocation)
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IS_ENTITY_AT_COORD(PLAYER_PED_ID(), paramLocation, <<0.1, 0.1, LOCATE_SIZE_HEIGHT>>, TRUE)
|
|
ENDIF
|
|
// DRAW_MARKER( MARKER_ARROW,
|
|
// <<paramLocation.X, paramLocation.Y, paramLocation.Z - 0.25>>,
|
|
// <<0,0,0>>,
|
|
// <<0,0,0>>,
|
|
// <<2*LOCATE_SIZE_MISSION_TRIGGER, 2*LOCATE_SIZE_MISSION_TRIGGER, 1.5>>,
|
|
// 255, 0, 0, 255)
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////
|
|
// Playstats mission nanny calls
|
|
|
|
PROC SCRIPT_PLAYSTATS_MISSION_STARTED(STRING pMissionName, INT variant = 0, INT checkpoint = 0)
|
|
// IF COMPARE_STRINGS(pMissionName,g_sNanMissionString) = 0
|
|
// PLAYSTATS_MISSION_OVER(pMissionName, 0,0, TRUE)
|
|
// ENDIF
|
|
PRINTLN("PSTATS: attempting to start ",pMissionName)
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(g_sNanMissionString)
|
|
|
|
//a mission is running, pretend it ended
|
|
PRINTLN("PSTATS: ending ",g_sNanMissionString)
|
|
PLAYSTATS_MISSION_OVER(g_sNanMissionString, 0,0, FALSE,TRUE)
|
|
g_sNanMissionString = ""
|
|
ENDIF
|
|
|
|
g_sNanMissionString = pMissionName
|
|
PLAYSTATS_MISSION_STARTED(pMissionName, variant, checkpoint, IS_REPEAT_PLAY_ACTIVE())
|
|
PRINTLN("PSTATS: starting ",g_sNanMissionString)
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC SCRIPT_PLAYSTATS_MISSION_OVER(STRING pMissionName, INT variant = 0, INT checkpoint = 0, BOOL failed = FALSE, BOOL canceled = FALSE)
|
|
PRINTLN("PSTATS: ending, stored : ",g_sNanMissionString, " passed ", pMissionName)
|
|
IF IS_STRING_NULL_OR_EMPTY(g_sNanMissionString)
|
|
PRINTLN("PSTATS: ending, stored none running")
|
|
EXIT//can't end a mission when none is running
|
|
ENDIF
|
|
|
|
|
|
IF COMPARE_STRINGS(pMissionName,g_sNanMissionString) != 0
|
|
PRINTLN("PSTATS: trying to end a different mission to the one that started: ", pMissionName ," != ", g_sNanMissionString)
|
|
EXIT//can't end a mission you didn't start unless you're starting a new one over it
|
|
ENDIF
|
|
|
|
PRINTLN("PSTATS: calling PLAYSTATS_MISSION_OVER with ", pMissionName)
|
|
PLAYSTATS_MISSION_OVER(pMissionName, variant, checkpoint, failed, canceled, g_bShitskipAccepted)
|
|
g_sNanMissionString = ""
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|