Files
gtav-src/script/dev_ng/singleplayer/scripts/heists/heistDocks/docks_prep1.sc
T
2025-09-29 00:52:08 +02:00

3514 lines
132 KiB
Python
Executable File

// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : get mini sub
// AUTHOR : Craig Vincent
// DESCRIPTION :
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//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 "globals.sch"
USING "commands_audio.sch"
USING "commands_camera.sch"
USING "commands_clock.sch"
USING "commands_debug.sch"
USING "commands_fire.sch"
USING "commands_graphics.sch"
USING "commands_hud.sch"
USING "commands_object.sch"
USING "commands_pad.sch"
USING "commands_ped.sch"
USING "commands_player.sch"
USING "commands_script.sch"
USING "commands_streaming.sch"
USING "commands_task.sch"
USING "commands_vehicle.sch"
USING "commands_interiors.sch"
USING "commands_itemsets.sch"
USING "script_blips.sch"
Using "Locates_public.sch"
Using "select_mission_stage.sch"
USING "model_enums.sch"
USING "script_player.sch"
USING "script_misc.sch"
USING "selector_public.sch"
USING "chase_hint_cam.sch"
using "mission_stat_public.sch"
using "cutscene_public.sch"
USING "replay_public.sch"
USING "taxi_functions.sch"
USING "area_checks.sch"
using "script_ped.sch"
using "RC_helper_functions.sch"
using "asset_management_public.sch"
USING "commands_recording.sch"
#IF IS_DEBUG_BUILD
USING "shared_debug.sch"
USING "script_debug.sch"
#ENDIF
//-----------------------------------------------------------------------------------------------------------
// ENUMS
//----------------------------------------------------------------------------------------------------------
ENUM MPF_MISSION_PED_FLAGS
mpf_mike,
mpf_trev,
mpf_frank,
mpf_floyd,
mpf_dockphone,
mpf_dock2,
mpf_sec1,
mpf_sec2,
MPF_NUM_OF_PEDS
ENDENUM
ENUM MVF_MISSION_VEHICLE_FLAGS
mvf_sub,
mvf_trailer,
mvf_truck,
mvf_bison,
MVF_NUM_OF_VEH
ENDENUM
ENUM MSF_MISSION_STAGE_FLAGS
msf_0_reached_sub,
msf_1_get_to_crane,
MSF_2_SAFETY,
msf_3_passed,
MSF_NUM_OF_STAGES
ENDENUM
ENUM mof_mission_object_flag
mof_dummy1,
mof_dummy2,
mof_button,
mof_phone,
mof_subCover,
mof_subStraps,
mof_craneLD,
mof_cranecab,
mof_cranehook,
MOF_NUM_OF_OBJECTS
endenum
ENUM MFF_MISSION_FAIL_FLAGS
mff_debug_fail,
mff_destroyed_sub,
mff_destroyed_truck,
mff_stuck_truck,
mff_stuck_sub,
mff_lost_sub,
mff_player_dead,
mff_floyd_dead,
mff_floyd_car_dead,
mff_left_area,
mff_left_sub,
mff_left_floyd,
mff_default,
MFF_NUM_OF_FAILS
ENDENUM
Enum STAGE_SWITCHSTATE
STAGESWITCH_IDLE,
STAGESWITCH_REQUESTED,
STAGESWITCH_EXITING,
STAGESWITCH_ENTERING
ENDENUM
enum AI_ENUM
AI_NORM_TASK,
AI_STEALTH_STAGE,
AI_CALM_ALERT,
AI_FULL_ALERT
endenum
enum CALM_ENUMS
CALM_WARN1,
CALM_WARN2,
CALM_CALL_POLICE
endenum
enum ALARM_ENUM
ALARM_NONE,
ALARM_gun,
ALARM_explosion,
ALARM_SUB_SEEN,
ALARM_POLICE,
ALARM_FLEE
endenum
enum eDIALOGUE_SUBSTAGE
DIA_CONDITIONS,
DIA_TRIGGER,
DIA_RUNNING,
DIA_EXIT
endenum
enum eDIALOGUE_STAGE
DHP1_TSUB,
DHP1_TSUB2,
DHP1_APP,
DHP1_WHERE,
DHP1_TRCK,
DHP1_WHSE,
DHP1_PARK
endenum
//-----------------------------------------------------------------------------------------------------------
// STRUCTS
//-----------------------------------------------------------------------------------------------------------
STRUCT VEHICLE_STRUCT
VEHICLE_INDEX id
BLIP_INDEX blip
endstruct
Struct PEDS_STRUCT
PED_INDEX id
BLIP_INDEX blip
AI_BLIP_STRUCT blipstruct
ENDSTRUCT
struct object_struct
OBJECT_INDEX id
BLIP_INDEX blip
ENDSTRUCT
STRUCT ROPE_DATA
ROPE_INDEX rope
FLOAT fLength
INT iNumSegments
FLOAT fLengthPerSegment
BOOL bSnapped = FALSE
ENDSTRUCT
//-----------------------------------------------------------------------------------------------------------
// CONSTANTS
//-----------------------------------------------------------------------------------------------------------
CONST_INT STAGE_ENTRY 0
CONST_INT STAGE_EXIT -1
string AnimDictReaction = "REACTION@MALE_STAND@BIG_VARIATIONS@IDLE_B"
string AnimDictPhone = "cellphone@str"
string AnimDictMission = "missheistdocksprep1ig_1"
VECTOR vWAREHOUSE = <<-343.37607, -2633.53491, 5.00103>>
//-----------------------------------------------------------------------------------------------------------
// VARIABLES
//-----------------------------------------------------------------------------------------------------------
VEHICLE_STRUCT Vehs[MVF_NUM_OF_VEH] //holds all of the vehicles for tis level
PEDS_STRUCT peds[MPF_NUM_OF_PEDS] //holds all of the peds for this level
rope_data ropes[4]
VECTOR subCGOffset
object_struct objects[MOF_NUM_OF_OBJECTS]
LOCATES_HEADER_DATA sLocatesData
structPedsForConversation convo_struct //holds peds in the conversation
BLIP_INDEX blip_objective //blip for mission objective
SEQUENCE_INDEX seq //used to create AI sequence
PTFX_ID ptfx_DrippingFromSub
int syncbutton
INT i
bool bRopesCreated
bool bCraneRopes
bool bactivatePhysics = FALSE
bool bPhoneAdded
bool b_displayGodText
bool bHelpDisplayed = false
bool bDistWarn = false
bool battachprint = false
bool bBoardedShip = false
bool bFailForStuck = false
BOOL b_PlayedPoliceScannerLine = FALSE
rel_group_hash rel_buddy
rel_group_hash rel_dock
INT iHelpTimer = -1
INT iSubHelp
BOOL bWaterSlashedSound
//----------------------AI---------------------
AI_ENUM eAI_stage
CALM_ENUMS eCalm_stage
ALARM_ENUM eALARM
int AITimer
int iStartTasktimer
bool bINIT_workerTasks
bool brun = false
weapon_type wcurrent
int iWaypointPause
int iambspeechTimer
bool bsetwanted = false
#if IS_DEBUG_BUILD
bool bDisplayDebug
int wAIstage
int wCalm_stage
int wAlarm_stage
bool debug_bCurrentlyOnShip
#endif
//------------------------------- CRANE ------------------------------------------
int icranestage = 0
vector vsub = <<327.263, -2968.799, -3>>
float hsub = 358.5
MODEL_NAMES mCraneLD = PROP_DOCK_CRANE_02_LD
vector vcraneLD = <<305.053, -2971.395, 4.990>>
float hcraneLD = 90
MODEL_NAMES mCraneCab = PROP_DOCK_CRANE_02_CAB
vector voffsetcab = <<0,0,19.9070>>
float hcranecab = 0
MODEL_NAMES mCraneHook = PROP_DOCK_CRANE_02_HOOK
vector voffsethook = <<-0.005,-22.139,-15>>
float hcranehook = 0
vector hookheight
vector vTopRope = <<-0.005, -22.139,32.825>>
vector vBottomRope = <<0,0,0.68>>
ROPE_INDEX craneRope
//vector vSubOffset = <<-9.052903, 0.364908, -2.452997>> - <<-9.055566, 4.358799, -1.653515>>
vector vTarpOffset = <<-9.107174, 1.993344, -1.499111>> - <<-9.052903, 0.364908, -2.452997>>
//vector vStrapOffset = <<-9.049294, 2.221005, -1.697000>> - <<-9.052903, 0.364908, -2.452997>>
//------------------------------- CAMS ------------------------------------------
float fNearClip
Camera_index cameraIndex //in game cut scene camera
bool bcueCam
//------------CS---------------
bool bcs_trev = false
bool bcs_floyd = false
bool bcs_truck = false
bool bcs_sub = false
bool bcs_cover = false
bool bcs_trailer = false
//----- stage game variable's -----
int iStageDelay
bool bLoadstage = false
bool bcreateScene = false
//---------audio----------------
bool DI_RAND_CONV
int dialogueTimer
bool bAUDIOStreamLoaded = false
eDIALOGUE_SUBSTAGE dialogue_substage
eDIALOGUE_STAGE dialogue_stage
//============================== streaming ==============================
ASSET_MANAGEMENT_DATA sAssetData
CUTSCENE_PED_VARIATION sCutscenePedVariationRegister[MPF_NUM_OF_PEDS]
//Stage Management and skip stuff
STAGE_SWITCHSTATE stageswitch //current switching status
INT mission_stage //current stage
INT mission_substage //current substage
INT requestedStage //the mission stage requested by a mission_stage switch
INT iStageTimer //timer used for debug
Bool bDoSkip //trigger the skip
INT iSkipToStage //the stage to skip to
//------------------------------WIDGET STUFF--------------------------------------------------
#if IS_DEBUG_BUILD
MissionStageMenuTextStruct zMenuNames[MSF_NUM_OF_STAGES]
WIDGET_GROUP_ID widget_debug
#endif
float WfRopeLength = 3
// ===========================================================================================================
// Termination
// ===========================================================================================================
// -----------------------------------------------------------------------------------------------------------
// Mission Helpers
// -----------------------------------------------------------------------------------------------------------
FUNC BOOL ISENTITYALIVE(ENTITY_INDEX ENTITY)
IF DOES_ENTITY_EXIST(ENTITY)
IF IS_ENTITY_A_VEHICLE(ENTITY)
IF IS_VEHICLE_DRIVEABLE(GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(ENTITY))
RETURN TRUE
ENDIF
ELIF IS_ENTITY_A_PED(ENTITY)
IF NOT IS_PED_INJURED(GET_PED_INDEX_FROM_ENTITY_INDEX(ENTITY))
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC POINT_GAMEPLAY_CAM_AT_COORD(FLOAT TARGETHEADING)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(TARGETHEADING - GET_ENTITY_HEADING(PLAYER_PED_ID()))
ENDPROC
FUNC PED_INDEX TREV()
RETURN PEDS[MPF_TREV].ID
ENDFUNC
PROC DeleteRopes()
IF bRopesCreated
DELETE_ROPE(ropes[0].rope)
DELETE_ROPE(ropes[1].rope)
DELETE_ROPE(ropes[2].rope)
DELETE_ROPE(ropes[3].rope)
bRopesCreated = FALSE
ENDIF
ENDPROC
// purpose:off radar/ hud / player control
proc prep_start_cutscene(bool bplayercontrol,vector varea,bool brender = true,bool binterp = false,bool bclearprj = true,int interptime = default_interp_to_from_game,set_player_control_flags controlflag = 0,bool bphoneaway = true)
display_radar(false)
display_hud(false)
set_player_control(player_id(),bplayercontrol,controlflag)
clear_prints()
clear_help()
render_script_cams(brender,binterp,interptime)
if bclearprj
clear_area_of_projectiles(varea,500)
endif
STOP_FIRE_IN_RANGE(varea,300)
if IS_PED_IN_ANY_VEHICLE(player_ped_id())
SET_VEHICLE_RADIO_ENABLED(GET_VEHICLE_PED_IS_IN(player_ped_id()),false)
endif
if bphoneaway
hang_up_and_put_away_phone()
endif
endproc
// purpose:on radar/ hud / player control
proc prep_stop_cutscene(bool bplayercontrol,bool brender = false,bool binterp = false,int iduration = default_interp_to_from_game, set_player_control_flags controlflag = 0)
display_radar(true)
display_hud(true)
set_player_control(player_id(),bplayercontrol,controlflag)
render_script_cams(brender,binterp,iduration)
if not brender
destroy_all_cams()
endif
if IS_PED_IN_ANY_VEHICLE(player_ped_id())
SET_VEHICLE_RADIO_ENABLED(GET_VEHICLE_PED_IS_IN(player_ped_id()),true)
endif
endproc
proc AUDIO_manage_dialogue()
switch dialogue_stage
case DHP1_TSUB
switch DIALOGUE_SUBSTAGE
case DIA_CONDITIONS
if ISENTITYALIVE(vehs[mvf_sub].id)
if not IS_MESSAGE_BEING_DISPLAYED()
and IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_sub].id)
and GET_PLAYER_WANTED_LEVEL(player_id()) = 0
KILL_FACE_TO_FACE_CONVERSATION()
dialogueTimer = get_game_timer()
DIALOGUE_SUBSTAGE = DIA_TRIGGER
endif
endif
break
case DIA_TRIGGER
if get_game_timer()- dialogueTimer > 6000
and IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_sub].id)
ADD_PED_FOR_DIALOGUE(convo_struct,1,null,"FLOYD")
if CREATE_CONVERSATION(convo_struct,"DHP1AUD","DHP1_TSUB",CONV_PRIORITY_MEDIUM)
DIALOGUE_SUBSTAGE = DIA_RUNNING
endif
endif
break
case DIA_RUNNING
if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_sub].id)
if IS_FACE_TO_FACE_CONVERSATION_PAUSED()
PAUSE_FACE_TO_FACE_CONVERSATION(false)
endif
else
if not IS_FACE_TO_FACE_CONVERSATION_PAUSED()
PAUSE_FACE_TO_FACE_CONVERSATION(true)
endif
endif
else
DIALOGUE_SUBSTAGE = DIA_EXIT
endif
break
case DIA_EXIT
dialogue_stage = DHP1_APP
DIALOGUE_SUBSTAGE = DIA_CONDITIONS
dialoguetimer = get_game_timer()
break
endswitch
break
// case DHP1_TSUB2
// switch DIALOGUE_SUBSTAGE
// case DIA_CONDITIONS
// if not IS_MESSAGE_BEING_DISPLAYED()
// and IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_sub].id)
// KILL_FACE_TO_FACE_CONVERSATION()
// DIALOGUE_SUBSTAGE = DIA_TRIGGER
// endif
// break
// case DIA_TRIGGER
// if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_sub].id)
// if CREATE_CONVERSATION(convo_struct,"DHP1AUD","DHP1_TSUB2",CONV_PRIORITY_MEDIUM)
// DIALOGUE_SUBSTAGE = DIA_RUNNING
// endif
// endif
// break
// case DIA_RUNNING
// if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_sub].id)
// if IS_FACE_TO_FACE_CONVERSATION_PAUSED()
// PAUSE_FACE_TO_FACE_CONVERSATION(false)
// endif
// else
// if not IS_FACE_TO_FACE_CONVERSATION_PAUSED()
// PAUSE_FACE_TO_FACE_CONVERSATION(true)
// endif
// endif
// else
// DIALOGUE_SUBSTAGE = DIA_EXIT
// endif
// break
// case DIA_EXIT
// dialogue_stage = DHP1_APP
// DIALOGUE_SUBSTAGE = DIA_CONDITIONS
// dialoguetimer = get_game_timer()
// break
// endswitch
// //break out of convo conditions
// if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_sub].id)
// and GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(player_ped_id()),<<324.76532, -2974.49463,-1.0>>) < 110
// KILL_ANY_CONVERSATION()
// DIALOGUE_SUBSTAGE = DIA_EXIT
// endif
// break
case DHP1_APP
switch DIALOGUE_SUBSTAGE
case DIA_CONDITIONS
if not IS_MESSAGE_BEING_DISPLAYED()
and IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_sub].id)
and GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(player_ped_id()),<<324.76532, -2974.49463,-1.0>>) < 110
KILL_FACE_TO_FACE_CONVERSATION()
DIALOGUE_SUBSTAGE = DIA_TRIGGER
endif
break
case DIA_TRIGGER
if CREATE_CONVERSATION(convo_struct,"DHP1AUD","DHP1_APP",CONV_PRIORITY_MEDIUM)
DIALOGUE_SUBSTAGE = DIA_RUNNING
endif
break
case DIA_RUNNING
if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
else
DIALOGUE_SUBSTAGE = DIA_EXIT
endif
break
case DIA_EXIT
dialogue_stage = DHP1_WHERE
DIALOGUE_SUBSTAGE = DIA_CONDITIONS
dialoguetimer = get_game_timer()
break
endswitch
break
case DHP1_WHERE
if ISENTITYALIVE(vehs[mvf_truck].id)
and ISENTITYALIVE(peds[mpf_floyd].id)
switch DIALOGUE_SUBSTAGE
case DIA_CONDITIONS
if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_truck].id)
and IS_PED_IN_VEHICLE(peds[mpf_floyd].id,vehs[mvf_truck].id)
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION()
ELSE
DIALOGUE_SUBSTAGE = DIA_TRIGGER
ENDIF
endif
break
case DIA_TRIGGER
play_ped_ambient_speech_with_voice(peds[mpf_floyd].id,"DHP1_AIAA","FLOYD")
DIALOGUE_SUBSTAGE = DIA_RUNNING
break
case DIA_RUNNING
if not IS_AMBIENT_SPEECH_PLAYING(peds[mpf_floyd].id)
DIALOGUE_SUBSTAGE = DIA_EXIT
endif
break
case DIA_EXIT
dialogue_stage = DHP1_TRCK
DIALOGUE_SUBSTAGE = DIA_CONDITIONS
dialoguetimer = get_game_timer()
break
endswitch
endif
break
case DHP1_TRCK
if ISENTITYALIVE(vehs[mvf_truck].id)
and ISENTITYALIVE(peds[mpf_floyd].id)
switch DIALOGUE_SUBSTAGE
case DIA_CONDITIONS
if IS_PED_IN_ANY_VEHICLE(player_ped_id())
and IS_PED_IN_VEHICLE(peds[mpf_floyd].id, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
and IS_ENTITY_ATTACHED_TO_ENTITY(vehs[mvf_trailer].id,GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
and not IS_MESSAGE_BEING_DISPLAYED()
KILL_FACE_TO_FACE_CONVERSATION()
dialoguetimer = get_game_timer()
DIALOGUE_SUBSTAGE = DIA_TRIGGER
endif
break
case DIA_TRIGGER
if get_game_timer() - dialogueTimer > 2000
ADD_PED_FOR_DIALOGUE(convo_struct,1,peds[mpf_floyd].id,"FLOYD")
if CREATE_CONVERSATION(convo_struct,"DHP1AUD","DHP1_TRCK",CONV_PRIORITY_MEDIUM)
DIALOGUE_SUBSTAGE = DIA_RUNNING
endif
endif
break
case DIA_RUNNING
if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if IS_PED_IN_ANY_VEHICLE(player_ped_id())
and IS_PED_IN_VEHICLE(peds[mpf_floyd].id,GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
and IS_ENTITY_ATTACHED_TO_ENTITY(vehs[mvf_trailer].id,GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
if IS_FACE_TO_FACE_CONVERSATION_PAUSED()
PAUSE_FACE_TO_FACE_CONVERSATION(false)
endif
else
if not IS_FACE_TO_FACE_CONVERSATION_PAUSED()
PAUSE_FACE_TO_FACE_CONVERSATION(true)
endif
endif
else
DIALOGUE_SUBSTAGE = DIA_EXIT
endif
break
case DIA_EXIT
dialogue_stage = DHP1_WHSE
DIALOGUE_SUBSTAGE = DIA_CONDITIONS
dialoguetimer = get_game_timer()
break
endswitch
if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(vehs[mvf_sub].id),<<-323.73004, -2613.70166, 5>>) < 60
KILL_ANY_CONVERSATION()
DIALOGUE_SUBSTAGE = DIA_EXIT
endif
endif
break
case DHP1_WHSE
switch DIALOGUE_SUBSTAGE
case DIA_CONDITIONS
if IS_PED_IN_ANY_VEHICLE(player_ped_id())
and IS_PED_IN_VEHICLE(peds[mpf_floyd].id, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
and IS_ENTITY_ATTACHED_TO_ENTITY(vehs[mvf_trailer].id,GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
and not IS_MESSAGE_BEING_DISPLAYED()
//and GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(vehs[mvf_sub].id),<<-343.37607, -2633.53491, 5.00103>>) < 100 // 70
and IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-273.635010,-2558.817871,4.751376>>, <<-405.721771,-2695.898438,14.374950>>, 51.000000)
KILL_FACE_TO_FACE_CONVERSATION()
DIALOGUE_SUBSTAGE = DIA_TRIGGER
endif
break
case DIA_TRIGGER
DI_RAND_CONV = GET_RANDOM_BOOL()
ADD_PED_FOR_DIALOGUE(convo_struct,1,peds[mpf_floyd].id,"FLOYD")
if DI_RAND_CONV
if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_WHSE","DHP1_WHSE_1",CONV_PRIORITY_MEDIUM)
DIALOGUE_SUBSTAGE = DIA_RUNNING
endif
else
if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_WHSE","DHP1_WHSE_2",CONV_PRIORITY_MEDIUM)
DIALOGUE_SUBSTAGE = DIA_RUNNING
endif
endif
break
case DIA_RUNNING
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
DIALOGUE_SUBSTAGE = DIA_EXIT
endif
break
case DIA_EXIT
dialogue_stage = DHP1_PARK
DIALOGUE_SUBSTAGE = DIA_CONDITIONS
dialoguetimer = get_game_timer()
break
endswitch
break
case DHP1_PARK
switch DIALOGUE_SUBSTAGE
case DIA_CONDITIONS
if IS_PED_IN_ANY_VEHICLE(player_ped_id())
and IS_PED_IN_VEHICLE(peds[mpf_floyd].id, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
and IS_ENTITY_ATTACHED_TO_ENTITY(vehs[mvf_trailer].id,GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
and not IS_MESSAGE_BEING_DISPLAYED()
and GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(vehs[mvf_sub].id),<<-323.73004, -2613.70166, 5>>) < 40
KILL_FACE_TO_FACE_CONVERSATION()
DIALOGUE_SUBSTAGE = DIA_TRIGGER
endif
break
case DIA_TRIGGER
DI_RAND_CONV = GET_RANDOM_BOOL()
ADD_PED_FOR_DIALOGUE(convo_struct,1,peds[mpf_floyd].id,"FLOYD")
if DI_RAND_CONV
if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_PARK","DHP1_PARK_1",CONV_PRIORITY_MEDIUM)
DIALOGUE_SUBSTAGE = DIA_RUNNING
endif
else
if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_PARK","DHP1_PARK_2",CONV_PRIORITY_MEDIUM)
DIALOGUE_SUBSTAGE = DIA_RUNNING
endif
endif
break
case DIA_RUNNING
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
DIALOGUE_SUBSTAGE = DIA_EXIT
endif
break
case DIA_EXIT
break
endswitch
break
endswitch
endproc
proc SET_ALL_EXIT_STATES(bool bstate = false)
bcs_trev = bstate
bcs_floyd = bstate
bcs_truck = bstate
bcs_cover = bstate
bcs_sub = bstate
bcs_trailer = bstate
endproc
proc move_hook(bool bdown = true,FLOAT vel = 2.0)
//SPREADER
if bdown
voffsethook.z = voffsethook.z -@ vel
else
voffsethook.z = voffsethook.z +@ vel
endif
SET_ENTITY_COORDS_NO_OFFSET(objects[mof_craneHook].id, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(objects[mof_craneCab].id,voffsethook))
endproc
proc rotate_cab(bool banticw = true,float vel = 4.5)
if banticw
hcranecab = hcranecab +@vel
else
hcranecab = hcranecab -@vel
endif
DETACH_ENTITY(objects[mof_craneCab].id)
ATTACH_ENTITY_TO_ENTITY(objects[mof_craneCab].id,objects[mof_craneLD].id, -1, voffsetcab, <<0.0, 0.0, hcranecab>>)
SET_ENTITY_COORDS_NO_OFFSET(objects[mof_craneHook].id, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(objects[mof_craneCab].id,voffsethook))
endproc
func bool init_crane
//bottom of crane
if not DOES_ENTITY_EXIST(objects[mof_craneLD].id)
objects[mof_craneLD].id = CREATE_OBJECT(mCraneLD,vcraneLD)
SET_ENTITY_COORDS(objects[mof_craneLD].id,vcraneLD)
SET_ENTITY_HEADING(objects[mof_craneLD].id,hcraneLD)
FREEZE_ENTITY_POSITION(objects[mof_craneLD].id,true)
endif
//cabin
if not DOES_ENTITY_EXIST(objects[mof_craneCab].id)
objects[mof_craneCab].id = CREATE_OBJECT(mCraneCab, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(objects[mof_craneLD].id, voffsetcab))
endif
if not IS_ENTITY_ATTACHED_TO_ENTITY(objects[mof_craneCab].id,objects[mof_craneLD].id)
ATTACH_ENTITY_TO_ENTITY(objects[mof_craneCab].id,objects[mof_craneLD].id, -1, voffsetcab, <<0.0, 0.0, hcranecab>>)
endif
//hook
if not DOES_ENTITY_EXIST(objects[mof_craneHook].id)
objects[mof_craneHook].id = CREATE_OBJECT(mCraneHook, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(objects[mof_craneCab].id, voffsethook))
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(objects[mof_craneHook].id, FALSE)
ATTACH_ENTITY_TO_ENTITY(objects[mof_craneHook].id,objects[mof_craneCab].id, -1, voffsethook, <<0.0, 0.0, hcranehook>>)
DETACH_ENTITY(objects[mof_craneHook].id,true,false)
FREEZE_ENTITY_POSITION(objects[mof_craneHook].id,true)
endif
IF NOT bCraneRopes
IF DOES_ENTITY_HAVE_PHYSICS(objects[mof_craneCab].id)
AND DOES_ENTITY_HAVE_PHYSICS(objects[mof_craneHook].id)
println("!!!!!!!!!!!!!ROPE MADE!!!!!!!")
craneRope = ADD_ROPE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(objects[mof_craneCab].id, vtopRope),
<<0.0, 0.0, 0.0>>, 70, PHYSICS_ROPE_THIN, -1, 4, 1.4)
ROPE_SET_SMOOTH_REELIN(craneRope, TRUE )
ROPE_SET_UPDATE_ORDER(craneRope, 2 )
ROPE_DRAW_SHADOW_ENABLED(craneRope, FALSE)
ATTACH_ENTITIES_TO_ROPE(craneRope, objects[mof_craneCab].id, objects[mof_craneHook].id,
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(objects[mof_craneCab].id, vTopRope),
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(objects[mof_craneHook].id, vBottomRope)
, 70 , 0, 0)
bCraneRopes = true
//FREEZE_ENTITY_POSITION(objects[mof_craneHook].id,false)
return true
endif
if not DOES_ENTITY_HAVE_PHYSICS(objects[mof_craneCab].id)
println("!!!!!!!!!!!!!cab no physics!!!!!!!")
endif
if not DOES_ENTITY_HAVE_PHYSICS(objects[mof_craneHook].id)
println("!!!!!!!!!!!!!hook no physics!!!!!!!")
endif
endif
return false
endfunc
INT iGenericTimer
func bool crane_cs()
switch icranestage
case 0
DeleteRopes()
//sub
SET_ENTITY_COORDS(vehs[mvf_sub].id,vsub)
SET_ENTITY_HEADING(vehs[mvf_sub].id,hsub)
FREEZE_ENTITY_POSITION(vehs[mvf_sub].id,true)
ptfx_DrippingFromSub = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_pls_sub_water_drips",vehs[mvf_sub].id,<<0.0,0.0,0.0>>,<<0,0,0>>)
SET_PARTICLE_FX_LOOPED_EVOLUTION(ptfx_DrippingFromSub,"flow",1)
//bug 1114387 EVO
REQUEST_CUTSCENE("dhp1_mcs_1")
if bAUDIOStreamLoaded
PLAY_STREAM_FRONTEND()
endif
// 1985471
IF GET_CLOCK_HOURS() >= 20
OR GET_CLOCK_HOURS() <= 7
REQUEST_IPL( "PO1_08_sub_waterplane" )
ENDIF
Load_Asset_NewLoadScene_Frustum(sAssetData, <<298.9806, -2977.6431, 6.1010>>, <<298.5479, -2964.6653, 7.8860>> - <<298.9806, -2977.6431, 6.1010>>, 3000)
icranestage++
break
case 1
hookheight = GET_ENTITY_COORDS(objects[mof_craneHook].id)
if hookheight.z <= 1.0
FREEZE_ENTITY_POSITION(vehs[mvf_sub].id,false)
SET_CAM_PARAMS(cameraIndex,<<310.0923, -2949.5293, 10.9528>>, <<-20.2654, 2.7992, -141.6393>>,25.6,0)//<<319.0,-2957.5,9.7>>, <<-29.7,-0.0,-148.2>>
SET_CAM_PARAMS(cameraIndex,<<308.3542, -2950.9724, 10.8434>>, <<0.0544, 2.7992, -137.3849>>,25.6,12500)//<<318.9986, -2957.5005, 9.7000>>, <<3.3584, -0.0704, -148.2573>>
ATTACH_ENTITY_TO_ENTITY(Vehs[mvf_sub].id,objects[mof_craneHook].id,-1,<<2.47,0,-1.96>>,<<0,0,-90>>)
icranestage++
else
move_hook(true,2)
endif
break
case 2
hookheight = GET_ENTITY_COORDS(objects[mof_craneHook].id)
if hookheight.z >= 12.5
SET_CAM_PARAMS(cameraIndex, <<356.9992, -2984.9612, 117.2741>>, <<-68.2497, -0.1106, 66.9743>>,20,0)
SET_CAM_PARAMS(cameraIndex,<<361.4758, -2966.8240, 117.2872>>, <<-66.6976, -0.1106, 84.3720>>,20,10000)
fNearClip = GET_CAM_NEAR_CLIP(cameraIndex)
SET_CAM_NEAR_CLIP(cameraIndex,1.8)
icranestage++
else
move_hook(false,1)
endif
break
case 3
if hcranecab >= 40
SET_CAM_PARAMS(cameraIndex,<<289.8129, -2944.0457, 5.5715>>, <<17.0750, 0.1698, -109.4507>> ,38.3,0)//<<290.7,-2943.7,6.7>>, <<5.3,0.1,-109.7>>
SET_CAM_PARAMS(cameraIndex,<<290.8941, -2941.9873, 5.5781>>, <<22.5176, 0.1698, -128.6537>>,38.3,7000)// <<290.5289, -2942.3059, 6.7100>>, <<19.0786, 0.2589, -134.1299>>
SET_CAM_NEAR_CLIP(cameraIndex,fNearClip)
hcranecab = 80
DETACH_ENTITY(objects[mof_craneCab].id)
ATTACH_ENTITY_TO_ENTITY(objects[mof_craneCab].id,objects[mof_craneLD].id, -1, voffsetcab, <<0.0, 0.0, hcranecab>>)
SET_ENTITY_COORDS_NO_OFFSET(objects[mof_craneHook].id, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(objects[mof_craneCab].id,voffsethook))
iGenericTimer = GET_GAME_TIMER()
icranestage++
else
rotate_cab(true,5.5)
endif
break
case 4
if hcranecab >= 108
OVERRIDE_LODSCALE_THIS_FRAME(1.0)
SET_CAM_PARAMS(cameraIndex,<<300.0253, -2973.2529, 5.7369>>, <<10.5662, 0.1117, 4.0913>>,22.7929,0) //<<296.9,-2961.8,7.0>>, <<7.9, 0.0000,-4.8>>
SET_CAM_PARAMS(cameraIndex,<<300.0292, -2973.2939, 6.1746>>, <<5.2629, 0.1117, 4.0913>>,22.7929,8000) //<<296.9,-2961.7,6.5>>, <<7.9, 0.0000,-4.8>>
SET_CAM_SHAKE_AMPLITUDE(cameraIndex, 0.25)
DETACH_ENTITY(objects[mof_craneCab].id)
ATTACH_ENTITY_TO_ENTITY(objects[mof_craneCab].id,objects[mof_craneLD].id, -1, voffsetcab, <<0.0, 0.0, hcranecab>>)
SET_ENTITY_COORDS_NO_OFFSET(objects[mof_craneHook].id, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(objects[mof_craneCab].id,voffsethook))
if DOES_PARTICLE_FX_LOOPED_EXIST(ptfx_DrippingFromSub)
STOP_PARTICLE_FX_LOOPED(ptfx_DrippingFromSub)
endif
icranestage++
else
float percentage
percentage = 1 - CLAMP(TO_FLOAT(GET_GAME_TIMER() - (iGenericTimer + 1500))/3000.0, 0.0, 1.0)
println("flow percentage: ",percentage)
SET_PARTICLE_FX_LOOPED_EVOLUTION(ptfx_DrippingFromSub,"flow",percentage)
rotate_cab(true,5.5)
endif
break
case 5
OVERRIDE_LODSCALE_THIS_FRAME(1.0)
hookheight = GET_ENTITY_COORDS(objects[mof_craneHook].id)
println("hook height: ", hookheight.z)
if hookheight.z <= 11
DETACH_ENTITY(vehs[mvf_sub].id)
icranestage++
else
move_hook(true,1)
endif
break
case 6
if HAS_ENTITY_COLLIDED_WITH_ANYTHING(Vehs[mvf_sub].id)
// FREEZE_ENTITY_POSITION(Vehs[mvf_sub].id,true)
iGenericTimer = GET_GAME_TIMER() + 1000
icranestage++
endif
break
case 7
//if hcranecab <= 90
if GET_GAME_TIMER() > iGenericTimer
FREEZE_ENTITY_POSITION(objects[mof_craneHook].id,true)
icranestage++
else
rotate_cab(false,4)
move_hook(false,1)
endif
break
case 8
Unload_Asset_NewLoadScene(sAssetData)
return true
break
endswitch
IF IS_SCREEN_FADED_IN()
if icranestage > 0
and icranestage < 5
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY()
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME)
endif
ENDIF
ELIF IS_SCREEN_FADED_OUT()
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfx_DrippingFromSub)
STOP_PARTICLE_FX_LOOPED(ptfx_DrippingFromSub)
ENDIF
REMOVE_PARTICLE_FX_IN_RANGE(GET_ENTITY_COORDS(Vehs[mvf_sub].id), 30.0)
iSkipToStage = ENUM_TO_INT(MSF_2_SAFETY)
bDoSkip = true
ENDIF
return false
endfunc
proc Manage_AI()
//----------------------------------------------------------- NORMAL --------------------------------------------------------------------
switch eAI_stage
case AI_NORM_TASK
if ISENTITYALIVE(peds[mpf_dockphone].id)
if bINIT_workerTasks
task_play_anim(peds[mpf_dockphone].id,animDictPhone,"cellphone_call_listen_c",normal_blend_in,normal_blend_out,-1,af_looping | af_secondary| af_upperbody)
if GET_IS_WAYPOINT_RECORDING_LOADED("docksprep1")
TASK_FOLLOW_WAYPOINT_RECORDING(peds[mpf_dockphone].id,"docksprep1",0,EWAYPOINT_START_FROM_CLOSEST_POINT)
else
REQUEST_WAYPOINT_RECORDING("docksprep1")
endif
endif
endif
brun = false
eAI_stage = AI_STEALTH_STAGE
break
//----------------------------------------------------------- CHECKING --------------------------------------------------------------------
case AI_STEALTH_STAGE //check if need to enter alerted stages
if not bINIT_workerTasks
if get_game_timer() - iStartTasktimer > 2000
or GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()),GET_ENTITY_COORDS(peds[mpf_dockphone].id)) < 10
bINIT_workerTasks = true
eAI_stage = AI_NORM_TASK
endif
endif
//--------------------------------------------------------
if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(),<<1240.51318, -2880.35571, 2.10339>>,<<1240.55945, -3057.27075, 17.4>>,29.45)
if ISENTITYALIVE(peds[mpf_dockphone].id)
if CAN_PED_SEE_HATED_PED(peds[mpf_dockphone].id,player_ped_id())
CLEAR_PED_TASKS(peds[mpf_dockphone].id)
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_dockphone].id)
ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_dockphone].id,"CONSTRUCTION2")
eAI_stage = AI_CALM_ALERT
ELIF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()),GET_ENTITY_COORDS(peds[mpf_dockphone].id)) < 12
and GET_PLAYER_CURRENT_STEALTH_NOISE(player_id()) > 8.5
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_dockphone].id)
if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(peds[mpf_dockphone].id,SCRIPT_TASK_TURN_PED_TO_FACE_COORD)
TASK_TURN_PED_TO_FACE_COORD(peds[mpf_dockphone].id,GET_ENTITY_COORDS(PLAYER_PED_ID()),4000)
task_play_anim(peds[mpf_dockphone].id,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE","HOLD_CELLPHONE",SLOW_BLEND_IN,normal_blend_out,-1,af_looping | af_secondary| AF_UPPERBODY)
endif
elif GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()),GET_ENTITY_COORDS(peds[mpf_dockphone].id)) < 12
and IS_PED_IN_ANY_VEHICLE(player_ped_id())
if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(peds[mpf_dockphone].id,SCRIPT_TASK_TURN_PED_TO_FACE_COORD)
TASK_TURN_PED_TO_FACE_COORD(peds[mpf_dockphone].id,GET_ENTITY_COORDS(PLAYER_PED_ID()),4000)
task_play_anim(peds[mpf_dockphone].id,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE","HOLD_CELLPHONE",SLOW_BLEND_IN,normal_blend_out,-1,af_looping | af_secondary| AF_UPPERBODY)
endif
elif IS_FLASH_LIGHT_ON(PLAYER_PED_ID())
and( GET_CLOCK_HOURS() >= 19 or GET_CLOCK_HOURS() < 6)
and GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(),peds[mpf_dockphone].id) < 25
and( IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(),peds[mpf_dockphone].id)
or IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(),peds[mpf_dockphone].id))
if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(peds[mpf_dockphone].id,SCRIPT_TASK_TURN_PED_TO_FACE_COORD)
TASK_TURN_PED_TO_FACE_COORD(peds[mpf_dockphone].id,GET_ENTITY_COORDS(PLAYER_PED_ID()),4000)
task_play_anim(peds[mpf_dockphone].id,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE","HOLD_CELLPHONE",SLOW_BLEND_IN,normal_blend_out,-1,af_looping | af_secondary| AF_UPPERBODY)
endif
ELIF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()),GET_ENTITY_COORDS(peds[mpf_dockphone].id)) < 12
and IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(peds[mpf_dockphone].id,SCRIPT_TASK_TURN_PED_TO_FACE_COORD)
TASK_TURN_PED_TO_FACE_COORD(peds[mpf_dockphone].id,GET_ENTITY_COORDS(PLAYER_PED_ID()),4000)
task_play_anim(peds[mpf_dockphone].id,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE","HOLD_CELLPHONE",SLOW_BLEND_IN,normal_blend_out,-1,af_looping | af_secondary| AF_UPPERBODY)
endif
endif
endif
//see subs missing
if mission_substage > 1
if ISENTITYALIVE(peds[mpf_dockphone].id)
if HAS_ENTITY_CLEAR_LOS_TO_ENTITY_IN_FRONT(peds[mpf_dockphone].id,vehs[mvf_sub].id)
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_dockphone].id)
ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_dockphone].id,"CONSTRUCTION2")
eAI_stage = AI_FULL_ALERT
eALARM = ALARM_SUB_SEEN
CLEAR_PED_TASKS_IMMEDIATELY(peds[mpf_dockphone].id)
TASK_FOLLOW_NAV_MESH_TO_COORD(peds[mpf_dockphone].id,<<1252.55811, -3004.84570, 8.31909>>,
PEDMOVE_run,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,-122.93)
iStartTasktimer = get_game_timer()
bINIT_workerTasks = false
ENDIF
endif
endif
endif
if ISENTITYALIVE(peds[mpf_dockphone].id)
if not IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(peds[mpf_dockphone].id)
if bINIT_workerTasks
if GET_SCRIPT_TASK_STATUS(peds[mpf_dockphone].id,script_TASK_PERFORM_SEQUENCE) != PERFORMING_TASK
and GET_SCRIPT_TASK_STATUS(peds[mpf_dockphone].id,SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) != PERFORMING_TASK
and GET_SCRIPT_TASK_STATUS(peds[mpf_dockphone].id,SCRIPT_TASK_TURN_PED_TO_FACE_COORD) != PERFORMING_TASK
if not IS_ENTITY_PLAYING_ANIM(peds[mpf_dockphone].id,animDictPhone,"cellphone_call_listen_c")
task_play_anim(peds[mpf_dockphone].id,animDictPhone,"cellphone_call_listen_c",normal_blend_in,normal_blend_out,-1,af_looping | af_secondary| af_upperbody)
endif
if IS_ENTITY_AT_COORD(peds[mpf_dockphone].id,<<1228.05591, -3000.42749, 8.44240>>,<<2,2,2>>)
if GET_IS_WAYPOINT_RECORDING_LOADED("docksprep1")
TASK_FOLLOW_WAYPOINT_RECORDING(peds[mpf_dockphone].id,"docksprep1",0)
endif
else
if GET_IS_WAYPOINT_RECORDING_LOADED("docksprep1")
TASK_FOLLOW_WAYPOINT_RECORDING(peds[mpf_dockphone].id,"docksprep1",0,EWAYPOINT_START_FROM_CLOSEST_POINT)
endif
endif
endif
endif
else
if get_game_timer() - iWaypointPause > 10000
if not WAYPOINT_PLAYBACK_GET_IS_PAUSED(peds[mpf_dockphone].id)
if IS_ENTITY_AT_COORD(peds[mpf_dockphone].id,<<1251.62537, -3003.33838, 8.31909>>,<<2,2,2>>)
WAYPOINT_PLAYBACK_PAUSE(peds[mpf_dockphone].id,false)
elif IS_ENTITY_AT_COORD(peds[mpf_dockphone].id,<<1228.84851, -2986.28394, 8.31909>>,<<2,2,2>>)
WAYPOINT_PLAYBACK_PAUSE(peds[mpf_dockphone].id,false)
endif
else
iWaypointPause = get_game_timer()
WAYPOINT_PLAYBACK_RESUME(peds[mpf_dockphone].id,true,-1,3000)
endif
endif
//------------------- ambient dialogue ----------------------
if not is_ambient_speech_playing(peds[mpf_dockphone].id)
and get_Game_timer() - iambspeechTimer > 4000
//play_ped_ambient_speech_with_voice(peds[mpf_dockphone].id,"DHP1_ACAA","CONSTRUCTION2",speech_params_force)
play_ped_ambient_speech_with_voice(peds[mpf_dockphone].id,"Sol1_EFAA","CONSTRUCTION2",speech_params_force)
iambspeechTimer = get_Game_timer()
endif
endif
if HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_SHOT_FIRED)
or HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_SHOT_FIRED_BULLET_IMPACT)
or HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_SHOT_FIRED_WHIZZED_BY)
or HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_SHOCKING_SEEN_WEAPON_THREAT)
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_dockphone].id)
ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_dockphone].id,"CONSTRUCTION2")
eAI_stage = AI_FULL_ALERT
eALARM = ALARM_gun
task_play_anim(peds[mpf_dockphone].id,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE","HOLD_CELLPHONE",INSTANT_BLEND_IN,normal_blend_out,-1,af_looping | af_secondary| AF_UPPERBODY)
TASK_HANDS_UP(peds[mpf_dockphone].id,-1,player_ped_id(), -1, HANDS_UP_STRAIGHT_TO_LOOP)
elif HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_EXPLOSION_HEARD)
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_dockphone].id)
ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_dockphone].id,"CONSTRUCTION2")
eAI_stage = AI_FULL_ALERT
eALARM = ALARM_explosion
CLEAR_PED_TASKS(peds[mpf_dockphone].id)
task_play_anim(peds[mpf_dockphone].id,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE","HOLD_CELLPHONE",INSTANT_BLEND_IN,normal_blend_out,-1,af_looping | af_secondary| AF_UPPERBODY)
TASK_COWER(peds[mpf_dockphone].id,-1)
elif HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(peds[mpf_dockphone].id,PLAYER_PED_ID())
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_dockphone].id)
task_play_anim(peds[mpf_dockphone].id,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE","HOLD_CELLPHONE",INSTANT_BLEND_IN,normal_blend_out,-1,af_looping | af_secondary| AF_UPPERBODY)
ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_dockphone].id,"CONSTRUCTION2")
eAI_stage = AI_FULL_ALERT
eALARM = ALARM_POLICE
endif
endif
break
//----------------------------------------------------------- CALM --------------------------------------------------------------------
case AI_CALM_ALERT
if ISENTITYALIVE(peds[mpf_dockphone].id)
if not IS_PED_HEADTRACKING_PED(peds[mpf_dockphone].id,player_ped_id())
TASK_LOOK_AT_ENTITY(peds[mpf_dockphone].id,PLAYER_PED_ID(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_USE_TORSO)
endif
endif
switch eCalm_stage
case CALM_WARN1
if ISENTITYALIVE(peds[mpf_dockphone].id)
//if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_HEY","DHP1_HEY_1",CONV_PRIORITY_MEDIUM)
if CREATE_CONVERSATION(convo_struct, "SOL1AUD", "SOL1_SEE3", CONV_PRIORITY_MEDIUM)
println("OPEN_1")
OPEN_SEQUENCE_TASK(seq)
TASK_GO_TO_ENTITY(null,player_ped_id(),DEFAULT_TIME_NEVER_WARP,4)
TASK_TURN_PED_TO_FACE_ENTITY(null,player_ped_id(),-1)
println("CLOSE_1")
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_dockphone].id,seq)
CLEAR_SEQUENCE_TASK(seq)
task_play_anim(peds[mpf_dockphone].id,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE","HOLD_CELLPHONE",INSTANT_BLEND_IN,normal_blend_out,-1,af_looping | af_secondary| AF_UPPERBODY)
AITimer = get_game_timer()
eCalm_stage = CALM_WARN2
endif
endif
break
case CALM_WARN2
if GET_GAME_TIMER() - AITimer > 4000//8000
if ISENTITYALIVE(peds[mpf_dockphone].id)
//if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_HEY","DHP1_HEY_2",CONV_PRIORITY_MEDIUM)
if CREATE_CONVERSATION(convo_struct, "SOL1AUD", "SOL1_SEE4", CONV_PRIORITY_MEDIUM)
println("OPEN_2")
OPEN_SEQUENCE_TASK(seq)
TASK_GO_TO_ENTITY(null,player_ped_id(),DEFAULT_TIME_NEVER_WARP,3,PEDMOVEBLENDRATIO_WALK)
TASK_TURN_PED_TO_FACE_ENTITY(null,player_ped_id(),-1)
println("CLOSE_2")
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_dockphone].id,seq)
CLEAR_SEQUENCE_TASK(seq)
task_play_anim(peds[mpf_dockphone].id,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE","HOLD_CELLPHONE",INSTANT_BLEND_IN,normal_blend_out,-1,af_looping | af_secondary| AF_UPPERBODY)
AITimer = get_game_timer()
//convo
eCalm_stage = CALM_CALL_POLICE
endif
endif
endif
break
case CALM_CALL_POLICE
if GET_GAME_TIMER() - AITimer > 8000
if ISENTITYALIVE(peds[mpf_dockphone].id)
//if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_HEY","DHP1_HEY_3",CONV_PRIORITY_MEDIUM)
if CREATE_CONVERSATION(convo_struct, "SOL1AUD", "SOL1_COPS2", CONV_PRIORITY_MEDIUM)
AITimer = get_game_timer()
ealarm = ALARM_POLICE
eAI_stage = AI_FULL_ALERT
endif
endif
endif
break
endswitch
//---------------------------------------- REVERT -------------------------------------------
if not IS_ENTITY_IN_ANGLED_AREA(player_ped_id(),<<1240.51318, -2880.35571, 2.10339>>,<<1240.55945, -3057.27075, 17.4>>,29.45)
or not ISENTITYALIVE(peds[mpf_dockphone].id)
eAI_stage = AI_NORM_TASK
endif
//---------------------------------------- ALERT -------------------------------------------
GET_CURRENT_PED_WEAPON(player_ped_id(),wcurrent)
if ISENTITYALIVE(peds[mpf_dockphone].id)
if HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_SHOT_FIRED)
or HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_SHOT_FIRED_BULLET_IMPACT)
or HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_SHOT_FIRED_WHIZZED_BY)
ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_dockphone].id,"CONSTRUCTION2")
eAI_stage = AI_FULL_ALERT
eALARM = ALARM_gun
TASK_HANDS_UP(peds[mpf_dockphone].id,-1,player_ped_id(), -1, HANDS_UP_STRAIGHT_TO_LOOP)
task_play_anim(peds[mpf_dockphone].id,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE","HOLD_CELLPHONE",INSTANT_BLEND_IN,normal_blend_out,-1,af_looping | af_secondary| AF_UPPERBODY)
elif IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),peds[mpf_dockphone].id)
or IS_PLAYER_TARGETTING_ENTITY(player_id(),peds[mpf_dockphone].id)
if GET_WEAPONTYPE_GROUP(wcurrent) != WEAPONGROUP_MELEE
and wcurrent != WEAPONTYPE_UNARMED
ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_dockphone].id,"CONSTRUCTION2")
eAI_stage = AI_FULL_ALERT
eALARM = ALARM_gun
CLEAR_PED_TASKS_IMMEDIATELY(peds[mpf_dockphone].id)
TASK_HANDS_UP(peds[mpf_dockphone].id,-1,player_ped_id())
endif
elif HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_EXPLOSION_HEARD)
ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_dockphone].id,"CONSTRUCTION2")
eAI_stage = AI_FULL_ALERT
eALARM = ALARM_explosion
TASK_COWER(peds[mpf_dockphone].id,-1)
task_play_anim(peds[mpf_dockphone].id,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE","HOLD_CELLPHONE",INSTANT_BLEND_IN,normal_blend_out,-1,af_looping | af_secondary| AF_UPPERBODY)
elif HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(peds[mpf_dockphone].id,PLAYER_PED_ID())
ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_dockphone].id,"CONSTRUCTION2")
eAI_stage = AI_FULL_ALERT
eALARM = ALARM_POLICE
endif
endif
break
//----------------------------------------------------------- HOSTILE --------------------------------------------------------------------
case AI_FULL_ALERT
switch eALARM
case ALARM_gun
if ISENTITYALIVE(peds[mpf_dockphone].id)
//if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_SSUB","DHP1_SSUB_2",CONV_PRIORITY_MEDIUM)
if CREATE_CONVERSATION(convo_struct, "SOL1AUD", "SOL1_ARM2", CONV_PRIORITY_MEDIUM)
bRun = true
ealarm = ALARM_POLICE
endif
else
bINIT_workerTasks = true
eAI_stage = AI_NORM_TASK
endif
break
case ALARM_explosion
if ISENTITYALIVE(peds[mpf_dockphone].id)
//if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_SSUB","DHP1_SSUB_1",CONV_PRIORITY_MEDIUM)
if CREATE_CONVERSATION(convo_struct, "SOL1AUD", "SOL1_PAN2", CONV_PRIORITY_MEDIUM)
bRun = true
ealarm = ALARM_POLICE
endif
else
bINIT_workerTasks = true
eAI_stage = AI_NORM_TASK
endif
break
case ALARM_SUB_SEEN
if ISENTITYALIVE(peds[mpf_dockphone].id)
if IS_ENTITY_AT_COORD(peds[mpf_dockphone].id,<<1252.55811, -3004.84570, 8.31909>>,<<2,2,2>>)
//if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_HEY","DHP1_HEY_4",CONV_PRIORITY_MEDIUM)
if CREATE_CONVERSATION(convo_struct, "SOL1AUD", "SOL1_SUB1", CONV_PRIORITY_MEDIUM)
bRun = true
ealarm = ALARM_POLICE
endif
endif
if not IS_PED_HEADTRACKING_ENTITY(peds[mpf_dockphone].id, vehs[mvf_sub].id)
TASK_LOOK_AT_ENTITY(peds[mpf_dockphone].id,vehs[mvf_sub].id,-1,SLF_WHILE_NOT_IN_FOV|SLF_WIDEST_PITCH_LIMIT|SLF_WIDEST_YAW_LIMIT)
endif
else
bINIT_workerTasks = true
eAI_stage = AI_NORM_TASK
endif
break
case ALARM_POLICE
if ISENTITYALIVE(peds[mpf_dockphone].id)
if not IS_PED_RAGDOLL(peds[mpf_dockphone].id)
and not IS_PED_GETTING_UP(peds[mpf_dockphone].id)
//if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_SSUB","DHP1_SSUB_3",CONV_PRIORITY_MEDIUM)
if CREATE_CONVERSATION(convo_struct, "SOL1AUD", "SOL1_COPSIN2", CONV_PRIORITY_MEDIUM)
CLEAR_PED_TASKS(peds[mpf_dockphone].id)
println("OPEN_3")
OPEN_SEQUENCE_TASK(seq)
TASK_PLAY_ANIM(null,animDictPhone,"cellphone_call_listen_c",NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_LOOPING | AF_SECONDARY | AF_UPPERBODY)
if bRun
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<1228.77539, -2923.85156, 8.31909>>,PEDMOVE_RUN)
TASK_SMART_FLEE_PED(null,player_ped_id(),200,-1)
else
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<1228.77539, -2923.85156, 8.31909>>,PEDMOVE_WALK)
TASK_WANDER_IN_AREA(null,<<1183.2872, -2947.8699, 4.8986>>,100)
endif
println("CLOSE_3")
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_dockphone].id,seq)
CLEAR_SEQUENCE_TASK(seq)
//convo
AITimer = get_game_timer()
TRIGGER_MUSIC_EVENT("DHP1_ATTACKED")
bsetwanted = false
ealarm = alarm_flee
endif
endif
else
bINIT_workerTasks = true
eAI_stage = AI_NORM_TASK
endif
break
case ALARM_FLEE
if get_game_timer() - aitimer > 8000
if not bsetwanted
if GET_PLAYER_WANTED_LEVEL(player_id()) < 1
SET_PLAYER_WANTED_LEVEL_NO_DROP(player_id(),1)
SET_PLAYER_WANTED_LEVEL_NOW(player_id())
bsetwanted = true
endif
endif
if ISENTITYALIVE(peds[mpf_dockphone].id)
if brun
if not IS_PED_FLEEING(peds[mpf_dockphone].id)
TASK_SMART_FLEE_PED(peds[mpf_dockphone].id,player_ped_id(),200,-1)
endif
else
if GET_SCRIPT_TASK_STATUS(peds[mpf_dockphone].id,SCRIPT_TASK_WANDER_IN_AREA) != PERFORMING_TASK
TASK_WANDER_IN_AREA(peds[mpf_dockphone].id,<<1183.2872, -2947.8699, 4.8986>>,100)
endif
endif
endif
endif
if not brun
GET_CURRENT_PED_WEAPON(player_ped_id(),wcurrent)
if ISENTITYALIVE(peds[mpf_dockphone].id)
if HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_SHOT_FIRED)
or HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_SHOT_FIRED_BULLET_IMPACT)
or HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_SHOT_FIRED_WHIZZED_BY)
ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_dockphone].id,"CONSTRUCTION2")
//if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_SSUB","DHP1_SSUB_2",CONV_PRIORITY_MEDIUM)
if CREATE_CONVERSATION(convo_struct, "SOL1AUD", "SOL1_ARM2", CONV_PRIORITY_MEDIUM)
CLEAR_PED_TASKS(peds[mpf_dockphone].id)
println("OPEN_4")
OPEN_SEQUENCE_TASK(seq)
TASK_HANDS_UP(null,3000,player_ped_id())
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<1228.77539, -2923.85156, 8.31909>>,PEDMOVE_RUN)
TASK_SMART_FLEE_PED(null,player_ped_id(),200,-1)
println("CLOSE_4")
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_dockphone].id,seq)
CLEAR_SEQUENCE_TASK(seq)
AITimer = get_game_timer()
brun = true
endif
elif (IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),peds[mpf_dockphone].id)
or IS_PLAYER_TARGETTING_ENTITY(player_id(),peds[mpf_dockphone].id))
and IS_PED_FACING_PED(peds[mpf_dockphone].id, player_ped_id(), 160)
if GET_WEAPONTYPE_GROUP(wcurrent) != WEAPONGROUP_MELEE
and wcurrent != WEAPONTYPE_UNARMED
ADD_PED_FOR_DIALOGUE(convo_struct,4,peds[mpf_dockphone].id,"CONSTRUCTION2")
//if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_SSUB","DHP1_SSUB_2",CONV_PRIORITY_MEDIUM)
if CREATE_CONVERSATION(convo_struct, "SOL1AUD", "SOL1_SCAR2", CONV_PRIORITY_MEDIUM)
CLEAR_PED_TASKS(peds[mpf_dockphone].id)
println("OPEN_5")
OPEN_SEQUENCE_TASK(seq)
TASK_HANDS_UP(null,3000,player_ped_id())
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<1228.77539, -2923.85156, 8.31909>>,PEDMOVE_RUN)
TASK_SMART_FLEE_PED(null,player_ped_id(),200,-1)
println("CLOSE_5")
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_dockphone].id,seq)
CLEAR_SEQUENCE_TASK(seq)
brun = true
AITimer = get_game_timer()
endif
endif
elif HAS_PED_RECEIVED_EVENT(peds[mpf_dockphone].id, EVENT_EXPLOSION_HEARD)
ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_dockphone].id,"CONSTRUCTION2")
//if PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"DHP1AUD","DHP1_SSUB","DHP1_SSUB_1",CONV_PRIORITY_MEDIUM)
if CREATE_CONVERSATION(convo_struct, "SOL1AUD", "SOL1_PAN2", CONV_PRIORITY_MEDIUM)
CLEAR_PED_TASKS(peds[mpf_dockphone].id)
println("OPEN_6")
OPEN_SEQUENCE_TASK(seq)
TASK_COWER(null,-1)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<1228.77539, -2923.85156, 8.31909>>,PEDMOVE_RUN)
TASK_SMART_FLEE_PED(null,player_ped_id(),200,-1)
println("CLOSE_6")
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_dockphone].id,seq)
CLEAR_SEQUENCE_TASK(seq)
brun = true
endif
elif HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(peds[mpf_dockphone].id,PLAYER_PED_ID())
CLEAR_PED_TASKS(peds[mpf_dockphone].id)
println("OPEN_7")
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<1228.77539, -2923.85156, 8.31909>>,PEDMOVE_RUN)
TASK_SMART_FLEE_PED(null,player_ped_id(),200,-1)
println("CLOSE_7")
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_dockphone].id,seq)
CLEAR_SEQUENCE_TASK(seq)
brun = true
AITimer = get_game_timer()
endif
endif
endif
break
endswitch
break
endswitch
endproc
// -----------------------------------------------------------------------------------------------------------
// Mission Cleanup
// -----------------------------------------------------------------------------------------------------------
proc reset_everything()
// General settings
IF IS_CUTSCENE_ACTIVE()
STOP_CUTSCENE_IMMEDIATELY()
REMOVE_CUTSCENE()
WHILE IS_CUTSCENE_ACTIVE()
WAIT(0)
ENDWHILE
ENDIF
//======================================= Destroy ======================================
DeleteRopes()
if ISENTITYALIVE(vehs[mvf_sub].id)
SET_CGOFFSET( vehs[mvf_sub].id, subCGOffset )
endif
g_sTriggerSceneAssets.flag = false
if bCraneRopes
DELETE_ROPE(craneRope)
bCraneRopes = FALSE
endif
//all peds are deleted
for i = 0 TO Enum_to_int(MPF_NUM_OF_PEDS)-1
CLEANUP_AI_PED_BLIP(peds[i].blipstruct)
if DOES_ENTITY_EXIST(peds[i].id)
AND (NOT IS_PED_INJURED(peds[i].id))
if IS_PED_IN_ANY_VEHICLE(peds[i].id)
SET_PED_COORDS_NO_GANG(peds[i].id,(GET_ENTITY_COORDS(GET_VEHICLE_PED_IS_IN(peds[i].id))+<<0,-2,0>>))
endif
SAFE_DELETE_PED(peds[i].id)
endif
endfor
//all vehicles are deleted
for i = 0 TO Enum_to_int(MVF_NUM_OF_VEH)-1
if DOES_ENTITY_EXIST(vehs[i].id)
EMPTY_VEHICLE(vehs[i].id)
SAFE_DELETE_VEHICLE(vehs[i].id)
endif
endfor
//all objects are deleted
for i = 0 to enum_to_int(MOF_NUM_OF_OBJECTS) -1
if DOES_ENTITY_EXIST(objects[i].id)
SAFE_DELETE_OBJECT(objects[i].id)
endif
endfor
if DOES_PARTICLE_FX_LOOPED_EXIST(ptfx_DrippingFromSub)
STOP_PARTICLE_FX_LOOPED(ptfx_DrippingFromSub)
endif
KILL_ANY_CONVERSATION()
CLEAR_MISSION_LOCATE_STUFF(sLocatesData)
MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_HEIST_DOCKS_PREP_1)
//======================================= Reset ======================================
prep_stop_cutscene(true)
//wanted level
SET_WANTED_LEVEL_MULTIPLIER(1) //Should this reset to 1 not 0? Ross W 1829889 //SET_WANTED_LEVEL_MULTIPLIER(0)
//reset player control
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
//clear AI tasks
if not IS_PED_INJURED(player_ped_id())
CLEAR_PLAYER_WANTED_LEVEL(player_id())
CLEAR_PED_TASKS(player_ped_id())
CLEAR_AREA(GET_ENTITY_COORDS(player_ped_id()),300,true)
endif
CLEAR_AREA(<<1219.1857, -2977.8999, 4.8653>>,300,true)
//bool
iStartTasktimer = get_game_timer()
bPhoneAdded = false
bINIT_workerTasks = false
eAI_stage = AI_NORM_TASK
eCalm_stage = CALM_WARN1
eALARM = ALARM_NONE
DIALOGUE_SUBSTAGE = DIA_CONDITIONS
b_displayGodText = false
RELEASE_SUPPRESSED_RESTRICTED_AREA_WANTED_LEVEL(AC_MILITARY_DOCKS)
IF IS_IPL_ACTIVE( "PO1_08_sub_waterplane" )
Unload_Asset_NewLoadScene(sAssetData)
REMOVE_IPL( "PO1_08_sub_waterplane" )
ENDIF
STOP_STREAM()
ENDPROC
PROC Mission_Cleanup()
PRINTSTRING("...Docks Prep 1 Mission Cleanup")
PRINTNL()
IF IS_CUTSCENE_ACTIVE()
STOP_CUTSCENE_IMMEDIATELY()
REMOVE_CUTSCENE()
ENDIF
//======================================= Destroy ======================================
if IsEntityAlive(player_ped_id())
if ISENTITYALIVE(vehs[mvf_sub].id)
if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_sub].id)
SET_PED_COORDS_NO_GANG(player_ped_id(),(GET_ENTITY_COORDS(vehs[mvf_sub].id)+ <<0,0,2>>))
endif
endif
endif
DeleteRopes()
if ISENTITYALIVE(vehs[mvf_sub].id)
SET_CGOFFSET( vehs[mvf_sub].id, subCGOffset )
endif
g_sTriggerSceneAssets.flag = false
if bCraneRopes
DELETE_ROPE(craneRope)
bCraneRopes = FALSE
endif
if DOES_PARTICLE_FX_LOOPED_EXIST(ptfx_DrippingFromSub)
STOP_PARTICLE_FX_LOOPED(ptfx_DrippingFromSub)
endif
for i = 0 TO Enum_to_int(MPF_NUM_OF_PEDS)-1
if IsEntityAlive(peds[i].id)
CLEANUP_AI_PED_BLIP(peds[i].blipstruct)
if DOES_BLIP_EXIST(peds[i].blip)
REMOVE_BLIP(peds[i].blip)
endif
if IS_PED_IN_GROUP(peds[i].id)
REMOVE_PED_FROM_GROUP(peds[i].id)
endif
if peds[i].id != player_ped_id()
SAFE_RELEASE_PED(peds[i].id)
endif
endif
endfor
//---------------------vehs-----------------------
for i = 0 TO Enum_to_int(MVF_NUM_OF_VEH)-1
if DOES_BLIP_EXIST(vehs[i].blip)
REMOVE_BLIP(vehs[i].blip)
endif
if IsEntityAlive(vehs[i].id)
if i != ENUM_TO_INT(mvf_sub)
SAFE_RELEASE_VEHICLE(vehs[i].id)
endif
endif
endfor
DISABLE_TAXI_HAILING(FALSE) //PD requested by bug #312601
//---------------------objects----------------------
for i = 0 to enum_to_int(MOF_NUM_OF_OBJECTS) -1
if DOES_ENTITY_EXIST(objects[i].id)
if objects[i].id = objects[mof_subCover].id
or objects[i].id = objects[mof_subStraps].id
SAFE_RELEASE_OBJECT(objects[i].id,true)
else
SAFE_DELETE_OBJECT(objects[i].id)
endif
endif
endfor
//==================================== Reset ======================================
//clear AI tasks
if not IS_PED_INJURED(player_ped_id())
//reset player control
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
endif
SET_AUTO_GIVE_SCUBA_GEAR_WHEN_EXIT_VEHICLE(player_id(),true)
CLEAR_WEATHER_TYPE_PERSIST()
SET_WANTED_LEVEL_MULTIPLIER(1) //wanted level for mission reset to normal
SET_MAX_WANTED_LEVEL(5)
DISPLAY_RADAR(true)
DISPLAY_HUD(true)
ALLOW_DIALOGUE_IN_WATER(False)
clear_mission_location_text_and_blips(slocatesdata)
RESET_ALL_BATTLEBUDDY_BEHAVIOUR_REQUESTS()
IF IS_IPL_ACTIVE( "PO1_08_sub_waterplane" )
REMOVE_IPL( "PO1_08_sub_waterplane" )
ENDIF
TERMINATE_THIS_THREAD()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Mission Pass
// -----------------------------------------------------------------------------------------------------------
PROC Mission_Passed()
PRINTSTRING("...Docks Prep 1 Mission Passed")
PRINTNL()
Mission_Flow_Mission_Passed()
Mission_Cleanup()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Mission Fail
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE:
/// Sets where the player will be warped to if they accept the replay
PROC SET_REPLAY_ACCEPTED_WARP_LOCATION()
MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<787.0854, -2973.8716, 5.0585>>, 256.9100 )
ENDPROC
PROC MISSION_FAILED(mff_mission_fail_flags fail_condition = mff_default)
TRIGGER_MUSIC_EVENT("DHP1_FAIL")
string strreason = ""
//show fail message
switch fail_condition
case mff_debug_fail
strreason = ""
break
case mff_destroyed_sub
strreason = "dkp1_fdes1"
break
case mff_stuck_sub
strreason = "dkp1_fstuck1"
break
case mff_lost_sub
strreason = "DKP1_FLOST1"
BREAK
case mff_destroyed_truck
strreason = "dkp1_fdes2"
break
case mff_stuck_truck
strreason = "dkp1_fstuck2"
break
case mff_floyd_dead
strreason = "dkp1_ffloyd"
break
case mff_floyd_car_dead
strreason = "DKP1_FFCAR"
break
case mff_left_area
strreason = "dkp1_FABD"
break
case mff_left_sub
strreason = "DKP1_FABS"
break
case mff_left_floyd
strreason = "DKP1_FABF"
break
case mff_player_dead
strreason = "cmn_tdied"
break
default
strreason = ""
break
endswitch
mission_flow_mission_failed_with_reason(strreason)
while not get_mission_flow_safe_to_cleanup()
wait(0)
endwhile
// check if we need to respawn the player in a different position,
// if replay accepted, warp to short distance away from the submarine area
// (far enough away so that the mission gets blipped)
IF HAS_PLAYER_ACCEPTED_REPLAY()
SET_REPLAY_ACCEPTED_WARP_LOCATION()
ELSE
// if he rejects the replay only warp him to just outside sub area if he failed inside it
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1298.369141,-3062.099609,-71.226906>>, <<790.912537,-3068.998047,63.914192>>, 250.000000, FALSE, FALSE)
// failed in submarine area, warp outside
// (this is currently the same as the replay accepted warp pos- left it in in case you want to change it)
MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<787.0854, -2973.8716, 5.0585>>, 256.9100 )
ENDIF
ENDIF
mission_cleanup() // must only take 1 frame and terminate the thread
terminate_this_thread()
endproc
// -----------------------------------------------------------------------------------------------------------
// MISSION STAGE MANAGEMENT
// -----------------------------------------------------------------------------------------------------------
PROC MISSION_STAGE_MANAGEMENT()
SWITCH STAGESWITCH
CASE STAGESWITCH_REQUESTED
PRINTLN("[STAGEMANAGEMENT] MISSION_STAGE SWITCH REQUESTED FROM MISSION_STAGE:", MISSION_STAGE, "TO MISSION_STAGE", REQUESTEDSTAGE)
STAGESWITCH = STAGESWITCH_EXITING
MISSION_SUBSTAGE = STAGE_EXIT
BREAK
CASE STAGESWITCH_EXITING
PRINTLN("[STAGEMANAGEMENT] EXITING MISSION_STAGE: ", MISSION_STAGE)
STAGESWITCH = STAGESWITCH_ENTERING
MISSION_SUBSTAGE = STAGE_ENTRY
MISSION_STAGE = REQUESTEDSTAGE
BREAK
CASE STAGESWITCH_ENTERING
PRINTLN("[STAGEMANAGEMENT] ENTERED MISSION_STAGE: ", MISSION_STAGE)
REQUESTEDSTAGE = -1
STAGESWITCH = STAGESWITCH_IDLE
BREAK
CASE STAGESWITCH_IDLE
IF (GET_GAME_TIMER() - ISTAGETIMER) > 2500
PRINTLN("[STAGEMANAGEMENT] MISSION_STAGE: ", MISSION_STAGE, " MISSION_SUBSTAGE: ", MISSION_SUBSTAGE)
ISTAGETIMER = GET_GAME_TIMER()
ENDIF
BREAK
ENDSWITCH
ENDPROC
FUNC BOOL MISSION_SET_STAGE(MSF_MISSION_STAGE_FLAGS NEWSTAGE)
IF STAGESWITCH = STAGESWITCH_IDLE
REQUESTEDSTAGE = ENUM_TO_INT(NEWSTAGE)
STAGESWITCH = STAGESWITCH_REQUESTED
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDFUNC
PROC LOAD_ASSET_STAGE(MSF_MISSION_STAGE_FLAGS LOADSTAGE)
SWITCH LOADSTAGE
CASE MSF_0_REACHED_SUB
LOAD_ASSET_MODEL(sAssetData,SUBMERSIBLE)
LOAD_ASSET_MODEL(sAssetData,PROP_LD_TEST_01)
LOAD_ASSET_MODEL(sAssetData,prop_sub_release)
LOAD_ASSET_MODEL(sAssetData,S_M_M_DOCKWORK_01)
Load_Asset_AnimDict(sAssetData,AnimDictPhone)
Load_Asset_AnimDict(sAssetData,AnimDictMission)
Load_Asset_Waypoint(sAssetData,"docksprep1")
LOAD_ASSET_MODEL(sAssetData,P_AMB_PHONE_01)
Load_Asset_Ropes(sAssetData)
Load_Asset_Audiobank(sAssetData, "PORT_OF_LS_PREP_1")
BREAK
CASE MSF_1_GET_TO_CRANE
LOAD_ASSET_MODEL(sAssetData,SUBMERSIBLE)
LOAD_ASSET_MODEL(sAssetData,PACKER)
LOAD_ASSET_MODEL(sAssetData,ARMYTRAILER)
LOAD_ASSET_MODEL(sAssetData,mCraneLD)
LOAD_ASSET_MODEL(sAssetData,mCraneCab)
LOAD_ASSET_MODEL(sAssetData,mCraneHook)
Load_Asset_PTFX(sAssetData)
Load_Asset_Ropes(sAssetData)
BREAK
CASE MSF_2_SAFETY
CASE msf_3_passed
LOAD_ASSET_MODEL(sAssetData,SUBMERSIBLE)
LOAD_ASSET_MODEL(sAssetData,PACKER)
LOAD_ASSET_MODEL(sAssetData,ARMYTRAILER)
LOAD_ASSET_MODEL(sAssetData,PROP_SUB_COVER_01)
LOAD_ASSET_MODEL(sAssetData,PROP_TARP_STRAP)
BREAK
ENDSWITCH
ENDPROC
PROC GET_SKIP_STAGE_COORD_AND_HEADING(MSF_MISSION_STAGE_FLAGS eStage, VECTOR &vCoord, FLOAT &fHeading)
SWITCH eStage
CASE msf_0_reached_sub vCoord = <<1219.1857, -2977.8999, 4.8653>> fHeading =178.1887 BREAK
CASE msf_1_get_to_crane vCoord = <<1272.3978, -2982.0720, -3.2414>> fHeading = 201.5542 BREAK
CASE MSF_2_SAFETY vCoord = <<297.5948, -2950.3545, 5.0008>> fHeading =359.1976 BREAK
CASE msf_3_passed vCoord = <<-317.3936, -2610.7983, 5.0003>> fHeading =328.0017 BREAK
ENDSWITCH
ENDPROC
proc su_general()
if ISENTITYALIVE(player_ped_id())
ADD_PED_FOR_DIALOGUE(convo_struct,0,player_ped_id(),"TREVOR")
endif
if ISENTITYALIVE(peds[mpf_floyd].id)
ADD_PED_FOR_DIALOGUE(convo_struct,1,peds[mpf_floyd].id,"FLOYD")
endif
endproc
proc su_msf_0_reached_sub()
if not does_entity_exist(vehs[mvf_sub].id)
vehs[mvf_sub].id = create_vehicle(submersible,<<1260.80225, -3006.41699, 18.3289>>, 178.9076)
SET_VEHICLE_AS_RESTRICTED(VEHS[MVF_SUB].ID,0)
freeze_entity_position(vehs[mvf_sub].id,true)
set_entity_load_collision_flag(vehs[mvf_sub].id,true)
set_entity_should_freeze_waiting_on_collision(vehs[mvf_sub].id,false)
SET_VEHICLE_RADIO_ENABLED(vehs[mvf_sub].id, TRUE)
endif
//peds
if not does_entity_exist(peds[mpf_dockphone].id)
peds[mpf_dockphone].id = create_ped(pedtype_mission,s_m_m_dockwork_01,<<1229.32166, -3002.87915, 8.31861>>,270)
task_play_anim(peds[mpf_dockphone].id,animDictPhone,"cellphone_call_listen_c",normal_blend_in,normal_blend_out,-1,af_looping | af_secondary| af_upperbody)
set_ped_flee_attributes(peds[mpf_dockphone].id,fa_never_flee,false)
set_ped_combat_attributes(peds[mpf_dockphone].id,ca_always_flee,true)
set_ped_relationship_group_hash(peds[mpf_dockphone].id,rel_dock)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_dockphone].id,true)
SET_PED_VISUAL_FIELD_CENTER_ANGLE(peds[mpf_dockphone].id,45)
SET_PED_VISUAL_FIELD_MAX_ANGLE(peds[mpf_dockphone].id,50)
SET_PED_VISUAL_FIELD_MIN_ANGLE(peds[mpf_dockphone].id,-50)
STOP_PED_SPEAKING(peds[mpf_dockphone].id, TRUE)
endif
//objects
if not does_entity_exist(objects[mof_dummy1].id)
objects[mof_dummy1].id = create_object(prop_ld_test_01,<<1260.69153, -3008.28589, 23.73365>>)
freeze_entity_position(objects[mof_dummy1].id,true)
endif
if not does_entity_exist(objects[mof_dummy2].id)
objects[mof_dummy2].id = create_object(prop_ld_test_01,<<1260.75208, -3004.99414, 22.68315>>)
freeze_entity_position(objects[mof_dummy2].id,true)
endif
if not does_entity_exist(objects[mof_button].id)
objects[mof_button].id = create_object(prop_sub_release,<<1249.10547, -3007.96777, 9.68718>>)
set_entity_rotation(objects[mof_button].id,<<0,0,90>>)
freeze_entity_position(objects[mof_button].id,true)
endif
if not does_entity_exist(objects[mof_phone].id)
objects[mof_phone].id = create_object(p_amb_phone_01,<<1229.32166, -3002.87915, 8.31861>>)
endif
bropescreated = false
REQUEST_WAYPOINT_RECORDING("docksprep1")
while not GET_IS_WAYPOINT_RECORDING_LOADED("docksprep1")
wait(0)
endwhile
clear_Area(get_entity_coords(player_ped_id()),100,true)
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP()
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
endif
iStartTasktimer = get_game_timer()
dialogue_stage = DHP1_TSUB
DIALOGUE_SUBSTAGE = DIA_CONDITIONS
endproc
proc su_msf_1_get_to_crane()
if not does_entity_exist(vehs[mvf_sub].id)
vehs[mvf_sub].id = create_vehicle(submersible,<<1272.3978, -2982.0720, -3.2414>>, 201.5542)
SET_VEHICLE_RADIO_ENABLED(vehs[mvf_sub].id, TRUE)
endif
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP(vehs[mvf_sub].id)
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
set_ped_into_vehicle(player_ped_id(),vehs[mvf_sub].id)
endif
clear_Area(get_entity_coords(player_ped_id()),100,true)
dialogue_stage = DHP1_TSUB
DIALOGUE_SUBSTAGE = DIA_CONDITIONS
endproc
proc su_msf_2_safety()
//vehs
if not isentityalive(vehs[mvf_sub].id)
vehs[mvf_sub].id = create_vehicle(submersible,<<320.4211, -2975.9927, -11.1896>>, 2.5159)
SET_VEHICLE_CAN_BE_VISIBLY_DAMAGED(vehs[mvf_sub].id, FALSE)
set_vehicle_engine_on(vehs[mvf_sub].id,false,true)
set_vehicle_lights(vehs[mvf_sub].id,force_vehicle_lights_off)
SET_VEHICLE_RADIO_ENABLED(vehs[mvf_sub].id, TRUE)
SET_CAN_CLIMB_ON_ENTITY(vehs[mvf_sub].id, FALSE)
endif
if not isentityalive(vehs[mvf_truck].id)
vehs[mvf_truck].id = create_vehicle(packer,<<297.5948, -2950.3545, 5.0008>>, 359.1976)
set_vehicle_colour_combination(vehs[mvf_truck].id,0)
SET_VEHICLE_TYRES_CAN_BURST(vehs[mvf_truck].id,false)
SET_VEHICLE_HAS_STRONG_AXLES(vehs[mvf_truck].id,true)
endif
if not isentityalive(vehs[mvf_trailer].id)
vehs[mvf_trailer].id = create_vehicle(armytrailer,<<297.2917, -2970.2456, 4.8884>>, 359.0483)
SET_VEHICLE_CAN_BE_VISIBLY_DAMAGED(vehs[mvf_trailer].id, FALSE)
SET_VEHICLE_HAS_STRONG_AXLES(vehs[mvf_trailer].id,true)
endif
//attaching
attach_vehicle_to_trailer(vehs[mvf_truck].id,vehs[mvf_trailer].id, 0.5)
SET_TRAILER_LEGS_RAISED(vehs[mvf_trailer].id)
attach_vehicle_on_to_trailer(vehs[mvf_sub].id,vehs[mvf_trailer].id,<<0,-4,-0.7>>,<<0,0,0>>,<<0,0,0>>,-1)
//objects
if not does_entity_exist(objects[mof_subcover].id)
objects[mof_subcover].id = create_object(prop_sub_cover_01,<<297.5948, -2950.3545, 5.0008>>)
attach_entity_to_entity(objects[mof_subcover].id,vehs[mvf_trailer].id,-1,vTarpOffset,<<0,0,0>>)
endif
if not does_entity_exist(objects[mof_subStraps].id)
objects[mof_subStraps].id = create_object(PROP_TARP_STRAP, <<-332.8449,-2622.1572,8.7838>>)
attach_entity_to_entity(objects[mof_subStraps].id,vehs[mvf_trailer].id,-1, vTarpOffset,<<0,0,0>>)
endif
//peds
while not create_npc_ped_inside_vehicle(peds[mpf_floyd].id,char_floyd,vehs[mvf_truck].id,vs_front_right)
wait(0)
endwhile
CPRINTLN(debug_mission, "[DHP1] su_msf_2_safety(): Floyd created @ ", TIMERA())
IF IS_REPLAY_BEING_SET_UP()
CPRINTLN(debug_mission, "[DHP1] su_msf_2_safety(): Starting wait for replay setup @ ", TIMERA())
END_REPLAY_SETUP(vehs[mvf_truck].id)
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
set_ped_into_vehicle(player_ped_id(),vehs[mvf_truck].id)
endif
set_ped_relationship_group_hash(peds[mpf_floyd].id,rel_buddy)
clear_Area(get_entity_coords(player_ped_id()),100,true)
dialogue_stage = DHP1_WHERE
DIALOGUE_SUBSTAGE = DIA_CONDITIONS
endproc
proc SU_msf_3_passed()
//vehs
if not isentityalive(vehs[mvf_sub].id)
vehs[mvf_sub].id = create_vehicle(submersible,<<-337.7228, -2623.8347, 8.6595>>, 135.24)
set_vehicle_is_considered_by_player(vehs[mvf_sub].id,false)
set_vehicle_engine_on(vehs[mvf_sub].id,false,true)
set_vehicle_lights(vehs[mvf_sub].id,force_vehicle_lights_off)
SET_VEHICLE_RADIO_ENABLED(vehs[mvf_sub].id, TRUE)
SET_CAN_CLIMB_ON_ENTITY(vehs[mvf_sub].id, FALSE)
endif
if not isentityalive(vehs[mvf_truck].id)
vehs[mvf_truck].id = create_vehicle(packer,<<-337.7228, -2627.0376, 5.0010>>, 134.9894)
set_vehicle_is_considered_by_player(vehs[mvf_truck].id,false)
set_vehicle_colour_combination(vehs[mvf_truck].id,0)
SET_VEHICLE_TYRES_CAN_BURST(vehs[mvf_truck].id,false)
SET_VEHICLE_HAS_STRONG_AXLES(vehs[mvf_truck].id,true)
endif
if not isentityalive(vehs[mvf_trailer].id)
vehs[mvf_trailer].id = create_vehicle(armytrailer,<<-331.7280,-2621.0059,7.8828>>, 135.24)
SET_VEHICLE_HAS_STRONG_AXLES(vehs[mvf_trailer].id,true)
endif
//attaching
attach_vehicle_to_trailer(vehs[mvf_truck].id,vehs[mvf_trailer].id, 0.5)
SET_TRAILER_LEGS_RAISED(vehs[mvf_trailer].id)
attach_vehicle_on_to_trailer(vehs[mvf_sub].id,vehs[mvf_trailer].id,<<0,-4,-0.7>>,<<0,0,0>>,<<0,0,0>>,-1)
//objects
if not does_entity_exist(objects[mof_subcover].id)
objects[mof_subcover].id = create_object(prop_sub_cover_01,<<297.5948, -2950.3545, 5.0008>>)
attach_entity_to_entity(objects[mof_subcover].id,vehs[mvf_trailer].id,-1,vTarpOffset,<<0,0,0>>)
endif
if not does_entity_exist(objects[mof_subStraps].id)
objects[mof_subStraps].id = create_object(PROP_TARP_STRAP, <<-332.8449,-2622.1572,8.7838>>)
attach_entity_to_entity(objects[mof_subStraps].id,vehs[mvf_trailer].id,-1, vTarpOffset,<<0,0,0>>)
endif
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP()
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
endif
endproc
PROC MISSION_STAGE_SKIP()
//A SKIP HAS BEEN MADE
IF BDOSKIP = TRUE
//BEGIN THE SKIP IF THE SWITCHING IS IDLE
IF STAGESWITCH = STAGESWITCH_IDLE
IF NOT IS_SCREEN_FADED_OUT()
IF NOT IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME)
ENDIF
ELSE
MISSION_SET_STAGE(INT_TO_ENUM(MSF_MISSION_STAGE_FLAGS, ISKIPTOSTAGE))
ENDIF
//NEEDS TO BE CARRIED OUT BEFORE STATES OWN ENTERING STAGE
ELIF STAGESWITCH = STAGESWITCH_ENTERING
RENDER_SCRIPT_CAMS(FALSE,FALSE)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
RESET_EVERYTHING()
IF IS_CUTSCENE_ACTIVE()
REMOVE_CUTSCENE()
ENDIF
Start_Skip_Streaming(sAssetData)
// -------------------------- Not a Replay ----------------------------
IF NOT IS_REPLAY_BEING_SET_UP()
VECTOR vWarpCoord
FLOAT fWarpHeading
GET_SKIP_STAGE_COORD_AND_HEADING(int_to_enum(msf_mission_stage_flags, iSkipToStage), vWarpCoord, fWarpHeading)
SET_ENTITY_COORDS(PLAYER_PED_ID(), vWarpCoord)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fWarpHeading)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE)
Load_Asset_NewLoadScene_Sphere(sAssetData, vWarpCoord, 50.0)
ENDIF
// --------------------------------------------------------------------
LOAD_ASSET_STAGE(INT_TO_ENUM(MSF_MISSION_STAGE_FLAGS, MISSION_STAGE))
CPRINTLN(debug_mission, "[DHP1] MISSION_STAGE_SKIP(): Requested assets for skip @ ", TIMERA())
WHILE NOT Update_Skip_Streaming(sAssetData)
WAIT(0)
CPRINTLN(debug_mission, "[DHP1] MISSION_STAGE_SKIP(): Waiting on Update_Skip_Streaming @ ", TIMERA())
ENDWHILE
CPRINTLN(debug_mission, "[DHP1] MISSION_STAGE_SKIP(): Finished streaming assets @ ", TIMERA())
SWITCH INT_TO_ENUM(MSF_MISSION_STAGE_FLAGS, MISSION_STAGE)
CASE MSF_0_REACHED_SUB SU_MSF_0_REACHED_SUB() BREAK
CASE MSF_1_GET_TO_CRANE SU_MSF_1_GET_TO_CRANE() BREAK
CASE MSF_2_SAFETY SU_MSF_2_SAFETY() BREAK
CASE msf_3_passed SU_msf_3_passed() BREAK
ENDSWITCH
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
CPRINTLN(debug_mission, "[DHP1] MISSION_STAGE_SKIP(): Skip finished @ ", TIMERA())
TRIGGER_MUSIC_EVENT("DHP1_START")
BDOSKIP = FALSE
IF NOT IS_REPLAY_BEING_SET_UP()
Unload_Asset_NewLoadScene(sAssetData)
endif
ENDIF
#IF IS_DEBUG_BUILD
//CHECK IS A SKIP BEING ASKED FOR, DONT ALLOW SKIP DURING SETUP STAGE
ELIF LAUNCH_MISSION_STAGE_MENU(ZMENUNAMES, ISKIPTOSTAGE, MISSION_STAGE, TRUE)
IF ISKIPTOSTAGE > ENUM_TO_INT(MSF_NUM_OF_STAGES)-1
MISSION_PASSED()
ELSE
ISKIPTOSTAGE = CLAMP_INT(ISKIPTOSTAGE, 0, ENUM_TO_INT(MSF_NUM_OF_STAGES)-1)
IF IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME)
BDOSKIP = TRUE
ENDIF
ENDIF
#ENDIF
ENDIF
ENDPROC
BOOL bTrackingSubDamage
BOOL bTrackingTruckDamage
PROC MISSION_CHECKS()
//------------------DEATH CHECKS-------------------------------
FOR I = 0 TO ENUM_TO_INT(MPF_NUM_OF_PEDS) -1
IF DOES_ENTITY_EXIST(PEDS[I].ID)
IF PEDS[I].ID != PEDS[MPF_FLOYD].ID
if mission_stage = enum_to_int(msf_0_reached_sub)
UPDATE_AI_PED_BLIP(PEDS[I].ID,PEDS[I].BLIPSTRUCT)
else
if DOES_BLIP_EXIST(PEDS[I].BLIPSTRUCT.BlipID)
REMOVE_BLIP(PEDS[I].BLIPSTRUCT.BlipID)
endif
endif
ENDIF
IF IS_PED_INJURED(PEDS[I].ID)
IF PEDS[I].ID = PEDS[MPF_FLOYD].ID
MISSION_FAILED(mff_floyd_dead)
ENDIF
SAFE_RELEASE_PED(PEDS[I].ID)
ELSE
IF MISSION_STAGE = ENUM_TO_INT(MSF_2_SAFETY)
AND PEDS[I].ID = PEDS[MPF_FLOYD].ID
IF GET_DISTANCE_BETWEEN_ENTITIES(peds[mpf_floyd].id, PLAYER_PED_ID()) > 300.0
MISSION_FAILED(mff_left_floyd)
ENDIF
ENDIF
ENDIF
ENDIF
ENDFOR
FOR I = 0 TO ENUM_TO_INT(MVF_NUM_OF_VEH) -1
IF DOES_ENTITY_EXIST(VEHS[I].ID)
IF NOT IS_VEHICLE_DRIVEABLE(VEHS[I].ID)
IF VEHS[I].ID = VEHS[MVF_SUB].ID
MISSION_FAILED(MFF_DESTROYED_SUB)
ELIF VEHS[I].ID = VEHS[MVF_TRUCK].ID
or VEHS[I].ID = VEHS[mvf_trailer].ID
MISSION_FAILED(MFF_DESTROYED_TRUCK)
ELIF i = ENUM_TO_INT(mvf_bison)
MISSION_FAILED(mff_floyd_car_dead)
ENDIF
SAFE_RELEASE_VEHICLE(VEHS[I].ID)
else
if bFailForStuck
// Sub/trailer in the water
if VEHS[I].ID = VEHS[mvf_sub].ID
or VEHS[I].ID = VEHS[mvf_trailer].ID
if mission_stage = enum_to_int(MSF_2_SAFETY)
if GET_ENTITY_SUBMERGED_LEVEL(vehs[i].id) > 0.5
MISSION_FAILED(mff_lost_sub)
endif
endif
endif
if vehs[i].id = VEHS[MVF_TRUCK].ID
or VEHS[I].ID = VEHS[mvf_trailer].ID
if IS_VEHICLE_PERMANENTLY_STUCK(vehs[i].id)
MISSION_FAILED(mff_stuck_truck)
SAFE_RELEASE_VEHICLE(vehs[i].id)
endif
endif
IF VEHS[I].ID = VEHS[MVF_SUB].ID
if mission_stage = enum_to_int(msf_1_get_to_crane)
and mission_substage < 3
if IS_VEHICLE_PERMANENTLY_STUCK(vehs[i].id)
MISSION_FAILED(mff_stuck_sub)
SAFE_RELEASE_VEHICLE(vehs[i].id)
endif
endif
endif
endif
ENDIF
ENDIF
ENDFOR
if ISENTITYALIVE(vehs[mvf_sub].id)
and ISENTITYALIVE(player_ped_id())
//fail for leaving the sub
if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(player_ped_id()), get_entity_coords(vehs[mvf_sub].id)) > 750//1500
MISSION_FAILED(mff_left_sub)
elif GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(player_ped_id()), get_entity_coords(vehs[mvf_sub].id)) > 700//1400
if not bDistWarn
and IS_SAFE_TO_DISPLAY_GODTEXT()
PRINT_NOW("DKP1_ABSUB",DEFAULT_GOD_TEXT_TIME,1)
bDistWarn = true
endif
else
bDistWarn = false
endif
endif
//DIALGOUE
if ISENTITYALIVE(player_ped_id())
AUDIO_manage_dialogue()
endif
if mission_stage = enum_to_int(msf_0_reached_sub)
and mission_substage > STAGE_ENTRY
Manage_AI()
endif
//STATS
//DAMAGE TO SUB
IF MISSION_STAGE = ENUM_TO_INT(MSF_0_REACHED_SUB)
OR MISSION_STAGE = ENUM_TO_INT(msf_1_get_to_crane)
IF ISENTITYALIVE(VEHS[MVF_SUB].ID)
IF NOT bTrackingSubDamage
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(VEHS[MVF_SUB].ID, DH1P_SUB_DAMAGE)
CPRINTLN(DEBUG_MISSION_STATS, "<DOCKS_PREP_1> Passed, boarded ship")
bTrackingSubDamage = TRUE
ENDIF
ELSE
IF bTrackingSubDamage
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(null, DH1P_SUB_DAMAGE)
bTrackingSubDamage = FALSE
ENDIF
ENDIF
//DAMAGE TO TRUCK
ELIF MISSION_STAGE = ENUM_TO_INT(MSF_2_SAFETY)
IF ISENTITYALIVE(VEHS[MVF_TRUCK].ID)
IF NOT bTrackingTruckDamage
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(VEHS[MVF_TRUCK].ID, DH1P_TRUCK_DAMAGE)
bTrackingTruckDamage = TRUE
ENDIF
ELSE
IF bTrackingTruckDamage
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(null, DH1P_TRUCK_DAMAGE)
bTrackingTruckDamage = FALSE
ENDIF
ENDIF
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1240.401855,-2880.396240,8.250030>>, <<1240.384399,-2924.512695,40.819088>>, 28.875000)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1240.221558,-3035.469482,16.026249>>, <<1240.409058,-2924.159180,8.069090>>, 28.875000)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1240.464355,-3035.127197,13.006976>>, <<1240.616821,-3057.122070,16.971334>>, 27.687500)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1240.537476,-2967.821533,32.945580>>, <<1240.792236,-2943.656982,10.006589>>, 12.187500)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1261.524780,-3006.275391,29.216410>>, <<1237.787598,-3006.826172,12.877231>>, 8.187500)
// Draw the boat map
set_radar_as_interior_this_frame(get_hash_key("V_FakeBoatPO1SH2A"),1240.0,-2970.0,0)
ENTITY_INDEX entityToCheck
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
entityToCheck = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID(), TRUE)
ELSE
entityToCheck = PLAYER_PED_ID()
ENDIF
IF NOT IS_ENTITY_IN_AIR(entityToCheck)
AND NOT IS_ENTITY_IN_WATER(entityToCheck)
AND (NOT DOES_ENTITY_EXIST(vehs[mvf_sub].id) OR NOT IS_ENTITY_TOUCHING_ENTITY(entityToCheck, vehs[mvf_sub].id))
IF NOT bBoardedShip
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(DHP1_NO_BOARDING)
bBoardedShip = TRUE
ENDIF
#IF IS_DEBUG_BUILD
debug_bCurrentlyOnShip = TRUE
#ENDIF
ENDIF
ENDIF
IF NOT b_PlayedPoliceScannerLine
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
SET_AUDIO_FLAG("OnlyAllowScriptTriggerPoliceScanner", TRUE)
PLAY_POLICE_REPORT("SCRIPTED_SCANNER_REPORT_DH_PREP_1_01", 0.0)
b_PlayedPoliceScannerLine = TRUE
ENDIF
ENDIF
//Fix for 1784052
IF(IS_AIM_CAM_ACTIVE())
SET_GAMEPLAY_CAM_ENTITY_TO_LIMIT_FOCUS_OVER_BOUNDING_SPHERE_THIS_UPDATE(vehs[mvf_sub].id)
ENDIF
#if IS_DEBUG_BUILD
wAIstage = enum_to_int(eAI_stage)
wCalm_stage = enum_to_int(eCalm_stage)
wAlarm_stage = enum_to_int(eALARM)
#endif
ENDPROC
PROC MISSION_SETUP()
IF IS_REPLAY_IN_PROGRESS()
or IS_REPEAT_PLAY_ACTIVE()
if IS_REPLAY_IN_PROGRESS()
ISKIPTOSTAGE = GET_REPLAY_MID_MISSION_STAGE()
IF g_bShitskipAccepted
ISKIPTOSTAGE++
ENDIF
if iSkipToStage >= 3
iSkipToStage = 3
endif
elif IS_REPEAT_PLAY_ACTIVE()
iSkipToStage = 0
endif
// New replay streaming
IF IS_REPLAY_IN_PROGRESS()
VECTOR vSkipToCoord
FLOAT fSkipToHeading
GET_SKIP_STAGE_COORD_AND_HEADING(int_to_enum(MSF_MISSION_STAGE_FLAGS,iSkipToStage), vSkipToCoord, fSkipToHeading)
START_REPLAY_SETUP(vSkipToCoord, fSkipToHeading)
CPRINTLN(debug_mission, "[DHP1] MISSION_SETUP(): Started replay warp")
ENDIF
SETTIMERA(0)
BDOSKIP = TRUE
ELSE
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(0,"STAGE 0: REACH SUB")
MISSION_STAGE = ENUM_TO_INT(MSF_0_REACHED_SUB)
LOAD_ASSET_STAGE(MSF_0_REACHED_SUB)
ENDIF
MISSION_SUBSTAGE = STAGE_ENTRY
IF IS_PLAYER_PLAYING(PLAYER_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ENDIF
SET_WEATHER_TYPE_PERSIST("EXTRASUNNY")
SET_AUTO_GIVE_SCUBA_GEAR_WHEN_EXIT_VEHICLE(player_id(),FALSE)
REMOVE_RELATIONSHIP_GROUP(REL_BUDDY)
REMOVE_RELATIONSHIP_GROUP(rel_dock)
ADD_RELATIONSHIP_GROUP("REL_BUDDY",REL_BUDDY)
ADD_RELATIONSHIP_GROUP("rel_dock",rel_dock)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,rel_dock,RELGROUPHASH_PLAYER)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE,RELGROUPHASH_PLAYER,REL_BUDDY)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE,REL_BUDDY,RELGROUPHASH_PLAYER)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE,rel_dock,rel_dock)
// GRAB THE sub
IF NOT DOES_ENTITY_EXIST(VEHS[MVF_SUB].ID)
IF DOES_ENTITY_EXIST(G_STRIGGERSCENEASSETS.VEH[0])
SET_ENTITY_AS_MISSION_ENTITY(G_STRIGGERSCENEASSETS.VEH[0], TRUE, TRUE)
VEHS[MVF_SUB].ID = G_STRIGGERSCENEASSETS.VEH[0]
SET_VEHICLE_AS_RESTRICTED(VEHS[MVF_SUB].ID,0)
SET_VEHICLE_RADIO_ENABLED(vehs[mvf_sub].id, TRUE)
ENDIF
ENDIF
//PEDS
IF NOT DOES_ENTITY_EXIST(PEDS[MPF_DOCKPHONE].ID)
IF DOES_ENTITY_EXIST(G_STRIGGERSCENEASSETS.PED[0])
SET_ENTITY_AS_MISSION_ENTITY(G_STRIGGERSCENEASSETS.PED[0],TRUE,TRUE)
PEDS[MPF_DOCKPHONE].ID = G_STRIGGERSCENEASSETS.PED[0]
set_ped_relationship_group_hash(peds[mpf_dockphone].id,rel_dock)
SET_PED_CONFIG_FLAG(peds[mpf_dockphone].id,PCF_DisableExplosionReactions,true)
SET_PED_VISUAL_FIELD_CENTER_ANGLE(peds[mpf_dockphone].id,45)
SET_PED_VISUAL_FIELD_MAX_ANGLE(peds[mpf_dockphone].id,50)
SET_PED_VISUAL_FIELD_MIN_ANGLE(peds[mpf_dockphone].id,-50)
endif
ENDIF
//OBJECTS
IF NOT DOES_ENTITY_EXIST(OBJECTS[MOF_DUMMY1].ID)
IF DOES_ENTITY_EXIST(G_STRIGGERSCENEASSETS.OBJECT[0])
SET_ENTITY_AS_MISSION_ENTITY(G_STRIGGERSCENEASSETS.OBJECT[0],TRUE,TRUE)
OBJECTS[MOF_DUMMY1].ID = G_STRIGGERSCENEASSETS.OBJECT[0]
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(OBJECTS[MOF_DUMMY2].ID)
IF DOES_ENTITY_EXIST(G_STRIGGERSCENEASSETS.OBJECT[1])
SET_ENTITY_AS_MISSION_ENTITY(G_STRIGGERSCENEASSETS.OBJECT[1],TRUE,TRUE)
OBJECTS[MOF_DUMMY2].ID = G_STRIGGERSCENEASSETS.OBJECT[1]
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(OBJECTS[MOF_BUTTON].ID)
IF DOES_ENTITY_EXIST(G_STRIGGERSCENEASSETS.OBJECT[2])
SET_ENTITY_AS_MISSION_ENTITY(G_STRIGGERSCENEASSETS.OBJECT[2],TRUE,TRUE)
OBJECTS[MOF_BUTTON].ID = G_STRIGGERSCENEASSETS.OBJECT[2]
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(OBJECTS[mof_phone].ID)
IF DOES_ENTITY_EXIST(G_STRIGGERSCENEASSETS.OBJECT[3])
SET_ENTITY_AS_MISSION_ENTITY(G_STRIGGERSCENEASSETS.OBJECT[3],TRUE,TRUE)
OBJECTS[mof_phone].ID = G_STRIGGERSCENEASSETS.OBJECT[3]
ENDIF
ENDIF
// // GRAB ROPE STUFF
//
if g_sTriggerSceneAssets.flag
println("[ROPES] attached")
if DOES_ROPE_EXIST(G_STRIGGERSCENEASSETS.ROPE[0])
ROPE_CHANGE_SCRIPT_OWNER(G_STRIGGERSCENEASSETS.ROPE[0],true,true)
ROPES[0].ROPE = G_STRIGGERSCENEASSETS.ROPE[0]
G_STRIGGERSCENEASSETS.ROPE[0] = null
endif
if DOES_ROPE_EXIST(G_STRIGGERSCENEASSETS.ROPE[1])
ROPE_CHANGE_SCRIPT_OWNER(G_STRIGGERSCENEASSETS.ROPE[1],true,true)
ROPES[1].ROPE = G_STRIGGERSCENEASSETS.ROPE[1]
G_STRIGGERSCENEASSETS.ROPE[1] = null
endif
if DOES_ROPE_EXIST(G_STRIGGERSCENEASSETS.ROPE[2])
ROPE_CHANGE_SCRIPT_OWNER(G_STRIGGERSCENEASSETS.ROPE[2],true,true)
ROPES[2].ROPE = G_STRIGGERSCENEASSETS.ROPE[2]
G_STRIGGERSCENEASSETS.ROPE[2] = null
endif
if DOES_ROPE_EXIST(G_STRIGGERSCENEASSETS.ROPE[3])
ROPE_CHANGE_SCRIPT_OWNER(G_STRIGGERSCENEASSETS.ROPE[3],true,true)
ROPES[3].ROPE = G_STRIGGERSCENEASSETS.ROPE[3]
G_STRIGGERSCENEASSETS.ROPE[3] = null
endif
bRopesCreated = true
else
println("[ROPES] set as not attached from trigger")
bRopesCreated = false
endif
REQUEST_ADDITIONAL_TEXT("DOCKP1", MISSION_TEXT_SLOT)
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
WAIT(0)
ENDWHILE
if ISENTITYALIVE(player_ped_id())
ADD_PED_FOR_DIALOGUE(convo_struct,0,player_ped_id(),"TREVOR")
endif
ALLOW_DIALOGUE_IN_WATER(TRUE)
SET_MAX_WANTED_LEVEL(2)
SET_WANTED_LEVEL_MULTIPLIER(0.5)
INIT_BATTLEBUDDY_BEHAVIOUR_FOR_MISSION(SP_HEIST_DOCKS_PREP_1)
ENDPROC
INT iSwingingSound[2]
INT iSwingingSoundPlayed
PROC MANAGE_ROPE_SFX()
INT iRopesSnapped
BOOL bARopeWasJustSnapped
REPEAT COUNT_OF(ropes) i
if not IS_ROPE_ATTACHED_AT_BOTH_ENDS(ropes[i].rope)
IF NOT ropes[i].bSnapped
bARopeWasJustSnapped = TRUE
ENDIF
iRopesSnapped++
endif
ENDREPEAT
IF bARopeWasJustSnapped
// ROPE SWING SOUND
//-----------------------------------
// both ropes just snapped on 1 side of the sub
IF ((not IS_ROPE_ATTACHED_AT_BOTH_ENDS(ropes[0].rope)
and not IS_ROPE_ATTACHED_AT_BOTH_ENDS(ropes[1].rope)
AND (NOT ropes[0].bSnapped OR NOT ropes[1].bSnapped))
// both ropes just snapped on the other side of the sub
or (not IS_ROPE_ATTACHED_AT_BOTH_ENDS(ropes[2].rope)
and not IS_ROPE_ATTACHED_AT_BOTH_ENDS(ropes[3].rope)
AND (NOT ropes[2].bSnapped OR NOT ropes[3].bSnapped))
// Just snapped the 3rd rope so it will need to swing again.
OR iRopesSnapped = 3)
AND iRopesSnapped < 4
IF iSwingingSoundPlayed > 0
IF iSwingingSound[iSwingingSoundPlayed-1] != -1
STOP_SOUND(iSwingingSound[iSwingingSoundPlayed-1])
ENDIF
ENDIF
IF iSwingingSound[iSwingingSoundPlayed] != -1
PLAY_SOUND_FROM_COORD(iSwingingSound[iSwingingSoundPlayed], "DOCKS_HEIST_PREP_1_SUB_SWING", <<1260.8959, -3006.5557, 23.4213>>)
CPRINTLN(DEBUG_MIKE, "PLAYED SOUND: DOCKS_HEIST_PREP_1_SUB_SWING")
iSwingingSoundPlayed++
ENDIF
// ROPE TILT SOUND
//-----------------------------------
ELIF iRopesSnapped <= 2
// one rope just snapped OR 2 ropes snapped
//PLAY_SOUND_FRONTEND(-1, "DOCKS_HEIST_PREP_1_SUB_TILT", "")
PLAY_SOUND_FROM_COORD(-1, "DOCKS_HEIST_PREP_1_SUB_TILT", <<1260.8959, -3006.5557, 23.4213>>)
CPRINTLN(DEBUG_MIKE, "PLAYED SOUND: DOCKS_HEIST_PREP_1_SUB_TILT")
ENDIF
// ROPE SNAP SOUND
//-----------------------------------
REPEAT COUNT_OF(ropes) i
if not IS_ROPE_ATTACHED_AT_BOTH_ENDS(ropes[i].rope)
IF NOT ropes[i].bSnapped
//PLAY_SOUND_FRONTEND(-1, "DOCKS_HEIST_PREP_1_CABLE_SNAP", "")
PLAY_SOUND_FROM_COORD(-1, "DOCKS_HEIST_PREP_1_CABLE_SNAP", <<1260.8959, -3006.5557, 23.4213>>)
CPRINTLN(DEBUG_MIKE, "PLAYED SOUND: DOCKS_HEIST_PREP_1_CABLE_SNAP for rope[", i, "]")
ENDIF
ropes[i].bSnapped = TRUE
endif
ENDREPEAT
// Final rope snapped, stop the swining sound
IF iRopesSnapped >= 4
IF iSwingingSound[0] != -1
STOP_SOUND(iSwingingSound[0])
ENDIF
IF iSwingingSound[1] != -1
STOP_SOUND(iSwingingSound[1])
ENDIF
ENDIF
ENDIF
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// mission stages
// -----------------------------------------------------------------------------------------------------------
proc st_0_reached_sub()
switch mission_substage
case stage_entry
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
if isentityalive(vehs[mvf_sub].id)
if not does_blip_exist(vehs[mvf_sub].blip)
vehs[mvf_sub].blip = create_blip_for_vehicle(vehs[mvf_sub].id)
endif
subCGOffset = GET_CGOFFSET(vehs[mvf_sub].id)
endif
if does_entity_exist(objects[mof_button].id)
and not does_blip_exist(blip_objective)
blip_objective = create_blip_for_object(objects[mof_button].id)
endif
SET_BLIP_NAME_FROM_TEXT_FILE(blip_objective,"SUBBTN_LABEL")
if IS_PED_IN_ANY_VEHICLE(player_ped_id())
TRIGGER_MUSIC_EVENT("DHP1_VEHICLE_ARRIVE")
else
TRIGGER_MUSIC_EVENT("DHP1_START")
endif
if isentityalive(peds[mpf_dockphone].id)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_dockphone].id,true)
SET_PED_PATH_CAN_USE_CLIMBOVERS(peds[mpf_dockphone].id,false)
endif
Load_Asset_AnimDict(sAssetData,AnimDictMission)
Load_Asset_AnimDict(sAssetData,"MISSHEISTDOCKSPREP1HOLD_CELLPHONE")
Load_Asset_Audiobank(sAssetData, "PORT_OF_LS_PREP_1")
print_now("dkp1_sub",default_god_text_time,1)
eAI_stage = AI_NORM_TASK
eCalm_stage = CALM_WARN1
eALARM = ALARM_NONE
iStartTasktimer = get_game_timer()
bINIT_workerTasks = false
bHelpDisplayed = false
bWaterSlashedSound = false
IF iSwingingSound[0] = -1 iSwingingSound[0] = GET_SOUND_ID() ENDIF
IF iSwingingSound[1] = -1 iSwingingSound[1] = GET_SOUND_ID() ENDIF
mission_substage++
break
case 1
if bropescreated
if not IS_ROPE_ATTACHED_AT_BOTH_ENDS(ropes[0].rope)
and not IS_ROPE_ATTACHED_AT_BOTH_ENDS(ropes[1].rope)
and not IS_ROPE_ATTACHED_AT_BOTH_ENDS(ropes[2].rope)
and not IS_ROPE_ATTACHED_AT_BOTH_ENDS(ropes[3].rope)
ROPE_CONVERT_TO_SIMPLE( objects[mof_dummy1].id )
ROPE_CONVERT_TO_SIMPLE( objects[mof_dummy2].id )
if ISENTITYALIVE(vehs[mvf_sub].id)
SET_CGOFFSET( vehs[mvf_sub].id, subCGOffset )
endif
if does_blip_exist(blip_objective)
remove_blip(blip_objective)
endif
load_asset_stage(msf_1_get_to_crane)
LOAD_ASSET_MODEL(sAssetData,S_M_M_SECURITY_01)
Load_Asset_AnimDict(sAssetData,AnimDictReaction)
TRIGGER_MUSIC_EVENT("DHP1_RELEASED")
CLEAR_HELP()
istagedelay = get_game_timer()
mission_substage = 4
endif
MANAGE_ROPE_SFX()
if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(),<<1249.10571, -3007.90796, 10.84327>>,<<1249.96155, -3007.83740, 8.31909>>,1.68)
and not IS_PED_IN_ANY_VEHICLE(player_ped_id(),true)
AND NOT IS_PHONE_ONSCREEN(FALSE)
if IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CONTEXT)
cameraindex = create_camera_with_params(camtype_scripted, <<1249.929443,-3010.267334,9.590105>>, <<5.351202,-1.573690,8.124990>>, 21.333569, TRUE)
SET_CAM_PARAMS(cameraIndex, <<1249.929443,-3010.267334,9.590105>>,<<4.448765,-1.573700,12.680055>>,21.333569, 3500, GRAPH_TYPE_LINEAR)
SHAKE_CAM(cameraIndex, "hand_shake", 0.3)
prep_start_cutscene(false,<<1249.78662, -3008.01587, 8.52751>>)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
syncbutton = CREATE_SYNCHRONIZED_SCENE(<<1250.01,-3007.9,9.32>>,<<0,0,90>>)
if GET_PED_STEALTH_MOVEMENT(player_ped_id())
TASK_SYNCHRONIZED_SCENE(player_ped_id(),syncbutton,AnimDictMission,"ig_1_stealth_button",INSTANT_BLEND_IN,walk_BLEND_OUT,SYNCED_SCENE_DONT_INTERRUPT, RBF_NONE, INSTANT_BLEND_IN, AIK_DISABLE_ARM_IK)
else
TASK_SYNCHRONIZED_SCENE(player_ped_id(),syncbutton,AnimDictMission,"ig_1_button",INSTANT_BLEND_IN,walk_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, RBF_NONE, INSTANT_BLEND_IN, AIK_DISABLE_ARM_IK)
endif
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
CLEAR_HELP()
VEHICLE_INDEX vehblock
vehblock = GET_CLOSEST_VEHICLE(<<1249.78662, -3008.01587, 8.52751>>,5,DUMMY_MODEL_FOR_SCRIPT,VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES)
if ISENTITYALIVE(vehblock)
SET_ENTITY_COORDS(vehblock,<<1250.3335, -3010.2190, 8.3191>>)
SET_ENTITY_HEADING(vehblock,85.8086)
SET_VEHICLE_ON_GROUND_PROPERLY(vehblock)
endif
REPLAY_RECORD_BACK_FOR_TIME(4.0, 0.0, REPLAY_IMPORTANCE_HIGHEST)
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
bcueCam = true
mission_substage++
ELSE
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DKP1_BTN")
PRINT_HELP_FOREVER("DKP1_BTN")
ENDIF
endif
else
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DKP1_BTN")
CLEAR_HELP()
ENDIF
endif
endif
break
case 2
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(syncbutton)
OR GET_SYNCHRONIZED_SCENE_PHASE(syncbutton) = 1.0
REPLAY_STOP_EVENT()
PLAY_SOUND_FROM_COORD(-1, "SUB_RELEASE", <<1260.8959, -3006.5557, 23.4213>>, "DOCKS_HEIST_PREP_1_SOUNDSET")
SET_CAM_PARAMS(cameraindex,<<1249,-3010.3,10.7>>, <<37.7,0,-61.5>>,43.4)
SET_CAM_PARAMS(cameraIndex,<<1249.0,-3010.3,10.7>>,<<-20.1,0,-48.2>>,43.4,1700,GRAPH_TYPE_ACCEL,GRAPH_TYPE_ACCEL)
SET_CAM_SHAKE_AMPLITUDE(cameraIndex, 0.1)
DETACH_ROPE_FROM_ENTITY( ropes[0].rope, vehs[mvf_sub].id )
DETACH_ROPE_FROM_ENTITY( ropes[1].rope, vehs[mvf_sub].id )
DETACH_ROPE_FROM_ENTITY( ropes[2].rope, vehs[mvf_sub].id )
DETACH_ROPE_FROM_ENTITY( ropes[3].rope, vehs[mvf_sub].id )
ROPE_CONVERT_TO_SIMPLE( objects[mof_dummy1].id )
ROPE_CONVERT_TO_SIMPLE( objects[mof_dummy2].id )
if ISENTITYALIVE(vehs[mvf_sub].id)
SET_CGOFFSET( vehs[mvf_sub].id, subCGOffset )
ACTIVATE_PHYSICS( vehs[mvf_sub].id )
endif
istagedelay = get_game_timer()
TRIGGER_MUSIC_EVENT("DHP1_RELEASED")
CLEAR_HELP()
bcueCam = true
mission_substage++
elif IS_SYNCHRONIZED_SCENE_RUNNING(syncbutton)
and GET_SYNCHRONIZED_SCENE_PHASE(syncbutton) >= 0.7
if GET_SCRIPT_TASK_STATUS(player_ped_id(),SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> PERFORMING_TASK
TASK_FOLLOW_NAV_MESH_TO_COORD(player_peD_id(),<<1252.5935, -3008.8831, 8.3191>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
endif
ENDIF
break
case 3
if get_game_timer() - istagedelay > 1500
if bcueCam
SET_CAM_PARAMS(cameraIndex,<<1261.7,-3013.3,21.7>>,<<-62.7,0,29.5>>,40.4,0,GRAPH_TYPE_DECEL,GRAPH_TYPE_DECEL)
SET_CAM_PARAMS(cameraIndex,<<1259.9,-3014.1,21.7>>,<<-67.7,0,16.5>>,40.4,4000,GRAPH_TYPE_DECEL,GRAPH_TYPE_DECEL)
bcueCam = false
endif
if get_game_timer() - istagedelay > 5000
or IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT)
if does_blip_exist(blip_objective)
remove_blip(blip_objective)
endif
load_asset_stage(msf_1_get_to_crane)
LOAD_ASSET_MODEL(sAssetData,S_M_M_SECURITY_01)
Load_Asset_AnimDict(sAssetData,AnimDictReaction)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
CLEAR_PED_TASKS(player_ped_id())
prep_stop_cutscene(true)
istagedelay = get_game_timer()
mission_substage++
endif
endif
break
case 4
if not IS_PLAYER_PED_SWITCH_IN_PROGRESS()
if GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
if not IS_BATTLEBUDDY_AVAILABLE(GET_BATTLEBUDDY_PED(CHAR_MICHAEL),false)
and not IS_BATTLEBUDDY_AVAILABLE(GET_BATTLEBUDDY_PED(CHAR_FRANKLIN),false)
SET_BATTLEBUDDY_BEHAVIOUR_REQUEST(BBF_RejectAllBattleBuddies)
mission_substage++
elif IS_BATTLEBUDDY_AVAILABLE(GET_BATTLEBUDDY_PED(CHAR_MICHAEL),false)
and not IS_BATTLEBUDDY_AVAILABLE(GET_BATTLEBUDDY_PED(CHAR_FRANKLIN),false)
ADD_PED_FOR_DIALOGUE(convo_struct,0,player_ped_id(),"TREVOR")
ADD_PED_FOR_DIALOGUE(convo_struct,1,GET_BATTLEBUDDY_PED(CHAR_MICHAEL),"MICHAEL")
if CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(convo_struct,"DHP1AUD","DHP1_BUD","DHP1_BUD_1","DHP1_BUD","DHP1_BUD_2",CONV_PRIORITY_MEDIUM)
SET_BATTLEBUDDY_BEHAVIOUR_REQUEST(BBF_RejectAllBattleBuddies)
mission_substage++
endif
elif not IS_BATTLEBUDDY_AVAILABLE(GET_BATTLEBUDDY_PED(CHAR_MICHAEL),false)
and IS_BATTLEBUDDY_AVAILABLE(GET_BATTLEBUDDY_PED(CHAR_FRANKLIN),false)
ADD_PED_FOR_DIALOGUE(convo_struct,0,player_ped_id(),"TREVOR")
ADD_PED_FOR_DIALOGUE(convo_struct,2,GET_BATTLEBUDDY_PED(CHAR_FRANKLIN),"FRANKLIN")
if CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(convo_struct,"DHP1AUD","DHP1_BUD","DHP1_BUD_1","DHP1_BUD","DHP1_BUD_3",CONV_PRIORITY_MEDIUM)
SET_BATTLEBUDDY_BEHAVIOUR_REQUEST(BBF_RejectAllBattleBuddies)
mission_substage++
endif
else // both there
ADD_PED_FOR_DIALOGUE(convo_struct,0,player_ped_id(),"TREVOR")
ADD_PED_FOR_DIALOGUE(convo_struct,1,GET_BATTLEBUDDY_PED(CHAR_MICHAEL),"MICHAEL")
ADD_PED_FOR_DIALOGUE(convo_struct,2,GET_BATTLEBUDDY_PED(CHAR_FRANKLIN),"FRANKLIN")
if CREATE_CONVERSATION(convo_struct,"DHP1AUD","DHP1_BUD",CONV_PRIORITY_MEDIUM)
SET_BATTLEBUDDY_BEHAVIOUR_REQUEST(BBF_RejectAllBattleBuddies)
mission_substage++
endif
endif
else
if IS_SAFE_TO_DISPLAY_GODTEXT()
Print_now("DKP1_SWTCH",DEFAULT_GOD_TEXT_TIME,1)
endif
endif
endif
break
case 5
VECTOR vSubCoord
vSubCoord = GET_ENTITY_COORDS(vehs[mvf_sub].id)
if GET_ENTITY_SUBMERGED_LEVEL(vehs[mvf_sub].id) > 0.0
OR vSubCoord.z < -0.5
DELETE_CHILD_ROPE(ropes[0].rope)
DELETE_CHILD_ROPE(ropes[1].rope)
DELETE_CHILD_ROPE(ropes[2].rope)
DELETE_CHILD_ROPE(ropes[3].rope)
IF iSwingingSound[0] != -1 STOP_SOUND(iSwingingSound[0]) ENDIF
IF iSwingingSound[1] != -1 STOP_SOUND(iSwingingSound[1]) ENDIF
endif
if is_ped_in_vehicle(player_ped_id(),vehs[mvf_sub].id)
//MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_HEIST_DOCKS_PREP_1)
SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(<<1218.2369, -3005.1282, 4.8658>>, 359.5065)
if GET_PLAYER_WANTED_LEVEL(player_id()) > 0
//security 1
peds[mpf_sec1].id = create_ped(PEDTYPE_MISSION,S_M_M_SECURITY_01,<<1229.55750, -3002.88184, 8.31909>>,-30.33)
GIVE_WEAPON_TO_PED(peds[mpf_sec1].id,WEAPONTYPE_PISTOL,INFINITE_AMMO)
SET_PED_CONFIG_FLAG(peds[mpf_sec1].id, PCF_DontBlip, TRUE)
SET_PED_AS_COP(peds[mpf_sec1].id)
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<1252.87610, -3014.03540, 8.31909>>,PEDMOVE_RUN)
TASK_LOOK_AT_ENTITY(null,player_ped_id(),-1,SLF_WHILE_NOT_IN_FOV)
TASK_COMBAT_PED(null,PLAYER_PED_ID())
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_sec1].id,seq)
CLEAR_SEQUENCE_TASK(seq)
//security 2
peds[mpf_sec2].id = create_ped(PEDTYPE_MISSION,S_M_M_SECURITY_01,<<1229.55750, -3002.88184, 8.31909>>,-30.33)
SET_PED_CONFIG_FLAG(peds[mpf_sec2].id, PCF_DontBlip, TRUE)
GIVE_WEAPON_TO_PED(peds[mpf_sec2].id,WEAPONTYPE_PISTOL,INFINITE_AMMO)
SET_PED_AS_COP(peds[mpf_sec2].id)
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<1252.05591, -3006.94043, 8.31909>>,PEDMOVE_RUN)
TASK_LOOK_AT_ENTITY(null,player_ped_id(),-1,SLF_WHILE_NOT_IN_FOV)
TASK_COMBAT_PED(null,PLAYER_PED_ID())
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_sec2].id,seq)
CLEAR_SEQUENCE_TASK(seq)
Unload_Asset_Model(sAssetData,S_M_M_SECURITY_01)
else
peds[mpf_dock2].id = create_ped(PEDTYPE_MISSION,S_M_M_DOCKWORK_01,<<1228.92932, -3015.00806, 8.31909>>)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_dock2].id,true)
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_LOOK_AT_ENTITY(null,player_peD_id(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<1252.87610, -3014.03540, 8.31909>>,PEDMOVE_RUN)
TASK_PLAY_ANIM(null,AnimDictReaction,"react_big_variations_g",walk_BLEND_IN,WALK_BLEND_OUT)
TASK_PLAY_ANIM(null,AnimDictReaction,"react_big_variations_i",walk_BLEND_IN,WALK_BLEND_OUT)
TASK_SMART_FLEE_COORD(null,<<1252.87610, -3014.03540, 8.31909>>,300,-1)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_dock2].id,seq)
CLEAR_SEQUENCE_TASK(seq)
Unload_Asset_Model(sAssetData,S_M_M_SECURITY_01)
endif
//new dock worker
if ISENTITYALIVE(peds[mpf_dockphone].id)
CLEAR_PED_TASKS(peds[mpf_dockphone].id)
set_entity_coords(peds[mpf_dockphone].id,<<1229.55750, -3002.88184, 8.31909>>)
else
peds[mpf_dockphone].id = create_ped(PEDTYPE_MISSION,S_M_M_DOCKWORK_01,<<1229.55750, -3002.88184, 8.31909>>,-99)
endif
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_dockphone].id,true)
STOP_PED_SPEAKING(peds[mpf_dockphone].id, TRUE)
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_LOOK_AT_ENTITY(null,player_peD_id(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<1252.994,-3004.134,9.319>>,PEDMOVE_RUN)
TASK_PLAY_ANIM(null,AnimDictReaction,"react_big_variations_f",NORMAL_BLEND_IN,WALK_BLEND_OUT)
TASK_PLAY_ANIM(null,AnimDictReaction,"react_big_variations_g",walk_BLEND_IN,WALK_BLEND_OUT)
TASK_PLAY_ANIM(null,AnimDictReaction,"react_big_variations_h",walk_BLEND_IN,WALK_BLEND_OUT)
TASK_PLAY_ANIM(null,AnimDictReaction,"react_big_variations_i",walk_BLEND_IN,WALK_BLEND_OUT)
TASK_PLAY_ANIM(null,AnimDictReaction,"react_big_variations_f",walk_BLEND_IN,WALK_BLEND_OUT)
TASK_SMART_FLEE_COORD(null,<<1252.994,-3004.134,9.319>>,300,-1)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_dockphone].id,seq)
CLEAR_SEQUENCE_TASK(seq)
dialoguetimer = get_game_timer()
dialogue_stage = DHP1_TSUB
dialogue_substage = DIA_CONDITIONS
CLEAR_HELP()
TRIGGER_MUSIC_EVENT("DHP1_SUB")
if does_blip_exist(vehs[mvf_sub].blip)
remove_blip(vehs[mvf_sub].blip)
endif
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[mof_phone].id)
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[mof_dummy1].id)
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[mof_dummy2].id)
unload_asset_model(sAssetData,P_AMB_PHONE_01)
unload_asset_model(sAssetData,S_M_M_DOCKWORK_01)
unload_asset_model(sAssetData,prop_ld_test_01)
unload_asset_model(sAssetData,prop_sub_release)
Unload_Asset_Anim_Dict(sAssetData,AnimDictMission)
// Unload_Asset_Waypoint(sAssetData,"docksprep1")
REMOVE_WAYPOINT_RECORDING("docksprep1")
REPLAY_RECORD_BACK_FOR_TIME(15.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
mission_set_stage(msf_1_get_to_crane)
mission_substage = STAGE_ENTRY
else
if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(player_ped_id()),GET_ENTITY_COORDS(vehs[mvf_sub].id)) < 5
and not bHelpDisplayed
print_help("DKP1_CLIMB")
bHelpDisplayed = true
endif
endif
break
endswitch
IF NOT bWaterSlashedSound
AND ISENTITYALIVE(vehs[mvf_sub].id)
AND IS_ENTITY_IN_WATER(vehs[mvf_sub].id)
PLAY_SOUND_FROM_ENTITY(-1, "SUB_SPLASH", vehs[mvf_sub].id, "DOCKS_HEIST_PREP_1_SOUNDSET")
bWaterSlashedSound = TRUE
ENDIF
//--------------------------------------------------------------- attach ropes ---------------------------------------------------------------
if not bropescreated
and does_entity_exist(objects[mof_dummy1].id)
and does_entity_exist(objects[mof_dummy2].id)
and ISENTITYALIVE(vehs[mvf_sub].id)
if does_entity_have_physics(objects[mof_dummy1].id)
and does_entity_have_physics(objects[mof_dummy2].id)
SET_CG_AT_BOUNDCENTER( vehs[mvf_sub].id )
//attach rope 1
ropes[0].rope = add_rope(<<1260.69153, -3008.28589, 23.73365>>,<<0,0,0>>,wfropelength,physics_rope_default,wfropelength,0.5,0.5
,false,false,false,10,true)
attach_entities_to_rope(ropes[0].rope,objects[mof_dummy1].id,vehs[mvf_sub].id,
get_offset_from_entity_in_world_coords(objects[mof_dummy1].id,<<0,0,0>>)
,get_offset_from_entity_in_world_coords(vehs[mvf_sub].id,<<1.8,1.02,1.11>>),wfropelength,0,0)
//attach rope 2
ropes[1].rope = add_rope(<<1260.69153, -3008.28589, 23.73365>>,<<0,0,0>>,wfropelength,physics_rope_default,wfropelength,0.5,0.5
,false,false,false,10,true)
attach_entities_to_rope(ropes[1].rope,objects[mof_dummy1].id,vehs[mvf_sub].id,
get_offset_from_entity_in_world_coords(objects[mof_dummy1].id,<<0,0,0>>)
,get_offset_from_entity_in_world_coords(vehs[mvf_sub].id,<<-1.8,1.02,1.11>>),wfropelength,0,0)
//attach rope 1
ropes[2].rope = add_rope(<<1260.69153, -3008.28589, 23.73365>>,<<0,0,0>>,wfropelength,physics_rope_default,wfropelength,0.5,0.5
,false,false,false,10,true)
attach_entities_to_rope(ropes[2].rope,objects[mof_dummy2].id,vehs[mvf_sub].id,
get_offset_from_entity_in_world_coords(objects[mof_dummy2].id,<<0,0,0>>)
,get_offset_from_entity_in_world_coords(vehs[mvf_sub].id,<<1.8,-3.07,1.11>>),wfropelength,0,0)
//attach rope 2
ropes[3].rope = add_rope(<<1260.75208, -3004.99414, 22.68315>>,<<0,0,0>>,wfropelength,physics_rope_default,wfropelength,0.5,0.5
,false,false,false,10,true)
attach_entities_to_rope(ropes[3].rope,objects[mof_dummy2].id,vehs[mvf_sub].id,
get_offset_from_entity_in_world_coords(objects[mof_dummy2].id,<<0,0,0>>)
,get_offset_from_entity_in_world_coords(vehs[mvf_sub].id,<<-1.8,-3.07,1.11>>),wfropelength,0,0)
bropescreated = true
bactivatePhysics = false
ACTIVATE_PHYSICS(vehs[mvf_sub].id)
APPLY_FORCE_TO_ENTITY_CENTER_OF_MASS(vehs[mvf_sub].id, APPLY_TYPE_IMPULSE, <<0.0, 0.0, 0.01>>, 0, FALSE, TRUE)
endif
else
if isentityalive(vehs[mvf_sub].id)
if not bactivatePhysics
ACTIVATE_PHYSICS(vehs[mvf_sub].id)
bactivatePhysics = true
endif
freeze_entity_position(vehs[mvf_sub].id,false)
APPLY_FORCE_TO_ENTITY_CENTER_OF_MASS(vehs[mvf_sub].id, APPLY_TYPE_IMPULSE, <<0.0, 0.0, 0.01>>, 0, FALSE, TRUE)
endif
endif
//--------------------------------------------------------------- phone ---------------------------------------------------------------
if not bPhoneAdded
if DOES_ENTITY_EXIST(objects[mof_phone].id)
IF DOES_ENTITY_HAVE_PHYSICS(objects[mof_phone].id)
ATTACH_ENTITY_TO_ENTITY(objects[mof_phone].id,peds[mpf_dockphone].id
,GET_PED_BONE_INDEX(peds[mpf_dockphone].id,BONETAG_PH_R_HAND),<<0,0,0>>,<<0,0,0>>)
bPhoneAdded = true
endif
endif
endif
if does_entity_exist(objects[mof_phone].id)
AND ((isentityalive(peds[mpf_dockphone].id) AND is_ped_fleeing(peds[mpf_dockphone].id))
OR NOT isentityalive(peds[mpf_dockphone].id))
if isentityalive(peds[mpf_dockphone].id)
AND IS_ENTITY_PLAYING_ANIM(peds[mpf_dockphone].id,animDictPhone,"cellphone_call_listen_c")
stop_anim_task(peds[mpf_dockphone].id,animDictPhone,"cellphone_call_listen_c")
endif
if is_entity_attached_to_any_ped(objects[mof_phone].id)
detach_entity(objects[mof_phone].id)
endif
endif
//----------------only trev can get in sub-----------------------
if GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
if ISENTITYALIVE(vehs[mvf_sub].id)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_sub].id,true)
endif
else
if ISENTITYALIVE(vehs[mvf_sub].id)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_sub].id,false)
endif
endif
endproc
proc st_1_get_to_crane()
switch mission_substage
case stage_entry
Unload_Asset_Audio_Bank(sAssetData, "PORT_OF_LS_PREP_1")
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
is_player_at_location_in_vehicle(slocatesdata,<<324.76532, -2974.49463,-1.0>>,<<0.1,0.1,LOCATE_SIZE_HEIGHT>>,true,vehs[mvf_sub].id,"dkp1_tk1","","DKP1_SUBBK",true)
if has_model_loaded(packer)
and has_model_loaded(armytrailer)
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1,"STAGE 1: Get to crane")
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(DH1P_SUB_TIME)
ADD_PED_FOR_DIALOGUE(convo_struct,1,null,"FLOYD")
SUPPRESS_RESTRICTED_AREA_WANTED_LEVEL(AC_MILITARY_DOCKS)
vehs[mvf_truck].id = create_vehicle(packer,<<298.2343, -2942.7698, 5.0003>>, 0)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_truck].id,false)
SET_VEHICLE_HAS_STRONG_AXLES(vehs[mvf_truck].id,true)
set_vehicle_colour_combination(vehs[mvf_truck].id,0)
SET_VEHICLE_TYRES_CAN_BURST(vehs[mvf_truck].id,false)
vehs[mvf_trailer].id = create_vehicle(armytrailer,<<298.27, -2951.27, 7.86>>, 0)
attach_vehicle_to_trailer(vehs[mvf_truck].id,vehs[mvf_trailer].id,0.5)
SET_TRAILER_LEGS_RAISED(vehs[mvf_trailer].id)
SET_VEHICLE_TYRES_CAN_BURST(vehs[mvf_trailer].id,false)
SET_VEHICLE_HAS_STRONG_AXLES(vehs[mvf_trailer].id,true)
bRopesCreated = false
ADD_SCENARIO_BLOCKING_AREA(<<289.08466, -2980.38159, 9.24156>>,<<320.42603, -2931.59985, 4.0>>, FALSE, TRUE, TRUE, TRUE)
bFailForStuck = TRUE
SET_AUDIO_FLAG("OnlyAllowScriptTriggerPoliceScanner", FALSE)
mission_substage++
endif
break
case 1
if init_crane()
Unload_Asset_Anim_Dict(sAssetData,AnimDictReaction)
Unload_Asset_Anim_Dict(sAssetData,AnimDictPhone)
iHelpTimer = -1
iSubHelp = 0
mission_substage++
endif
break
case 2
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehs[mvf_sub].id)
SWITCH iSubHelp
CASE 0
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
IF iHelpTimer = -1
iHelpTimer = GET_GAME_TIMER() + 5000
ENDIF
IF GET_GAME_TIMER() > iHelpTimer
PRINT_HELP("DKP1_SUBTURN")
iSubHelp++
ENDIF
ENDIF
BREAK
CASE 1
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
PRINT_HELP("SUB_HELP")
iSubHelp++
ENDIF
BREAK
ENDSWITCH
ELSE
IF iSubHelp = 0
iHelpTimer = -1
ENDIF
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DKP1_SUBTURN")
OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("SUB_HELP")
CLEAR_HELP()
ENDIF
ENDIF
ENDIF
if IS_VEHICLE_STUCK_TIMER_UP(vehs[mvf_sub].id,VEH_STUCK_JAMMED,BEACHED_TIME)
MISSION_FAILED(mff_destroyed_sub)
endif
if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),<<324.76532, -2974.49463,-1.5>>) < 150
if LOAD_STREAM("DOCKS_HEIST_PREP_1_LIFT_SUB")
println("audio stream ready")
bAUDIOStreamLoaded = true
endif
SAFE_RELEASE_OBJECT(objects[mof_button].id)
Unload_Asset_Model(sAssetData,PROP_SUB_RELEASE)
else
STOP_STREAM()
bAUDIOStreamLoaded = false
endif
if ISENTITYALIVE(peds[mpf_sec1].id)
if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(),<<1240.51318, -2880.35571, 2.10339>>,<<1240.55945, -3057.27075, 17.4>>,29.45)
or IS_PED_FLEEING(peds[mpf_sec1].id)
or GET_DISTANCE_BETWEEN_ENTITIES(player_ped_id(),peds[mpf_sec1].id) > 100
CLEAR_PED_TASKS(peds[mpf_sec1].id)
SAFE_RELEASE_PED(peds[mpf_sec1].id)
endif
endif
if ISENTITYALIVE(peds[mpf_sec2].id)
if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(),<<1240.51318, -2880.35571, 2.10339>>,<<1240.55945, -3057.27075, 17.4>>,29.45)
or IS_PED_FLEEING(peds[mpf_sec2].id)
or GET_DISTANCE_BETWEEN_ENTITIES(player_ped_id(),peds[mpf_sec2].id) > 100
CLEAR_PED_TASKS(peds[mpf_sec2].id)
SAFE_RELEASE_PED(peds[mpf_sec2].id)
endif
endif
if ISENTITYALIVE(peds[mpf_dockphone].id)
if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(),<<1240.51318, -2880.35571, 2.10339>>,<<1240.55945, -3057.27075, 17.4>>,29.45)
or IS_PED_FLEEING(peds[mpf_dockphone].id)
or GET_DISTANCE_BETWEEN_ENTITIES(player_ped_id(),peds[mpf_dockphone].id) > 100
CLEAR_PED_TASKS(peds[mpf_dockphone].id)
SAFE_RELEASE_PED(peds[mpf_dockphone].id)
endif
endif
if ISENTITYALIVE(peds[mpf_dock2].id)
if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(),<<1240.51318, -2880.35571, 2.10339>>,<<1240.55945, -3057.27075, 17.4>>,29.45)
or IS_PED_FLEEING(peds[mpf_dock2].id)
or GET_DISTANCE_BETWEEN_ENTITIES(player_ped_id(),peds[mpf_dock2].id) > 100
CLEAR_PED_TASKS(peds[mpf_dock2].id)
SAFE_RELEASE_PED(peds[mpf_dock2].id)
endif
endif
if is_player_at_location_in_vehicle(slocatesdata,<<324.76532, -2974.49463,-1.5>>,<<0.1,0.1,LOCATE_SIZE_HEIGHT>>,false,vehs[mvf_sub].id,"dkp1_tk1","","DKP1_SUBBK",true)
or (does_blip_exist(slocatesdata.locationblip)and is_entity_in_angled_area(vehs[mvf_sub].id,<<312.85571, -2974.00317, 1.19166>>,<<339.16544, -2974.34766, -6.70078>>,15)
and IS_PED_SITTING_IN_THIS_VEHICLE(player_ped_id(),vehs[mvf_sub].id))
if isentityalive(vehs[mvf_truck].id)
and isentityalive(vehs[mvf_trailer].id)
clear_mission_location_text_and_blips(slocatesdata)
RELEASE_SUPPRESSED_RESTRICTED_AREA_WANTED_LEVEL(AC_MILITARY_DOCKS)
TRIGGER_MUSIC_EVENT("DHP1_STOP")
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED()
SET_PLAYER_CONTROL(player_id(),false,SPC_LEAVE_CAMERA_CONTROL_ON)
istagedelay = get_game_timer()
mission_substage++
endif
else
if GET_PLAYER_WANTED_LEVEL(player_id()) = 0
and does_blip_exist(slocatesdata.locationblip)
DRAW_MARKER(MARKER_RING,<<324.76532, -2974.49463,-3.5>>,<<0,0,0>>,<<0,0,0>>,<<5,5,5>>,255,255,0,65)
endif
endif
break
case 3
if IS_VEHICLE_ALMOST_STOPPED(vehs[mvf_sub].id)
or get_game_timer() - iStageDelay > 3500
//cam
cameraindex = create_camera_with_params(camtype_scripted,<<341.641937,-2965.524902,4.037704>>,<<17.066954,0.473599,112.444778>>,34.00000)
set_cam_active(cameraindex,true)
SHAKE_CAM(cameraIndex,"HAND_SHAKE",0.4)
SET_CAM_PARAMS(cameraIndex,<<341.641937,-2965.524902,4.037704>>,<<-4.346406,0.473595,112.444778>>,34.000000, 6000)
prep_start_cutscene(false,<<340.6675, -2964.0103, 1.4937>>)
Load_Asset_Model(sAssetData, PROP_TARP_STRAP)
//sub
SET_ENTITY_COORDS(vehs[mvf_sub].id,vsub)
SET_ENTITY_HEADING(vehs[mvf_sub].id,hsub)
istagedelay = get_game_timer()
icranestage = 0
REPLAY_RECORD_BACK_FOR_TIME(8.0, 0.0, REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
else
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(vehs[mvf_sub].id,7)
endif
break
case 4
if crane_cs()
mission_substage++
endif
break
case 5
if HAS_CUTSCENE_LOADED()
AND HAS_MODEL_LOADED(PROP_TARP_STRAP)
REGISTER_ENTITY_FOR_CUTSCENE(vehs[mvf_truck].id, "DockHeist_truck", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
REGISTER_ENTITY_FOR_CUTSCENE(vehs[mvf_sub].id, "submarine", CU_ANIMATE_EXISTING_SCRIPT_ENTITY,SUBMERSIBLE)
REGISTER_ENTITY_FOR_CUTSCENE(vehs[mvf_trailer].id, "dockheist_trailer", CU_ANIMATE_EXISTING_SCRIPT_ENTITY,ARMYTRAILER)
REGISTER_ENTITY_FOR_CUTSCENE(null, "sub_cover", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY,PROP_SUB_COVER_01)
REGISTER_ENTITY_FOR_CUTSCENE(null, "Floyd", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY,IG_FLOYD)
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Trevor",player_ped_id())
SET_VEHICLE_LIGHTS(vehs[mvf_truck].id, FORCE_VEHICLE_LIGHTS_OFF)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_truck].id,true)
SET_ALL_EXIT_STATES()
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, TRUE, FALSE)
START_CUTSCENE()
mission_substage++
endif
break
case 6
// 1985471
IF IS_CUTSCENE_PLAYING()
IF IS_IPL_ACTIVE( "PO1_08_sub_waterplane" )
REMOVE_IPL( "PO1_08_sub_waterplane" )
ENDIF
ENDIF
if CAN_SET_EXIT_STATE_FOR_CAMERA()
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
REPLAY_STOP_EVENT()
endif
if NOT DOES_ENTITY_EXIST(peds[mpf_floyd].id)
if DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Floyd"))
peds[mpf_floyd].id = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Floyd"))
ADD_PED_FOR_DIALOGUE(convo_struct,1,peds[mpf_floyd].id,"FLOYD")
set_ped_relationship_group_hash(peds[mpf_floyd].id,rel_buddy)
println("Grabbed Floyd")
endif
endif
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor")
println("trev")
bcs_trev = true
endif
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Floyd")
println("Floyd")
bcs_Floyd = true
endif
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("DockHeist_truck")
SET_VEHICLE_USE_CUTSCENE_WHEEL_COMPRESSION(vehs[mvf_truck].id, TRUE, FALSE, FALSE)
SET_VEHICLE_DOORS_SHUT(vehs[mvf_truck].id,true) //[MF] Fix for B* 1781720
println("truck")
bcs_truck = true
endif
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("DockHeist_trailer")
SET_VEHICLE_USE_CUTSCENE_WHEEL_COMPRESSION(vehs[mvf_trailer].id, TRUE, FALSE, FALSE)
println("trailer")
bcs_trailer = true
endif
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("submarine")
println("sub")
bcs_sub = true
endif
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("sub_cover")
println("cover")
bcs_cover= true
elif NOT DOES_ENTITY_EXIST(objects[mof_subCover].id)
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("sub_cover",PROP_SUB_COVER_01))
objects[mof_subCover].id = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("sub_cover",PROP_SUB_COVER_01))
println("grabbed cover")
ENDIF
endif
INT iLightsOn, iFullBeam
if GET_VEHICLE_LIGHTS_STATE(vehs[mvf_truck].id, iLightsOn, iFullBeam)
if iLightsOn = 0
if GET_CUTSCENE_TIME() >= 14200
SET_VEHICLE_LIGHTS(vehs[mvf_truck].id, SET_VEHICLE_LIGHTS_ON)
endif
endif
endif
if bcs_trev
and bcs_floyd
and bcs_truck
and bcs_sub
and bcs_cover
and bcs_trailer
IF IS_SCREEN_FADED_IN()
OR HAVE_ALL_STREAMING_REQUESTS_COMPLETED(peds[mpf_floyd].id)
SET_PED_INTO_VEHICLE(peds[mpf_floyd].id,vehs[mvf_truck].id,VS_FRONT_RIGHT)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(),vehs[mvf_truck].id)
attach_vehicle_on_to_trailer(vehs[mvf_sub].id,vehs[mvf_trailer].id,<<0,-4,-0.7>>,<<0,0,0>>,<<0,0,0>>,-1)
set_vehicle_is_considered_by_player(vehs[mvf_sub].id,false)
SET_VEHICLE_DOORS_SHUT(vehs[mvf_sub].id,true)
SET_VEHICLE_DOORS_LOCKED(vehs[mvf_sub].id,VEHICLELOCK_CANNOT_ENTER)
set_vehicle_engine_on(vehs[mvf_sub].id,false,true)
set_vehicle_lights(vehs[mvf_sub].id,force_vehicle_lights_off)
SET_VEHICLE_RADIO_ENABLED(vehs[mvf_sub].id, FALSE)
attach_entity_to_entity(objects[mof_subcover].id,vehs[mvf_trailer].id,-1,vTarpOffset,<<0,0,0>>)
// objects[mof_subStraps].id = create_object(PROP_FLATBED_STRAP_B, <<-332.8449,-2622.1572,8.7838>>)
// attach_entity_to_entity(objects[mof_subStraps].id,vehs[mvf_trailer].id,-1, vStrapOffset,<<0,0,0>>)
objects[mof_subStraps].id = create_object(PROP_TARP_STRAP, <<-332.8449,-2622.1572,8.7838>>)
attach_entity_to_entity(objects[mof_subStraps].id,vehs[mvf_trailer].id,-1, vTarpOffset,<<0,0,0>>)
prep_stop_cutscene(true,false)
Unload_Asset_PTFX(sAssetData)
mission_substage++
ENDIF
endif
break
case 7
mission_set_stage(MSF_2_SAFETY)
mission_substage = stage_entry
break
endswitch
//blip route to crane
if does_blip_exist(slocatesdata.locationblip)
set_blip_route(slocatesdata.locationblip,false)
endif
if ISENTITYALIVE(player_ped_id())
and ISENTITYALIVE(vehs[mvf_sub].id)
if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(player_ped_id()),<<324.76532, -2974.49463,-1.0>>) > 2500
MISSION_FAILED(mff_left_area)
endif
endif
endproc
proc st_2_safety()
switch mission_substage
case stage_entry
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(2,"STAGE 2: Drop off sub", TRUE)
if ISENTITYALIVE(vehs[mvf_sub].id)
SET_ENTITY_PROOFS(vehs[mvf_sub].id,false,false,false,true,false)
endif
SET_VEHICLE_CAN_BE_VISIBLY_DAMAGED(vehs[mvf_sub].id, FALSE)
SET_VEHICLE_CAN_BE_VISIBLY_DAMAGED(vehs[mvf_trailer].id, FALSE)
SET_IGNORE_NO_GPS_FLAG(TRUE)
SET_GPS_DISABLED_ZONE(<<288.09674, -3133.24854, 0>>,<<301.06049, -2969.62231, 11.47017>>)
SET_CAN_CLIMB_ON_ENTITY(vehs[mvf_sub].id, FALSE)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_sub].id, FALSE)
REPLAY_RECORD_BACK_FOR_TIME(0.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
bLoadstage = false
bcreateScene = false
mission_substage++
break
case 1
if ISENTITYALIVE(player_ped_id())
and ISENTITYALIVE(vehs[mvf_sub].id)
if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(player_ped_id()), GET_ENTITY_COORDS(vehs[mvf_sub].id)) > 400
AND (NOT IS_ENTITY_ON_SCREEN(vehs[mvf_sub].id))
MISSION_FAILED(mff_left_area)
endif
endif
if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),<<324.76532, -2974.49463,-1.5>>) > 150
SAFE_RELEASE_OBJECT(objects[mof_cranecab].id)
SAFE_RELEASE_OBJECT(objects[mof_cranehook].id)
SAFE_RELEASE_OBJECT(objects[mof_craneLD].id)
Unload_Asset_Model(sAssetData,PROP_DOCK_CRANE_02_LD)
Unload_Asset_Model(sAssetData,PROP_DOCK_CRANE_02_CAB)
Unload_Asset_Model(sAssetData,PROP_DOCK_CRANE_02_HOOK)
endif
if not bloadstage
and GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),vWAREHOUSE) < 200
Load_Asset_Model(sAssetData,BISON)
bcreateScene = true
bLoadstage = true
elif bLoadstage
if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),vWAREHOUSE) > 220
Unload_Asset_Model(sAssetData,bison)
bcreateScene = false
bLoadstage = false
IF DOES_ENTITY_EXIST(vehs[mvf_bison].id)
DELETE_VEHICLE(vehs[mvf_bison].id)
ENDIF
elif GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),vWAREHOUSE) < 200
if bcreateScene
and HAS_MODEL_LOADED(bison)
IF NOT DOES_ENTITY_EXIST(vehs[mvf_bison].id)
vehs[mvf_bison].id = CREATE_VEHICLE(BISON,<<-317.0741, -2594.1404, 5.0004>>, 316.2352)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_bison].id,false)
ENDIF
bcreateScene = false
endif
endif
endif
if IS_ENTITY_ATTACHED_TO_ENTITY(vehs[mvf_trailer].id, GET_PLAYERS_LAST_VEHICLE())
or (is_entity_in_angled_area(vehs[mvf_truck].id,<<-333.60571, -2623.68091, 5.00103>>,<<-350.12717, -2640.33911, 12.65742>>,15)
and is_entity_in_angled_area(peds[mpf_floyd].id,<<-333.60571, -2623.68091, 5.00103>>,<<-350.12717, -2640.33911, 12.65742>>,15)
and is_entity_in_angled_area(vehs[mvf_sub].id, <<-333.60571, -2623.68091, 5.00103>>,<<-350.12717, -2640.33911, 12.65742>>,15))
if ISENTITYALIVE(vehs[mvf_trailer].id)
SET_TRAILER_INVERSE_MASS_SCALE(vehs[mvf_trailer].id,0.5)
endif
if DOES_BLIP_EXIST(sLocatesData.LocationBlip)
SET_BLIP_EXTENDED_HEIGHT_THRESHOLD(sLocatesData.LocationBlip,true)
endif
if DOES_BLIP_EXIST(blip_objective)
REMOVE_BLIP(blip_objective)
endif
if battachprint
CLEAR_PRINTS()
battachprint = false
endif
if is_player_at_location_with_buddies_in_vehicle(slocatesdata,vWAREHOUSE,<<0.1,0.1,LOCATE_SIZE_HEIGHT>>,true
,peds[mpf_floyd].id,null,null,GET_PLAYERS_LAST_VEHICLE(),"dkp1_tk2","DKP1_ABFLD","","","","DKP1_TRUCK","DKP1_TRUCKBK",false,true)
or (does_blip_exist(slocatesdata.locationblip)and is_entity_in_angled_area(GET_PLAYERS_LAST_VEHICLE(),<<-340.132446,-2630.242676,5.001461>>, <<-346.550751,-2636.807617,12.688959>>, 14.937500))
REMOVE_SCENARIO_BLOCKING_AREAS()
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()),7,-1)
set_vehicle_is_considered_by_player(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()),false)
set_vehicle_is_considered_by_player(vehs[mvf_sub].id,false)
SET_VEHICLE_DOORS_LOCKED(vehs[mvf_sub].id,VEHICLELOCK_CANNOT_ENTER)
clear_mission_locate_stuff(slocatesdata)
SET_IGNORE_NO_GPS_FLAG(false)
SET_GPS_DISABLED_ZONE(<<0,0,0>>,<<0,0,0>>)
iStageDelay = get_Game_timer()
bFailForStuck = FALSE
mission_substage++
endif
elif NOT IS_ENTITY_ATTACHED_TO_ENTITY(vehs[mvf_trailer].id, GET_PLAYERS_LAST_VEHICLE()) //vehs[mvf_truck].id)
CLEAR_MISSION_LOCATION_BLIP(sLocatesData)
if not DOES_BLIP_EXIST(blip_objective)
blip_objective = CREATE_BLIP_FOR_VEHICLE(vehs[mvf_sub].id)
endif
if not battachprint
and IS_SAFE_TO_DISPLAY_GODTEXT()
PRINT_NOW("DKP1_ATTACH",DEFAULT_GOD_TEXT_TIME,1)
battachprint = true
endif
endif
break
case 2
if not IS_PED_IN_ANY_VEHICLE(player_ped_id())
if CREATE_CONVERSATION(convo_struct,"DHP1AUD","DHP1_END",CONV_PRIORITY_MEDIUM)
SET_PED_KEEP_TASK(peds[mpf_floyd].id,true)
TASK_LOOK_AT_ENTITY(peds[mpf_floyd].id,player_ped_id(),-1,SLF_WHILE_NOT_IN_FOV)
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_LEAVE_ANY_VEHICLE(null)
TASK_GO_TO_ENTITY(null,player_ped_id(),DEFAULT_TIME_NEVER_WARP,3, PEDMOVE_WALK)
TASK_TURN_PED_TO_FACE_ENTITY(null,player_ped_id(),-1)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_floyd].id,seq)
CLEAR_SEQUENCE_TASK(seq)
mission_substage++
endif
else
if not b_displayGodText
and IS_SAFE_TO_DISPLAY_GODTEXT()
and get_game_timer() - iStageDelay > 3000
PRINT_NOW("dkp1_EXIT",DEFAULT_GOD_TEXT_TIME,1)
REPLAY_RECORD_BACK_FOR_TIME(10.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
b_displayGodText = true
endif
endif
break
case 3
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if ISENTITYALIVE(vehs[mvf_bison].id)
CLEAR_PED_TASKS(peds[mpf_floyd].id)
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_ENTER_VEHICLE(null,vehs[mvf_bison].id,default_time_never_warp,VS_DRIVER,PEDMOVEBLENDRATIO_RUN)
//TASK_VEHICLE_DRIVE_WANDER(null,vehs[mvf_bison].id,30,DRIVINGMODE_AVOIDCARS)
TASK_VEHICLE_MISSION_COORS_TARGET(null, vehs[mvf_bison].id, <<-189.8985, -2622.7070, 5.0001>>, MISSION_GOTO_RACING, 30.0, DRIVINGMODE_AVOIDCARS_RECKLESS, 5.0, 1.0, TRUE)
TASK_VEHICLE_MISSION_PED_TARGET(null, vehs[mvf_bison].id, PLAYER_PED_ID(), MISSION_FLEE, 30, DRIVINGMODE_AVOIDCARS_RECKLESS, 1000, 10, TRUE)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(peds[mpf_floyd].id,seq)
CLEAR_SEQUENCE_TASK(seq)
else
CLEAR_PED_TASKS(peds[mpf_floyd].id)
TASK_SMART_FLEE_COORD(peds[mpf_floyd].id,vWAREHOUSE,300,-1)
endif
iStageDelay = get_game_timer()
mission_substage++
endif
break
case 4
if GET_DISTANCE_BETWEEN_ENTITIES(peds[mpf_floyd].id,player_ped_id()) > 70
or get_Game_timer() - iStageDelay > 20000
SAFE_RELEASE_PED(peds[mpf_floyd].id)
mission_passed()
endif
break
endswitch
endproc
proc st_3_passed()
switch mission_substage
case stage_entry
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
SET_GAMEPLAY_CAM_RELATIVE_HEADING(180)
mission_substage++
break
case 1
if IS_SCREEN_FADED_IN()
mission_passed()
endif
break
endswitch
endproc
// -----------------------------------------------------------------------------------------------------------
// MISSION FLOW
// -----------------------------------------------------------------------------------------------------------
PROC MISSION_FLOW()
SWITCH INT_TO_ENUM(MSF_MISSION_STAGE_FLAGS, MISSION_STAGE)
CASE MSF_0_REACHED_SUB ST_0_REACHED_SUB() BREAK
CASE MSF_1_GET_TO_CRANE ST_1_GET_TO_CRANE() BREAK
CASE MSF_2_SAFETY st_2_safety() BREAK
CASE msf_3_passed st_3_passed() BREAK
ENDSWITCH
ENDPROC
#IF IS_DEBUG_BUILD
PROC DO_DEBUG()
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_HOME)
bDisplayDebug = !bDisplayDebug
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(bDisplayDebug)
ENDIF
IF bDisplayDebug
TEXT_LABEL_63 strDebug
strDebug = "Mission Stage: "
strDebug += mission_stage
DRAW_DEBUG_TEXT_2D(strDebug, <<0.1,0.5,0.0>>, 0,0,0, 255)
strDebug = "Mission Substage: "
strDebug += mission_substage
DRAW_DEBUG_TEXT_2D(strDebug, <<0.1,0.525,0.0>>, 0,0,0, 255)
strDebug = "Mission Stage: "
strDebug += mission_stage
DRAW_DEBUG_TEXT_2D(strDebug, <<0.1,0.5,0.0>>, 0,0,0, 255)
strDebug = "AI Stage: "
strDebug += enum_to_int(eAI_stage)
DRAW_DEBUG_TEXT_2D(strDebug, <<0.1,0.55,0.0>>, 0,0,0, 255)
strDebug = "AI Substage: "
strDebug += enum_to_int(eCalm_stage)
DRAW_DEBUG_TEXT_2D(strDebug, <<0.1,0.575,0.0>>, 0,0,0, 255)
strDebug = "bBoardedShip: "
IF bBoardedShip
strDebug += "TRUE"
ELSE
strDebug += "FALSE"
ENDIF
DRAW_DEBUG_TEXT_2D(strDebug, <<0.1,0.6,0.0>>, 0,0,0, 255)
strDebug = "debug_bCurrentlyOnShip: "
IF debug_bCurrentlyOnShip
strDebug += "TRUE"
ELSE
strDebug += "FALSE"
ENDIF
DRAW_DEBUG_TEXT_2D(strDebug, <<0.1,0.625,0.0>>, 0,0,0, 255)
ENDIF
debug_bCurrentlyOnShip = FALSE
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)
MISSION_PASSED()
ELIF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)
MISSION_FAILED(MFF_DEBUG_FAIL)
ENDIF
ENDPROC
#ENDIF
// ===========================================================================================================
// SCRIPT LOOP
// ===========================================================================================================
SCRIPT
PRINTSTRING("...DOCKS PREP 1 MISSION LAUNCHED")
PRINTNL()
IF HAS_FORCE_CLEANUP_OCCURRED()
TRIGGER_MUSIC_EVENT("DHP1_FAIL")
PRINTSTRING("...DOCKS PREP 1 MISSION FORCE CLEANUP")
PRINTNL()
SET_REPLAY_ACCEPTED_WARP_LOCATION()
MISSION_FLOW_MISSION_FORCE_CLEANUP()
if IS_CUTSCENE_ACTIVE()
SET_CUTSCENE_FADE_VALUES()
endif
MISSION_CLEANUP()
ENDIF
SET_MISSION_FLAG(TRUE)
#IF IS_DEBUG_BUILD
//Z MENU FOR SKIPPING STAGES
ZMENUNAMES[MSF_0_REACHED_SUB].STXTLABEL = "STAGE 0: REACHED SUB"
ZMENUNAMES[MSF_1_GET_TO_CRANE].STXTLABEL = "STAGE 1: GET TO CRANE"
ZMENUNAMES[MSF_2_SAFETY].STXTLABEL = "STAGE 3: SAFETY"
ZMENUNAMES[msf_3_passed].STXTLABEL = "------- PASSED -------"
WIDGET_DEBUG = START_WIDGET_GROUP("GET MINI-SUB MENU")
ADD_WIDGET_FLOAT_SLIDER("ROPE LENGTH",WFROPELENGTH,1,25,0.5)
ADD_WIDGET_INT_READ_ONLY("AI 0=norm 1=stealth 2=warn 3=alarm):",wAIstage)
ADD_WIDGET_INT_READ_ONLY("calm(0=w1, 1=w2, 2=police) :",wCalm_stage)
ADD_WIDGET_INT_READ_ONLY("alarm(1=gun,2=exp,3=sub,4=cops,5=flee):",wAlarm_stage)
START_WIDGET_GROUP("CRANE")
ADD_WIDGET_VECTOR_SLIDER("LD V:",vcraneLD,-4000,2000,0.001)
ADD_WIDGET_FLOAT_SLIDER("LD H:",hcraneLD,0,360,0.5)
ADD_WIDGET_VECTOR_SLIDER("cab offset:",voffsetcab,-4000,2000,0.001)
ADD_WIDGET_FLOAT_SLIDER("cab H:",hcranecab,0,360,0.5)
ADD_WIDGET_VECTOR_SLIDER("hook offset:",voffsethook,-4000,2000,0.001)
ADD_WIDGET_FLOAT_SLIDER("hook H:",hcranehook,0,360,0.5)
ADD_WIDGET_VECTOR_SLIDER("sub pos:",vsub,-4000,2000,0.001)
ADD_WIDGET_FLOAT_SLIDER("hook H:",hsub,0,360,0.5)
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
SET_LOCATES_HEADER_WIDGET_GROUP(WIDGET_DEBUG)
#ENDIF
//INITIALIZE MISSION
MISSION_SETUP()
WHILE (TRUE)
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_ThePortOfLSHeistPrep1")
//prestreaming loop
Update_Asset_Management_System(sAssetData) // Deals with loading any assets and keeps track of what has been loaded
Update_Cutscene_Prestreaming(sCutscenePedVariationRegister)
//MAIN MISSION LOOP
MISSION_STAGE_MANAGEMENT()
MISSION_STAGE_SKIP()
if not bDoSkip
MISSION_CHECKS()
mission_flow()
endif
#IF IS_DEBUG_BUILD
DO_DEBUG()
#ENDIF
WAIT(0)
ENDWHILE
ENDSCRIPT