1217 lines
52 KiB
Python
Executable File
1217 lines
52 KiB
Python
Executable File
|
|
//Compile out Title Update changes to header functions.
|
|
//Must be before includes.
|
|
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "BailBond_common.sch"
|
|
USING "email_public.sch"
|
|
USING "Flow_Mission_Data_Public.sch"
|
|
USING "flow_public_game.sch"
|
|
USING "ambience_run_checks.sch"
|
|
USING "flow_help_public.sch"
|
|
USING "achievement_public.sch"
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// MISSION NAME : Bail Bond launcher //
|
|
// AUTHOR : Ahron Mason //
|
|
// DESCRIPTION : Launches bailbond mission scripts and handles their emails //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
CONST_FLOAT DEFAULT_BAIL_BOND_LAUNCH_RANGE 150.0
|
|
CONST_INT MISSION_TRIGGER_TIME_DELAY_HOURS_DROPPED_OFF 4 // delay on passing a mission by dropping bail jumper off before the next is offered - 4 hour B*1215234
|
|
CONST_INT MISSION_TRIGGER_TIME_DELAY_HOURS_KILLED 8 // delay on passing a mission by killing bail jumper before the next is offered - 8 hour
|
|
CONST_INT TIME_DELAY_MISSION_REMINDER_EMAIL_IN_DAYS 10 // delay before Maude sends the player a reminder about the bail bond - B*1270376
|
|
CONST_INT MISSION_TRIGGER_TIME_DELAY_HOURS_FAILED 8 // delay on failing a mission before the mission is reoffered
|
|
CONST_INT MISSION_TRIGGER_TIME_DELAY_MINS_CLEANUP 1 // delay on a mission cleaning up with out the player's knowledge, before it can be reoffered
|
|
CONST_INT LAUNCHER_DELAY_TIME 2000
|
|
CONST_INT LAUNCHER_DELAY_TIME_LONG 4000
|
|
|
|
BAIL_BOND_LAUNCH_DATA sBailBondLaunchData
|
|
BOOL bBailBondHelpMessageQueued = FALSE // used to prime help message
|
|
BOOL bBailBondShardAnimOut
|
|
structPedsForConversation sLauncherDialogue // used to trigger Trevor comment
|
|
TIMEOFDAY currentTimeOfDay // used to setup the time delays for the mission triggering
|
|
THREADID tBailBondMissionThread // used to request and start the mission script
|
|
SCALEFORM_INDEX scaleFormMissionPassed
|
|
BOOL bTriggeredMissionPassedJingle
|
|
BOOL bMissionPassedScreen_DeliveredMessage
|
|
INT iTimerMissionPassedScreenDisplayTime
|
|
STRING sMissionPassedScreen_BailJumpersName = ""
|
|
|
|
ENUM BAILBOND_LAUNCHER_STATE_ENUM
|
|
BBL_STATE_SEND_TRIGGER_EMAIL,
|
|
BBL_STATE_TRIGGER_MISSION,
|
|
BBL_STATE_MISSION_ACTIVE,
|
|
BBL_STATE_MISSION_FAILED,
|
|
BBL_STATE_DELAY_NEXT_MISSION,
|
|
BBL_STATE_SEND_FINAL_EMAIL,
|
|
BBL_STATE_FINAL_BAIL_JUMPER_DELIVERED
|
|
ENDENUM
|
|
|
|
ENUM BAILBOND_LAUNCHER_MISSION_PASSED_SCREEN_STATE_ENUM
|
|
BBL_MPSS_INACTIVE = 0,
|
|
BBL_MPSS_REQUEST_SCALEFORM,
|
|
BBL_MPSS_LOADING_SCALEFORM,
|
|
BBL_MPSS_DISPLAY_SCALEFORM,
|
|
BBL_MPSS_CLEANUP_SCALEFORM
|
|
ENDENUM
|
|
BAILBOND_LAUNCHER_MISSION_PASSED_SCREEN_STATE_ENUM eMissionPassedScreenState
|
|
|
|
/// PURPOSE:
|
|
/// get the specific bail bond's mission completed bit flag
|
|
/// PARAMS:
|
|
/// eBailBondID - the specific bail bond
|
|
/// RETURNS:
|
|
/// INT - the specific bit flag converted from BAILBOND_LAUNCHER_BIT_FLAGS_ENUM
|
|
FUNC INT GET_BAIL_BOND_MISSION_COMPLETED_BIT_FLAG(BAILBOND_ID eBailBondID)
|
|
SWITCH eBailBondID
|
|
CASE BBI_QUARRY
|
|
RETURN ENUM_TO_INT(BBL_BIT_FLAG_COMPLETED_QUARRY)
|
|
CASE BBI_FARM
|
|
RETURN ENUM_TO_INT(BBL_BIT_FLAG_COMPLETED_FARM)
|
|
CASE BBI_MOUNTAIN
|
|
RETURN ENUM_TO_INT(BBL_BIT_FLAG_COMPLETED_MOUNTAIN)
|
|
CASE BBI_HOBO
|
|
RETURN ENUM_TO_INT(BBL_BIT_FLAG_COMPLETED_HOBO)
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("BailBond_Launcher.sc : GET_BAIL_BOND_MISSION_COMPLETED_BIT_FLAG invalid parameter eBailBondID")
|
|
RETURN ENUM_TO_INT(BBL_BIT_FLAG_COMPLETED_QUARRY)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// get the specific bail bond's mission passed type bit flag
|
|
/// PARAMS:
|
|
/// eBailBondID - the specific bail bond
|
|
/// RETURNS:
|
|
/// INT - the specific bit flag converted from BAILBOND_LAUNCHER_BIT_FLAGS_ENUM
|
|
FUNC INT GET_BAIL_BOND_PASSED_TYPE_KILLED_BIT_FLAG(BAILBOND_ID eBailBondID)
|
|
SWITCH eBailBondID
|
|
CASE BBI_QUARRY
|
|
RETURN ENUM_TO_INT(BBL_BIT_FLAG_PASSED_TYPE_KILLED_QUARRY)
|
|
CASE BBI_FARM
|
|
RETURN ENUM_TO_INT(BBL_BIT_FLAG_PASSED_TYPE_KILLED_FARM)
|
|
CASE BBI_MOUNTAIN
|
|
RETURN ENUM_TO_INT(BBL_BIT_FLAG_PASSED_TYPE_KILLED_MOUNTAIN)
|
|
CASE BBI_HOBO
|
|
RETURN ENUM_TO_INT(BBL_BIT_FLAG_PASSED_TYPE_KILLED_HOBO)
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("BailBond_Launcher.sc : GET_BAIL_BOND_PASSED_TYPE_KILLED_BIT_FLAG invalid parameter eBailBondID")
|
|
RETURN ENUM_TO_INT(BBL_BIT_FLAG_PASSED_TYPE_KILLED_QUARRY)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// get the specific bail bond script name ready for requesting the script
|
|
/// PARAMS:
|
|
/// eBailBondID - the specific bail bond
|
|
/// RETURNS:
|
|
/// TEXT_LABEL_23 - the string
|
|
FUNC TEXT_LABEL_23 GET_BAIL_BOND_SCRIPT_NAME(BAILBOND_ID eBailBondID)
|
|
TEXT_LABEL_23 tlReturningName
|
|
SWITCH eBailBondID
|
|
CASE BBI_QUARRY
|
|
tlReturningName = "BailBond1"
|
|
BREAK
|
|
CASE BBI_FARM
|
|
tlReturningName = "BailBond2"
|
|
BREAK
|
|
CASE BBI_MOUNTAIN
|
|
tlReturningName = "BailBond3"
|
|
BREAK
|
|
CASE BBI_HOBO
|
|
tlReturningName = "BailBond4"
|
|
BREAK
|
|
DEFAULT
|
|
SCRIPT_ASSERT("BailBond_Launcher.sc : GET_BAIL_BOND_SCRIPT_NAME invalid parameter eBailBondID")
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN tlReturningName
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// get the bail jumper's name
|
|
/// PARAMS:
|
|
/// eBailBondID - the specific bail bond
|
|
/// RETURNS:
|
|
/// STRING - jumper's name
|
|
FUNC STRING GET_BAIL_JUMPERS_NAME(BAILBOND_ID eBailBondID)
|
|
|
|
SWITCH eBailBondID
|
|
CASE BBI_QUARRY
|
|
RETURN "BBS_BJ1" // ~w~Ralph Ostrowski~s~
|
|
BREAK
|
|
CASE BBI_FARM
|
|
RETURN "BBS_BJ2" // ~w~Larry Tupper~s~
|
|
BREAK
|
|
CASE BBI_MOUNTAIN
|
|
RETURN "BBS_BJ3" // ~w~Glenn Scoville~s~
|
|
BREAK
|
|
CASE BBI_HOBO
|
|
RETURN "BBS_BJ4" // ~w~Curtis Weaver~s~
|
|
BREAK
|
|
DEFAULT
|
|
SCRIPT_ASSERT("BailBond_Launcher : GET_BAIL_JUMPERS_NAME() invalid BAILBOND_ID")
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN ""
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// get the bail bond's launch position, used in the range check and passed into the mission scrip args
|
|
/// PARAMS:
|
|
/// eBailBondID - the specific bail bond
|
|
/// RETURNS:
|
|
/// Vector - The specific bail bond's launch position
|
|
FUNC VECTOR GET_BAIL_BOND_LAUNCH_POSITION(BAILBOND_ID eBailBondID)
|
|
SWITCH eBailBondID
|
|
CASE BBI_QUARRY
|
|
RETURN << 2956.3489, 2795.9553, 39.9217 >>
|
|
CASE BBI_FARM
|
|
RETURN << 162.5572, 2289.1577, 93.1489 >>
|
|
CASE BBI_MOUNTAIN
|
|
RETURN << 515.50, 5494.33, 766.77 >>
|
|
CASE BBI_HOBO
|
|
RETURN << 1427.9722, 6351.1392, 22.9853 >>
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("BailBond_Launcher.sc : GET_BAIL_BOND_LAUNCH_POSITION invalid parameter eBailBondID")
|
|
RETURN << 0.0, 0.0, 0.0 >>
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Get the specific bail bond's launch range
|
|
/// range may need to vary based on setup, currently all set to DEFAULT_BAIL_BOND_LAUNCH_RANGE
|
|
/// PARAMS:
|
|
/// eBailBondID - the specific bail bond
|
|
/// RETURNS:
|
|
/// float for the launch range
|
|
FUNC FLOAT GET_BAIL_BOND_LAUNCH_RANGE(BAILBOND_ID eBailBondID)
|
|
SWITCH eBailBondID
|
|
CASE BBI_QUARRY
|
|
RETURN DEFAULT_BAIL_BOND_LAUNCH_RANGE
|
|
CASE BBI_FARM
|
|
RETURN DEFAULT_BAIL_BOND_LAUNCH_RANGE
|
|
CASE BBI_MOUNTAIN
|
|
RETURN DEFAULT_BAIL_BOND_LAUNCH_RANGE
|
|
CASE BBI_HOBO
|
|
RETURN DEFAULT_BAIL_BOND_LAUNCH_RANGE
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("BailBond_Launcher.sc : GET_BAIL_BOND_LAUNCH_RANGE invalid parameter eBailBondID")
|
|
RETURN DEFAULT_BAIL_BOND_LAUNCH_RANGE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// get the BAILBOND_ID of the current active mission
|
|
/// RETURNS:
|
|
/// the mission's BAILBOND_ID
|
|
FUNC BAILBOND_ID GET_CURRENT_ACTIVE_BAIL_BOND_ID()
|
|
INT i
|
|
// cycle the mission order to find the current bailbond ID
|
|
FOR i = 0 TO (ENUM_TO_INT(MAX_BAILBOND_IDS) - 1)
|
|
IF NOT IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, i)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : GET_CURRENT_ACTIVE_BAIL_BOND_ID mission set from 1st set chain, BAILBOND_ID = ", i)
|
|
RETURN i
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : GET_CURRENT_ACTIVE_BAIL_BOND_ID all missions registed as completed.")
|
|
RETURN MAX_BAILBOND_IDS
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// uses candidate ID system to try to get permission to run
|
|
/// PARAMS:
|
|
/// iMissionCandidateID - the missions candidate ID
|
|
/// RETURNS:
|
|
/// TRUE if the bail bond mission has permission to run, FALSE otherwise
|
|
FUNC BOOL REQUEST_PERMISSION_TO_RUN_BAIL_BOND_MISSION(INT &iMissionCandidateID)
|
|
|
|
m_enumMissionCandidateReturnValue eLaunchRequest = Request_Mission_Launch(iMissionCandidateID, MCTID_MUST_LAUNCH, MISSION_TYPE_RANDOM_CHAR)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF (eLaunchRequest = MCRET_DENIED)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : REQUEST_PERMISSION_TO_RUN_BAIL_BOND_MISSION: ", "MCRET_DENIED: frame = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
IF (eLaunchRequest = MCRET_PROCESSING)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : REQUEST_PERMISSION_TO_RUN_BAIL_BOND_MISSION: ", "MCRET_PROCESSING: frame = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
IF (eLaunchRequest = MCRET_ACCEPTED)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : REQUEST_PERMISSION_TO_RUN_BAIL_BOND_MISSION: ", "MCRET_ACCEPTED: iMissionCandidateID = ", iMissionCandidateID, " frame = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF eLaunchRequest = MCRET_ACCEPTED
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// requests and starts the new script for the specific bail bond mission
|
|
/// PARAMS:
|
|
/// eBailBondID - the specific bailbond
|
|
PROC START_NEW_BAIL_BOND_MISSION_SCRIPT(BAILBOND_ID eBailBondID)
|
|
|
|
TEXT_LABEL_23 tl23_MissionScriptName = GET_BAIL_BOND_SCRIPT_NAME(eBailBondID)
|
|
|
|
REQUEST_SCRIPT(tl23_MissionScriptName)
|
|
WHILE NOT HAS_SCRIPT_LOADED(tl23_MissionScriptName)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : START_NEW_BAIL_BOND_MISSION_SCRIPT : loading requested mission script : ", tl23_MissionScriptName, " ...")
|
|
REQUEST_SCRIPT(tl23_MissionScriptName)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
//Request_Mission_Launch()
|
|
tBailBondMissionThread = START_NEW_SCRIPT_WITH_ARGS(tl23_MissionScriptName, sBailBondLaunchData, SIZE_OF(sBailBondLaunchData), MISSION_STACK_SIZE)
|
|
SET_SCRIPT_AS_NO_LONGER_NEEDED(tl23_MissionScriptName)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// request and starts new script for post bail bond handing of Maude's cleanup
|
|
PROC START_NEW_MAUDE_POST_BAILBOND_SCRIPT()
|
|
|
|
TEXT_LABEL_23 tl23_MaudePostBailBond_ScriptName = "Maude_PostBailBond"
|
|
|
|
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME(tl23_MaudePostBailBond_ScriptName)
|
|
|
|
REQUEST_SCRIPT(tl23_MaudePostBailBond_ScriptName)
|
|
WHILE NOT HAS_SCRIPT_LOADED(tl23_MaudePostBailBond_ScriptName)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : START_NEW_MAUDE_POST_BAILBOND_SCRIPT : loading requested mission script : ", tl23_MaudePostBailBond_ScriptName, " ...")
|
|
REQUEST_SCRIPT(tl23_MaudePostBailBond_ScriptName)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
START_NEW_SCRIPT(tl23_MaudePostBailBond_ScriptName, DEFAULT_STACK_SIZE) // B*1466024 - needed upping from MINI_STACK_SIZE as dialogue was pushing it over the limit
|
|
SET_SCRIPT_AS_NO_LONGER_NEEDED(tl23_MaudePostBailBond_ScriptName)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : START_NEW_MAUDE_POST_BAILBOND_SCRIPT : new script thread started : ", tl23_MaudePostBailBond_ScriptName, " ...")
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// updates values to reset state
|
|
PROC RESET_MISSION_PASSED_SPLASH_SCREEN()
|
|
eMissionPassedScreenState = BBL_MPSS_INACTIVE
|
|
bTriggeredMissionPassedJingle = FALSE
|
|
bMissionPassedScreen_DeliveredMessage = FALSE
|
|
iTimerMissionPassedScreenDisplayTime = 0
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// set the mission passed screen to display
|
|
/// PARAMS:
|
|
/// bDeliveredMessage - TRUE if bail jumper was taken to Maude, FALSE if he was killed
|
|
PROC SET_MISSION_PASSED_SCREEN_TO_DISPLAY(BOOL bDeliveredMessage)
|
|
eMissionPassedScreenState = BBL_MPSS_REQUEST_SCALEFORM
|
|
bMissionPassedScreen_DeliveredMessage = bDeliveredMessage
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// checks to make sure it's safe to display the mission passed splash screen
|
|
/// RETURNS:
|
|
/// TRUE if safe to display
|
|
FUNC BOOL IS_SAFE_TO_DISPLAY_MISSION_PASSED_SCREEN()
|
|
|
|
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : IS_SAFE_TO_DISPLAY_MISSION_PASSED_SCREEN : return FALSE - IS_PLAYER_PLAYING")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF IS_PED_INJURED(PLAYER_PED_ID())
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : IS_SAFE_TO_DISPLAY_MISSION_PASSED_SCREEN : return FALSE - IS_PED_INJURED")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : IS_SAFE_TO_DISPLAY_MISSION_PASSED_SCREEN : return FALSE - IS_PLAYER_BEING_ARRESTED")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF (GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_TREVOR)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : IS_SAFE_TO_DISPLAY_MISSION_PASSED_SCREEN : return FALSE - GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_TREVOR")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF IS_CUTSCENE_PLAYING()
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : IS_SAFE_TO_DISPLAY_MISSION_PASSED_SCREEN : return FALSE - IS_CUTSCENE_PLAYING")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Handles displaying the mission passed message
|
|
/// RETURNS:
|
|
PROC DISPLAY_MISSION_PASSED_SPLASH_SCREEN()
|
|
|
|
// state only gets set when a mission is passed
|
|
IF eMissionPassedScreenState != BBL_MPSS_INACTIVE
|
|
|
|
// cleanup splash screen state if it's not safe to display it
|
|
IF NOT IS_SAFE_TO_DISPLAY_MISSION_PASSED_SCREEN()
|
|
eMissionPassedScreenState = BBL_MPSS_CLEANUP_SCALEFORM
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : DISPLAY_MISSION_PASSED_SPLASH_SCREEN : force cleanup for IS_SAFE_TO_DISPLAY_MISSION_PASSED_SCREEN return FALSE")
|
|
ENDIF
|
|
|
|
SWITCH eMissionPassedScreenState
|
|
|
|
CASE BBL_MPSS_REQUEST_SCALEFORM
|
|
scaleFormMissionPassed = REQUEST_SCALEFORM_MOVIE("MIDSIZED_MESSAGE")
|
|
eMissionPassedScreenState = BBL_MPSS_LOADING_SCALEFORM
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : HAS_MISSION_PASSED_SPLASH_SCREEN_BEEN_DISPLAYED : BBL_MPSS_REQUEST_SCALEFORM > BBL_MPSS_LOADING_SCALEFORM")
|
|
BREAK
|
|
|
|
CASE BBL_MPSS_LOADING_SCALEFORM
|
|
|
|
// set the message to be displayed
|
|
STRING sPassedMessage
|
|
IF bMissionPassedScreen_DeliveredMessage
|
|
sPassedMessage = "BBS_MPD" // ~w~BAIL JUMPER DELIVERED~s~
|
|
ELSE
|
|
sPassedMessage = "BBS_MPK" // ~w~BAIL JUMPER KILLED~s~
|
|
ENDIF
|
|
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(scaleFormMissionPassed)
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(scaleFormMissionPassed, "SHOW_SHARD_MIDSIZED_MESSAGE")
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("BBS_MP") // PASSED
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sPassedMessage) // Bail Jumper Delivered: / Bail Jumper Killed:
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(sMissionPassedScreen_BailJumpersName) // <name>
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
iTimerMissionPassedScreenDisplayTime = GET_GAME_TIMER()
|
|
eMissionPassedScreenState = BBL_MPSS_DISPLAY_SCALEFORM
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : HAS_MISSION_PASSED_SPLASH_SCREEN_BEEN_DISPLAYED : BBL_MPSS_LOADING_SCALEFORM > BBL_MPSS_DISPLAY_SCALEFORM")
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE BBL_MPSS_DISPLAY_SCALEFORM
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(scaleFormMissionPassed)
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(scaleFormMissionPassed, 255, 255, 255, 255)
|
|
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_AFTER_HUD)
|
|
|
|
// trigger mission passed jingle
|
|
IF NOT bTriggeredMissionPassedJingle
|
|
PLAY_SOUND_FRONTEND(-1, "CHECKPOINT_UNDER_THE_BRIDGE", "HUD_MINI_GAME_SOUNDSET", FALSE)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : HAS_MISSION_PASSED_SPLASH_SCREEN_BEEN_DISPLAYED : BBL_MPSS_DISPLAY_SCALEFORM jingle triggered")
|
|
bTriggeredMissionPassedJingle = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (GET_GAME_TIMER() - iTimerMissionPassedScreenDisplayTime) > DEFAULT_GOD_TEXT_TIME - 500
|
|
IF NOT bBailBondShardAnimOut
|
|
// animating the shard out
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(scaleFormMissionPassed, "SHARD_ANIM_OUT")
|
|
// color of the flash
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(HUD_COLOUR_WHITE))
|
|
// length of time of the animation
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.33)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : HAS_MISSION_PASSED_SPLASH_SCREEN_BEEN_DISPLAYED : BBL_MPSS_DISPLAY_SCALEFORM -> SHARD_ANIMOUT")
|
|
bBailBondShardAnimOut = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// check how long the message has been displayed for
|
|
IF (GET_GAME_TIMER() - iTimerMissionPassedScreenDisplayTime) > DEFAULT_GOD_TEXT_TIME
|
|
eMissionPassedScreenState = BBL_MPSS_CLEANUP_SCALEFORM
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : HAS_MISSION_PASSED_SPLASH_SCREEN_BEEN_DISPLAYED : BBL_MPSS_DISPLAY_SCALEFORM -> BBL_MPSS_CLEANUP_SCALEFORM")
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE BBL_MPSS_CLEANUP_SCALEFORM
|
|
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(scaleFormMissionPassed)
|
|
bBailBondShardAnimOut = FALSE
|
|
RESET_MISSION_PASSED_SPLASH_SCREEN()
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// intialise the launcher data for the specific bail bond mission we are trying to launch
|
|
PROC INIT_LAUNCHER_DATA_FOR_CURRENT_BAIL_BOND()
|
|
|
|
tBailBondMissionThread = NULL
|
|
|
|
sBailBondLaunchData.eBailBondID = INT_TO_ENUM(BAILBOND_ID, g_savedGlobals.sBailBondData.iCurrentMission)
|
|
sBailBondLaunchData.vStartPoint = GET_BAIL_BOND_LAUNCH_POSITION(sBailBondLaunchData.eBailBondID)
|
|
sBailBondLaunchData.fStartRange = GET_BAIL_BOND_LAUNCH_RANGE(sBailBondLaunchData.eBailBondID)
|
|
sBailBondLaunchData.iMissionCandidateID = -1
|
|
|
|
// Set if Trevor killed the previous bail jumper
|
|
INT iPreviousMission = g_savedGlobals.sBailBondData.iCurrentMission
|
|
iPreviousMission--
|
|
|
|
IF iPreviousMission >= 0
|
|
AND IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, GET_BAIL_BOND_PASSED_TYPE_KILLED_BIT_FLAG(INT_TO_ENUM(BAILBOND_ID, iPreviousMission)))
|
|
sBailBondLaunchData.bTrevorKilledPreviousBailJumper = TRUE
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : INIT_LAUNCHER_DATA_FOR_CURRENT_BAIL_BOND() set killed previous bail jumper. iPreviousMission was : ", iPreviousMission)
|
|
ELSE
|
|
sBailBondLaunchData.bTrevorKilledPreviousBailJumper = FALSE
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : INIT_LAUNCHER_DATA_FOR_CURRENT_BAIL_BOND() set NOT killed previous bail jumper. iPreviousMission was : ", iPreviousMission)
|
|
ENDIF
|
|
|
|
sBailBondLaunchData.bDoneTrevorReadsEmailDialogue = HAS_DYNAMIC_EMAIL_BEEN_READ_BY_PRIMARY_TARGET(DYNAMIC_THREAD_BAIL_BONDS, GET_CURRENT_EMAIL(sBailBondLaunchData.eBailBondID)) // if the email has already been done then don't play the dialogue
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : INIT_LAUNCHER_DATA_FOR_CURRENT_BAIL_BOND() setup for mission : ", g_savedGlobals.sBailBondData.iCurrentMission)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// intialise the launcher
|
|
PROC INIT_BAIL_BOND_LAUNCHER()
|
|
|
|
// first time in the launcher we need to setup a delay in the initial email from Maude being sent
|
|
IF g_savedGlobals.sBailBondData.iCurrentMission = 0
|
|
IF g_savedGlobals.sBailBondData.iLauncherState = -1 // initialised state
|
|
|
|
// launch the post mission Maude script for completion of RC - Maude 1
|
|
//START_NEW_MAUDE_POST_BAILBOND_SCRIPT()// - now handled by Maude 1 leave area stage
|
|
|
|
// ensure all the bit flags are set to their default values
|
|
// mission completed flags
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_COMPLETED_QUARRY))
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_COMPLETED_FARM))
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_COMPLETED_MOUNTAIN))
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_COMPLETED_HOBO))
|
|
// mission passed flags
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_PASSED_TYPE_KILLED_QUARRY))
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_PASSED_TYPE_KILLED_FARM))
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_PASSED_TYPE_KILLED_MOUNTAIN))
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_PASSED_TYPE_KILLED_HOBO))
|
|
// common launcher flags
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_SENT_MISSION_REMINDER_EMAIL))
|
|
|
|
// setup the time delay before the next bail bond triggers
|
|
currentTimeOfDay = GET_CURRENT_TIMEOFDAY()
|
|
ADD_TIME_TO_TIMEOFDAY(currentTimeOfDay, 0, 0, 1, 0, 0, 0) // B*1215223 - only one hour delay for the first email
|
|
g_savedGlobals.sBailBondData.timeMissionStamp = currentTimeOfDay
|
|
|
|
// set the inital launcher state to delaying mission
|
|
g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_DELAY_NEXT_MISSION)
|
|
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : first time launched. setup delay initial mission email")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// we don't want to return to mission active state if the launcher was terminated, so revert back to trigger mission state
|
|
IF g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_MISSION_ACTIVE)
|
|
g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_TRIGGER_MISSION)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : revert mission active launcher state to trigger mission")
|
|
ENDIF
|
|
|
|
// if the launcher has been re launched in the trigger mission state - clear the bit for having to initial leave the mission area
|
|
IF g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_TRIGGER_MISSION)
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : cleared bit set BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK for launcher restarting in BBL_STATE_TRIGGER_MISSION state")
|
|
ENDIF
|
|
|
|
// make sure the mission passed splash screen is reset
|
|
RESET_MISSION_PASSED_SPLASH_SCREEN()
|
|
|
|
// set the launcher data based off the current mission
|
|
INIT_LAUNCHER_DATA_FOR_CURRENT_BAIL_BOND()
|
|
|
|
// ensure Maude has been added to Trevor's phonebook, in flow this will happen on completion of Maude 1
|
|
ADD_CONTACT_TO_PHONEBOOK(CHAR_MAUDE, TREVOR_BOOK, FALSE)
|
|
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : INIT_BAIL_BOND_LAUNCHER done")
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// check the global save data to see if all the bail bond mission has been completed
|
|
/// RETURNS:
|
|
/// TRUE if all have been completed
|
|
FUNC BOOL HAVE_ALL_BAIL_BOND_MISSION_BEEN_COMPLETED()
|
|
INT i
|
|
FOR i = 0 TO (ENUM_TO_INT(MAX_BAILBOND_IDS) - 1)
|
|
IF NOT IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, i)
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDFOR
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : HAVE_ALL_BAIL_BOND_MISSION_BEEN_COMPLETED - return TRUE - all missions registered as completed")
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// set the order for the bail bond missions to play out
|
|
/// there is an initial chain which play out in a set order
|
|
/// the remaining missions play in a random picked order
|
|
FUNC INT GET_NEXT_BAIL_BOND_MISSION()
|
|
INT i
|
|
|
|
//Set Mission Order - if the player hasn't completed the next mission in the chain yet return the value
|
|
FOR i = 0 TO (ENUM_TO_INT(MAX_BAILBOND_IDS) - 1)
|
|
IF NOT IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, i)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : GET_NEXT_BAIL_BOND_MISSION - Mission from set order. returning : ", i)
|
|
RETURN i
|
|
ENDIF
|
|
ENDFOR
|
|
SCRIPT_ASSERT("BailBond_Launcher.sc : GET_NEXT_BAIL_BOND_MISSION invalid next mission")
|
|
RETURN -1
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// handles displaying the help text for the first time a bail bond email has been read
|
|
PROC HANDLE_ONE_TIME_BAIL_BOND_HELP_MESSAGE(BAILBOND_ID eBailBondID)
|
|
|
|
// B*1353646 - only allow this message prior to first mission being completed
|
|
IF g_savedGlobals.sBailBondData.iCurrentMission = 0
|
|
IF NOT HAS_ONE_TIME_HELP_DISPLAYED(FHM_BAILBOND_HELP_FIRST_MESSAGE)
|
|
IF NOT bBailBondHelpMessageQueued
|
|
IF HAS_DYNAMIC_EMAIL_BEEN_READ_BY_PRIMARY_TARGET(DYNAMIC_THREAD_BAIL_BONDS, GET_CURRENT_EMAIL(eBailBondID))
|
|
ADD_HELP_TO_FLOW_QUEUE("AM_H_BAILBONDS", FHP_MEDIUM, 0, FLOW_HELP_NEVER_EXPIRES, DEFAULT_HELP_TEXT_TIME, BIT_TREVOR)
|
|
// Trevor can do a bail bond job by visiting a suspect's last known location. A larger reward is given if a suspect is captured alive.
|
|
bBailBondHelpMessageQueued = TRUE
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : ome time help message queued")
|
|
ENDIF
|
|
ELSE
|
|
SWITCH GET_FLOW_HELP_MESSAGE_STATUS("AM_H_BAILBONDS")
|
|
CASE FHS_EXPIRED
|
|
bBailBondHelpMessageQueued = FALSE
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : ome time help message expired before displaying")
|
|
BREAK
|
|
CASE FHS_DISPLAYED
|
|
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_BAILBOND_HELP_FIRST_MESSAGE)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : ome time help message displayed")
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// get the current reminder email message enum for the specific bail bond
|
|
/// PARAMS:
|
|
/// eBailBondID - the specific bailbond
|
|
/// RETURNS:
|
|
/// EMAIL_MESSAGE_ENUMS - for the specfic bail bond
|
|
FUNC EMAIL_MESSAGE_ENUMS GET_CURRENT_REMINDER_EMAIL(BAILBOND_ID eBailBondID)
|
|
SWITCH eBailBondID
|
|
CASE BBI_QUARRY
|
|
RETURN EMAIL_BAIL_BONS_REMINDER_1
|
|
CASE BBI_FARM
|
|
RETURN EMAIL_BAIL_BONS_REMINDER_2
|
|
CASE BBI_MOUNTAIN
|
|
RETURN EMAIL_BAIL_BONS_REMINDER_3
|
|
CASE BBI_HOBO
|
|
RETURN EMAIL_BAIL_BONS_REMINDER_4
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("BailBond_Launcher.sc : GET_CURRENT_REMINDER_EMAIL invalid parameter eBailBondID")
|
|
RETURN EMAIL_BAIL_BONS_REMINDER_1
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// get the current email message enum for the specific bail bond
|
|
/// PARAMS:
|
|
/// eBailBondID - the specific bailbond
|
|
/// RETURNS:
|
|
/// EMAIL_MESSAGE_ENUMS - for the specfic bail bond
|
|
FUNC STRING GET_CURRENT_EMAIL_INTRO_STRING(BAILBOND_ID eBailBondID, BOOL bSentPreivousBailJumperKilledEmail)
|
|
SWITCH eBailBondID
|
|
CASE BBI_QUARRY
|
|
IF bSentPreivousBailJumperKilledEmail
|
|
RETURN "BBONDS_DMAIL_K1"
|
|
ELSE
|
|
RETURN "BBONDS_DMAIL_N1"
|
|
ENDIF
|
|
BREAK
|
|
CASE BBI_FARM
|
|
IF bSentPreivousBailJumperKilledEmail
|
|
RETURN "BBONDS_DMAIL_K2"
|
|
ELSE
|
|
RETURN "BBONDS_DMAIL_N2"
|
|
ENDIF
|
|
BREAK
|
|
CASE BBI_MOUNTAIN
|
|
IF bSentPreivousBailJumperKilledEmail
|
|
RETURN "BBONDS_DMAIL_K3"
|
|
ELSE
|
|
RETURN "BBONDS_DMAIL_N3"
|
|
ENDIF
|
|
BREAK
|
|
CASE BBI_HOBO
|
|
IF bSentPreivousBailJumperKilledEmail
|
|
RETURN "BBONDS_DMAIL_K4"
|
|
ELSE
|
|
RETURN "BBONDS_DMAIL_N4"
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("BailBond_Launcher.sc : GET_CURRENT_EMAIL_INTRO_STRING invalid parameter eBailBondID")
|
|
RETURN "NULL"
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// get the current email message enum for the specific bail bond
|
|
/// PARAMS:
|
|
/// eBailBondID - the specific bailbond
|
|
/// RETURNS:
|
|
/// EMAIL_MESSAGE_ENUMS - for the specfic bail bond
|
|
FUNC STRING GET_CURRENT_EMAIL_BULK_STRING(BAILBOND_ID eBailBondID)
|
|
SWITCH eBailBondID
|
|
CASE BBI_QUARRY
|
|
RETURN "BBONDS_DMAIL_C1"
|
|
CASE BBI_FARM
|
|
RETURN "BBONDS_DMAIL_C2"
|
|
CASE BBI_MOUNTAIN
|
|
RETURN "BBONDS_DMAIL_C3"
|
|
CASE BBI_HOBO
|
|
RETURN "BBONDS_DMAIL_C4"
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("BailBond_Launcher.sc : GET_CURRENT_EMAIL_BULK_STRING invalid parameter eBailBondID")
|
|
RETURN "NULL"
|
|
ENDFUNC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// sends the relevant email in the bail bond thread for the current bail bond
|
|
/// RETURNS:
|
|
/// TRUE if FIRE_EMAIL_INTO_DYNAMIC_THREAD returns TRUE
|
|
FUNC BOOL SENT_BAIL_BOND_EMAIL(BAILBOND_ID eBailBondID, BOOL bSentAlternativeEmail)
|
|
|
|
EMAIL_MESSAGE_ENUMS eEmailMessage = GET_CURRENT_EMAIL(eBailBondID)
|
|
STRING sEmailIntro = GET_CURRENT_EMAIL_INTRO_STRING(eBailBondID, bSentAlternativeEmail)
|
|
STRING sEmailBulk = GET_CURRENT_EMAIL_BULK_STRING(eBailBondID)
|
|
|
|
IF FIRE_EMAIL_INTO_DYNAMIC_THREAD(DYNAMIC_THREAD_BAIL_BONDS, eEmailMessage, TRUE)//bool added to denote that you're about to override the content
|
|
OVERRIDE_CONTENT_FOR_DYNAMIC_THREAD(DYNAMIC_THREAD_BAIL_BONDS, sEmailIntro, FALSE)
|
|
ADD_CONTENT_FOR_DYNAMIC_THREAD_SUBSTRING(DYNAMIC_THREAD_BAIL_BONDS, sEmailBulk)
|
|
PUSH_FEEDIFICATION_OF_DYNAMIC_THREAD(DYNAMIC_THREAD_BAIL_BONDS)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : SENT_BAIL_BOND_EMAIL return TRUE : eEmailMessage = ", eEmailMessage,
|
|
" : sEmailIntro = ", sEmailIntro, " : sEmailBulk = ", sEmailBulk)
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// sends the final email in the bail bond thread for the current bail bond
|
|
/// RETURNS:
|
|
/// TRUE if FIRE_EMAIL_INTO_DYNAMIC_THREAD returns TRUE
|
|
FUNC BOOL SENT_FINAL_BAIL_BOND_EMAIL()
|
|
|
|
EMAIL_MESSAGE_ENUMS eEmailMessage = EMAIL_BAIL_BONDS_FINAL
|
|
STRING sEmailIntro = "BBONDS_DMAIL_K5"
|
|
STRING sEmailBulk = "BBONDS_DMAIL_C5"
|
|
|
|
IF FIRE_EMAIL_INTO_DYNAMIC_THREAD(DYNAMIC_THREAD_BAIL_BONDS, eEmailMessage, TRUE)//bool added to denote that you're about to override the content
|
|
OVERRIDE_CONTENT_FOR_DYNAMIC_THREAD(DYNAMIC_THREAD_BAIL_BONDS, sEmailIntro, FALSE)
|
|
ADD_CONTENT_FOR_DYNAMIC_THREAD_SUBSTRING(DYNAMIC_THREAD_BAIL_BONDS, sEmailBulk)
|
|
PUSH_FEEDIFICATION_OF_DYNAMIC_THREAD(DYNAMIC_THREAD_BAIL_BONDS)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : SENT_FINAL_BAIL_BOND_EMAIL return TRUE : eEmailMessage = ", eEmailMessage,
|
|
" : sEmailIntro = ", sEmailIntro, " : sEmailBulk = ", sEmailBulk)
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Check if the player has left Maude's place so she can send the mission trigger email
|
|
/// Maude's position taken from x:\gta5\script\dev\singleplayer\scripts\RandomChar\Maude\initial_scenes_Maude.sch
|
|
/// RETURNS:
|
|
/// TRUE if player is safe distance away from Maude
|
|
FUNC BOOL IS_PLAYER_SAFE_DISTANCE_FROM_MAUDE_TO_TRIGGER_EMAIL()
|
|
IF IS_PLAYER_DEAD(GET_PLAYER_INDEX())
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
VECTOR vPlayerPos = GET_PLAYER_COORDS(GET_PLAYER_INDEX())
|
|
|
|
IF (VDIST2(vPlayerPos, <<2727.58, 4144.19, 43.95>>) >= (50.0 * 50.0)) // 50 metres away
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// triggers the reminder email from Maude if the player hasn't launched the mission within set period of time
|
|
/// PARAMS:
|
|
/// eBailBondID - the current bail bond misison
|
|
PROC HANDLE_MISSION_REMINDER_EMAIL(BAILBOND_ID eBailBondID)
|
|
|
|
IF NOT IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_SENT_MISSION_REMINDER_EMAIL))
|
|
|
|
IF IS_NOW_AFTER_TIMEOFDAY(g_savedGlobals.sBailBondData.timeMissionStamp)
|
|
|
|
IF IS_PLAYER_SAFE_DISTANCE_FROM_MAUDE_TO_TRIGGER_EMAIL()
|
|
|
|
IF PRIVATE_Is_Safe_To_Start_Communication(BIT_TREVOR, CHAR_MAUDE, CPR_MEDIUM)
|
|
|
|
// send reminder email
|
|
EMAIL_MESSAGE_ENUMS eEmailMessage = GET_CURRENT_REMINDER_EMAIL(eBailBondID)
|
|
|
|
IF FIRE_EMAIL_INTO_DYNAMIC_THREAD(DYNAMIC_THREAD_BAIL_BONDS, eEmailMessage, FALSE)
|
|
SET_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_SENT_MISSION_REMINDER_EMAIL))
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : HANDLE_MISSION_REMINDER_EMAIL : reminder sent eEmailMessage = ", eEmailMessage)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Check if the player is within the mission trigger range
|
|
/// RETURNS:
|
|
/// FALSE if we shouldn't proceed, TRUE if the player is in range
|
|
FUNC BOOL IS_PLAYER_IN_BAIL_BOND_RANGE()
|
|
IF IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// **** DEBUG only force the function to return TRUE to ensure the email is sent through if mission has been debug launched
|
|
#IF IS_DEBUG_BUILD
|
|
IF INT_TO_ENUM(BAILBOND_LAUNCHER_STATE_ENUM, g_savedGlobals.sBailBondData.iLauncherState) = BBL_STATE_SEND_TRIGGER_EMAIL
|
|
// this flag gets automatically set by the debug launch menu
|
|
IF IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
VECTOR vPlayerPos = GET_PLAYER_COORDS(GET_PLAYER_INDEX())
|
|
|
|
FLOAT fRange = sBailBondLaunchData.fStartRange
|
|
|
|
// B*1434425 - increase range for player approach in chopper / plane
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_PED_IN_ANY_HELI(PLAYER_PED_ID())
|
|
OR IS_PED_IN_ANY_PLANE(PLAYER_PED_ID())
|
|
IF IS_ENTITY_IN_AIR(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
fRange += 50.0
|
|
IF fRange > 200.0
|
|
fRange = 200.0 // cap the range to max 200.0
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (VDIST2(vPlayerPos, sBailBondLaunchData.vStartPoint) <= (fRange * fRange))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Does any necessary cleanup and terminates the launcher's thread.
|
|
PROC Script_Cleanup()
|
|
// Clear bail bond help text
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("AM_H_BAILBONDS")
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
REMOVE_PED_FOR_DIALOGUE(sLauncherDialogue, 2) // remove Trevor from the dialogue - added with HANDLE_TREVOR_DIALOGUE_FOR_READING_TRIGGER_EMAIL
|
|
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(scaleFormMissionPassed)
|
|
IF sBailBondLaunchData.iMissionCandidateID != NO_CANDIDATE_ID
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : Script_Cleanup() : MISSION_OVER(iMissionCandidateID) : iMissionCandidateID = ", sBailBondLaunchData.iMissionCandidateID, " frame = ", GET_FRAME_COUNT())
|
|
MISSION_OVER(sBailBondLaunchData.iMissionCandidateID)
|
|
ENDIF
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : Terminate thread - Script Cleanup")
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// deals with the results of the bail bond mission
|
|
/// PARAMS:
|
|
/// eBailBondMissionOverState - info on how the bail bond ended
|
|
PROC HANDLE_BAIL_BOND_MISSION_OVER_STATE(BAIL_BOND_MISSION_OVER_STATE eMissionOverState)
|
|
|
|
INT iTimeDelay
|
|
|
|
// What state did the mission end in?
|
|
SWITCH eMissionOverState
|
|
|
|
CASE BBMOS_PASSED_KILLED
|
|
FALLTHRU
|
|
CASE BBMOS_PASSED_DELIVERED
|
|
// set the global save data
|
|
SET_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, GET_BAIL_BOND_MISSION_COMPLETED_BIT_FLAG(sBailBondLaunchData.eBailBondID))
|
|
|
|
// set the mission passed type and reward
|
|
IF eMissionOverState = BBMOS_PASSED_KILLED
|
|
|
|
// set the mission passed screen to display - FALSE for delivered
|
|
SET_MISSION_PASSED_SCREEN_TO_DISPLAY(FALSE)
|
|
|
|
iTimeDelay = MISSION_TRIGGER_TIME_DELAY_HOURS_KILLED
|
|
|
|
SET_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, GET_BAIL_BOND_PASSED_TYPE_KILLED_BIT_FLAG(sBailBondLaunchData.eBailBondID))
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_MISSION_ACTIVE - ", "Pass type set to killed")
|
|
ELSE
|
|
// set the mission passed screen to display - TRUE for delivered
|
|
SET_MISSION_PASSED_SCREEN_TO_DISPLAY(TRUE)
|
|
|
|
iTimeDelay = MISSION_TRIGGER_TIME_DELAY_HOURS_DROPPED_OFF
|
|
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, GET_BAIL_BOND_PASSED_TYPE_KILLED_BIT_FLAG(sBailBondLaunchData.eBailBondID))
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_MISSION_ACTIVE - ", "Pass type set to normal")
|
|
|
|
// credit Trevors bank account straight away if he gave the bail jumper to Maude otherwise delay until next email
|
|
CREDIT_BANK_ACCOUNT(CHAR_TREVOR, BAAC_BAIL_BONDS, 10000)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_MISSION_ACTIVE -> ", "Trevor account credited for normal mission passed")
|
|
|
|
// [AG]: Achievement Unlocked - Wanted: Alive or Alive
|
|
IF g_bShitskipAccepted = FALSE
|
|
AWARD_ACHIEVEMENT(ACH27) // Wanted: Alive or Alive
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//set the mission passed screen to display
|
|
eMissionPassedScreenState = BBL_MPSS_REQUEST_SCALEFORM
|
|
|
|
// set the bail jumper's name to be displayed on the mission passed screen
|
|
sMissionPassedScreen_BailJumpersName = GET_BAIL_JUMPERS_NAME(sBailBondLaunchData.eBailBondID)
|
|
|
|
// Reset replay variables, so the game knows we are no longer on a replay
|
|
Reset_All_Replay_Variables()
|
|
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBMOS_PASSED : MISSION_OVER(iMissionCandidateID) : iMissionCandidateID = ", sBailBondLaunchData.iMissionCandidateID, " frame = ", GET_FRAME_COUNT())
|
|
MISSION_OVER(sBailBondLaunchData.iMissionCandidateID)
|
|
|
|
// Are all bail bonds completed launcher? If so terminate launcher and remove from relaunch list
|
|
IF HAVE_ALL_BAIL_BOND_MISSION_BEEN_COMPLETED()
|
|
|
|
// terminate the launcher if Trevor delivered the final bail jumper to Maude
|
|
// otherwise if the player killed the bail jumper we send one final email from Maude
|
|
IF IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, GET_BAIL_BOND_PASSED_TYPE_KILLED_BIT_FLAG(sBailBondLaunchData.eBailBondID))
|
|
|
|
// setup the time delay before final email from Maude is sent
|
|
currentTimeOfDay = GET_CURRENT_TIMEOFDAY()
|
|
ADD_TIME_TO_TIMEOFDAY(currentTimeOfDay, 0, 0, iTimeDelay, 0, 0, 0)
|
|
g_savedGlobals.sBailBondData.timeMissionStamp = currentTimeOfDay
|
|
|
|
g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_SEND_FINAL_EMAIL)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_MISSION_ACTIVE -> BBMOS_PASSED_KILLED -> ", "BBL_STATE_SEND_FINAL_EMAIL")
|
|
|
|
MAKE_AUTOSAVE_REQUEST()
|
|
ELSE
|
|
g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_FINAL_BAIL_JUMPER_DELIVERED)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_MISSION_ACTIVE -> BBMOS_PASSED_DELIVERED -> ", "BBL_STATE_FINAL_BAIL_JUMPER_DELIVERED")
|
|
|
|
MAKE_AUTOSAVE_REQUEST()
|
|
ENDIF
|
|
ELSE
|
|
// update the new mission
|
|
g_savedGlobals.sBailBondData.iCurrentMission = GET_NEXT_BAIL_BOND_MISSION()
|
|
|
|
// reset bit flag for player needing to be out of the mission area before we start checking his approach
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
|
|
// update the launcher data for the next mission
|
|
INIT_LAUNCHER_DATA_FOR_CURRENT_BAIL_BOND()
|
|
|
|
// setup the time delay before the next bail bond triggers
|
|
currentTimeOfDay = GET_CURRENT_TIMEOFDAY()
|
|
ADD_TIME_TO_TIMEOFDAY(currentTimeOfDay, 0, 0, iTimeDelay, 0, 0, 0)
|
|
g_savedGlobals.sBailBondData.timeMissionStamp = currentTimeOfDay
|
|
|
|
g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_DELAY_NEXT_MISSION)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_MISSION_ACTIVE -> BBMOS_PASSED -> ", "BBL_STATE_DELAY_NEXT_MISSION")
|
|
|
|
MAKE_AUTOSAVE_REQUEST()
|
|
ENDIF
|
|
|
|
// launch the post mission script to handle Maude's cleanup
|
|
IF eMissionOverState != BBMOS_PASSED_KILLED
|
|
START_NEW_MAUDE_POST_BAILBOND_SCRIPT()
|
|
ENDIF
|
|
BREAK
|
|
|
|
|
|
CASE BBMOS_FAILED
|
|
// wait to see if a replay gets accepted or rejected
|
|
IF (g_replay.replayStageID = RS_ACTIVE)
|
|
// accepted replay, relaunch mission
|
|
// use: g_bLaunchMinigameReplay
|
|
START_NEW_BAIL_BOND_MISSION_SCRIPT(sBailBondLaunchData.eBailBondID)
|
|
|
|
ELIF (g_replay.replayStageID = RS_NOT_REQUIRED)
|
|
// rejected replay, clean up candidateID etc.
|
|
|
|
// Reset replay variables, so the game knows we are no longer on a replay
|
|
Reset_All_Replay_Variables()
|
|
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBMOS_FAILED : MISSION_OVER(iMissionCandidateID) : iMissionCandidateID = ", sBailBondLaunchData.iMissionCandidateID, " frame = ", GET_FRAME_COUNT())
|
|
MISSION_OVER(sBailBondLaunchData.iMissionCandidateID)
|
|
|
|
// reset bit flag for player needing to be out of the mission area before we start checking his approach
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
|
|
// setup the time delay before the mission can be retriggered
|
|
currentTimeOfDay = GET_CURRENT_TIMEOFDAY()
|
|
iTimeDelay = MISSION_TRIGGER_TIME_DELAY_HOURS_FAILED
|
|
ADD_TIME_TO_TIMEOFDAY(currentTimeOfDay, 0, 0, iTimeDelay, 0, 0, 0)
|
|
g_savedGlobals.sBailBondData.timeMissionStamp = currentTimeOfDay
|
|
|
|
g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_MISSION_FAILED)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_MISSION_ACTIVE -> BBMOS_FAILED -> ", "BBL_STATE_MISSION_FAILED")
|
|
|
|
Reset_All_Replay_Variables()
|
|
|
|
MAKE_AUTOSAVE_REQUEST()
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE BBMOS_CLEANUP
|
|
|
|
// Reset replay variables, so the game knows we are no longer on a replay
|
|
Reset_All_Replay_Variables()
|
|
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBMOS_CLEANUP : MISSION_OVER(iMissionCandidateID) : iMissionCandidateID = ", sBailBondLaunchData.iMissionCandidateID, " frame = ", GET_FRAME_COUNT())
|
|
MISSION_OVER(sBailBondLaunchData.iMissionCandidateID)
|
|
|
|
// reset bit flag for player needing to be out of the mission area before we start checking his approach
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
|
|
g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_TRIGGER_MISSION)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_MISSION_ACTIVE -> BBMOS_CLEANUP -> ", "BBL_STATE_TRIGGER_MISSION")
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
SCRIPT
|
|
//prevent multiple bail bond launcher threads running (this shouldn't happen if things are setup correctly)
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_OF_THIS_SCRIPT_NAME()) > 1
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : Terminate thread - script instance already running!")
|
|
SCRIPT_ASSERT("BailBond_Launcher.sc : Terminate thread - script instance already running!")
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
|
|
// ensure the script is going to be relaunched on a new sp session (so this comes before HAS_FORCE_CLEANUP_OCCURRED)
|
|
Register_Script_To_Relaunch_List(LAUNCH_BIT_BAIL_BOND_CONTROLLER)
|
|
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP | FORCE_CLEANUP_FLAG_DEBUG_MENU)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : forced cleanup occured")
|
|
Script_Cleanup()
|
|
ENDIF
|
|
|
|
// Hold up whilst updating gameflow via debug menu
|
|
#IF IS_DEBUG_BUILD
|
|
IF g_flowUnsaved.bUpdatingGameflow
|
|
WAIT(0)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
INIT_BAIL_BOND_LAUNCHER()
|
|
|
|
WHILE TRUE
|
|
|
|
DISPLAY_MISSION_PASSED_SPLASH_SCREEN()
|
|
|
|
SWITCH INT_TO_ENUM(BAILBOND_LAUNCHER_STATE_ENUM, g_savedGlobals.sBailBondData.iLauncherState)
|
|
|
|
// Send the email which triggers the mission unlocking
|
|
CASE BBL_STATE_SEND_TRIGGER_EMAIL
|
|
|
|
IF IS_PLAYER_SAFE_DISTANCE_FROM_MAUDE_TO_TRIGGER_EMAIL()
|
|
|
|
IF NOT IS_PLAYER_IN_BAIL_BOND_RANGE() // B*1302953 - Suppress emails from being received when already in bail bond area.
|
|
|
|
IF PRIVATE_Is_Safe_To_Start_Communication(BIT_TREVOR, CHAR_MAUDE, CPR_MEDIUM) // B*1265531 - ensure game state is safe to send email
|
|
|
|
IF SENT_BAIL_BOND_EMAIL(sBailBondLaunchData.eBailBondID, sBailBondLaunchData.bTrevorKilledPreviousBailJumper)
|
|
|
|
// if the last bail jumper was killed, player doesn't get reward until now when he gets the next email from Maude
|
|
IF sBailBondLaunchData.bTrevorKilledPreviousBailJumper
|
|
CREDIT_BANK_ACCOUNT(CHAR_TREVOR, BAAC_BAIL_BONDS, 5000)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_SEND_TRIGGER_EMAIL -> ", "Trevor account credited smaller amount for")
|
|
ENDIF
|
|
|
|
// store current time to send reminder email from Maude if player doesn't trigger mission with in set amount of time
|
|
currentTimeOfDay = GET_CURRENT_TIMEOFDAY()
|
|
ADD_TIME_TO_TIMEOFDAY(currentTimeOfDay, 0, 0, 0, TIME_DELAY_MISSION_REMINDER_EMAIL_IN_DAYS, 0, 0)
|
|
g_savedGlobals.sBailBondData.timeMissionStamp = currentTimeOfDay
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_SENT_MISSION_REMINDER_EMAIL))
|
|
|
|
g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_TRIGGER_MISSION)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_SEND_TRIGGER_EMAIL -> ", "BBL_STATE_TRIGGER_MISSION")
|
|
ENDIF
|
|
ELSE
|
|
//delay rechecking conditions, so this isn't spamming every frame
|
|
WAIT(LAUNCHER_DELAY_TIME)
|
|
ENDIF
|
|
ELSE
|
|
//delay rechecking conditions, so this isn't spamming every frame
|
|
WAIT(LAUNCHER_DELAY_TIME)
|
|
ENDIF
|
|
ELSE
|
|
//delay rechecking conditions, so this isn't spamming every frame
|
|
WAIT(LAUNCHER_DELAY_TIME)
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Awaiting player to trigger the mission
|
|
CASE BBL_STATE_TRIGGER_MISSION
|
|
|
|
// only process everything if the play char is Trevor
|
|
IF (GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR)
|
|
|
|
HANDLE_TREVOR_DIALOGUE_FOR_READING_TRIGGER_EMAIL(sBailBondLaunchData, sLauncherDialogue)
|
|
HANDLE_ONE_TIME_BAIL_BOND_HELP_MESSAGE(sBailBondLaunchData.eBailBondID)
|
|
|
|
// ensure the player isn't already with in range when we begin the launch checks
|
|
IF NOT IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
|
|
IF NOT IS_PLAYER_IN_BAIL_BOND_RANGE()
|
|
SET_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_TRIGGER_MISSION -> ", "Bit set BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK")
|
|
ELSE
|
|
//delay rechecking conditions, so this isn't spamming every frame
|
|
WAIT(LAUNCHER_DELAY_TIME)
|
|
ENDIF
|
|
ELSE
|
|
IF IS_PLAYER_IN_BAIL_BOND_RANGE()
|
|
|
|
IF IS_BAIL_BOND_SAFE_TO_LAUNCH()
|
|
|
|
IF REQUEST_PERMISSION_TO_RUN_BAIL_BOND_MISSION(sBailBondLaunchData.iMissionCandidateID)
|
|
|
|
START_NEW_BAIL_BOND_MISSION_SCRIPT(sBailBondLaunchData.eBailBondID)
|
|
|
|
// Store start snapshot if this isn't a replay
|
|
IF NOT IS_REPLAY_IN_PROGRESS()
|
|
Store_Minigame_Replay_Starting_Snapshot(GET_THIS_SCRIPT_NAME(), TRUE)
|
|
ENDIF
|
|
|
|
g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_MISSION_ACTIVE)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_TRIGGER_MISSION -> ", "BBL_STATE_MISSION_ACTIVE")
|
|
ENDIF
|
|
ELSE
|
|
// check if the initial leave area check needs resetting if player is within range whilst we aren't allowed to launch
|
|
IF IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_TRIGGER_MISSION -> ", "player in range whilst not safe to launch. Bit cleared BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK")
|
|
|
|
// Debug only : ensure Bail Bond will wait in launch state
|
|
#IF IS_DEBUG_BUILD
|
|
IF IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DEBUG_LAUNCHED))
|
|
SET_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_TRIGGER_MISSION -> ", "DEBUG override. Bit reset BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK")
|
|
ENDIF
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
//delay rechecking conditions, so this isn't spamming every frame
|
|
WAIT(LAUNCHER_DELAY_TIME)
|
|
ENDIF
|
|
ELSE
|
|
// triggers the reminder email from Maude if the player hasn't launched the mission within set period of time
|
|
HANDLE_MISSION_REMINDER_EMAIL(sBailBondLaunchData.eBailBondID)
|
|
|
|
//delay rechecking conditions, so this isn't spamming every frame
|
|
WAIT(LAUNCHER_DELAY_TIME)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// check if the initial leave area check needs resetting for player swapping chars
|
|
IF IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
CLEAR_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_TRIGGER_MISSION -> ", "player Char != Trevor. Bit cleared BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK")
|
|
|
|
// Debug only : ensure Bail Bond will wait in launch state
|
|
#IF IS_DEBUG_BUILD
|
|
IF IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DEBUG_LAUNCHED))
|
|
SET_BIT(g_savedGlobals.sBailBondData.iLauncherBitFlags, ENUM_TO_INT(BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK))
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_TRIGGER_MISSION -> ", "DEBUG override. Bit reset BBL_BIT_FLAG_DONE_INITIAL_LEAVE_AREA_CHECK")
|
|
ENDIF
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
//delay rechecking conditions, so this isn't spamming every frame
|
|
WAIT(LAUNCHER_DELAY_TIME_LONG)
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Mission is running, waiting for it to end.
|
|
CASE BBL_STATE_MISSION_ACTIVE
|
|
|
|
IF NOT IS_THREAD_ACTIVE(tBailBondMissionThread)
|
|
HANDLE_BAIL_BOND_MISSION_OVER_STATE(eBailBondMissionOverState)
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Player failed the mission, handle him leaving the area before re-offered
|
|
CASE BBL_STATE_MISSION_FAILED
|
|
|
|
IF IS_NOW_AFTER_TIMEOFDAY(g_savedGlobals.sBailBondData.timeMissionStamp)
|
|
g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_TRIGGER_MISSION)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_MISSION_FAILED -> ", "BBL_STATE_TRIGGER_MISSION")
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Player passed the mission, handle delay till next bail bond is offered
|
|
CASE BBL_STATE_DELAY_NEXT_MISSION
|
|
|
|
// B*1354295 - wait for mission passed splash to finish before doing any further checks / waits
|
|
IF eMissionPassedScreenState = BBL_MPSS_INACTIVE
|
|
|
|
IF IS_NOW_AFTER_TIMEOFDAY(g_savedGlobals.sBailBondData.timeMissionStamp)
|
|
g_savedGlobals.sBailBondData.iLauncherState = ENUM_TO_INT(BBL_STATE_SEND_TRIGGER_EMAIL)
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_DELAY_NEXT_MISSION -> ", "BBL_STATE_SEND_TRIGGER_EMAIL")
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// In the event Trevor kills the final bail jumper instead of taking them to Maude, finish off with an Email from Maude
|
|
CASE BBL_STATE_SEND_FINAL_EMAIL
|
|
|
|
// B*1354295 - wait for mission passed splash to finish before doing any further checks / waits
|
|
IF eMissionPassedScreenState = BBL_MPSS_INACTIVE
|
|
|
|
IF IS_NOW_AFTER_TIMEOFDAY(g_savedGlobals.sBailBondData.timeMissionStamp)
|
|
|
|
IF IS_PLAYER_SAFE_DISTANCE_FROM_MAUDE_TO_TRIGGER_EMAIL()
|
|
|
|
IF PRIVATE_Is_Safe_To_Start_Communication(BIT_TREVOR, CHAR_MAUDE, CPR_MEDIUM) // B*1265531 - ensure game state is safe to send email
|
|
|
|
IF SENT_FINAL_BAIL_BOND_EMAIL()
|
|
|
|
// player doesn't get reward until now when he gets the final email from Maude
|
|
CREDIT_BANK_ACCOUNT(CHAR_TREVOR, BAAC_BAIL_BONDS, 5000)
|
|
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_SEND_FINAL_EMAIL - ", "All bail bonds completed and Maude final email sent - launcher safe to terminate")
|
|
REMOVE_SCRIPT_FROM_RELAUNCH_LIST(LAUNCH_BIT_BAIL_BOND_CONTROLLER)
|
|
|
|
MAKE_AUTOSAVE_REQUEST()
|
|
Script_Cleanup()
|
|
ENDIF
|
|
ELSE
|
|
//delay rechecking conditions, so this isn't spamming every frame
|
|
WAIT(LAUNCHER_DELAY_TIME)
|
|
ENDIF
|
|
ELSE
|
|
//delay rechecking conditions, so this isn't spamming every frame
|
|
WAIT(LAUNCHER_DELAY_TIME)
|
|
ENDIF
|
|
ELSE
|
|
//delay rechecking conditions, so this isn't spamming every frame
|
|
WAIT(LAUNCHER_DELAY_TIME)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// extra launcher state needed to delay terminate script until mission passed message has finishing displaying
|
|
CASE BBL_STATE_FINAL_BAIL_JUMPER_DELIVERED
|
|
|
|
IF eMissionPassedScreenState = BBL_MPSS_INACTIVE
|
|
|
|
CPRINTLN(DEBUG_BAIL_BOND, GET_THIS_SCRIPT_NAME(), " : BBL_STATE_FINAL_BAIL_JUMPER_DELIVERED - ", "All bail bonds completed - launcher safe to terminate")
|
|
REMOVE_SCRIPT_FROM_RELAUNCH_LIST(LAUNCH_BIT_BAIL_BOND_CONTROLLER)
|
|
Script_Cleanup()
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
WAIT(0)
|
|
|
|
ENDWHILE
|
|
|
|
ENDSCRIPT
|