2844 lines
104 KiB
Python
Executable File
2844 lines
104 KiB
Python
Executable File
|
||
//=======================================================================================================================================
|
||
// Taxi_FollowCar.sc
|
||
// Dev : John R. Diaz
|
||
/*
|
||
• “Follow that car!” This is a high speed pursuit of a fleeing automobile. Pretenses range from a cop chasing down a suspect to
|
||
a woman chasing a purse snatcher. As long as you pursue the target and never shoot/kill a pedestrian, these passengers will never
|
||
bail. Eventually, the target car stops and the driver bails. If you stop nearby, the passenger tosses you the fare when they get out.
|
||
*/
|
||
|
||
|
||
|
||
//CHANGELOG==========================================================================================================
|
||
//Seen Al do this, so I think I'll be doing the same
|
||
//
|
||
//4/11/11 - Added a new state for the player to earn a wanted level if he kills the driver of the car he's following.
|
||
//9/27/11 - Damn, so much for keeping a changelog. Alright trying this again. Today I'm reformatting/pretItifying my scripts
|
||
//===================================================================================================================
|
||
|
||
|
||
|
||
//Compile out Title Update changes to header functions.
|
||
//Must be before includes.
|
||
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
|
||
|
||
|
||
|
||
//Includes------------------------------------------------------
|
||
USING "Taxi_Includes.sch"
|
||
|
||
USING "Taxi_AI_Car_lib.sch"
|
||
|
||
//Consts-------------------------------------------------------
|
||
CONST_FLOAT TAXI_CONST_CHASEE_CRUISE_SPEED 35.0
|
||
CONST_FLOAT TAXI_OJ_CONST_DIST_TO_SEE_FC_CLUB 150.0
|
||
CONST_INT TAXI_CONST_CASH_BONUS_PRIVATE_EYE 100
|
||
CONST_FLOAT TAXI_CONST_FC_ROAD_DISABLE_RADIUS 50.0
|
||
CONST_FLOAT TAXI_CONST_FC_WAIT_TIME_BEFORE_AVOIDING_CARS 120.0
|
||
CONST_INT TAXI_CONST_VR_FIANCE_EXIT_HOSPITAL 120
|
||
CONST_FLOAT TAXI_CONST_FC_ROAD_NODES_RADIUS 15.0
|
||
//CONST_INT TAXI_FC_CHASE_CAM_HLP 0
|
||
|
||
//Local Variables-----------------------------------------------
|
||
|
||
//Taxi Bonus Data-------------------------------------------------------------------
|
||
ENUM TAXIOJ_FC_BONUS
|
||
TFC_BONUS_P_EYE = 0,
|
||
TFC_BONUS_TOTAL
|
||
ENDENUM
|
||
BONUS_FIELD bonusFieldFollowCar[TFC_BONUS_TOTAL]
|
||
|
||
ENUM TAXIOJ_FC_DROPZONE
|
||
TFC_DROPZONE1,
|
||
TFC_DROPZONE2
|
||
ENDENUM
|
||
TAXIOJ_FC_DROPZONE eFCDropZone
|
||
|
||
//Native Data
|
||
SEQUENCE_INDEX siEscapeeSequenceID
|
||
SEQUENCE_INDEX siWhoreSequenceID
|
||
SEQUENCE_INDEX siPassengerSequenceID
|
||
//SEQUENCE_INDEX wayPtSeq
|
||
|
||
VEHICLE_INDEX viHospitalCars[3]
|
||
VEHICLE_INDEX viAmbulance
|
||
|
||
CAMERA_INDEX ciTransCam
|
||
//Custom Data
|
||
TaxiStruct myTaxiData
|
||
|
||
escapeStruct myEscapeeStruct
|
||
|
||
MODEL_NAMES mPassengerModel = A_F_Y_GENHOT_01 // A_F_Y_FITNESS_02
|
||
MODEL_NAMES mWhoreModel = A_F_Y_BEVHILLS_01
|
||
MODEL_NAMES mHospitalCar1 = AMBULANCE
|
||
MODEL_NAMES mHospitalCar2 = bison //pyxis Changed to fix build error
|
||
|
||
PED_INDEX piWhore
|
||
PED_INDEX piMedic
|
||
|
||
REL_GROUP_HASH rghPassenger
|
||
REL_GROUP_HASH rghWhore
|
||
|
||
SCENARIO_BLOCKING_INDEX tempScenarioBlockingIndex
|
||
|
||
INCIDENT_INDEX nurseIncident
|
||
|
||
//Ints
|
||
INT iDebugThrottle = 1
|
||
INT iAllowSkipCutsceneTimeLocal = 1000
|
||
INT iTipIndex = 0
|
||
INT iOutWayPoint
|
||
INT iFinalFailDelay
|
||
//INT iShootStartTime
|
||
|
||
//Road Node Machine Vars
|
||
|
||
//INT iRoadNodeMachineIndex = 0
|
||
//INT iNumRoadNodes
|
||
//INT iWayPtProgress
|
||
|
||
//
|
||
//INT iFCHelpBitField
|
||
//INT iChaseCamTime = 0
|
||
|
||
//Bools
|
||
|
||
BOOL bHusbnadDrvSet = FALSE
|
||
BOOL bPlayerDisabled = FALSE
|
||
BOOL bTransititonToWaypointRec = FALSE
|
||
BOOL bTaxiOJ_GYN_IsPlayerTooClose
|
||
BOOL bTaxiOJ_GYN_IsFianceDead
|
||
BOOL bTaxiOJ_GYN_IsPassengerAtConfrontationPt
|
||
BOOL bTaxiSetVehicleMultiplier
|
||
BOOL bFianceReacted
|
||
BOOL bCheckPlayerEndInterruption
|
||
BOOL bAmbulanceFound, bDispatchSuccessful
|
||
BOOL bStartCar
|
||
BOOL bKillFinalConversation
|
||
BOOL bPulseOut1
|
||
BOOL bPulseOut2
|
||
|
||
//Vectors
|
||
VECTOR vPassengerPt = << 1358.8215, -1547.3961, 53.7793 >>
|
||
VECTOR vPassengerPickupPt = << 1358.8215, -1547.3961, 53.7793 >>
|
||
VECTOR vEnemyDestination = <<-694.2758, -1119.4468, 13.5250>> //<< -878.1066, -19.5377, 41.1525 >>
|
||
VECTOR vDropOff = <<-683.1272, -1102.1846, 13.5257>> //<< -866.5179, -3.2549, 42.2436 >> //<< -870.4353, -9.8660, 41.8970 >>
|
||
VECTOR vHospitalMin = << 410.2629, -1399.1598, 28.4017 >>
|
||
VECTOR vHospitalMax = << 371.3834, -1482.9553, 28.3418 >>
|
||
|
||
VECTOR vEnemyPedSpawnPt = << 404.8026, -1416.2942, 28.4350 >>
|
||
VECTOR vEnemyCarSpawnPt = <<406.612000,-1419.936890,29.003754>> //<<406.600494,-1419.958008,28.987108>> //<< 407.0237, -1420.0444, 28.4585 >>
|
||
|
||
VECTOR vWhoreSpawn = <<-682.5392, -1109.0822, 13.6729>>//<<-689.522827,-1116.601929,13.524973>> //<<-687.552002,-1114.860474,14.524975>>
|
||
VECTOR vWhoreGoToPos = << -688.67273, -1117.51196, 13.52498 >>
|
||
VECTOR vHouseMin = <<-667.1360, -1046.0604, 15.9174>> //<<-663.4819, -1064.0221, 15.5359>> //<< -872.3717, 1.9813, 42.8129 >>
|
||
VECTOR vHouseMax = <<-703.1228, -1142.4324, 9.8127>> //<< -895.1227, -26.2457, 40.9286 >>
|
||
|
||
VECTOR vOutWayPointCoord
|
||
|
||
//New Cutscene 02 - Fiance Reaches His Side Chick - Coords
|
||
VECTOR vTaxiOJ_FC_CS02_FianceWarpPt1 = <<-701.2533, -1080.2850, 12.2884>> //<< -820.3372, -4.8864, 39.7083 >> //<< -815.7826, -10.8013, 38.7909 >>
|
||
//VECTOR vTaxiOJ_FC_C02_WarpPt_Player1 = <<-662.2928, -1036.4415, 16.5224>> //<< -793.3931, -50.7208, 36.8511 >>
|
||
VECTOR vTaxiOJ_FC_RoadNodePts_End1 = <<-687.8794, -1108.0731, 13.5257>> //<< -868.58, 4.25, 42.71>>
|
||
VECTOR vTaxiOJ_FC_RoadNodePts_End2 = <<-703.0013, -1084.0730, 12.1105>> //<<-939.73, 57.97, 49.24 >>
|
||
|
||
VECTOR vPathNodeMin
|
||
VECTOR vPathNodeMax
|
||
|
||
//Floats
|
||
FLOAT fWhoreSpawnHeading = 25.0227
|
||
//FLOAT fTaxiOJ_FC_C02_Heading_Taxi1 = 167.6095 //28
|
||
FLOAT fTaxiOJ_FC_C02_Heading_Fiance1 = 226.3085 //120.7013 //29
|
||
FLOAT fEscapeeSpawnHeading = -128.232941 //232.3856 //231.0608
|
||
FLOAT fEscapeeHeading = 238.4969
|
||
FLOAT fEnemyDestHeading = 212.7682 //163.3336
|
||
|
||
INT iTimeOfEscapeeStart = 0
|
||
|
||
TEXT_LABEL_15 sNurseCarRecording = "taxi_oj_fc_2" //"taxi_oj_fc"
|
||
|
||
TEXT_LABEL_63 sNurseChatAnim = "amb@world_human_hang_out_street@male_c@idle_a" // use idle_b
|
||
TEXT_LABEL_63 sNurseChatExit = "amb@world_human_hang_out_street@male_c@exit"
|
||
TEXT_LABEL_63 sMistressChatAnim = "amb@world_human_hang_out_street@female_hold_arm@idle_a" // use idle_a
|
||
TEXT_LABEL_63 sMistressChatExit = "amb@world_human_hang_out_street@female_hold_arm@exit"
|
||
|
||
VECTOR vLocate_fc_final_cs_triggerPos1 = <<-727.111023,-1046.356812,11.439257>> //<<-683.490173,-1027.691528,15.216422>>
|
||
VECTOR vLocate_fc_final_cs_triggerPos2 = <<-642.609741,-1085.538086,28.429213>> //<<-624.758972,-1057.963501,22.049709>>
|
||
FLOAT fLocate_fc_final_cs_triggerWidth = 76.750 //10.0 //5.000000
|
||
|
||
|
||
//Dialogue Queue Info
|
||
BOOL g_bDebug = FALSE
|
||
TAXI_OJ_DIALOGUE_Q_DATA tTaxiOJ_DQ_Data
|
||
TAXI_OJ_DQ_CONVERSATION_LINE tDialogueLine[CONST_TAXIOJ_SIZE_Q]
|
||
|
||
DRIVINGMODE tFianceDrivingMode = DF_SwerveAroundAllCars|DF_SteerAroundObjects|DF_UseShortCutLinks|DF_ChangeLanesAroundObstructions
|
||
//DRIVINGMODE tFianceDrivingMode = DF_SwerveAroundAllCars|DF_SteerAroundPeds|DF_SteerAroundObjects|DF_UseShortCutLinks|DF_ChangeLanesAroundObstructions
|
||
DRIVINGMODE tFianceDrivingMode2 = DF_StopForCars //DF_SteerAroundStationaryCars | DF_ChangeLanesAroundObstructions | DF_PreferNavmeshRoute | DF_SwerveAroundAllCars
|
||
AGGRO_ARGS aggroArgs
|
||
|
||
SCRIPT_SHARD_BIG_MESSAGE TaxiMidSize
|
||
//Debug---------------------------------------------------------------------------------------------------------------
|
||
#IF IS_DEBUG_BUILD
|
||
WIDGET_GROUP_ID taxiRideWidgets,ojTaxiWidgets_Chase
|
||
TEXT_LABEL sDebugNumClose,sDebugNumHits, sDebugNumTooFar, sDebugNumWarn,sDebugChaseVals[2]
|
||
TEXT_LABEL sDebugPlayerDistance
|
||
BOOL bDebugDrawDistance, bDrawHudHitCount
|
||
BOOL bDebugTurnOnFreeRide = FALSE
|
||
BOOL bDebugDrawZones
|
||
TXM_DEBUG_SKIP_STATES tDebugState = TXM_DSS_CHECK_FOR_BUTTON_PRESS
|
||
#ENDIF
|
||
|
||
//FUNCTIONS------------------------------------------------------------------------------------------------------------
|
||
|
||
|
||
ENUM FINAL_SCENE
|
||
FINAL_SCENE_ARRIVE = 0,
|
||
FINAL_SCENE_TAKE_PLACES,
|
||
FINAL_SCENE_PASSENGER_POUNCE,
|
||
FINAL_SCENE_WAIT_FOR_DIALOGUE,
|
||
FINAL_SCENE_KILL_WOMAN,
|
||
FINAL_SCENE_WAIT,
|
||
FINAL_SCENE_KILL_MAN,
|
||
FINAL_SCENE_FLEE
|
||
ENDENUM
|
||
|
||
FINAL_SCENE finalState = FINAL_SCENE_ARRIVE
|
||
|
||
FUNC VECTOR GET_PASSENGER_WALK_TO_POINT(TAXIOJ_FC_DROPZONE eThisDropZone)
|
||
SWITCH eThisDropZone
|
||
CASE TFC_DROPZONE1
|
||
RETURN <<-691.48, -1113.31, 13.53>> //<< -876.9708, -10.3602, 41.7911 >>
|
||
CASE TFC_DROPZONE2
|
||
RETURN <<-691.48, -1113.31, 13.53>> //<< -885.94, -10.91, 42.19 >>
|
||
ENDSWITCH
|
||
|
||
RETURN <<-691.48, -1113.31, 13.53>> //<< -876.9708, -10.3602, 41.7911 >>
|
||
ENDFUNC
|
||
|
||
/// PURPOSE: Request all our mission specific assets here
|
||
///
|
||
PROC REQUEST_TAXI_ODDJOB_FC_STREAMS_STAGE_01()
|
||
|
||
REQUEST_MODEL(mPassengerModel)
|
||
TAXI_INIT_SHARED_STREAMS(FALSE)
|
||
TaxiMidSize.siMovie = REQUEST_MG_MIDSIZED_MESSAGE()
|
||
REQUEST_ANIM_DICT("gestures@m@standing@casual")
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"Taxi OJ Follow Car Stage01 Assets Requested")
|
||
ENDPROC
|
||
|
||
PROC RELEASE_TAXI_ODDJOB_DL_STREAMS_STAGE_01()
|
||
|
||
SET_MODEL_AS_NO_LONGER_NEEDED(mPassengerModel)
|
||
|
||
REMOVE_ANIM_DICT("gestures@m@standing@casual")
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"[CLEANUP] Taxi OJ Follow Car Stage01 Assets Released")
|
||
|
||
ENDPROC
|
||
PROC REQUEST_TAXI_ODDJOB_FC_STREAMS_STAGE_02()
|
||
//Load text and UI
|
||
REQUEST_MODEL(myEscapeeStruct.escapeeModel)
|
||
REQUEST_MODEL(myEscapeeStruct.escapeeCarModel)
|
||
|
||
REQUEST_MODEL(mHospitalCar1)
|
||
REQUEST_MODEL(mHospitalCar2)
|
||
|
||
REQUEST_VEHICLE_RECORDING(TAXI_CONST_VR_FIANCE_EXIT_HOSPITAL,"txm_fc_h1_")
|
||
REQUEST_VEHICLE_RECORDING(0,"taxi_oj_fc3")
|
||
|
||
REQUEST_WAYPOINT_RECORDING(sNurseCarRecording)
|
||
|
||
REQUEST_ANIM_DICT("veh@truck@ds@base")
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"Taxi OJ Follow Car Stage02 - Assets Requested")
|
||
ENDPROC
|
||
|
||
PROC RELEASE_TAXI_ODDJOB_FC_STREAMS_STAGE_02()
|
||
|
||
//Load text and UI
|
||
SET_MODEL_AS_NO_LONGER_NEEDED(myEscapeeStruct.escapeeModel)
|
||
SET_MODEL_AS_NO_LONGER_NEEDED(myEscapeeStruct.escapeeCarModel)
|
||
|
||
SET_MODEL_AS_NO_LONGER_NEEDED(mHospitalCar1)
|
||
SET_MODEL_AS_NO_LONGER_NEEDED(mHospitalCar2)
|
||
|
||
REMOVE_WAYPOINT_RECORDING(sNurseCarRecording)
|
||
|
||
REMOVE_ANIM_DICT("veh@truck@ds@base")
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI," [CLEANUP] INIT_TAXI_STREAMS - SUCCESS")
|
||
|
||
ENDPROC
|
||
|
||
PROC REQUEST_TAXI_ODDJOB_FC_STREAMS_STAGE_END()
|
||
|
||
REQUEST_MODEL(mWhoreModel)
|
||
REQUEST_ANIM_DICT("MOVE_DUCK_FOR_COVER")
|
||
REQUEST_ANIM_DICT(sNurseChatAnim)
|
||
REQUEST_ANIM_DICT(sNurseChatExit)
|
||
REQUEST_ANIM_DICT(sMistressChatAnim)
|
||
REQUEST_ANIM_DICT(sMistressChatExit)
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"Taxi OJ Follow Car End Assets Requested")
|
||
ENDPROC
|
||
|
||
PROC RELEASE_TAXI_ODDJOB_FC_STREAMS_STAGE_END()
|
||
|
||
SET_MODEL_AS_NO_LONGER_NEEDED(mWhoreModel)
|
||
REMOVE_ANIM_DICT("MOVE_DUCK_FOR_COVER")
|
||
REMOVE_ANIM_DICT(sNurseChatAnim)
|
||
REMOVE_ANIM_DICT(sNurseChatExit)
|
||
REMOVE_ANIM_DICT(sMistressChatAnim)
|
||
REMOVE_ANIM_DICT(sMistressChatExit)
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"[CLEANUP]Taxi OJ Follow Car End Assets Requested")
|
||
ENDPROC
|
||
|
||
FUNC BOOL HAVE_TAXI_OJ_FC_STAGE_END_ASSETS_LOADED()
|
||
|
||
IF NOT HAS_MODEL_LOADED(mWhoreModel)
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
IF NOT HAS_ANIM_DICT_LOADED("MOVE_DUCK_FOR_COVER")
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading MOVE_DUCK_FOR_COVER",iDebugThrottle)
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"[ASSETS] Taxi OJ FC End Assets Have All Loaded")
|
||
RETURN TRUE
|
||
|
||
ENDFUNC
|
||
|
||
|
||
FUNC BOOL HAVE_TAXI_OJ_FC_STAGE_02_ASSETS_LOADED()
|
||
//Need this after passenger is picked up
|
||
|
||
IF NOT HAS_MODEL_LOADED(myEscapeestruct.escapeeModel)
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_FC_STAGE_02 - Loading escape ped",iDebugThrottle)
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
IF NOT HAS_MODEL_LOADED(myEscapeestruct.escapeeCarModel)
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_FC_STAGE_02 - Loading escape car",iDebugThrottle)
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
IF NOT HAS_MODEL_LOADED(mHospitalCar1)
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_FC_STAGE_02 - Loading ambulance",iDebugThrottle)
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
IF NOT HAS_MODEL_LOADED(mHospitalCar2)
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_FC_STAGE_02 - Loading hospital car 2",iDebugThrottle)
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
IF NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(TAXI_CONST_VR_FIANCE_EXIT_HOSPITAL, "txm_fc_h1_")
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_FC_STAGE_02 - Vehicle Recording Loading txm_fc_h1_...",iDebugThrottle)
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
IF NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(0, "taxi_oj_fc3")
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_FC_STAGE_02 - Vehicle Recording Loading taxi_oj_fc3...",iDebugThrottle)
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
IF NOT GET_IS_WAYPOINT_RECORDING_LOADED(sNurseCarRecording)
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_FC_STAGE_02 - Way point Recording Loading taxi_oj_fc...",iDebugThrottle)
|
||
RETURN FALSE
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_ASSET_STREAMED - sNurseCarRecording loaded up just fine.")
|
||
ENDIF
|
||
|
||
IF NOT HAS_ANIM_DICT_LOADED("veh@truck@ds@base")
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_ASSET_STREAMED - Loading anim dict veh@truck@ds@base")
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"[ASSETS] Taxi OJ FC S02 Assets Have All Loaded - [S_M_M_DOCTOR_01, BISON, AMBULANCE, 1x VEHICLE RECORDINGS AND 1 WAYPOINT RECORDING]")
|
||
RETURN TRUE
|
||
ENDFUNC
|
||
|
||
|
||
//// PURPOSE: Waits for our assets to load
|
||
///
|
||
/// RETURNS: TRUE if everything has loaded correctly FALSE if there was a problem
|
||
///
|
||
|
||
FUNC BOOL HAVE_TAXI_OJ_FC_STAGE_01_ASSETS_LOADED()
|
||
|
||
IF NOT HAS_MODEL_LOADED(mPassengerModel)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_ASSET_STREAMED - Loading ", "",GET_MODEL_NAME_FOR_DEBUG(mPassengerModel) )
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
IF NOT HAS_ANIM_DICT_LOADED("gestures@m@standing@casual")
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_ASSET_STREAMED - Loading anim dict gestures@m@standing@casual")
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
IF NOT TAXI_SHARED_ASSETS_STREAMED(iDebugThrottle,FALSE)
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading shared assets",iDebugThrottle)
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"[ASSETS] TAXI OJ FC STAGE01 Assets Loaded~~~~~~~~~~~~~~~~~~~~~~~~~~~~~----")
|
||
RETURN TRUE
|
||
ENDFUNC
|
||
|
||
/// PURPOSE: Call just before terminating this script
|
||
///
|
||
PROC Script_Cleanup()
|
||
#IF IS_DEBUG_BUILD
|
||
IF DOES_WIDGET_GROUP_EXIST(taxiRideWidgets)
|
||
DELETE_WIDGET_GROUP(taxiRideWidgets)
|
||
ENDIF
|
||
|
||
IF DOES_WIDGET_GROUP_EXIST(ojTaxiWidgets_Chase)
|
||
DELETE_WIDGET_GROUP(ojTaxiWidgets_Chase)
|
||
ENDIF
|
||
|
||
CLEANUP_TAXI_WIDGETS()
|
||
|
||
#ENDIF
|
||
|
||
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(vHospitalMin, vHospitalMax, TRUE)
|
||
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(vHouseMin, vHouseMax, TRUE)
|
||
TOGGLE_ROAD_NODES_IN_AREA_FOR_TAXI_OJ(vTaxiOJ_FC_RoadNodePts_End1, TAXI_AREA_ROAD_DISABLE_RADIUS, FALSE)
|
||
TOGGLE_ROAD_NODES_IN_AREA_FOR_TAXI_OJ(vTaxiOJ_FC_RoadNodePts_End2, TAXI_AREA_ROAD_DISABLE_RADIUS, FALSE)
|
||
|
||
CLEAR_PED_NON_CREATION_AREA()
|
||
REMOVE_SCENARIO_BLOCKING_AREA(tempScenarioBlockingIndex)
|
||
|
||
REMOVE_RELATIONSHIP_GROUP( rghWhore )
|
||
REMOVE_RELATIONSHIP_GROUP( rghPassenger )
|
||
REMOVE_WAYPOINT_RECORDING(sNurseCarRecording)
|
||
|
||
TAXI_PREP_SET_ROADS_IN_AREA_FOR_PICKUP(<< 385.1685, -1372.7186, 29.8554 >>,TRUE,TAXI_CONST_FC_ROAD_DISABLE_RADIUS)
|
||
|
||
RELEASE_TAXI_ODDJOB_DL_STREAMS_STAGE_01()
|
||
RELEASE_TAXI_ODDJOB_FC_STREAMS_STAGE_02()
|
||
RELEASE_TAXI_ODDJOB_FC_STREAMS_STAGE_END()
|
||
|
||
SET_VEHICLE_MODEL_IS_SUPPRESSED(myEscapeeStruct.escapeeCarModel, FALSE)
|
||
|
||
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"Taxi Oddjob Follow Car_Cleanup - SUCCESS")
|
||
TERMINATE_THIS_THREAD()
|
||
ENDPROC
|
||
|
||
// Perform any special commands if the script passes
|
||
// NOTE: This can include WAITs prior to the Mission_Cleanup() call
|
||
PROC Script_Passed()
|
||
SET_TAXI_ODDJOB_PASSED(myTaxiData)
|
||
|
||
CLEANUP_TAXI_ODDJOB(myTaxiData)
|
||
Script_Cleanup()
|
||
ENDPROC
|
||
|
||
// Perform any special commands if the script fails
|
||
// NOTE: This can include WAITs prior to the Mission_Cleanup() call
|
||
PROC Script_Failed()
|
||
TAXI_SCRIPT_FAILED(myTaxiData)
|
||
SET_PROPERTY_MANAGEMENT_RESULT(PROPERTY_MANAGEMENT_RESULT_FAILURE)
|
||
Script_Cleanup()
|
||
ENDPROC
|
||
|
||
PROC INITIALIZE_SCRIPT_VARIABLES()
|
||
|
||
TAXI_ODDJOB_GLOBAL_SETUP(myTaxiData,TXM_10_FOLLOWTHATCAR)
|
||
|
||
// Set our initial state up. VIP missions don't start at TRS_FINDING_LOCATION.
|
||
myTaxiData.tTaxiOJ_RideState = TRS_INIT_STREAM
|
||
|
||
SET_TAXI_TIP_CUTOFFS(myTaxiData,CONST_TAXI_OJ_TIP_AVERAGE_CUTOFF,CONST_TAXI_OJ_TIP_AMAZING_CUTOFF)
|
||
|
||
//Init j skip points------
|
||
myTaxiData.vTaxiOJ_WarpPtPickup = << 1412.3242, -1518.3154, 58.4644 >>
|
||
myTaxiData.fTaxiOJ_WarpPtHeadingPickup = 114.1
|
||
|
||
myTaxiData.vTaxiOJ_WarpPtDropoff = vDropOff
|
||
myTaxiData.fTaxiOJ_WarpPtHeadingDropoff = 95.93
|
||
|
||
INITIALIZE_ESCAPEE_STRUCT(myTaxiData,myEscapeeStruct)
|
||
myEscapeeStruct.escapeeModel = S_M_M_DOCTOR_01
|
||
myEscapeeStruct.escapeeCarModel = BISON
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
#IF DEBUG_iTurnOnAllDXDebug
|
||
ENABLE_ALL_DIALOGUE_DEBUG()
|
||
#ENDIF
|
||
//Initial position for the distance between the taxi and the pursue-ee
|
||
taxiRideWidgets = START_WIDGET_GROUP("Taxi Ride - Follow That Car")
|
||
|
||
INIT_ODDJOB_TAXI_WIDGETS()
|
||
|
||
//Gameplay Widget
|
||
ojTaxiWidgets_Chase = START_WIDGET_GROUP("Chase")
|
||
|
||
ADD_WIDGET_STRING("Follow Lengths")
|
||
ADD_WIDGET_FLOAT_SLIDER("Too Far Warn Dist: ", TWEAK_TAXI_FOLLOW_TOO_FAR_DIST_WARN,100.0,500.0,20.0)
|
||
ADD_WIDGET_FLOAT_SLIDER("Too Far Dist: ", TWEAK_TAXI_FOLLOW_TOO_FAR_DIST,100.0,500.0,20.0)
|
||
|
||
|
||
ADD_WIDGET_BOOL("Draw Chase Hit/Warn Count", bDrawHudHitCount)
|
||
|
||
ADD_WIDGET_BOOL("Draw Follow Zones", bDebugDrawZones)
|
||
|
||
ADD_WIDGET_BOOL("Draw Distance to Chasee", bDebugDrawDistance)
|
||
|
||
|
||
STOP_WIDGET_GROUP()
|
||
|
||
STOP_WIDGET_GROUP()//Main Widget Group
|
||
|
||
|
||
#ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~-------------------------------~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~----")
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~~~~~~~~~~~~ Oddjobs | Taxi | Follow Car ~~~~~~~~~~~~~~~~~~~----------")
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~-------------------------------~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~----")
|
||
|
||
ENDPROC
|
||
#IF IS_DEBUG_BUILD
|
||
PROC PROCESS_WIDGETS()
|
||
|
||
UPDATE_TAXI_WIDGETS(myTaxiData,tTaxiOJ_DQ_Data)
|
||
|
||
IF bDebugDrawDistance
|
||
TAXI_DEBUG_DRAW_DISTANCE_CHASE(myTaxiData,myEscapeeStruct.viCar,vTaxiOJ_FC_CS02_FianceWarpPt1,sDebugChaseVals)
|
||
ENDIF
|
||
|
||
IF bDrawHudHitCount
|
||
IF IS_VEHICLE_DRIVEABLE(myEscapeeStruct.viCar)
|
||
|
||
sDebugNumWarn = "Warned # "
|
||
sDebugNumWarn += TAXI_UTILS_GET_STRING_FROM_INT_SP(myEscapeeStruct.iNumTimesWarned)
|
||
DRAW_DEBUG_TEXT_2D(sDebugNumWarn,<<0.8,0.28,0.0>>)
|
||
|
||
sDebugNumHits = "Hits # "
|
||
sDebugNumHits += TAXI_UTILS_GET_STRING_FROM_INT_SP(myEscapeeStruct.iNumTimesHitByPlayer)
|
||
DRAW_DEBUG_TEXT_2D(sDebugNumHits,<<0.8,0.3,0.0>>)
|
||
|
||
sDebugNumClose = "Close # "
|
||
sDebugNumClose +=TAXI_UTILS_GET_STRING_FROM_INT_SP(myEscapeeStruct.iNumTimesTooClose)
|
||
DRAW_DEBUG_TEXT_2D(sDebugNumClose,<<0.80,0.32,0.0>>)
|
||
|
||
sDebugNumTooFar = "Far # "
|
||
sDebugNumTooFar +=TAXI_UTILS_GET_STRING_FROM_INT_SP(myEscapeeStruct.iNumTimesOutofSight)
|
||
DRAW_DEBUG_TEXT_2D(sDebugNumTooFar,<<0.8,0.34,0.0>>)
|
||
|
||
|
||
ENDIF
|
||
ENDIF
|
||
ENDPROC
|
||
#ENDIF
|
||
|
||
FUNC BOOL SPAWN_ESCAPEE_VEHICLE(escapeStruct &theEscapeStruct, VECTOR pos, FLOAT heading )
|
||
theEscapestruct.vCarSpawnPt = pos
|
||
theEscapeStruct.fCarheading = heading
|
||
theEscapestruct.viCar = CREATE_VEHICLE(theEscapestruct.escapeeCarModel, theEscapestruct.vCarSpawnPt, theEscapeStruct.fCarheading)
|
||
SET_VEHICLE_MODEL_IS_SUPPRESSED(theEscapestruct.escapeeCarModel, TRUE)
|
||
SET_MODEL_AS_NO_LONGER_NEEDED(theEscapeStruct.escapeeCarModel)
|
||
|
||
// placing ambient hospital vehicles
|
||
viHospitalCars[0] = CREATE_VEHICLE(mHospitalCar1, << 404.9912, -1423.9735, 28.4638 >>, 227.5235)//<< 401.3416, -1425.8754, 28.4548 >>, 227.6349)
|
||
viHospitalCars[1] = CREATE_VEHICLE(mHospitalCar1, << 402.2958, -1427.0176, 28.4632 >>, 226.6982)//<< 409.2538, -1437.2434, 28.4066 >>, 34.1472)
|
||
viHospitalCars[2] = CREATE_VEHICLE(mHospitalCar2, << 398.4150, -1428.1665, 28.4504 >>, 226.4081)
|
||
|
||
SET_VEHICLE_DOORS_LOCKED(viHospitalCars[0], VEHICLELOCK_LOCKED )
|
||
SET_VEHICLE_DOORS_LOCKED(viHospitalCars[1], VEHICLELOCK_LOCKED )
|
||
SET_VEHICLE_DOORS_LOCKED(viHospitalCars[2], VEHICLELOCK_LOCKED )
|
||
|
||
|
||
SET_VEHICLE_NUMBER_PLATE_TEXT(viHospitalCars[0],"BRAVEST")
|
||
SET_VEHICLE_NUMBER_PLATE_TEXT(viHospitalCars[1],"BOLDEST")
|
||
SET_VEHICLE_NUMBER_PLATE_TEXT(viHospitalCars[2],"BADDEST")
|
||
|
||
//Store current health
|
||
SET_ENTITY_HEALTH(theEscapeStruct.viCar,TAXI_CONST_STOP_CAR_START_HEALTH)
|
||
SET_VEHICLE_NUMBER_PLATE_TEXT(theEscapeStruct.viCar,"PUSSYWAG")
|
||
SET_VEHICLE_DISABLE_TOWING(theEscapestruct.viCar, TRUE)
|
||
SET_VEHICLE_ALARM(theEscapestruct.viCar,TRUE)
|
||
|
||
theEscapeStruct.fCurrentEngHealth = GET_VEHICLE_ENGINE_HEALTH(theEscapeStruct.viCar)
|
||
theEscapestruct.tesState = TES_INIT
|
||
SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(theEscapeStruct.viCar,TRUE)
|
||
|
||
TAXI_PREP_SET_ROADS_IN_AREA_FOR_PICKUP(myTaxiData.vTaxiOJPickup,TRUE)
|
||
TAXI_PREP_SET_ROADS_IN_AREA_FOR_PICKUP(vTaxiOJ_FC_RoadNodePts_End1,TRUE,TAXI_CONST_FC_ROAD_NODES_RADIUS)
|
||
TAXI_PREP_SET_ROADS_IN_AREA_FOR_PICKUP(vTaxiOJ_FC_RoadNodePts_End2,TRUE,TAXI_CONST_FC_ROAD_NODES_RADIUS)
|
||
|
||
|
||
SET_VEHICLE_DOORS_LOCKED(theEscapeStruct.viCar, VEHICLELOCK_LOCKED )
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"Spawning Fiance's BISON.")
|
||
|
||
RETURN TRUE
|
||
ENDFUNC
|
||
|
||
FUNC BOOL SPAWN_ESCAPEE(escapeStruct &theEscapeStruct, VECTOR pos, FLOAT heading )
|
||
//Create driver and set him up
|
||
|
||
IF NOT DOES_ENTITY_EXIST(theEscapestruct.piPed)
|
||
theEscapestruct.piPed = CREATE_PED( PEDTYPE_MISSION, theEscapestruct.escapeeModel, pos, heading )
|
||
ENDIF
|
||
|
||
//Add to dialogue struct.
|
||
ADD_PED_FOR_DIALOGUE(myTaxiData.tTaxiOJ_Convo,4,theEscapestruct.piPed,"TaxiJames")
|
||
SET_AMBIENT_VOICE_NAME(theEscapestruct.piPed, "TaxiJames")
|
||
|
||
//SET_PED_COMPONENT_VARIATION(theEscapestruct.piPed, PED_COMP_HEAD, 1, 0)
|
||
//SET_PED_COMPONENT_VARIATION(theEscapestruct.piPed, PED_COMP_LEG, 0, 0)
|
||
// SET_PED_COMPONENT_VARIATION(theEscapestruct.piPed, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
|
||
// SET_PED_COMPONENT_VARIATION(theEscapestruct.piPed, INT_TO_ENUM(PED_COMPONENT,3), 1, 0, 0) //(uppr)
|
||
// SET_PED_COMPONENT_VARIATION(theEscapestruct.piPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
|
||
// SET_PED_COMPONENT_VARIATION(theEscapestruct.piPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
||
|
||
IF NOT IS_ENTITY_DEAD(piWhore)
|
||
SET_PED_CONFIG_FLAG(piWhore, PCF_AllowMedicsToAttend, TRUE)
|
||
ENDIF
|
||
|
||
IF NOT IS_ENTITY_DEAD(theEscapestruct.piPed)
|
||
SET_PED_COMPONENT_VARIATION(theEscapestruct.piPed, INT_TO_ENUM(PED_COMPONENT,0), 1, 0, 0) //(head)
|
||
SET_PED_COMPONENT_VARIATION(theEscapestruct.piPed, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
|
||
SET_PED_COMPONENT_VARIATION(theEscapestruct.piPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr)
|
||
SET_PED_COMPONENT_VARIATION(theEscapestruct.piPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
||
SET_PED_COMPONENT_VARIATION(theEscapestruct.piPed, INT_TO_ENUM(PED_COMPONENT,11), 0, 1, 0) //(jbib)
|
||
|
||
SET_PED_RELATIONSHIP_GROUP_HASH(theEscapestruct.piPed, theEscapestruct.relEscapee)
|
||
SET_PED_COMBAT_ATTRIBUTES(theEscapestruct.piPed, CA_USE_VEHICLE,TRUE)
|
||
SET_PED_COMBAT_ATTRIBUTES(theEscapestruct.piPed, CA_FLEE_WHILST_IN_VEHICLE,TRUE)
|
||
SET_PED_COMBAT_ATTRIBUTES(theEscapestruct.piPed, CA_ALWAYS_FLEE,TRUE)
|
||
SET_PED_COMBAT_ATTRIBUTES(theEscapestruct.piPed, CA_LEAVE_VEHICLES, FALSE)
|
||
SET_PED_SEEING_RANGE(theEscapestruct.piPed, 300.0)
|
||
SET_PED_HEARING_RANGE(theEscapestruct.piPed, 300.0)
|
||
SET_PED_ID_RANGE(theEscapestruct.piPed, 300.0)
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(theEscapestruct.piPed, TRUE)
|
||
ENDIF
|
||
RETURN TRUE
|
||
ENDFUNC
|
||
|
||
PROC SPAWN_WHORE()
|
||
SEQUENCE_INDEX seq
|
||
piWhore = CREATE_PED(PEDTYPE_MISSION, mWhoreModel, vWhoreSpawn, fWhoreSpawnHeading)
|
||
SET_PED_MAX_HEALTH( piWhore, 5 )
|
||
|
||
SET_PED_COMPONENT_VARIATION(piWhore, PED_COMP_TORSO, 1, 2)
|
||
SET_PED_COMPONENT_VARIATION(piWhore, PED_COMP_LEG, 0, 1)
|
||
SET_PED_COMPONENT_VARIATION(piWhore, PED_COMP_HAIR, 1, 2)
|
||
|
||
SET_PED_CONFIG_FLAG(piWhore, PCF_AllowMedicsToAttend, TRUE)
|
||
|
||
ADD_PED_FOR_DIALOGUE(myTaxiData.tTaxiOJ_Convo,5,piWhore,"TaxiCarrie")
|
||
|
||
IF NOT IS_ENTITY_DEAD(piWhore)
|
||
SET_ENTITY_HEADING(piWhore, fWhoreSpawnHeading)
|
||
CLEAR_SEQUENCE_TASK(seq)
|
||
OPEN_SEQUENCE_TASK(seq)
|
||
TASK_STAND_STILL(NULL, 2500)
|
||
TASK_PLAY_ANIM(NULL, "oddjobs@towingcome_here", "come_here_idle_a", NORMAL_BLEND_IN, WALK_BLEND_OUT, 2000)
|
||
TASK_GO_TO_COORD_ANY_MEANS(NULL, vWhoreGoToPos, PEDMOVE_WALK, NULL)
|
||
CLOSE_SEQUENCE_TASK(seq)
|
||
TASK_PERFORM_SEQUENCE(piWhore, seq)
|
||
CLEAR_SEQUENCE_TASK(seq)
|
||
ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"Spawning Whore")
|
||
|
||
ENDPROC
|
||
|
||
PROC MONITOR_TAXI_ESCAPEE_OK(TaxiStruct &myTaxi, PED_INDEX target, BOOL bCheckJacking = TRUE, BOOL bIsTarget = TRUE)
|
||
IF DOES_ENTITY_EXIST(target)
|
||
IF bCheckJacking
|
||
IF NOT IS_ENTITY_DEAD(target)
|
||
IF IS_PED_BEING_JACKED(target)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"Ped is being jacked")
|
||
IF IS_PED_JACKING(PLAYER_PED_ID())
|
||
IF myTaxiData.bTaxiOJ_Failed = FALSE
|
||
TAXI_SET_FAIL(myTaxiData,"Driver jacked the fiance", TFS_JACKED)
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
|
||
//Check if he's been injured than fail
|
||
IF IS_PED_INJURED(target)
|
||
IF bIsTarget
|
||
IF NOT IS_ENTITY_DEAD(piWhore)
|
||
CLEAR_PED_TASKS(piWhore)
|
||
TASK_SMART_FLEE_PED(piWhore, PLAYER_PED_ID(), 100, 20000)
|
||
SET_PED_KEEP_TASK(piWhore, TRUE)
|
||
ENDIF
|
||
|
||
TAXI_SET_FAIL(myTaxi, "Target injured.", TFS_CHASEE_KILLED)
|
||
ELSE
|
||
IF NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed)
|
||
CLEAR_PED_TASKS(myEscapeeStruct.piPed)
|
||
TASK_SMART_FLEE_PED(myEscapeeStruct.piPed, PLAYER_PED_ID(), 100, 20000)
|
||
SET_PED_KEEP_TASK(myEscapeeStruct.piPed, TRUE)
|
||
ENDIF
|
||
|
||
TAXI_SET_FAIL(myTaxi, "Mistress injured.", TFS_PASSENGER_SHOT)
|
||
ENDIF
|
||
ELSE
|
||
IF HAS_PLAYER_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
||
IF HAS_PED_BEEN_DAMAGED_BY_WEAPON(target, WEAPONTYPE_STUNGUN,GENERALWEAPON_TYPE_INVALID)
|
||
OR HAS_PED_BEEN_DAMAGED_BY_WEAPON(target, WEAPONTYPE_INVALID,GENERALWEAPON_TYPE_ANYWEAPON)
|
||
OR HAS_PED_BEEN_DAMAGED_BY_WEAPON(target, WEAPONTYPE_INVALID,GENERALWEAPON_TYPE_ANYMELEE)
|
||
IF NOT IS_ENTITY_DEAD(piWhore)
|
||
CLEAR_PED_TASKS(piWhore)
|
||
TASK_SMART_FLEE_PED(piWhore, PLAYER_PED_ID(), 100, 20000)
|
||
SET_PED_KEEP_TASK(piWhore, TRUE)
|
||
ENDIF
|
||
IF NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed)
|
||
CLEAR_PED_TASKS(myEscapeeStruct.piPed)
|
||
TASK_SMART_FLEE_PED(myEscapeeStruct.piPed, PLAYER_PED_ID(), 100, 20000)
|
||
SET_PED_KEEP_TASK(myEscapeeStruct.piPed, TRUE)
|
||
ENDIF
|
||
|
||
TAXI_SET_FAIL(myTaxi, "Passenger injured by player with weapon.", TFS_PASSENGER_SHOT)
|
||
ENDIF
|
||
IF NOT bIsTarget
|
||
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
|
||
ENDIF
|
||
//---------------------------------------------------------------------------------
|
||
ENDPROC
|
||
|
||
PROC CHECK_NURSE_OR_HIS_VEHICLE_BEEN_DAMAGED(TaxiStruct &myTaxi, escapeStruct &target)
|
||
|
||
MONITOR_TAXI_ESCAPEE_OK(myTaxi,target.piPed )
|
||
|
||
IF IS_VEHICLE_DRIVEABLE(target.viCar)
|
||
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(target.viCar,PLAYER_PED_ID())
|
||
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
||
TAXI_SET_FAIL(myTaxiData,"Target's vehicle has been damaged by the player", TFS_SPOTTED)
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"can't fail player yet for damaging the target, killing conversation first")
|
||
KILL_ANY_CONVERSATION()
|
||
ENDIF
|
||
ENDIF
|
||
ELSE
|
||
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
||
TAXI_SET_FAIL(myTaxiData,"Target's vehicle isn't driveable", TFS_CHASEE_KILLED)
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"can't fail player yet for killing the target, killing conversation first")
|
||
KILL_ANY_CONVERSATION()
|
||
ENDIF
|
||
ENDIF
|
||
//---------------------------------------------------------------------------------
|
||
ENDPROC
|
||
|
||
|
||
|
||
FUNC VECTOR GET_TAXI_OJ_GYN_WHORE_REVEAL_CS_CAM_POS(INT index)
|
||
VECTOR vCamPos
|
||
|
||
SWITCH index
|
||
CASE 0
|
||
vCamPos = <<-686.0368, -1073.2203, 16.1762>> //<<-697.9617, -1073.7943, 18.1988>>
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
RETURN vCamPos
|
||
ENDFUNC
|
||
|
||
FUNC VECTOR GET_TAXI_OJ_GYN_WHORE_REVEAL_CS_CAM_ROT(INT index)
|
||
VECTOR vCamPos
|
||
|
||
SWITCH index
|
||
CASE 0
|
||
vCamPos = <<1.9027, -0.0000, 170.5764>> //<<-13.7034, -0.0000, -152.3847>>
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
RETURN vCamPos
|
||
|
||
ENDFUNC
|
||
ENUM TX_OJ_CS_02_STATES
|
||
FC_CS_02_INIT = 0,
|
||
FC_CS_02_SHOT_1,
|
||
FS_CS_02_SHOT_2,
|
||
FC_CS_02_SKIP,
|
||
FC_CS_02_END,
|
||
FC_CS_02_CLEANUP
|
||
ENDENUM
|
||
TX_OJ_CS_02_STATES thisCS_02_States = FC_CS_02_INIT
|
||
|
||
FUNC BOOL TAXI_OJ_CS_WHORE_REVEAL()
|
||
|
||
STOP_PHONE_AND_APPS_FOR_TAXI_CUTSCENE()
|
||
|
||
//SKIP CHECK
|
||
IF thisCS_02_States < FC_CS_02_SKIP AND thisCS_02_States > FC_CS_02_INIT
|
||
IF HANDLE_SKIP_CUTSCENE(iAllowSkipCutsceneTimeLocal)
|
||
thisCS_02_States = FC_CS_02_SKIP
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"CUTSCENE FC_CS_02_SKIP")
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF DOES_ENTITY_EXIST(piWhore)
|
||
IF NOT IS_PED_INJURED(piWhore)
|
||
VECTOR vPos
|
||
vPos = GET_ENTITY_COORDS(piWhore)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"vPos = ", vPos)
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"whore is dead")
|
||
ENDIF
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"whore does not exist")
|
||
ENDIF
|
||
|
||
SWITCH thisCS_02_States
|
||
CASE FC_CS_02_INIT
|
||
IF CAN_PLAYER_START_CUTSCENE(TRUE, TRUE)
|
||
AND NOT myTaxiData.bIsTaxiDebugSkipping
|
||
iAllowSkipCutsceneTimeLocal = GET_GAME_TIMER()
|
||
|
||
//Clear & Close the Dialogue Q
|
||
CLEAR_DIALOGUE_QUEUE(tDialogueLine)
|
||
CLOSE_DIALOGUE_QUEUE(tTaxiOJ_DQ_Data,-1,TRUE)
|
||
|
||
TAXI_PREP_SET_ROADS_IN_AREA_FOR_PICKUP(vTaxiOJ_FC_RoadNodePts_End1,FALSE,TAXI_CONST_FC_ROAD_NODES_RADIUS)
|
||
TAXI_PREP_SET_ROADS_IN_AREA_FOR_PICKUP(vTaxiOJ_FC_RoadNodePts_End2,FALSE,TAXI_CONST_FC_ROAD_NODES_RADIUS)
|
||
|
||
|
||
//Cleanup,Create & init cams and make it look at the first shot
|
||
CREATE_TAXI_OJ_CAM(myTaxiData.camTaxi,<<0,0,0>>, <<0,0,0>>)
|
||
|
||
SPAWN_WHORE()
|
||
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"thisCS_02_States = FC_CS_02_SHOT_1")
|
||
thisCS_02_States = FC_CS_02_SHOT_1
|
||
ELSE
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TX_FC CAN_PLAYER_START_CUTSCENE returns false",myTaxiData.iTaxiOJ_DebugThrottle)
|
||
ENDIF
|
||
|
||
BREAK
|
||
|
||
CASE FC_CS_02_SHOT_1
|
||
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 0.5
|
||
|
||
ODDJOB_ENTER_CUTSCENE()
|
||
|
||
CLEAR_AREA_OF_VEHICLES(vTaxiOJ_FC_RoadNodePts_End1,30.0)
|
||
CLEAR_AREA_OF_VEHICLES(vTaxiOJ_FC_RoadNodePts_End2,30.0)
|
||
CLEAR_AREA_OF_PEDS(vTaxiOJ_FC_RoadNodePts_End1,30.0)
|
||
CLEAR_AREA_OF_PEDS(vTaxiOJ_FC_RoadNodePts_End2,30.0)
|
||
|
||
TOGGLE_ROAD_NODES_IN_AREA_FOR_TAXI_OJ(vTaxiOJ_FC_RoadNodePts_End1)
|
||
TOGGLE_ROAD_NODES_IN_AREA_FOR_TAXI_OJ(vTaxiOJ_FC_RoadNodePts_End2)
|
||
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(vHouseMin, vHouseMax, FALSE)
|
||
|
||
//"He better not be going where I think he is"
|
||
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_SEEN_DESTINATION,TRUE,TRUE)
|
||
|
||
SET_CAM_COORD(myTaxiData.camTaxi, GET_TAXI_OJ_GYN_WHORE_REVEAL_CS_CAM_POS(0))
|
||
SET_CAM_ROT(myTaxiData.camTaxi, GET_TAXI_OJ_GYN_WHORE_REVEAL_CS_CAM_ROT(0))
|
||
SET_CAM_FOV(myTaxiData.camTaxi, 44.5167)
|
||
SHAKE_CAM(myTaxiData.camTaxi, "HAND_SHAKE", 0.1)
|
||
SET_CAM_ACTIVE(myTaxiData.camTaxi,TRUE)
|
||
|
||
RENDER_SCRIPT_CAMS(TRUE,FALSE)
|
||
|
||
// //Port Player
|
||
// IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
|
||
// SET_ENTITY_COORDS(myTaxiData.viTaxi,vTaxiOJ_FC_C02_WarpPt_Player1)
|
||
// SET_ENTITY_HEADING(myTaxiData.viTaxi,fTaxiOJ_FC_C02_Heading_Taxi1)
|
||
// ENDIF
|
||
|
||
//Port Fiance car
|
||
IF IS_VEHICLE_DRIVEABLE(myEscapeeStruct.viCar)
|
||
//IF GET_ENTITY_DISTANCE_FROM_LOCATION(myEscapeeStruct.viCar,vTaxiOJ_FC_CS02_FianceWarpPt1) > 10.0
|
||
SET_ENTITY_COORDS(myEscapeeStruct.viCar,vTaxiOJ_FC_CS02_FianceWarpPt1)
|
||
SET_ENTITY_HEADING(myEscapeeStruct.viCar,fTaxiOJ_FC_C02_Heading_Fiance1 )
|
||
|
||
//Task Fiance Car in Case he's not correctly following his point
|
||
IF WAYPOINT_RECORDING_GET_CLOSEST_WAYPOINT(sNurseCarRecording, vTaxiOJ_FC_CS02_FianceWarpPt1, iOutWayPoint)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"closest waypoint grabbed")
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"closest waypoint NOT grabbed")
|
||
ENDIF
|
||
|
||
IF WAYPOINT_RECORDING_GET_COORD(sNurseCarRecording, iOutWayPoint, vOutWayPointCoord)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"closest coord grabbed")
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"closest coord NOT grabbed")
|
||
ENDIF
|
||
|
||
//Retask him at this point
|
||
IF NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed)
|
||
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(myEscapeeStruct.piPed, myEscapeeStruct.viCar, sNurseCarRecording, tFianceDrivingMode2, iOutWayPoint + 4)
|
||
ENDIF
|
||
//ENDIF
|
||
ENDIF
|
||
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = FS_CS_02_SHOT_2")
|
||
thisCS_02_States = FS_CS_02_SHOT_2
|
||
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE FS_CS_02_SHOT_2
|
||
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 5
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = FC_CS_02_END")
|
||
thisCS_02_States = FC_CS_02_END
|
||
ELIF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 4.7
|
||
IF IS_PLAYER_IN_FIRST_PERSON_CAMERA()
|
||
IF NOT bPulseOut2
|
||
ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE)
|
||
PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET")
|
||
bPulseOut2 = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
CASE FC_CS_02_SKIP
|
||
IF IS_VEHICLE_DRIVEABLE(myEscapeeStruct.viCar)
|
||
SET_ENTITY_COORDS(myEscapeeStruct.viCar,vEnemyDestination)
|
||
SET_ENTITY_HEADING(myEscapeeStruct.viCar,fEnemyDestHeading )
|
||
STOP_PLAYBACK_RECORDED_VEHICLE(myEscapeeStruct.viCar)
|
||
|
||
ENDIF
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
|
||
thisCS_02_States = FC_CS_02_END
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = FC_CS_02_END")
|
||
|
||
BREAK
|
||
CASE FC_CS_02_END
|
||
|
||
IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
|
||
|
||
myTaxiData.bPassengerObjPrinted = FALSE
|
||
|
||
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
||
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
||
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
||
|
||
IF IS_VEHICLE_DRIVEABLE(myEscapeeStruct.viCar)
|
||
|
||
SET_ENTITY_COORDS(myEscapeeStruct.viCar,vEnemyDestination)
|
||
SET_ENTITY_HEADING(myEscapeeStruct.viCar,fEnemyDestHeading )
|
||
STOP_PLAYBACK_RECORDED_VEHICLE(myEscapeeStruct.viCar)
|
||
|
||
IF NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed)
|
||
CLEAR_PED_TASKS_IMMEDIATELY(myEscapeeStruct.piPed)
|
||
SET_ENTITY_COORDS(myEscapeeStruct.piPed, << -691.15710, -1117.73206, 13.52498 >>)//<<-690.617859,-1117.427246,13.524973>>)
|
||
SET_ENTITY_HEADING(myEscapeeStruct.piPed, -49.274364 )
|
||
ENDIF
|
||
ENDIF
|
||
|
||
DESTROY_CAM(myTaxiData.camTaxi)
|
||
DESTROY_CAM(ciTransCam)
|
||
ODDJOB_EXIT_CUTSCENE()
|
||
|
||
RENDER_SCRIPT_CAMS(FALSE,FALSE)
|
||
|
||
WHILE NOT IS_SCREEN_FADED_IN()
|
||
WAIT(0)
|
||
ENDWHILE
|
||
|
||
TAXI_CANCEL_TIMERS(myTaxiData, TT_CUTSCENE)
|
||
thisCS_02_States = FC_CS_02_CLEANUP
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = GYN_CS_CLEANUP")
|
||
|
||
RETURN TRUE
|
||
|
||
ENDIF
|
||
BREAK
|
||
|
||
|
||
ENDSWITCH
|
||
|
||
RETURN FALSE
|
||
ENDFUNC
|
||
// PURPOSE: Call this to get the different camera positions for the csite cutscene
|
||
///
|
||
/// PARAMS:
|
||
/// index -
|
||
/// RETURNS:
|
||
///
|
||
FUNC VECTOR GET_TAXI_OJ_FTC_HOSPITAL_CS_CAM_POS(INT index)
|
||
VECTOR vCamPos
|
||
SWITCH index
|
||
|
||
//Shot of the car & taxi
|
||
CASE 0
|
||
vCamPos = << 495.4, -1416.8, 30.2>> //<< 408.8071, -1426.0117, 30.2467 >>
|
||
BREAK
|
||
|
||
//Shot from side of taxi
|
||
CASE 1
|
||
vCamPos = << 429.6911, -1385.4146, 29.7266 >>
|
||
BREAK
|
||
|
||
//Vista shot of the entire scene
|
||
CASE 2
|
||
vCamPos = <<417.9, -1419.4, 30.6>> //<< 448.2621, -1413.8420, 34.4501 >>
|
||
BREAK
|
||
|
||
//Facing the cab
|
||
CASE 3
|
||
vCamPos = << 426.7540, -1386.5096, 29.6201 >>
|
||
BREAK
|
||
|
||
//Transition cams----------------------------------------------
|
||
CASE 4
|
||
vCamPos = <<493.7, -1416.9, 30.2>> //<< 409.5267, -1426.0370, 30.2467 >>
|
||
BREAK
|
||
|
||
//Vista shot of the entire scene
|
||
CASE 5
|
||
vCamPos = << 450.0146, -1414.5232, 34.4507 >>
|
||
BREAK
|
||
|
||
//Facing the cab
|
||
CASE 6
|
||
vCamPos = << 448.2621, -1413.8420, 34.4501 >>
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
RETURN vCamPos
|
||
ENDFUNC
|
||
/// PURPOSE: Call this to get the different camera directions for the csite custscene
|
||
///
|
||
/// PARAMS:
|
||
/// index -
|
||
/// RETURNS:
|
||
///
|
||
FUNC VECTOR GET_TAXI_OJ_FTC_HOSPITAL_CS_CAM_ROT(INT index)
|
||
VECTOR vCamDir
|
||
SWITCH index
|
||
|
||
//Shot of the car & taxi
|
||
CASE 0
|
||
vCamDir = <<-0.7535, -0.0475, 91.9877>>// << -5.4284, 0.0000, -3.6285 >>
|
||
BREAK
|
||
|
||
//Shot from side of taxi
|
||
CASE 1
|
||
vCamDir = << 4.2328, 0.0000, 165.0072 >>
|
||
BREAK
|
||
|
||
//Vista shot of the entire scene
|
||
CASE 2
|
||
vCamDir = << -0.3221, 0.0000, 68.7635 >>
|
||
BREAK
|
||
|
||
//Facing the cab
|
||
CASE 3
|
||
vCamDir = << -0.3614, 0.0000, -145.1533 >>
|
||
BREAK
|
||
//Transition cams----------------------------------------------
|
||
CASE 4
|
||
vCamDir = << -5.4284, 0.0000, 1.8065 >>
|
||
BREAK
|
||
|
||
//Vista shot of the entire scene
|
||
CASE 5
|
||
vCamDir = << 1.2038, -0.0000, 68.7635 >>
|
||
BREAK
|
||
|
||
//Facing the cab
|
||
CASE 6
|
||
vCamDir = << -2.1877, 0.0000, 71.1648 >>
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
RETURN vCamDir
|
||
ENDFUNC
|
||
|
||
ENUM HOSPITAL_CUTSCENE_STATES
|
||
HOSP_CS_INIT = 0,
|
||
HOSP_CS_CUT_01,
|
||
HOSP_CS_TRIGGER_INTERP_01,
|
||
HOSP_CS_CUT_02,
|
||
HOSP_CS_TRIGGER_INTERP_02,
|
||
HOSP_CS_CUT_03,
|
||
HOSP_CS_CUT_04,
|
||
HOSP_CS_CUT_05,
|
||
HOSP_CS_CUT_06,
|
||
HOSP_CS_CUT_SKIP,
|
||
HOSP_CS_CUT_FADEIN,
|
||
HOSP_CS_CUT_END,
|
||
HOSP_CS_CUT_CLEANUP
|
||
|
||
ENDENUM
|
||
HOSPITAL_CUTSCENE_STATES m_HospCSState = HOSP_CS_INIT
|
||
|
||
PROC CONFIGURE_DRIVE_OFF()
|
||
//SEQUENCE_INDEX tempIndex
|
||
bHusbnadDrvSet = TRUE
|
||
//Task the driver to enter the car, than task them to drive to a point
|
||
IF NOT IS_PED_INJURED(myEscapeeStruct.piPed)
|
||
IF IS_VEHICLE_DRIVEABLE(myEscapeeStruct.viCar)
|
||
IF IS_PED_IN_VEHICLE(myEscapeeStruct.piPed, myEscapeeStruct.viCar)
|
||
|
||
SET_ENTITY_COORDS (myEscapeeStruct.viCar, <<406.612000,-1419.936890,29.003754>>)
|
||
|
||
SET_PED_RELATIONSHIP_GROUP_HASH(myEscapeeStruct.piPed, myEscapeeStruct.relEscapee)
|
||
SET_PED_COMBAT_ATTRIBUTES(myEscapeeStruct.piPed, CA_USE_VEHICLE ,TRUE)
|
||
SET_PED_COMBAT_ATTRIBUTES(myEscapeeStruct.piPed, CA_FLEE_WHILST_IN_VEHICLE, FALSE)
|
||
SET_PED_COMBAT_ATTRIBUTES(myEscapeeStruct.piPed, CA_ALWAYS_FLEE, FALSE)
|
||
SET_PED_COMBAT_ATTRIBUTES(myEscapeeStruct.piPed, CA_LEAVE_VEHICLES, FALSE)
|
||
SET_PED_SEEING_RANGE(myEscapeeStruct.piPed, 500.0)
|
||
SET_PED_HEARING_RANGE(myEscapeeStruct.piPed, 500.0)
|
||
SET_PED_ID_RANGE(myEscapeeStruct.piPed, 500.0)
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(myEscapeeStruct.piPed, TRUE)
|
||
|
||
SET_ENTITY_LOD_DIST( myEscapeeStruct.viCar, 500 )
|
||
SET_ENTITY_LOD_DIST( myEscapeeStruct.piPed, 500 )
|
||
SET_ENTITY_LOAD_COLLISION_FLAG( myEscapeeStruct.viCar, TRUE )
|
||
SET_ENTITY_LOAD_COLLISION_FLAG( myEscapeeStruct.piPed, TRUE )
|
||
|
||
//Blip Chasee once objective has been given
|
||
IF NOT DOES_BLIP_EXIST(myEscapeeStruct.bBlip)
|
||
myEscapeeStruct.bBlip = CREATE_BLIP_FOR_ENTITY(myEscapeeStruct.viCar)
|
||
ENDIF
|
||
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(myEscapeeStruct.piPed, TRUE)
|
||
|
||
START_PLAYBACK_RECORDED_VEHICLE(myEscapeeStruct.viCar,TAXI_CONST_VR_FIANCE_EXIT_HOSPITAL,"txm_fc_h1_")
|
||
SET_PLAYBACK_SPEED(myEscapeeStruct.viCar,0.8)
|
||
|
||
|
||
|
||
iTimeOfEscapeeStart = GET_GAME_TIMER()
|
||
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDPROC
|
||
|
||
PROC TAXI_OJ_FC_SET_TIP_AND_EXCITEMENT_TO_CHECK()
|
||
|
||
//Tip Bits
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_POS_DELIVERY_TIME)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_HIT_PED)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_TOOK_DAMAGE)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_ROLL_CAR)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_LEFT_CAR)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_STOPPED)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_RADIO_STATION_LIKE)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_RADIO_STATION_DISLIKE)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_LOST_POLICE)
|
||
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_FOLLOW_TOO_FAR)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_FOLLOW_JUST_RIGHT)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_FOLLOW_TOO_CLOSE)
|
||
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_FREEBIE)
|
||
|
||
//EXCITEMENT BITS
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_PassengerReactBits, TAXI_DF_HITPED)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_PassengerReactBits, TAXI_DF_TOOKDAMAGE)
|
||
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_PassengerReactBits, TAXI_DF_ROLL)
|
||
|
||
//Turn off aggro bits
|
||
SET_BITMASK_AS_ENUM(aggroArgs.iBitFieldDontCheck, EAggro_Wanted)
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_OJ_DL_SET_TIPS_TO_CHECK set tips to check on")
|
||
|
||
ENDPROC
|
||
|
||
/// PURPOSE: Monitors important peds during the taxi mission. If they are ever harmed/killed set the player to wanted level,
|
||
/// don't let the mission end until the wanted level has been lost.
|
||
///
|
||
/// PARAMS:
|
||
/// theEscapeStruct - our followee data
|
||
/// RETURNS:
|
||
///
|
||
///
|
||
FUNC BOOL IS_TAXI_POLICE_READY(PED_INDEX ped, BLIP_INDEX blip)
|
||
|
||
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) < 1
|
||
IF IS_PED_INJURED(ped)
|
||
|
||
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
||
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(ped,PLAYER_PED_ID())
|
||
SET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX(),1)
|
||
SET_PLAYER_WANTED_LEVEL_NOW(GET_PLAYER_INDEX())
|
||
|
||
IF DOES_BLIP_EXIST(blip)
|
||
REMOVE_BLIP(blip)
|
||
ENDIF
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"IS_TAXI_POLICE_READY - Player is now wanted")
|
||
|
||
RETURN TRUE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
ENDIF
|
||
|
||
RETURN FALSE
|
||
ENDFUNC
|
||
|
||
//Plays the ambush in construction site cutscene
|
||
FUNC BOOL TAXI_OJ_FTC_CUTSCENE_HOSPITAL()
|
||
|
||
STOP_PHONE_AND_APPS_FOR_TAXI_CUTSCENE()
|
||
|
||
IF m_HospCSState < HOSP_CS_CUT_SKIP AND m_HospCSState > HOSP_CS_TRIGGER_INTERP_01 //HOSP_CS_INIT
|
||
IF HANDLE_SKIP_CUTSCENE(iAllowSkipCutsceneTimeLocal)
|
||
m_HospCSState = HOSP_CS_CUT_SKIP
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"HOSP_CS_CUT_SKIP")
|
||
ENDIF
|
||
ENDIF
|
||
//PED_INDEX pedCSDummy
|
||
SWITCH m_HospCSState
|
||
|
||
//Init everying and put everything in it's place
|
||
CASE HOSP_CS_INIT
|
||
|
||
IF CAN_PLAYER_START_CUTSCENE(TRUE, TRUE)
|
||
iAllowSkipCutsceneTimeLocal = GET_GAME_TIMER()
|
||
|
||
ODDJOB_ENTER_CUTSCENE(SPC_LEAVE_CAMERA_CONTROL_ON)
|
||
|
||
//Clear & Close the Dialogue Q
|
||
CLEAR_DIALOGUE_QUEUE(tDialogueLine)
|
||
CLOSE_DIALOGUE_QUEUE(tTaxiOJ_DQ_Data, 2, FALSE)
|
||
|
||
|
||
IF SPAWN_ESCAPEE(myEscapeeStruct, vEnemyPedSpawnPt, fEscapeeHeading )
|
||
|
||
SET_ROADS_IN_AREA(<< 1346.90, -1606.52, 31.16 >>, << 1457.25, -1508.19, 83.05 >>, TRUE)
|
||
|
||
//Cleanup,Create & init cams and make it look at the first shot
|
||
CREATE_TAXI_OJ_CAM(myTaxiData.camTaxi,<<0,0,0>>, <<0,0,0>>)
|
||
|
||
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_FOLLOW,TRUE)
|
||
|
||
m_HospCSState = HOSP_CS_CUT_01
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = HOSP_CS_CUT_01")
|
||
ENDIF
|
||
ELSE
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"CAN_PLAYER_START_CUTSCENE returns false")
|
||
ENDIF
|
||
BREAK
|
||
|
||
//1st shot, looks at nurse, driver
|
||
CASE HOSP_CS_CUT_01
|
||
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 3.0
|
||
//Husband
|
||
IF NOT IS_PED_INJURED( myEscapeeStruct.piPed )
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(myEscapeeStruct.piPed, TRUE)
|
||
|
||
CLEAR_PED_TASKS(myEscapeeStruct.piPed)
|
||
|
||
|
||
IF IS_VEHICLE_DRIVEABLE(myEscapeeStruct.viCar)
|
||
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
OPEN_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_ENTER_VEHICLE( NULL, myEscapeeStruct.viCar, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_WALK )
|
||
TASK_PLAY_ANIM(NULL, "veh@truck@ds@base", "start_engine")
|
||
CLOSE_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myEscapeeStruct.piPed, siEscapeeSequenceID)
|
||
|
||
//SET_VEHICLE_ENGINE_ON( myEscapeeStruct.viCar, FALSE, TRUE )
|
||
SET_VEHICLE_DOORS_LOCKED(myEscapeeStruct.viCar, VEHICLELOCK_UNLOCKED )
|
||
|
||
ENDIF
|
||
ENDIF
|
||
|
||
|
||
//Warp Taxi To Make Sure It's Where It Needs To Be
|
||
SET_PED_COORDS_KEEP_VEHICLE(PLAYER_PED_ID(),myTaxiData.vTaxiOJDropoff)//<< 430.6897, -1389.0588, 28.3235 >>)
|
||
|
||
SET_CAM_COORD(myTaxiData.camTaxi, GET_TAXI_OJ_FTC_HOSPITAL_CS_CAM_POS(0))
|
||
SET_CAM_ROT(myTaxiData.camTaxi, GET_TAXI_OJ_FTC_HOSPITAL_CS_CAM_ROT(0))
|
||
//POINT_CAM_AT_ENTITY(myTaxiData.camTaxi, myEscapeeStruct.viCar, <<0,0,0>>)
|
||
SET_CAM_FOV(myTaxiData.camTaxi, 17.2)
|
||
SHAKE_CAM(myTaxiData.camTaxi, "HAND_SHAKE", 0.1)
|
||
SET_CAM_ACTIVE(myTaxiData.camTaxi,TRUE)
|
||
|
||
RENDER_SCRIPT_CAMS(TRUE,FALSE)
|
||
|
||
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
|
||
m_HospCSState = HOSP_CS_TRIGGER_INTERP_01
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = HOSP_CS_TRIGGER_INTERP_01")
|
||
ENDIF
|
||
BREAK
|
||
CASE HOSP_CS_TRIGGER_INTERP_01
|
||
|
||
//pedCSDummy = CREATE_PED(PEDTYPE_CIVMALE,mCasualty,<< 403.4721, -1404.2327, 28.4902 >>)
|
||
|
||
//IF NOT IS_ENTITY_DEAD(pedCSDummy)
|
||
//TASK_FOLLOW_NAV_MESH_TO_COORD(pedCSDummy,<< 426.5035, -1422.9502, 28.2920 >>,PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT)
|
||
//ENDIF
|
||
|
||
//Make it and turn it on
|
||
ciTransCam = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<0,0,0>>, <<0,0,0>>)
|
||
|
||
SET_CAM_COORD(ciTransCam, GET_TAXI_OJ_FTC_HOSPITAL_CS_CAM_POS(4))
|
||
SET_CAM_ROT(ciTransCam, GET_TAXI_OJ_FTC_HOSPITAL_CS_CAM_ROT(0))
|
||
//POINT_CAM_AT_ENTITY(ciTransCam, myEscapeeStruct.viCar, <<0,0,0>>)
|
||
SET_CAM_FOV(ciTransCam, 17.2)
|
||
SHAKE_CAM(ciTransCam, "HAND_SHAKE", 0.1)
|
||
SET_CAM_ACTIVE_WITH_INTERP(ciTransCam, myTaxiData.camTaxi , 6000)
|
||
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
|
||
m_HospCSState = HOSP_CS_CUT_02
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = HOSP_CS_CUT_02")
|
||
BREAK
|
||
|
||
CASE HOSP_CS_CUT_02
|
||
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 7.85
|
||
AND NOT bStartCar
|
||
//Setup Dropoff Blip at the right time which is when the god text plays
|
||
IF GET_TAXI_SPEECH_INDEX(myTaxiData) > TAXI_OBJ_GIVE_MAIN
|
||
CONFIGURE_DRIVE_OFF()
|
||
ELSE
|
||
//SET_VEHICLE_ENGINE_ON( myEscapeeStruct.viCar, FALSE, TRUE )
|
||
ENDIF
|
||
|
||
bStartCar = TRUE
|
||
ENDIF
|
||
|
||
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 8.0
|
||
AND bStartCar
|
||
|
||
SET_CAM_COORD(myTaxiData.camTaxi, GET_TAXI_OJ_FTC_HOSPITAL_CS_CAM_POS(2))
|
||
//SET_CAM_ROT(myTaxiData.camTaxi, GET_TAXI_OJ_FTC_HOSPITAL_CS_CAM_ROT(2))
|
||
POINT_CAM_AT_ENTITY(myTaxiData.camTaxi, myEscapeeStruct.viCar, <<0,0,0>>)
|
||
SET_CAM_FOV(myTaxiData.camTaxi, 35.0)
|
||
SHAKE_CAM(myTaxiData.camTaxi, "HAND_SHAKE", 0.2)
|
||
SET_CAM_ACTIVE(myTaxiData.camTaxi,TRUE)
|
||
|
||
RENDER_SCRIPT_CAMS(TRUE,FALSE)
|
||
|
||
|
||
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
|
||
m_HospCSState = HOSP_CS_TRIGGER_INTERP_02
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = HOSP_CS_TRIGGER_INTERP_02")
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE HOSP_CS_TRIGGER_INTERP_02
|
||
//IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 0.25
|
||
SET_CAM_COORD(ciTransCam,GET_TAXI_OJ_FTC_HOSPITAL_CS_CAM_POS(2))
|
||
//SET_CAM_ROT(ciTransCam,GET_TAXI_OJ_FTC_HOSPITAL_CS_CAM_ROT(5))
|
||
POINT_CAM_AT_ENTITY(ciTransCam, myEscapeeStruct.viCar, <<0,0,0>>)
|
||
SET_CAM_FOV(ciTransCam, 45.0)
|
||
SHAKE_CAM(ciTransCam, "HAND_SHAKE", 0.2)
|
||
SET_CAM_ACTIVE_WITH_INTERP(ciTransCam, myTaxiData.camTaxi, 10000)
|
||
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
|
||
m_HospCSState = HOSP_CS_CUT_END
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = HOSP_CS_CUT_END")
|
||
//ENDIF
|
||
BREAK
|
||
|
||
CASE HOSP_CS_CUT_SKIP
|
||
|
||
IF NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed) AND NOT IS_ENTITY_DEAD(myEscapeeStruct.viCar)
|
||
|
||
IF NOT IS_PED_IN_ANY_VEHICLE(myEscapeeStruct.piPed)
|
||
SET_PED_INTO_VEHICLE(myEscapeeStruct.piPed, myEscapeeStruct.viCar)
|
||
ENDIF
|
||
|
||
SET_VEHICLE_FORWARD_SPEED(myEscapeeStruct.viCar, 10)
|
||
|
||
RESTART_TIMER_NOW(myEscapeeStruct.closeTimer)
|
||
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE,2.0)
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"HOSP_CS_CUT_END")
|
||
m_HospCSState = HOSP_CS_CUT_END
|
||
|
||
IF NOT bHusbnadDrvSet
|
||
CONFIGURE_DRIVE_OFF()
|
||
ENDIF
|
||
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE HOSP_CS_CUT_END
|
||
|
||
IF (GET_GAME_TIMER() % 1000) < 50
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"Opening gate")
|
||
ENDIF
|
||
|
||
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<413.80, -1416.19, 29.26>>, 5.0, PROP_SEC_BARRIER_LD_02A)
|
||
SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(PROP_SEC_BARRIER_LD_02A, <<413.80, -1416.19, 29.26>>, FALSE, 0.85)
|
||
ENDIF
|
||
|
||
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 4.0
|
||
|
||
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
||
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
||
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
||
|
||
//Give player obj
|
||
//SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_OBJ_FTC2,TRUE)
|
||
|
||
RESTART_TIMER_NOW(myEscapeeStruct.closeTimer)
|
||
|
||
DESTROY_CAM(myTaxiData.camTaxi)
|
||
DESTROY_CAM(ciTransCam)
|
||
ODDJOB_EXIT_CUTSCENE()
|
||
|
||
RENDER_SCRIPT_CAMS(FALSE,FALSE)
|
||
|
||
TAXI_CANCEL_TIMERS(myTaxiData, TT_CUTSCENE)
|
||
m_HospCSState = HOSP_CS_CUT_CLEANUP
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = HOSP_CS_CUT_CLEANUP")
|
||
|
||
ELIF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 3.7
|
||
IF IS_PLAYER_IN_FIRST_PERSON_CAMERA()
|
||
IF NOT bPulseOut1
|
||
ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE)
|
||
PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET")
|
||
bPulseOut1 = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE HOSP_CS_CUT_CLEANUP
|
||
RETURN TRUE
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
RETURN FALSE
|
||
ENDFUNC
|
||
|
||
PROC LOAD_PATH_NODES_FOR_NURSE_CAR_THIS_FRAME()
|
||
|
||
VECTOR vStartNode, vEndNode
|
||
|
||
vStartNode = << 402.42, -1457.19, 28.82 >> // coord provided by assert in 1300405
|
||
vEndNode = << -701.25, -1080.29, 12.29 >> // coord provided by assert in 1300405
|
||
|
||
// Set the area's X values
|
||
IF vEndNode.X <= vStartNode.X
|
||
vPathNodeMin.X = vEndNode.X
|
||
vPathNodeMax.X = vStartNode.X
|
||
ELSE
|
||
vPathNodeMin.X = vStartNode.X
|
||
vPathNodeMax.X = vEndNode.X
|
||
ENDIF
|
||
|
||
// Set the area's X values
|
||
IF vEndNode.Y <= vStartNode.Y
|
||
vPathNodeMin.Y = vEndNode.Y
|
||
vPathNodeMax.Y = vStartNode.Y
|
||
ELSE
|
||
vPathNodeMin.Y = vStartNode.Y
|
||
vPathNodeMax.Y = vEndNode.Y
|
||
ENDIF
|
||
|
||
// Extra leeway around the positions
|
||
vPathNodeMin -= << 20, 20, 20 >>
|
||
vPathNodeMax += << 20, 20, 20 >>
|
||
|
||
//CDEBUG1LN(DEBUG_OJ_TAXI, " LOAD_PATH_NODES_IN_AREA - requested for - vMin : ", vPathNodeMin, " vMax : ", vPathNodeMax)
|
||
|
||
REQUEST_PATH_NODES_IN_AREA_THIS_FRAME(vPathNodeMin.x, vPathNodeMin.y, vPathNodeMax.x, vPathNodeMax.y)
|
||
|
||
ENDPROC
|
||
|
||
/*
|
||
ooooooooo ooooo o ooooo ooooooo ooooooo8
|
||
888 88o 888 888 888 o888 888o o888 88
|
||
888 888 888 8 88 888 888 888 888 oooo
|
||
888 888 888 8oooo88 888 o 888o o888 888o 88
|
||
o888ooo88 o888o o88o o888o o888ooooo88 88ooo88 888ooo888
|
||
*/
|
||
PROC TRIGGER_TAXI_QUEUE_FC_LINES()
|
||
|
||
SET_TAXI_OJ_INTERRUPT_TIMER_OFF(myTaxiData)
|
||
|
||
//Trigger lines
|
||
IF IS_BANTER_SAFE_TO_PLAY(myTaxiData,tTaxiOJ_DQ_Data)
|
||
|
||
SWITCH tTaxiOJ_DQ_Data.iCurrentDQLine
|
||
|
||
//Make sure if player interrupts the initial line, that the objective prints anyway.
|
||
CASE 0
|
||
IF myTaxiData.tTaxiOJ_RideState = TRS_WAIT_1ST_STOP
|
||
|
||
IF NOT IS_TAXI_OJ_INTERRUPTION_LINE_PLAYING(myTaxiData)
|
||
|
||
IF SAFE_IS_THIS_PRINT_BEING_DISPLAYED("TAXI_OBJ_FTC1")
|
||
OR DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"--------------------------[Taxi Oddjob Objective] GO TO Hospital has been assigned. Dialogue Q = ",tTaxiOJ_DQ_Data.iCurrentDQLine )
|
||
tTaxiOJ_DQ_Data.iCurrentDQLine++
|
||
|
||
ELSE
|
||
IF GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_OBJ_GIVE_MAIN
|
||
|
||
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_OBJ_GIVE_MAIN,TRUE,FALSE,TRUE)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"--------------------------[Taxi Oddjob Objective] GO TO Hospital has been REassigned")
|
||
|
||
ENDIF
|
||
ENDIF
|
||
|
||
ENDIF
|
||
|
||
ENDIF
|
||
BREAK
|
||
|
||
//Trigger Line #1 -------------------------------------------------
|
||
|
||
CASE 1
|
||
IF GET_TAXI_SPEECH_INDEX(myTaxiData) > TAXI_OBJ_GIVE_MAIN
|
||
AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_BANTER
|
||
AND NOT IS_TAXI_OJ_INTERRUPTION_LINE_PLAYING(myTaxiData)
|
||
|
||
|
||
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BANTER,TRUE)
|
||
|
||
//Start the mission timer here
|
||
TAXI_START_TIMER(myTaxiData, TT_RIDETODEST)
|
||
ENDIF
|
||
BREAK
|
||
|
||
//Trigger Line #2--------------------------------------------------
|
||
|
||
// CASE 2
|
||
// IF myTaxiData.tTaxiOJ_RideState = TRS_CHASE_DRIVER
|
||
// IF GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_FOLLOW_CAR_BARKS
|
||
// AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_BANTER_2
|
||
// AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
||
// SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BANTER_2,TRUE)
|
||
// IF g_bDebug
|
||
// SCRIPT_ASSERT("Triggering Banter 2")
|
||
// ENDIF
|
||
//
|
||
// ENDIF
|
||
// ENDIF
|
||
// BREAK
|
||
//
|
||
// CASE 3
|
||
// IF GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_FOLLOW_CAR_BARKS
|
||
// AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_BANTER_3
|
||
// AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
||
// IF IS_VEHICLE_DRIVEABLE(myEscapeeStruct.viCar)
|
||
// //IF GET_ENTITY_DISTANCE_FROM_LOCATION(myEscapeeStruct.viCar, << 173.3356, -1018.9367, 28.3714 >>) < 10
|
||
// IF GET_ENTITY_DISTANCE_FROM_LOCATION(myEscapeeStruct.viCar, <<-97.918594,-1287.412354,28.338017>>) < 10
|
||
// OR GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > 20.0 //40.0
|
||
//
|
||
// SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BANTER_3,TRUE)
|
||
// IF g_bDebug
|
||
// SCRIPT_ASSERT("Triggering Banter 3")
|
||
// ENDIF
|
||
// ENDIF
|
||
// ENDIF
|
||
// ENDIF
|
||
// BREAK
|
||
//
|
||
// CASE 4
|
||
// IF GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_FOLLOW_CAR_BARKS
|
||
// AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_BANTER_5 // switching the banters up since the route is shorter
|
||
// AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
||
// IF IS_VEHICLE_DRIVEABLE(myEscapeeStruct.viCar)
|
||
// IF GET_ENTITY_DISTANCE_FROM_LOCATION(myEscapeeStruct.viCar, <<-466.446320,-1093.321655,26.419662>>) < 10
|
||
// OR GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > 20.0 //35.0
|
||
// SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BANTER_5,TRUE)
|
||
// CDEBUG1LN(DEBUG_OJ_TAXI,"Queue Open for Follow Car Banter # 5")
|
||
//
|
||
// IF g_bDebug
|
||
// SCRIPT_ASSERT("Triggering Banter 5")
|
||
// ENDIF
|
||
// ENDIF
|
||
// ENDIF
|
||
// ENDIF
|
||
// BREAK
|
||
//
|
||
// CASE 5
|
||
// IF GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_FOLLOW_CAR_BARKS
|
||
// AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_BANTER_4
|
||
// IF IS_VEHICLE_DRIVEABLE(myEscapeeStruct.viCar)
|
||
// IF GET_ENTITY_DISTANCE_FROM_LOCATION(myEscapeeStruct.viCar, << -628.6014, -459.8645, 33.7821 >>) < 10
|
||
//
|
||
// SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BANTER_4,TRUE)
|
||
// CDEBUG1LN(DEBUG_OJ_TAXI,"Queue Open for Follow Car Banter # 4")
|
||
//
|
||
// IF g_bDebug
|
||
// SCRIPT_ASSERT("Triggering Banter 4")
|
||
// ENDIF
|
||
// ENDIF
|
||
// ENDIF
|
||
// ENDIF
|
||
// BREAK
|
||
//
|
||
// CASE 6
|
||
// IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > GET_RANDOM_FLOAT_IN_RANGE(4.0,10.0)
|
||
// //Set Radio Station Check
|
||
// IF NOT GET_TAXI_RADIO_CHECK_FLAG(myTaxiData)
|
||
// TAXI_RADIO_STATION_TURN_ON(myTaxiData)
|
||
// IF g_bDebug
|
||
// SCRIPT_ASSERT("The Taxi Radio Should Be Updating")
|
||
// ENDIF
|
||
// ENDIF
|
||
// ENDIF
|
||
// BREAK
|
||
ENDSWITCH
|
||
ENDIF
|
||
|
||
PROCESS_IMPORTANT_DIALOGUE_Q(myTaxiData,tDialogueLine, tTaxiOJ_DQ_Data, g_bDebug)
|
||
|
||
ENDPROC
|
||
|
||
|
||
/*
|
||
oooooooo8 ooooo ooooo ooooooo oooo oooo ooooooooo ooooooo oooo oooo oooo oooo
|
||
888 888 888 o888 888o 88 88 88 888 88o o888 888o 88 88 88 8888o 88
|
||
888oooooo 888ooo888 888 888 88 888 88 888 888 888 888 88 888 88 88 888o88
|
||
888 888 888 888o o888 888 888 888 888 888o o888 888 888 88 8888
|
||
o88oooo888 o888o o888o 88ooo88 8 8 o888ooo88 88ooo88 8 8 o88o 88
|
||
*/
|
||
|
||
PROC UPDATE_FINAL_SCENE()
|
||
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("UPDATE_FINAL_SCENE()", iDebugThrottle)
|
||
|
||
IF myTaxiData.tTaxiOJ_RideState >= TRS_SPECIAL_ENDING
|
||
AND NOT bTaxiOJ_GYN_IsFianceDead
|
||
AND ( HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(myTaxiData.piTaxiPassenger, PLAYER_PED_ID())
|
||
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piWhore, PLAYER_PED_ID())
|
||
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(myEscapeeStruct.piPed, PLAYER_PED_ID()))
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"UPDATE_FINAL_SCENE: PLAYER HAS DISRUPTED THE SCENE BY DAMAGING ONE OF THE PEDS")
|
||
|
||
bTaxiOJ_GYN_IsFianceDead = TRUE
|
||
ELIF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
|
||
|
||
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(myEscapeeStruct.piPed, myTaxiData.piTaxiPassenger)
|
||
AND finalState < FINAL_SCENE_KILL_MAN
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"UPDATE_FINAL_SCENE: Passenger killed fiance")
|
||
|
||
bTaxiOJ_GYN_IsFianceDead = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF finalState >= FINAL_SCENE_KILL_WOMAN
|
||
#IF IS_DEBUG_BUILD
|
||
sDebugPlayerDistance = "Distance = "
|
||
sDebugPlayerDistance += TAXI_UTILS_GET_STRING_FROM_FLOAT_SP(GET_PLAYER_DISTANCE_FROM_ENTITY(myTaxiData.piTaxiPassenger))
|
||
DRAW_DEBUG_TEXT_2D(sDebugPlayerDistance, <<0.75, 0.75, 0.0>>)
|
||
#ENDIF
|
||
|
||
IF GET_PLAYER_DISTANCE_FROM_ENTITY(myTaxiData.piTaxiPassenger) < 3.0 //5.0
|
||
AND NOT bTaxiOJ_GYN_IsPlayerTooClose
|
||
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"PLAYER HAS DISRUPTED THE SCENE BY GETTING TOO CLOSE TO THE PASSENGER")
|
||
//SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_AGGRO,TRUE)
|
||
|
||
// setting this here since this would be the last line anyway
|
||
CREATE_CONVERSATION(myTaxiData.tTaxiOJ_Convo, myTaxiData.sTaxiOJ_DXSubtitleGroupID, "txm4_aggro", CONV_PRIORITY_HIGH)
|
||
|
||
TASK_AIM_GUN_AT_ENTITY(myTaxiData.piTaxiPassenger, PLAYER_PED_ID(), -1 )
|
||
|
||
iFinalFailDelay = GET_GAME_TIMER()
|
||
|
||
bTaxiOJ_GYN_IsPlayerTooClose = TRUE
|
||
ELSE
|
||
IF NOT bKillFinalConversation
|
||
KILL_ANY_CONVERSATION()
|
||
bKillFinalConversation = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
SWITCH finalState
|
||
CASE FINAL_SCENE_ARRIVE
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"UPDATE_FINAL_SCENE - FINAL_SCENE_ARRIVES")
|
||
IF NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed)
|
||
AND NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
|
||
AND NOT IS_ENTITY_DEAD(piWhore)
|
||
ADD_RELATIONSHIP_GROUP("TAXI_Whore", rghWhore)
|
||
rghPassenger = GET_PED_RELATIONSHIP_GROUP_HASH( myTaxiData.piTaxiPassenger )
|
||
|
||
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_NONE, myEscapeeStruct.relEscapee, rghWhore )
|
||
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_NONE, myEscapeeStruct.relEscapee, rghPassenger )
|
||
|
||
SET_PED_RELATIONSHIP_GROUP_HASH(myEscapeeStruct.piPed, myEscapeeStruct.relEscapee)
|
||
SET_PED_RELATIONSHIP_GROUP_HASH(piWhore, rghWhore)
|
||
|
||
//Husband
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(myEscapeeStruct.piPed, TRUE)
|
||
SET_PED_COMBAT_ATTRIBUTES(myEscapeeStruct.piPed, CA_ALWAYS_FLEE, TRUE)
|
||
SET_ENTITY_HEALTH(myEscapeeStruct.piPed, 130)
|
||
SET_PED_SUFFERS_CRITICAL_HITS( myEscapeeStruct.piPed, TRUE)
|
||
SET_PED_DIES_WHEN_INJURED( myEscapeeStruct.piPed, TRUE)
|
||
CLEAR_PED_TASKS(myEscapeeStruct.piPed)
|
||
|
||
//Whore
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(piWhore, TRUE)
|
||
SET_PED_COMBAT_ATTRIBUTES(piWhore, CA_ALWAYS_FLEE, TRUE)
|
||
SET_ENTITY_HEALTH(piWhore, 130)
|
||
SET_PED_SUFFERS_CRITICAL_HITS( piWhore, TRUE)
|
||
SET_PED_DIES_WHEN_INJURED( piWhore, TRUE)
|
||
CLEAR_PED_TASKS(piWhore)
|
||
|
||
finalState = FINAL_SCENE_TAKE_PLACES
|
||
ENDIF
|
||
|
||
BREAK
|
||
|
||
CASE FINAL_SCENE_TAKE_PLACES
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"UPDATE_FINAL_SCENE - FINAL_SCENE_TAKE_PLACES")
|
||
IF NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed) AND NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
|
||
AND NOT IS_ENTITY_DEAD(piWhore) AND NOT IS_ENTITY_DEAD(myEscapeeStruct.viCar)
|
||
|
||
//Husband
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
OPEN_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
//TASK_LEAVE_VEHICLE(NULL,myEscapeeStruct.viCar)
|
||
//TASK_GO_STRAIGHT_TO_COORD(NULL, << -878.8551, -14.6230, 41.6086 >>, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP)
|
||
//TASK_GO_TO_ENTITY(NULL, piWhore, DEFAULT_TIME_BEFORE_WARP, 1.0, PEDMOVEBLENDRATIO_WALK)
|
||
TASK_TURN_PED_TO_FACE_ENTITY(NULL, piWhore)
|
||
//TASK_CHAT_TO_PED(NULL, piWhore, CF_AUTO_CHAT, << -880.3378, -14.1614, 41.7429 >>, 87.8475, -1)
|
||
TASK_PLAY_ANIM(NULL, sNurseChatAnim, "idle_b")//, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING)
|
||
TASK_PLAY_ANIM(NULL, sNurseChatExit, "exit")
|
||
CLOSE_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myEscapeeStruct.piPed, siEscapeeSequenceID)
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
|
||
//Whore
|
||
CLEAR_SEQUENCE_TASK(siWhoreSequenceID)
|
||
OPEN_SEQUENCE_TASK(siWhoreSequenceID)
|
||
//TASK_GO_STRAIGHT_TO_COORD(NULL, << -879.7616, -13.6659, 41.7242 >>, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP, 271.4075 )
|
||
//TASK_GO_TO_ENTITY(NULL, myEscapeeStruct.piPed, DEFAULT_TIME_BEFORE_WARP, 1.0, PEDMOVEBLENDRATIO_WALK)
|
||
TASK_TURN_PED_TO_FACE_ENTITY(NULL, myEscapeeStruct.piPed)
|
||
//TASK_CHAT_TO_PED(NULL, myEscapeeStruct.piPed, CF_AUTO_CHAT, << -880.9371, -13.3114, 41.7583 >>, 267.8475, -1)
|
||
TASK_PLAY_ANIM(NULL, sMistressChatAnim, "idle_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING)
|
||
//TASK_STAND_STILL(NULL, -1)
|
||
CLOSE_SEQUENCE_TASK(siWhoreSequenceID)
|
||
TASK_PERFORM_SEQUENCE(piWhore, siWhoreSequenceID)
|
||
CLEAR_SEQUENCE_TASK(siWhoreSequenceID)
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"UPDATE_FINAL_SCENE - Moving to FINAL_SCENE_PASSENGER_POUNCE")
|
||
finalState = FINAL_SCENE_PASSENGER_POUNCE
|
||
ENDIF
|
||
BREAK
|
||
|
||
|
||
//Hang out here til the player arrives at the destination
|
||
CASE FINAL_SCENE_PASSENGER_POUNCE
|
||
IF bTaxiOJ_GYN_IsPassengerAtConfrontationPt
|
||
//Passenger
|
||
IF NOT IS_ENTITY_DEAD(piWhore) AND NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
|
||
// AND ((GET_SCRIPT_TASK_STATUS(myEscapeeStruct.piPed, SCRIPT_TASK_PERFORM_SEQUENCE) = PERFORMING_TASK AND GET_SEQUENCE_PROGRESS(myEscapeeStruct.piPed) > 1)
|
||
// OR GET_SCRIPT_TASK_STATUS(myEscapeeStruct.piPed, SCRIPT_TASK_PERFORM_SEQUENCE) = FINISHED_TASK)
|
||
|
||
SET_PED_RELATIONSHIP_GROUP_HASH(myTaxiData.piTaxiPassenger, rghPassenger)
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(myTaxiData.piTaxiPassenger, TRUE)
|
||
SET_PED_COMBAT_ATTRIBUTES(myTaxiData.piTaxiPassenger, CA_AGGRESSIVE, TRUE)
|
||
SET_PED_SHOOT_RATE( myTaxiData.piTaxiPassenger, 100 )
|
||
SET_PED_ACCURACY(myTaxiData.piTaxiPassenger, 100 )
|
||
SET_ENTITY_HEALTH(myTaxiData.piTaxiPassenger, 105)
|
||
CLEAR_PED_TASKS(myTaxiData.piTaxiPassenger)
|
||
|
||
|
||
CLEAR_SEQUENCE_TASK(siPassengerSequenceID)
|
||
OPEN_SEQUENCE_TASK(siPassengerSequenceID)
|
||
TASK_STAND_STILL(NULL, 5000)
|
||
LEAVE_TAXI_OJ_FROM_CLOSEST_DOOR_TO_POINT_AS_SEQUENCE(myTaxiData,<<-691.48, -1113.31, 13.53>>)//<< -874.0767, -4.8782, 42.0797 >>)
|
||
//TASK_GO_STRAIGHT_TO_COORD(NULL, GET_PASSENGER_WALK_TO_POINT(eFCDropZone), PEDMOVEBLENDRATIO_SPRINT)
|
||
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_PASSENGER_WALK_TO_POINT(eFCDropZone), PEDMOVEBLENDRATIO_SPRINT)
|
||
TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, GET_PASSENGER_WALK_TO_POINT(eFCDropZone), piWhore, PEDMOVEBLENDRATIO_SPRINT, TRUE)
|
||
TASK_SHOOT_AT_ENTITY(NULL, piWhore, -1, FIRING_TYPE_CONTINUOUS )
|
||
//TASK_AIM_GUN_AT_ENTITY(NULL,piWhore,-1)
|
||
CLOSE_SEQUENCE_TASK(siPassengerSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, siPassengerSequenceID)
|
||
CLEAR_SEQUENCE_TASK(siPassengerSequenceID)
|
||
|
||
// IF NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed)
|
||
// TASK_PLAY_ANIM(myEscapeeStruct.piPed, sNurseChatExit, "exit")
|
||
// ENDIF
|
||
|
||
bPlayerDisabled = TRUE
|
||
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON)
|
||
|
||
GIVE_WEAPON_TO_PED(myTaxiData.piTaxiPassenger, WEAPONTYPE_PISTOL, 100, TRUE, TRUE)
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"UPDATE_FINAL_SCENE - Moving to FINAL_SCENE_WAIT_FOR_DIALOGUE")
|
||
finalState = FINAL_SCENE_WAIT_FOR_DIALOGUE
|
||
ENDIF
|
||
ELSE
|
||
IF NOT bCheckPlayerEndInterruption
|
||
IF NOT IS_PED_INJURED(myEscapeeStruct.piPed)
|
||
AND NOT IS_PED_INJURED(piWhore)
|
||
IF GET_PLAYER_DISTANCE_FROM_ENTITY(myEscapeeStruct.piPed) < 2.0
|
||
OR GET_PLAYER_DISTANCE_FROM_ENTITY(piWhore) < 2.0
|
||
CLEAR_PED_TASKS(myEscapeeStruct.piPed)
|
||
CLEAR_PED_TASKS(piWhore)
|
||
|
||
TASK_LOOK_AT_ENTITY(myEscapeeStruct.piPed, PLAYER_PED_ID(), INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
|
||
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
OPEN_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID())
|
||
CLOSE_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myEscapeeStruct.piPed, siEscapeeSequenceID)
|
||
|
||
TASK_LOOK_AT_ENTITY(piWhore, PLAYER_PED_ID(), INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
|
||
|
||
CLEAR_SEQUENCE_TASK(siWhoreSequenceID)
|
||
OPEN_SEQUENCE_TASK(siWhoreSequenceID)
|
||
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID())
|
||
CLOSE_SEQUENCE_TASK(siWhoreSequenceID)
|
||
TASK_PERFORM_SEQUENCE(piWhore, siWhoreSequenceID)
|
||
|
||
bCheckPlayerEndInterruption = TRUE
|
||
ENDIF
|
||
ELSE
|
||
IF IS_PED_INJURED(myEscapeeStruct.piPed)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"UPDATE_FINAL_SCENE - nurse was injured")
|
||
ELSE
|
||
CLEAR_PED_TASKS(myEscapeeStruct.piPed)
|
||
TASK_SMART_FLEE_PED(myEscapeeStruct.piPed, PLAYER_PED_ID(), 100, 20000)
|
||
ENDIF
|
||
|
||
IF IS_PED_INJURED(piWhore)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"UPDATE_FINAL_SCENE - mistress was injured")
|
||
ELSE
|
||
CLEAR_PED_TASKS(piWhore)
|
||
TASK_SMART_FLEE_PED(piWhore, PLAYER_PED_ID(), 100, 20000)
|
||
ENDIF
|
||
|
||
// Fail here is taken care of by MONITOR_TAXI_ESCAPEE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
BREAK
|
||
|
||
|
||
CASE FINAL_SCENE_WAIT_FOR_DIALOGUE
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("UPDATE_FINAL_SCENE - FINAL_SCENE_WAIT_FOR_DIALOGUE", iDebugThrottle)
|
||
|
||
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
|
||
IF GET_SCRIPT_TASK_STATUS(myTaxiData.piTaxiPassenger, SCRIPT_TASK_PERFORM_SEQUENCE) = PERFORMING_TASK
|
||
IF GET_SEQUENCE_PROGRESS(myTaxiData.piTaxiPassenger) > 0
|
||
AND bPlayerDisabled
|
||
|
||
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
||
bPlayerDisabled = FALSE
|
||
ENDIF
|
||
ENDIF
|
||
ELSE
|
||
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
||
ENDIF
|
||
|
||
// IF (NOT IS_PED_INJURED(piWhore) AND HAS_ENTITY_BEEN_DAMAGED_BY_ANY_PED(piWhore))
|
||
// AND iShootStartTime = 0
|
||
// iShootStartTime = GET_GAME_TIMER()
|
||
// ENDIF
|
||
|
||
//IF (iShootStartTime > 0 AND (GET_GAME_TIMER() - iShootStartTime) > 1000)
|
||
IF (NOT IS_PED_INJURED(piWhore) AND HAS_ENTITY_BEEN_DAMAGED_BY_ANY_PED(piWhore))
|
||
AND NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed)
|
||
AND NOT bFianceReacted
|
||
//Task fiance to face
|
||
TASK_LOOK_AT_ENTITY(myEscapeeStruct.piPed, myTaxiData.piTaxiPassenger, INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
|
||
|
||
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
OPEN_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
//TASK_PLAY_ANIM(NULL, sNurseChatExit, "exit")
|
||
TASK_STAND_STILL(NULL, 500)
|
||
TASK_PLAY_ANIM(NULL, "MOVE_DUCK_FOR_COVER", "enter")
|
||
TASK_PLAY_ANIM(NULL, "MOVE_DUCK_FOR_COVER", "loop", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING)
|
||
TASK_TURN_PED_TO_FACE_ENTITY(NULL, myTaxiData.piTaxiPassenger)
|
||
CLOSE_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myEscapeeStruct.piPed, siEscapeeSequenceID)
|
||
|
||
bFianceReacted = TRUE
|
||
ENDIF
|
||
|
||
IF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
|
||
AND NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed)
|
||
IF GET_SEQUENCE_PROGRESS(myTaxiData.piTaxiPassenger) > 2
|
||
//AND NOT IS_ENTITY_DEAD(piWhore)
|
||
|
||
//Task whore to face
|
||
// CLEAR_SEQUENCE_TASK(siWhoreSequenceID)
|
||
// OPEN_SEQUENCE_TASK(siWhoreSequenceID)
|
||
// TASK_PLAY_ANIM(NULL, sMistressChatExit, "exit")
|
||
// TASK_TURN_PED_TO_FACE_ENTITY(NULL, myTaxiData.piTaxiPassenger)
|
||
// CLOSE_SEQUENCE_TASK(siWhoreSequenceID)
|
||
// TASK_PERFORM_SEQUENCE(piWhore, siWhoreSequenceID)
|
||
|
||
//play fuck you dialouge
|
||
SET_NEXT_TAXI_SPEECH(myTaxiData, TAXI_DI_ENEMY_KILL,TRUE)
|
||
|
||
//Task passenger
|
||
CLEAR_SEQUENCE_TASK(siPassengerSequenceID)
|
||
OPEN_SEQUENCE_TASK(siPassengerSequenceID)
|
||
TASK_CLEAR_LOOK_AT(NULL)
|
||
TASK_AIM_GUN_AT_ENTITY(NULL,myEscapeeStruct.piPed,2000)
|
||
//TASK_SHOOT_AT_ENTITY(NULL, piWhore, -1, FIRING_TYPE_CONTINUOUS )
|
||
CLOSE_SEQUENCE_TASK(siPassengerSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, siPassengerSequenceID)
|
||
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"UPDATE_FINAL_SCENE - Moving to FINAL_SCENE_KILL_WOMAN")
|
||
|
||
finalState = FINAL_SCENE_KILL_WOMAN
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE FINAL_SCENE_KILL_WOMAN
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("FINAL_SCENE_KILL_WOMAN", iDebugThrottle)
|
||
|
||
IF IS_ENTITY_DEAD(piWhore)
|
||
IF NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed)
|
||
|
||
//Task passenger to move toward fiance
|
||
IF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
|
||
CLEAR_SEQUENCE_TASK(siWhoreSequenceID)
|
||
OPEN_SEQUENCE_TASK(siWhoreSequenceID)
|
||
|
||
//TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL,<< -877.9511, -12.1408, 41.7063 >>,myEscapeeStruct.piPed,PEDMOVEBLENDRATIO_WALK,FALSE)
|
||
TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL,<<-691.48, -1113.31, 13.53>>,myEscapeeStruct.piPed,PEDMOVEBLENDRATIO_WALK,FALSE)
|
||
TASK_AIM_GUN_AT_ENTITY(NULL,myEscapeeStruct.piPed, -1,TRUE)
|
||
|
||
CLOSE_SEQUENCE_TASK(siWhoreSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, siWhoreSequenceID)
|
||
|
||
ENDIF
|
||
ENDIF
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"UPDATE_FINAL_SCENE - Moving to FINAL_SCENE_KILL_MAN")
|
||
finalState = FINAL_SCENE_KILL_MAN
|
||
ENDIF
|
||
|
||
BREAK
|
||
|
||
CASE FINAL_SCENE_KILL_MAN
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("FINAL_SCENE_KILL_MAN", iDebugThrottle)
|
||
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
||
|
||
IF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
|
||
AND NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed)
|
||
|
||
TASK_SHOOT_AT_ENTITY(myTaxiData.piTaxiPassenger, myEscapeeStruct.piPed, -1, FIRING_TYPE_CONTINUOUS )
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"UPDATE_FINAL_SCENE - Moving to FINAL_SCENE_FLEE")
|
||
finalState = FINAL_SCENE_FLEE
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
CASE FINAL_SCENE_FLEE
|
||
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("FINAL_SCENE_FLEE", iDebugThrottle)
|
||
|
||
IF IS_ENTITY_DEAD(myEscapeeStruct.piPed) AND NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
|
||
|
||
VECTOR vDeadHusband
|
||
vDeadHusband = GET_ENTITY_COORDS(myEscapeeStruct.piPed, FALSE)
|
||
|
||
OPEN_SEQUENCE_TASK(siPassengerSequenceID)
|
||
TASK_AIM_GUN_AT_COORD(NULL, vDeadHusband, 1000)
|
||
TASK_SWAP_WEAPON(NULL, FALSE)
|
||
TASK_STAND_STILL(NULL, 500)
|
||
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-705.40240, -1120.21875, 13.52498>>, PEDMOVEBLENDRATIO_SPRINT)
|
||
TASK_SMART_FLEE_COORD(NULL, <<-691.48, -1113.31, 13.53>>, 1000, -1)
|
||
CLOSE_SEQUENCE_TASK(siPassengerSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, siPassengerSequenceID)
|
||
CLEAR_SEQUENCE_TASK(siPassengerSequenceID)
|
||
|
||
SET_PED_KEEP_TASK(myTaxiData.piTaxiPassenger, TRUE)
|
||
bTaxiOJ_GYN_IsFianceDead = TRUE
|
||
ENDIF
|
||
BREAK
|
||
ENDSWITCH
|
||
ENDPROC
|
||
|
||
/*
|
||
|
||
ooooooooooo ooooo o oooo oooo oooooooo8 ooooooooooo ooooooooooo oooooooooo ooooo oooo oooooooo8 oooo oooo o ooooo
|
||
888 888 888 8888o 88 o888 88 888 88 88 888 88 888 888 888 88 o888 88 888 o88 888 888
|
||
888ooo8 888 8 88 88 888o88 888 888ooo8 888 888oooo88 888 88 888 888888 8 88 888
|
||
888 888 8oooo88 88 8888 888o oo 888 oo 888 888 88o 888 88 888o oo 888 88o 8oooo88 888
|
||
o888o o888o o88o o888o o88o 88 888oooo88 o888ooo8888 o888o o888o 88o8 888oo88 888oooo88 o888o o888o o88o o888o o888o
|
||
|
||
*/
|
||
///// PURPOSE: This checks the fiance's truck for all types of aggro and fail cases along with handling his tasks to follow waypoints and when he's stuck behind a vehicle
|
||
///
|
||
FUNC BOOL HANDLE_TAXIOJ_AI_FIANCE_TRUCK_DRIVING()
|
||
|
||
//Give some time for obj to print
|
||
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DELAY) > 2.0
|
||
//Monitors your follow/chase status
|
||
IF NOT myTaxiData.bIsTaxiDebugSkipping
|
||
#IF IS_DEBUG_BUILD
|
||
TAXI_AI_WATCH_FOLLOW_STATUS(myTaxiData,myEscapeeStruct, ( (GET_GAME_TIMER() - iTimeOfEscapeeStart) > 15000 ),bDebugDrawZones )
|
||
#ENDIF
|
||
|
||
#IF IS_FINAL_BUILD
|
||
TAXI_AI_WATCH_FOLLOW_STATUS(myTaxiData,myEscapeeStruct, ( (GET_GAME_TIMER() - iTimeOfEscapeeStart) > 15000 ))
|
||
#ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF IS_VEHICLE_DRIVEABLE(myEscapeeStruct.viCar)
|
||
|
||
IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
|
||
IF IS_ENTITY_IN_ANGLED_AREA(myTaxiData.viTaxi, vLocate_fc_final_cs_triggerPos1, vLocate_fc_final_cs_triggerPos2, fLocate_fc_final_cs_triggerWidth)
|
||
BRING_VEHICLE_TO_HALT(myTaxiData.viTaxi, 5.0, 1)
|
||
RETURN TRUE
|
||
ENDIF
|
||
ENDIF
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
DRAW_DEBUG_SPHERE(vTaxiOJ_FC_CS02_FianceWarpPt1, 5.0, 0, 0, 255, 120)
|
||
//DRAW_DEBUG_SPHERE(vTaxiOJ_FC_C02_WarpPt_Player1, 5.0, 255, 0, 0, 120)
|
||
#ENDIF
|
||
|
||
//TOGGLE_NODES_ALONG_WAYPOINT_RECORDING_PATH_ON_PROGRESS(myTaxiData,sNurseCarRecording,myEscapeeStruct.viCar,iRoadNodeMachineIndex,iNumRoadNodes, iWayPtProgress,50,15)
|
||
|
||
//Override the cinematic cam
|
||
CONTROL_VEHICLE_CHASE_HINT_CAM_ANY_MEANS(localChaseHintCamStruct, myEscapeeStruct.viCar)
|
||
|
||
UPDATE_OJ_TAXI_MILEAGE(myTaxiData,myTaxiData.fTaxiOJ_TempFloat)
|
||
|
||
//FIANCE LEAVES HOSPITAL
|
||
//Task to waypoint recording once vehicle recording to exit hospital is done-----------------------------------------
|
||
IF NOT bTransititonToWaypointRec
|
||
IF NOT IS_ENTITY_DEAD(myEscapeeStruct.piPed)
|
||
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(myEscapeeStruct.viCar)
|
||
AND (GET_GAME_TIMER() - iTimeOfEscapeeStart) > GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(TAXI_CONST_VR_FIANCE_EXIT_HOSPITAL,"txm_fc_h1_")
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"HANDLE_TAXIOJ_AI_FIANCE_TRUCK_DRIVING: bTransititonToWaypointRec ?")
|
||
|
||
TASK_VEHICLE_DRIVE_TO_COORD(myEscapeeStruct.piPed, myEscapeeStruct.viCar, vTaxiOJ_FC_CS02_FianceWarpPt1, 28.0, DRIVINGSTYLE_NORMAL, myEscapeeStruct.escapeeCarModel, tFianceDrivingMode, 13.75, -1.0)
|
||
|
||
bTransititonToWaypointRec = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
RETURN FALSE
|
||
ENDFUNC
|
||
/*
|
||
|
||
oooo oooo o ooooo oooo oooo
|
||
8888o 888 888 888 8888o 88
|
||
88 888o8 88 8 88 888 88 888o88
|
||
88 888 88 8oooo88 888 88 8888
|
||
o88o 8 o88o o88o o888o o888o o88o 88
|
||
|
||
*/
|
||
/// PURPOSE: The almighty assembly line. This is where the magic happens
|
||
///
|
||
PROC Main_Taxi_OJ_FollowCar()
|
||
|
||
|
||
//Handles Fail Or No Taxi-------------------------------------------------------------------------------
|
||
IF IS_TAXI_JOB_IN_FAIL_STATE(myTaxiData)
|
||
TAXI_OJ_CLEAR_ALL_BLIPS(myTaxiData)
|
||
|
||
//Cleanup any straggler blips
|
||
IF DOES_BLIP_EXIST(myEscapeeStruct.bBlip)
|
||
REMOVE_BLIP(myEscapeeStruct.bBlip)
|
||
ENDIF
|
||
|
||
IF TAXI_HANDLE_FAIL(myTaxiData)
|
||
Script_Failed()
|
||
ENDIF
|
||
|
||
//Proceed
|
||
ELSE
|
||
//Run Throughtout the Entire Mission--------------------------------------------------------------
|
||
TAXI_OJ_MAINTAIN_GLOBAL_GATES(myTaxiData)
|
||
|
||
//In Follow Car we fake the mission complete a little early, so only run these before TRS_CLEANUP
|
||
if myTaxiData.tTaxiOJ_RideState < TRS_SPECIAL_ENDING
|
||
RUN_GLOBAL_TAXI_UPDATES(myTaxiData,aggroArgs)
|
||
|
||
PROCESS_TAXI_EXCEPTIONS(myTaxiData)
|
||
|
||
UPDATE_TAXI_OJ_TIP(myTaxiData,iTipIndex)
|
||
ENDIF
|
||
|
||
//Dialogue & Objectives
|
||
IF myTaxiData.tTaxiOJ_RideState > TRS_FINDING_LOCATION
|
||
IF NOT IS_TAXI_EMERGENCY_FAIL_SET(myTaxiData)
|
||
TRIGGER_TAXI_QUEUE_FC_LINES()
|
||
ELSE
|
||
TAXI_SET_FAIL(myTaxiData,"Taxi Not Driveable",GET_TAXI_EMERGENCY_FAIL_STRING(myTaxiData))
|
||
ENDIF
|
||
|
||
ENDIF
|
||
|
||
//Update Final Scene-----------------------------------------
|
||
IF myTaxiData.tTaxiOJ_RideState >= TRS_WAIT_FOR_PASSENGER
|
||
AND NOT bTaxiOJ_GYN_IsFianceDead
|
||
UPDATE_FINAL_SCENE()
|
||
ENDIF
|
||
//--------------------
|
||
|
||
IF bTaxiSetVehicleMultiplier
|
||
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.8)//9)
|
||
//CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("vehicle density set to 0.9 right now", iDebugThrottle)
|
||
ENDIF
|
||
|
||
//Track Driver progress
|
||
IF myTaxiData.tTaxiOJ_RideState = TRS_DRIVING_PASSENGER
|
||
OR myTaxiData.tTaxiOJ_RideState = TRS_WAIT_1ST_STOP
|
||
|
||
HANDLE_TAXI_EXCITEMENT(myTaxiData,FALSE)
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
IF bDebugTurnOnFreeRide
|
||
HANDLE_TAXI_EXCITEMENT(myTaxiData,TRUE,TRUE)
|
||
ENDIF
|
||
#ENDIF
|
||
ENDIF
|
||
|
||
//================================================================================================
|
||
|
||
SWITCH myTaxiData.tTaxiOJ_RideState
|
||
/*PRESTREAM and Check that the player and taxi are good to go----------------------------------------
|
||
|
||
ooooo oooo oooo ooooo ooooooooooo
|
||
888 8888o 88 888 88 888 88
|
||
888 88 888o88 888 888
|
||
888 88 8888 888 888
|
||
o888o o88o 88 o888o o888o
|
||
*/
|
||
CASE TRS_INIT_STREAM
|
||
|
||
//Request of our assets
|
||
REQUEST_TAXI_ODDJOB_FC_STREAMS_STAGE_01()
|
||
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_DIALOGUE,TAXI_DX_DELAY)
|
||
|
||
TAXI_SPAWN_PASSENGER(myTaxiData, vPassengerPt, vPassengerPickupPt, "TaxiKeyla",mPassengerModel,41.1334,15.0)
|
||
TAXI_INIT_PASSENGER_BLIP(myTaxiData)
|
||
|
||
|
||
//Move on to the next stage
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_STREAMING)
|
||
|
||
BREAK
|
||
|
||
//Wait for all of assets that we just requested, to finish streaming---------------------------------------------
|
||
CASE TRS_STREAMING
|
||
|
||
IF HAVE_TAXI_OJ_FC_STAGE_01_ASSETS_LOADED()
|
||
|
||
INIT_ALL_TAXI_EXCITEMENT_VALUES()
|
||
|
||
INITIALIZE_GENERIC_TAXI_EXCEPTIONS()
|
||
|
||
TAXI_INITIALIZE_BONUS_FIELD(bonusFieldFollowCar[TFC_BONUS_P_EYE], "TAXI_SC_BN_04", TAXI_CONST_CASH_BONUS_PRIVATE_EYE)
|
||
TAXI_INITIALIZE_BONUS_INFO(myTaxiData, bonusFieldFollowCar)
|
||
|
||
//SET REACT BITS
|
||
CLEAR_ALL_TAXI_PASSENGER_REACT_BITS(myTaxiData)
|
||
|
||
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(vHospitalMin, vHospitalMax, FALSE)
|
||
|
||
myTaxiData.vTaxiOJPickup = vPassengerPt
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SPAWNING)
|
||
ENDIF
|
||
|
||
BREAK
|
||
|
||
//Once we have a good point, spawn our passenger------------------------------------------------------------------
|
||
CASE TRS_SPAWNING
|
||
|
||
IF PROPERTY_VIP_INIT_READY(myTaxiData)
|
||
|
||
|
||
IF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
|
||
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, INT_TO_ENUM(PED_COMPONENT,0), 0, 1, 0) //(head)
|
||
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, INT_TO_ENUM(PED_COMPONENT,2), 1, 2, 0) //(hair)
|
||
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, INT_TO_ENUM(PED_COMPONENT,3), 0, 2, 0) //(uppr)
|
||
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, INT_TO_ENUM(PED_COMPONENT,4), 1, 3, 0) //(lowr)
|
||
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, INT_TO_ENUM(PED_COMPONENT,8), 1, 0, 0) //(accs)
|
||
|
||
// SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, PED_COMP_TORSO, 1, 5)
|
||
// SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, PED_COMP_LEG, 1, 5)
|
||
// SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, PED_COMP_HAIR, 1, 0)
|
||
ENDIF
|
||
|
||
//Give player obj to go pickup Passenger
|
||
ENABLE_TAXI_SPEECH(myTaxiData)
|
||
|
||
//Clear our all potential relationships
|
||
ADD_RELATIONSHIP_GROUP("TAXI_Escapee", myEscapeeStruct.relEscapee)
|
||
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_NONE, myEscapeeStruct.relEscapee, myTaxiData.relPassenger)
|
||
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_NONE, myEscapeeStruct.relEscapee, RELGROUPHASH_PLAYER)
|
||
|
||
SET_ROADS_IN_AREA(<< 1346.90, -1606.52, 31.16 >>, << 1457.25, -1508.19, 83.05 >>, FALSE)
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_MANAGE_PICKUP)
|
||
ENDIF
|
||
BREAK
|
||
|
||
/*
|
||
LM - Had to change the state machine flow from TRS_MANAGE_PICKUP -> TRS_WAIT_1ST_STOP in order to
|
||
accomodate for players diving out of the car during pickup. This fixes B* 323041, because when players
|
||
dove during Following Car, they wouldn't lose control, but the mortuary would get blipped. I used the
|
||
pre-existing states TRS_SWITCH_JOB and TRS_SEND_TO_STORE to control this flow a little more.
|
||
*/
|
||
|
||
//Once near the passenger make him get in and assign a dropoff destination-----------------------------------------
|
||
CASE TRS_MANAGE_PICKUP
|
||
IF TAXI_HANDLE_IV_PICKUP_NO_METER(myTaxiData)
|
||
|
||
REQUEST_TAXI_ODDJOB_FC_STREAMS_STAGE_02()
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_PASSENGER_ENTER)
|
||
ENDIF
|
||
|
||
BREAK
|
||
|
||
CASE TRS_PASSENGER_ENTER //placeholder - see above explanation
|
||
|
||
IF IS_PASSENGER_ENTERING_TAXI(myTaxiData)
|
||
//Greet the player
|
||
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GREET,TRUE)
|
||
|
||
CLEANUP_TAXI_PICKUP_STOP(myTaxiData)
|
||
|
||
myTaxiData.vTaxiOJDropoff = << 485.2039, -1418.0643, 28.2112 >> //<< 452.6766, -1403.7572, 28.1917 >>//<< 430.1324, -1389.1927, 28.3329 >>
|
||
|
||
TAXI_OJ_FC_SET_TIP_AND_EXCITEMENT_TO_CHECK()
|
||
|
||
TAXI_PREP_SET_ROADS_IN_AREA_FOR_PICKUP(<< 392.8545, -1379.5774, 29.2837 >>,FALSE,TAXI_CONST_FC_ROAD_DISABLE_RADIUS)
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_WAIT_1ST_STOP)
|
||
ENDIF
|
||
|
||
// check to see if player dived, if so send back to prev state
|
||
IF IS_VEHICLE_DRIVEABLE( myTaxiData.viTaxi)
|
||
IF NOT IS_PED_IN_VEHICLE(myTaxiData.piTaxiPlayer, myTaxiData.viTaxi)
|
||
TAXI_HANDLE_PLAYER_DIVE(myTaxiData)
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_MANAGE_PICKUP)
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
//This is where you wait for them to arrive at the hospital. This is where i should add the blip check
|
||
CASE TRS_WAIT_1ST_STOP
|
||
TAXI_AI_HANDLE_BLIPS(myTaxiData,myTaxiData.blipTaxiDropOff)
|
||
|
||
//Handle damageing the husbands car
|
||
IF NOT DOES_ENTITY_EXIST(myEscapeeStruct.viCar)
|
||
IF HAVE_TAXI_OJ_FC_STAGE_02_ASSETS_LOADED()
|
||
SPAWN_ESCAPEE_VEHICLE(myEscapeeStruct, vEnemyCarSpawnPt, fEscapeeSpawnHeading )
|
||
ENDIF
|
||
ELSE
|
||
CHECK_NURSE_OR_HIS_VEHICLE_BEEN_DAMAGED(myTaxiData,myEscapeeStruct)
|
||
ENDIF
|
||
|
||
|
||
IF TAXI_HANDLE_DRIVING(myTaxiData,/* tTaxiOJ_DQ_Data,*/ 9)
|
||
IF DOES_BLIP_HAVE_GPS_ROUTE(myTaxiData.blipTaxiDropOff)
|
||
SET_BLIP_ROUTE(myTaxiData.blipTaxiDropOff, FALSE)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"myTaxiData.blipTaxiDropOff - route turned off")
|
||
ENDIF
|
||
|
||
REMOVE_BLIP( myTaxiData.blipTaxiDropOff )
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_CUTSCENE)
|
||
ENDIF
|
||
BREAK
|
||
/*Cutscene - At the hospital
|
||
|
||
oooooooo8 oooooooo8 oooooooo8 ooooooooooo oooo oooo ooooooooooo
|
||
o888 88 888 o888 88 888 88 8888o 88 888 88
|
||
888 888oooooo 888 888ooo8 88 888o88 888ooo8
|
||
888o oo 888 888o oo 888 oo 88 8888 888 oo
|
||
888oooo88 o88oooo888 888oooo88 o888ooo8888 o88o 88 o888ooo8888
|
||
*/
|
||
CASE TRS_CUTSCENE
|
||
IF TAXI_OJ_FTC_CUTSCENE_HOSPITAL()
|
||
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
||
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_OBJ_FTC2,TRUE)
|
||
bTaxiSetVehicleMultiplier = TRUE
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_DRIVING_PASSENGER)
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
//Waits for the passenger to get the taxi to then spawn the followee car--------------------------------------------
|
||
CASE TRS_DRIVING_PASSENGER
|
||
// IF NOT IS_BIT_SET(iFCHelpBitField, TAXI_FC_CHASE_CAM_HLP)
|
||
// PRINT_HELP("TX_FC_CHS_CAM")
|
||
// SET_BIT(iFCHelpBitField, TAXI_FC_CHASE_CAM_HLP)
|
||
// ENDIF
|
||
|
||
CHECK_NURSE_OR_HIS_VEHICLE_BEEN_DAMAGED(myTaxiData,myEscapeeStruct)
|
||
|
||
LOAD_PATH_NODES_FOR_NURSE_CAR_THIS_FRAME()
|
||
|
||
IF IS_PED_AND_VEHICLE_VALID(myEscapeeStruct.piPed,myEscapeeStruct.viCar)
|
||
//AND ARE_NODES_LOADED_FOR_AREA(vPathNodeMin.x, vPathNodeMin.y, vPathNodeMax.x, vPathNodeMax.y)
|
||
|
||
TAXI_CANCEL_TIMERS(myTaxiData, TT_STOPPED)
|
||
|
||
SET_PED_CAN_BE_SHOT_IN_VEHICLE(myEscapeeStruct.piPed,TRUE)
|
||
SET_PED_COMBAT_ATTRIBUTES(myEscapeeStruct.piPed, CA_FLEE_WHILST_IN_VEHICLE, TRUE)
|
||
SET_PED_COMBAT_ATTRIBUTES(myEscapeeStruct.piPed, CA_ALWAYS_FLEE, TRUE)
|
||
//Tell the player what to do.
|
||
ENABLE_TAXI_SPEECH(myTaxiData)
|
||
|
||
myEscapeeStruct.iStartHealth= GET_ENTITY_HEALTH(myEscapeeStruct.viCar)
|
||
myEscapeeStruct.fCurrentEngHealth = GET_VEHICLE_ENGINE_HEALTH(myEscapeeStruct.viCar)
|
||
myEscapeeStruct.fPetrolHealth = GET_VEHICLE_PETROL_TANK_HEALTH(myEscapeeStruct.viCar)
|
||
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_COLLIDE,0)
|
||
TAXI_RESET_TIMERS(myTaxiData, TT_DELAY,0)
|
||
|
||
SET_PED_NON_CREATION_AREA(vHouseMin, vHouseMax)
|
||
tempScenarioBlockingIndex = ADD_SCENARIO_BLOCKING_AREA(vHouseMin, vHouseMax)
|
||
SET_CINEMATIC_BUTTON_ACTIVE(FALSE)
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_CHASE_DRIVER)
|
||
|
||
ENDIF
|
||
BREAK
|
||
|
||
|
||
/* FOLLOWING CAR
|
||
|
||
oooooooo8 ooooo ooooo o oooooooo8 ooooooooooo
|
||
o888 88 888 888 888 888 888 88
|
||
888 888ooo888 8 88 888oooooo 888ooo8
|
||
888o oo 888 888 8oooo88 888 888 oo
|
||
888oooo88 o888o o888o o88o o888o o88oooo888 o888ooo8888 */
|
||
|
||
//Follow the car and monitor everything| Check if the player attacks the car also--------------------------------------------
|
||
|
||
CASE TRS_CHASE_DRIVER
|
||
//These run even if the player is not in the taxi------------------------------------------------
|
||
|
||
LOAD_PATH_NODES_FOR_NURSE_CAR_THIS_FRAME()
|
||
|
||
//Handle player harming the fiance
|
||
CHECK_NURSE_OR_HIS_VEHICLE_BEEN_DAMAGED(myTaxiData,myEscapeeStruct)
|
||
|
||
//Blip Management
|
||
TAXI_AI_HANDLE_BLIPS(myTaxiData,myEscapeeStruct.bBlip)
|
||
|
||
//New location: <<-675.1650, -1054.1213, 15.2092>>, 120.9886
|
||
|
||
|
||
IF IS_PLAYER_DRIVING_TAXI_OJ(myTaxiData)
|
||
|
||
//Handle Going Wanted during this Section--------------------------------------
|
||
IF IS_TAXI_POLICE_READY(myEscapeeStruct.piPed, myEscapeeStruct.bBlip)
|
||
//Set dialogue stuff up
|
||
SET_NEXT_TAXI_SPEECH(myTaxiData, TAXI_DI_ESCAPE_POLICE,TRUE)
|
||
//Debug to the next stage
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_ESCAPE_POLICE)
|
||
ENDIF
|
||
|
||
|
||
//Run Radio Dialogue
|
||
RUN_TAXIRADIO_UPDATE_WHEN_ENABLED(myTaxiData)
|
||
|
||
|
||
//Banter # 1
|
||
TRIGGER_TAXIOJ_BANTER_WHEN_VEHICLE_NEAR_COORD(myEscapeeStruct.viCar,<< 291.0313, -1476.4460, 28.2945 >>,15,tTaxiOJ_DQ_Data,2)
|
||
|
||
|
||
//Truck driving handled here
|
||
IF HANDLE_TAXIOJ_AI_FIANCE_TRUCK_DRIVING()
|
||
|
||
IF IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(myEscapeeStruct.viCar)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"stopping playback")
|
||
STOP_PLAYBACK_RECORDED_VEHICLE(myEscapeeStruct.viCar)
|
||
REMOVE_VEHICLE_RECORDING(0, "taxi_oj_fc3")
|
||
ENDIF
|
||
|
||
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
|
||
|
||
//Fiance hit the cutscene trigger B*486284
|
||
REQUEST_TAXI_ODDJOB_FC_STREAMS_STAGE_END()
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_CUTSCENE_02)
|
||
ENDIF
|
||
|
||
// IF IsChaseHintCamButtonPressedInVehicle()
|
||
// AND IS_BIT_SET(iFCHelpBitField, TAXI_FC_CHASE_CAM_HLP)
|
||
// AND iChaseCamTime = 0
|
||
// iChaseCamTime = GET_GAME_TIMER()
|
||
// IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TX_FC_CHS_CAM")
|
||
// CLEAR_HELP()
|
||
// ENDIF
|
||
// ENDIF
|
||
ENDIF
|
||
BREAK
|
||
//END OF CHASE CASE-------------------------------------------------------------------------------------------
|
||
|
||
|
||
|
||
//Play cutscene
|
||
CASE TRS_CUTSCENE_02
|
||
IF HAVE_TAXI_OJ_FC_STAGE_END_ASSETS_LOADED()
|
||
IF TAXI_OJ_CS_WHORE_REVEAL()
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_REVEAL_DESTINATION)
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
|
||
|
||
//Wait for player to drop off passenger, should be a huge volume around the entire area.
|
||
|
||
CASE TRS_REVEAL_DESTINATION
|
||
UPDATE_OJ_TAXI_MILEAGE(myTaxiData,myTaxiData.fTaxiOJ_TempFloat)
|
||
|
||
//Your followee made it to his destination.
|
||
IF IS_VEHICLE_DRIVEABLE(myEscapeeStruct.viCar)
|
||
IF ( IS_ENTITY_AT_COORD(myEscapeeStruct.viCar,vEnemyDestination,<<20.0,20.0,60.0>>, TRUE)
|
||
AND GET_ENTITY_SPEED(myEscapeeStruct.viCar) < 5.0 )
|
||
OR myEscapeeStruct.tesState > TES_DRIVING
|
||
IF NOT IS_ENTITY_DEAD(piWhore)
|
||
CLEAR_PED_TASKS(piWhore)
|
||
SET_ENTITY_COORDS(piWhore, vWhoreGoToPos)
|
||
ENDIF
|
||
|
||
SET_NEXT_TAXI_SPEECH(myTaxiData, TAXI_DI_DROP_OFF,TRUE)
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_WAIT_FOR_PASSENGER)
|
||
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE TRS_WAIT_FOR_PASSENGER
|
||
UPDATE_OJ_TAXI_MILEAGE(myTaxiData,myTaxiData.fTaxiOJ_TempFloat)
|
||
|
||
MONITOR_TAXI_ESCAPEE_OK( myTaxiData, myEscapeeStruct.piPed )
|
||
MONITOR_TAXI_ESCAPEE_OK( myTaxiData, piWhore, FALSE, FALSE )
|
||
|
||
TAXI_AI_HANDLE_BLIPS(myTaxiData, myTaxiData.blipTaxiDropOff)
|
||
|
||
IF DOES_BLIP_EXIST(myEscapeeStruct.bBlip)
|
||
REMOVE_BLIP(myEscapeeStruct.bBlip)
|
||
myTaxiData.vTaxiOJDropoff = vDropOff
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"TRS_WAIT_FOR_PASSENGER - Removed blip for enemy")
|
||
|
||
ELIF NOT DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
|
||
|
||
myTaxiData.blipTaxiDropOff = CREATE_BLIP_FOR_COORD(myTaxiData.vTaxiOJDropoff,TRUE)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"TRS_WAIT_FOR_PASSENGER - Added blip for dest")
|
||
ENDIF
|
||
|
||
IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
|
||
IF IS_PED_IN_VEHICLE(myTaxiData.piTaxiPlayer, myTaxiData.viTaxi)
|
||
// IF IS_ENTITY_IN_ANGLED_AREA(myTaxiData.viTaxi, <<-861.4246,-4.3583,42.3135>>, <<-878.7411,2.9062,46.6091>>, 3.00)
|
||
// OR IS_ENTITY_IN_ANGLED_AREA(myTaxiData.viTaxi, <<-894.5720,-3.8196,42.6009>>, <<-880.9864,4.0184,46.3550>>, 1.75)
|
||
|
||
//placing here to fake a corona
|
||
IF IS_ENTITY_AT_COORD(myTaxiData.viTaxi, <<-684.52600, -1105.75964, 13.52571>>, << 1.0, 1.0, LOCATE_SIZE_HEIGHT>>, !(myTaxiData.bIsCurrentlyWanted))
|
||
ENDIF
|
||
|
||
IF IS_ENTITY_IN_ANGLED_AREA(myTaxiData.viTaxi, <<-685.0081,-1101.2966,13.5270>>, <<-678.6770,-1110.6399, 15.5871>>, 2.25)
|
||
OR IS_ENTITY_IN_ANGLED_AREA(myTaxiData.viTaxi, <<-704.1705,-1115.2262,13.5250>>, <<-700.2585,-1121.2924,15.4336>>, 2.25)
|
||
//IF IS_TAXI_FULLY_STOPPED(myTaxiData)
|
||
|
||
//IF IS_ENTITY_IN_ANGLED_AREA(myTaxiData.viTaxi, <<-861.4246,-4.3583,42.3135>>, <<-878.7411,2.9062,46.6091>>, 3.00)
|
||
IF IS_ENTITY_IN_ANGLED_AREA(myTaxiData.viTaxi, <<-685.0081,-1101.2966,13.5270>>, <<-678.6770,-1110.6399, 15.5871>>, 2.25)
|
||
eFCDropZone = TFC_DROPZONE1
|
||
ELSE
|
||
eFCDropZone = TFC_DROPZONE2
|
||
ENDIF
|
||
|
||
myTaxiData.fTaxiOJ_TimeDeadline = 60.0
|
||
|
||
myTaxiData.tTaxiOJ_ObjectiveCurrent = TAXI_DI_EMPTY
|
||
myTaxiData.tTaxiOJ_DXIndex = TAXI_DI_EMPTY
|
||
|
||
bTaxiSetVehicleMultiplier = FALSE
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_DROPPING_OFF)
|
||
//ENDIF
|
||
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE TRS_DROPPING_OFF
|
||
MONITOR_TAXI_ESCAPEE_OK( myTaxiData, myEscapeeStruct.piPed, FALSE )
|
||
MONITOR_TAXI_ESCAPEE_OK( myTaxiData, piWhore, FALSE, FALSE )
|
||
|
||
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
|
||
IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
|
||
IF myEscapeeStruct.tesState <> TES_DEAD
|
||
|
||
//IF TAXI_HANDLE_DRIVING(myTaxiData,tTaxiOJ_DQ_Data,TRUE)
|
||
IF IS_TAXI_FULLY_STOPPED(myTaxiData, TRUE, 3)
|
||
|
||
bTaxiOJ_GYN_IsPassengerAtConfrontationPt = TRUE
|
||
|
||
REMOVE_BLIP(myTaxiData.blipTaxiDropOff)
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_REGULAR_PAYMENT)
|
||
ENDIF
|
||
ELSE
|
||
IF NOT DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
|
||
myTaxiData.blipTaxiDropOff = CREATE_BLIP_FOR_COORD(myTaxiData.vTaxiOJDropoff,TRUE)
|
||
ENDIF
|
||
IF TAXI_HANDLE_DRIVING(myTaxiData,/*tTaxiOJ_DQ_Data,*/8)
|
||
OR IS_TAXI_FULLY_STOPPED(myTaxiData)
|
||
REMOVE_BLIP(myTaxiData.blipTaxiDropOff)
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_REGULAR_PAYMENT)
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
BREAK
|
||
//This case is only hit if the play kills the driver of the car he's following
|
||
//Waits for the player to clear his wanted level.
|
||
CASE TRS_ESCAPE_POLICE
|
||
MONITOR_TAXI_ESCAPEE_OK( myTaxiData, myEscapeeStruct.piPed ,FALSE)
|
||
MONITOR_TAXI_ESCAPEE_OK( myTaxiData, piWhore, FALSE, FALSE )
|
||
|
||
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) < 1
|
||
SET_NEXT_TAXI_SPEECH(myTaxiData, TAXI_DI_DROP_OFF,TRUE)
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_REGULAR_PAYMENT)
|
||
|
||
ENDIF
|
||
BREAK
|
||
|
||
CASE TRS_REGULAR_PAYMENT
|
||
MONITOR_TAXI_ESCAPEE_OK( myTaxiData, myEscapeeStruct.piPed ,FALSE)
|
||
MONITOR_TAXI_ESCAPEE_OK( myTaxiData, piWhore, FALSE, FALSE )
|
||
|
||
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
|
||
|
||
IF DOES_BLIP_EXIST(myEscapeeStruct.bBlip)
|
||
REMOVE_BLIP( myEscapeeStruct.bBlip )
|
||
ENDIF
|
||
|
||
CLEAR_THIS_PRINT("TAXI_OBJ_DRIVE")
|
||
|
||
|
||
//This variable represents our delta of positive / negative feedback. Follow car is a special case
|
||
IF myEscapeeStruct.iNumTimesWarned > 2 //more than 2 warnings. Ass tip
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"more than 2 warnings. Ass tip")
|
||
myTaxiData.iTaxiOJ_CashTip = -10
|
||
|
||
ELIF myEscapeeStruct.iNumTimesWarned = 0 //Amazing tip! No warnings AND UNLOCK BONUS
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"Amazing tip! No warnings")
|
||
myTaxiData.iTaxiOJ_CashTip = 7
|
||
|
||
TAXI_SET_BONUS_AWARD(myTaxiData,ENUM_TO_INT(TFC_BONUS_P_EYE))
|
||
|
||
ELSE //1-2 warnings.. ok tip
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"1-2 warnings.. ok tip")
|
||
myTaxiData.iTaxiOJ_CashTip = 4
|
||
ENDIF
|
||
|
||
SET_TAXI_FARE_OFF_MILEAGE(myTaxiData)
|
||
TAXI_OJ_RATE_OVERALL_TIP_LEVEL(myTaxiData)
|
||
CONVERT_TAXI_TIP_TO_CASH(myTaxiData)
|
||
|
||
|
||
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SCORECARD_GRADE)
|
||
ENDIF
|
||
BREAK
|
||
|
||
//Pop up the scorecard
|
||
CASE TRS_SCORECARD_GRADE
|
||
|
||
CLEAR_THIS_PRINT("TAXI_OBJ_DRIVE")
|
||
|
||
IF TAXI_CALC_SCORECARD(myTaxiData,TaxiMidSize)
|
||
|
||
SET_TAXI_ODDJOB_PASSED(myTaxiData)
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SPECIAL_ENDING)
|
||
|
||
ENDIF
|
||
|
||
BREAK
|
||
|
||
CASE TRS_SPECIAL_ENDING
|
||
|
||
IF bTaxiOJ_GYN_IsFianceDead
|
||
OR bTaxiOJ_GYN_IsPlayerTooClose
|
||
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_CLEANUP)
|
||
ENDIF
|
||
|
||
BREAK
|
||
|
||
CASE TRS_CLEANUP
|
||
|
||
CLEAR_THIS_PRINT("TAXI_OBJ_DRIVE")
|
||
|
||
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
|
||
AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piWhore, myTaxiData.piTaxiPassenger)
|
||
AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(myEscapeeStruct.piPed, myTaxiData.piTaxiPassenger)
|
||
IF bAmbulanceFound
|
||
OR TIMERA() > 20000
|
||
//IF TIMERA() > 5000
|
||
|
||
TAXI_MISSION_END(TRUE, myTaxiData)
|
||
Script_Cleanup()
|
||
//ENDIF
|
||
ELSE
|
||
viAmbulance = GET_RANDOM_VEHICLE_IN_SPHERE(vWhoreSpawn, 10, AMBULANCE, 0)
|
||
IF IS_VEHICLE_DRIVEABLE(viAmbulance)
|
||
//SETTIMERA(0)
|
||
bAmbulanceFound = TRUE
|
||
ENDIF
|
||
piMedic = GET_RANDOM_PED_AT_COORD(vWhoreSpawn, <<5,5,5>>)
|
||
IF NOT IS_PED_INJURED(piMedic)
|
||
//SETTIMERA(5000)
|
||
bAmbulanceFound = TRUE
|
||
ENDIF
|
||
IF NOT bDispatchSuccessful
|
||
IF CREATE_INCIDENT(DT_AMBULANCE_DEPARTMENT, vWhoreSpawn, 1, 0.0, nurseIncident)
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"incident created")
|
||
SETTIMERA(0)
|
||
bDispatchSuccessful = TRUE
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF GET_PLAYER_DISTANCE_FROM_LOCATION(vWhoreSpawn) > 100
|
||
OR GET_DISTANCE_BETWEEN_PEDS( myTaxiData.piTaxiPassenger, PLAYER_PED_ID() ) > 100 // player far awar from passenger
|
||
|
||
|
||
CDEBUG1LN(DEBUG_OJ_TAXI,"Player is far away. Cleaning up")
|
||
|
||
TAXI_MISSION_END(TRUE, myTaxiData)
|
||
Script_Cleanup()
|
||
|
||
ELIF ( IS_PED_INJURED(myTaxiData.piTaxiPassenger) // any of the peds get injured
|
||
//OR IS_PED_INJURED(piWhore)
|
||
//OR IS_PED_INJURED(myEscapeeStruct.piPed) )
|
||
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piWhore, PLAYER_PED_ID())
|
||
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(myEscapeeStruct.piPed, PLAYER_PED_ID()) )
|
||
|
||
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(myTaxiData.piTaxiPassenger, TRUE)
|
||
CLEAR_PED_TASKS(myTaxiData.piTaxiPassenger)
|
||
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
OPEN_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_COWER(NULL, 2000)
|
||
TASK_SMART_FLEE_COORD(NULL, myTaxiData.vTaxiOJDropoff, 1000, -1)
|
||
CLOSE_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, siEscapeeSequenceID)
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
|
||
SET_PED_KEEP_TASK( myTaxiData.piTaxiPassenger, TRUE )
|
||
|
||
ENDIF
|
||
|
||
IF NOT IS_PED_INJURED(piWhore)
|
||
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(piWhore, TRUE)
|
||
CLEAR_PED_TASKS(piWhore)
|
||
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
OPEN_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_COWER(NULL, 1000)
|
||
TASK_SMART_FLEE_COORD(NULL, myTaxiData.vTaxiOJDropoff, 1000, -1)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -900.3293, 6.8557, 43.2381 >>, PEDMOVEBLENDRATIO_SPRINT)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -917.1956, -9.5316, 42.6199 >>, PEDMOVEBLENDRATIO_SPRINT)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -910.8076, -18.8469, 42.5941 >>, PEDMOVEBLENDRATIO_SPRINT) //coord behind house
|
||
// TASK_COWER(NULL)
|
||
CLOSE_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_PERFORM_SEQUENCE(piWhore, siEscapeeSequenceID)
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
|
||
SET_PED_KEEP_TASK( piWhore, TRUE )
|
||
|
||
ENDIF
|
||
|
||
IF NOT IS_PED_INJURED(myEscapeeStruct.piPed)
|
||
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(myEscapeeStruct.piPed, TRUE)
|
||
//CLEAR_PED_TASKS(myEscapeeStruct.piPed)
|
||
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
OPEN_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
IF bFianceReacted
|
||
TASK_PLAY_ANIM(NULL, "MOVE_DUCK_FOR_COVER", "exit")
|
||
ENDIF
|
||
TASK_STAND_STILL(NULL, 500)
|
||
TASK_SMART_FLEE_COORD(NULL, myTaxiData.vTaxiOJDropoff, 1000, -1)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -900.3293, 6.8557, 43.2381 >>, PEDMOVEBLENDRATIO_SPRINT)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -917.1956, -9.5316, 42.6199 >>, PEDMOVEBLENDRATIO_SPRINT)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -910.8076, -18.8469, 42.5941 >>, PEDMOVEBLENDRATIO_SPRINT) //coord behind house
|
||
// TASK_COWER(NULL)
|
||
CLOSE_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myEscapeeStruct.piPed, siEscapeeSequenceID)
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
|
||
SET_PED_KEEP_TASK( myEscapeeStruct.piPed, TRUE )
|
||
|
||
ENDIF
|
||
|
||
TAXI_MISSION_END(TRUE, myTaxiData)
|
||
Script_Cleanup()
|
||
|
||
ELIF bTaxiOJ_GYN_IsPlayerTooClose
|
||
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
||
AND (GET_GAME_TIMER() - iFinalFailDelay) > 500
|
||
|
||
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
|
||
|
||
|
||
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(myTaxiData.piTaxiPassenger, TRUE)
|
||
CLEAR_PED_TASKS(myTaxiData.piTaxiPassenger)
|
||
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
OPEN_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_SHOOT_AT_ENTITY(NULL, PLAYER_PED_ID(), -1, FIRING_TYPE_CONTINUOUS )
|
||
CLOSE_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, siEscapeeSequenceID)
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
|
||
SET_PED_KEEP_TASK( myTaxiData.piTaxiPassenger, TRUE )
|
||
|
||
ENDIF
|
||
|
||
IF NOT IS_PED_INJURED(piWhore)
|
||
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(piWhore, TRUE)
|
||
CLEAR_PED_TASKS(piWhore)
|
||
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
OPEN_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_COWER(NULL, 1000)
|
||
TASK_SMART_FLEE_COORD(NULL, myTaxiData.vTaxiOJDropoff, 1000, -1)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -900.3293, 6.8557, 43.2381 >>, PEDMOVEBLENDRATIO_SPRINT)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -917.1956, -9.5316, 42.6199 >>, PEDMOVEBLENDRATIO_SPRINT)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -910.8076, -18.8469, 42.5941 >>, PEDMOVEBLENDRATIO_SPRINT) //coord behind house
|
||
// TASK_COWER(NULL)
|
||
CLOSE_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_PERFORM_SEQUENCE(piWhore, siEscapeeSequenceID)
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
|
||
SET_PED_KEEP_TASK( piWhore, TRUE )
|
||
|
||
ENDIF
|
||
|
||
IF NOT IS_PED_INJURED(myEscapeeStruct.piPed)
|
||
|
||
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(myEscapeeStruct.piPed, TRUE)
|
||
CLEAR_PED_TASKS(myEscapeeStruct.piPed)
|
||
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
OPEN_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_STAND_STILL(NULL, 500)
|
||
TASK_SMART_FLEE_COORD(NULL, myTaxiData.vTaxiOJDropoff, 1000, -1)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -900.3293, 6.8557, 43.2381 >>, PEDMOVEBLENDRATIO_SPRINT)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -917.1956, -9.5316, 42.6199 >>, PEDMOVEBLENDRATIO_SPRINT)
|
||
// TASK_GO_STRAIGHT_TO_COORD(NULL, << -910.8076, -18.8469, 42.5941 >>, PEDMOVEBLENDRATIO_SPRINT) //coord behind house
|
||
// TASK_COWER(NULL)
|
||
CLOSE_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
TASK_PERFORM_SEQUENCE(myEscapeeStruct.piPed, siEscapeeSequenceID)
|
||
CLEAR_SEQUENCE_TASK(siEscapeeSequenceID)
|
||
|
||
SET_PED_KEEP_TASK( myEscapeeStruct.piPed, TRUE )
|
||
|
||
ENDIF
|
||
|
||
CLEANUP_TAXI_ODDJOB(myTaxiData)
|
||
Script_Cleanup()
|
||
ENDIF
|
||
BREAK
|
||
|
||
ENDSWITCH
|
||
ENDIF
|
||
|
||
ENDPROC
|
||
|
||
SCRIPT
|
||
|
||
// Handles the player being busted or arrested, or if the player
|
||
// jumps into Multiplayer from Singleplayer – ensures the script
|
||
// gets cleaned up properly under the correct circumstances
|
||
IF (HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS | FORCE_CLEANUP_FLAG_REPEAT_PLAY))
|
||
SET_PROPERTY_MANAGEMENT_RESULT(PROPERTY_MANAGEMENT_RESULT_FAILURE)
|
||
Script_Cleanup()
|
||
ENDIF
|
||
|
||
// Any initialisation (generally, only mission scripts should set
|
||
// the mission flag to TRUE)
|
||
SET_MISSION_FLAG(TRUE)
|
||
|
||
INITIALIZE_SCRIPT_VARIABLES()
|
||
|
||
// The script loop
|
||
WHILE (TRUE)
|
||
// Maintain the script – perform per-frame functionality
|
||
|
||
//All skips and debug shortcuts-------------------------------
|
||
#IF IS_DEBUG_BUILD
|
||
|
||
PROCESS_TAXI_DEBUG_SKIP(myTaxiData,tDebugState)
|
||
|
||
// Debug Key: Check for Pass (not for Minigmes)
|
||
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S))
|
||
Script_Passed()
|
||
ENDIF
|
||
|
||
// Debug Key: Check for Fail (not for Minigames)
|
||
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
|
||
TAXI_DEBUG_FAIL_TRIGGERED(myTaxiData)
|
||
Script_Failed()
|
||
ENDIF
|
||
|
||
// Debug Key: set vehicle health to 0.0
|
||
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_E))
|
||
IF NOT IS_ENTITY_DEAD(myTaxiData.viTaxi)
|
||
SET_VEHICLE_ENGINE_HEALTH(myTaxiData.viTaxi, 0.0)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
PROCESS_WIDGETS()
|
||
|
||
#ENDIF
|
||
//END DEBUG----------------------------------------------------
|
||
|
||
IF DOES_ENTITY_EXIST(myTaxiData.piTaxiPlayer)
|
||
Main_Taxi_OJ_FollowCar()
|
||
ELSE
|
||
REASSIGN_TAXI_OJ_DRIVER(myTaxiData)
|
||
ENDIF
|
||
|
||
WAIT(0)
|
||
ENDWHILE
|
||
|
||
// Script should never reach here. Always terminate with cleanup function.
|
||
ENDSCRIPT
|
||
|