Files
2025-09-29 00:52:08 +02:00

5433 lines
192 KiB
Python
Executable File

//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
USING "rage_builtins.sch"
USING "globals.sch"
USING "CompletionPercentage_public.sch"
USING "commands_entity.sch"
USING "commands_script.sch"
USING "cutscene_public.sch"
USING "script_player.sch"
USING "commands_shapetest.sch"
USING "randomChar_public.sch"
USING "RC_Helper_Functions.sch"
USING "RC_Threat_public.sch"
USING "RC_Area_public.sch"
USING "RC_Pedsight_public.sch"
USING "commands_recording.sch"
USING "mp_scaleform_functions.sch"
USING "initial_scenes_Paparazzo.sch"
#IF IS_DEBUG_BUILD
USING "select_mission_stage.sch"
#ENDIF
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : Paparazzo3B.sc
// AUTHOR : Joe Binks/Tom Kingsley
// DESCRIPTION :
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
g_structRCScriptArgs sRCLauncherDataLocal
ENUM MISSION_STAGE
MS_INIT,
MS_INITIAL_PHONE,
MS_GO_TO_LOCATION,
MS_MEET_CONTACT,
MS_TAKE_PHOTO,
MS_LEAVE_AREA,
MS_ESCAPE_SECURITY,
MS_END_PHONE_CALL,
MS_MISSION_FAILED
ENDENUM
ENUM SUB_STAGE
SS_SETUP = 0,
SS_UPDATE,
SS_CLEANUP
ENDENUM
// Fail reasons
ENUM FAIL_REASON
FAIL_DEFAULT,
FAIL_PHOTO_LOST,
FAIL_SPOTTED,
FAIL_PRINCESS_INJURED,
FAIL_PRINCESS_KILLED,
FAIL_CONTACT_THREAT,
FAIL_CONTACT_KILLED
ENDENUM
ENUM SECURITY_STATE
SS_GUARD_AREA,
SS_WARN_PLAYER,
SS_ENTER_VEHICLE,
SS_DRIVER_TO_PLAYER,
SS_LEAVE_VEHICLE,
SS_LEAVE_AREA,
SS_DRIVE_AWAY_FROM_AREA,
SS_DRIVE_OUT_OF_ALLEY,
SS_DRIVE_WANDER,
SS_WAIT_AIM_AT_GOONS,
SS_AIM_AT_GOONS,
SS_INVESTIGATE,
SS_ATTACK_GOONS,
SS_ATTACK_PLAYER_MELEE,
SS_ATTACK_PLAYER_GUNS,
SS_MOVING_TO_GOONS,
SS_ATTACK_PLAYER_CAR
ENDENUM
ENUM PRINCESS_STATE
SP_WAIT,
SP_SMOKE,
SP_ENTER_VEHICLE,
SP_FLEE_IN_VEHICLE,
SP_FLEE_ON_FOOT,
SP_WANDER,
SP_LOOK_AT_PLAYER
ENDENUM
ENUM GOON_STATE
GS_WAIT,
GS_WAIT_AIM_AT_SECURITY,
GS_AIM_AT_SECURITY,
GS_SHOOT_SECURITY,
GS_FLEE_AREA
ENDENUM
ENUM DEALER_STATE
DS_WAIT,
DS_FLEE,
DS_CALM_DOWN,
DS_WAIT_FOR_FLEE,
DS_LEAVE_AREA
ENDENUM
// MISSION PED
STRUCT MISSION_PED
PED_INDEX mPed
VECTOR vStartPos
FLOAT fStartHeading
MODEL_NAMES mModel
STRING sIntialAnim
BOOL bImDead
BLIP_INDEX mBlip
ENDSTRUCT
// MISSION VEHICLE
STRUCT MISSION_VEHICLE
VEHICLE_INDEX mVehicle
VECTOR vStartPos
FLOAT fStartHeading
MODEL_NAMES mModel
ENDSTRUCT
// MISSION PROPS
STRUCT MISSION_PROP
OBJECT_INDEX mObject
VECTOR vStartPos
FLOAT fStartHeading
MODEL_NAMES mModel
ENDSTRUCT
MISSION_STAGE missionStage = MS_INIT
SUB_STAGE eSubStage = SS_SETUP
PRINCESS_STATE ePrincessState = SP_WAIT
DEALER_STATE eDealerState = DS_WAIT
// STAGE SKIPPING
#IF IS_DEBUG_BUILD
CONST_INT MAX_SKIP_MENU_LENGTH 5
MissionStageMenuTextStruct mSkipMenu[MAX_SKIP_MENU_LENGTH]
#ENDIF
MISSION_STAGE eTargetStage
BOOL bFinishedSkipping
//----------------------
// CHECKPOINTS
//----------------------
CONST_INT CP_PHONE_CALL 0
CONST_INT CP_AT_PRINCESS_LOCATION 1
CONST_INT CP_MISSION_PASSED 2
CONST_INT Z_SKIP_PHONE_CALL 1
CONST_INT Z_SKIP_AT_PRINCESS_LOCATION 3
TEXT_LABEL_23 labelRetrig
INT iSubsDealer
CONST_INT NUM_OF_SECURITY_PEDS 4
CONST_INT NUM_OF_SECURITY_CARS 2
CONST_INT NUM_OF_DEALER_GOONS 2
//BLIPS
BLIP_INDEX biMissionBlip
SCENARIO_BLOCKING_INDEX sbiChicoRear
SCENARIO_BLOCKING_INDEX sbiVehAttractor
OBJECT_INDEX objWeedBag
OBJECT_INDEX objCash
//OBJECT_INDEX objFakeGuard
//OBJECT_INDEX objFakeDealer
INT issDealidles
INT issDeal
//PEDS
MISSION_PED mSecurityPed[NUM_OF_SECURITY_PEDS]
MISSION_PED mpPrincess
MISSION_PED mpDrugDealer
MISSION_PED mpDealerGoons[NUM_OF_DEALER_GOONS]
MISSION_PED mpDealerContact
//VEHICLES
MISSION_VEHICLE mvSecurityCars[NUM_OF_SECURITY_CARS]
MISSION_VEHICLE mvDealerCar
MISSION_VEHICLE mvClimbingTruck
//PROPS
MISSION_PROP oiSmokeWeed
//BOOLS
BOOL bMainObjectiveDisplayed //HAS THE MAIN OBJECTIVE BEEN DISPLAYED
BOOL bPrincessSceneCreated //HAS THE SCENE BEEN CREATED
BOOL b_Correct_Pic_Taken //WAS THE CORRECT PICTURE TAKEN
BOOL bPhotoSent //HAS THE PHOTO BEEN SENT TO BEVERLY
BOOL bSecurityAttacking //IF THE SECURITY ARE ATTACKING THE PLAYER
BOOL bSecurityNoticedPlayer //IF THE SECURITY HAVE NOTICED THE PLAYER
BOOL bConversationActive //IF A CONVERSATION IS ACTIVE
BOOL bHadEndPhoneCall //IF THE PLAYER HAS HAD END PHONECALL
BOOL bLeavingDrugScene //IF THE PEDS ARE LEAVING DRUG SCENE
BOOL bPlayerSpotted //IF THE PLAYER HAS BEEN SPOTTED BY SECURITY
BOOL bBeverlyCalled //IF THE PLAYER HANGS AROUND LONG ENOUGH FOR BEVERLY TO CALL
BOOL bFailDialogue // DIALOGUE PLAYER AT END OF MISSION WHEN FAILING
//BOOL bAlreadyLeft // the player left the area before sending the photo
BOOL bEnteredAlley // has the player entered the alley area? Used for failing if the player hangs around too long
BOOL bSecurityWarned // Have the security guys on the left hand side warned the player?
BOOL bForceCrouching // Should we force the player to crouch when approaching the alley?
BOOL bSetRel
BOOL bKickedOffDealerConvo
//BOOL bBadPicSent
BOOL bCarAlarm
BOOL bAlleyWarning
BOOL bWhosThatGuy
BOOL bPicTaken
BOOL bTooFarAway
BOOL bSweetTxtSent
BOOL bPicSent
BOOL bLeavingScene
BOOL bPrintLoseCops
BOOL bPrintLeaveArea
BOOL bSecPed3AchHead
BOOL bWrongContact
BOOL bGoGoDealerConvo
BOOL bDoFirstConvoLine
BOOL bSkippedSS
BOOL bSimpleHelp
INT iHelp
BOOL bHelpPrint1
BOOL bHelpPrint2
BOOL bHelpPrint3
BOOL bPrintNonSimpleHelp
BOOL bHelpPrint8
BOOL bMissionFailed
BOOL bDealersTempEventsUnblocked
BOOL bPrincessStartedSyncedScene
//TIMERS
INT iLeaveSceneTimer // Makes everyone leave the drug deal after an amount of time
INT iNoticeInAlleyTimer // Makes security notice the player if they're in the alley for too long
INT iTriggerPhoneTimer // Makes Beverly phone if the player doesn't leave the deal quickly
INT iGoonTimer // Makes the drug goons attack the security
INT iSecurityTimer // Makes the security aim at the drug goons
INT iIndividualLeaveTimer // Delays each ped leaving the drug deal to make it look more natural
//INT iBumpContactTimer // The check for the player bumping into the contact
INT iTimerPicTaken
INT iSecurityEvaded
INT iSecurityDead
INT iSecurityBlipped
INT iFramesPlayerNotInCoverNextToCar
INT iFramesPlayerMakingNoise
INT iFramesPlayerOnRoof
INT iTimerSecWary
INT iTimerSmokeIdle
INT iBevTxtsBadPic
INT iBevTxtsTooFarAway
INT iSeqGuyDriveRoundBack
INT iPlayerInLeftAlley
INT iSeqSecThreaten
INT iPrincessShoutLines
INT iPrincessShoutTimer
INT iTimerTakePhotoStage
INT iSeqDeal
INT iSubSwitch
INT iRetrigger
INT iCounterContactWalkOff
INT iTimerGuard3Investigate
INT iCounterGaurd3Investigate
INT iPanicConvo // Counter for playing a couple lines if player gets spotted
//STRING sBumpLines[2]
//INT iCurrentBumpLine = 0
//STATES
SECURITY_STATE eSecurityState[NUM_OF_SECURITY_PEDS]
GOON_STATE eGoonState[NUM_OF_DEALER_GOONS]
//STRINGS
FAIL_REASON eFailReason
//VECTORS
VECTOR vPrincessInitialLocation = <<1070.36, -776.11, 58.25>>
VECTOR vAlleyInvestigateLoc = << 1068.5176, -789.5724, 57.2626 >>
VECTOR vLastPlayerCoords
//FLOATS
CONST_FLOAT STOP_DIS 20.0
CONST_FLOAT CONTACT_DIS 5.0
CONST_FLOAT LEAVE_DIS 50.0
//POLY AREAS
TEST_POLY tpSpotArea //USED TO CREATE AN AREA WHERE PLAYER CAN BE SPOTTED
TEST_POLY tpLeaveArea //USED TO SEE IF THE PLAYER HAS LEFT THE AREA
TEST_POLY tpBackAwayArea //USED IF PLAYER IS TRYING TO ENTER LEFT ENTRANCE
TEST_POLY tpAlleyArea //USED IF THE PLAYER IS IN THE ALLEY
TEST_POLY tpCrouchArea //USED TO MAKE THE PLAYER CROUCH WHEN APPROACHING THE ALLEY
//Relationship groups
//REL_GROUP_HASH relHatePlayer
REL_GROUP_HASH relPrincess
REL_GROUP_HASH relDealers
// CONVERSATIONS
structPedsForConversation sSpeach
CONST_INT FRANKLIN_ID 1
CONST_INT BEVERLY_ID 3
CONST_INT GUARD_ONE_ID 4
CONST_INT GUARD_TWO_ID 7
CONST_INT PRINCESS_ID 5
CONST_INT DEALER_ID 6
CONST_INT GOON_ID 8
STRING ANIM_DICT = "rcmpaparazzo_3b"
STRING DEALER_ANIM_DICT = "amb@world_human_stand_impatient@male@no_sign@idle_a"
STRING DEALER_ANIM_DICT_2 = "amb@world_human_stand_impatient@male@no_sign@base"
//STRING PRINCESS_ANIM = "idle_b"
//STRING DEALER_ANIM = "idle_a"
//STRING CONTACT_ANIM = "idle_c"
//STRING GOON_0_ANIM = "base"
//STRING GOON_1_ANIM = "idle_b"
INT iSightTestID = -1
//INIT ARRAYS
/// PURPOSE:
/// Loads all the inital arrays - PED LOCATIONS etc.
PROC INIT_ARRAYS
//PEDS
//SECURITY
mSecurityPed[0].vStartPos = <<1083.619141,-795.724792,58.307529>>
mSecurityPed[0].fStartHeading = 6.896940//352.0
mSecurityPed[0].mModel = S_M_M_HIGHSEC_02
mSecurityPed[1].vStartPos = <<1087.099854,-792.740479,58.274784>>//<<1087.332031,-793.597656,58.278053>>//<< 1085.7023, -792.9296, 57.2656 >>
mSecurityPed[1].fStartHeading = 94.733353//34.0
mSecurityPed[1].mModel = S_M_M_HIGHSEC_01
mSecurityPed[2].vStartPos = << 1110.2434, -781.5825, 57.2626 >>
mSecurityPed[2].fStartHeading = 8.0
mSecurityPed[2].mModel = S_M_M_HIGHSEC_02
mSecurityPed[3].vStartPos = <<1108.882690,-782.282959,58.262680>>//<< 1107.3772, -781.2589, 57.2626 >>
mSecurityPed[3].fStartHeading = -0.550270
mSecurityPed[3].mModel = S_M_M_HIGHSEC_01
//PRINCESS
mpPrincess.vStartPos = << 1084.57, -794.883, 58.3022 >>
mpPrincess.fStartHeading = 114.527542
mpPrincess.mModel = U_F_Y_Princess
//DRUG DEALER
mpDrugDealer.vStartPos = <<1084.756348,-793.635803,58.290344>>
mpDrugDealer.fStartHeading = -160.000000
mpDrugDealer.mModel = S_M_Y_DEALER_01//G_M_Y_MexGoon_03
//DEALER GOONS
mpDealerGoons[0].vStartPos = <<1074.095215,-789.950806,58.284847>>
mpDealerGoons[0].fStartHeading = -101.459152
mpDealerGoons[0].mModel = G_M_Y_MexGoon_03
mpDealerGoons[1].vStartPos = <<1083.942749,-789.526184,58.273258>>
mpDealerGoons[1].fStartHeading = -171.793823
mpDealerGoons[1].mModel = G_M_Y_MexGoon_03
// PLAYER'S CONTACT
mpDealerContact.vStartPos = vPrincessInitialLocation
mpDealerContact.fStartHeading = 35.52//0.0
mpDealerContact.mModel = G_M_Y_MEXGOON_03
//VEHICLES
//SECURITY CARS
mvSecurityCars[0].vStartPos = <<1086.702515,-796.687683,57.768784>>//<<1086.236694,-796.235229,57.770428>>//<< 1085.5811, -794.9450, 57.2865 >>
mvSecurityCars[0].fStartHeading = -58.433346//-61.270905
mvSecurityCars[0].mModel = landstalker
mvSecurityCars[1].vStartPos = <<1110.9280, -789.2598, 57.2627>>//<<1112.42, -784.03, 57.76>>//<< 1112.6432, -781.8356, 57.2626 >>
mvSecurityCars[1].fStartHeading = 0//1.5
mvSecurityCars[1].mModel = landstalker
mvDealerCar.vStartPos = <<1071.817627,-790.166748,57.620956>>//<< 1071.9553, -790.5126, 57.2626 >>
mvDealerCar.fStartHeading = 176.838257//194.0
mvDealerCar.mModel = buccaneer
/*
mvDealerCar.vStartPos = <<1072.3691, -790.0135, 57.2831>>
mvDealerCar.fStartHeading = 181.5556
mvDealerCar.mModel = BURRITO
*/
mvClimbingTruck.vStartPos = << 1137.3795, -792.8448, 56.6033 >>
mvClimbingTruck.fStartHeading = 89.9365
mvClimbingTruck.mModel = BENSON
//PROPS
oiSmokeWeed.vStartPos = << 1084.0536, -792.4236, 57.2626 >>
oiSmokeWeed.mModel = P_AMB_JOINT_01
ENDPROC
/// PURPOSE:
/// Sets all models as no longer needed, removes all anim dicts, removes all vehicle recordings etc.
PROC UnloadEverything()
SET_MODEL_AS_NO_LONGER_NEEDED(mpPrincess.mModel)
SET_MODEL_AS_NO_LONGER_NEEDED(mpDrugDealer.mModel)
SET_MODEL_AS_NO_LONGER_NEEDED(oiSmokeWeed.mModel)
INT i
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
SET_MODEL_AS_NO_LONGER_NEEDED(mSecurityPed[i].mModel)
ENDFOR
FOR i = 0 TO NUM_OF_SECURITY_CARS - 1
SET_MODEL_AS_NO_LONGER_NEEDED(mvSecurityCars[i].mModel)
ENDFOR
ENDPROC
PROC DO_ANNOYING_SUBTITLE_SWITCH()
TEXT_LABEL_23 rootDeal = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
TEXT_LABEL_23 labelDeal
IF NOT IS_STRING_NULL_OR_EMPTY(rootDeal)
IF ARE_STRINGS_EQUAL(rootDeal,"PAP3_DEALER")
AND GET_CURRENT_SCRIPTED_CONVERSATION_LINE() > 0
IF iSubSwitch = 0
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), mpPrincess.mPed) > 40
iSubsDealer = ENUM_TO_INT(DO_NOT_DISPLAY_SUBTITLES)
CPRINTLN(DEBUG_MISSION, "<CONVO> LEFT AREA SET SUBS OFF")
iSubSwitch = 1
iRetrigger = 1
ENDIF
ELIF iSubSwitch = 1
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), mpPrincess.mPed) <= 40
iSubsDealer = ENUM_TO_INT(DISPLAY_SUBTITLES)
CPRINTLN(DEBUG_MISSION, "<CONVO> ENTER AREA SET SUBS ON")
iSubSwitch = 0
iRetrigger = 1
ENDIF
ENDIF
ENDIF
ENDIF
IF iRetrigger = 1
labelDeal = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
IF NOT IS_STRING_NULL_OR_EMPTY(labelDeal)
CPRINTLN(DEBUG_MISSION, "<CONVO> LABEL IS NOT NULL")
IF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_1")
labelRetrig = "PAP3_DEALER_2"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_2")
labelRetrig = "PAP3_DEALER_3"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_3")
labelRetrig = "PAP3_DEALER_4"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_4")
labelRetrig = "PAP3_DEALER_5"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_5")
labelRetrig = "PAP3_DEALER_6"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_6")
labelRetrig = "PAP3_DEALER_7"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_7")
labelRetrig = "PAP3_DEALER_8"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_8")
labelRetrig = "PAP3_DEALER_9"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_9")
labelRetrig = "PAP3_DEALER_10"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_10")
labelRetrig = "PAP3_DEALER_11"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_11")
labelRetrig = "PAP3_DEALER_12"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_12")
labelRetrig = "PAP3_DEALER_13"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_13")
labelRetrig = "PAP3_DEALER_14"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_14")
labelRetrig = "PAP3_DEALER_15"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_15")
labelRetrig = "PAP3_DEALER_16"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_16")
labelRetrig = "PAP3_DEALER_17"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_17")
labelRetrig = "PAP3_DEALER_18"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_18")
labelRetrig = "PAP3_DEALER_19"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_19")
labelRetrig = "PAP3_DEALER_20"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_20")
labelRetrig = "PAP3_DEALER_21"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_21")
labelRetrig = "PAP3_DEALER_22"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_22")
labelRetrig = "PAP3_DEALER_23"
ELIF ARE_STRINGS_EQUAL(labelDeal,"PAP3_DEALER_23")
CPRINTLN(DEBUG_MISSION, "<CONVO> LAST LINE SO JUST BAIL")
iRetrigger = 4
ENDIF
KILL_FACE_TO_FACE_CONVERSATION()
CPRINTLN(DEBUG_MISSION, "<CONVO> KILL")
iRetrigger = 2
ELSE
CPRINTLN(DEBUG_MISSION, "<CONVO> CHECKED LABEL IS NULL OR EMPTY")
ENDIF
ELIF iRetrigger = 2
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
CPRINTLN(DEBUG_MISSION, "<CONVO> LINE FINISHED AFTER KILL")
IF NOT IS_STRING_NULL_OR_EMPTY(labelRetrig)
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sSpeach, "pap3bau", "PAP3_DEALER", labelRetrig, CONV_PRIORITY_HIGH,INT_TO_ENUM(enumSubtitlesState,iSubsDealer))
CPRINTLN(DEBUG_MISSION, "<CONVO> RETRIGGER")
iRetrigger = 3
ENDIF
ELSE
CPRINTLN(DEBUG_MISSION, "<CONVO> RETRIGGER LABEL IS NULL - BAIL")
iRetrigger = 3
ENDIF
ENDIF
ENDIF
ENDPROC
PROC DO_PRINCESS_SMOKING_IDLES()
IF HAS_ANIM_DICT_LOADED("amb@world_human_smoking@female@idle_a")
AND HAS_ANIM_DICT_LOADED("amb@world_human_smoking@female@base")
IF GET_SCRIPT_TASK_STATUS(mpPrincess.mPed,SCRIPT_TASK_START_SCENARIO_IN_PLACE) = PERFORMING_TASK
//IF IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@base","base")
IF GET_GAME_TIMER() > iTimerSmokeIdle + 10000
IF NOT IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_a")
AND NOT IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_b")
AND NOT IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_c")
//SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mpPrincess.mPed)
INT iRand = GET_RANDOM_INT_IN_RANGE(0,3)
IF iRand = 0
TASK_PLAY_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_a",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1,AF_SECONDARY)
ELIF iRand = 1
TASK_PLAY_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_b",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1,AF_SECONDARY)
ELSE
TASK_PLAY_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_c",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1,AF_SECONDARY)
ENDIF
iTimerSmokeIdle = GET_GAME_TIMER()
ENDIF
ENDIF
ELSE
IF NOT IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_a")
AND NOT IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_b")
AND NOT IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_c")
//TASK_PLAY_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@base","base",NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_LOOPING)
//TASK_START_SCENARIO_IN_PLACE(mpPrincess.mPed,"WORLD_HUMAN_SMOKING")
ENDIF
ENDIF
ENDIF
//OVERRIDE_TASKED_SCENARIO_BASE_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_a")
//OVERRIDE_TASKED_SCENARIO_BASE_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_b")
//OVERRIDE_TASKED_SCENARIO_BASE_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_c")
//OVERRIDE_TASKED_SCENARIO_BASE_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@base","base")
ENDPROC
FUNC BOOL IS_PRINCESS_TAKING_A_TOKE()
/*
IF IS_PED_UNINJURED(mpPrincess.mPed)
IF IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_a")
IF GET_ENTITY_ANIM_CURRENT_TIME(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_a") > 0.255
AND GET_ENTITY_ANIM_CURRENT_TIME(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_a") < 0.848
RETURN TRUE
ENDIF
ENDIF
IF IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_b")
IF GET_ENTITY_ANIM_CURRENT_TIME(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_b") > 0.527
AND GET_ENTITY_ANIM_CURRENT_TIME(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_b") < 0.746
RETURN TRUE
ENDIF
ENDIF
IF IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_c")
IF GET_ENTITY_ANIM_CURRENT_TIME(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_c") > 0.060
AND GET_ENTITY_ANIM_CURRENT_TIME(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_c") < 0.209
RETURN TRUE
ENDIF
ENDIF
ENDIF
*/
//IF GET_DISTANCE_BETWEEN_ENTITIES(mpPrincess.mPed,PLAYER_PED_ID()) < 15
// RETURN TRUE
//ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(issDeal)
IF GET_SYNCHRONIZED_SCENE_PHASE(issDeal) >= 0.803
AND GET_SYNCHRONIZED_SCENE_PHASE(issDeal) < 0.871
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC DO_PRINCESS_SHOUTING()
IF iPrincessShoutLines < 2
IF GET_GAME_TIMER() > iPrincessShoutTimer + 10000
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), mpPrincess.mPed) < 50
IF CREATE_CONVERSATION(sSpeach, "pap3bau", "PAP3_SHOCK", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
++iPrincessShoutLines
iPrincessShoutTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(0,4000)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
FUNC BOOL IS_PED_NEAR_MIDDLE_OF_SCREEN(PED_INDEX ped)
IF IS_PED_UNINJURED(ped)
INT i = GET_PED_BONE_INDEX(ped, BONETAG_SPINE)
FLOAT fScreenX
FLOAT fScreenY
IF i <> -1
VECTOR pos = GET_WORLD_POSITION_OF_ENTITY_BONE(ped,i)
GET_SCREEN_COORD_FROM_WORLD_COORD(pos, fScreenX, fScreenY)
IF fScreenX > 0.2
AND fScreenX < 0.8
AND fScreenY > 0.2
AND fScreenY < 0.8
CPRINTLN(DEBUG_MISSION, "TK PRINCESS SPINE NEAR MIDDLE OF THE SCREEN")
RETURN TRUE
ENDIF
ENDIF
ENDIF
CPRINTLN(DEBUG_MISSION, "TK PRINCESS SPINE NOT NEAR MIDDLE OF THE SCREEN")
RETURN FALSE
ENDFUNC
FUNC BOOL CHECK_PRINCESS_NOT_OCCLUDED_FROM_ROOF()
IF NOT IS_ENTITY_OCCLUDED(mpPrincess.mPed)
//AND GET_FOCUS_PED_ON_SCREEN(100,BONETAG_HEAD,0.42,0.26,0.01,50,0.2,BONETAG_R_FOOT,BONETAG_L_FOOT) = mpPrincess.mPed
IF GET_FOCUS_PED_ON_SCREEN(100,BONETAG_HEAD,0.8,0.8,0.25,50,0.8,BONETAG_R_FOOT,BONETAG_L_FOOT) = mpPrincess.mPed
OR GET_FOCUS_PED_ON_SCREEN(100,BONETAG_HEAD,0.8,0.8,0.25,50,0.8,BONETAG_R_FOOT,BONETAG_L_FOOT) = mpDrugDealer.mPed
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_PHOTO_OK()
//IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1071.160889,-786.458801,57.465942>>, <<1069.558105,-785.423584,58.262592>>, 1.2) //goes weird on this corner
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1060.735962,-776.372925,56.762596>>, <<1087.982544,-792.096497,59.312592>>, 8.250000)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1051.625977,-768.425110,56.185852>>, <<1104.971436,-768.815674,60.036358>>, 28.500000)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1057.152832,-785.157837,59.006058>>, <<1057.152832,-782.090332,60.706692>>, 1.950000) //Shelf thing B*1988982
RETURN FALSE
ENDIF
IF IS_PED_UNINJURED(mpPrincess.mPed)
IF NOT IS_PED_NEAR_MIDDLE_OF_SCREEN(mpPrincess.mPed)
RETURN FALSE
ENDIF
IF IS_PED_UNINJURED(mpDrugDealer.mPed)
AND IS_ENTITY_ON_SCREEN(mpPrincess.mPed)
AND IS_ENTITY_ON_SCREEN(mpDrugDealer.mPed)
AND IS_SPHERE_VISIBLE(GET_ENTITY_COORDS(mpPrincess.mPed),1)
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1095.333984,-783.023560,61.678375>>, <<1078.833618,-783.144409,64.366570>>, 15.750000)
IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY(PLAYER_PED_ID(),mpPrincess.mPed,LOS_FLAGS_BOUNDING_BOX)
AND HAS_ENTITY_CLEAR_LOS_TO_ENTITY(PLAYER_PED_ID(),mpDrugDealer.mPed)
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ELSE
IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY(PLAYER_PED_ID(),mpPrincess.mPed,LOS_FLAGS_BOUNDING_BOX)
AND HAS_ENTITY_CLEAR_LOS_TO_ENTITY(PLAYER_PED_ID(),mpDrugDealer.mPed)
IF NOT IS_ENTITY_IN_RANGE_ENTITY(mpPrincess.mPed,PLAYER_PED_ID(),50) //34
bTooFarAway = TRUE
RETURN FALSE
ELSE
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL ALL_GUARDS_LOST()
INT i
FOR i = 0 TO NUM_OF_SECURITY_PEDS -1
IF IS_ENTITY_ALIVE(mSecurityPed[i].mPed)
IF NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mSecurityPed[i].mPed,200)
IF DOES_BLIP_EXIST(mSecurityPed[i].mBlip)
SAFE_REMOVE_BLIP(mSecurityPed[i].mBlip)
SAFE_DELETE_PED(mSecurityPed[i].mPed)
IF i = 2
SAFE_RELEASE_VEHICLE(mvSecurityCars[1].mVehicle)
ENDIF
++iSecurityEvaded
ENDIF
ELSE
IF DOES_BLIP_EXIST(mSecurityPed[i].mBlip)
IF IS_PED_IN_ANY_VEHICLE(mSecurityPed[i].mPed)
SET_BLIP_SCALE(mSecurityPed[i].mBlip,BLIP_SIZE_VEHICLE)
ELSE
SET_BLIP_SCALE(mSecurityPed[i].mBlip,BLIP_SIZE_PED)
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(mSecurityPed[i].mBlip)
SAFE_REMOVE_BLIP(mSecurityPed[i].mBlip)
++iSecurityDead
++iSecurityEvaded
ENDIF
ENDIF
ENDFOR
IF iSecurityEvaded >= iSecurityBlipped
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Makes the PED passed in flee from the player
/// PARAMS:
/// mPedFlee - Makes this ped flee from the player.
PROC MAKE_PED_FLEE(PED_INDEX mPedFlee, BOOL OnFoot = FALSE)
IF IS_PED_UNINJURED(mPedFlee)
IF OnFoot = FALSE
CLEAR_PED_TASKS(mPedFlee)
SET_PED_COMBAT_ATTRIBUTES(mPedFlee,CA_AGGRESSIVE,FALSE)
SET_PED_COMBAT_ATTRIBUTES(mPedFlee,CA_ALWAYS_FLEE,TRUE)
SET_PED_FLEE_ATTRIBUTES(mPedFlee, FA_USE_VEHICLE, TRUE)
SET_PED_FLEE_ATTRIBUTES(mPedFlee, FA_PREFER_PAVEMENTS, FALSE)
SET_PED_FLEE_ATTRIBUTES(mPedFlee, FA_USE_COVER, FALSE)
SET_PED_FLEE_ATTRIBUTES(mPedFlee, FA_LOOK_FOR_CROWDS, FALSE)
SET_PED_FLEE_ATTRIBUTES(mPedFlee, FA_RETURN_TO_ORIGNAL_POSITION_AFTER_FLEE, FALSE)
TASK_SMART_FLEE_PED(mPedFlee, PLAYER_PED_ID(), 200, -1,FALSE)
SET_PED_KEEP_TASK(mPedFlee, TRUE)
ELSE
CLEAR_PED_TASKS(mPedFlee)
SET_PED_COMBAT_ATTRIBUTES(mPedFlee,CA_AGGRESSIVE,FALSE)
SET_PED_COMBAT_ATTRIBUTES(mPedFlee,CA_ALWAYS_FLEE,TRUE)
SET_PED_FLEE_ATTRIBUTES(mPedFlee, FA_USE_VEHICLE, FALSE)
SET_PED_FLEE_ATTRIBUTES(mPedFlee, FA_PREFER_PAVEMENTS, TRUE)
SET_PED_FLEE_ATTRIBUTES(mPedFlee, FA_USE_COVER, FALSE)
SET_PED_FLEE_ATTRIBUTES(mPedFlee, FA_LOOK_FOR_CROWDS, TRUE)
SET_PED_FLEE_ATTRIBUTES(mPedFlee, FA_RETURN_TO_ORIGNAL_POSITION_AFTER_FLEE, FALSE)
TASK_SMART_FLEE_PED(mPedFlee, PLAYER_PED_ID(), 200, -1,TRUE)
SET_PED_KEEP_TASK(mPedFlee, TRUE)
ENDIF
ENDIF
ENDPROC
// ===========================================================================================================
// Termination
// ===========================================================================================================
/// PURPOSE:
/// Cleanup that needs to be done as soon as mission is passed or failed. Blip removal etc
/// PARAMS:
/// bClearText - Should objective text be cleared?
PROC MissionCleanup(bool bClearText = TRUE)
BYPASS_CELLPHONE_CAMERA_DEFAULT_SAVE_ROUTINE(FALSE)
ENABLE_PICTURE_MESSAGE_SENDING_AND_HELP(FALSE)
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
IF GET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID())
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(),FALSE)
ENDIF
ENDIF
IF bClearText = TRUE // clear all text
CLEAR_PRINTS()
ENDIF
CLEAR_HELP(TRUE)
ENDPROC
/// PURPOSE:
/// Did the player bypass the contact
FUNC BOOL DID_PLAYER_GO_STRAIGHT_TO_PRINCESS()
IF IS_PED_UNINJURED(mpPrincess.mPed)
AND IS_ENTITY_IN_RANGE_ENTITY(mpPrincess.mPed,PLAYER_PED_ID(),55)
AND IS_ENTITY_ON_SCREEN(mpPrincess.mPed)
AND IS_SPHERE_VISIBLE(GET_WORLD_POSITION_OF_ENTITY_BONE(mpPrincess.mPed,GET_PED_BONE_INDEX(mpPrincess.mPed, BONETAG_HEAD)),0.1)
AND NOT IS_ENTITY_OCCLUDED(mpPrincess.mPed)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1114.023804,-758.650391,54.945763>>, <<1054.395996,-758.632629,64.537048>>, 47.500000)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1046.049805,-754.827087,56.041855>>, <<1144.919678,-755.214111,59.983875>>, 20.750000) //road
RETURN TRUE
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1051.437500,-791.649353,56.685829>>, <<1114.934814,-791.440918,66.168022>>, 15.500000)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Sets the new mission stage and initialises the substate
/// PARAMS:
/// eNewStage - The mission stage to change to
PROC SetStage(MISSION_STAGE eNewStage)
bMainObjectiveDisplayed = FALSE
missionStage = eNewStage // Setup new mission state
eSubStage = SS_SETUP
ENDPROC
/// PURPOSE:
/// Sets the fail reason and mission stage to be fail fade out.
/// PARAMS:
/// eNewFailReason - The fail reason
PROC SET_FAIL_REASON(FAIL_REASON eNewFailReason)
bMissionFailed = TRUE
eFailReason = eNewFailReason
SETSTAGE(MS_MISSION_FAILED)
ENDPROC
/// PURPOSE:
/// Forces the drug deal peds to drive away
PROC ForceDriveAway()
IF IS_PED_UNINJURED(mpPrincess.mPed) AND IS_ENTITY_ALIVE(mvSecurityCars[0].mVehicle)
/*
IF NOT IsPedPerformingTask(mpPrincess.mPed, SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING) AND NOT IsPedPerformingTask(mpPrincess.mPed, SCRIPT_TASK_VEHICLE_DRIVE_WANDER)
FREEZE_ENTITY_POSITION(mvSecurityCars[0].mVehicle, FALSE)
IF IS_PED_IN_VEHICLE(mpPrincess.mPed, mvSecurityCars[0].mVehicle)
TASK_VEHICLE_DRIVE_WANDER(mpPrincess.mPed, mvSecurityCars[0].mVehicle, 20, DRIVINGMODE_PLOUGHTHROUGH)
ELSE
SEQUENCE_INDEX siDriveOff
OPEN_SEQUENCE_TASK(siDriveOff)
TASK_ENTER_VEHICLE(NULL, mvSecurityCars[0].mVehicle)
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(NULL,mvSecurityCars[0].mVehicle,"PAP3_Security1",DRIVINGMODE_PLOUGHTHROUGH,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
//TASK_VEHICLE_DRIVE_WANDER(NULL, mvSecurityCars[0].mVehicle, 20, DRIVINGMODE_PLOUGHTHROUGH)
CLOSE_SEQUENCE_TASK(siDriveOff)
TASK_PERFORM_SEQUENCE(mpPrincess.mPed, siDriveOff)
CLEAR_SEQUENCE_TASK(siDriveOff)
ePrincessState = SP_WANDER
ENDIF
ENDIF
*/
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
AND IS_PED_UNINJURED(mpPrincess.mPed)
IF IS_PED_IN_VEHICLE(mSecurityPed[0].mPed, mvSecurityCars[0].mVehicle)
IF GET_SCRIPT_TASK_STATUS(mSecurityPed[0].mPed,SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mSecurityPed[0].mPed,SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING) <> WAITING_TO_START_TASK
AND GET_SCRIPT_TASK_STATUS(mSecurityPed[0].mPed,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mSecurityPed[0].mPed,SCRIPT_TASK_VEHICLE_MISSION) <> WAITING_TO_START_TASK
IF IS_PED_IN_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle)
AND IS_PED_IN_VEHICLE(mSecurityPed[1].mPed,mvSecurityCars[0].mVehicle)
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(mSecurityPed[0].mPed,mvSecurityCars[0].mVehicle,"PAP3_Security1",DRIVINGMODE_PLOUGHTHROUGH,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
ENDIF
ENDIF
ELSE
IF GET_SCRIPT_TASK_STATUS(mpPrincess.mPed,SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mpPrincess.mPed,SCRIPT_TASK_ENTER_VEHICLE) <> WAITING_TO_START_TASK
TASK_ENTER_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle,DEFAULT_TIME_BEFORE_WARP,VS_BACK_LEFT,PEDMOVEBLENDRATIO_WALK)
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[2].mPed) AND IS_ENTITY_ALIVE(mvSecurityCars[1].mVehicle)
IF IS_PED_IN_VEHICLE(mSecurityPed[2].mPed, mvSecurityCars[1].mVehicle)
IF GET_SCRIPT_TASK_STATUS(mSecurityPed[2].mPed,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mSecurityPed[2].mPed,SCRIPT_TASK_VEHICLE_MISSION) <> WAITING_TO_START_TASK
IF IS_PED_FACING_PED(mSecurityPed[2].mPed,mpPrincess.mPed,70)
IF GET_SCRIPT_TASK_STATUS(mSecurityPed[2].mPed,SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mSecurityPed[2].mPed,SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING) <> WAITING_TO_START_TASK
//SET_ROADS_IN_AREA(<<1109.490112,-778.548096,58.762684>>,<<3.750000,13.500000,2.250000>>,TRUE)
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(mSecurityPed[2].mPed,mvSecurityCars[1].mVehicle,"PAP3_Security1",DRIVINGMODE_PLOUGHTHROUGH,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
/*
IF NOT IsPedPerformingTask(mSecurityPed[2].mPed, SCRIPT_TASK_VEHICLE_DRIVE_WANDER)
IF IS_PED_IN_VEHICLE(mSecurityPed[2].mPed, mvSecurityCars[1].mVehicle)
IF IS_PED_UNINJURED(mpPrincess.mPed)
SEQUENCE_INDEX siDriveOff
OPEN_SEQUENCE_TASK(siDriveOff)
TASK_PAUSE(NULL, 3000)
TASK_VEHICLE_MISSION_PED_TARGET(NULL, mvSecurityCars[1].mVehicle, mpPrincess.mPed, MISSION_FOLLOW, 20.0, DRIVINGMODE_PLOUGHTHROUGH, -1, -1)
CLOSE_SEQUENCE_TASK(siDriveOff)
TASK_PERFORM_SEQUENCE(mSecurityPed[2].mPed, siDriveOff)
CLEAR_SEQUENCE_TASK(siDriveOff)
ELSE
TASK_VEHICLE_DRIVE_WANDER(mSecurityPed[2].mPed, mvSecurityCars[1].mVehicle, 20, DRIVINGMODE_PLOUGHTHROUGH)
ENDIF
ELSE
SEQUENCE_INDEX siDriveOff
OPEN_SEQUENCE_TASK(siDriveOff)
TASK_ENTER_VEHICLE(NULL, mvSecurityCars[1].mVehicle)
IF IS_PED_UNINJURED(mpPrincess.mPed)
TASK_PAUSE(NULL, 3000)
TASK_VEHICLE_MISSION_PED_TARGET(NULL, mvSecurityCars[1].mVehicle, mpPrincess.mPed, MISSION_FOLLOW, 20.0, DRIVINGMODE_PLOUGHTHROUGH, -1, -1)
ELSE
TASK_VEHICLE_DRIVE_WANDER(NULL, mvSecurityCars[1].mVehicle, 20, DRIVINGMODE_PLOUGHTHROUGH)
ENDIF
CLOSE_SEQUENCE_TASK(siDriveOff)
TASK_PERFORM_SEQUENCE(mSecurityPed[2].mPed, siDriveOff)
CLEAR_SEQUENCE_TASK(siDriveOff)
ENDIF
ENDIF
*/
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
AND IS_PED_IN_ANY_VEHICLE(mSecurityPed[0].mPed)
IF IS_ENTITY_IN_ANGLED_AREA(mSecurityPed[0].mPed, <<1158.520142,-759.373901,56.322784>>, <<1116.868652,-759.690796,61.706322>>, 13.750000)
IF GET_SCRIPT_TASK_STATUS(mSecurityPed[0].mPed,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
SET_PED_KEEP_TASK(mSecurityPed[0].mPed,TRUE)
TASK_VEHICLE_MISSION_PED_TARGET(mSecurityPed[0].mPed,GET_VEHICLE_PED_IS_IN(mSecurityPed[0].mPed),PLAYER_PED_ID(),MISSION_FLEE,25.0,DRIVINGMODE_AVOIDCARS_RECKLESS,20.0,20.0)
ENDIF
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[2].mPed)
AND IS_ENTITY_ALIVE(mvSecurityCars[1].mVehicle)
IF IS_ENTITY_IN_ANGLED_AREA(mSecurityPed[2].mPed, <<1158.520142,-759.373901,56.322784>>, <<1116.868652,-759.690796,61.706322>>, 13.750000)
IF GET_SCRIPT_TASK_STATUS(mSecurityPed[2].mPed,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mSecurityPed[2].mPed,SCRIPT_TASK_VEHICLE_MISSION) <> WAITING_TO_START_TASK
SET_PED_KEEP_TASK(mSecurityPed[2].mPed,TRUE)
TASK_VEHICLE_MISSION_PED_TARGET(mSecurityPed[2].mPed,mvSecurityCars[1].mVehicle,mpPrincess.mPed,MISSION_ESCORT_REAR,25,DRIVINGMODE_AVOIDCARS,20,10)
IF bPhotoSent = FALSE
SET_FAIL_REASON(FAIL_PHOTO_LOST)
ENDIF
ePrincessState = SP_WANDER
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Script Cleanup
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE:
/// Cleans up the script
/// PARAMS:
/// bClearText - Should objective text be cleared?
PROC Script_Cleanup(BOOL bClearText = TRUE)
// If the mission was triggered then additional mission cleanup will be required.
IF (Random_Character_Cleanup_If_Triggered())
CPRINTLN(DEBUG_MISSION, "...Random Character Script was triggered so additional cleanup required")
MissionCleanup(bClearText)
REMOVE_SCENARIO_BLOCKING_AREA(sbiChicoRear)
REMOVE_SCENARIO_BLOCKING_AREA(sbiVehAttractor)
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE)
UnloadEverything()
ForceDriveAway()
SAFE_RELEASE_VEHICLE(mvDealerCar.mVehicle)
SAFE_RELEASE_VEHICLE(mvClimbingTruck.mVehicle)
INT i
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
SAFE_RELEASE_PED(mSecurityPed[i].mPed)
ENDFOR
FOR i = 0 TO NUM_OF_SECURITY_CARS - 1
SAFE_RELEASE_VEHICLE(mvSecurityCars[i].mVehicle)
ENDFOR
SAFE_RELEASE_PED(mpPrincess.mPed)
SAFE_RELEASE_PED(mpDrugDealer.mPed)
//Delete text message from players phone inbox
DELETE_TEXT_MESSAGE_BY_LABEL_FROM_CURRENT_PLAYER("PAP3_16")
ENDIF
RC_CleanupSceneEntities(sRCLauncherDataLocal, FALSE) //Cleanup the scene created by the launcher
REPOSITION_LANDSCAPE_PHONE_FOR_LONG_SUBTITLES(FALSE)
TERMINATE_THIS_THREAD()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Script Pass
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE:
/// Passes the mission
PROC Script_Passed()
// CREDIT_BANK_ACCOUNT(CHAR_FRANKLIN, BAAC_UNLOGGED_SMALL_ACTION, 500) // Initially requested on B*1237043 - Removed on request as B*1317037
MissionCleanup()
Random_Character_Passed(CP_RAND_C_PAP3)
Script_Cleanup()
ENDPROC
/// PURPOSE:
/// Resets the gameplay camera behind the player
PROC ResetCamBehindPlayer()
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
ENDPROC
/// PURPOSE:
/// toggles cutscene mode [sets scene safe, toggles radar etc]
/// PARAMS:
/// bOn - Turn cutscene mode on or off
PROC SetCutsceneMode(BOOL bOn)
if bOn = TRUE
// start of cutscene
RC_START_CUTSCENE_MODE(<<0.0,0.0,0.0>>)
ELSE
// end of cutscene
RC_END_CUTSCENE_MODE()
ResetCamBehindPlayer() // go back to gameplay camera
SAFE_FADE_SCREEN_IN_FROM_BLACK()
ENDIF
ENDPROC
/// PURPOSE:
/// Creates ped and sets heading
/// PARAMS:
/// mMissionPed - The ped to create
/// bUnloadModel - Should we unload the model after creating the ped
PROC CreateMissionPed(MISSION_PED &mMissionPed, BOOL bUnloadModel = TRUE)
if HAS_MODEL_LOADED(mMissionPed.mModel)
mMissionPed.mPed = CREATE_PED(PEDTYPE_MISSION, mMissionPed.mModel, mMissionPed.vStartPos, mMissionPed.fStartHeading)
if bUnloadModel = TRUE
SET_MODEL_AS_NO_LONGER_NEEDED(mMissionPed.mModel)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Creates vehicle and sets heading and colours
/// PARAMS:
/// mMissionVehicle - The vehicle to create
/// bRemoveModel - Should we remove the model after creating the vehicle
PROC CreateMissionVehicle(MISSION_VEHICLE &mMissionVehicle, BOOL bRemoveModel = TRUE)
if HAS_MODEL_LOADED(mMissionVehicle.mModel)
mMissionVehicle.mVehicle = CREATE_VEHICLE(mMissionVehicle.mModel, mMissionVehicle.vStartPos, mMissionVehicle.fStartHeading)
ENDIF
if bRemoveModel = TRUE
SET_MODEL_AS_NO_LONGER_NEEDED(mMissionVehicle.mModel)
ENDIF
ENDPROC
/// PURPOSE:
/// Creates props and sets heading
/// PARAMS:
/// mMissionProp - The prop to create
/// bRemoveModel - Should we remove the model after creating the prop
PROC CreateMissionProp(MISSION_PROP &mMissionProp, BOOL bRemoveModel = TRUE)
if HAS_MODEL_LOADED(mMissionProp.mModel)
mMissionProp.mObject = CREATE_OBJECT(mMissionProp.mModel, mMissionProp.vStartPos)
if DOES_ENTITY_EXIST(mMissionProp.mObject)
SET_ENTITY_HEADING(mMissionProp.mObject,mMissionProp.fStartHeading)
ENDIF
ENDIF
if bRemoveModel = TRUE
SET_MODEL_AS_NO_LONGER_NEEDED(mMissionProp.mModel)
ENDIF
ENDPROC
/// PURPOSE:
/// Checks to see if the player has tried to enter the left entrance where security are.
/// RETURNS:
/// TRUE if the player is in area
FUNC BOOL HAS_PLAYER_TRIED_TO_ENTER()
IF IS_POINT_IN_POLY_2D(tpBackAwayArea, GET_ENTITY_COORDS(PLAYER_PED_ID()))
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks to see if the princess has left the area.
/// RETURNS:
/// TRUE if the princess has left
FUNC BOOL HAS_PRINCESS_LEFT_THE_AREA()
IF IS_ENTITY_ALIVE(mpPrincess.mPed)
IF IS_POINT_IN_POLY_2D(tpLeaveArea, GET_ENTITY_COORDS(mpPrincess.mPed))
RETURN FALSE
ENDIF
ENDIF
RETURN TRUE
ENDFUNC
/// PURPOSE:
/// Checks if player is inside the spotted area
/// RETURNS:
/// True - If player is inside the area, false otherwise
FUNC BOOL IS_PLAYER_INSIDE_SPOT_AREA()
IF IS_POINT_IN_POLY_2D(tpSpotArea, GET_ENTITY_COORDS(PLAYER_PED_ID()))
VECTOR vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
IF vPlayerPos.z < 61.0
CPRINTLN(DEBUG_MISSION, "PLAYER INSIDE SPOT AREA")
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks to see if player has left the area
/// RETURNS:
/// TRUE if the player has left the area, false otherwise.
FUNC BOOL IS_PLAYER_OUT_LEAVE_AREA()
IF IS_POINT_IN_POLY_2D(tpLeaveArea, GET_ENTITY_COORDS(PLAYER_PED_ID()))
RETURN FALSE
ENDIF
RETURN TRUE
ENDFUNC
/// PURPOSE:
/// Checks if the player is in the alley area
/// RETURNS:
/// TRUE if the player is in the alley area, FALSE otherwise
FUNC BOOL IS_PLAYER_IN_ALLEY_NOTICE_AREA()
IF IS_POINT_IN_POLY_2D(tpAlleyArea, GET_ENTITY_COORDS(PLAYER_PED_ID()))
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Makes the player automatically crouch when they approach the alley area, allows them to stop crouching if they really want to
PROC HANDLE_AUTO_CROUCHING()
VECTOR vPlayer = GET_ENTITY_COORDS(PLAYER_PED_ID())
IF IS_POINT_IN_POLY_2D(tpCrouchArea, vPlayer)
AND vPlayer.z < 61
IF bForceCrouching
IF NOT GET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID())
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(),TRUE)
ENDIF
bForceCrouching = FALSE // only force the player to crouch when the enter this area, if they want to stop crouching, that's their choice
ENDIF
ELSE
IF bForceCrouching = FALSE
bForceCrouching = TRUE
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks to see if any security can see the player
/// RETURNS:
/// True if they can see him, false otherwise
FUNC BOOL CAN_SECURITY_SEE_PLAYER()
INT i
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
IF IS_ENTITY_ALIVE(mSecurityPed[i].mPed)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mSecurityPed[i].mPed,TRUE)
IF CAN_PED_SEE_HATED_PED(mSecurityPed[i].mPed,PLAYER_PED_ID())
CPRINTLN(DEBUG_MISSION, "I CAN SEE THE PLAYER")
RETURN TRUE
ENDIF
ENDIF
ENDFOR
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks to see if the player is unarmed - Including objects
/// Used to see if PEDS should attack player
/// RETURNS:
/// TRUE - If player is unarmed, false otherwise
FUNC BOOL IS_PLAYER_UNARMED()
IF GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED
AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_OBJECT //CHECK FOR MOBILE PHONE AS THIS WILL TRIGGER
RETURN FALSE
ENDIF
RETURN TRUE
ENDFUNC
/// PURPOSE:
/// Checks if the player can see a point
/// PARAMS:
/// vPos - The point the player wants to see
/// fRadius - A radius around the point to check if it's visible
/// distance - The maximum distance for the point to be judged visible
/// RETURNS:
/// TRUE if the player can see the point, FALSE otherwise
FUNC BOOL CAN_PLAYER_SEE_POINT(VECTOR vPos, FLOAT fRadius = 5.0, INT distance = 120)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF GET_DISTANCE_BETWEEN_COORDS( GET_ENTITY_COORDS(PLAYER_PED_ID()), vPos) <= distance
IF IS_SPHERE_VISIBLE(vPos, fRadius)
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// When a photo has been taken, check if a certain ped is visible
/// PARAMS:
/// _Ped - The ped we want to check
/// RETURNS:
/// TRUE if the ped is visible, FALSE otherwise
FUNC BOOL MONITOR_PHOTO(PED_INDEX _Ped)
IF DID_SIGHTTEST_PASS(iSightTestID)
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), _Ped) < 500
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks if the princess is in a photo of another ped
/// PARAMS:
/// piTest - The ped who the princess might be near
/// RETURNS:
/// TRUE if the princess is in the photo
FUNC BOOL IS_PRINCESS_IN_PHOTO(PED_INDEX piTest)
INT iCount = 0
INT i = 0
BOOL bPrincessPhoto = FALSE
IF IS_PED_UNINJURED(piTest)
PED_INDEX piNearbyGuys[25]
iCount = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), piNearbyGuys)
REPEAT iCount i
IF IS_PED_UNINJURED(piNearbyGuys[i])
IF piNearbyGuys[i] = mpPrincess.mPed AND IS_ENTITY_ON_SCREEN(piNearbyGuys[i]) AND HAS_ENTITY_CLEAR_LOS_TO_ENTITY(PLAYER_PED_ID(), piNearbyGuys[i])
AND GET_DISTANCE_BETWEEN_ENTITIES(piTest, piNearbyGuys[i]) < 5
bPrincessPhoto = TRUE
ENDIF
ENDIF
ENDREPEAT
ENDIF
RETURN bPrincessPhoto
ENDFUNC
/// PURPOSE:
/// Initialises mission variables
PROC InitVariables()
CPRINTLN(DEBUG_MISSION, "init variables ************************")
bDealersTempEventsUnblocked = FALSE
INIT_ARRAYS()
//SET BOOLS
bMainObjectiveDisplayed = FALSE
bPrincessSceneCreated = FALSE
b_Correct_Pic_Taken = FALSE
bPhotoSent = FALSE
bSecurityAttacking = FALSE
bSecurityNoticedPlayer = FALSE
bConversationActive = FALSE
bLeavingDrugScene = FALSE
bPlayerSpotted = FALSE
iIndividualLeaveTimer = 0
REQUEST_ANIM_DICT("amb@world_human_smoking@female@idle_a")
REQUEST_ANIM_DICT("amb@world_human_smoking@female@base")
REQUEST_ANIM_DICT(ANIM_DICT)
REQUEST_ANIM_DICT(DEALER_ANIM_DICT)
REQUEST_ANIM_DICT(DEALER_ANIM_DICT_2)
//ADD_RELATIONSHIP_GROUP("SecurityGroup", relHatePlayer)
ADD_RELATIONSHIP_GROUP("PrincessGroup", relPrincess)
ADD_RELATIONSHIP_GROUP("DealersGroup", relDealers)
//ADD BEVERLY CONTACT
ADD_CONTACT_TO_PHONEBOOK(CHAR_BEVERLY, FRANKLIN_BOOK, FALSE)
//AREA TEST POLYS
//SPOTTED AREA
OPEN_TEST_POLY(tpSpotArea)
ADD_TEST_POLY_VERT(tpSpotArea, << 1073.5927, -787.5071, 57.2626 >>)
ADD_TEST_POLY_VERT(tpSpotArea, << 1071.3456, -796.4704, 57.3459 >>)
ADD_TEST_POLY_VERT(tpSpotArea, << 1074.5679, -798.8521, 57.3658 >>)
ADD_TEST_POLY_VERT(tpSpotArea, << 1091.1027, -798.9657, 57.2626 >>)
ADD_TEST_POLY_VERT(tpSpotArea, << 1101.3662, -794.2939, 57.2626 >>)
ADD_TEST_POLY_VERT(tpSpotArea, << 1114.6600, -794.1965, 57.3977 >>)
ADD_TEST_POLY_VERT(tpSpotArea, <<1114.48, -781.67, 58.42>>)
ADD_TEST_POLY_VERT(tpSpotArea, <<1106.92, -781.76, 58.26>>)
ADD_TEST_POLY_VERT(tpSpotArea, << 1096.1490, -782.6533, 57.2632 >>)
CLOSE_TEST_POLY(tpSpotArea)
//LEAVE AREA
OPEN_TEST_POLY(tpLeaveArea)
ADD_TEST_POLY_VERT(tpLeaveArea, << 1051.8142, -777.9432, 57.3783 >>)
ADD_TEST_POLY_VERT(tpLeaveArea, << 1042.5559, -810.4073, 56.8677 >>)
ADD_TEST_POLY_VERT(tpLeaveArea, << 1121.7858, -815.4036, 55.5302 >>)
ADD_TEST_POLY_VERT(tpLeaveArea, << 1124.2711, -771.0333, 56.7566 >>)
ADD_TEST_POLY_VERT(tpLeaveArea, <<1103.765381,-766.337402,56.663002>>)
ADD_TEST_POLY_VERT(tpLeaveArea, <<1072.296265,-766.390625,56.705795>>)
CLOSE_TEST_POLY(tpLeaveArea)
OPEN_TEST_POLY(tpBackAwayArea)
ADD_TEST_POLY_VERT(tpBackAwayArea, << 1104.4590, -775.0743, 57.3526 >>)
ADD_TEST_POLY_VERT(tpBackAwayArea, << 1114.6810, -775.0476, 57.3626 >>)
ADD_TEST_POLY_VERT(tpBackAwayArea, << 1114.6786, -781.0639, 57.4212 >>)
ADD_TEST_POLY_VERT(tpBackAwayArea, << 1103.5934, -782.3363, 57.2626 >>)
CLOSE_TEST_POLY(tpBackAwayArea)
OPEN_TEST_POLY(tpAlleyArea)
ADD_TEST_POLY_VERT(tpAlleyArea, << 1070.7058, -786.0175, 57.2632 >>)
ADD_TEST_POLY_VERT(tpAlleyArea, << 1063.4452, -781.0466, 57.2632 >>)
ADD_TEST_POLY_VERT(tpAlleyArea, << 1051.7117, -785.5277, 57.3895 >>)
ADD_TEST_POLY_VERT(tpAlleyArea, << 1051.7520, -797.8251, 57.3918 >>)
ADD_TEST_POLY_VERT(tpAlleyArea, << 1055.2402, -798.9913, 57.2626 >>)
ADD_TEST_POLY_VERT(tpAlleyArea, << 1069.9708, -796.5669, 57.3245 >>)
ADD_TEST_POLY_VERT(tpAlleyArea, << 1075.0953, -793.6094, 57.3137 >>)
CLOSE_TEST_POLY(tpAlleyArea)
COPY_EXPANDED_POLY(tpCrouchArea, tpAlleyArea, 5.0)
// other requests here
#IF IS_DEBUG_BUILD // stage skipping
bFinishedSkipping = TRUE
mSkipMenu[0].sTxtLabel = "Initial phone call"
mSkipMenu[Z_SKIP_PHONE_CALL].sTxtLabel = "Go to location"
mSkipMenu[2].sTxtLabel = "Meet contact"
mSkipMenu[Z_SKIP_AT_PRINCESS_LOCATION].sTxtLabel = "Take photo"
mSkipMenu[4].sTxtLabel = "End phone call"
#ENDIF
REQUEST_ADDITIONAL_TEXT("PAP3BAU", MISSION_DIALOGUE_TEXT_SLOT)
REQUEST_ADDITIONAL_TEXT("PAP3",MISSION_TEXT_SLOT)
ENDPROC
/// PURPOSE:
/// Checks if the mission has been initialised
/// PARAMS:
/// bWait - Should we wait for the mission to be initialised
/// RETURNS:
/// TRUE if the mission is initialised, FALSE otherwise
FUNC BOOL IS_MISSION_INITIALISED(BOOL bWait = FALSE)
IF bWait // wait for everything to be loaded, used with debug skips
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
OR NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_DIALOGUE_TEXT_SLOT)
WAIT(0)
ENDWHILE
RETURN TRUE
ELSE
IF HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT) AND HAS_ADDITIONAL_TEXT_LOADED(MISSION_DIALOGUE_TEXT_SLOT)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Deletes everything regardless
PROC DELETE_EVERYTHING()
SAFE_DELETE_PED(mpPrincess.mPed)
SAFE_DELETE_PED(mpDrugDealer.mPed)
SAFE_DELETE_PED(mpDealerContact.mPed)
INT i
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
SAFE_DELETE_PED(mSecurityPed[i].mPed)
SAFE_REMOVE_BLIP(mSecurityPed[i].mBlip)
ENDFOR
FOR i = 0 TO NUM_OF_DEALER_GOONS- 1
SAFE_DELETE_PED(mpDealerGoons[i].mPed)
ENDFOR
FOR i = 0 TO NUM_OF_SECURITY_CARS - 1
SAFE_DELETE_VEHICLE(mvSecurityCars[i].mVehicle)
ENDFOR
SAFE_DELETE_VEHICLE(mvDealerCar.mVehicle)
SAFE_DELETE_VEHICLE(mvClimbingTruck.mVehicle)
SAFE_REMOVE_BLIP(biMissionBlip)
SAFE_DELETE_OBJECT(oiSmokeWeed.mObject)
//REMOVE_RELATIONSHIP_GROUP(relHatePlayer)
REMOVE_RELATIONSHIP_GROUP(relPrincess)
REMOVE_RELATIONSHIP_GROUP(relDealers)
ENDPROC
/// PURPOSE:
/// Deletes all entities and unloads everything to put the mission back to its starting state
PROC ResetMission()
CLEAR_PRINTS()
DELETE_EVERYTHING()
//Set player wanted level to 0
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(),0)
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
IF GET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID())
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(),FALSE)
ENDIF
ENDIF
UnloadEverything()
InitVariables()
IS_MISSION_INITIALISED(TRUE)
CLEAR_CONTACT_PICTURE_MESSAGE(CHAR_BEVERLY)
// put peds etc in start positions
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), << 1039.0956, -543.0302, 59.4935 >>)
SET_ENTITY_HEADING(PLAYER_PED_ID(),171.0)
ResetCamBehindPlayer()
ENDIF
SetStage(MS_INITIAL_PHONE)
ENDPROC
/// PURPOSE:
/// Skips the current stage
PROC SkipStage()
// stop player and buddy from doing whatever they were doing before skip
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
ENDIF
IF IS_SCRIPTED_CONVERSATION_ONGOING()
KILL_ANY_CONVERSATION()
ENDIF
BYPASS_CELLPHONE_CAMERA_DEFAULT_SAVE_ROUTINE(FALSE)
ENABLE_PICTURE_MESSAGE_SENDING_AND_HELP(FALSE)
SWITCH missionStage
CASE MS_INITIAL_PHONE
IF eSubStage = SS_UPDATE
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
KILL_PHONE_CONVERSATION()
ENDIF
SET_ENTITY_COORDS(PLAYER_PED_ID(), << 1039.9441, -536.3055, 60.0634 >>) //TELEPORT PLAYER TO BE FACING CORRECT WAY
SET_ENTITY_HEADING(PLAYER_PED_ID(),173.0)
bConversationActive = TRUE
eSubStage = SS_CLEANUP
ENDIF
BREAK
CASE MS_GO_TO_LOCATION
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), << 1078.4886, -767.2433, 56.7781 >>)
SET_ENTITY_HEADING(PLAYER_PED_ID(),141.0)
ENDIF
ResetCamBehindPlayer()
BREAK
CASE MS_MEET_CONTACT
IF eSubStage = SS_CLEANUP
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
KILL_PHONE_CONVERSATION()
ELSE
SET_ENTITY_COORDS(PLAYER_PED_ID(), << 1071.9421, -773.5490, 57.0645 >>)
SET_ENTITY_HEADING(PLAYER_PED_ID(),172.0769)
ResetCamBehindPlayer()
ENDIF
BREAK
CASE MS_TAKE_PHOTO
b_Correct_Pic_Taken = TRUE
eSubStage = SS_CLEANUP
BREAK
CASE MS_LEAVE_AREA
SET_ENTITY_COORDS(PLAYER_PED_ID(), << 1057.9576, -746.6598, 57.0441 >>)
ResetCamBehindPlayer()
BREAK
CASE MS_END_PHONE_CALL
IF eSubStage = SS_UPDATE
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
KILL_PHONE_CONVERSATION()
ENDIF
bConversationActive = TRUE
eSubStage = SS_CLEANUP
ENDIF
BREAK
CASE MS_ESCAPE_SECURITY
INT i
FOR i = 0 TO NUM_OF_SECURITY_PEDS
IF IS_ENTITY_ALIVE(mSecurityPed[i].mPed)
SET_ENTITY_HEALTH(mSecurityPed[i].mPed,5)
ENDIF
ENDFOR
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Jumps to the stage selected
/// PARAMS:
/// eNewStage - The stage to jump to
PROC JumpToStage(MISSION_STAGE eNewStage)
IF missionStage = eNewStage // skip current stage
bFinishedSkipping = TRUE
IF IS_REPLAY_IN_PROGRESS()
VEHICLE_INDEX viTemp
IF missionStage = MS_GO_TO_LOCATION
CREATE_VEHICLE_FOR_REPLAY(viTemp, <<1025.7745, -556.0987, 58.9872>>, 178.7053, TRUE, FALSE, FALSE, TRUE, TRUE, ASTEROPE) //<<1063.70, -528.63, 61.75>>, 99.04
ELSE
CREATE_VEHICLE_FOR_REPLAY(viTemp, <<1075.01, -764.27, 57.18>>, 269.48, FALSE, FALSE, FALSE, TRUE, TRUE, ASTEROPE)
ENDIF
ELSE
IF IS_REPEAT_PLAY_ACTIVE()
SAFE_FADE_SCREEN_IN_FROM_BLACK()
ENDIF
ENDIF
RC_END_Z_SKIP()
ELSE
SkipStage()
ENDIF
ENDPROC
#IF IS_DEBUG_BUILD
/// PURPOSE:
/// Goes back to the previous stage
PROC PreviousStage()
int iNewStage
SWITCH missionStage
CASE MS_INITIAL_PHONE
iNewStage = ENUM_TO_INT(MS_INITIAL_PHONE)
BREAK
CASE MS_ESCAPE_SECURITY
iNewStage = ENUM_TO_INT(MS_LEAVE_AREA)
BREAK
CASE MS_MEET_CONTACT
CASE MS_TAKE_PHOTO
iNewStage = ENUM_TO_INT(MS_GO_TO_LOCATION)
BREAK
CASE MS_END_PHONE_CALL
iNewStage = ENUM_TO_INT(MS_TAKE_PHOTO)
BREAK
DEFAULT
iNewStage = ENUM_TO_INT(MissionStage)-1
BREAK
ENDSWITCH
IF iNewStage >-1
//we can skip to a previous stage
eTargetStage = INT_TO_ENUM(MISSION_STAGE, iNewStage)
ResetMission()
bFinishedSkipping = FALSE
JumpToStage(eTargetStage)
ENDIF
ENDPROC
#ENDIF
/// PURPOSE:
/// Starts a Z skip
/// PARAMS:
/// iTargetStage - The stage to skip to
/// bResetMission - Should the mission be reset to its starting state
PROC Do_Z_Skip(INT iTargetStage, BOOL bResetMission = FALSE)
RC_START_Z_SKIP()
IF bResetMission = TRUE
ResetMission()
ENDIF
eTargetStage = INT_TO_ENUM(MISSION_STAGE, iTargetStage)
bFinishedSkipping = FALSE
JumpToStage(eTargetStage)
ENDPROC
// ===========================================================================================================
// DEBUG FUNCTIONS
// ===========================================================================================================
#IF IS_DEBUG_BUILD
/// PURPOSE:
/// Check for Forced Pass or Fail or for mission skipping
PROC DEBUG_Check_Debug_Keys()
IF missionStage <> MS_MISSION_FAILED
int iNewStage
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)) // Check for Pass
WAIT_FOR_CUTSCENE_TO_STOP()
Script_Passed()
ENDIF
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)) // Check for Fail
WAIT_FOR_CUTSCENE_TO_STOP()
SET_FAIL_REASON(FAIL_DEFAULT)
ENDIF
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)) // Check for Skip forward
SkipStage()
ENDIF
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)) // Check for Skip backwards
PreviousStage()
ENDIF
IF LAUNCH_MISSION_STAGE_MENU(mSkipMenu, iNewStage) // Check for jumping to stage
// iNewStage doesn't correspond to the mission stages, need to correct it here
SWITCH iNewStage
CASE 0 // Initial phone call
iNewStage = ENUM_TO_INT(MS_INITIAL_PHONE) // working
BREAK
CASE 1 // Go to location
iNewStage = ENUM_TO_INT(MS_GO_TO_LOCATION) // working
BREAK
CASE 2 // Meet contact
iNewStage = ENUM_TO_INT(MS_MEET_CONTACT) // working
BREAK
CASE 3 // Take photo
iNewStage = ENUM_TO_INT(MS_TAKE_PHOTO) // working
BREAK
CASE 4/* // Leave Area
iNewStage = ENUM_TO_INT(MS_LEAVE_AREA) // broken
BREAK
CASE 5*/ // End phone call in the menu
iNewStage = ENUM_TO_INT(MS_END_PHONE_CALL) // working
BREAK
ENDSWITCH
Do_Z_Skip(iNewStage, TRUE)
ENDIF
ENDIF
ENDPROC
#ENDIF
// --------------------------------------------------------------
// STAGE FUNCTIONS
// --------------------------------------------------------------
/// PURPOSE:
/// Makes sure Princess scene models have loaded
/// PARAMS:
/// bWaitForLoad - If true, will wait for all models to be loaded
/// RETURNS:
/// TRUE if all mdoels loaded, false otherwise.
FUNC BOOL HAS_PRINCESS_SCENE_LOADED(BOOL bWaitForLoad = FALSE)
//IF NOT IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(),mpPrincess.vStartPos,209)
// RETURN FALSE
//ENDIF
INT i
//SECURITY MODELS
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
REQUEST_MODEL(mSecurityPed[i].mModel)
ENDFOR
//DEALER GOONS
FOR i = 0 TO NUM_OF_DEALER_GOONS - 1
REQUEST_MODEL(mpDealerGoons[i].mModel)
ENDFOR
//PRINCESS MODEL
REQUEST_MODEL(mpPrincess.mModel)
//DRUG DEALER MODEL
REQUEST_MODEL(mpDrugDealer.mModel)
//SECURITY CAR MODELS
FOR i = 0 TO NUM_OF_SECURITY_CARS - 1
REQUEST_MODEL(mvSecurityCars[i].mModel)
ENDFOR
//DRUG DEALER CAR MODEL
REQUEST_MODEL(mvDealerCar.mModel)
REQUEST_MODEL(mvClimbingTruck.mModel)
//REQUEST VEHICLE RECORDINGS
REQUEST_VEHICLE_RECORDING(103,"PAP3Security1")
//REQUEST WAYPOINT RECORDINGS
REQUEST_WAYPOINT_RECORDING("PAP3_Security1")
//REQUEST PROPS
REQUEST_MODEL(oiSmokeWeed.mModel)
REQUEST_MODEL(PROP_DRUG_PACKAGE_02)
REQUEST_MODEL(PROP_CASH_PILE_02)
REQUEST_ANIM_DICT("rcmpaparazzo_3big_1")
IF bWaitForLoad = FALSE
// HAVE ALL MODELS LOADED
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
IF NOT HAS_MODEL_LOADED(mSecurityPed[i].mModel)
RETURN FALSE
ENDIF
ENDFOR
FOR i = 0 TO NUM_OF_DEALER_GOONS - 1
IF NOT HAS_MODEL_LOADED(mpDealerGoons[i].mModel)
RETURN FALSE
ENDIF
ENDFOR
IF NOT HAS_MODEL_LOADED(PROP_DRUG_PACKAGE_02)
RETURN FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(PROP_CASH_PILE_02)
RETURN FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(mpPrincess.mModel)
RETURN FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(mpDrugDealer.mModel)
RETURN FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(mvDealerCar.mModel)
RETURN FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(mvClimbingTruck.mModel)
RETURN FALSE
ENDIF
FOR i = 0 TO NUM_OF_SECURITY_CARS - 1
IF NOT HAS_MODEL_LOADED(mvSecurityCars[i].mModel)
RETURN FALSE
ENDIF
ENDFOR
// HAVE RECORDINGS LOADED
IF NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(103,"PAP3Security1")
RETURN FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(oiSmokeWeed.mModel)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED("rcmpaparazzo_3big_1")
RETURN FALSE
ENDIF
ELSE
// wait for everything to load- used in debug skips
Bool bEverythingLoaded = FALSE
WHILE bEverythingLoaded = FALSE
WAIT(0)
bEverythingLoaded = TRUE
// HAVE ALL MODELS LOADED
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
IF NOT HAS_MODEL_LOADED(mSecurityPed[i].mModel)
bEverythingLoaded = FALSE
ENDIF
ENDFOR
FOR i = 0 TO NUM_OF_DEALER_GOONS - 1
IF NOT HAS_MODEL_LOADED(mpDealerGoons[i].mModel)
bEverythingLoaded = FALSE
ENDIF
ENDFOR
IF NOT HAS_MODEL_LOADED(PROP_DRUG_PACKAGE_02)
bEverythingLoaded = FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(PROP_CASH_PILE_02)
bEverythingLoaded = FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(mpPrincess.mModel)
bEverythingLoaded = FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(mpDrugDealer.mModel)
bEverythingLoaded = FALSE
ENDIF
FOR i = 0 TO NUM_OF_SECURITY_CARS - 1
IF NOT HAS_MODEL_LOADED(mvSecurityCars[i].mModel)
bEverythingLoaded = FALSE
ENDIF
ENDFOR
IF NOT HAS_MODEL_LOADED(mvDealerCar.mModel)
bEverythingLoaded = FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(mvClimbingTruck.mModel)
bEverythingLoaded = FALSE
ENDIF
// HAVE RECORDINGS LOADED
IF NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(103,"PAP3Security1")
bEverythingLoaded = FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(oiSmokeWeed.mModel)
bEverythingLoaded = FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED("rcmpaparazzo_3big_1")
bEverythingLoaded = FALSE
ENDIF
ENDWHILE
ENDIF
RETURN TRUE
ENDFUNC
/// PURPOSE:
/// Security notices the player, then react accordingly.
/// PARAMS:
/// bCanSeePlayer - Whether or not the Security ped can see the player
PROC NOTICE_PLAYER_EVENT(BOOL bCanSeePlayer)
TEXT_LABEL_23 root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF bCanSeePlayer = TRUE
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// Kill dealer convo if it's still ongoing
IF ARE_STRINGS_EQUAL(root,"PAP3_DEALER")
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
ENDIF
IF bSecurityNoticedPlayer = FALSE
//WHAT SECURITY DO WHEN THEY SEE PLAYER
//DRAW GUNS ON THE GOONS
IF bCanSeePlayer = TRUE
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF IS_PED_UNINJURED(mpDealerGoons[0].mPed)
//GIVE_WEAPON_TO_PED(mSecurityPed[0].mPed,WEAPONTYPE_PISTOL,-1,FALSE,TRUE)
TASK_AIM_GUN_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1,FALSE)
eSecurityState[0] = SS_WAIT_AIM_AT_GOONS
eGoonState[0] = GS_WAIT_AIM_AT_SECURITY
iSecurityTimer = GET_GAME_TIMER() + 3000
iGoonTimer = GET_GAME_TIMER() + 2000
ENDIF
ENDIF
ELSE
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF IS_PED_UNINJURED(mpDealerGoons[0].mPed)
//GIVE_WEAPON_TO_PED(mSecurityPed[0].mPed,WEAPONTYPE_PISTOL,-1,FALSE,TRUE)
TASK_GO_STRAIGHT_TO_COORD(mSecurityPed[0].mPed,vAlleyInvestigateLoc,3.0,DEFAULT_TIME_BEFORE_WARP,353.0)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mSecurityPed[0].mPed,TRUE)
eSecurityState[0] = SS_INVESTIGATE
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
IF IS_PED_UNINJURED(mpDealerGoons[1].mPed)
//GIVE_WEAPON_TO_PED(mSecurityPed[1].mPed,WEAPONTYPE_PISTOL,-1,FALSE,TRUE)
TASK_TURN_PED_TO_FACE_ENTITY(mSecurityPed[1].mPed,PLAYER_PED_ID(),-1)
eSecurityState[1] = SS_WAIT_AIM_AT_GOONS
eGoonState[1] = GS_WAIT_AIM_AT_SECURITY
iSecurityTimer = GET_GAME_TIMER() + 3000
iGoonTimer = GET_GAME_TIMER() + 2000
ENDIF
ENDIF
//MAKE ONE SECURITY GET INTO VEHICLE AND DRIVE AROUND BACK
IF IS_PED_UNINJURED(mSecurityPed[2].mPed)
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle) AND IS_VEHICLE_SEAT_FREE(mvSecurityCars[1].mVehicle, VS_DRIVER)
CLEAR_PED_TASKS(mSecurityPed[2].mPed)
TASK_ENTER_VEHICLE(mSecurityPed[2].mPed,mvSecurityCars[1].mVehicle,DEFAULT_TIME_BEFORE_WARP,VS_DRIVER,3.0)
eSecurityState[2] = SS_ENTER_VEHICLE
ENDIF
ENDIF
//FRONT ENTRANCE SECURITY MOVE TO BACK
IF IS_PED_UNINJURED(mSecurityPed[3].mPed)
IF IS_PED_UNINJURED(PLAYER_PED_ID())
//GIVE_WEAPON_TO_PED(mSecurityPed[3].mPed,WEAPONTYPE_PISTOL,-1,FALSE,TRUE)
TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(mSecurityPed[3].mPed,<< 1094.2454, -791.3043, 57.2632 >>,PLAYER_PED_ID(),3.0,FALSE,9.0,15.0,TRUE)
eSecurityState[3] = SS_AIM_AT_GOONS
ENDIF
ENDIF
//MAKES PRINCESS FLEE
IF IS_PED_UNINJURED(mpPrincess.mPed)
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// Kill dealer convo if it's still ongoing
IF ARE_STRINGS_EQUAL(root,"PAP3_DEALER")
KILL_FACE_TO_FACE_CONVERSATION()
ENDIF
ENDIF
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle) AND IS_VEHICLE_SEAT_FREE(mvSecurityCars[0].mVehicle, VS_DRIVER)
IF NOT IS_PED_IN_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle)
CLEAR_PED_TASKS(mpPrincess.mPed)
TASK_ENTER_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle,DEFAULT_TIME_BEFORE_WARP,VS_DRIVER,3.0)
ePrincessState = SP_ENTER_VEHICLE
ENDIF
ELSE
MAKE_PED_FLEE(mpPrincess.mPed,FALSE)
ePrincessState = SP_FLEE_ON_FOOT
ENDIF
ENDIF
//MAKES DEALER FLEE
IF IS_PED_UNINJURED(mpDrugDealer.mPed)
IF bCanSeePlayer = TRUE
eDealerState = DS_CALM_DOWN
ELSE
eDealerState = DS_WAIT_FOR_FLEE
ENDIF
ENDIF
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(PAP3B_PHOTO_SPOTTED)
bSecurityNoticedPlayer = TRUE
ENDIF
ENDPROC
/// PURPOSE:
/// Checks if player is near security - Used when trying to escape them
/// PARAMS:
/// fDistance - The distance the player is classed as having escaped
/// RETURNS:
/// True - If player is away from security, false otherwise.
FUNC BOOL IS_PLAYER_AWAY_FROM_SECURITY(FLOAT fDistance = 50.0)
INT i
FOR i = 0 TO NUM_OF_SECURITY_PEDS -1
IF IS_ENTITY_ALIVE(mSecurityPed[i].mPed)
IF IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(),mSecurityPed[i].mPed,<<fDistance,fDistance,fDistance>>)
RETURN FALSE
ENDIF
ENDIF
ENDFOR
RETURN TRUE
ENDFUNC
/// PURPOSE:
/// Checks if all the security are dead - Used when trying to escape them
/// RETURNS:
/// True - If all security are dead, false otherwise
FUNC BOOL ARE_GUARDS_DEAD()
INT i
FOR i = 0 TO NUM_OF_SECURITY_PEDS -1
IF mSecurityPed[i].bImDead = FALSE
RETURN FALSE
ENDIF
ENDFOR
RETURN TRUE
ENDFUNC
/// PURPOSE:
/// Checks if one security is dead
/// RETURNS:
/// True is one security is dead
FUNC BOOL IS_ONE_GUARD_DEAD()
INT i
REPEAT NUM_OF_SECURITY_PEDS i
IF mSecurityPed[i].bImDead
RETURN TRUE
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Makes secuirty PEDS attack the player
/// Makes princess leave the area
/// Makes dealer flee
/// Makes dealer goons attack security
PROC MAKE_SECURITY_ATTACK()
TEXT_LABEL_23 root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF bSecurityAttacking = FALSE
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relDealers,relPrincess)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,relDealers)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relDealers,RELGROUPHASH_PLAYER)
//KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
/*
// Kill dealer convo if it's still ongoing
TEXT_LABEL_23 root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF ARE_STRINGS_EQUAL(root,"PAP3_DEALER")
KILL_ANY_CONVERSATION()
ENDIF
*/
INT i
FOR i = 0 TO NUM_OF_DEALER_GOONS - 1
IF IS_PED_UNINJURED(mpDealerGoons[i].mPed)
IF IS_ENTITY_ALIVE(mSecurityPed[i].mPed)
//CLEAR_PED_TASKS(mpDealerGoons[i].mPed)
//TASK_COMBAT_PED(mpDealerGoons[i].mPed,mSecurityPed[i].mPed)
//SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDealerGoons[i].mPed,FALSE)
ENDIF
ENDIF
ENDFOR
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
IF IS_ENTITY_ALIVE(mSecurityPed[i].mPed)
//GIVE_WEAPON_TO_PED(mSecurityPed[i].mPed,WEAPONTYPE_PISTOL,-1,FALSE,TRUE)
IF IS_PED_UNINJURED(mSecurityPed[i].mPed)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mSecurityPed[i].mPed,FALSE)
//TASK_COMBAT_PED(mSecurityPed[i].mPed,PLAYER_PED_ID())
eSecurityState[i] = SS_ATTACK_PLAYER_GUNS
ENDIF
//BLIP SECURITY
IF NOT DOES_BLIP_EXIST(mSecurityPed[i].mBlip)
mSecurityPed[i].mBlip = CREATE_PED_BLIP(mSecurityPed[i].mPed,FALSE,FALSE,BLIPPRIORITY_MED)
ENDIF
ENDIF
ENDFOR
//MAKE ONE SECURITY GET INTO VEHICLE AND DRIVE AROUND BACK
IF bSecurityNoticedPlayer = FALSE
IF IS_PED_UNINJURED(mSecurityPed[2].mPed)
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle) AND IS_VEHICLE_SEAT_FREE(mvSecurityCars[1].mVehicle, VS_DRIVER)
CLEAR_PED_TASKS(mSecurityPed[2].mPed)
TASK_ENTER_VEHICLE(mSecurityPed[2].mPed,mvSecurityCars[1].mVehicle,DEFAULT_TIME_BEFORE_WARP,VS_DRIVER,3.0)
eSecurityState[2] = SS_ENTER_VEHICLE
ENDIF
ENDIF
ELSE
IF IS_PED_UNINJURED(mSecurityPed[2].mPed)
//GIVE_WEAPON_TO_PED(mSecurityPed[2].mPed,WEAPONTYPE_PISTOL,-1,FALSE,TRUE)
//TASK_COMBAT_PED(mSecurityPed[2].mPed,PLAYER_PED_ID())
eSecurityState[2] = SS_ATTACK_PLAYER_GUNS
ENDIF
ENDIF
//MAKES PRINCESS FLEE
IF IS_PED_UNINJURED(mpPrincess.mPed)
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// Kill dealer convo if it's still ongoing
IF ARE_STRINGS_EQUAL(root,"PAP3_DEALER")
KILL_FACE_TO_FACE_CONVERSATION()
ENDIF
ENDIF
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle) AND IS_VEHICLE_SEAT_FREE(mvSecurityCars[0].mVehicle, VS_DRIVER)
IF NOT IS_PED_IN_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle)
CLEAR_PED_TASKS(mpPrincess.mPed)
TASK_ENTER_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle,DEFAULT_TIME_BEFORE_WARP,VS_DRIVER,3.0)
ePrincessState = SP_ENTER_VEHICLE
ENDIF
ELSE
MAKE_PED_FLEE(mpPrincess.mPed,FALSE)
ePrincessState = SP_FLEE_ON_FOOT
ENDIF
ENDIF
//MAKES DEALER FLEE
IF IS_PED_UNINJURED(mpDrugDealer.mPed)
CLEAR_PED_TASKS(mpDrugDealer.mPed)
MAKE_PED_FLEE(mpDrugDealer.mPed)
eDealerState = DS_FLEE
ENDIF
IF b_Correct_Pic_Taken = FALSE //IF PLAYER HAS NOT TAKEN PHOTO, FAIL.
SET_FAIL_REASON(FAIL_SPOTTED)
ENDIF
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(PAP3B_PHOTO_SPOTTED)
bSecurityAttacking = TRUE
ENDIF
ENDPROC
/// PURPOSE:
/// Makes all the people at the drug scene get ready to leave.
/// Gets them into the vehicles etc.
PROC LEAVE_DRUG_SCENE()
IF bLeavingDrugScene = FALSE
IF iIndividualLeaveTimer = 0
iIndividualLeaveTimer = GET_GAME_TIMER()
ENDIF
// Kill dealer convo if it's still ongoing
TEXT_LABEL_23 root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF ARE_STRINGS_EQUAL(root,"PAP3_DEALER")
KILL_ANY_CONVERSATION()
ENDIF
// PRINCESS GET INTO VEHICLE
IF IS_PED_UNINJURED(mpPrincess.mPed)
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle) AND IS_VEHICLE_SEAT_FREE(mvSecurityCars[0].mVehicle, VS_BACK_LEFT)
IF NOT IS_PED_IN_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle)
IF NOT IsPedPerformingTask(mpPrincess.mPed,SCRIPT_TASK_ENTER_VEHICLE)
TASK_ENTER_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle,DEFAULT_TIME_BEFORE_WARP,VS_BACK_LEFT,1.0)
ePrincessState = SP_ENTER_VEHICLE
ENDIF
ENDIF
ENDIF
ENDIF
// TWO GUARDS CLOSE TO PRINCESS GET INTO SAME VEHICLE AS PRINCESS
IF GET_GAME_TIMER() - iIndividualLeaveTimer > 20
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle) AND IS_VEHICLE_SEAT_FREE(mvSecurityCars[0].mVehicle, VS_DRIVER)
IF NOT IS_PED_IN_VEHICLE(mSecurityPed[0].mPed,mvSecurityCars[0].mVehicle)
IF NOT IsPedPerformingTask(mSecurityPed[0].mPed,SCRIPT_TASK_ENTER_VEHICLE)
TASK_ENTER_VEHICLE(mSecurityPed[0].mPed,mvSecurityCars[0].mVehicle,DEFAULT_TIME_BEFORE_WARP,VS_DRIVER,PEDMOVE_WALK)
eSecurityState[0] = SS_LEAVE_AREA
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_GAME_TIMER() - iIndividualLeaveTimer > 400
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle) AND IS_VEHICLE_SEAT_FREE(mvSecurityCars[0].mVehicle, VS_FRONT_RIGHT)
IF NOT IS_PED_IN_VEHICLE(mSecurityPed[1].mPed,mvSecurityCars[0].mVehicle)
IF NOT IsPedPerformingTask(mSecurityPed[1].mPed,SCRIPT_TASK_ENTER_VEHICLE)
TASK_ENTER_VEHICLE(mSecurityPed[1].mPed,mvSecurityCars[0].mVehicle,DEFAULT_TIME_BEFORE_WARP,VS_FRONT_RIGHT,1.0)
eSecurityState[1] = SS_LEAVE_AREA
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//
// TWO GUARDS AT ENTRANCE ON LEFT GET INTO SAME VEHICLE
IF GET_GAME_TIMER() - iIndividualLeaveTimer > 600
IF IS_PED_UNINJURED(mSecurityPed[2].mPed)
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle) AND IS_VEHICLE_SEAT_FREE(mvSecurityCars[1].mVehicle, VS_DRIVER)
IF NOT IS_PED_IN_VEHICLE(mSecurityPed[2].mPed,mvSecurityCars[1].mVehicle)
IF NOT IsPedPerformingTask(mSecurityPed[2].mPed,SCRIPT_TASK_ENTER_VEHICLE)
TASK_ENTER_VEHICLE(mSecurityPed[2].mPed,mvSecurityCars[1].mVehicle,DEFAULT_TIME_BEFORE_WARP,VS_DRIVER,1.0)
eSecurityState[2] = SS_LEAVE_AREA
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_GAME_TIMER() - iIndividualLeaveTimer > 500
IF IS_PED_UNINJURED(mSecurityPed[3].mPed)
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle) AND IS_VEHICLE_SEAT_FREE(mvSecurityCars[1].mVehicle, VS_BACK_LEFT)
IF NOT IS_PED_IN_VEHICLE(mSecurityPed[3].mPed,mvSecurityCars[1].mVehicle)
IF NOT IsPedPerformingTask(mSecurityPed[3].mPed,SCRIPT_TASK_ENTER_VEHICLE)
TASK_ENTER_VEHICLE(mSecurityPed[3].mPed,mvSecurityCars[1].mVehicle,DEFAULT_TIME_BEFORE_WARP,VS_BACK_LEFT,1.0)
eSecurityState[3] = SS_LEAVE_AREA
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//
//DRUG DEALER
IF GET_GAME_TIMER() - iIndividualLeaveTimer > 100
IF IS_PED_UNINJURED(mpDrugDealer.mPed) AND NOT IsPedPerformingTask(mpDrugDealer.mPed,SCRIPT_TASK_PAUSE)
IF GET_SCRIPT_TASK_STATUS(mpDrugDealer.mPed,SCRIPT_TASK_WANDER_STANDARD) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mpDrugDealer.mPed,SCRIPT_TASK_WANDER_STANDARD) <> WAITING_TO_START_TASK
FORCE_PED_MOTION_STATE(mpDrugDealer.mPed,MS_ON_FOOT_WALK,FALSE,FAUS_CUTSCENE_EXIT)
SET_PED_MIN_MOVE_BLEND_RATIO(mpDrugDealer.mPed,PEDMOVE_WALK)
TASK_WANDER_STANDARD(mpDrugDealer.mPed)
ENDIF
eDealerState = DS_LEAVE_AREA
ENDIF
ENDIF
//DEALER GOONS
IF GET_GAME_TIMER() - iIndividualLeaveTimer > 350
IF IS_PED_UNINJURED(mpDealerGoons[0].mPed) AND NOT IsPedPerformingTask(mpDealerGoons[0].mPed,SCRIPT_TASK_WANDER_STANDARD)
TASK_WANDER_STANDARD(mpDealerGoons[0].mPed)
eGoonState[0] = GS_FLEE_AREA
ENDIF
ENDIF
IF GET_GAME_TIMER() - iIndividualLeaveTimer > 600
IF IS_PED_UNINJURED(mpDealerGoons[1].mPed) AND NOT IsPedPerformingTask(mpDealerGoons[1].mPed,SCRIPT_TASK_WANDER_STANDARD)
IF GET_SCRIPT_TASK_STATUS(mpDealerGoons[1].mPed,SCRIPT_TASK_WANDER_STANDARD) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mpDealerGoons[1].mPed,SCRIPT_TASK_WANDER_STANDARD) <> WAITING_TO_START_TASK
FORCE_PED_MOTION_STATE(mpDealerGoons[1].mPed,MS_ON_FOOT_WALK,FALSE,FAUS_CUTSCENE_EXIT)
SET_PED_MIN_MOVE_BLEND_RATIO(mpDealerGoons[1].mPed,PEDMOVE_WALK)
TASK_WANDER_STANDARD(mpDealerGoons[1].mPed)
ENDIF
eGoonState[1] = GS_FLEE_AREA
ENDIF
ENDIF
IF GET_GAME_TIMER() - iIndividualLeaveTimer > 5000
//IF PLAYER HAS NOT GOT THE PHOTO AND THEY ARE LEAVING - FAIL
IF b_Correct_Pic_Taken = FALSE
SET_FAIL_REASON(FAIL_PHOTO_LOST)
ENDIF
bLeavingDrugScene = TRUE
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Monitors the DRUG DEALER and deals with their behaviours
PROC Monitor_Drug_Dealer()
SWITCH eDealerState
CASE DS_WAIT
IF HAS_PLAYER_THREATENED_PED(mpDrugDealer.mPed)
OR IS_BULLET_IN_AREA(GET_ENTITY_COORDS(mpDrugDealer.mPed),20.0,FALSE)
MAKE_PED_FLEE(mpDrugDealer.mPed)
MAKE_SECURITY_ATTACK()
eDealerState = DS_FLEE
ENDIF
BREAK
CASE DS_CALM_DOWN
IF (missionStage = MS_LEAVE_AREA OR missionStage = MS_ESCAPE_SECURITY) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_ONE_ID, mSecurityPed[0].mPed, "Paparazzo3BBodyGuard1")
ADD_PED_FOR_DIALOGUE(sSpeach, DEALER_ID, mpDrugDealer.mPed, "Paparazzo3BDrugDealer")
ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_TWO_ID, mSecurityPed[1].mPed, "Paparazzo3BBodyGuard2")
ADD_PED_FOR_DIALOGUE(sSpeach, GOON_ID, mpDealerGoons[0].mPed, "Paparazzo3BDealerGoon1")
//IF CREATE_CONVERSATION(sSpeach, "pap3bau", "PAP3_SECUR2", CONV_PRIORITY_HIGH)
eDealerState = DS_WAIT_FOR_FLEE
//ENDIF
ENDIF
//ADD STUFF MAKES DEALER TRY TO CALM THE SITUATION
IF IS_BULLET_IN_AREA(GET_ENTITY_COORDS(mpDrugDealer.mPed),20.0,FALSE)
//KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
MAKE_PED_FLEE(mpDrugDealer.mPed)
eDealerState = DS_FLEE
ENDIF
BREAK
CASE DS_WAIT_FOR_FLEE
IF IS_BULLET_IN_AREA(GET_ENTITY_COORDS(mpDrugDealer.mPed),20.0,FALSE)
//KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
MAKE_PED_FLEE(mpDrugDealer.mPed)
eDealerState = DS_FLEE
ENDIF
BREAK
CASE DS_FLEE
//FLEEING THE AREA
BREAK
CASE DS_LEAVE_AREA
BREAK
ENDSWITCH
ENDPROC
//// PURPOSE:
/// Monitors drug goons, handles their behaviours
/// PARAMS:
/// iPedNum - The index of the goon we're monitoring
PROC Monitor_Drug_Goons(INT iPedNum)
SWITCH eGoonState[iPedNum]
CASE GS_WAIT
BREAK
CASE GS_WAIT_AIM_AT_SECURITY
IF GET_GAME_TIMER() > iGoonTimer
IF IS_ENTITY_ALIVE(mSecurityPed[iPedNum].mPed)
TASK_AIM_GUN_AT_ENTITY(mpDealerGoons[iPedNum].mPed,mSecurityPed[iPedNum].mPed,-1,FALSE)
iGoonTimer = GET_GAME_TIMER() + 15000
eGoonState[iPedNum] = GS_AIM_AT_SECURITY
ENDIF
ENDIF
BREAK
CASE GS_AIM_AT_SECURITY
IF GET_GAME_TIMER() > iGoonTimer
CLEAR_PED_TASKS(mpDealerGoons[iPedNum].mPed)
//SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,RELGROUPHASH_PLAYER,relHatePlayer)
eGoonState[iPedNum] = GS_SHOOT_SECURITY
ENDIF
BREAK
CASE GS_SHOOT_SECURITY
IF ARE_GUARDS_DEAD()
MAKE_PED_FLEE(mpDealerGoons[iPedNum].mPed)
eGoonState[iPedNum] = GS_FLEE_AREA
ENDIF
BREAK
CASE GS_FLEE_AREA
//FLEEING AREA
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Monitors the PRINCESS and deals with her behaviours
PROC Monitor_Princess()
SWITCH ePrincessState
CASE SP_WAIT
IF NOT IS_SCRIPTED_CONVERSATION_ONGOING()
IF missionStage = MS_TAKE_PHOTO
//KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
/*
ADD_PED_FOR_DIALOGUE(sSpeach, PRINCESS_ID, mpPrincess.mPed, "PRINCESS")
ADD_PED_FOR_DIALOGUE(sSpeach, DEALER_ID, mpDrugDealer.mPed, "Paparazzo3BDrugDealer")
IF CREATE_CONVERSATION(sSpeach, "pap3bau", "PAP3_DEALER", CONV_PRIORITY_HIGH,DO_NOT_DISPLAY_SUBTITLES)
//TASK_PLAY_ANIM(mpPrincess.mPed,ANIM_DICT,PRINCESS_ANIM,NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_LOOPING)
ePrincessState = SP_SMOKE
ENDIF
*/
ENDIF
ENDIF
BREAK
CASE SP_SMOKE
IF HAS_PLAYER_THREATENED_PED(mpPrincess.mPed)
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
IF b_Correct_Pic_Taken = FALSE
SET_FAIL_REASON(FAIL_SPOTTED)
ENDIF
IF IS_PED_UNINJURED(mpPrincess.mPed)
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle) AND IS_VEHICLE_SEAT_FREE(mvSecurityCars[0].mVehicle, VS_DRIVER)
CLEAR_PED_TASKS(mpPrincess.mPed)
TASK_ENTER_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle,DEFAULT_TIME_BEFORE_WARP,VS_DRIVER,3.0)
ePrincessState = SP_ENTER_VEHICLE
ELSE
MAKE_PED_FLEE(mpPrincess.mPed,FALSE)
ePrincessState = SP_FLEE_ON_FOOT
ENDIF
ENDIF
ENDIF
BREAK
CASE SP_ENTER_VEHICLE
//DROP WEED
IF IS_ENTITY_ATTACHED(oiSmokeWeed.mObject)
DETACH_ENTITY(oiSmokeWeed.mObject,TRUE,FALSE)
ENDIF
//
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle)
IF IS_PED_IN_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle)
FREEZE_ENTITY_POSITION(mvSecurityCars[0].mVehicle, FALSE)
IF bSecurityAttacking = TRUE
OR bSecurityNoticedPlayer = TRUE
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(mpPrincess.mPed,mvSecurityCars[0].mVehicle,"PAP3_Security1",DRIVINGMODE_PLOUGHTHROUGH,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
/*SEQUENCE_INDEX siDriveOff
OPEN_SEQUENCE_TASK(siDriveOff)
//TASK_ENTER_VEHICLE(NULL, mvSecurityCars[0].mVehicle)
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(NULL,mvSecurityCars[0].mVehicle,"PAP3_Security1",DRIVINGMODE_PLOUGHTHROUGH,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
TASK_VEHICLE_DRIVE_WANDER(NULL, mvSecurityCars[0].mVehicle, 20, DRIVINGMODE_PLOUGHTHROUGH)
CLOSE_SEQUENCE_TASK(siDriveOff)
TASK_PERFORM_SEQUENCE(mpPrincess.mPed, siDriveOff)
CLEAR_SEQUENCE_TASK(siDriveOff)*/
ePrincessState = SP_WANDER
ELSE
IF eSecurityState[0] = SS_DRIVE_AWAY_FROM_AREA AND eSecurityState[1] = SS_DRIVE_AWAY_FROM_AREA
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(mpPrincess.mPed,mvSecurityCars[0].mVehicle,"PAP3_Security1",DRIVINGMODE_PLOUGHTHROUGH,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
/*SEQUENCE_INDEX siDriveOff
OPEN_SEQUENCE_TASK(siDriveOff)
//TASK_ENTER_VEHICLE(NULL, mvSecurityCars[0].mVehicle)
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(NULL,mvSecurityCars[0].mVehicle,"PAP3_Security1",DRIVINGMODE_PLOUGHTHROUGH,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
TASK_VEHICLE_DRIVE_WANDER(NULL, mvSecurityCars[0].mVehicle, 20, DRIVINGMODE_PLOUGHTHROUGH)
CLOSE_SEQUENCE_TASK(siDriveOff)
TASK_PERFORM_SEQUENCE(mpPrincess.mPed, siDriveOff)
CLEAR_SEQUENCE_TASK(siDriveOff)*/
ePrincessState = SP_WANDER
ENDIF
ENDIF
ENDIF
ELSE
MAKE_PED_FLEE(mpPrincess.mPed,FALSE)
ePrincessState = SP_FLEE_ON_FOOT
ENDIF
BREAK
CASE SP_FLEE_IN_VEHICLE
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle)
IF GET_VEHICLE_WAYPOINT_PROGRESS(mvSecurityCars[0].mVehicle) >= 12
IF IS_PED_UNINJURED(mpPrincess.mPed)
IF bSecurityAttacking = TRUE
OR bSecurityNoticedPlayer = TRUE
TASK_VEHICLE_DRIVE_WANDER(mpPrincess.mPed,mvSecurityCars[0].mVehicle,80.0,DRIVINGMODE_AVOIDCARS_RECKLESS)
ePrincessState = SP_WANDER
ELSE
TASK_VEHICLE_DRIVE_WANDER(mpPrincess.mPed,mvSecurityCars[0].mVehicle,10.0,DRIVINGMODE_AVOIDCARS)
ePrincessState = SP_WANDER
ENDIF
ENDIF
ENDIF
ELSE
IF IS_PED_UNINJURED(mpPrincess.mPed)
TASK_WANDER_STANDARD(mpPrincess.mPed)
ePrincessState = SP_WANDER
ENDIF
ENDIF
//FLEEING PLAYER IN VEHICLE
BREAK
CASE SP_FLEE_ON_FOOT
//FLEEING PLAYER ON FOOT
BREAK
CASE SP_WANDER
// WANDERING AROUND
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle)
IF GET_VEHICLE_WAYPOINT_PROGRESS(mvSecurityCars[0].mVehicle) >= 14
IF IS_PED_UNINJURED(mpPrincess.mPed) AND NOT IsPedPerformingTask(mpPrincess.mPed, SCRIPT_TASK_VEHICLE_DRIVE_WANDER)
TASK_VEHICLE_DRIVE_WANDER(mpPrincess.mPed,mvSecurityCars[0].mVehicle,10.0,DRIVINGMODE_AVOIDCARS)
ENDIF
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Monitors the Security and deals with their behaviours
/// PARAMS:
/// iPedNum - The ped we are checking
PROC Monitor_Security(INT iPedNum)
INT iGoonNum
IF iPedNum = 0
iGoonNum = 0
ELSE
iGoonNum = 1
ENDIF
SWITCH eSecurityState[iPedNum]
CASE SS_GUARD_AREA
VEHICLE_INDEX viTemp
viTemp = GET_PLAYERS_LAST_VEHICLE()
IF HAS_PLAYER_THREATENED_PED(mSecurityPed[iPedNum].mPed) OR IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), mSecurityPed[iPedNum].mPed)
OR (IS_VEHICLE_OK(viTemp) AND IS_ENTITY_TOUCHING_ENTITY(viTemp, mSecurityPed[iPedNum].mPed))
//KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_ONE_ID, mSecurityPed[iPedNum].mPed, "Paparazzo3BBodyGuard1")
IF IS_PLAYER_UNARMED()
MAKE_SECURITY_ATTACK()
eSecurityState[iPedNum] = SS_ATTACK_PLAYER_GUNS
ELSE
// not using a IF statement here as it delays the security attacking too much
IF (missionStage = MS_LEAVE_AREA OR missionStage = MS_ESCAPE_SECURITY)
CREATE_CONVERSATION(sSpeach, "pap3bau", "PAP3_SECUR3", CONV_PRIORITY_HIGH)
ENDIF
MAKE_SECURITY_ATTACK()
eSecurityState[iPedNum] = SS_ATTACK_PLAYER_GUNS
ENDIF
ELSE
IF HAS_PLAYER_TRIED_TO_ENTER()
IF iPedNum = 2 // SECURITY PED GUARDING THE SIDE ENTRANCE
IF IS_PLAYER_UNARMED()
IF bSecurityWarned
TASK_LOOK_AT_ENTITY(mSecurityPed[iPedNum].mPed, PLAYER_PED_ID(), -1, SLF_USE_TORSO)
eSecurityState[iPedNum] = SS_WARN_PLAYER
ELSE
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(mSecurityPed[iPedNum].mPed, "PAP3_ANAA", "Paparazzo3BBodyGuard1", SPEECH_PARAMS_STANDARD)
TASK_LOOK_AT_ENTITY(mSecurityPed[iPedNum].mPed, PLAYER_PED_ID(), -1, SLF_USE_TORSO)
bSecurityWarned = TRUE
eSecurityState[iPedNum] = SS_WARN_PLAYER
ENDIF
ELSE //ATTACK PLAYER HAS A WEAPON
//KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_ONE_ID, mSecurityPed[iPedNum].mPed, "Paparazzo3BBodyGuard1")
// not using a IF statement here as it delays the security attacking too much
IF (missionStage = MS_LEAVE_AREA OR missionStage = MS_ESCAPE_SECURITY)
CREATE_CONVERSATION(sSpeach, "pap3bau", "PAP3_SECUR3", CONV_PRIORITY_HIGH)
ENDIF
MAKE_SECURITY_ATTACK()
eSecurityState[iPedNum] = SS_ATTACK_PLAYER_GUNS
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_WARN_PLAYER
//WARNED PLAYER ABOUT TRYING TO ENTER
IF iPedNum = 2 // SECURITY PED GUARDING THE SIDE ENTRANCE
IF NOT HAS_PLAYER_TRIED_TO_ENTER()
TASK_CLEAR_LOOK_AT(mSecurityPed[iPedNum].mPed)
eSecurityState[iPedNum] = SS_GUARD_AREA
ENDIF
ENDIF
BREAK
CASE SS_ATTACK_PLAYER_GUNS
//ATTACKING PLAYER WITH GUNS
BREAK
CASE SS_WAIT_AIM_AT_GOONS
IF GET_GAME_TIMER() > iSecurityTimer
OR HAS_PLAYER_THREATENED_PED(mSecurityPed[iPedNum].mPed)
IF IS_ENTITY_ALIVE(mpDealerGoons[iGoonNum].mPed)
CLEAR_PED_TASKS(mSecurityPed[iPedNum].mPed)
TASK_AIM_GUN_AT_ENTITY(mSecurityPed[iPedNum].mPed,mpDealerGoons[iGoonNum].mPed,-1,FALSE)
iSecurityTimer = GET_GAME_TIMER() + 1000
eSecurityState[iPedNum] = SS_AIM_AT_GOONS
ENDIF
ENDIF
BREAK
CASE SS_INVESTIGATE // GOES INTO HERE IF PLAYER GETS PHONECALL FROM BEVERLY WHILE DOWN ALLEY OR NEAR GUARDS
IF CAN_SECURITY_SEE_PLAYER()
OR IS_ENTITY_AT_COORD(mSecurityPed[iPedNum].mPed,vAlleyInvestigateLoc,<<1.5,1.5,1.5>>)
OR IS_PED_RUNNING(PLAYER_PED_ID())
OR HAS_PLAYER_THREATENED_PED(mSecurityPed[iPedNum].mPed)
ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_ONE_ID, mSecurityPed[0].mPed, "Paparazzo3BBodyGuard1")
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
//KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
KILL_ANY_CONVERSATION()
ENDIF
IF (missionStage = MS_LEAVE_AREA OR missionStage = MS_ESCAPE_SECURITY)
//IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeach, "pap3bau", "PAP3_SECUR4","PAP3_SECUR4_3",CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
MAKE_SECURITY_ATTACK()
//ENDIF
ELSE
MAKE_SECURITY_ATTACK()
ENDIF
ENDIF
//SECURITY IS INVESTIGATING THE ALLEY
BREAK
CASE SS_AIM_AT_GOONS
IF GET_GAME_TIMER() > iSecurityTimer
OR HAS_PLAYER_THREATENED_PED(mSecurityPed[iPedNum].mPed)
CLEAR_PED_TASKS(mSecurityPed[iPedNum].mPed)
//SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relHatePlayer,RELGROUPHASH_PLAYER)
//SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,RELGROUPHASH_PLAYER,relHatePlayer)
eSecurityState[iPedNum] = SS_ATTACK_GOONS
ENDIF
BREAK
CASE SS_ATTACK_GOONS
MAKE_SECURITY_ATTACK()
//SHOOTING AT DRUG DEALERS
BREAK
CASE SS_ENTER_VEHICLE
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle)
IF IS_PED_IN_VEHICLE(mSecurityPed[iPedNum].mPed, mvSecurityCars[1].mVehicle)
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(mvSecurityCars[1].mVehicle)
FREEZE_ENTITY_POSITION(mvSecurityCars[1].mVehicle, FALSE)
START_PLAYBACK_RECORDED_VEHICLE(mvSecurityCars[1].mVehicle, 103 ,"PAP3Security1" )
SET_PLAYBACK_SPEED(mvSecurityCars[1].mVehicle,1.2)
CPRINTLN(DEBUG_MISSION, "STARTING PLAYBACK NOW")
eSecurityState[iPedNum] = SS_DRIVER_TO_PLAYER
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_DRIVER_TO_PLAYER
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle)
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(mvSecurityCars[1].mVehicle)
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND NOT IS_PLAYER_IN_ALLEY_NOTICE_AREA()
//TASK_COMBAT_PED(mSecurityPed[iPedNum].mPed,PLAYER_PED_ID())
eSecurityState[iPedNum] = SS_ATTACK_PLAYER_CAR
ELSE
TASK_LEAVE_ANY_VEHICLE(mSecurityPed[iPedNum].mPed,0)
eSecurityState[iPedNum] = SS_LEAVE_VEHICLE
ENDIF
ENDIF
ENDIF
//DRIVING AROUND TO BLOCK THE PLAYER IN
BREAK
CASE SS_LEAVE_VEHICLE
IF NOT IS_PED_IN_ANY_VEHICLE(mSecurityPed[iPedNum].mPed)
//TASK_COMBAT_PED(mSecurityPed[iPedNum].mPed,PLAYER_PED_ID())
eSecurityState[iPedNum] = SS_ATTACK_PLAYER_GUNS
ENDIF
BREAK
CASE SS_ATTACK_PLAYER_CAR
//ATTACKING PLAYER IN A VEHICLE
BREAK
CASE SS_LEAVE_AREA
IF IS_PED_IN_ANY_VEHICLE(mSecurityPed[iPedNum].mPed,FALSE)
eSecurityState[iPedNum] = SS_DRIVE_AWAY_FROM_AREA
ENDIF
BREAK
CASE SS_DRIVE_AWAY_FROM_AREA
IF ePrincessState = SP_FLEE_IN_VEHICLE OR ePrincessState = SP_WANDER
IF iPedNum = 2
IF IS_PED_UNINJURED(mSecurityPed[iPedNum].mPed)
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle)
FREEZE_ENTITY_POSITION(mvSecurityCars[1].mVehicle, FALSE)
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(mSecurityPed[iPedNum].mPed,mvSecurityCars[1].mVehicle,"PAP3_Security1",DRIVINGMODE_PLOUGHTHROUGH,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
eSecurityState[iPedNum] = SS_DRIVE_OUT_OF_ALLEY
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_DRIVE_OUT_OF_ALLEY
IF iPedNum = 2
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle)
IF GET_VEHICLE_WAYPOINT_PROGRESS(mvSecurityCars[1].mVehicle) >= 14
IF IS_PED_UNINJURED(mSecurityPed[iPedNum].mPed)
TASK_VEHICLE_DRIVE_WANDER(mSecurityPed[iPedNum].mPed,mvSecurityCars[1].mVehicle,10.0,DRIVINGMODE_AVOIDCARS)
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_DRIVE_WANDER
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Monitors the Princess scene.
PROC Monitor_Princess_Scene()
INT i
//SECURITY
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
IF IS_PED_UNINJURED(mSecurityPed[i].mPed)
Monitor_Security(i)
ELSE
SAFE_REMOVE_BLIP(mSecurityPed[i].mBlip)
mSecurityPed[i].bImDead = TRUE // USED TO CHECK IF ALL SECURITY ARE DEAD
ENDIF
ENDFOR
IF bSecurityAttacking AND missionStage = MS_TAKE_PHOTO
IF IS_PLAYER_AWAY_FROM_SECURITY(150.0)
i = 0
REPEAT NUM_OF_SECURITY_PEDS i
SAFE_REMOVE_BLIP(mSecurityPed[i].mBlip)
SAFE_RELEASE_PED(mSecurityPed[i].mPed, FALSE)
ENDREPEAT
bSecurityAttacking = FALSE
ENDIF
ENDIF
//PRINCESS
IF IS_ENTITY_ALIVE(mpPrincess.mPed)
Monitor_Princess()
ELSE
MAKE_SECURITY_ATTACK()
SET_FAIL_REASON(FAIL_PRINCESS_KILLED) //PRINCESS HAS BEEN KILLED
ENDIF
//DRUG DEALER
IF IS_ENTITY_ALIVE(mpDrugDealer.mPed)
Monitor_Drug_Dealer()
ENDIF
//DRUG DEALER GOONS
FOR i = 0 TO NUM_OF_DEALER_GOONS - 1
IF IS_ENTITY_ALIVE(mpDealerGoons[i].mPed)
Monitor_Drug_Goons(i)
ENDIF
ENDFOR
IF IS_VEHICLE_OK(mvDealerCar.mVehicle) AND IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), mvDealerCar.mVehicle)
START_VEHICLE_ALARM(mvDealerCar.mVehicle)
MAKE_SECURITY_ATTACK()
//KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
IF b_Correct_Pic_Taken = FALSE
SET_FAIL_REASON(FAIL_SPOTTED) // PLAYER WAS SPOTTED
ENDIF
ENDIF
ENDIF
IF bSecurityAttacking = FALSE
//AREA CHECK - INSIDE A SPOT AREA CLOSE TO GUARDS
IF ePrincessState <> SP_FLEE_IN_VEHICLE
AND ePrincessState <> SP_WANDER
IF IS_PLAYER_INSIDE_SPOT_AREA() OR IS_ONE_GUARD_DEAD()
IF IS_PED_RUNNING(PLAYER_PED_ID())
OR IS_PED_SPRINTING(PLAYER_PED_ID())
OR IS_ONE_GUARD_DEAD()
OR NOT IS_PLAYER_UNARMED()
MAKE_SECURITY_ATTACK()
ELSE
NOTICE_PLAYER_EVENT(TRUE)
ENDIF
IF b_Correct_Pic_Taken = FALSE //IF PLAYER HAS NOT TAKEN PHOTO BUT ENTERS AREA, FAIL FOR LOSING PHOTO
SET_FAIL_REASON(FAIL_SPOTTED) // PLAYER WAS SPOTTED
ENDIF
ENDIF
ENDIF
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
//PLAYER IS IN THE ALLEY AREA - ONLY WANT TO DO THIS IF PRINCESS IS NOT ALREADY LEAVING AREA
IF ePrincessState <> SP_FLEE_IN_VEHICLE
AND ePrincessState <> SP_WANDER
IF IS_PLAYER_IN_ALLEY_NOTICE_AREA()
IF IS_ENTITY_ALIVE(mSecurityPed[i].mPed)
IF (NOT GET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID()) AND (CAN_SECURITY_SEE_PLAYER() OR IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())))
OR (bEnteredAlley AND GET_GAME_TIMER() > iNoticeInAlleyTimer AND CAN_SECURITY_SEE_PLAYER())
//IF PLAYER HAS NOT TAKEN PHOTO BUT ENTERS AREA, FAIL FOR LOSING PHOTO
IF b_Correct_Pic_Taken = FALSE
NOTICE_PLAYER_EVENT(TRUE)
SET_FAIL_REASON(FAIL_SPOTTED) // PLAYER WAS SPOTTED
ELSE
NOTICE_PLAYER_EVENT(TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDFOR
ENDIF
ENDPROC
/// PURPOSE:
/// Used to put PEDS into vehicles at end of mission to drive away
/// Only used if player cannot see any of the PEDS or Vehicles
/// Also added makes drug dealer and goons walk away from area.
PROC TELEPORT_PEDS_INTO_VEHICLES()
IF bLeavingDrugScene = FALSE
IF IS_PED_UNINJURED(mpPrincess.mPed)
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle)
IF NOT IS_PED_IN_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle)
CLEAR_PED_TASKS(mpPrincess.mPed)
SET_PED_INTO_VEHICLE(mpPrincess.mPed,mvSecurityCars[0].mVehicle,VS_DRIVER)
ePrincessState = SP_ENTER_VEHICLE
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle)
IF NOT IS_PED_IN_VEHICLE(mSecurityPed[0].mPed,mvSecurityCars[0].mVehicle)
CLEAR_PED_TASKS(mSecurityPed[0].mPed)
SET_PED_INTO_VEHICLE(mSecurityPed[0].mPed,mvSecurityCars[0].mVehicle,VS_BACK_LEFT)
eSecurityState[0] = SS_LEAVE_AREA
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle)
IF NOT IS_PED_IN_VEHICLE(mSecurityPed[1].mPed,mvSecurityCars[0].mVehicle)
CLEAR_PED_TASKS(mSecurityPed[1].mPed)
SET_PED_INTO_VEHICLE(mSecurityPed[1].mPed,mvSecurityCars[0].mVehicle,VS_FRONT_RIGHT)
eSecurityState[1] = SS_LEAVE_AREA
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[2].mPed)
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle)
IF NOT IS_PED_IN_VEHICLE(mSecurityPed[2].mPed,mvSecurityCars[1].mVehicle)
CLEAR_PED_TASKS(mSecurityPed[2].mPed)
SET_PED_INTO_VEHICLE(mSecurityPed[2].mPed,mvSecurityCars[1].mVehicle,VS_DRIVER)
eSecurityState[1] = SS_LEAVE_AREA
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[3].mPed)
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle)
IF NOT IS_PED_IN_VEHICLE(mSecurityPed[3].mPed,mvSecurityCars[1].mVehicle)
CLEAR_PED_TASKS(mSecurityPed[3].mPed)
SET_PED_INTO_VEHICLE(mSecurityPed[3].mPed,mvSecurityCars[1].mVehicle,VS_BACK_LEFT)
eSecurityState[1] = SS_LEAVE_AREA
ENDIF
ENDIF
ENDIF
//DRUG DEALER
IF IS_PED_UNINJURED(mpDrugDealer.mPed)
TASK_WANDER_STANDARD(mpDrugDealer.mPed)
eDealerState = DS_LEAVE_AREA
ENDIF
//DEALER GOONS
IF IS_PED_UNINJURED(mpDealerGoons[0].mPed)
TASK_WANDER_STANDARD(mpDealerGoons[0].mPed)
eGoonState[0] = GS_FLEE_AREA
ENDIF
IF IS_PED_UNINJURED(mpDealerGoons[1].mPed)
TASK_WANDER_STANDARD(mpDealerGoons[1].mPed)
eGoonState[1] = GS_FLEE_AREA
ENDIF
bLeavingDrugScene = TRUE
ENDIF
ENDPROC
/// PURPOSE:
/// Unfreezes the mission vehicles
PROC UnfreezeVehicles()
IF IS_VEHICLE_OK(mvClimbingTruck.mVehicle)
FREEZE_ENTITY_POSITION(mvClimbingTruck.mVehicle,FALSE)
ENDIF
IF IS_VEHICLE_OK(mvDealerCar.mVehicle)
FREEZE_ENTITY_POSITION(mvDealerCar.mVehicle,FALSE)
ENDIF
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle)
FREEZE_ENTITY_POSITION(mvSecurityCars[0].mVehicle,FALSE)
ENDIF
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle)
FREEZE_ENTITY_POSITION(mvSecurityCars[1].mVehicle,FALSE)
ENDIF
ENDPROC
/// PURPOSE:
/// Manages the phone help text for the player
PROC MANAGE_PHONE_HELP()
IF bSimpleHelp = FALSE
SWITCH iHelp
CASE 0 //Tells player to access the phone
bHelpPrint2 = FALSE
bHelpPrint3 = FALSE
IF NOT IS_PHONE_ONSCREEN()
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("PAP3_HELP1")
IF bHelpPrint1 = FALSE
PRINT_HELP("PAP3_HELP1") // Access the phone using ~PAD_DPAD_UP~.
bHelpPrint1 = TRUE
ENDIF
ENDIF
ELSE
bHelpPrint1 = FALSE
iHelp ++
ENDIF
BREAK
CASE 1 // Tells player to select the camera once phone is up
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("appCamera")) = 0
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("PAP3_HELP2")
IF bHelpPrint2 = FALSE
PRINT_HELP("PAP3_HELP2") // Select the camera from the phone with ~PAD_DPAD_ALL~.
bHelpPrint2 = TRUE
ENDIF
ENDIF
ELSE
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("PAP3_HELP2")
CLEAR_HELP()
ENDIF
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("appCamera"))> 0
iHelp ++
ENDIF
ENDIF
IF NOT IS_PHONE_ONSCREEN()
iHelp = 0
ENDIF
BREAK
CASE 2 // Tells player to frame the shot and take picture
IF b_Correct_Pic_Taken = TRUE
iHelp ++
ELSE
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("appCamera")) = 0
bHelpPrint2 = FALSE
bHelpPrint3 = FALSE
iHelp = 1
ELIF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("appCamera"))> 0
//IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("PAP3_HELP3")
IF bHelpPrint3 = FALSE
//PRINT_HELP("PAP3_HELP3")//Frame your shot then take the picture with ~PAD_A~.
bHelpPrint3 = TRUE
ENDIF
//ENDIF
ElIF NOT IS_PHONE_ONSCREEN()
iHelp = 0
ENDIF
ENDIF
BREAK
CASE 3 // PHOTO HAS BEEN TAKEN - WAITING FOR PLAYER TO SEND
BREAK
ENDSWITCH
ELSE // Switches to simple phone help if player has used camera before.
IF b_Correct_Pic_Taken = FALSE
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("appCamera"))= 0
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("PAP3_HELP6")
IF bPrintNonSimpleHelp = FALSE
PRINT_HELP("PAP3_HELP6") // Use you phone to take the picture
bPrintNonSimpleHelp = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("appCamera"))> 0
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("PAP3_HELP6") // Use you phone to take the picture
CLEAR_HELP()
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Handles Princess scene - Loads models, checks they are loaded.
/// Also checks if everything is ok once created.
PROC HANDLE_PRINCESS_SCENE()
INT i
IF bPrincessSceneCreated = FALSE
IF HAS_PRINCESS_SCENE_LOADED()
// CREATE SECURITY
FOR i = 0 TO NUM_OF_SECURITY_PEDS -1
CreateMissionPed(mSecurityPed[i],FALSE)
SET_ENTITY_IS_TARGET_PRIORITY(mSecurityPed[i].mPed,TRUE)
SET_PED_RELATIONSHIP_GROUP_HASH(mSecurityPed[i].mPed,relPrincess)
IF i = 3
TASK_START_SCENARIO_IN_PLACE(mSecurityPed[i].mPed,"WORLD_HUMAN_GUARD_STAND")
SET_PED_COMBAT_ATTRIBUTES(mSecurityPed[i].mPed,CA_AGGRESSIVE,TRUE)
SET_PED_COMBAT_MOVEMENT(mSecurityPed[i].mPed,CM_WILLADVANCE)
ENDIF
IF i = 0
OR i = 3
GIVE_WEAPON_TO_PED(mSecurityPed[i].mPed,WEAPONTYPE_APPISTOL,-1,FALSE,FALSE)
GIVE_WEAPON_COMPONENT_TO_PED(mSecurityPed[i].mPed,WEAPONTYPE_APPISTOL,WEAPONCOMPONENT_AT_PI_FLSH)
SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mSecurityPed[i].mPed)
ELSE
GIVE_WEAPON_TO_PED(mSecurityPed[i].mPed,WEAPONTYPE_APPISTOL,-1,FALSE,FALSE)
IF i = 1
SET_PED_COMBAT_MOVEMENT(mSecurityPed[i].mPed,CM_WILLADVANCE)
SET_PED_COMBAT_ATTRIBUTES(mSecurityPed[i].mPed,CA_AGGRESSIVE,TRUE)
SET_PED_COMBAT_RANGE(mSecurityPed[i].mPed,CR_NEAR)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mSecurityPed[1].mPed,TRUE)
ELSE
SET_PED_ACCURACY(mSecurityPed[i].mPed,25)
ENDIF
ENDIF
IF i = 0
OR i = 1
SET_PED_COMBAT_ATTRIBUTES(mSecurityPed[i].mPed,CA_USE_COVER,FALSE)
ENDIF
ADD_ARMOUR_TO_PED(mSecurityPed[i].mPed,70)
SET_PED_CONFIG_FLAG(mSecurityPed[i].mPed,PCF_DontBehaveLikeLaw,TRUE)
IF i = 0
SET_PED_SEEING_RANGE(mSecurityPed[i].mPed,5)
ELSE
SET_PED_SEEING_RANGE(mSecurityPed[i].mPed,20)
ENDIF
IF i = 0
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,0), 1, 2, 0) //(head)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,11), 1, 0, 0) //(jbib)
ELIF i = 1
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,0), 1, 0, 0) //(head)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,11), 0, 2, 0) //(jbib)
ELIF i = 2
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,0), 1, 0, 0) //(head)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,3), 0, 2, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 2, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,11), 1, 1, 0) //(jbib)
ELIF i = 3
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,0), 0, 2, 0) //(head)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,3), 0, 2, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
SET_PED_COMPONENT_VARIATION(mSecurityPed[i].mPed, INT_TO_ENUM(PED_COMPONENT,11), 0, 1, 0) //(jbib)
ENDIF
ENDFOR
// CREATE PRINCESS
CreateMissionPed(mpPrincess,TRUE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpPrincess.mPed,TRUE)
SET_PED_RELATIONSHIP_GROUP_HASH(mpPrincess.mPed,relPrincess)
SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(mpPrincess.mPed,TRUE)
TASK_START_SCENARIO_IN_PLACE(mpPrincess.mPed,"WORLD_HUMAN_SMOKING")
SET_PED_PROP_INDEX(mpPrincess.mPed, ANCHOR_EYES, 0)
// CREATE DRUG DEALER
CreateMissionPed(mpDrugDealer,FALSE)
SET_ENTITY_HEALTH(mpDrugDealer.mPed,125)
//TASK_START_SCENARIO_IN_PLACE(mpDrugDealer.mPed,"WORLD_HUMAN_DRUG_DEALER_HARD")
SET_PED_COMBAT_ATTRIBUTES(mpDrugDealer.mPed,CA_ALWAYS_FLEE,TRUE)
SET_PED_RELATIONSHIP_GROUP_HASH(mpDrugDealer.mPed,relDealers)
SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mpDrugDealer.mPed)
SET_PED_COMPONENT_VARIATION(mpDrugDealer.mPed, INT_TO_ENUM(PED_COMPONENT,0), 1, 1, 0) //(head)
SET_PED_COMPONENT_VARIATION(mpDrugDealer.mPed, INT_TO_ENUM(PED_COMPONENT,3), 0, 2, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(mpDrugDealer.mPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDrugDealer.mPed,TRUE)
/*
SET_PED_COMPONENT_VARIATION(mpDrugDealer.mPed, INT_TO_ENUM(PED_COMPONENT,0), 1, 2, 0) //(head)
SET_PED_COMPONENT_VARIATION(mpDrugDealer.mPed, INT_TO_ENUM(PED_COMPONENT,3), 0, 1, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(mpDrugDealer.mPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 2, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(mpDrugDealer.mPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
*/
//CREATE DEALER GOONS
FOR i = 0 TO NUM_OF_DEALER_GOONS -1
CreateMissionPed(mpDealerGoons[i],FALSE)
SET_ENTITY_HEALTH(mpDealerGoons[i].mPed,125)
SET_PED_ACCURACY(mpDealerGoons[i].mPed,1)
IF i = 0
SET_PED_COMPONENT_VARIATION(mpDealerGoons[i].mPed, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
SET_PED_COMPONENT_VARIATION(mpDealerGoons[i].mPed, INT_TO_ENUM(PED_COMPONENT,3), 1, 1, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(mpDealerGoons[i].mPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(mpDealerGoons[i].mPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 1, 0) //(accs)
GIVE_WEAPON_TO_PED(mpDealerGoons[i].mPed,WEAPONTYPE_MICROSMG,-1,FALSE,TRUE)
IF IS_ENTITY_ALIVE(mpDealerGoons[i].mPed)
TASK_LOOK_AT_ENTITY(mpDealerGoons[i].mPed,mpPrincess.mPed,-1)
ENDIF
SET_PED_COMBAT_MOVEMENT(mpDealerGoons[i].mPed,CM_WILLRETREAT)
ELSE
SET_PED_COMPONENT_VARIATION(mpDealerGoons[i].mPed, INT_TO_ENUM(PED_COMPONENT,0), 1, 1, 0) //(head)
SET_PED_COMPONENT_VARIATION(mpDealerGoons[i].mPed, INT_TO_ENUM(PED_COMPONENT,3), 1, 0, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(mpDealerGoons[i].mPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(mpDealerGoons[i].mPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 1, 0) //(accs)
ENDIF
SET_PED_RELATIONSHIP_GROUP_HASH(mpDealerGoons[i].mPed,relDealers)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDealerGoons[i].mPed,TRUE)
IF i = 0
TASK_START_SCENARIO_IN_PLACE(mpDealerGoons[i].mPed,"WORLD_HUMAN_STAND_IMPATIENT")
ELSE
//TASK_START_SCENARIO_IN_PLACE(mpDealerGoons[i].mPed,"WORLD_HUMAN_DRINKING")
ENDIF
ENDFOR
// Player's contact
CreateMissionPed(mpDealerContact, FALSE)
SET_PED_CAN_BE_TARGETTED(mpDealerContact.mPed,FALSE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDealerContact.mPed,TRUE)
SET_PED_FLEE_ATTRIBUTES(mpDealerContact.mPed, FA_DISABLE_HANDS_UP, TRUE)
SET_ENTITY_COORDS_NO_OFFSET(mpDealerContact.mPed, mpDealerContact.vStartPos)
//SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(mpDealerContact.mPed, FALSE)
GIVE_WEAPON_TO_PED(mpDealerContact.mPed,WEAPONTYPE_KNIFE,-1)
TASK_START_SCENARIO_IN_PLACE(mpDealerContact.mPed,"WORLD_HUMAN_SMOKING")
SET_PED_COMPONENT_VARIATION(mpDealerContact.mPed, INT_TO_ENUM(PED_COMPONENT,0), 1, 0, 0) //(head)
SET_PED_COMPONENT_VARIATION(mpDealerContact.mPed, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(mpDealerContact.mPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 2, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(mpDealerContact.mPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
// CREATE SECURITY VEHICLES
FOR i = 0 TO NUM_OF_SECURITY_CARS -1
CreateMissionVehicle(mvSecurityCars[i],FALSE)
IF i = 0
SET_VEHICLE_DOORS_LOCKED(mvSecurityCars[i].mVehicle,VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
ENDIF
SET_VEHICLE_MODEL_IS_SUPPRESSED(mvSecurityCars[i].mModel,TRUE)
SET_VEHICLE_COLOUR_COMBINATION(mvSecurityCars[i].mVehicle, 0)
IF i = 1
IF IS_ENTITY_ALIVE(mSecurityPed[2].mPed)
SET_PED_INTO_VEHICLE(mSecurityPed[2].mPed,mvSecurityCars[i].mVehicle)
SET_PED_COMBAT_ATTRIBUTES(mSecurityPed[2].mPed,CA_USE_VEHICLE,TRUE)
ENDIF
ENDIF
ENDFOR
CreateMissionVehicle(mvDealerCar)
SET_VEHICLE_ALARM(mvDealerCar.mVehicle, TRUE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(mvDealerCar.mModel,TRUE)
SET_VEHICLE_COLOUR_COMBINATION(mvDealerCar.mVehicle, 3)
CreateMissionVehicle(mvClimbingTruck)
SET_VEHICLE_MODEL_IS_SUPPRESSED(mvClimbingTruck.mModel,TRUE)
SET_VEHICLE_COLOUR_COMBINATION(mvClimbingTruck.mVehicle, 0)
// Just letting the scenario spawn the prop now
//CREATE WEED PROP
//CreateMissionProp(oiSmokeWeed)
//ATTACH_ENTITY_TO_ENTITY(oiSmokeWeed.mObject,mpPrincess.mPed, GET_PED_BONE_INDEX(mpPrincess.mPed, BONETAG_PH_R_HAND),<<0,0,0>>,<<0,0,0>>,TRUE)
bPrincessSceneCreated = TRUE
//Unload PED models
FOR i = 0 TO NUM_OF_SECURITY_PEDS -1
SET_MODEL_AS_NO_LONGER_NEEDED(mSecurityPed[i].mModel)
ENDFOR
FOR i = 0 TO NUM_OF_SECURITY_CARS -1
SET_MODEL_AS_NO_LONGER_NEEDED(mvSecurityCars[i].mModel)
ENDFOR
SET_MODEL_AS_NO_LONGER_NEEDED(mpDrugDealer.mModel)
issDealidles = CREATE_SYNCHRONIZED_SCENE(mvSecurityCars[0].vStartPos,<<0,0,mvSecurityCars[0].fStartHeading>>)
SET_SYNCHRONIZED_SCENE_LOOPED(issDealidles,TRUE)
//TASK_SYNCHRONIZED_SCENE(mpPrincess.mPed, issDealidles, "rcmpaparazzo_3big_1", "_idle_princess", SLOW_BLEND_IN, SLOW_BLEND_OUT,SYNCED_SCENE_LOOP_WITHIN_SCENE | SYNCED_SCENE_USE_PHYSICS, RBF_NONE, SLOW_BLEND_IN)
TASK_SYNCHRONIZED_SCENE(mpDrugDealer.mPed, issDealidles, "rcmpaparazzo_3big_1", "_idle_dealer_a", SLOW_BLEND_IN, SLOW_BLEND_OUT,SYNCED_SCENE_LOOP_WITHIN_SCENE| SYNCED_SCENE_USE_PHYSICS)
TASK_SYNCHRONIZED_SCENE(mpDealerGoons[1].mPed, issDealidles, "rcmpaparazzo_3big_1", "_idle_dealer_b", SLOW_BLEND_IN, SLOW_BLEND_OUT,SYNCED_SCENE_LOOP_WITHIN_SCENE| SYNCED_SCENE_USE_PHYSICS)
TASK_SYNCHRONIZED_SCENE(mSecurityPed[0].mPed, issDealidles, "rcmpaparazzo_3big_1", "_idle_guard_a", SLOW_BLEND_IN, SLOW_BLEND_OUT,SYNCED_SCENE_LOOP_WITHIN_SCENE| SYNCED_SCENE_USE_PHYSICS)
TASK_SYNCHRONIZED_SCENE(mSecurityPed[1].mPed, issDealidles, "rcmpaparazzo_3big_1", "_idle_guard_b", SLOW_BLEND_IN, SLOW_BLEND_OUT,SYNCED_SCENE_LOOP_WITHIN_SCENE| SYNCED_SCENE_USE_PHYSICS)
ENDIF
ELSE
//Monitor_Princess_Scene()
ENDIF
ENDPROC
/// PURPOSE:
/// Controls the dealer contact's behaviour
PROC HANDLE_CONTACT()
IF DOES_ENTITY_EXIST(mpDealerContact.mPed)
IF NOT IS_ENTITY_DEAD(mpDealerContact.mPed)
IF IS_PED_INJURED(mpDealerContact.mPed)
SET_FAIL_REASON(FAIL_CONTACT_KILLED)
ELIF HAS_PLAYER_THREATENED_PED(mpDealerContact.mPed)
//IF IS_ENTITY_PLAYING_ANIM(mpDealerContact.mPed, DEALER_ANIM_DICT, CONTACT_ANIM)
// STOP_ANIM_TASK(mpDealerContact.mPed, DEALER_ANIM_DICT, CONTACT_ANIM)
//ENDIF
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDealerContact.mPed,FALSE)
SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mpDealerContact.mPed)
IF NOT IS_PED_FLEEING(mpDealerContact.mPed)
TASK_SMART_FLEE_PED(mpDealerContact.mPed, PLAYER_PED_ID(), 500, -1)
ENDIF
SET_FAIL_REASON(FAIL_CONTACT_THREAT)
ELIF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mpDealerContact.mPed,PLAYER_PED_ID())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDealerContact.mPed,FALSE)
SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mpDealerContact.mPed)
IF NOT IS_PED_FLEEING(mpDealerContact.mPed)
TASK_SMART_FLEE_PED(mpDealerContact.mPed, PLAYER_PED_ID(), 500, -1)
ENDIF
SET_FAIL_REASON(FAIL_CONTACT_THREAT)
ELIF (IS_ENTITY_ALIVE(GET_PLAYERS_LAST_VEHICLE()) AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mpDealerContact.mPed,GET_PLAYERS_LAST_VEHICLE()))
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDealerContact.mPed,FALSE)
SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mpDealerContact.mPed)
IF NOT IS_PED_FLEEING(mpDealerContact.mPed)
TASK_SMART_FLEE_PED(mpDealerContact.mPed, PLAYER_PED_ID(), 500, -1)
ENDIF
SET_FAIL_REASON(FAIL_CONTACT_THREAT)
/*
ELIF GET_GAME_TIMER() > iBumpContactTimer AND IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), mpDealerContact.mPed)
TEXT_LABEL_23 tlConv
tlConv = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
STRING sConvABEL_TO_STRING(tlConv)
IF NOT ARE_STRINGS_EQUA
sConv = CONVERT_TEXT_LL(sConv, "PAP3_CONTACT")
REMOVE_PED_FOR_DIALOGUE(sSpeach, GOON_ID)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(mpDealerContact.mPed, sBumpLines[iCurrentBumpLine], "JOE", SPEECH_PARAMS_STANDARD)
IF iCurrentBumpLine = 0
iCurrentBumpLine = 1
ELSE
iCurrentBumpLine = 0
ENDIF
iBumpContactTimer = GET_GAME_TIMER() + 5000
ENDIF
*/
ENDIF
ELSE
SET_FAIL_REASON(FAIL_CONTACT_KILLED)
ENDIF
ENDIF
ENDPROC
///
/// MAIN MISSION FLOW FUNCTIONS / PROCEDURES
///
///
/// PURPOSE:
/// Initialises the mission
PROC STAGE_INIT()
IF IS_MISSION_INITIALISED() // initialise everything
sbiChicoRear = ADD_SCENARIO_BLOCKING_AREA(<<1051.8594, -799.0458, 53.0>>,<<1114.5818, -779.1284, 60.0>>)
sbiVehAttractor = ADD_SCENARIO_BLOCKING_AREA(<<1090.2480, -761.9150, 56.7705>>-<<5,5,5>>,<<1090.2480, -761.9150, 56.7705>>+<<5,5,5>>)
// handle replay checkpoints
IF Is_Replay_In_Progress()
VEHICLE_INDEX viTemp
INT iReplayStage = GET_REPLAY_MID_MISSION_STAGE()
IF g_bShitskipAccepted = TRUE
iReplayStage++ // player is skipping this stage
ENDIF
SWITCH iReplayStage
CASE CP_PHONE_CALL
//Do_Z_Skip(Z_SKIP_PHONE_CALL) // skip the mocap intro
START_REPLAY_SETUP(<< 1039.8661, -536.2775, 60.0808 >>,173.0)
RC_START_Z_SKIP()
WHILE NOT HAS_PRINCESS_SCENE_LOADED(TRUE)
WAIT(0)
ENDWHILE
bPrincessSceneCreated = FALSE
HANDLE_PRINCESS_SCENE()
CLEAR_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
//SET_ENTITY_COORDS(PLAYER_PED_ID(), << 1039.8661, -536.2775, 60.0808 >>)
//SET_ENTITY_HEADING(PLAYER_PED_ID(),173.0)
CREATE_VEHICLE_FOR_REPLAY(viTemp, <<1027.5906, -550.1744, 59.2083>>, 175.1857, TRUE, FALSE, FALSE, TRUE, TRUE, ASTEROPE) //<<1063.70, -528.63, 61.75>>, 99.04
//CREATE_VEHICLE_FOR_REPLAY(viTemp, <<1063.70, -528.63, 61.75>>, 99.04, FALSE, FALSE, FALSE, TRUE, TRUE, BUFFALO)
END_REPLAY_SETUP(viTemp)
ResetCamBehindPlayer()
eSubStage = SS_CLEANUP
missionStage = MS_INITIAL_PHONE
//WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()))
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(),WEAPONTYPE_UNARMED,TRUE)
FLUSH_TEXT_MESSAGE_FEED_ENTRIES()
RC_END_Z_SKIP()
BREAK
CASE CP_AT_PRINCESS_LOCATION
CLEAR_AREA_OF_OBJECTS(<<1077.0671, -797.3167, 57.3309>>,150,CLEAROBJ_FLAG_FORCE)
START_REPLAY_SETUP(<<1066.6431, -774.0832, 57.1322>>, 245.0544)
RC_START_Z_SKIP()
WHILE NOT HAS_PRINCESS_SCENE_LOADED(TRUE)
WAIT(0)
ENDWHILE
bPrincessSceneCreated = FALSE
HANDLE_PRINCESS_SCENE()
CLEAR_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
//SET_ENTITY_COORDS(PLAYER_PED_ID(), << 1071.6343, -774.4527, 57.1467 >>)
//SET_ENTITY_HEADING(PLAYER_PED_ID(),157.2742)
CREATE_VEHICLE_FOR_REPLAY(viTemp, <<1077.7363, -765.1624, 56.6271>>, 271.4277, FALSE, FALSE, FALSE, TRUE, TRUE, BUFFALO)
eSubStage = SS_CLEANUP
missionStage = MS_MEET_CONTACT
END_REPLAY_SETUP()
//RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<1072.322632,-773.616272,56.325531>>, <<1062.145874,-773.913025,59.443981>>, 7.250000,<<1077.7363, -765.1624, 56.6271>>, 271.4277)
SAFE_DELETE_PED(mpDealerContact.mPed)
ResetCamBehindPlayer()
CLEAR_AREA(<<1075.6421, -793.8809, 57.3145>>,40,TRUE)
//WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()))
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(),WEAPONTYPE_UNARMED,TRUE)
FLUSH_TEXT_MESSAGE_FEED_ENTRIES()
RC_END_Z_SKIP()
BREAK
CASE CP_MISSION_PASSED
START_REPLAY_SETUP(<<1066.6431, -774.0832, 57.1322>>, 245.0544)
CLEAR_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
//WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()))
END_REPLAY_SETUP()
//SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
//SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
FLUSH_TEXT_MESSAGE_FEED_ENTRIES()
WAIT(600)
SAFE_FADE_SCREEN_IN_FROM_BLACK()
RC_END_Z_SKIP()
Script_Passed()
BREAK
DEFAULT
SCRIPT_ASSERT("Replay in progress: Unknown checkpoint selected")
BREAK
ENDSWITCH
ELSE
IF IS_REPEAT_PLAY_ACTIVE()
eInitialSceneStage = IS_REQUEST_SCENE
WHILE NOT SetupScene_PAPARAZZO_3B(sRCLauncherDataLocal)
WAIT(0)
ENDWHILE
SAFE_FADE_SCREEN_IN_FROM_BLACK()
ENDIF
eSubStage = SS_SETUP
missionStage = MS_INITIAL_PHONE
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Handles the initial phone call to the player
PROC INITIAL_PHONE_CALL()
INT i
IF bPrincessSceneCreated
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
IF IS_PED_UNINJURED(mSecurityPed[i].mPed)
IF IS_PED_IN_COMBAT(mSecurityPed[i].mPed,PLAYER_PED_ID())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mSecurityPed[i].mPed,FALSE)
SET_FAIL_REASON(FAIL_SPOTTED)
EXIT
ELSE
IF IS_ENTITY_IN_RANGE_ENTITY(mSecurityPed[i].mPed,PLAYER_PED_ID(),5)
TASK_COMBAT_PED(mSecurityPed[i].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
ELSE
SET_FAIL_REASON(FAIL_SPOTTED)
EXIT
ENDIF
ENDFOR
ENDIF
SWITCH eSubStage
CASE SS_SETUP
CPRINTLN(DEBUG_MISSION, "ENTERING PHONE CALL 30 ")
ADD_PED_FOR_DIALOGUE(sSpeach, FRANKLIN_ID, PLAYER_PED_ID(), "FRANKLIN")
ADD_PED_FOR_DIALOGUE(sSpeach, BEVERLY_ID, NULL, "BEVERLY")
IF bFinishedSkipping = TRUE
IF IS_SCREEN_FADED_OUT()
IF NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(500)
ENDIF
ENDIF
ENDIF
IF IS_PHONE_ONSCREEN()
HANG_UP_AND_PUT_AWAY_PHONE()
ENDIF
bConversationActive = FALSE
SAFE_REMOVE_BLIP(biMissionBlip)
eSubStage = SS_UPDATE
BREAK
CASE SS_UPDATE
HANDLE_PRINCESS_SCENE()
HANDLE_CONTACT()
IF bMissionFailed
EXIT
ENDIF
IF bPrincessSceneCreated = TRUE
IF DID_PLAYER_GO_STRAIGHT_TO_PRINCESS()
HANG_UP_AND_PUT_AWAY_PHONE()
CLEAR_PRINTS()
bMainObjectiveDisplayed = FALSE
UnfreezeVehicles()
SetStage(MS_MEET_CONTACT)
ENDIF
ENDIF
IF NOT bConversationActive
IF CHAR_CALL_PLAYER_CELLPHONE_FORCE_ANSWER(sSpeach, CHAR_BEVERLY, "PAP3BAU", "PAP3_INTRO", CONV_PRIORITY_VERY_HIGH)
REPLAY_RECORD_BACK_FOR_TIME(2.0, 5.0, REPLAY_IMPORTANCE_LOW)
bConversationActive = TRUE
ENDIF
ELSE
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF GET_CURRENT_SCRIPTED_CONVERSATION_LINE() > 6 AND NOT DOES_BLIP_EXIST(biMissionBlip) AND IS_PED_UNINJURED(mpDealerContact.mPed) //> 0
biMissionBlip = CREATE_PED_BLIP(mpDealerContact.mPed, TRUE, TRUE)
IF DOES_BLIP_EXIST(biMissionBlip)
SET_BLIP_ROUTE(biMissionBlip,true)
ENDIF
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(),vPrincessInitialLocation,<<STOP_DIS,STOP_DIS,2>>)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1046.049805,-754.827087,56.041855>>, <<1144.919678,-755.214111,59.983875>>, 20.750000) //road
HANG_UP_AND_PUT_AWAY_PHONE()
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF GET_ENTITY_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) >= 5.0
//BRING_VEHICLE_TO_HALT(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()),8.0,1)
ELSE
CLEAR_PRINTS()
bMainObjectiveDisplayed = FALSE
UnfreezeVehicles()
SetStage(MS_MEET_CONTACT)
ENDIF
ELSE
CLEAR_PRINTS()
bMainObjectiveDisplayed = FALSE
UnfreezeVehicles()
SetStage(MS_MEET_CONTACT)
ENDIF
ENDIF
ELSE
IF HAS_CELLPHONE_CALL_FINISHED()
eSubStage = SS_CLEANUP
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_CLEANUP
//CLEAR_PRINTS()
bMainObjectiveDisplayed = FALSE
SetStage(MS_GO_TO_LOCATION)
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Handles player going to the inital area location
PROC GO_TO_LOCATION()
INT i
IF bPrincessSceneCreated
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
IF IS_PED_UNINJURED(mSecurityPed[i].mPed)
IF IS_PED_IN_COMBAT(mSecurityPed[i].mPed,PLAYER_PED_ID())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mSecurityPed[i].mPed,FALSE)
SET_FAIL_REASON(FAIL_SPOTTED)
EXIT
ELSE
IF IS_ENTITY_IN_RANGE_ENTITY(mSecurityPed[i].mPed,PLAYER_PED_ID(),5)
TASK_COMBAT_PED(mSecurityPed[i].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
ELSE
SET_FAIL_REASON(FAIL_SPOTTED)
EXIT
ENDIF
ENDFOR
ENDIF
SWITCH eSubStage
CASE SS_SETUP
CPRINTLN(DEBUG_MISSION, "ENTERING GO TO LOCATION 1")
//SAFE_REMOVE_BLIP(biMissionBlip)
IF NOT DOES_BLIP_EXIST(biMissionBlip)
biMissionBlip = CREATE_PED_BLIP(mpDealerContact.mPed, TRUE, TRUE)
SET_BLIP_ROUTE(biMissionBlip,true)
ENDIF
PRINT_NOW("PAP3_CON", DEFAULT_GOD_TEXT_TIME, 1) // Meet Beverly's ~b~contact.~s~
eSubStage = SS_UPDATE
BREAK
CASE SS_UPDATE
HANDLE_PRINCESS_SCENE()
HANDLE_CONTACT()
IF bMissionFailed
EXIT
ENDIF
IF bPrincessSceneCreated = TRUE
IF DID_PLAYER_GO_STRAIGHT_TO_PRINCESS()
eSubStage = SS_CLEANUP
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(),vPrincessInitialLocation,<<STOP_DIS,STOP_DIS,2>>)
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF GET_ENTITY_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) >= 5.0
//BRING_VEHICLE_TO_HALT(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()),8.0,1)
ELSE
eSubStage = SS_CLEANUP
ENDIF
ELSE
eSubStage = SS_CLEANUP
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_CLEANUP
bMainObjectiveDisplayed = FALSE
UnfreezeVehicles()
SetStage(MS_MEET_CONTACT)
BREAK
ENDSWITCH
ENDPROC
PROC MEET_CONTACT()
TEXT_LABEL_23 label
INT i
IF bPrincessSceneCreated
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
IF IS_PED_UNINJURED(mSecurityPed[i].mPed)
IF IS_PED_IN_COMBAT(mSecurityPed[i].mPed,PLAYER_PED_ID())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mSecurityPed[i].mPed,FALSE)
SET_FAIL_REASON(FAIL_SPOTTED)
EXIT
ELSE
IF IS_ENTITY_IN_RANGE_ENTITY(mSecurityPed[i].mPed,PLAYER_PED_ID(),5)
TASK_COMBAT_PED(mSecurityPed[i].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
ELSE
SET_FAIL_REASON(FAIL_SPOTTED)
EXIT
ENDIF
ENDFOR
ENDIF
IF IS_PED_UNINJURED(mpDealerContact.mPed)
IF NOT IS_PED_HEADTRACKING_PED(mpDealerContact.mPed, PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(mpDealerContact.mPed, PLAYER_PED_ID(), -1)
ENDIF
ENDIF
SWITCH eSubStage
CASE SS_SETUP
IF NOT DID_PLAYER_GO_STRAIGHT_TO_PRINCESS()
IF DOES_BLIP_EXIST(biMissionBlip)
SET_BLIP_ROUTE(biMissionBlip, FALSE)
ELSE
biMissionBlip = CREATE_PED_BLIP(mpDealerContact.mPed, TRUE, TRUE)
PRINT_NOW("PAP3_CON", DEFAULT_GOD_TEXT_TIME, 1) // Meet Beverly's ~b~contact.~s~
ENDIF
ENDIF
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle)
FREEZE_ENTITY_POSITION(mvSecurityCars[0].mVehicle, FALSE)
ENDIF
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle)
FREEZE_ENTITY_POSITION(mvSecurityCars[1].mVehicle, FALSE)
ENDIF
IF IS_VEHICLE_OK(mvDealerCar.mVehicle)
FREEZE_ENTITY_POSITION(mvDealerCar.mVehicle, FALSE)
ENDIF
ADD_PED_FOR_DIALOGUE(sSpeach, GOON_ID, mpDealerContact.mPed, "Paparazzo3BDealerGoon1")
eSubStage = SS_UPDATE
BREAK
CASE SS_UPDATE
HANDLE_PRINCESS_SCENE()
HANDLE_CONTACT()
IF bMissionFailed
EXIT
ENDIF
HANDLE_AUTO_CROUCHING()
IF bPrincessSceneCreated = TRUE
IF DID_PLAYER_GO_STRAIGHT_TO_PRINCESS()
SAFE_REMOVE_BLIP(biMissionBlip)
eSubStage = SS_CLEANUP
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(),vPrincessInitialLocation,<<CONTACT_DIS,CONTACT_DIS,2>>) AND IS_PED_UNINJURED(mpDealerContact.mPed)
IF NOT IS_PED_RAGDOLL(PLAYER_PED_ID())
ADD_PED_FOR_DIALOGUE(sSpeach, GOON_ID, mpDealerContact.mPed, "Paparazzo3BDealerGoon1")
ADD_PED_FOR_DIALOGUE(sSpeach, FRANKLIN_ID, PLAYER_PED_ID(), "FRANKLIN")
IF CREATE_CONVERSATION(sSpeach, "pap3bau", "PAP3_CONTACT", CONV_PRIORITY_HIGH)
REPLAY_RECORD_BACK_FOR_TIME(4.0, 10.0, REPLAY_IMPORTANCE_LOW)
TASK_TURN_PED_TO_FACE_ENTITY(mpDealerContact.mPed,PLAYER_PED_ID(),-1)
SAFE_REMOVE_BLIP(biMissionBlip)
eSubStage = SS_CLEANUP
ENDIF
ENDIF
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(),vPrincessInitialLocation,<<15,15,2>>) AND IS_PED_UNINJURED(mpDealerContact.mPed)
AND GET_SCRIPT_TASK_STATUS(mpDealerContact.mPed,SCRIPT_TASK_START_SCENARIO_IN_PLACE) = PERFORMING_TASK
CLEAR_PED_TASKS(mpDealerContact.mPed)
TASK_LOOK_AT_ENTITY(mpDealerContact.mPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
BREAK
CASE SS_CLEANUP
HANDLE_PRINCESS_SCENE()
HANDLE_CONTACT()
IF bMissionFailed
EXIT
ENDIF
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() OR (GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), mpDealerContact.mPed) > (CONTACT_DIS*2)) OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1071.163818,-783.058472,53.730213>>, <<1062.914917,-782.847290,59.343300>>, 3.000000)
KILL_FACE_TO_FACE_CONVERSATION()
IF IS_PED_UNINJURED(mpDealerContact.mPed) AND NOT IS_PED_FLEEING(mpDealerContact.mPed)
IF GET_SCRIPT_TASK_STATUS(mpDealerContact.mPed,SCRIPT_TASK_WANDER_STANDARD) <> PERFORMING_TASK
//SET_PED_COMBAT_ATTRIBUTES(mpDealerContact.mPed,CA_ALWAYS_FLEE,TRUE)
SET_PED_CAN_BE_TARGETTED(mpDealerContact.mPed,TRUE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDealerContact.mPed,FALSE)
TASK_WANDER_STANDARD(mpDealerContact.mPed)
ENDIF
ENDIF
SetStage(MS_TAKE_PHOTO)
ELSE
label = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
IF ARE_STRINGS_EQUAL(label,"PAP3_CONTACT_4")
OR ARE_STRINGS_EQUAL(label,"PAP3_CONTACT_5")
++iCounterContactWalkOff
IF iCounterContactWalkOff > 30
IF IS_PED_UNINJURED(mpDealerContact.mPed)
IF GET_SCRIPT_TASK_STATUS(mpDealerContact.mPed,SCRIPT_TASK_WANDER_STANDARD) <> PERFORMING_TASK
//SET_PED_COMBAT_ATTRIBUTES(mpDealerContact.mPed,CA_ALWAYS_FLEE,TRUE)
SET_PED_CAN_BE_TARGETTED(mpDealerContact.mPed,TRUE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDealerContact.mPed,FALSE)
TASK_WANDER_STANDARD(mpDealerContact.mPed,281.0714)
ENDIF
ENDIF
ENDIF
ENDIF
/*
IF ARE_STRINGS_EQUAL(label,"PAP3_CONTACT_3")
++iCounterContactWalkOff
IF iCounterContactWalkOff > 70
IF GET_SCRIPT_TASK_STATUS(mpDealerContact.mPed,SCRIPT_TASK_WANDER_STANDARD) <> PERFORMING_TASK
SET_PED_COMBAT_ATTRIBUTES(mpDealerContact.mPed,CA_ALWAYS_FLEE,TRUE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDealerContact.mPed,FALSE)
TASK_WANDER_STANDARD(mpDealerContact.mPed)
ENDIF
ENDIF
ENDIF
*/
ENDIF
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Handles player taking a photo of the princess
PROC TAKE_PHOTO()
//PRINTFLOAT(GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(),mSecurityPed[0].mPed))
//PRINTNL()
//PRINTFLOAT(GET_PLAYER_CURRENT_STEALTH_NOISE(PLAYER_ID())) // 20
//PRINTNL()
TEXT_LABEL_23 label
TEXT_LABEL_23 root
//FLOAT fStartSpawnWeed
//FLOAT fEndSpawnWeed
//VECTOR vWeed
//VECTOR vCash
//VECTOR vRotWeed
//VECTOR vRotCash
SWITCH eSubStage
CASE SS_SETUP
CPRINTLN(DEBUG_MISSION, "ENTERING TAKE PHOTO OF PRINCESS")
IF bMainObjectiveDisplayed = FALSE
PRINT_NOW("PAP3_PRIN", DEFAULT_GOD_TEXT_TIME, 1) //"Take a photo of the ~b~princess."
bMainObjectiveDisplayed = TRUE
ENDIF
CLEAR_CONTACT_PICTURE_MESSAGE(CHAR_BEVERLY)
iLeaveSceneTimer = GET_GAME_TIMER() + 80000
bEnteredAlley = FALSE
//bAlreadyLeft = FALSE
bSecurityWarned = FALSE
bForceCrouching = TRUE
bSetRel = FALSE
bKickedOffDealerConvo = FALSE
//bBadPicSent = FALSE
bCarAlarm = FALSE
bAlleyWarning = FALSE
iFramesPlayerNotInCoverNextToCar = 0
iFramesPlayerMakingNoise = 0
iFramesPlayerOnRoof = 0
bPicTaken = FALSE
bTooFarAway = FALSE
bSweetTxtSent = FALSE
iBevTxtsBadPic = 0
iBevTxtsTooFarAway = 0
bPicSent = FALSE
bLeavingScene = FALSE
bPrintLeaveArea = FALSE
bSecPed3AchHead = FALSE
bWrongContact = FALSE
bGoGoDealerConvo = FALSE
bDoFirstConvoLine = FALSE
bSkippedSS = FALSE
iPlayerInLeftAlley = 0
iSeqSecThreaten = 0
iSubSwitch = 0
iRetrigger = 0
iCounterGaurd3Investigate = 0
bPrincessStartedSyncedScene = FALSE
//ADD_COVER_BLOCKING_AREA(<<1086.668823,-796.542725,58.347771>>,<<3.500000,2.750000,1.250000>>,TRUE,TRUE,TRUE)
SAFE_REMOVE_BLIP(biMissionBlip)
biMissionBlip = CREATE_PED_BLIP(mpPrincess.mPed,TRUE,TRUE)
IF IS_PED_UNINJURED(mpPrincess.mPed)
iSightTestID = REGISTER_PEDSIGHT_TEST(PLAYER_PED_ID(), mpPrincess.mPed, 0)
ENDIF
IF IS_VEHICLE_OK(mvSecurityCars[0].mVehicle)
FREEZE_ENTITY_POSITION(mvSecurityCars[0].mVehicle, FALSE)
ENDIF
IF IS_VEHICLE_OK(mvSecurityCars[1].mVehicle)
FREEZE_ENTITY_POSITION(mvSecurityCars[1].mVehicle, FALSE)
ENDIF
IF IS_VEHICLE_OK(mvDealerCar.mVehicle)
FREEZE_ENTITY_POSITION(mvDealerCar.mVehicle, FALSE)
ENDIF
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(CP_AT_PRINCESS_LOCATION, "At Princess Location", TRUE) // mocap done, set checkpoint
HANDLE_PRINCESS_SCENE()
//HANDLE_CONTACT()
iSeqDeal = 0
ADD_PED_FOR_DIALOGUE(sSpeach, PRINCESS_ID, mpPrincess.mPed, "PRINCESS")
ADD_PED_FOR_DIALOGUE(sSpeach, DEALER_ID, mpDrugDealer.mPed, "Paparazzo3BDrugDealer")
iTimerTakePhotoStage = GET_GAME_TIMER()
eSubStage = SS_UPDATE
ePrincessState = SP_SMOKE
BREAK
CASE SS_UPDATE
IF bKickedOffDealerConvo
AND NOT bSweetTxtSent
AND NOT bWhosThatGuy
DO_ANNOYING_SUBTITLE_SWITCH()
ENDIF
IF IS_CELLPHONE_CAMERA_IN_USE()
SET_LOADING_ICON_SUBTITLES_OFFSET_SHIFT_THIS_FRAME()
ENDIF
IF IS_PED_UNINJURED(mpDealerContact.mPed)
AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mpDealerContact.mPed,PLAYER_PED_ID())
AND NOT IS_ANY_SPEECH_PLAYING(sRCLauncherDataLocal.pedID[0])
PLAY_PED_AMBIENT_SPEECH(sRCLauncherDataLocal.pedID[0], "GENERIC_CURSE_HIGH",SPEECH_PARAMS_FORCE)
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(issDeal)
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
AND IS_PED_UNINJURED(mpDealerGoons[1].mPed)
IF iSeqDeal = 0
//IF FIND_ANIM_EVENT_PHASE("rcmpaparazzo_3big_1","_action_dealer_b","spawn_drugs",fStartSpawnWeed,fEndSpawnWeed)
//AND GET_ENTITY_ANIM_CURRENT_TIME(mpDealerGoons[1].mPed,"rcmpaparazzo_3big_1","_action_dealer_b") >= fStartSpawnWeed
IF GET_SYNCHRONIZED_SCENE_PHASE(issDeal) >= 0.259 //0.261
objWeedBag = CREATE_OBJECT_NO_OFFSET(prop_drug_package_02, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mpDealerGoons[1].mPed,<<0.0,0.0,10.0>>)) //prop_drug_package_02
//PLAY_SYNCHRONIZED_ENTITY_ANIM(objWeedBag,issDeal,"","rcmpaparazzo_3big_1",INSTANT_BLEND_IN,8)
ATTACH_ENTITY_TO_ENTITY(objWeedBag, mpDealerGoons[1].mPed, GET_PED_BONE_INDEX(mpDealerGoons[1].mPed, BONETAG_PH_R_HAND), <<0.135,0,-0.05>>, <<0,0,0>>, TRUE, TRUE)
SET_ENTITY_VISIBLE(objWeedBag,TRUE)
//ATTACH_ENTITY_TO_ENTITY(objWeedBag, mpDealerGoons[1].mPed, GET_PED_BONE_INDEX(mpDealerGoons[1].mPed, BONETAG_PH_L_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
//objFakeGuard = CREATE_OBJECT_NO_OFFSET(PROP_DRUG_PACKAGE_02, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mpDealerGoons[1].mPed,<<0.0,0.0,11.0>>))
//objFakeDealer = CREATE_OBJECT_NO_OFFSET(PROP_DRUG_PACKAGE_02, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mpDealerGoons[1].mPed,<<0.0,0.0,12.0>>))
//SET_ENTITY_VISIBLE(objFakeGuard,FALSE)
//SET_ENTITY_VISIBLE(objFakeDealer,FALSE)
//ATTACH_ENTITY_TO_ENTITY(objFakeGuard, mSecurityPed[1].mPed, GET_PED_BONE_INDEX(mSecurityPed[1].mPed, BONETAG_PH_L_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
//ATTACH_ENTITY_TO_ENTITY(objFakeDealer, mpDealerGoons[1].mPed, GET_PED_BONE_INDEX(mpDealerGoons[1].mPed, BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
iSeqDeal = 1
ENDIF
ELIF iSeqDeal = 1
IF GET_SYNCHRONIZED_SCENE_PHASE(issDeal) >= 0.821
objCash = CREATE_OBJECT_NO_OFFSET(PROP_CASH_PILE_02, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mSecurityPed[1].mPed,<<0.0,0.0,10.0>>))
ATTACH_ENTITY_TO_ENTITY(objCash, mSecurityPed[1].mPed, GET_PED_BONE_INDEX(mSecurityPed[1].mPed, BONETAG_PH_R_HAND), <<0.07,0,-0.04>>, <<0,0,-30>>, TRUE, TRUE)
iSeqDeal = 2
ENDIF
ELIF iSeqDeal = 2
IF GET_SYNCHRONIZED_SCENE_PHASE(issDeal) >= 0.844 //0.846
PROCESS_ENTITY_ATTACHMENTS(mSecurityPed[1].mPed)
PROCESS_ENTITY_ATTACHMENTS(mpDealerGoons[1].mPed)
//vWeed = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(objFakeGuard,GET_ENTITY_COORDS(objWeedBag))
//vWeed = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(GET_WORLD_POSITION_OF_ENTITY_BONE(mSecurityPed[1].mPed,GET_PED_BONE_INDEX(mSecurityPed[1].mPed, BONETAG_PH_L_HAND)),GET_ENTITY_HEADING(mSecurityPed[1].mPed),GET_ENTITY_COORDS(objWeedBag))
//DELETE_OBJECT(objFakeGuard)
//vRotWeed = GET_ENTITY_ROTATION(objWeedBag)
DETACH_ENTITY(objWeedBag)
//ATTACH_ENTITY_TO_ENTITY(objWeedBag, mSecurityPed[1].mPed, GET_PED_BONE_INDEX(mSecurityPed[1].mPed, BONETAG_PH_L_HAND), vWeed, vRotWeed, TRUE, TRUE, FALSE, FALSE, EULER_YXZ, FALSE)
SET_ENTITY_VISIBLE(objWeedBag,FALSE)
ATTACH_ENTITY_TO_ENTITY(objWeedBag, mSecurityPed[1].mPed, GET_PED_BONE_INDEX(mSecurityPed[1].mPed, BONETAG_PH_L_HAND), <<0.1,0,0.05>>, <<0,0,0>>, TRUE, TRUE)
iSeqDeal = 3
ENDIF
ELIF iSeqDeal = 3
IF GET_SYNCHRONIZED_SCENE_PHASE(issDeal) >= 0.849
PROCESS_ENTITY_ATTACHMENTS(mSecurityPed[1].mPed)
PROCESS_ENTITY_ATTACHMENTS(mpDealerGoons[1].mPed)
//vCash = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(objFakeDealer,GET_ENTITY_COORDS(objCash))
//vCash = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(GET_WORLD_POSITION_OF_ENTITY_BONE(mpDealerGoons[1].mPed,GET_PED_BONE_INDEX(mpDealerGoons[1].mPed, BONETAG_PH_R_HAND)),GET_ENTITY_HEADING(mpDealerGoons[1].mPed),GET_ENTITY_COORDS(objCash))
//DELETE_OBJECT(objFakeDealer)
//vRotCash = GET_ENTITY_ROTATION(objCash)
DETACH_ENTITY(objCash)
//ATTACH_ENTITY_TO_ENTITY(objCash, mpDealerGoons[1].mPed, GET_PED_BONE_INDEX(mpDealerGoons[1].mPed, BONETAG_PH_R_HAND), vCash, vRotCash, TRUE, TRUE, FALSE, FALSE, EULER_YXZ, FALSE)
SET_ENTITY_VISIBLE(objCash,FALSE)
ATTACH_ENTITY_TO_ENTITY(objCash, mpDealerGoons[1].mPed, GET_PED_BONE_INDEX(mpDealerGoons[1].mPed, BONETAG_PH_R_HAND), <<0.07,0,0>>, <<0,0,90>>, TRUE, TRUE)
DETACH_ENTITY(objWeedBag)
DELETE_OBJECT(objWeedBag)
iSeqDeal = 4
ENDIF
ELIF iSeqDeal = 4
IF GET_SYNCHRONIZED_SCENE_PHASE(issDeal) >= 0.861
PROCESS_ENTITY_ATTACHMENTS(mSecurityPed[1].mPed)
PROCESS_ENTITY_ATTACHMENTS(mpDealerGoons[1].mPed)
DETACH_ENTITY(objCash)
DELETE_OBJECT(objCash)
iSeqDeal = 5
ENDIF
ELIF iSeqDeal = 5
IF GET_SYNCHRONIZED_SCENE_PHASE(issDeal) >= 0.865
//PROCESS_ENTITY_ATTACHMENTS(mSecurityPed[1].mPed)
//PROCESS_ENTITY_ATTACHMENTS(mpDealerGoons[1].mPed)
//DETACH_ENTITY(objWeedBag)
//DELETE_OBJECT(objWeedBag)
iSeqDeal = 6
ENDIF
ENDIF
ENDIF
ENDIF
//0.261 - dealer get weed out
//0.846 - dealer pass weed
//0.821 - guard get cash out
//0.849 - guard pass cash
//0.861 - dealer put cash away
//0.865 - guard put weed away
/*
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1071.561768,-787.900269,56.772301>>, <<1071.649658,-793.435669,59.302433>>, 3.250000)
AND IS_PED_IN_COVER(PLAYER_PED_ID())
AND IS_CELLPHONE_CAMERA_IN_USE()
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(),TRUE)
FREEZE_ENTITY_POSITION(mvDealerCar.mVehicle,TRUE)
ELSE
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(),FALSE)
FREEZE_ENTITY_POSITION(mvDealerCar.mVehicle,FALSE)
ENDIF
*/
IF bDoFirstConvoLine = FALSE
IF GET_GAME_TIMER() > iTimerTakePhotoStage + 1000
//PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeach, "pap3bau", "PAP3_DEALER", "PAP3_DEALER_1", CONV_PRIORITY_HIGH,DO_NOT_DISPLAY_SUBTITLES)
bDoFirstConvoLine = TRUE
ENDIF
ELSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
AND NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP3_PRIN")
bGoGoDealerConvo = TRUE
ENDIF
ENDIF
IF bGoGoDealerConvo
IF bKickedOffDealerConvo = FALSE
//IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sSpeach, "pap3bau", "PAP3_DEALER", "PAP3_DEALER_2",CONV_PRIORITY_HIGH)
IF CREATE_CONVERSATION(sSpeach, "pap3bau", "PAP3_DEALER", CONV_PRIORITY_HIGH)
issDeal = CREATE_SYNCHRONIZED_SCENE(mvSecurityCars[0].vStartPos,<<0,0,mvSecurityCars[0].fStartHeading>>)
IF IS_PED_UNINJURED(mpDrugDealer.mPed)
TASK_SYNCHRONIZED_SCENE(mpDrugDealer.mPed, issDeal, "rcmpaparazzo_3big_1", "_action_dealer_a", 2, REALLY_SLOW_BLEND_OUT)
ENDIF
IF IS_PED_UNINJURED(mpDealerGoons[1].mPed)
TASK_SYNCHRONIZED_SCENE(mpDealerGoons[1].mPed, issDeal, "rcmpaparazzo_3big_1", "_action_dealer_b", 2, REALLY_SLOW_BLEND_OUT)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
TASK_SYNCHRONIZED_SCENE(mSecurityPed[0].mPed, issDeal, "rcmpaparazzo_3big_1", "_action_guard_a", 2, REALLY_SLOW_BLEND_OUT)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
TASK_SYNCHRONIZED_SCENE(mSecurityPed[1].mPed, issDeal, "rcmpaparazzo_3big_1", "_action_guard_b", 2, REALLY_SLOW_BLEND_OUT)
ENDIF
bKickedOffDealerConvo = TRUE
ENDIF
ELSE
// Start the princess a little bit after the rest of the peds, so she has time to finish playing her scenario.
IF NOT bPrincessStartedSyncedScene
IF IS_SYNCHRONIZED_SCENE_RUNNING(issDeal)
AND GET_SYNCHRONIZED_SCENE_PHASE(issDeal) >= 0.04//0.045753
IF IS_PED_UNINJURED(mpPrincess.mPed)
TASK_SYNCHRONIZED_SCENE(mpPrincess.mPed, issDeal, "rcmpaparazzo_3big_1", "_action_princess", 1, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_NONE, RBF_NONE, 1)
bPrincessStartedSyncedScene = TRUE
ENDIF
ENDIF
ENDIF
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(issDeal)
OR GET_SYNCHRONIZED_SCENE_PHASE(issDeal) >= 0.893 //0.898
bLeavingScene = TRUE
CLEAR_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
LEAVE_DRUG_SCENE()
ForceDriveAway()
ENDIF
/*
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
AND NOT bWhosThatGuy
bLeavingScene = TRUE
CLEAR_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
LEAVE_DRUG_SCENE()
ForceDriveAway()
ENDIF
*/
IF bPhotoSent
AND NOT IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(),<<1087.2966, -791.3091, 57.2626>>,60)
bLeavingScene = TRUE
CLEAR_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
LEAVE_DRUG_SCENE()
ForceDriveAway()
ENDIF
label = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
IF ARE_STRINGS_EQUAL(label,"PAP3_DEALER_23")
KILL_FACE_TO_FACE_CONVERSATION()
ENDIF
IF NOT bSkippedSS
IF ARE_STRINGS_EQUAL(label,"PAP3_DEALER_20")
AND IS_SYNCHRONIZED_SCENE_RUNNING(issDeal)
AND GET_SYNCHRONIZED_SCENE_PHASE(issDeal) < 0.758
IF IS_PED_UNINJURED(mpPrincess.mPed)
TASK_SYNCHRONIZED_SCENE(mpPrincess.mPed, issDeal, "rcmpaparazzo_3big_1", "_action_princess", 1, REALLY_SLOW_BLEND_OUT)
ENDIF
IF IS_PED_UNINJURED(mpDrugDealer.mPed)
TASK_SYNCHRONIZED_SCENE(mpDrugDealer.mPed, issDeal, "rcmpaparazzo_3big_1", "_action_dealer_a", 1, REALLY_SLOW_BLEND_OUT)
ENDIF
IF IS_PED_UNINJURED(mpDealerGoons[1].mPed)
TASK_SYNCHRONIZED_SCENE(mpDealerGoons[1].mPed, issDeal, "rcmpaparazzo_3big_1", "_action_dealer_b", 1, REALLY_SLOW_BLEND_OUT)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
TASK_SYNCHRONIZED_SCENE(mSecurityPed[0].mPed, issDeal, "rcmpaparazzo_3big_1", "_action_guard_a", 1, REALLY_SLOW_BLEND_OUT)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
TASK_SYNCHRONIZED_SCENE(mSecurityPed[1].mPed, issDeal, "rcmpaparazzo_3big_1", "_action_guard_b", 1, REALLY_SLOW_BLEND_OUT)
ENDIF
SET_SYNCHRONIZED_SCENE_PHASE(issDeal,0.758)
bSkippedSS = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//PRINTFLOAT(GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(),mpPrincess.mPed))
//PRINTNL()
//PRINTFLOAT(GET_PLAYER_CURRENT_STEALTH_NOISE(PLAYER_ID()))
//PRINTNL()
//restricted
//<<1071.380859,-793.385376,57.051506>>, <<1101.542725,-793.399780,61.012684>>, 11.750000 //main
//<<1095.905151,-786.595581,57.103203>>, <<1114.590210,-786.716309,60.150230>>, 15.250000 //round left side
//partly restricted
//<<1051.790771,-793.230713,57.141796>>, <<1071.547852,-793.179810,60.550629>>, 11.750000 //box past dealer car
//<<1064.095337,-784.569458,56.837673>>, <<1061.792358,-789.858826,60.012680>>, 11.750000 //angle check alley1
//<<1058.489624,-785.692810,53.262684>>, <<1057.049683,-791.673950,60.012684>>, 9.500000 //angle check alley1
IF bLeavingScene = FALSE
IF b_Correct_Pic_Taken
IF NOT bPhotoSent
IF GET_GAME_TIMER() > iTimerPicTaken + 15000
IF NOT bHelpPrint8
REPLAY_RECORD_BACK_FOR_TIME(6.0, 6.0, REPLAY_IMPORTANCE_LOW)
PRINT_HELP("PAP3_HELP8") // Send the photo to Beverly.
bHelpPrint8 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF bSetRel
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
SET_PED_SEEING_RANGE(mSecurityPed[0].mPed,150)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
SET_PED_SEEING_RANGE(mSecurityPed[1].mPed,150)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[2].mPed)
SET_PED_SEEING_RANGE(mSecurityPed[2].mPed,150)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[3].mPed)
SET_PED_SEEING_RANGE(mSecurityPed[3].mPed,150)
ENDIF
ENDIF
IF IS_ENTITY_ALIVE(mpPrincess.mPed)
AND NOT IS_ENTITY_OCCLUDED(mpPrincess.mPed)
MANAGE_PHONE_HELP()
ENDIF
//left alley
IF bAlleyWarning = FALSE
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1114.693970,-779.025024,54.929989>>, <<1104.670044,-779.171387,60.324333>>, 5.000000)
IF IS_PED_UNINJURED(mSecurityPed[3].mPed)
TASK_LOOK_AT_ENTITY(mSecurityPed[3].mPed,PLAYER_PED_ID(),-1)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(mSecurityPed[3].mPed,"PAP3B_BCAA","Paparazzo3BBodyGuard1","SPEECH_PARAMS_STANDARD")
bAlleyWarning = TRUE
ENDIF
ENDIF
ELSE
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1114.693970,-779.025024,54.929989>>, <<1104.670044,-779.171387,60.324333>>, 5.000000)
bSecPed3AchHead = FALSE
++iPlayerInLeftAlley
IF iSeqSecThreaten = 0
IF iPlayerInLeftAlley >= 50
IF IS_PED_UNINJURED(mSecurityPed[3].mPed)
GIVE_WEAPON_TO_PED(mSecurityPed[3].mPed,WEAPONTYPE_COMBATPISTOL,-1,TRUE,TRUE)
GIVE_WEAPON_COMPONENT_TO_PED(mSecurityPed[3].mPed,WEAPONTYPE_COMBATPISTOL,WEAPONCOMPONENT_AT_PI_FLSH)
TASK_AIM_GUN_AT_ENTITY(mSecurityPed[3].mPed,PLAYER_PED_ID(),8000)
iSeqSecThreaten = 1
ENDIF
ENDIF
ELIF iSeqSecThreaten = 1
IF iPlayerInLeftAlley >= 150
IF IS_PED_UNINJURED(mSecurityPed[3].mPed)
TASK_COMBAT_PED(mSecurityPed[3].mPed,PLAYER_PED_ID())
ENDIF
IF bSetRel = FALSE
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
iSeqSecThreaten = 2
ENDIF
ENDIF
ELSE
IF NOT bSecPed3AchHead
AND NOT bSetRel
IF IS_PED_UNINJURED(mSecurityPed[3].mPed)
IF GET_SCRIPT_TASK_STATUS(mSecurityPed[3].mPed,SCRIPT_TASK_AIM_GUN_AT_ENTITY) <> PERFORMING_TASK
TASK_ACHIEVE_HEADING(mSecurityPed[3].mPed,0)
iSeqSecThreaten = 0
bSecPed3AchHead = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Jump down off roof - left side
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1114.718994,-786.146667,57.152645>>, <<1095.790283,-786.231689,60.532429>>, 9.750000)
AND (GET_PLAYER_CURRENT_STEALTH_NOISE(PLAYER_ID()) > 1 OR IS_PED_FACING_PED(mSecurityPed[3].mPed,PLAYER_PED_ID(),90))
IF bSetRel = FALSE
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[3].mPed)
IF NOT IS_PED_FACING_PED(mSecurityPed[3].mPed,PLAYER_PED_ID(),30)
TASK_TURN_PED_TO_FACE_ENTITY(mSecurityPed[3].mPed,PLAYER_PED_ID())
vLastPlayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
iTimerGuard3Investigate = GET_GAME_TIMER()
iCounterGaurd3Investigate = 1
ENDIF
ENDIF
ENDIF
IF iCounterGaurd3Investigate = 1
AND GET_GAME_TIMER() > iTimerGuard3Investigate + 1000
AND IS_PED_UNINJURED(mSecurityPed[3].mPed)
TASK_FOLLOW_NAV_MESH_TO_COORD(mSecurityPed[3].mPed,vLastPlayerCoords,1,-1,0.25)
iCounterGaurd3Investigate = 2
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1078.844604,-796.393738,57.012592>>, <<1091.735229,-796.596375,60.382118>>, 6.000000) //near landstalker
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF NOT IS_PED_IN_COMBAT(mSecurityPed[0].mPed,PLAYER_PED_ID())
TASK_COMBAT_PED(mSecurityPed[0].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
IF bSetRel = FALSE
IF IS_EXPLOSION_IN_ANGLED_AREA(EXP_TAG_DONTCARE,<<1114.696777,-787.084778,56.648468>>, <<1051.763672,-787.160950,64.140556>>, 23.000000) //Whole of the hypermarket
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF NOT IS_PED_IN_COMBAT(mSecurityPed[0].mPed,PLAYER_PED_ID())
TASK_COMBAT_PED(mSecurityPed[0].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1071.380859,-793.385376,57.051506>>, <<1101.542725,-793.399780,61.012684>>, 11.750000) //main
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1095.905151,-786.595581,57.103203>>, <<1114.590210,-786.716309,60.150230>>, 15.250000) //round left side
OR (DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) AND IS_ENTITY_IN_ANGLED_AREA(GET_PLAYERS_LAST_VEHICLE(), <<1071.380859,-793.385376,57.051506>>, <<1101.542725,-793.399780,61.012684>>, 11.750000)) //main
OR (DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) AND IS_ENTITY_IN_ANGLED_AREA(GET_PLAYERS_LAST_VEHICLE(), <<1095.905151,-786.595581,57.103203>>, <<1114.590210,-786.716309,60.150230>>, 15.250000)) //round left side
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
/*
IF IS_PED_SHOOTING(PLAYER_PED_ID())
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1114.696777,-787.084778,56.648468>>, <<1051.763672,-787.160950,64.140556>>, 23.000000) //Whole of the hypermarket
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
ENDIF
*/
IF IS_PED_IN_ANY_HELI(PLAYER_PED_ID())
OR IS_PED_IN_ANY_PLANE(PLAYER_PED_ID())
//IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1117.922729,-791.346252,55.425465>>, <<1060.041992,-791.870850,76.262589>>, 31.500000)
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1051.457886,-794.515564,55.685654>>, <<1117.848267,-794.298706,77.441833>>, 33.750000)
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF NOT IS_PED_IN_COMBAT(mSecurityPed[0].mPed,PLAYER_PED_ID())
TASK_COMBAT_PED(mSecurityPed[0].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(),mSecurityPed[0].mPed) < 12
AND GET_PLAYER_CURRENT_STEALTH_NOISE(PLAYER_ID()) > 20
IF NOT IS_PED_IN_COMBAT(mSecurityPed[0].mPed,PLAYER_PED_ID())
TASK_COMBAT_PED(mSecurityPed[0].mPed,PLAYER_PED_ID())
ENDIF
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
ENDIF
IF bWhosThatGuy = FALSE
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1051.790771,-793.230713,57.141796>>, <<1071.547852,-793.179810,60.550629>>, 11.750000) //box past dealer car
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1064.095337,-784.569458,56.837673>>, <<1061.792358,-789.858826,60.012680>>, 11.750000) //angle check alley1
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1058.489624,-785.692810,53.262684>>, <<1057.049683,-791.673950,60.012684>>, 9.500000) //angle check alley1
IF GET_PLAYER_CURRENT_STEALTH_NOISE(PLAYER_ID()) > 1.0
iFramesPlayerMakingNoise += 5 //10
ENDIF
IF bSweetTxtSent = TRUE
iFramesPlayerMakingNoise += 3 //5
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1051.506592,-792.271851,60.622086>>, <<1070.429443,-792.266907,57.012592>>, 9.500000) //Out in the open
iFramesPlayerMakingNoise += 2 //3
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
iFramesPlayerMakingNoise += 50 //5
ENDIF
ENDIF
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
iFramesPlayerMakingNoise += 5
ENDIF
iFramesPlayerMakingNoise += 3 //2
IF iFramesPlayerMakingNoise > 1000
IF bWhosThatGuy = FALSE
IF IS_ENTITY_ALIVE(mSecurityPed[0].mPed)
//SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mSecurityPed[0].mPed)
TASK_LOOK_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
//TASK_AIM_GUN_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1,TRUE)
IF NOT IS_PED_FACING_PED(mSecurityPed[0].mPed,PLAYER_PED_ID(),20)
TASK_TURN_PED_TO_FACE_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
ENDIF
iTimerSecWary = GET_GAME_TIMER()
ENDIF
bWhosThatGuy = TRUE
ENDIF
ENDIF
ENDIF
//next to dealer car
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1067.674805,-788.586304,53.271336>>, <<1067.798218,-798.870117,60.040825>>, 8.250000)
IF NOT IS_PED_IN_COVER(PLAYER_PED_ID())
++iFramesPlayerNotInCoverNextToCar
IF iFramesPlayerNotInCoverNextToCar > 70
IF bWhosThatGuy = FALSE
IF IS_ENTITY_ALIVE(mSecurityPed[0].mPed)
//SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mSecurityPed[0].mPed)
TASK_LOOK_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
//TASK_AIM_GUN_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1,TRUE)
IF NOT IS_PED_FACING_PED(mSecurityPed[0].mPed,PLAYER_PED_ID(),20)
TASK_TURN_PED_TO_FACE_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
ENDIF
iTimerSecWary = GET_GAME_TIMER()
ENDIF
bWhosThatGuy = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_ENTITY_ALIVE(mvDealerCar.mVehicle)
AND IS_VEHICLE_ALARM_ACTIVATED(mvDealerCar.mVehicle)
IF bWhosThatGuy = FALSE
IF IS_ENTITY_ALIVE(mSecurityPed[0].mPed)
//SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mSecurityPed[0].mPed)
TASK_LOOK_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
//TASK_AIM_GUN_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1,TRUE)
IF NOT IS_PED_FACING_PED(mSecurityPed[0].mPed,PLAYER_PED_ID(),20)
TASK_TURN_PED_TO_FACE_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
ENDIF
iTimerSecWary = GET_GAME_TIMER()
ENDIF
bWhosThatGuy = TRUE
ENDIF
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1084.464966,-800.133667,57.396507>>, <<1081.144897,-800.167725,59.990376>>, 1.500000)
AND NOT GET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID())
IF bWhosThatGuy = FALSE
IF IS_ENTITY_ALIVE(mSecurityPed[0].mPed)
//SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mSecurityPed[0].mPed)
TASK_LOOK_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
//TASK_AIM_GUN_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1,TRUE)
IF NOT IS_PED_FACING_PED(mSecurityPed[0].mPed,PLAYER_PED_ID(),20)
TASK_TURN_PED_TO_FACE_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
ENDIF
iTimerSecWary = GET_GAME_TIMER()
ENDIF
bWhosThatGuy = TRUE
ENDIF
ENDIF
ENDIF
//Shed area round back
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1087.937256,-793.123901,54.772804>>, <<1100.255493,-793.127258,61.012684>>, 12.250000)
OR (DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) AND IS_ENTITY_IN_ANGLED_AREA(GET_PLAYERS_LAST_VEHICLE(), <<1087.937256,-793.123901,54.772804>>, <<1100.255493,-793.127258,61.012684>>, 12.250000))
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
IF NOT IS_PED_FACING_PED(mSecurityPed[1].mPed,PLAYER_PED_ID(),45)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mSecurityPed[1].mPed,FALSE)
TASK_LOOK_AT_ENTITY(mSecurityPed[1].mPed,PLAYER_PED_ID(),-1)
TASK_TURN_PED_TO_FACE_ENTITY(mSecurityPed[1].mPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
ENDIF
//If done warning - kick off after a few secs
IF bWhosThatGuy = TRUE
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
SET_PED_SEEING_RANGE(mSecurityPed[0].mPed,100)
ENDIF
IF GET_GAME_TIMER() > iTimerSecWary + 3500//2500
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF NOT IS_PED_IN_COMBAT(mSecurityPed[0].mPed,PLAYER_PED_ID())
TASK_COMBAT_PED(mSecurityPed[0].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
IF bSetRel = FALSE
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
ELSE
IF GET_GAME_TIMER() > iTimerSecWary + 1200
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF IS_PED_FACING_PED(mSecurityPed[0].mPed,PLAYER_PED_ID(),50)
IF GET_SCRIPT_TASK_STATUS(mSecurityPed[0].mPed,SCRIPT_TASK_AIM_GUN_AT_ENTITY) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mSecurityPed[0].mPed,SCRIPT_TASK_AIM_GUN_AT_ENTITY) <> WAITING_TO_START_TASK
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
CLEAR_PED_TASKS(mSecurityPed[1].mPed)
TASK_LOOK_AT_ENTITY(mSecurityPed[1].mPed,PLAYER_PED_ID(),-1)
ENDIF
GIVE_WEAPON_TO_PED(mSecurityPed[0].mPed,WEAPONTYPE_COMBATPISTOL,-1,TRUE,TRUE)
GIVE_WEAPON_COMPONENT_TO_PED(mSecurityPed[0].mPed,WEAPONTYPE_COMBATPISTOL,WEAPONCOMPONENT_AT_PI_FLSH)
TASK_AIM_GUN_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),5000)
//KILL_FACE_TO_FACE_CONVERSATION()
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(mSecurityPed[0].mPed,"PAP3B_BDAA","Paparazzo3BBodyGuard1","SPEECH_PARAMS_FORCE")
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF NOT bPhotoSent
IF b_Correct_Pic_Taken
IF NOT bHelpPrint8
REPLAY_RECORD_BACK_FOR_TIME(6.0, 6.0, REPLAY_IMPORTANCE_LOW)
PRINT_HELP("PAP3_HELP8") // Send the photo to Beverly.
bHelpPrint8 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
INT i
FOR i = 0 TO NUM_OF_DEALER_GOONS - 1
IF IS_PED_UNINJURED(mpDealerGoons[i].mPed)
IF IS_PED_IN_COMBAT(mpDealerGoons[i].mPed)
IF bSetRel = FALSE
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF NOT IS_PED_IN_COMBAT(mSecurityPed[0].mPed)
TASK_COMBAT_PED(mSecurityPed[0].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
ENDIF
ELSE
IF bSetRel = FALSE
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF NOT IS_PED_IN_COMBAT(mSecurityPed[0].mPed)
TASK_COMBAT_PED(mSecurityPed[0].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
ENDIF
ENDFOR
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
IF IS_PED_UNINJURED(mSecurityPed[i].mPed)
IF bSetRel = FALSE
SET_PED_RESET_FLAG(mSecurityPed[i].mPed,PRF_DisableSeeThroughChecksWhenTargeting,TRUE)
ENDIF
IF IS_PED_IN_COMBAT(mSecurityPed[i].mPed)
IF IS_PED_UNINJURED(mpPrincess.mPed)
IF IS_ENTITY_ALIVE(mvSecurityCars[0].mVehicle)
IF GET_SCRIPT_TASK_STATUS(mpPrincess.mPed,SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mpPrincess.mPed,SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING) <> WAITING_TO_START_TASK
TASK_LOOK_AT_ENTITY(mpPrincess.mPed,PLAYER_PED_ID(),-1)
//SET_PED_PANIC_EXIT_SCENARIO(mpPrincess.mPed,GET_ENTITY_COORDS(PLAYER_PED_ID()))
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(mpPrincess.mPed,mvSecurityCars[0].mVehicle,"PAP3_Security1",DRIVINGMODE_PLOUGHTHROUGH,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
IF IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_a")
STOP_ANIM_TASK(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_a",NORMAL_BLEND_OUT)
ENDIF
IF IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_b")
STOP_ANIM_TASK(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_b",NORMAL_BLEND_OUT)
ENDIF
IF IS_ENTITY_PLAYING_ANIM(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_c")
STOP_ANIM_TASK(mpPrincess.mPed,"amb@world_human_smoking@female@idle_a","idle_c",NORMAL_BLEND_OUT)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
SET_PED_SEEING_RANGE(mSecurityPed[0].mPed,150)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
SET_PED_SEEING_RANGE(mSecurityPed[1].mPed,150)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[2].mPed)
SET_PED_SEEING_RANGE(mSecurityPed[2].mPed,150)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[3].mPed)
SET_PED_SEEING_RANGE(mSecurityPed[3].mPed,150)
ENDIF
SAFE_DELETE_OBJECT(objCash)
//SAFE_DELETE_OBJECT(objWeedBag)
SAFE_REMOVE_BLIP(biMissionBlip)
bConversationActive = FALSE
bMainObjectiveDisplayed = FALSE
IF IS_PED_UNINJURED(mSecurityPed[2].mPed)
TASK_COMBAT_PED(mSecurityPed[2].mPed,PLAYER_PED_ID(),COMBAT_PED_PREVENT_CHANGING_TARGET)
ENDIF
IF bPhotoSent = TRUE
MissionStage = MS_ESCAPE_SECURITY
eSubStage = SS_SETUP
ELSE
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mSecurityPed[1].mPed,FALSE)
ENDIF
SET_FAIL_REASON(FAIL_SPOTTED)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF bSetRel = FALSE
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
ENDIF
ENDFOR
HANDLE_AUTO_CROUCHING()
IF b_Correct_Pic_Taken = TRUE
IF bPhotoSent = FALSE
IF HAS_CONTACT_RECEIVED_PICTURE_MESSAGE(CHAR_BEVERLY)
iTimerPicTaken = GET_GAME_TIMER()
HANG_UP_AND_PUT_AWAY_PHONE()
BYPASS_CELLPHONE_CAMERA_DEFAULT_SAVE_ROUTINE(FALSE)
ENABLE_PICTURE_MESSAGE_SENDING_AND_HELP(FALSE)
//PRINT_NOW("PAP3_LEAVE", DEFAULT_GOD_TEXT_TIME, 1) //"Leave the area."
bPhotoSent = TRUE
ELSE
IF bPicTaken = TRUE
IF bWrongContact = FALSE
IF HAS_PICTURE_MESSAGE_BEEN_SENT_TO_ANY_CONTACT()
PRINT_HELP("PAP3_HELP7") // The picture was sent to the wrong contact.
iTimerPicTaken = GET_GAME_TIMER()
bWrongContact = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF bLeavingScene = FALSE
IF bSweetTxtSent = FALSE
IF GET_GAME_TIMER() > iTimerPicTaken + 6000 //4000
IF SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(CHAR_BEVERLY,"PAP3A_TXT5",TXTMSG_UNLOCKED) //Sweeeeet! Get the fuck out of there!
bSweetTxtSent = TRUE
ENDIF
ENDIF
ELSE
IF bPrintLeaveArea = FALSE
IF GET_GAME_TIMER() > iTimerPicTaken + 4800
//PRINT_NOW("PAP3_LEAVE", DEFAULT_GOD_TEXT_TIME, 1) //"Leave the area."
bPrintLeaveArea = TRUE
ENDIF
ENDIF
IF NOT IS_ENTITY_IN_RANGE_ENTITY(mpPrincess.mPed,PLAYER_PED_ID(),60)
root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF ARE_STRINGS_EQUAL(root,"PAP3_DEALER")
KILL_FACE_TO_FACE_CONVERSATION()
ENDIF
ENDIF
ENDIF
ENDIF
IF bLeavingScene = FALSE
//IF NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP3_LEAVE")
IF bSweetTxtSent = TRUE
AND GET_GAME_TIMER() > iTimerPicTaken + 7500
//Player hanging around next to the car after sending photo - alarm goes off
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1071.561768,-787.900269,56.772301>>, <<1071.649658,-793.435669,59.302433>>, 3.250000)
AND IS_PED_IN_COVER(PLAYER_PED_ID())
/*
IF bSetRel = FALSE
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,relPrincess,RELGROUPHASH_PLAYER)
bSetRel = TRUE
ENDIF
*/
IF IS_ENTITY_ALIVE(mvDealerCar.mVehicle)
IF bCarAlarm = FALSE
START_VEHICLE_ALARM(mvDealerCar.mVehicle)
IF bWhosThatGuy = FALSE
IF IS_ENTITY_ALIVE(mSecurityPed[0].mPed)
//SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mSecurityPed[0].mPed)
TASK_LOOK_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
//TASK_AIM_GUN_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1,TRUE)
IF NOT IS_PED_FACING_PED(mSecurityPed[0].mPed,PLAYER_PED_ID(),20)
TASK_TURN_PED_TO_FACE_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
ENDIF
iTimerSecWary = GET_GAME_TIMER()
ENDIF
bWhosThatGuy = TRUE
ENDIF
bCarAlarm = TRUE
ENDIF
ENDIF
ENDIF
//Player hanging around on the roof after sending photo
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1095.302612,-789.975098,62.402073>>, <<1078.775879,-789.993408,64.409988>>, 1.500000) //roof (top)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1078.399170,-785.052551,60.169865>>, <<1071.268188,-785.085938,62.198814>>, 4.250000) //roof (right side)
++iFramesPlayerOnRoof
IF iFramesPlayerOnRoof > 50
IF bWhosThatGuy = FALSE
IF IS_ENTITY_ALIVE(mSecurityPed[0].mPed)
//SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(mSecurityPed[0].mPed)
TASK_LOOK_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
//TASK_AIM_GUN_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1,TRUE)
IF NOT IS_PED_FACING_PED(mSecurityPed[0].mPed,PLAYER_PED_ID(),20)
TASK_TURN_PED_TO_FACE_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
ENDIF
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(mSecurityPed[0].mPed,"PAP3B_BDAA","Paparazzo3BBodyGuard1","SPEECH_PARAMS_STANDARD")
iTimerSecWary = GET_GAME_TIMER()
ENDIF
bWhosThatGuy = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
/*
IF IS_PED_UNINJURED(mpPrincess.mPed)
AND IS_PED_IN_ANY_VEHICLE(mpPrincess.mPed)
IF IS_ENTITY_IN_ANGLED_AREA(mpPrincess.mPed, <<1158.520142,-759.373901,56.322784>>, <<1116.868652,-759.690796,61.706322>>, 13.750000)
IF GET_SCRIPT_TASK_STATUS(mpPrincess.mPed,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
TASK_VEHICLE_MISSION_PED_TARGET(mpPrincess.mPed,GET_VEHICLE_PED_IS_IN(mpPrincess.mPed),PLAYER_PED_ID(),MISSION_FLEE,50.0,DRIVINGMODE_AVOIDCARS,20.0,20.0)
ePrincessState = SP_WANDER
MissionStage = MS_END_PHONE_CALL
eSubStage = SS_SETUP
ENDIF
ENDIF
ENDIF
*/
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
AND IS_PED_IN_ANY_VEHICLE(mSecurityPed[0].mPed)
IF IS_ENTITY_IN_ANGLED_AREA(mSecurityPed[0].mPed, <<1158.520142,-759.373901,56.322784>>, <<1116.868652,-759.690796,61.706322>>, 13.750000)
IF GET_SCRIPT_TASK_STATUS(mSecurityPed[0].mPed,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
TASK_VEHICLE_MISSION_PED_TARGET(mSecurityPed[0].mPed,GET_VEHICLE_PED_IS_IN(mSecurityPed[0].mPed),PLAYER_PED_ID(),MISSION_FLEE,50.0,DRIVINGMODE_AVOIDCARS,20.0,20.0)
ePrincessState = SP_WANDER
MissionStage = MS_END_PHONE_CALL
eSubStage = SS_SETUP
ENDIF
ENDIF
ENDIF
IF IS_ENTITY_ALIVE(mpPrincess.mPed)
AND NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mpPrincess.mPed,209)
MissionStage = MS_END_PHONE_CALL
eSubStage = SS_SETUP
ENDIF
ENDIF
ELSE
IF bPicTaken = TRUE
IF HAS_CONTACT_RECEIVED_PICTURE_MESSAGE(CHAR_BEVERLY)
IF bPicSent = FALSE
iTimerPicTaken = GET_GAME_TIMER()
bPicSent = TRUE
ELSE
IF GET_GAME_TIMER() > iTimerPicTaken + 4000
IF bTooFarAway = FALSE
IF iBevTxtsBadPic = 0
IF SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(CHAR_BEVERLY,"PAP3A_TXT1",TXTMSG_UNLOCKED) //WTF is that? Get a decent pic.
CLEAR_CONTACT_PICTURE_MESSAGE(CHAR_BEVERLY)
bPicTaken = FALSE
iBevTxtsBadPic = 1
ENDIF
ELIF iBevTxtsBadPic = 1
IF SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(CHAR_BEVERLY,"PAP3A_TXT2",TXTMSG_UNLOCKED) //Come on man. Get another one
CLEAR_CONTACT_PICTURE_MESSAGE(CHAR_BEVERLY)
bPicTaken = FALSE
iBevTxtsBadPic = 2
ENDIF
ELIF iBevTxtsBadPic = 2
IF SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(CHAR_BEVERLY,"PAP3A_TXT3",TXTMSG_UNLOCKED) //What's that meant to be?
CLEAR_CONTACT_PICTURE_MESSAGE(CHAR_BEVERLY)
bPicTaken = FALSE
iBevTxtsBadPic = 3
ENDIF
ELIF iBevTxtsBadPic = 3
IF SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(CHAR_BEVERLY,"PAP3A_TXT4",TXTMSG_UNLOCKED) //You're not even tring now.
CLEAR_CONTACT_PICTURE_MESSAGE(CHAR_BEVERLY)
bPicTaken = FALSE
iBevTxtsBadPic = 4
ENDIF
ENDIF
ELSE
IF iBevTxtsTooFarAway = 0
IF SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(CHAR_BEVERLY,"PAP3A_TXT8",TXTMSG_UNLOCKED) //Can you get any closer man?
CLEAR_CONTACT_PICTURE_MESSAGE(CHAR_BEVERLY)
bPicTaken = FALSE
iBevTxtsTooFarAway = 1
ENDIF
ELIF iBevTxtsTooFarAway = 1
IF SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(CHAR_BEVERLY,"PAP3A_TXT7",TXTMSG_UNLOCKED) //I can hardly see her! Get closer
CLEAR_CONTACT_PICTURE_MESSAGE(CHAR_BEVERLY)
bPicTaken = FALSE
iBevTxtsTooFarAway = 2
ENDIF
ENDIF
bTooFarAway = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("appCamera"))> 0
IF HAS_CELLPHONE_CAM_JUST_TAKEN_PIC()
CLEAR_CONTACT_PICTURE_MESSAGE(CHAR_BEVERLY)
bPicTaken = TRUE
bPicSent = FALSE
IF IS_ENTITY_ON_SCREEN(mpPrincess.mPed)
IF IS_PHOTO_OK()
IF IS_PRINCESS_TAKING_A_TOKE()
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_MISSION, "STATS >>>> PHOTO OF DEAL <<<< ")
#ENDIF
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(PAP3B_PHOTO_OF_USE)
REPLAY_RECORD_BACK_FOR_TIME(3.0, 0, REPLAY_IMPORTANCE_LOWEST) //Princess buying drugs (whilst being photographed).
ENDIF
BYPASS_CELLPHONE_CAMERA_DEFAULT_SAVE_ROUTINE(TRUE)
ENABLE_PICTURE_MESSAGE_SENDING_AND_HELP(TRUE)
SAFE_REMOVE_BLIP(biMissionBlip)
iTimerPicTaken = GET_GAME_TIMER()
b_Correct_Pic_Taken = TRUE
ELSE
BYPASS_CELLPHONE_CAMERA_DEFAULT_SAVE_ROUTINE(TRUE)
ENABLE_PICTURE_MESSAGE_SENDING_AND_HELP(TRUE)
//PRINT_NOW("PAP3_NOPRIN",DEFAULT_GOD_TEXT_TIME,5) // The princess is not in the photo. (Doing this with texts from Beverly)
CLEAR_CONTACT_PICTURE_MESSAGE(CHAR_BEVERLY)
iTimerPicTaken = GET_GAME_TIMER()
ENDIF
ELSE
BYPASS_CELLPHONE_CAMERA_DEFAULT_SAVE_ROUTINE(TRUE)
ENABLE_PICTURE_MESSAGE_SENDING_AND_HELP(TRUE)
//PRINT_NOW("PAP3_CENT1",DEFAULT_GOD_TEXT_TIME,5) // The princess needs to be in the center of the photo. (Doing this with texts from Beverly)
CLEAR_CONTACT_PICTURE_MESSAGE(CHAR_BEVERLY)
iTimerPicTaken = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
IF bPrincessSceneCreated = TRUE
IF NOT IS_ENTITY_ALIVE(mpPrincess.mPed)
SET_FAIL_REASON(FAIL_PRINCESS_KILLED)
ELSE
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mpPrincess.mPed,PLAYER_PED_ID())
SET_FAIL_REASON(FAIL_PRINCESS_INJURED)
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_CLEANUP
CLEAR_PRINTS()
SAFE_REMOVE_BLIP(biMissionBlip)
bConversationActive = FALSE
bMainObjectiveDisplayed = FALSE
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Handles player leaving ara undetected after taking the photo //This stage isn't used anymore - didn't want to remove it
PROC LEAVE_AREA()
SWITCH eSubStage
CASE SS_SETUP
CPRINTLN(DEBUG_MISSION, "ENTERING LEAVE THE AREA 2000")
IF bMainObjectiveDisplayed = FALSE
//PRINT_NOW("PAP3_LEAVE", DEFAULT_GOD_TEXT_TIME, 1) //"Leave the area undetected."
bMainObjectiveDisplayed = TRUE
ENDIF
iLeaveSceneTimer = GET_GAME_TIMER() + 15000
iNoticeInAlleyTimer = GET_GAME_TIMER() + 5000 //1000
iTriggerPhoneTimer = GET_GAME_TIMER() + 10000
bBeverlyCalled = FALSE
SAFE_REMOVE_BLIP(biMissionBlip)
eSubStage = SS_UPDATE
BREAK
CASE SS_UPDATE
HANDLE_PRINCESS_SCENE()
HANDLE_CONTACT()
IF bMissionFailed
EXIT
ENDIF
IF bSecurityAttacking = FALSE AND bSecurityNoticedPlayer = FALSE
IF GET_GAME_TIMER() > iLeaveSceneTimer AND bLeavingDrugScene = FALSE //MAKE PEDS LEAVE THE AREA AFTER THIS TIME
LEAVE_DRUG_SCENE()
eSubStage = SS_CLEANUP
ENDIF
ELSE
//PLAYER HAS BEEN NOTICED OR THEY ARE ATTACKING, MOVE TO ESCAPE SECURITY
eSubStage = SS_CLEANUP
ENDIF
IF (GET_GAME_TIMER() > iNoticeInAlleyTimer AND IS_PLAYER_IN_ALLEY_NOTICE_AREA()) // If the player is in the alley, notice after one second
OR (GET_GAME_TIMER() > iTriggerPhoneTimer AND (IS_PLAYER_IN_ALLEY_NOTICE_AREA() OR bSecurityNoticedPlayer)) //IF PLAYER STAYS IN SAME LOCATION FOR 10 SECONDS SECURITY WILL NOTICE HIM
OR IS_PLAYER_OUT_LEAVE_AREA()
IF bConversationActive = FALSE
ADD_PED_FOR_DIALOGUE(sSpeach, BEVERLY_ID, NULL, "BEVERLY")
ADD_PED_FOR_DIALOGUE(sSpeach, FRANKLIN_ID, PLAYER_PED_ID(), "FRANKLIN")
IF IS_PLAYER_IN_ALLEY_NOTICE_AREA() OR bSecurityNoticedPlayer = TRUE
//IF NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP3_LEAVE")
IF PLAYER_CALL_CHAR_CELLPHONE(sSpeach, CHAR_BEVERLY, "pap3bau", "PAP3_ENDCAL1", CONV_PRIORITY_VERY_HIGH)
bConversationActive = TRUE
bBeverlyCalled = TRUE
CPRINTLN(DEBUG_MISSION, "PLAYING PHONE CALL")
IF IS_PED_UNINJURED(mSecurityPed[0].mPed) //MAKE ONE SECURITY GUARD TURN TO LOOK
CLEAR_PED_TASKS(mSecurityPed[0].mPed)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(mSecurityPed[0].mPed,"PAP3B_BFAA","Paparazzo3BBodyGuard1","SPEECH_PARAMS_STANDARD") //Hey, you hear that? Who's down there?
TASK_TURN_PED_TO_FACE_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
//ENDIF
ELSE
IF bSecurityAttacking = FALSE AND bSecurityNoticedPlayer = FALSE
LEAVE_DRUG_SCENE()
eSubStage = SS_CLEANUP
ENDIF
ENDIF
ELSE
IF bPlayerSpotted = FALSE
if CAN_SECURITY_SEE_PLAYER()
bPlayerSpotted = TRUE
ELSE
ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_ONE_ID, mSecurityPed[0].mPed, "Paparazzo3BBodyGuard1")
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeach, "pap3bau", "PAP3_SECUR4","PAP3_SECUR4_1",CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
NOTICE_PLAYER_EVENT(FALSE)
eSubStage = SS_CLEANUP
ENDIF
ENDIF
ELSE
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ADD_PED_FOR_DIALOGUE(sSpeach, PRINCESS_ID, mpPrincess.mPed, "PRINCESS")
IF CREATE_CONVERSATION(sSpeach, "pap3bau", "PAP3_PANIC", CONV_PRIORITY_HIGH,DO_NOT_DISPLAY_SUBTITLES)
NOTICE_PLAYER_EVENT(TRUE) //MAKES SECURITY NOTICE THE PLAYER
eSubStage = SS_CLEANUP
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_CLEANUP
CLEAR_PRINTS()
SAFE_REMOVE_BLIP(biMissionBlip)
bMainObjectiveDisplayed = FALSE
IF bSecurityAttacking = TRUE OR bSecurityNoticedPlayer = TRUE
SetStage(MS_ESCAPE_SECURITY)
ELSE
LEAVE_DRUG_SCENE()
SetStage(MS_END_PHONE_CALL)
ENDIF
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Handles player having to escape the security PEDS
PROC ESCAPE_SECURITY()
TEXT_LABEL_23 label = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
TEXT_LABEL_23 root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// Kill dealer convo if it's still ongoing
IF ARE_STRINGS_EQUAL(root,"PAP3_DEALER")
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
INT iSubs
IF NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP3_10")
//AND NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP3_LEAVE")
iSubs = ENUM_TO_INT(DISPLAY_SUBTITLES)
ELSE
iSubs = ENUM_TO_INT(DO_NOT_DISPLAY_SUBTITLES)
ENDIF
SWITCH eSubStage
CASE SS_SETUP
CPRINTLN(DEBUG_MISSION, "ENTERING ESCAPE SECURITY")
IF bMainObjectiveDisplayed = FALSE
PRINT_NOW("PAP3_10", DEFAULT_GOD_TEXT_TIME, 1) //"Lose the ~r~bodyguards.~s~"
bMainObjectiveDisplayed = TRUE
ENDIF
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(PAP3B_PHOTO_SPOTTED)
iSecurityDead = iSecurityDead
iSecurityBlipped = 0
iSecurityEvaded = 0
iSeqGuyDriveRoundBack = 0
iPrincessShoutLines = 0
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_SHOOTING)
INT i
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
IF DOES_BLIP_EXIST(mSecurityPed[i].mBlip)
//SET_BLIP_SCALE(mSecurityPed[i].mBlip,0.7)
ELSE
IF IS_ENTITY_ALIVE(mSecurityPed[i].mPed)
mSecurityPed[i].mBlip = CREATE_PED_BLIP(mSecurityPed[i].mPed,TRUE,FALSE,BLIPPRIORITY_MED)
++iSecurityBlipped
ENDIF
ENDIF
ENDFOR
IF GET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID())
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(),FALSE)
ENDIF
//SET_ROADS_IN_AREA(<<1109.490112,-778.548096,58.762684>>,<<3.750000,13.500000,2.250000>>,TRUE)
IF IS_PED_UNINJURED(mSecurityPed[2].mPed)
AND IS_ENTITY_ALIVE(mvSecurityCars[1].mVehicle)
SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(mSecurityPed[2].mPed,mvSecurityCars[1].mVehicle,<<0,0,0>>,5)
ENDIF
SEQUENCE_INDEX seq
OPEN_SEQUENCE_TASK(seq)
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL,TRUE)
IF IS_PED_UNINJURED(mpDealerGoons[0].mPed)
TASK_COMBAT_PED(NULL,mpDealerGoons[0].mPed,COMBAT_PED_PREVENT_CHANGING_TARGET)
ENDIF
//IF IS_PED_UNINJURED(mpDrugDealer.mPed)
// TASK_COMBAT_PED(NULL,mpDrugDealer.mPed,COMBAT_PED_PREVENT_CHANGING_TARGET)
//ENDIF
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL,FALSE)
IF IS_PED_UNINJURED(PLAYER_PED_ID())
TASK_COMBAT_PED(NULL,PLAYER_PED_ID())
ENDIF
CLOSE_SEQUENCE_TASK(seq)
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
SET_PED_COMBAT_ATTRIBUTES(mSecurityPed[1].mPed,CA_CAN_CHARGE,TRUE)
TASK_PERFORM_SEQUENCE(mSecurityPed[1].mPed,seq)
ENDIF
CLEAR_SEQUENCE_TASK(seq)
iPanicConvo = 0
bConversationActive = FALSE
eSubStage = SS_UPDATE
BREAK
CASE SS_UPDATE
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF NOT IS_PED_IN_COMBAT(mSecurityPed[0].mPed,PLAYER_PED_ID())
TASK_COMBAT_PED(mSecurityPed[0].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[3].mPed)
IF NOT IS_PED_IN_COMBAT(mSecurityPed[3].mPed,PLAYER_PED_ID())
TASK_COMBAT_PED(mSecurityPed[3].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
IF NOT IS_PED_UNINJURED(mpDealerGoons[0].mPed)
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
IF NOT IS_PED_IN_COMBAT(mSecurityPed[1].mPed,PLAYER_PED_ID())
TASK_COMBAT_PED(mSecurityPed[1].mPed,PLAYER_PED_ID())
ENDIF
ENDIF
ENDIF
//Guy in the landstalker
IF IS_PED_UNINJURED(mSecurityPed[2].mPed)
IF iSeqGuyDriveRoundBack = 0
//If player leaves area chase in vehicle
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1114.696777,-787.084778,56.648468>>, <<1051.763672,-787.160950,64.140556>>, 23.000000) //Whole of the hypermarket
IF IS_ENTITY_ALIVE(mvSecurityCars[1].mVehicle)
IF NOT IS_PED_IN_VEHICLE(mSecurityPed[2].mPed,mvSecurityCars[1].mVehicle)
IF GET_SCRIPT_TASK_STATUS(mSecurityPed[2].mPed,SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mSecurityPed[2].mPed,SCRIPT_TASK_ENTER_VEHICLE) <> WAITING_TO_START_TASK
TASK_ENTER_VEHICLE(mSecurityPed[2].mPed,mvSecurityCars[1].mVehicle)
ENDIF
ELSE
//SET_PED_COMBAT_ATTRIBUTES(mSecurityPed[2].mPed,CA_LEAVE_VEHICLES,FALSE)
TASK_COMBAT_PED(mSecurityPed[2].mPed,PLAYER_PED_ID())
iSeqGuyDriveRoundBack = 1
ENDIF
ENDIF
ENDIF
ELIF iSeqGuyDriveRoundBack = 1
//He's chasing player, let him out if he wants
IF NOT IS_ENTITY_IN_RANGE_COORDS(mSecurityPed[2].mPed,vPrincessInitialLocation,100)
//SET_PED_COMBAT_ATTRIBUTES(mSecurityPed[2].mPed,CA_USE_VEHICLE,TRUE)
//SET_PED_COMBAT_ATTRIBUTES(mSecurityPed[2].mPed,CA_LEAVE_VEHICLES,TRUE)
iSeqGuyDriveRoundBack = 2
ENDIF
ENDIF
ENDIF
IF bPrincessSceneCreated = TRUE
IF NOT IS_ENTITY_ALIVE(mpPrincess.mPed)
SET_FAIL_REASON(FAIL_PRINCESS_KILLED)
ELSE
//Stopping guys taking cover by the princess' car before she drives off
IF NOT IS_ENTITY_IN_ANGLED_AREA(mpPrincess.mPed, <<1083.386353,-793.401428,55.294998>>, <<1092.125854,-793.567993,60.512684>>, 11.000000)
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
SET_PED_COMBAT_ATTRIBUTES(mSecurityPed[0].mPed,CA_USE_COVER,TRUE)
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
SET_PED_COMBAT_ATTRIBUTES(mSecurityPed[1].mPed,CA_USE_COVER,TRUE)
ENDIF
ENDIF
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mpPrincess.mPed,PLAYER_PED_ID())
SET_FAIL_REASON(FAIL_PRINCESS_INJURED)
ENDIF
IF iPanicConvo = 2
DO_PRINCESS_SHOUTING()
ENDIF
ENDIF
ENDIF
IF ARE_STRINGS_EQUAL(label, "PAP3_SECUR2_2")
KILL_FACE_TO_FACE_CONVERSATION()
ENDIF
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF iPanicConvo = 1
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeach, "pap3bau", "PAP3_SECUR4", "PAP3_SECUR4_3", CONV_PRIORITY_HIGH,INT_TO_ENUM(enumSubtitlesState,iSubs))
iPanicConvo = 2
ENDIF
ELIF iPanicConvo = 0
ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_ONE_ID, mSecurityPed[0].mPed, "Paparazzo3BBodyGuard1")
ADD_PED_FOR_DIALOGUE(sSpeach, DEALER_ID, mpDrugDealer.mPed, "Paparazzo3BDrugDealer")
ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_TWO_ID, mSecurityPed[1].mPed, "Paparazzo3BBodyGuard2")
ADD_PED_FOR_DIALOGUE(sSpeach, GOON_ID, mpDealerGoons[0].mPed, "Paparazzo3BDealerGoon1")
IF IS_ENTITY_ALIVE(mpPrincess.mPed)
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeach, "pap3bau", "PAP3_SHOCK", "PAP3_SHOCK_5", CONV_PRIORITY_HIGH,INT_TO_ENUM(enumSubtitlesState,iSubs))
iPanicConvo = 1
ENDIF
ELSE
iPanicConvo = 1
ENDIF
ENDIF
ENDIF
IF ALL_GUARDS_LOST()
eSubStage = SS_CLEANUP
ENDIF
//Princess flee player after waypoints
IF IS_PED_UNINJURED(mpPrincess.mPed)
AND IS_PED_IN_ANY_VEHICLE(mpPrincess.mPed)
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_VEHICLE(GET_VEHICLE_PED_IS_IN(mpPrincess.mPed))
VEHICLE_WAYPOINT_PLAYBACK_OVERRIDE_SPEED(GET_VEHICLE_PED_IS_IN(mpPrincess.mPed),20)
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(mpPrincess.mPed, <<1158.520142,-759.373901,56.322784>>, <<1116.868652,-759.690796,61.706322>>, 13.750000)
IF GET_SCRIPT_TASK_STATUS(mpPrincess.mPed,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
TASK_VEHICLE_MISSION_PED_TARGET(mpPrincess.mPed,GET_VEHICLE_PED_IS_IN(mpPrincess.mPed),PLAYER_PED_ID(),MISSION_FLEE,50.0,DRIVINGMODE_AVOIDCARS,20.0,20.0)
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_CLEANUP
CLEAR_PRINTS()
/*
FOR i = 0 TO NUM_OF_SECURITY_PEDS - 1
SAFE_REMOVE_BLIP(mSecurityPed[i].mBlip)
MAKE_PED_FLEE(mSecurityPed[i].mPed)
ENDFOR
FOR i = 0 TO NUM_OF_DEALER_GOONS - 1
MAKE_PED_FLEE(mpDealerGoons[i].mPed)
ENDFOR
*/
bMainObjectiveDisplayed = FALSE
//IF PLAYER HAS NOT HAD ENDPHONE CALL THEN DO IT NOW - ELSE PASS MISSION
IF bHadEndPhoneCall = FALSE
SetStage(MS_END_PHONE_CALL)
ELSE
Script_Passed()
ENDIF
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Deals with the end phone call to player
PROC END_PHONE_CALL()
LEAVE_DRUG_SCENE()
SWITCH eSubStage
CASE SS_SETUP
CPRINTLN(DEBUG_MISSION, "ENTERING END PHONE CALL 2000")
bHadEndPhoneCall = FALSE
eSubStage = SS_UPDATE
IF IS_PED_UNINJURED(mpPrincess.mPed)
AND IS_ENTITY_IN_RANGE_ENTITY(mpPrincess.mPed,PLAYER_PED_ID(),150)
AND bLeavingScene = TRUE
iLeaveSceneTimer = GET_GAME_TIMER() + 15000
ELSE
iLeaveSceneTimer = GET_GAME_TIMER() + 4001
ENDIF
bPrintLoseCops = FALSE
//ForceDriveAway()
BREAK
CASE SS_UPDATE
//HANDLE_PRINCESS_SCENE()
ForceDriveAway()
//IF ePrincessState = SP_WANDER OR (GET_GAME_TIMER() > iLeaveSceneTimer)
IF (GET_GAME_TIMER() > iLeaveSceneTimer)
OR ePrincessState = SP_WANDER
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(),0)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND NOT IS_PED_RAGDOLL(PLAYER_PED_ID())AND NOT IS_PED_GETTING_UP(PLAYER_PED_ID()) AND NOT IS_PED_PRONE(PLAYER_PED_ID())
AND NOT IS_PED_FALLING(PLAYER_PED_ID())
IF NOT bHadEndPhoneCall
ADD_PED_FOR_DIALOGUE(sSpeach, BEVERLY_ID, NULL, "BEVERLY")
ADD_PED_FOR_DIALOGUE(sSpeach, FRANKLIN_ID, PLAYER_PED_ID(), "FRANKLIN")
IF bBeverlyCalled
IF PLAYER_CALL_CHAR_CELLPHONE(sSpeach, CHAR_BEVERLY, "pap3bau", "PAP3_ENDCAL2", CONV_PRIORITY_VERY_HIGH)
REPLAY_RECORD_BACK_FOR_TIME(1.0, 4.5, REPLAY_IMPORTANCE_LOWEST)
bHadEndPhoneCall = TRUE
ENDIF
ELSE
IF PLAYER_CALL_CHAR_CELLPHONE(sSpeach, CHAR_BEVERLY, "pap3bau", "PAP3_ENDCALL", CONV_PRIORITY_VERY_HIGH)
REPLAY_RECORD_BACK_FOR_TIME(1.0, 4.5, REPLAY_IMPORTANCE_LOWEST)
bHadEndPhoneCall = TRUE
ENDIF
ENDIF
ELSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF HAS_CELLPHONE_CALL_FINISHED()
eSubStage = SS_CLEANUP
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
iLeaveSceneTimer = GET_GAME_TIMER() + 3000
IF bPrintLoseCops = FALSE
PRINT_NOW("PAP3B_COPS",DEFAULT_GOD_TEXT_TIME,0) //Lose the cops.
bPrintLoseCops = TRUE
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_CLEANUP
CLEAR_PRINTS()
bMainObjectiveDisplayed = FALSE
Script_Passed()
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Waits for the screen to fade out, then updates the fail reason for the mission
PROC FAIL_WAIT_FOR_FADE()
SWITCH eSubStage
CASE SS_SETUP
CLEAR_PRINTS()
CLEAR_HELP()
// remove blips
SAFE_REMOVE_BLIP(biMissionBlip)
STRING sFailReason
SWITCH eFailReason // print fail reason
CASE FAIL_DEFAULT // no fail reason to display
BREAK
CASE FAIL_PHOTO_LOST
sFailReason = "PAP3_08" //The photo opportunity was lost.
BREAK
CASE FAIL_SPOTTED
sFailReason = "PAP3_ALERT" //The security was alerted.
BREAK
CASE FAIL_PRINCESS_INJURED
sFailReason = "PAP3_INJUR2" //The princess was injured.
BREAK
CASE FAIL_PRINCESS_KILLED
sFailReason = "PAP3_KILL1" //The princess was killed.
BREAK
CASE FAIL_CONTACT_KILLED
sFailReason = "PAP3_KILL3" //You killed your contact.
BREAK
CASE FAIL_CONTACT_THREAT
sFailReason = "PAP3_THREAT" // You threatened your contact.
BREAK
ENDSWITCH
IF eFailReason = FAIL_DEFAULT
Random_Character_Failed()
ELSE
Random_Character_Failed_With_Reason(sFailReason)
ENDIF
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
bFailDialogue = FALSE
eSubStage = SS_UPDATE
BREAK
CASE SS_UPDATE
/*
IF IS_PED_UNINJURED(mSecurityPed[0].mPed)
IF GET_SCRIPT_TASK_STATUS(mSecurityPed[0].mPed,SCRIPT_TASK_AIM_GUN_AT_ENTITY) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mSecurityPed[0].mPed,SCRIPT_TASK_AIM_GUN_AT_ENTITY) <> WAITING_TO_START_TASK
GIVE_WEAPON_TO_PED(mSecurityPed[0].mPed,WEAPONTYPE_COMBATPISTOL,-1,TRUE,TRUE)
GIVE_WEAPON_COMPONENT_TO_PED(mSecurityPed[0].mPed,WEAPONTYPE_COMBATPISTOL,WEAPONCOMPONENT_AT_PI_FLSH)
TASK_AIM_GUN_AT_ENTITY(mSecurityPed[0].mPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
IF IS_PED_UNINJURED(mSecurityPed[1].mPed)
IF NOT IS_PED_HEADTRACKING_PED(mSecurityPed[1].mPed,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(mSecurityPed[1].mPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
IF IS_PED_UNINJURED(mpDrugDealer.mPed)
IF NOT IS_PED_HEADTRACKING_PED(mpDrugDealer.mPed,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(mpDrugDealer.mPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
*/
/*IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// delete everything here!
MissionCleanup()
DELETE_EVERYTHING()
IF IS_SCRIPTED_CONVERSATION_ONGOING()
KILL_ANY_CONVERSATION()
ENDIF
Script_Cleanup(FALSE)
ENDIF
ELSE*/
IF bFailDialogue
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// delete everything here!
MissionCleanup()
DELETE_EVERYTHING()
IF IS_SCRIPTED_CONVERSATION_ONGOING()
KILL_ANY_CONVERSATION()
ENDIF
Script_Cleanup(FALSE)
ENDIF
ENDIF
ELSE
IF eFailReason = FAIL_SPOTTED
IF bSecurityNoticedPlayer
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_ONE_ID, mSecurityPed[0].mPed, "Paparazzo3BBodyGuard1")
ADD_PED_FOR_DIALOGUE(sSpeach, DEALER_ID, mpDrugDealer.mPed, "Paparazzo3BDrugDealer")
ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_TWO_ID, mSecurityPed[1].mPed, "Paparazzo3BBodyGuard2")
ADD_PED_FOR_DIALOGUE(sSpeach, GOON_ID, mpDealerGoons[0].mPed, "Paparazzo3BDealerGoon1")
bFailDialogue = CREATE_CONVERSATION(sSpeach, "pap3bau", "PAP3_SECUR2", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
ENDIF
ELSE
//IF IS_PLAYER_UNARMED() // IF PLAYER IS UNARMED SAY THIS DIALOGUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_ONE_ID, mSecurityPed[1].mPed, "Paparazzo3BBodyGuard1")
bFailDialogue = PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeach, "pap3bau", "PAP3_SECUR4","PAP3_SECUR4_3",CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
ENDIF
//ELSE // IF PLAYER HAS WEAPON SAY THIS DIALOGUE.
// IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// ADD_PED_FOR_DIALOGUE(sSpeach, GUARD_ONE_ID, mSecurityPed[1].mPed, "Paparazzo3BBodyGuard1")
// bFailDialogue = CREATE_CONVERSATION(sSpeach, "pap3bau", "PAP3_SECUR3",CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
// ENDIF
//ENDIF
ENDIF
ELIF eFailReason = FAIL_CONTACT_THREAT
IF IS_PED_UNINJURED(mpDealerContact.mPed)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ADD_PED_FOR_DIALOGUE(sSpeach, GOON_ID, mpDealerContact.mPed, "Paparazzo3BDealerGoon1")
ADD_PED_FOR_DIALOGUE(sSpeach, FRANKLIN_ID, PLAYER_PED_ID(), "FRANKLIN")
bFailDialogue = CREATE_CONVERSATION(sSpeach, "pap3bau", "PAP3_FAIL", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
ENDIF
ELSE
bFailDialogue = TRUE
ENDIF
ENDIF
// not finished fading out
// you may want to handle dialogue etc here.
//ENDIF
BREAK
ENDSWITCH
ENDPROC
//Blocking temp events on dealers and then unblocking when security kick off (or deal is done).
PROC UNBLOCK_DEALERS_TEMP_EVENTS_WHEN_KICKING_OFF()
INT i
IF bSetRel
OR bLeavingScene
IF NOT bDealersTempEventsUnblocked
IF IS_ENTITY_ALIVE(mpDrugDealer.mPed)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDrugDealer.mPed,FALSE)
ENDIF
REPEAT NUM_OF_DEALER_GOONS i
IF IS_ENTITY_ALIVE(mpDealerGoons[i].mPed)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mpDealerGoons[i].mPed,FALSE)
ENDIF
ENDREPEAT
bDealersTempEventsUnblocked = TRUE
ENDIF
ENDIF
ENDPROC
// ===========================================================================================================
// Script Loop
// ===========================================================================================================
SCRIPT(g_structRCScriptArgs sRCLauncherDataIn)
sRCLauncherDataLocal = sRCLauncherDataIn
RC_TakeEntityOwnership(sRCLauncherDataLocal)
RC_CLEANUP_LAUNCHER()
SET_MISSION_FLAG(TRUE)
// Setup callback when player is killed, arrested or goes to multiplayer
IF (HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS|FORCE_CLEANUP_FLAG_DEBUG_MENU))
PRINT_LAUNCHER_DEBUG("Force cleanup [TERMINATING]")
Random_Character_Failed()
Script_Cleanup()
ENDIF
IF Is_Replay_In_Progress() // Set up the initial scene for replays
g_bSceneAutoTrigger = TRUE
eInitialSceneStage = IS_REQUEST_SCENE
WHILE NOT SetupScene_PAPARAZZO_3B(sRCLauncherDataLocal)
WAIT(0)
ENDWHILE
g_bSceneAutoTrigger = FALSE
ENDIF
InitVariables()
IF GET_MISSION_COMPLETE_STATE(SP_HEIST_DOCKS_1) = TRUE
OR IS_THIS_RANDOM_CHARACTER_MISSION_COMPLETED(RC_PAPARAZZO_3A)
bSimpleHelp = TRUE
ELSE
bSimpleHelp = FALSE
ENDIF
REPOSITION_LANDSCAPE_PHONE_FOR_LONG_SUBTITLES(TRUE)
// Loop within here until the mission passes or fails
WHILE(TRUE)
WAIT(0)
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_TH")
UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene)
UNBLOCK_DEALERS_TEMP_EVENTS_WHEN_KICKING_OFF()
IF MissionStage = MS_MISSION_FAILED
FAIL_WAIT_FOR_FADE()
ELSE
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
SWITCH missionStage //MAIN MISSION LOOP
CASE MS_INIT
STAGE_INIT()
BREAK
CASE MS_INITIAL_PHONE
INITIAL_PHONE_CALL()
BREAK
CASE MS_GO_TO_LOCATION
GO_TO_LOCATION()
BREAK
CASE MS_MEET_CONTACT
MEET_CONTACT()
BREAK
CASE MS_TAKE_PHOTO
TAKE_PHOTO()
BREAK
CASE MS_LEAVE_AREA
LEAVE_AREA()
BREAK
CASE MS_ESCAPE_SECURITY
ESCAPE_SECURITY()
BREAK
CASE MS_END_PHONE_CALL
END_PHONE_CALL()
BREAK
ENDSWITCH
ELSE
SET_FAIL_REASON(FAIL_DEFAULT)
ENDIF
ENDIF
#IF IS_DEBUG_BUILD // STAGE SKIPPING
if bFinishedSkipping = TRUE
DEBUG_Check_Debug_Keys() // not skipping stages, check for debug keys
ELSE
JumpToStage(eTargetStage) // still skipping stages
ENDIF
#ENDIF
ENDWHILE
// Script should never reach here. Always terminate with cleanup function.
ENDSCRIPT