Files
gtav-src/script/dev_ng/singleplayer/scripts/Minigames/Taxi/Taxi_CutYouIn.sc
T
2025-09-29 00:52:08 +02:00

2493 lines
91 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//=======================================================================================================================================
// Taxi_CutYouIn.sc
// Dev : John R. Diaz
/*
*/
//CHANGELOG==========================================================================================================
//9/27/11 - Reformatting/prettifying all taxi oj 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"
ENUM TAXIOJ_GYN_BONUS
TCYI_BONUS_LOST_COPS = 0,
TCYI_BONUS_TOTAL
ENDENUM
BONUS_FIELD bonusFieldCutYouIn[TCYI_BONUS_TOTAL]
//Local Variables-----------------------------------------------
CONST_FLOAT TAXI_CONST_BONUS_TIME_TO_LOSE_COPS 180.0
CONST_FLOAT TAXI_OJ_CONST_DIST_TO_SEE_AIRPORT 300.0 //350.0
CONST_FLOAT TAXI_OJ_CONST_DIST_TO_SEE_JEWELRY 80.0
CONST_FLOAT TAXI_OJ_CONST_DIST_FROM_PLAYER_TO_JEWELRY_STORE 10.0
CONST_FLOAT TAXI_OJ_CONST_TIME_BEFORE_JEWELRY_STORE_REMINDER 5.0//20.0
CONST_FLOAT TAXI_OJ_CONST_TIME_BEFORE_PASSENGER_SHOOTS_PLAYER 2.0
CONST_FLOAT CONST_TAXI_TIME_TO_LOSE_POLICE_AVG 150.0 //181.0
CONST_FLOAT CONST_TAXI_TIME_TO_LOSE_POLICE_AMAZING 75.0 //120.0 //150.0
CONST_FLOAT TAXI_OJ_CONST_TIME_TO_RETURN_TO_CAB_AFTER_SHOOTING 8.0
CONST_FLOAT TAXI_CYI_LOCAL_COP_REACT_DELAY 15.0
CONST_FLOAT TAXI_CYI_LOCAL_COP_REACT_DELAY_EXT 25.0
CONST_FLOAT TAXI_CYI_LOCAL_COP_REACT_DELAY_MAX 35.0
CONST_INT CONST_TAXI_OJ_CYI_NUM_RESUME_INTERRUPT_LINES 5
CONST_INT TAXI_CONST_BONUS_CASH_SMOOTH_ESCAPE 1000
CONST_INT TAXI_OJ_CONST_WANTED_LEVEL_FOR_THIS_MISSION 2 //3
CONST_INT TAXI_OJ_CONST_RETURN_REMINDER_SHOWN 1
CONST_INT TAXI_OJ_CONST_WAIT_REMINDER_SHOWN 2
CONST_INT TAXI_OJ_CONST_SHOW_ALLEY_CAM_HELP 3
CONST_INT TAXI_OJ_CONST_CLEAR_ALLEY_CAM_HELP 4
CONST_INT TAXI_OJ_CONST_TIME_BEFORE_WARP 40000
CONST_INT TAXI_CONST_TIP_CASH_AMAZING 10000
CONST_INT TAXI_CONST_TIP_CASH_AVERAGE 5000
//Custom Data
TaxiStruct myTaxiData
OBJECT_INDEX oiBankNote
SEQUENCE_INDEX seqIndexTaxiTemp
//Vectors
VECTOR vTaxiJewelryNPCSpot = << 342.6987, -996.7599, 28.2438 >> //LM was here, yet again 12/5/11
VECTOR vTaxiJewelreyInStore = <<321.10886, -996.42853, 28.20932>>//<< 328.4126, -995.5303, 28.2713 >>//<< 342.6987, -996.7599, 28.2438 >>
VECTOR vPassengerPt = << -1042.9464, -2689.5498, 12.7572 >>//<< -1032.4874, -2730.2161, 12.7572 >>
VECTOR vPassengerPickupPt = << -1044.8083, -2694.1379, 12.7280 >>
//VECTOR vAlleyCamPos = <<349.45,-949.97,31.45>>
VECTOR vAlleyCamLookAt = << 348.0136, -993.6165, 31.9655 >>//<<428.000,-2000.000,-177.81>>
//VECTOR vTaxiJewelryStoreParkingSpot = << -600.6864, -310.3101, 33.8214 >>
//Bools
BOOL bDropOffFound
BOOL bTaxiShotsFired
BOOL bBrokeLoyalty //bonus flag - auto as long as player never gets reminded to return to the player
BOOL bTasked = FALSE
BOOL bPassengerIsGoingToBeArrested
BOOL bIsAirportBlipped
BOOL bIsHandoffDone
BOOL bCreateCops
BOOL bFinishedReminder
BOOL bStartedReminder
BOOL bClearCops
//Ints
INT iDebugThrottle = 1
INT iReminderBitField
INT iTipIndex = 0
INT iArrestStateIndex = 0
INT iSoundID_BurglarAlarm = -1
INT iCopNum
INT iCopLinesSaid
TEXT_LABEL_23 sHandoffTrigger1 = "txm8_thank1M_2"
TEXT_LABEL_23 sHandoffTrigger2 = "txm8_thank1T_2"
TEXT_LABEL_23 sHandoffTrigger3 = "txm8_thank1F_2"
TEXT_LABEL_23 sHandoffTrigger4 = "txm8_thank2M_2"
TEXT_LABEL_23 sHandoffTrigger5 = "txm8_thank2T_2"
TEXT_LABEL_23 sHandoffTrigger6 = "txm8_thank2F_2"
TEXT_LABEL_23 sHandoffTrigger7 = "txm8_thank3M_2"
TEXT_LABEL_23 sHandoffTrigger8 = "txm8_thank3T_2"
TEXT_LABEL_23 sHandoffTrigger9 = "txm8_thank3F_2"
TEXT_LABEL_23 sCurrentLine
AGGRO_ARGS aggroArgs
SCRIPT_SHARD_BIG_MESSAGE TaxiMidSize
ENUM TX_OJ_CYI_COP_PEDS
TCP_COP_RIGHT = 0,
TCP_COP_LEFT,
TCP_NUM_COPS
ENDENUM
PED_INDEX piMissionCops[TCP_NUM_COPS]
PED_INDEX piDriverCop
PED_INDEX piAmbientPedFlee[8]
SCENARIO_BLOCKING_INDEX sbiAirportCopBlock
VEHICLE_INDEX viCopCar
//VEHICLE_INDEX viDummyCars[2]
REL_GROUP_HASH relPursuers
//Dialogue Queue----------------------------------------------------------------
BOOL g_bDebug = FALSE
TAXI_OJ_DIALOGUE_Q_DATA tTaxiOJ_DQ_Data
TAXI_OJ_DQ_CONVERSATION_LINE tDialogueLine[CONST_TAXIOJ_SIZE_Q]
ENUM TAXIOJ_STATES_PLAYER_NEAR_JEWELRY_STORE
TAXIOJ_STATE_PNJS_REMINDER_WAIT = 0,
TAXIOJ_STATE_PNJS_REMINDER_1,
TAXIOJ_STATE_PNJS_REMINDER_1_SPEECH,
TAXIOJ_STATE_PNJS_CHECK_REMINDER_2,
TAXIOJ_STATE_PNJS_REMINDER_2,
TAXIOJ_STATE_PNJS_RESUME_1,
TAXIOJ_STATE_PNJS_RESUME_2,
TAXIOJ_STATE_PNJS_CHECK_REMINDER_3,
TAXIOJ_STATE_PNJS_CHECK_FAIL,
TAXIOJ_STATE_PNJS_FAIL,
TAXIOJ_STATE_PNJS_CONCLUDE
ENDENUM
TAXIOJ_STATES_PLAYER_NEAR_JEWELRY_STORE eJewelryStoreStates = TAXIOJ_STATE_PNJS_REMINDER_WAIT
TAXIOJ_STATES_PLAYER_NEAR_JEWELRY_STORE eJewelryStoreLastState
//Floats
//Debug---------------------------------------------------------------------------------------------------------------
#IF IS_DEBUG_BUILD
WIDGET_GROUP_ID taxiRideWidgets
TEXT_LABEL_63 sDebugPoliceTimer
BOOL bDebugTurnOnFreeRide = FALSE
BOOL bDebugShowPoliceTimer
BOOL bDebugActivatePoliceEnding
BOOL bDebugAddBag
TXM_DEBUG_SKIP_STATES tDebugState = TXM_DSS_CHECK_FOR_BUTTON_PRESS
#ENDIF
//FUNCTIONS------------------------------------------------------------------------------------------------------------
ENUM TAXI_OJ_CYI_CRITICAL_PTS
TXCP_JSTORE = 0,
TXCP_COP_SPAWNPT_1,
TXCP_COP_SPAWNPT_2,
TXCP_COP_WALKTOPT_1,
TXCP_COP_WALKTOPT_2
ENDENUM
FUNC VECTOR GET_MISSION_CRITICAL_POINTS(INT iDropoffPt)
SWITCH iDropoffPt
CASE -1
RETURN << 335.4227, -956.4223, 28.3588 >>
BREAK
//Jewelry Store
CASE 0
RETURN << 349.9260, -958.3827, 28.3033 >>//<< 354.5381, -947.7332, 28.3590 >>
BREAK
//Cop SpwnPt #1
CASE 1
RETURN << -1020.5814, -2743.8420, 18.4049 >>
BREAK
//Cop SpwnPt #2 - CLOSEST TO BACK
CASE 2
RETURN << -1043.9473, -2748.6826, 20.3594 >> //<< -1051.2062, -2726.9028, 18.6043 >>
BREAK
//Cop WalkTo #1
CASE 3
RETURN << -1042.3907, -2731.6443, 19.1701 >>
BREAK
//Cop Walkto #2
CASE 4
RETURN << -1045.6769, -2730.1091, 19.1701 >>
BREAK
//Airport dropoff pt
CASE 5
RETURN << -1032.2947, -2731.4495, 19.0458 >>//<< -1040.0483, -2726.1892, 19.0676 >>//<< -1039.9452, -2728.2905, 19.0531 >>
BREAK
//Teleport passenger to side of cop car
CASE 6
RETURN << -1051.0447, -2722.9338, 19.1693 >>
BREAK
//Teleport Cop to just in front of cop car
CASE 7
RETURN << -1052.9054, -2723.3755, 19.1693 >>
BREAK
CASE 8
RETURN << -1042.8121, -2743.0955, 20.3620 >>
BREAK
DEFAULT
RETURN << 354.5381, -947.7332, 28.3590 >>
BREAK
ENDSWITCH
RETURN NULL_VECTOR()
ENDFUNC
/// PURPOSE: Call this to get the different camera positions for the csite cutscene
///
/// PARAMS:
/// index -
/// RETURNS:
///
FUNC VECTOR GET_TAXI_OJ_CYI_ALT_END_CS_CAM_POS(INT index)
VECTOR vCamPos
SWITCH index
//By the entrance
CASE 0
vCamPos = << -1040.4861, -2726.0576, 21.4491 >>
BREAK
//Shot of car coming
CASE 4
vCamPos = << -1044.8472, -2726.2390, 20.2197 >> //<< -1046.0826, -2724.3037, 20.2183 >>
BREAK
//Look away from car while door opens
CASE 6
vCamPos = << -1045.2518, -2733.1543, 23.9084 >>
BREAK
//Lookaway shot while peds are teleported
CASE 5
vCamPos = << -1053.6528, -2720.4998, 20.1615 >>
BREAK
//Int of cab
CASE 1
vCamPos = << -1042.0082, -2729.2322, 21.2022 >>
BREAK
//Right of Cab
CASE 2
vCamPos = << -1049.7991, -2725.0686, 20.7481 >>
BREAK
//Facing the cab
CASE 3
vCamPos = << -1043.8876, -2723.7827, 20.6874 >>
BREAK
//New shots
//Facing passenger shot #1
CASE 7
vCamPos = << -1041.9169, -2746.2385, 22.2494 >>
BREAK
//Facing passenger from car
CASE 8
vCamPos = << -1041.8114, -2739.3528, 21.2173 >> //<< -1043.8667, -2738.1841, 20.3518 >>
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_CYI_ALT_END_CS_CAM_ROT(INT index)
VECTOR vCamDir
SWITCH index
//By the entrance
CASE 0
vCamDir = << -15.0777, 0.0000, 116.3223 >>
BREAK
Case 4
vCamDir = << -0.0351, 0.0992, 32.6067 >> //<< -0.4138, 0.0000, 32.6908 >>
BREAK
CASE 5
vCamDir = << 1.4039, -0.0000, -83.0298 >>
BREAK
//Look away from car while door opens
CASE 6
vCamDir = << -36.2279, -0.0000, -13.9491 >>
BREAK
//Int of cab
CASE 1
vCamDir = << -7.6081, 0.0000, 58.9461 >>
BREAK
//Right of Cab
CASE 2
vCamDir = << -3.9964, -0.0000, -21.0031 >>
BREAK
//Facing the cab
CASE 3
vCamDir = << -3.9964, 0.0000, 64.1173 >>
BREAK
//New shots
//Facing passenger shot #1
CASE 7
vCamDir = << -9.2396, -0.0000, -4.2184 >>
BREAK
//Facing passenger from car
CASE 8
vCamDir = << -5.1729, 0.1144, -33.6602 >> //<< -1.2737, 0.0000, -13.2514 >>
BREAK
ENDSWITCH
RETURN vCamDir
ENDFUNC
/// PURPOSE:A central location for all the vehicle recording names used in this mission.
///
/// PARAMS:
/// iNum - Corresponds to which car recording we want
/// RETURNS:
///
FUNC STRING GET_TAXI_OJ_CYI_VEHICLE_RECORDING_NAME(INT iNum)
STRING sVehRecName
SWITCH iNum
CASE 1
sVehRecName = "txm8_pol1_A"
BREAK
ENDSWITCH
RETURN sVehRecName
ENDFUNC
ENUM TAXI_CYI_MODELS
TCM_PASSENGER = 0,
TCM_CAR_1,
TCM_CAR_2,
TCM_COP_MALE,
TCM_COP_CAR
ENDENUM
FUNC MODEL_NAMES GET_TAXI_OJ_CYI_MODEL_NAMES(TAXI_CYI_MODELS index)
//Native Data
MODEL_NAMES mnModel
SWITCH index
CASE TCM_PASSENGER
mnModel = U_M_M_JewelThief
BREAK
CASE TCM_CAR_1
mnModel = MANANA
BREAK
CASE TCM_CAR_2
mnModel = ISSI2
BREAK
CASE TCM_COP_MALE
mnModel = S_M_Y_Cop_01
BREAK
CASE TCM_COP_CAR
mnModel = POLICE2
BREAK
DEFAULT
mnModel = U_M_M_JewelThief
SCRIPT_ASSERT("Passed invalid index to GET_TAXI_OJ_CYI_MODEL_NAMES()")
BREAK
ENDSWITCH
RETURN mnModel
ENDFUNC
FUNC BOOL TAXICYI_IS_THIS_CONVERSATION_PLAYING(STRING sRoot)
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
TEXT_LABEL txtRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF ARE_STRINGS_EQUAL(sRoot, txtRoot)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE: Request all of our assets to be streamed, call this in prestreaming or init.
///
PROC REQUEST_TAXI_ODDJOB_CYI_STREAMS_STAGE_01()
//Load text and UI
TAXI_INIT_SHARED_STREAMS()
REQUEST_MODEL(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_PASSENGER))
TaxiMidSize.siMovie = REQUEST_MG_MIDSIZED_MESSAGE()
REQUEST_SCRIPT_AUDIO_BANK("Alarms")
REQUEST_ANIM_DICT("MOVE_P_M_ZERO_RUCKSACK")
// REQUEST_MODEL(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_CAR_1))
// REQUEST_MODEL(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_CAR_2))
CDEBUG1LN(DEBUG_OJ_TAXI,"Requested Taxi ODDJOB CYI - Initial Assets")
ENDPROC
PROC RELEASE_TAXI_ODDJOB_CYI_STREAMS_STAGE_01()
// SET_MODEL_AS_NO_LONGER_NEEDED(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_CAR_1))
// SET_MODEL_AS_NO_LONGER_NEEDED(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_CAR_2))
CDEBUG1LN(DEBUG_OJ_TAXI,"Released Taxi ODDJOB CYI - Initial Assets")
ENDPROC
PROC REQUEST_TAXI_ODDJOB_CYI_STREAMS_END()
REQUEST_ANIM_DICT("oddjobs@taxi@cyi")
REQUEST_MODEL(P_BANKNOTE_S)
ENDPROC
PROC RELEASE_TAXI_ODDJOB_CYI_STREAMS_END()
REMOVE_ANIM_DICT("oddjobs@taxi@cyi")
SET_MODEL_AS_NO_LONGER_NEEDED(P_BANKNOTE_S)
ENDPROC
PROC REQUEST_TAXI_ODDJOB_CYI_STREAMS_STAGE_ALT_ENDING()
//Only request these if player has taken too long
REQUEST_MODEL(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_COP_MALE))
REQUEST_MODEL(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_COP_CAR))
REQUEST_VEHICLE_RECORDING(000,GET_TAXI_OJ_CYI_VEHICLE_RECORDING_NAME(1))
CDEBUG1LN(DEBUG_OJ_TAXI,"Requested Taxi ODDJOB CYI - Alt Ending Assets")
ENDPROC
PROC RELEASE_TAXI_ODDJOB_CYI_STREAMS_STAGE_ALT_ENDING()
SET_MODEL_AS_NO_LONGER_NEEDED(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_COP_MALE))
SET_MODEL_AS_NO_LONGER_NEEDED(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_COP_CAR))
REMOVE_VEHICLE_RECORDING(000,GET_TAXI_OJ_CYI_VEHICLE_RECORDING_NAME(1))
CDEBUG1LN(DEBUG_OJ_TAXI,"Released Taxi ODDJOB CYI - Alt Ending Assets")
ENDPROC
FUNC BOOL HAVE_TAXI_OJ_CYI_END_ASSETS_LOADED()
IF NOT HAS_ANIM_DICT_LOADED("oddjobs@taxi@cyi")
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading oddjobs@taxi@cyi",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(P_BANKNOTE_S)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading P_BANKNOTE_S",iDebugThrottle)
RETURN FALSE
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL HAVE_TXM_CYI_ALT_ENDING_STREAMS_LOADED()
IF NOT HAS_MODEL_LOADED(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_COP_MALE))
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading S_M_Y_Cop_01",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_COP_CAR))
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading POLICE2",iDebugThrottle)
RETURN FALSE
ENDIF
//All my vehicle recordings -------------------
IF NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(000,GET_TAXI_OJ_CYI_VEHICLE_RECORDING_NAME(1))
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMING - Vehicle Recording Loading txm8_pol1_A000...",iDebugThrottle)
RETURN FALSE
ENDIF
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_CYI_STAGE_01_ASSETS_LOADED()
IF NOT TAXI_SHARED_ASSETS_STREAMED(iDebugThrottle)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading shared assets",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_SCALEFORM_MOVIE_LOADED(TaxiMidSize.siMovie)
#IF IS_DEBUG_BUILD
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading TaxiMidSize.siMovie",iDebugThrottle)
#ENDIF
RETURN FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_PASSENGER))
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading U_M_M_JewelThief",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED("MOVE_P_M_ZERO_RUCKSACK")
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading MOVE_P_M_ZERO_RUCKSACK",iDebugThrottle)
RETURN FALSE
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL HAVE_TAXI_OJ_CYI_STAGE_02_ASSETS_LOADED()
// IF NOT HAS_MODEL_LOADED(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_CAR_1))
// CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading MANANA",iDebugThrottle)
// RETURN FALSE
// ENDIF
//
// IF NOT HAS_MODEL_LOADED(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_CAR_2))
// CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading ISSI2",iDebugThrottle)
// RETURN FALSE
// ENDIF
RETURN TRUE
ENDFUNC
PROC Script_Cleanup()
#IF IS_DEBUG_BUILD
IF DOES_WIDGET_GROUP_EXIST(taxiRideWidgets)
DELETE_WIDGET_GROUP(taxiRideWidgets)
ENDIF
CLEANUP_TAXI_WIDGETS()
#ENDIF
//Mission specific cleanup
//Set roads disabled back to on
TAXI_PREP_SET_ROADS_IN_AREA_FOR_PICKUP(GET_MISSION_CRITICAL_POINTS(-1),TRUE)
INT iCopIter
REPEAT TCP_NUM_COPS iCopIter
//Clean up cop 1
IF NOT IS_ENTITY_DEAD(piMissionCops[iCopIter])
SET_PED_AS_NO_LONGER_NEEDED(piMissionCops[iCopIter])
ENDIF
ENDREPEAT
// //Misc cars to cleanup
// IF NOT IS_ENTITY_DEAD( viDummyCars[0])
// SET_VEHICLE_AS_NO_LONGER_NEEDED( viDummyCars[0])
// ENDIF
//
// IF NOT IS_ENTITY_DEAD( viDummyCars[1])
// SET_VEHICLE_AS_NO_LONGER_NEEDED( viDummyCars[1])
// ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_PASSENGER))
//Make sure soundID is valid
ODDJOB_STOP_SOUND(iSoundID_BurglarAlarm)
DISTANT_COP_CAR_SIRENS(FALSE)
SET_CREATE_RANDOM_COPS(TRUE)
RELEASE_SCRIPT_AUDIO_BANK()
STOP_AUDIO_SCENE("TAXI_CUT_U_IN")
REMOVE_ANIM_DICT("MOVE_P_M_ZERO_RUCKSACK")
RELEASE_TAXI_ODDJOB_CYI_STREAMS_STAGE_01()
RELEASE_TAXI_ODDJOB_CYI_STREAMS_STAGE_ALT_ENDING()
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
//SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(AP1_02_DOOR_L, << -1042.22, -2747.98, 21.97 >>, TRUE, 0)
REMOVE_SCENARIO_BLOCKING_AREA(sbiAirportCopBlock)
IF DOES_ENTITY_EXIST(oiBankNote)
DELETE_OBJECT(oiBankNote)
ENDIF
TERMINATE_THIS_THREAD()
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)
Script_Cleanup()
ENDPROC
PROC INITIALIZE_SCRIPT_VARIABLES(TAXI_MISSION_TYPES thisMissionType = TXM_07_CUTYOUIN)
TAXI_ODDJOB_GLOBAL_SETUP(myTaxiData,thisMissionType)
// 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,2,8)
//Airport
myTaxiData.vTaxiOJ_WarpPtPickup = << -1069.2772, -2666.1558, 12.6650 >>
myTaxiData.fTaxiOJ_WarpPtHeadingPickup = 202.9
//Jewelry Store
myTaxiData.vTaxiOJ_WarpPtDropoff = << 323.9376, -956.7155, 28.3460 >> //LM chizange for jewelry store downtown
myTaxiData.fTaxiOJ_WarpPtHeadingDropoff = 262.6098
myTaxiData.vTaxiOJ_PassengerGoToPt = << -1037.71118, -2748.46313, 20.36420 >>
#IF IS_DEBUG_BUILD
#IF DEBUG_iTurnOnAllDXDebug
ENABLE_ALL_DIALOGUE_DEBUG()
#ENDIF
taxiRideWidgets = START_WIDGET_GROUP("Taxi Ride - Cut You In")
INIT_ODDJOB_TAXI_WIDGETS()
ADD_WIDGET_STRING("Police Escape Debug")
ADD_WIDGET_BOOL("Show Police escape timer",bDebugShowPoliceTimer)
ADD_WIDGET_BOOL("Activate Police Ending", bDebugActivatePoliceEnding)
ADD_WIDGET_STRING("Passenger Debug")
ADD_WIDGET_BOOL("Add bag",bDebugAddBag)
ADD_WIDGET_STRING("Alley Cam Rot")
ADD_WIDGET_FLOAT_SLIDER("Alley Cam look X", vAlleyCamLookAt.x, -2000.0, 2000.0, 0.1)
ADD_WIDGET_FLOAT_SLIDER("Alley Cam look Y", vAlleyCamLookAt.y, -2000.0, 2000.0, 0.1)
ADD_WIDGET_FLOAT_SLIDER("Alley Cam look Z", vAlleyCamLookAt.z, -2000.0, 2000.0, 0.1)
STOP_WIDGET_GROUP()
#ENDIF
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~-------------------------------~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~----")
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~~~~~~~~~~~~ Oddjobs | Taxi | Cut You In ~~~~~~~~~~~~~~~~~~~----------")
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~-------------------------------~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~----")
ENDPROC
#IF IS_DEBUG_BUILD
PROC PROCESS_WIDGETS()
UPDATE_ZVOLUME_WIDGETS()
UPDATE_TAXI_WIDGETS(myTaxiData,tTaxiOJ_DQ_Data)
IF bDebugAddBag
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger,PED_COMP_SPECIAL,1,0)
bDebugAddBag = FALSE
ENDIF
ENDIF
IF bDebugShowPoliceTimer
IF myTaxiData.tTaxiOJ_RideState = TRS_ESCAPE_POLICE
OR myTaxiData.tTaxiOJ_RideState = TRS_POLICE_ESCAPED
IF IS_TAXI_TIMER_STARTED(myTaxiData, TT_POLICE)
sDebugPoliceTimer= "Police Escape Time: "
sDebugPoliceTimer += TAXI_UTILS_GET_STRING_FROM_FLOAT_SP(GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE))
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) > TAXI_CONST_BONUS_TIME_TO_LOSE_COPS
DRAW_DEBUG_TEXT_2D(sDebugPoliceTimer,<<0.05,TAXI_UI_LOWEST_DEBUG_Y_ABOVE_MINI_MAP,0.0>>,255,0,0)
ELSE
DRAW_DEBUG_TEXT_2D(sDebugPoliceTimer,<<0.05,TAXI_UI_LOWEST_DEBUG_Y_ABOVE_MINI_MAP,0.0>>)
ENDIF
ENDIF
ELSE
//Show if bonus has been unlocked or not
IF IS_BIT_SET(myTaxiData.iTaxiOJ_CashBonusInfo[ENUM_TO_INT(TCYI_BONUS_LOST_COPS)].status, BONUS_STATUS_AWARDED)
sDebugPoliceTimer= "Private Eye Bonus UNLOCKED "
DRAW_DEBUG_TEXT_2D(sDebugPoliceTimer,<<0.05,TAXI_UI_LOWEST_DEBUG_Y_ABOVE_MINI_MAP,0.0>>)
ELSE
sDebugPoliceTimer= "Private Eye Bonus LOCKED "
DRAW_DEBUG_TEXT_2D(sDebugPoliceTimer,<<0.05,TAXI_UI_LOWEST_DEBUG_Y_ABOVE_MINI_MAP,0.0>>,255,0,0)
ENDIF
ENDIF
ENDIF
IF bDebugActivatePoliceEnding
bPassengerIsGoingToBeArrested = TRUE
bDebugActivatePoliceEnding = FALSE
ENDIF
ENDPROC
#ENDIF
FUNC BOOL IS_THIS_THE_HANDOFF_LINE()
sCurrentLine = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
IF ARE_STRINGS_EQUAL(sHandoffTrigger1, sCurrentLine)
OR ARE_STRINGS_EQUAL(sHandoffTrigger2, sCurrentLine)
OR ARE_STRINGS_EQUAL(sHandoffTrigger3, sCurrentLine)
OR ARE_STRINGS_EQUAL(sHandoffTrigger4, sCurrentLine)
OR ARE_STRINGS_EQUAL(sHandoffTrigger5, sCurrentLine)
OR ARE_STRINGS_EQUAL(sHandoffTrigger6, sCurrentLine)
OR ARE_STRINGS_EQUAL(sHandoffTrigger7, sCurrentLine)
OR ARE_STRINGS_EQUAL(sHandoffTrigger8, sCurrentLine)
OR ARE_STRINGS_EQUAL(sHandoffTrigger9, sCurrentLine)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
//This handles if the player leaves the taxi and is too close to Vincent during the jewelry store sequence
PROC TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX()
IF g_bDebug
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE",iDebugThrottle)
ENDIF
IF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
SWITCH eJewelryStoreStates
CASE TAXIOJ_STATE_PNJS_REMINDER_WAIT
IF GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.piTaxiPassenger, vTaxiJewelryNPCSpot) < 16
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE: TAXIOJ_STATE_PNJS_REMINDER_WAIT - ped is < 16m from his destination start caring about aggro = ",GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.piTaxiPassenger, vTaxiJewelryNPCSpot))
// GIVE_WEAPON_TO_PED(myTaxiData.piTaxiPassenger, WEAPONTYPE_COMBATPISTOL, 50)
eJewelryStoreStates = TAXIOJ_STATE_PNJS_REMINDER_1
ENDIF
BREAK
CASE TAXIOJ_STATE_PNJS_REMINDER_1
//Player is bothering Vince on his way to the heist
IF GET_PLAYER_DISTANCE_FROM_ENTITY(myTaxiData.piTaxiPassenger) < TAXI_OJ_CONST_DIST_FROM_PLAYER_TO_JEWELRY_STORE
GIVE_WEAPON_TO_PED(myTaxiData.piTaxiPassenger, WEAPONTYPE_COMBATPISTOL, 50, TRUE)
CLEAR_SEQUENCE_TASK(seqIndexTaxiTemp)
OPEN_SEQUENCE_TASK(seqIndexTaxiTemp)
//Stop 1
//TASK_TURN_PED_TO_FACE_ENTITY(NULL, myTaxiData.piTaxiPlayer)
//TASK_LOOK_AT_ENTITY(NULL,myTaxiData.piTaxiPlayer,TAXI_LOOK_AT_TIME,SLF_FAST_TURN_RATE)
TASK_AIM_GUN_AT_ENTITY(NULL,PLAYER_PED_ID(),-1)
CLOSE_SEQUENCE_TASK(seqIndexTaxiTemp)
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, seqIndexTaxiTemp)
CLEAR_SEQUENCE_TASK(seqIndexTaxiTemp)
TAXI_RESET_TIMERS(myTaxiData, TT_PENALTY)
eJewelryStoreStates = TAXIOJ_STATE_PNJS_REMINDER_1_SPEECH
ENDIF
BREAK
CASE TAXIOJ_STATE_PNJS_REMINDER_1_SPEECH
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_PENALTY) > 1.5
IF eJewelryStoreLastState <> TAXIOJ_STATE_PNJS_RESUME_1
//Turn to face the player and stop in place til player leaves
IF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPlayer)
IF IS_VEHICLE_DRIVEABLE( myTaxiData.viTaxi)
IF IS_PED_IN_VEHICLE(myTaxiData.piTaxiPlayer, myTaxiData.viTaxi)
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_REMINDER_1_SPEECH - Play TAXI_DI_CYI_DONT_FOLLOW_ME")
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_CYI_DONT_FOLLOW_ME,TRUE)
ELSE
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_REMINDER_1_SPEECH - Play TAXI_DI_CYI_GET_BACK_TO_CAR")
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_CYI_GET_BACK_TO_CAR, TRUE, TRUE)
ENDIF
ENDIF
ENDIF
bFinishedReminder= FALSE
bBrokeLoyalty = TRUE
TAXI_RESET_TIMERS(myTaxiData, TT_PENALTY)
TAXI_PAUSE_TIMER(myTaxiData, TT_DROPOFF)
eJewelryStoreStates = TAXIOJ_STATE_PNJS_CHECK_REMINDER_2
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_REMINDER_1_SPEECH - eJewelryStoreStates = TAXIOJ_STATE_PNJS_CHECK_REMINDER_2")
ELSE
TAXI_CANCEL_TIMERS(myTaxiData, TT_PENALTY)
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_REMINDER_1_SPEECH - eJewelryStoreStates = TAXIOJ_STATE_PNJS_FAIL")
eJewelryStoreStates = TAXIOJ_STATE_PNJS_FAIL
ENDIF
ENDIF
BREAK
CASE TAXIOJ_STATE_PNJS_CHECK_REMINDER_2
//If player is cooperating
IF GET_PLAYER_DISTANCE_FROM_ENTITY(myTaxiData.piTaxiPassenger) >= TAXI_OJ_CONST_DIST_FROM_PLAYER_TO_JEWELRY_STORE
eJewelryStoreStates = TAXIOJ_STATE_PNJS_RESUME_1
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_CHECK_REMINDER_2 - eJewelryStoreStates = TAXIOJ_STATE_PNJS_RESUME_1")
//Otherwise remind him one last time
ELIF bStartedReminder
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
AND NOT IS_SCRIPTED_CONVERSATION_ONGOING()
IF NOT bFinishedReminder
TAXI_RESET_TIMERS(myTaxiData, TT_PENALTY)
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_CHECK_REMINDER_2 starting penalty timer after speech is said")
bFinishedReminder = TRUE
ELSE
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_PENALTY) > TAXI_OJ_CONST_TIME_BEFORE_JEWELRY_STORE_REMINDER
TAXI_CANCEL_TIMERS(myTaxiData, TT_PENALTY)
eJewelryStoreStates = TAXIOJ_STATE_PNJS_FAIL
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_CHECK_REMINDER_2 - eJewelryStoreStates = TAXIOJ_STATE_PNJS_FAIL")
ENDIF
ENDIF
ENDIF
ELIF NOT bStartedReminder
IF TAXICYI_IS_THIS_CONVERSATION_PLAYING("txm8_lvMe1")
OR TAXICYI_IS_THIS_CONVERSATION_PLAYING("txm8_lvMe2")
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_CHECK_REMINDER_2 - warning dialog played, setting flag")
bStartedReminder = TRUE
ENDIF
ENDIF
BREAK
CASE TAXIOJ_STATE_PNJS_RESUME_1
TAXI_UNPAUSE_TIMER(myTaxiData, TT_DROPOFF)
IF GET_SCRIPT_TASK_STATUS(myTaxiData.piTaxiPassenger,SCRIPT_TASK_PERFORM_SEQUENCE) <> FINISHED_TASK
CLEAR_SEQUENCE_TASK(seqIndexTaxiTemp)
OPEN_SEQUENCE_TASK(seqIndexTaxiTemp)
//Send back to store
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vTaxiJewelryNPCSpot,PEDMOVEBLENDRATIO_WALK, TAXI_OJ_CONST_TIME_BEFORE_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << 337.3356, -997.7456, 28.1318 >>,PEDMOVEBLENDRATIO_SPRINT, TAXI_OJ_CONST_TIME_BEFORE_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,vTaxiJewelreyInStore,PEDMOVEBLENDRATIO_SPRINT, TAXI_OJ_CONST_TIME_BEFORE_WARP)
CLOSE_SEQUENCE_TASK(seqIndexTaxiTemp)
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, seqIndexTaxiTemp)
CLEAR_SEQUENCE_TASK(seqIndexTaxiTemp)
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_RESUME_1 - eJewelryStoreStates = TAXIOJ_STATE_PNJS_RESUME_1")
eJewelryStoreLastState = TAXIOJ_STATE_PNJS_RESUME_1
eJewelryStoreStates = TAXIOJ_STATE_PNJS_REMINDER_WAIT
ENDIF
BREAK
CASE TAXIOJ_STATE_PNJS_FAIL
IF IS_TAXI_TIMER_STARTED(myTaxiData, TT_PENALTY)
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_PENALTY) > TAXI_OJ_CONST_TIME_BEFORE_PASSENGER_SHOOTS_PLAYER
TAXI_RESET_TIMERS(myTaxiData, TT_DROPOFF)
//Fail. He should only shoot the player if he'd been hurt.
CLEAR_SEQUENCE_TASK(seqIndexTaxiTemp)
OPEN_SEQUENCE_TASK(seqIndexTaxiTemp)
// IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(myTaxiData.piTaxiPassenger, PLAYER_PED_ID())
// TASK_SHOOT_AT_ENTITY(NULL, PLAYER_PED_ID(),-1,FIRING_TYPE_CONTINUOUS)
// ELSE
// TASK_SMART_FLEE_PED(NULL, PLAYER_PED_ID(), 300.0, -1)
// ENDIF
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_FAIL - Shoot!")
TASK_SHOOT_AT_ENTITY(NULL, PLAYER_PED_ID(),-1,FIRING_TYPE_CONTINUOUS)
CLOSE_SEQUENCE_TASK(seqIndexTaxiTemp)
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, seqIndexTaxiTemp)
CLEAR_SEQUENCE_TASK(seqIndexTaxiTemp)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, myTaxiData.relPassenger, RELGROUPHASH_PLAYER)
SET_PED_KEEP_TASK(myTaxiData.piTaxiPassenger,TRUE)
bTasked = TRUE
IF DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
AND GET_BLIP_ALPHA(myTaxiData.blipTaxiDropOff) > 0
SET_BLIP_ALPHA(myTaxiData.blipTaxiDropOff,0)
SET_BLIP_ROUTE(myTaxiData.blipTaxiDropOff,FALSE)
CLEAR_THIS_PRINT("TAXI_OBJ_CYI_1B")
ENDIF
eJewelryStoreStates = TAXIOJ_STATE_PNJS_CONCLUDE
CDEBUG1LN(DEBUG_OJ_TAXI,"eJewelryStoreStates = TAXIOJ_STATE_PNJS_CONCLUDE")
ENDIF
ELSE
TAXI_RESET_TIMERS(myTaxiData, TT_PENALTY)
IF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPlayer)
IF IS_VEHICLE_DRIVEABLE( myTaxiData.viTaxi)
IF IS_PED_IN_VEHICLE(myTaxiData.piTaxiPlayer, myTaxiData.viTaxi)
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_FAIL - Play TAXI_DI_CYI_DONT_FOLLOW_ME")
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_CYI_DONT_FOLLOW_ME,TRUE)
ELSE
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX: TAXIOJ_STATE_PNJS_FAIL - Play TAXI_DI_CYI_GET_BACK_TO_CAR")
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_CYI_GET_BACK_TO_CAR,TRUE,TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE TAXIOJ_STATE_PNJS_CONCLUDE
IF NOT IS_SCRIPTED_CONVERSATION_ONGOING()
AND GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF) > 2.0
TAXI_SET_FAIL(myTaxiData, "Passenger shoots player", TFS_TIME_EXPIRED)
ENDIF
BREAK
ENDSWITCH
ENDIF
ENDPROC
PROC TAXI_OJ_CYI_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_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: The tip for this mission is based primarily off of the time it took you to lose the police
///
PROC EVALUATE_TIME_TAKEN_TO_LOSE_POLICE_IN_TAXI_CYI()
CDEBUG1LN(DEBUG_OJ_TAXI,"CYI Time taken to lose cops = ", GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_RIDETODEST))
//Lost cops super fast
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_RIDETODEST) < CONST_TAXI_TIME_TO_LOSE_POLICE_AMAZING
AND NOT bPassengerIsGoingToBeArrested
myTaxiData.iTaxiOJ_CashTipToAdd += 12
//myTaxiData.iTaxiOJ_CashTip += 10
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_TO_AIRPORT_AMAZING,TRUE,FALSE,TRUE)
CDEBUG1LN(DEBUG_OJ_TAXI,"CYI Taxi Tip for losing cops = Amazing")
//Took mad long to lose the cops
ELIF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_RIDETODEST) > CONST_TAXI_TIME_TO_LOSE_POLICE_AVG
OR bPassengerIsGoingToBeArrested
myTaxiData.iTaxiOJ_CashTipToAdd = -10
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_TO_AIRPORT_ASS,TRUE,FALSE,TRUE)
bPassengerIsGoingToBeArrested = TRUE
REQUEST_TAXI_ODDJOB_CYI_STREAMS_STAGE_ALT_ENDING()
CDEBUG1LN(DEBUG_OJ_TAXI,"CYI Taxi Tip for losing cops = Ass")
//Average
ELSE
myTaxiData.iTaxiOJ_CashTipToAdd += 5
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_TO_AIRPORT_AVG,TRUE,FALSE,TRUE)
CDEBUG1LN(DEBUG_OJ_TAXI,"CYI Taxi Tip for losing cops = Average")
ENDIF
ENDPROC
/// PURPOSE: Cut You In is the one mission that has a different tipping standard, as such it has it's own convert tip to cash func
///
/// PARAMS:
/// myTaxiData - global taxi data
PROC CYI_CONVERT_TAXI_TIP_TO_CASH()
IF myTaxiData.iTaxiOJ_CashTip >= myTaxiData.iTaxiOJ_CashTipAmazing
myTaxiData.iTaxiOJ_CashTip = TAXI_CONST_TIP_CASH_AMAZING
ELIF myTaxiData.iTaxiOJ_CashTip <= 0
myTaxiData.iTaxiOJ_CashTip = 0
ELSE
myTaxiData.iTaxiOJ_CashTip = TAXI_CONST_TIP_CASH_AVERAGE
ENDIF
ENDPROC
PROC SAFE_TASK_ENTER_VEHICLE(PED_INDEX &eEntity, VEHICLE_INDEX &viVehicle, VEHICLE_SEAT vSeat = VS_DRIVER, FLOAT MoveBlendRatio = PEDMOVEBLENDRATIO_WALK, ENTER_EXIT_VEHICLE_FLAGS iFlags = ECF_RESUME_IF_INTERRUPTED )
SEQUENCE_INDEX siTemp
IF NOT IS_ENTITY_DEAD(eEntity)
IF IS_VEHICLE_DRIVEABLE(viVehicle)
CLEAR_SEQUENCE_TASK(siTemp)
OPEN_SEQUENCE_TASK(siTemp)
CLEAR_PED_TASKS_IMMEDIATELY(eEntity)
TASK_STAND_STILL(NULL,GET_RANDOM_INT_IN_RANGE(1000,2000))
TASK_ENTER_VEHICLE(NULL,viVehicle,TAXI_OJ_CONST_TIME_BEFORE_WARP,vSeat,MoveBlendRatio,iFlags)
CLOSE_SEQUENCE_TASK(siTemp)
TASK_PERFORM_SEQUENCE(eEntity, siTemp)
CLEAR_SEQUENCE_TASK(siTemp)
ENDIF
ENDIF
ENDPROC
FUNC STRING GET_PLAYER_HAND_OVER_ANIM_STRING(VEHICLE_SEAT eSeat)
SWITCH eSeat
CASE VS_FRONT_RIGHT RETURN "std_hand_off_ps_driver"
CASE VS_BACK_RIGHT RETURN "std_hand_off_rps_driver"
CASE VS_BACK_LEFT RETURN "std_hand_off_rds_driver"
ENDSWITCH
RETURN ""
ENDFUNC
FUNC STRING GET_PASSENGER_HAND_OVER_ANIM_STRING(VEHICLE_SEAT eSeat)
SWITCH eSeat
CASE VS_FRONT_RIGHT RETURN "std_hand_off_ps_passenger"
CASE VS_BACK_RIGHT RETURN "std_hand_off_rps_passenger"
CASE VS_BACK_LEFT RETURN "std_hand_off_rds_passenger"
ENDSWITCH
RETURN ""
ENDFUNC
FUNC STRING GET_MONEY_HAND_OVER_ANIM_STRING(VEHICLE_SEAT eSeat)
SWITCH eSeat
CASE VS_FRONT_RIGHT RETURN "std_hand_off_ps_money"
CASE VS_BACK_RIGHT RETURN "std_hand_off_rps_money"
CASE VS_BACK_LEFT RETURN "std_hand_off_rds_money"
ENDSWITCH
RETURN ""
ENDFUNC
/// PURPOSE: Handles the alternate dropoff scenario for the passenger
///
FUNC BOOL UPDATE_TAXI_PASSENGER_ARREST_FOR_CYI()
SEQUENCE_INDEX tempSequenceIndex
VECTOR vTemp
// TODO: REMOVE VTEMP AFTER THIS SCENE HAS BEEN POLISHED
vTemp = vTemp
IF iArrestStateIndex > 2
SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(PLAYER_ID())
ENDIF
SWITCH iArrestStateIndex
//Turn on sirens
//Disable random cops from spawning
//Tell passenger where to go
CASE - 1
SCRIPT_ASSERT("TEST ARREST")
iArrestStateIndex++
BREAK
CASE 0
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
SET_CREATE_RANDOM_COPS(FALSE)
CLEAR_SEQUENCE_TASK(tempSequenceIndex)
OPEN_SEQUENCE_TASK(tempSequenceIndex)
TASK_LEAVE_ANY_VEHICLE(NULL,0,ECF_DONT_CLOSE_DOOR)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<<-1041.8997, -2745.1133, 20.3644>>,1.25)
CLOSE_SEQUENCE_TASK(tempSequenceIndex)
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, tempSequenceIndex)
CLEAR_SEQUENCE_TASK(tempSequenceIndex)
viCopCar = CREATE_VEHICLE( GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_COP_CAR), << -1067.1459, -2579.6316, 19.7762 >>, 150 )
piDriverCop = CREATE_PED_INSIDE_VEHICLE(viCopCar,PEDTYPE_MISSION,GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_COP_MALE))
TAXI_RESET_TIMERS(myTaxiData, TT_POLICE)
CDEBUG1LN(DEBUG_OJ_TAXI,"going to arrest state 1")
iArrestStateIndex++
BREAK
//Spawn both cops have them run to their FREEZE points
CASE 1
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) > 0.5
IF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
IF NOT IS_ENTITY_DEAD(piMissionCops[TCP_COP_RIGHT])
TASK_LOOK_AT_ENTITY(piMissionCops[TCP_COP_RIGHT], myTaxiData.piTaxiPassenger, -1, SLF_SLOW_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
ADD_PED_FOR_DIALOGUE(myTaxiData.tTaxiOJ_Convo,4,piMissionCops[TCP_COP_RIGHT],"TaxiOJCop1")
SET_AMBIENT_VOICE_NAME(piMissionCops[TCP_COP_RIGHT], "TaxiOJCop1")
ENDIF
IF NOT IS_ENTITY_DEAD(piMissionCops[TCP_COP_LEFT])
TASK_LOOK_AT_ENTITY(piMissionCops[TCP_COP_LEFT], myTaxiData.piTaxiPassenger, -1, SLF_SLOW_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
ENDIF
ENDIF
iArrestStateIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - Police tasked to look at the guy")
ENDIF
BREAK
CASE 2
IF NOT IS_ENTITY_DEAD(piMissionCops[TCP_COP_RIGHT])
AND NOT IS_ENTITY_DEAD(piMissionCops[TCP_COP_LEFT])
AND NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
IF IS_ENTITY_IN_ANGLED_AREA( myTaxiData.piTaxiPassenger,<<-1032.675171,-2738.775146,19.169693>>, <<-1041.510132,-2733.615234,21.545042>>, 2.0)
// tasking the arrest
OPEN_SEQUENCE_TASK(tempSequenceIndex)
TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY(NULL,myTaxiData.piTaxiPassenger, myTaxiData.piTaxiPassenger, PEDMOVEBLENDRATIO_WALK, FALSE, 4.0)
TASK_AIM_GUN_AT_ENTITY(NULL,myTaxiData.piTaxiPassenger,-1)
CLOSE_SEQUENCE_TASK(tempSequenceIndex)
TASK_PERFORM_SEQUENCE(piMissionCops[TCP_COP_RIGHT], tempSequenceIndex)
CLEAR_SEQUENCE_TASK(tempSequenceIndex)
SET_PED_KEEP_TASK(piMissionCops[TCP_COP_RIGHT],TRUE)
OPEN_SEQUENCE_TASK(tempSequenceIndex)
TASK_STAND_STILL(NULL, 1500)
TASK_AIM_GUN_AT_ENTITY(NULL,myTaxiData.piTaxiPassenger,2000)
TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY(NULL,myTaxiData.piTaxiPassenger, myTaxiData.piTaxiPassenger, PEDMOVEBLENDRATIO_WALK, FALSE, 4.0)
TASK_AIM_GUN_AT_ENTITY(NULL,myTaxiData.piTaxiPassenger,-1)
CLOSE_SEQUENCE_TASK(tempSequenceIndex)
TASK_PERFORM_SEQUENCE(piMissionCops[TCP_COP_LEFT], tempSequenceIndex)
CLEAR_SEQUENCE_TASK(tempSequenceIndex)
SET_PED_KEEP_TASK(piMissionCops[TCP_COP_LEFT],TRUE)
//Task passenger to freeze
OPEN_SEQUENCE_TASK(tempSequenceIndex)
TASK_TURN_PED_TO_FACE_ENTITY(NULL,piMissionCops[TCP_COP_RIGHT],3)
TASK_LOOK_AT_ENTITY(NULL, piMissionCops[TCP_COP_RIGHT], -1, SLF_SLOW_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
TASK_STAND_STILL(NULL, 1000)
TASK_HANDS_UP(NULL,-1)
CLOSE_SEQUENCE_TASK(tempSequenceIndex)
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, tempSequenceIndex)
CLEAR_SEQUENCE_TASK(tempSequenceIndex)
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_POLICE_ARREST,TRUE)
INT iIndex
iCopNum = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), piAmbientPedFlee)
REPEAT iCopNum iIndex
IF piAmbientPedFlee[iIndex] <> PLAYER_PED_ID()
AND piAmbientPedFlee[iIndex] <> myTaxiData.piTaxiPassenger
AND piAmbientPedFlee[iIndex] <> piMissionCops[TCP_COP_LEFT]
AND piAmbientPedFlee[iIndex] <> piMissionCops[TCP_COP_RIGHT]
AND piAmbientPedFlee[iIndex] <> piDriverCop
AND NOT IS_ENTITY_A_MISSION_ENTITY(piAmbientPedFlee[iIndex])
SET_ENTITY_AS_MISSION_ENTITY( piAmbientPedFlee[iIndex], TRUE, TRUE )
CDEBUG1LN(DEBUG_OJ_TAXI,"setting ped number ", iIndex, " to flee!")
TASK_SMART_FLEE_PED( piAmbientPedFlee[iIndex], myTaxiData.piTaxiPassenger, 100.0, -1 )
ENDIF
ENDREPEAT
TAXI_RESET_TIMERS(myTaxiData, TT_POLICE)
iArrestStateIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - HANDS UP")
ENDIF
ENDIF
BREAK
CASE 3
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) > 5.0
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, relPursuers, RELGROUPHASH_COP)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_COP, relPursuers)
WEAPON_TYPE currentWeapon
GET_CURRENT_PED_WEAPON(myTaxiData.piTaxiPassenger, currentWeapon)
IF (currentWeapon = WEAPONTYPE_UNARMED)
GIVE_WEAPON_TO_PED(myTaxiData.piTaxiPassenger, WEAPONTYPE_COMBATPISTOL, INFINITE_AMMO)
ENDIF
SET_PED_COMBAT_ATTRIBUTES(myTaxiData.piTaxiPassenger, CA_AGGRESSIVE, TRUE)
SET_PED_COMBAT_ATTRIBUTES(myTaxiData.piTaxiPassenger, CA_USE_PROXIMITY_FIRING_RATE, TRUE)
SET_PED_COMBAT_MOVEMENT(myTaxiData.piTaxiPassenger, CM_WILLADVANCE)
SET_PED_CAN_EVASIVE_DIVE (myTaxiData.piTaxiPassenger, TRUE)
SET_PED_ACCURACY(myTaxiData.piTaxiPassenger, 80)
TASK_COMBAT_HATED_TARGETS_AROUND_PED(myTaxiData.piTaxiPassenger, 50)
TAXI_RESET_TIMERS(myTaxiData, TT_POLICE)
iArrestStateIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - next shot")
ENDIF
IF ( HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piMissionCops[TCP_COP_RIGHT], PLAYER_PED_ID())
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piMissionCops[TCP_COP_LEFT], PLAYER_PED_ID()) )
AND NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
CDEBUG1LN(DEBUG_OJ_TAXI,"player intervened, passenger tries to flee")
TASK_SMART_FLEE_PED( myTaxiData.piTaxiPassenger, PLAYER_PED_ID(), 300.0, -1 )
TAXI_RESET_TIMERS(myTaxiData, TT_POLICE)
iArrestStateIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - next shot")
ENDIF
BREAK
//Aim your gun and tell the passenger to freeze
CASE 4
//
IF IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
IF NOT IS_ENTITY_DEAD(piMissionCops[TCP_COP_RIGHT])
CLEAR_PED_TASKS(piMissionCops[TCP_COP_RIGHT])
IF DOES_SCENARIO_EXIST_IN_AREA(<<-1036.501953,-2742.985596,20.169693>>, 5.0, TRUE)
TASK_USE_NEAREST_SCENARIO_TO_COORD(piMissionCops[TCP_COP_RIGHT], <<-1036.501953,-2742.985596,20.169693>>, 1)
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - scenario exists, using it")
ELSE
TASK_START_SCENARIO_IN_PLACE(piMissionCops[TCP_COP_RIGHT], "WORLD_HUMAN_GUARD_STAND_ARMY")
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - scenario does not exist, forcing it")
ENDIF
SET_PED_KEEP_TASK(piMissionCops[TCP_COP_RIGHT], TRUE)
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - right cop was tasked")
ENDIF
IF NOT IS_ENTITY_DEAD(piMissionCops[TCP_COP_LEFT])
CLEAR_PED_TASKS(piMissionCops[TCP_COP_LEFT])
vTemp = GET_ENTITY_COORDS(myTaxiData.piTaxiPassenger, FALSE)
CLEAR_SEQUENCE_TASK(tempSequenceIndex)
OPEN_SEQUENCE_TASK(tempSequenceIndex)
TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, vTemp, vTemp, PEDMOVE_WALK, FALSE, 3.0)
TASK_AIM_GUN_AT_COORD(NULL, vTemp, 500)
TASK_LOOK_AT_COORD(NULL, vTemp, -1, SLF_SLOW_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
CLOSE_SEQUENCE_TASK(tempSequenceIndex)
TASK_PERFORM_SEQUENCE(piMissionCops[TCP_COP_LEFT], tempSequenceIndex)
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - left cop was tasked")
SET_PED_KEEP_TASK(piMissionCops[TCP_COP_RIGHT], TRUE)
ENDIF
RETURN TRUE
ELSE
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) > 6.0
SET_NEXT_TAXI_SPEECH(myTaxiData, TAXI_DI_SHOOT, TRUE, FALSE, TRUE)
TAXI_RESET_TIMERS(myTaxiData, TT_POLICE)
ENDIF
IF IS_ENTITY_DEAD(piMissionCops[TCP_COP_RIGHT])
AND IS_ENTITY_DEAD(piMissionCops[TCP_COP_LEFT])
CDEBUG1LN(DEBUG_OJ_TAXI,"one of the cops died, passenger will bone out")
CLEAR_PED_TASKS(myTaxiData.piTaxiPassenger)
TASK_SMART_FLEE_PED( myTaxiData.piTaxiPassenger, PLAYER_PED_ID(), 300.0, -1 )
ENDIF
IF GET_PLAYER_DISTANCE_FROM_ENTITY(myTaxiData.piTaxiPassenger) > 50
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - Passenger has fled, returning true")
RETURN TRUE
ENDIF
ENDIF
TAXI_RESET_TIMERS(myTaxiData, TT_POLICE)
iArrestStateIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - Police Created = 5")
BREAK
//Look away while door opens
CASE 5
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) > 2.0
TAXI_RESET_TIMERS(myTaxiData, TT_POLICE)
iArrestStateIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - Police Created = 5")
ENDIF
BREAK
//Passenger is being escorted to the back car viCopCar
CASE 6
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) > 2.0
vTemp = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(viCopCar, GET_TAXI_OJ_CYI_ALT_END_CS_CAM_POS(5))
PRINTLN("cam offset from vehicle = ", vTemp)
TAXI_RESET_TIMERS(myTaxiData, TT_POLICE)
iArrestStateIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - Police Created = 5")
ENDIF
BREAK
CASE 7
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) >= 1.0
iArrestStateIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - Teleporting everyone")
ENDIF
BREAK
//Once cop is in the car, tell everyone else to get
CASE 8
iArrestStateIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"ALT_END - Everybody should be in car")
BREAK
//Once last cop is in car, have everyone get out of there
CASE 9
RETURN TRUE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
/*
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_CYI_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_DRIVING_PASSENGER
IF NOT IS_TAXI_OJ_INTERRUPTION_LINE_PLAYING(myTaxiData)
IF SAFE_IS_THIS_PRINT_BEING_DISPLAYED("TX_OBJ_CYI_DO")
OR DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
CDEBUG1LN(DEBUG_OJ_TAXI,"--------------------------[Taxi Oddjob Objective] GO TO J Store has been assigned")
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 J Store 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)
CDEBUG1LN(DEBUG_OJ_TAXI,"TRIGGER_TAXI_QUEUE_CYI_LINES: CASE 0 - CALL TAXI_DI_BANTER")
ENDIF
BREAK
//Trigger Line #2--------------------------------------------------
CASE 2
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > 2.0
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BANTER_2,TRUE)
CDEBUG1LN(DEBUG_OJ_TAXI,"TRIGGER_TAXI_QUEUE_CYI_LINES: CASE 1 - CALL TAXI_DI_BANTER_2")
ENDIF
BREAK
//Trigger Line #3--------------------------------------------------
CASE 3
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > 2.0
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BANTER_3,TRUE)
CDEBUG1LN(DEBUG_OJ_TAXI,"TRIGGER_TAXI_QUEUE_CYI_LINES: CASE 2 - CALL TAXI_DI_BANTER_3")
ENDIF
BREAK
//Trigger Line #5-------------------------------------------------
CASE 5
//Make sure player isn't wanted
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) < 1
IF GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_OBJ_GO_AIRPORT
AND NOT IS_VIP_TAXI_OBJ_BEING_DISPLAYED(myTaxiData)
AND NOT IS_TAXI_OJ_INTERRUPTION_LINE_PLAYING(myTaxiData)
AND NOT bIsAirportBlipped
AND myTaxiData.tTaxiOJ_RideState > TRS_DRIVING_PASSENGER
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > 2.0
//Trigger Airport Obj
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_OBJ_GO_AIRPORT,TRUE,FALSE,TRUE)
TAXI_RESET_TIMERS(myTaxiData, TT_DIALOGUE,TAXI_DX_DELAY)
IF g_bDebug
SCRIPT_ASSERT("Setting airport objective on")
ENDIF
ENDIF
ELSE
IF GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_OBJ_GO_AIRPORT
CDEBUG1LN(DEBUG_OJ_TAXI,"TRIGGER_TAXI_QUEUE_CYI_LINES: airport obj is not speech index")
ENDIF
IF NOT IS_VIP_TAXI_OBJ_BEING_DISPLAYED(myTaxiData)
CDEBUG1LN(DEBUG_OJ_TAXI,"TRIGGER_TAXI_QUEUE_CYI_LINES: obj not being displayed")
ENDIF
IF NOT IS_TAXI_OJ_INTERRUPTION_LINE_PLAYING(myTaxiData)
CDEBUG1LN(DEBUG_OJ_TAXI,"TRIGGER_TAXI_QUEUE_CYI_LINES: interruption line not playing")
ENDIF
IF NOT bIsAirportBlipped
CDEBUG1LN(DEBUG_OJ_TAXI,"TRIGGER_TAXI_QUEUE_CYI_LINES: airport not blipped")
ENDIF
IF myTaxiData.tTaxiOJ_RideState > TRS_DRIVING_PASSENGER
CDEBUG1LN(DEBUG_OJ_TAXI,"TRIGGER_TAXI_QUEUE_CYI_LINES: ride state > driving passenger")
ENDIF
ENDIF
ELSE
CDEBUG1LN(DEBUG_OJ_TAXI,"TRIGGER_TAXI_QUEUE_CYI_LINES: wanted level not < 1")
ENDIF
BREAK
CASE 6
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DIALOGUE) > 4.0
AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_AIRPORT_BANTER
AND NOT IS_TAXI_OJ_INTERRUPTION_LINE_PLAYING(myTaxiData)
AND NOT IS_VIP_TAXI_OBJ_BEING_DISPLAYED(myTaxiData)
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_AIRPORT_BANTER,TRUE)
IF g_bDebug
SCRIPT_ASSERT("Triggering airport banter")
ENDIF
ENDIF
BREAK
CASE 7
//3/2/12 - JD- Turning this off because it triggered unexpectedly
//TAXI_RADIO_STATION_TURN_ON(myTaxiData,g_bDebug)
tTaxiOJ_DQ_Data.iCurrentDQLine++
BREAK
ENDSWITCH
ENDIF
//CDEBUG1LN(DEBUG_OJ_TAXI,"TRIGGER_TAXI_QUEUE_CYI_LINES: Call PROCESS_IMPORTANT_DIALOGUE_Q")
PROCESS_IMPORTANT_DIALOGUE_Q(myTaxiData,tDialogueLine, tTaxiOJ_DQ_Data, g_bDebug)
ENDPROC
/*
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
*/
PROC MAIN_TAXI_OJ_CUTYOUIN()
//Handles Fail Or No Taxi-------------------------------------------------------------------------------
IF IS_TAXI_JOB_IN_FAIL_STATE(myTaxiData)
IF TAXI_HANDLE_FAIL(myTaxiData,bTasked)
Script_Failed()
ENDIF
//Proceed
ELSE
//Run Throughtout the Entire Mission--------------------------------------------------------------
TAXI_OJ_MAINTAIN_GLOBAL_GATES(myTaxiData)
//Gobal taxi updates that all taxi missions run every frame
RUN_GLOBAL_TAXI_UPDATES(myTaxiData,aggroArgs)
IF myTaxiData.tTaxiOJ_RideState != TRS_SPECIAL_ENDING
AND myTaxiData.tTaxiOJ_RideState != TRS_CLEANUP
PROCESS_TAXI_EXCEPTIONS(myTaxiData)
ENDIF
UPDATE_TAXI_OJ_TIP(myTaxiData,iTipIndex)
//Dialogue & Objectives
IF myTaxiData.tTaxiOJ_RideState > TRS_FINDING_LOCATION
IF myTaxiData.tTaxiOJ_RideState = TRS_WAIT_FOR_PASSENGER
OR myTaxiData.tTaxiOJ_RideState = TRS_ESCAPE_POLICE
OR myTaxiData.tTaxiOJ_RideState = TRS_DRIVING_PASSENGER
OR myTaxiData.tTaxiOJ_RideState = TRS_DROPPING_OFF
TAXI_ODDJOB_HANDLE_TAXI_BLIPPING(myTaxiData)
ENDIF
//Trigger Lines
IF NOT IS_TAXI_EMERGENCY_FAIL_SET(myTaxiData)
TRIGGER_TAXI_QUEUE_CYI_LINES()
ELSE
TAXI_SET_FAIL(myTaxiData,"Taxi Not Driveable",GET_TAXI_EMERGENCY_FAIL_STRING(myTaxiData))
ENDIF
ENDIF
//Track Driver progress
IF myTaxiData.tTaxiOJ_RideState = TRS_DRIVING_PASSENGER
OR myTaxiData.tTaxiOJ_RideState = TRS_DROPPING_OFF
HANDLE_TAXI_EXCITEMENT(myTaxiData,FALSE,TRUE)
#IF IS_DEBUG_BUILD
ELIF bDebugTurnOnFreeRide
HANDLE_TAXI_EXCITEMENT(myTaxiData,TRUE,TRUE)
#ENDIF
ENDIF
IF myTaxiData.tTaxiOJ_RideState = TRS_WAIT_1ST_STOP
OR myTaxiData.tTaxiOJ_RideState = TRS_WAIT_FOR_PASSENGER
IF IS_PLAYER_DRIVING_TAXI_OJ(myTaxiData)
AND SAFE_TO_PRINT_CHASE_HINT_CAM_HELP()
CONTROL_COORD_CHASE_HINT_CAM_ANY_MEANS(localChaseHintCamStruct, vAlleyCamLookAt)
ELSE
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
ENDIF
//GOD TEXT
IF IS_TAXI_DRIVEN_BY_PLAYER(myTaxiData)
AND SAFE_TO_PRINT_CHASE_HINT_CAM_HELP()
IF NOT IS_BIT_SET(iReminderBitField, TAXI_OJ_CONST_SHOW_ALLEY_CAM_HELP)
PRINT_HELP("TAXI_HNT_CAM")
SET_BIT(iReminderBitField, TAXI_OJ_CONST_SHOW_ALLEY_CAM_HELP)
IF IS_BIT_SET(iReminderBitField, TAXI_OJ_CONST_CLEAR_ALLEY_CAM_HELP)
CLEAR_BIT(iReminderBitField, TAXI_OJ_CONST_CLEAR_ALLEY_CAM_HELP)
ENDIF
ENDIF
ELIF NOT IS_BIT_SET(iReminderBitField, TAXI_OJ_CONST_CLEAR_ALLEY_CAM_HELP)
CLEAR_HELP(TRUE)
SET_BIT(iReminderBitField, TAXI_OJ_CONST_CLEAR_ALLEY_CAM_HELP)
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_CYI_STREAMS_STAGE_01()
TAXI_RESET_TIMERS(myTaxiData, TT_DIALOGUE,TAXI_DX_DELAY)
TAXI_SPAWN_PASSENGER(myTaxiData, vPassengerPt, vPassengerPickupPt, "TaxiDerrick",GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_PASSENGER),116.1366,10.0)
TAXI_INIT_PASSENGER_BLIP(myTaxiData)
//Move on to the next stage
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_STREAMING)
BREAK
//Wait for streaming to finish
CASE TRS_STREAMING
IF HAVE_TAXI_OJ_CYI_STAGE_01_ASSETS_LOADED()
ADD_RELATIONSHIP_GROUP("TAXI_Pursuers", relPursuers)
INIT_ALL_TAXI_EXCITEMENT_VALUES()
INITIALIZE_GENERIC_TAXI_EXCEPTIONS()
//Init Bonus----------------------------------------
TAXI_INITIALIZE_BONUS_FIELD(bonusFieldCutYouIn[TCYI_BONUS_LOST_COPS], "TAXI_SC_BN_07", TAXI_CONST_BONUS_CASH_SMOOTH_ESCAPE) //Escaped Bonus
TAXI_INITIALIZE_BONUS_INFO(myTaxiData, bonusFieldCutYouIn)
//SET REACT BITS
CLEAR_ALL_TAXI_PASSENGER_REACT_BITS(myTaxiData)
myTaxiData.vTaxiOJPickup = vPassengerPt
//Move on to the next stage
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SPAWNING)
ENDIF
BREAK
/*SPAWNING---------------------------------------------------------------------------------------------------------
oooooooo8 oooooooooo o oooo oooo oooo oooo ooooo oooo oooo
888 888 888 888 88 88 88 8888o 88 888 8888o 88
888oooooo 888oooo88 8 88 88 888 88 88 888o88 888 88 888o88
888 888 8oooo88 888 888 88 8888 888 88 8888
o88oooo888 o888o o88o o888o 8 8 o88o 88 o888o o88o 88
*/
CASE TRS_SPAWNING
IF PROPERTY_VIP_INIT_READY(myTaxiData)
IF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, PED_COMP_SPECIAL, 0, 0)
SET_PED_RELATIONSHIP_GROUP_HASH(myTaxiData.piTaxiPassenger, relPursuers)
REMOVE_ALL_PED_WEAPONS(myTaxiData.piTaxiPassenger)
ENDIF
SET_ROADS_IN_ANGLED_AREA(<< -1035.3260, -2703.3054, 12.8004 >>,<< -1056.0803, -2568.6753, 12.8181 >>, 125.0,TRUE,FALSE )
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_RESPECT, RELGROUPHASH_AMBIENT_GANG_FAMILY,myTaxiData.relPassenger )
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_RESPECT, RELGROUPHASH_AMBIENT_GANG_LOST, myTaxiData.relPassenger)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_RESPECT, RELGROUPHASH_AMBIENT_GANG_MEXICAN, myTaxiData.relPassenger)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_PASSENGER))
//SET_PED_WEAPON_MOVEMENT_CLIPSET(myTaxiData.piTaxiPassenger, "MOVE_P_M_ZERO_RUCKSACK")
//Give player obj to go pickup Passenger
ENABLE_TAXI_SPEECH(myTaxiData)
//Move on to the next stage
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_MANAGE_PICKUP)
ENDIF
BREAK
//Waits for passenger to head to cab
/*
oooooooooo ooooo oooooooo8 oooo oooo ooooo oooo oooooooooo
888 888 888 o888 88 888 o88 888 88 888 888
888oooo88 888 888 888888 888 88 888oooo88
888 888 888o oo 888 88o 888 88 888
o888o o888o 888oooo88 o888o o888o 888oo88 o888o
*/
CASE TRS_MANAGE_PICKUP
IF TAXI_HANDLE_IV_PICKUP_NO_METER(myTaxiData)
myTaxiData.vTaxiOJDropoff = GET_MISSION_CRITICAL_POINTS(0)
bDropOffFound = TRUE//GET_TAXI_DROPOFF_LOCATION_FROM_DISTANCE(txRegionsArray, myTaxiData.vTaxiOJDropoff,myTaxiData.iTaxiOJ_StatesGenIndex)
//Move on to the next stage
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_WAIT_PARK)
ENDIF
BREAK
//Wait for the passenger to get into the taxi---------------------------------------------------------------------------------------------
CASE TRS_WAIT_PARK
IF IS_PASSENGER_ENTERING_TAXI(myTaxiData)
//Greet the player
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GREET,TRUE)
//CleanUp Pickup Lock & POI
CLEANUP_TAXI_PICKUP_STOP(myTaxiData)
TAXI_OJ_CYI_SET_TIP_AND_EXCITEMENT_TO_CHECK()
//Set roads around first dropoff point
TAXI_PREP_SET_ROADS_IN_AREA_FOR_PICKUP(GET_MISSION_CRITICAL_POINTS(-1))
//Move on to the next stage
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_DRIVING_PASSENGER)
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
/* DRIVING PASSENGER
ooooooooo oooooooooo ooooo ooooo oooo ooooo oooo oooo ooooooo8
888 88o 888 888 888 888 88 888 8888o 88 o888 88
888 888 888oooo88 888 888 88 888 88 888o88 888 oooo
888 888 888 88o 888 88888 888 88 8888 888o 88
o888ooo88 o888o 88o8 o888o 888 o888o o88o 88 888ooo888
*/
//Once you get to destination wait----------------------------------------------------------------------------------------------------------
CASE TRS_DRIVING_PASSENGER
//Jewelry Store arrival line
IF NOT IS_BITMASK_AS_ENUM_SET(myTaxiData.iTaxiOJ_ExtraBitsDialogue,TAXI_DXF_SEEN_DEST)
AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_SEEN_DESTINATION
// AND NOT IS_VEHICLE_DRIVEABLE(viDummyCars[0])
IF IS_PASSENGER_IN_TAXI(myTaxiData)
IF IS_TAXI_DRIVEN_BY_PLAYER(myTaxiData)
IF GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.viTaxi,myTaxiData.vTaxiOJDropoff) <= TAXI_OJ_CONST_DIST_TO_SEE_JEWELRY
//Trigger Line #4-------------------------------------------------
CLEAR_DIALOGUE_QUEUE(tDialogueLine)
CLOSE_DIALOGUE_QUEUE(tTaxiOJ_DQ_Data,4)
//Setup JStore Scene
// viDummyCars[0] = CREATE_VEHICLE(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_CAR_1),<< 356.0680, -950.7437, 28.4065 >>,312.5482 )
// viDummyCars[1] = CREATE_VEHICLE(GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_CAR_2),<< 345.7162, -950.8976, 28.4339 >>,313.2876 )
// SET_VEHICLE_NUMBER_PLATE_TEXT(viDummyCars[0],"3MINS2W")
// SET_VEHICLE_NUMBER_PLATE_TEXT(viDummyCars[1],"MOONLIVE")
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_SEEN_DESTINATION,TRUE,TRUE)
SET_CREATE_RANDOM_COPS(FALSE)
// CLEAR_AREA_OF_COPS(vTaxiJewelryNPCSpot, 20.0)
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT bClearCops
IF IS_PASSENGER_IN_TAXI(myTaxiData)
IF IS_TAXI_DRIVEN_BY_PLAYER(myTaxiData)
IF GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.viTaxi,myTaxiData.vTaxiOJDropoff) <= 100
CLEAR_AREA_OF_COPS(<<333.620789,-955.502747,28.422501>>, 60.0)
bClearCops = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF TAXI_HANDLE_DRIVING(myTaxiData/*,tTaxiOJ_DQ_Data*/)
bDropOffFound = FALSE
//REMOVE_BLIP(myTaxiData.blipTaxiDropOff)
SET_BLIP_ALPHA(myTaxiData.blipTaxiDropOff,0)
//Update J Skip pAirport
myTaxiData.vTaxiOJ_WarpPtDropoff = << -1047.5184, -2722.1135, 19.0823 >>
myTaxiData.fTaxiOJ_WarpPtHeadingDropoff = 238.52
TAXI_RESET_TIMERS(myTaxiData, TT_DROPOFF)
//Close dialogue gates
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_BitsDialogue,TAXI_DXF_BANTER)
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_1ST_STOP,TRUE,TRUE)
//Set current objective in case we need to be reminded
myTaxiData.tTaxiOJ_ObjectiveCurrent = TAXI_OBJ_WAIT_PASS
//Move on to the next stage
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SEND_TO_STORE)
ENDIF
BREAK
CASE TRS_SEND_TO_STORE
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
IF IS_PASSENGER_IN_TAXI(myTaxiData)
LEAVE_TAXI_OJ_FROM_CLOSEST_DOOR_TO_POINT(myTaxiData,vTaxiJewelryNPCSpot)
ELIF GET_SCRIPT_TASK_STATUS(myTaxiData.piTaxiPassenger,SCRIPT_TASK_LEAVE_VEHICLE) = FINISHED_TASK
CLEAR_SEQUENCE_TASK(seqIndexTaxiTemp)
OPEN_SEQUENCE_TASK(seqIndexTaxiTemp)
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<< 347.2881, -965.1024, 28.4274 >>, 1.5, TAXI_OJ_CONST_TIME_BEFORE_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vTaxiJewelryNPCSpot, 1.5, TAXI_OJ_CONST_TIME_BEFORE_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << 337.3356, -997.7456, 28.1318 >>,PEDMOVEBLENDRATIO_SPRINT, TAXI_OJ_CONST_TIME_BEFORE_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,vTaxiJewelreyInStore,PEDMOVEBLENDRATIO_SPRINT, TAXI_OJ_CONST_TIME_BEFORE_WARP)
//TASK_DUCK(NULL,-1)
//TASK_STAND_STILL(NULL,-1)
CLOSE_SEQUENCE_TASK(seqIndexTaxiTemp)
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, seqIndexTaxiTemp)
CLEAR_SEQUENCE_TASK(seqIndexTaxiTemp)
SET_PLAYER_CONTROL(GET_PLAYER_INDEX(),TRUE)
TAXI_RESET_TIMERS(myTaxiData, TT_DROPOFF)
//Move on to the next stage
//GIVE_WEAPON_TO_PED(myTaxiData.piTaxiPassenger, WEAPONTYPE_COMBATPISTOL, 50, TRUE)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_WAIT_1ST_STOP)
bTaxiShotsFired = FALSE
ENDIF
ENDIF
BREAK
//Wait til he gets to first stop, and wait for the passenger to return
CASE TRS_WAIT_1ST_STOP
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
// SET_PED_MIN_MOVE_BLEND_RATIO(myTaxiData.piTaxiPassenger, 1.5)
ENDIF
//Manage Vincent here if player gets close to Vincent
IF NOT bTaxiShotsFired
TAXI_CYI_HANDLE_PLAYER_NEAR_JEWELRY_STORE_DEUX()
ENDIF
//Make sure player stays in area
IF IS_TAXI_DRIVEN_BY_PLAYER(myTaxiData)
//Handle objective and blipping
IF NOT IS_ENTITY_AT_COORD(myTaxiData.viTaxi,myTaxiData.vTaxiOJDropoff,<<10,10,10>>)
IF GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.viTaxi,myTaxiData.vTaxiOJDropoff) > TAXI_OJ_DIST_SC_FAIL_CYI
TAXI_SET_FAIL(myTaxiData, "Player abandoned his accomplice while he at the jewelry store",TFS_ABANDONED_PASSENGER)
ENDIF
IF GET_PLAYER_DISTANCE_FROM_ENTITY(myTaxiData.piTaxiPassenger) > TAXI_OJ_CONST_DIST_FROM_PLAYER_TO_JEWELRY_STORE
//BLIP LOCATION
IF GET_BLIP_ALPHA(myTaxiData.blipTaxiDropOff) = 0
AND NOT bTasked
TAXI_SET_DROPOFF_BLIP_ON(myTaxiData,TRUE)
CLEAR_THIS_PRINT("TAXI_OBJ_CYI_01")
ENDIF
//OBJ - "Return to the rendevous point"
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_OBJ_CYI_RETURN_WAIT,TRUE,FALSE,TRUE)
ENDIF
//Obj - ~s~Wait here for your passenger to return.~s~
ELSE
IF DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
AND GET_BLIP_ALPHA(myTaxiData.blipTaxiDropOff) > 0
SET_BLIP_ALPHA(myTaxiData.blipTaxiDropOff,0)
SET_BLIP_ROUTE(myTaxiData.blipTaxiDropOff,FALSE)
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_OBJ_WAIT_PASS,TRUE,FALSE,TRUE)
CLEAR_THIS_PRINT("TAXI_OBJ_CYI_1B")
CDEBUG1LN(DEBUG_OJ_TAXI,"TXM_CYI - Blip is hidden cause taxi is on the rendevous point")
ENDIF
ENDIF
//Player has left Taxi
ELSE
IF NOT bBrokeLoyalty
bBrokeLoyalty = TRUE
ENDIF
TAXI_YELL_PLAYER_TO_RETURN(myTaxiData,TRUE)
ENDIF
//LM adding shots fired 12/7/11
IF IS_ENTITY_AT_COORD(myTaxiData.viTaxi,myTaxiData.vTaxiOJDropoff,<<10,10,10>>)
AND IS_ENTITY_AT_COORD(myTaxiData.piTaxiPassenger, vTaxiJewelreyInStore, <<5,5,5>>)
AND IS_PLAYER_DRIVING_TAXI_OJ(myTaxiData)
AND NOT bTaxiShotsFired
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
IF IS_ENTITY_OCCLUDED(myTaxiData.piTaxiPassenger)
//Turn off heard shot aggro B*520359
SET_BIT(aggroArgs.iBitFieldDontCheck, ENUM_TO_INT(EAggro_HeardShot))
GIVE_WEAPON_TO_PED(myTaxiData.piTaxiPassenger, WEAPONTYPE_COMBATPISTOL, 50)
//TASK_SHOOT_AT_COORD(myTaxiData.piTaxiPassenger, << 301.2225, -992.7658, 38.0946 >>/*<< 340.5714, -996.7450, 29.7600 >>*/, 10000, FIRING_TYPE_RANDOM_BURSTS)
TASK_SHOOT_AT_COORD(myTaxiData.piTaxiPassenger, << 335.53137, -992.47852, 28.38245 >>, 10000, FIRING_TYPE_RANDOM_BURSTS)
SET_ENTITY_VISIBLE(myTaxiData.piTaxiPassenger , FALSE)
SET_ENTITY_CAN_BE_DAMAGED(myTaxiData.piTaxiPassenger,FALSE)
SET_ENTITY_INVINCIBLE(myTaxiData.piTaxiPassenger,TRUE)
//SET_ENTITY_COORDS(myTaxiData.piTaxiPassenger,<<301.2225, -992.7658, 36.0946>>)
SET_ENTITY_COORDS(myTaxiData.piTaxiPassenger, <<339.9392, -992.9357, 28.3731>>)
bTaxiShotsFired = TRUE
CDEBUG1LN(DEBUG_OJ_TAXI,"TXM_CYI - Ped is now shooting")
TAXI_RESET_TIMERS(myTaxiData, TT_DROPOFF)
ENDIF
ENDIF
ENDIF
//Wait time
IF bTaxiShotsFired
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF) > TAXI_OJ_CONST_TIME_TO_RETURN_TO_CAB_AFTER_SHOOTING
AND IS_ENTITY_AT_COORD(myTaxiData.viTaxi,myTaxiData.vTaxiOJDropoff,<<10,10,10>>)
AND IS_PLAYER_DRIVING_TAXI_OJ(myTaxiData)
//Send to airport
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
IF IS_ENTITY_OCCLUDED(myTaxiData.piTaxiPassenger)
//Clear it once he's visible again
CLEAR_BIT(aggroArgs.iBitFieldDontCheck,ENUM_TO_INT(EAggro_HeardShot))
SET_ENTITY_VISIBLE(myTaxiData.piTaxiPassenger, TRUE)
SET_ENTITY_CAN_BE_DAMAGED(myTaxiData.piTaxiPassenger,TRUE)
SET_ENTITY_INVINCIBLE(myTaxiData.piTaxiPassenger,FALSE)
SET_ENTITY_COORDS(myTaxiData.piTaxiPassenger, vTaxiJewelreyInStore)//<< 339.9748, -999.8591, 28.3299 >>)
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, PED_COMP_SPECIAL, 1, 0)
IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
//Set config flag so that he doesn't react to the explosion in the next state
SET_PED_CONFIG_FLAG(myTaxiData.piTaxiPassenger,PCF_RunFromFiresAndExplosions,FALSE)
CLEAR_PED_TASKS_IMMEDIATELY(myTaxiData.piTaxiPassenger)
VEHICLE_SEAT eSeat
eSeat = TAXI_GET_PROPER_SEAT(myTaxiData.viTaxi, myTaxiData.piTaxiPassenger)
CLEAR_SEQUENCE_TASK(seqIndexTaxiTemp)
OPEN_SEQUENCE_TASK(seqIndexTaxiTemp)
//TASK_GO_STRAIGHT_TO_COORD(NULL,vTaxiJewelryNPCSpot,PEDMOVEBLENDRATIO_WALK)
//TASK_GO_TO_COORD_ANY_MEANS(NULL,vTaxiJewelryNPCSpot,PEDMOVEBLENDRATIO_WALK, NULL)
TASK_GO_TO_COORD_ANY_MEANS(NULL,<< 343.9973, -998.3080, 28.2314 >>,PEDMOVEBLENDRATIO_SPRINT, NULL)
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL,TRUE)
TASK_SWAP_WEAPON(NULL,FALSE)
TASK_ENTER_VEHICLE(NULL,myTaxiData.viTaxi,TAXI_OJ_CONST_TIME_BEFORE_WARP,eSeat)
CLOSE_SEQUENCE_TASK(seqIndexTaxiTemp)
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, seqIndexTaxiTemp)
CLEAR_SEQUENCE_TASK(seqIndexTaxiTemp)
CDEBUG1LN(DEBUG_OJ_TAXI,"TXM_CYI - get back in taxi cab task given")
TAXI_RESET_TIMERS(myTaxiData, TT_DROPOFF)
IF DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
SET_BLIP_ALPHA(myTaxiData.blipTaxiDropOff,0)
SET_BLIP_ROUTE(myTaxiData.blipTaxiDropOff,FALSE)
CDEBUG1LN(DEBUG_OJ_TAXI,"hiding blip and route while the passenger is running back to the cab")
ENDIF
SET_PED_WEAPON_MOVEMENT_CLIPSET(myTaxiData.piTaxiPassenger, "MOVE_P_M_ZERO_RUCKSACK")
//RESET_PED_WEAPON_MOVEMENT_CLIPSET(myTaxiData.piTaxiPassenger)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_WAIT_FOR_PASSENGER)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
//Sent to Taxi
CASE TRS_WAIT_FOR_PASSENGER
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF) > 23 //20
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
CLEAR_PED_TASKS(myTaxiData.piTaxiPassenger)
TASK_SHOOT_AT_ENTITY(myTaxiData.piTaxiPassenger, PLAYER_PED_ID(), -1, FIRING_TYPE_DEFAULT)
ENDIF
TAXI_SET_FAIL(myTaxiData, "player didn't let teh Passenger in", TFS_ABANDONED_PASSENGER)// TFS_TIME_EXPIRED)
ELSE
IF (GET_GAME_TIMER() % 1000) < 50
CDEBUG1LN(DEBUG_OJ_TAXI,"TXM_CYI - timer to let passenger in is at: ", GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF))
ENDIF
ENDIF
//LM added an explosion while the guy is running back to the taxi
IF IS_ENTITY_AT_COORD(myTaxiData.piTaxiPassenger, <<347.862091,-983.611816,31.308886>>, <<4.0, 3.0, 3.0>>)
AND IS_ENTITY_AT_COORD(myTaxiData.viTaxi,myTaxiData.vTaxiOJDropoff,<<10,10,10>>)
//AND IS_PLAYER_DRIVING_TAXI_OJ(myTaxiData)
AND bTaxiShotsFired
ADD_EXPLOSION(<<344.59061, -996.40900, 28.30219>>, EXP_TAG_ROCKET)
PLAY_SOUND_FROM_COORD(iSoundID_BurglarAlarm, "Burglar_Bell", <<340.8,-965.4,28.4>>,"Generic_Alarms")
bTaxiShotsFired = FALSE
ENDIF
IF IS_PASSENGER_IN_TAXI(myTaxiData)
CDEBUG1LN(DEBUG_OJ_TAXI,"TXM_CYI - passenger is now in taxi")
SET_CREATE_RANDOM_COPS(TRUE)
SET_PLAYER_WANTED_LEVEL_NO_DROP(GET_PLAYER_INDEX(),TAXI_OJ_CONST_WANTED_LEVEL_FOR_THIS_MISSION)
SET_PLAYER_WANTED_LEVEL_NOW(GET_PLAYER_INDEX())
START_AUDIO_SCENE("TAXI_CUT_U_IN")
//Set road back to on
TAXI_PREP_SET_ROADS_IN_AREA_FOR_PICKUP(GET_MISSION_CRITICAL_POINTS(0),TRUE)
//Set the passenger v. cops
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, myTaxiData.relPassenger, RELGROUPHASH_COP)
// SET_PED_COMBAT_ATTRIBUTES(myTaxiData.piTaxiPassenger,CA_LEAVE_VEHICLES,FALSE)
TAXI_STATS_UPDATE(TAXI_STAT_WANTED_GAINED,TAXI_OJ_CONST_WANTED_LEVEL_FOR_THIS_MISSION)
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_LOSE_JEWELRY_POL,TRUE)
//Clean up an GPS Stuff
IF DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
SET_BLIP_ROUTE(myTaxiData.blipTaxiDropOff,FALSE)
REMOVE_BLIP(myTaxiData.blipTaxiDropOff)
ENDIF
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
//SET_CINEMATIC_BUTTON_ACTIVE(TRUE)
//Move on to the next stage
TAXI_RESET_TIMERS(myTaxiData, TT_DROPOFF)
TAXI_RESET_TIMERS(myTaxiData, TT_POLICE)
TAXI_RESET_TIMERS(myTaxiData, TT_RIDETODEST)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_ESCAPE_POLICE)
ENDIF
BREAK
/*ESCAPE POLICE-------------------------------------------------------------------------------------------
oooooooooo ooooooo ooooo ooooo oooooooo8 ooooooooooo
888 888 o888 888o 888 888 o888 88 888 88
888oooo88 888 888 888 888 888 888ooo8
888 888o o888 888 o 888 888o oo 888 oo
o888o 88ooo88 o888ooooo88 o888o 888oooo88 o888ooo8888 */
CASE TRS_ESCAPE_POLICE
UPDATE_OJ_TAXI_MILEAGE(myTaxiData,myTaxiData.fTaxiOJ_TempFloat)
IF IS_BITMASK_AS_ENUM_SET(myTaxiData.iTaxiJobBits, TAXI_OJ_JB_GREETING_DONE)
CLEAR_BITMASK_AS_ENUM(myTaxiData.iTaxiJobBits, TAXI_OJ_JB_GREETING_DONE)
ENDIF
//Toggle escape police dialogue every x seconds
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) > 0
IF NOT IS_TAXI_SPEECH_ENABLED(myTaxiData)// NOT myTaxiData.bTaxiOJ_CanSpeak
IF NOT IS_SCRIPTED_CONVERSATION_ONGOING()
IF (GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DIALOGUE) > GET_RANDOM_FLOAT_IN_RANGE(TAXI_CYI_LOCAL_COP_REACT_DELAY, TAXI_CYI_LOCAL_COP_REACT_DELAY_EXT)
AND iCopLinesSaid < 8)
OR GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DIALOGUE) > GET_RANDOM_FLOAT_IN_RANGE(TAXI_CYI_LOCAL_COP_REACT_DELAY_EXT, TAXI_CYI_LOCAL_COP_REACT_DELAY_MAX)
CDEBUG1LN(DEBUG_OJ_TAXI,"Dialogue timer = ", GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DIALOGUE))
CDEBUG1LN(DEBUG_OJ_TAXI,"iCopLinesSaid = ", iCopLinesSaid)
IF GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_ESCAPE_POLICE
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_ESCAPE_POLICE,TRUE)
iCopLinesSaid++
ELSE
ENABLE_TAXI_SPEECH(myTaxiData)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) < 1
AND GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF) > 10
STOP_AUDIO_SCENE("TAXI_CUT_U_IN")
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_POLICE_ESCAPED)
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiJobBits, TAXI_OJ_JB_DISABLE_WANTED)
ENDIF
BREAK
//Added this case to handle DEbug cheating, for some reason you would still keep a wanted level if you didn't reduce the wanted level twice.
CASE TRS_POLICE_ESCAPED
UPDATE_OJ_TAXI_MILEAGE(myTaxiData,myTaxiData.fTaxiOJ_TempFloat)
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) > 0
IF NOT IS_TAXI_SPEECH_ENABLED(myTaxiData)// NOT myTaxiData.bTaxiOJ_CanSpeak
IF NOT IS_SCRIPTED_CONVERSATION_ONGOING()
IF (GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DIALOGUE) > GET_RANDOM_FLOAT_IN_RANGE(TAXI_CYI_LOCAL_COP_REACT_DELAY, TAXI_CYI_LOCAL_COP_REACT_DELAY_EXT)
AND iCopLinesSaid < 8)
OR GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DIALOGUE) > GET_RANDOM_FLOAT_IN_RANGE(TAXI_CYI_LOCAL_COP_REACT_DELAY_EXT, TAXI_CYI_LOCAL_COP_REACT_DELAY_MAX)
CDEBUG1LN(DEBUG_OJ_TAXI,"Dialogue timer = ", GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DIALOGUE))
CDEBUG1LN(DEBUG_OJ_TAXI,"iCopLinesSaid = ", iCopLinesSaid)
IF GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_ESCAPE_POLICE
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_ESCAPE_POLICE,TRUE)
iCopLinesSaid++
ELSE
ENABLE_TAXI_SPEECH(myTaxiData)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) < 1
AND GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) > 2
//DETERMINE BONUS HERE
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) <= TAXI_CONST_BONUS_TIME_TO_LOSE_COPS
TAXI_SET_BONUS_AWARD(myTaxiData,ENUM_TO_INT(TCYI_BONUS_LOST_COPS))
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI BONUS UNLOCKED - Safe Getaway")
ELSE
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI BONUS LOCKED - Safe Getaway")
ENDIF
//Set cop passenger relationship to neutral
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_RESPECT, myTaxiData.relPassenger, RELGROUPHASH_COP)
//Set destination to the airport
myTaxiData.vTaxiOJDropoff = GET_MISSION_CRITICAL_POINTS(5)
TAXI_STATS_UPDATE(TAXI_STAT_WANTED_LOST,TAXI_OJ_CONST_WANTED_LEVEL_FOR_THIS_MISSION)
//TAXI_RESET_TIMERS(myTaxiData, TT_POLICE)
TAXI_RESET_EXITEMENT_TIMERS(myTaxiData)
TAXI_CANCEL_TIMERS(myTaxiData, TT_POLICE)
TAXI_CANCEL_TIMERS(myTaxiData, TT_STOPPED)
TAXI_CANCEL_TIMERS(myTaxiData, TT_FAILDELAY)
IF NOT IS_BITMASK_AS_ENUM_SET(myTaxiData.iTaxiJobBits, TAXI_OJ_JB_GREETING_DONE)
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiJobBits, TAXI_OJ_JB_GREETING_DONE)
ENDIF
myTaxiData.bSecondLeg = TRUE
//Move on to the next stage
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_REVEAL_DESTINATION)
ENDIF
BREAK
/*
ooooooooooo ooooo oooooooooo oooooooo8 o ooooo oooooooo8 ooooo ooooo ooooooooooo oooooooooo ooooooooooo
88 888 88 888 888 888 o888 88 888 888 o888 88 888 888 888 88 888 888 888 88
888 888 888oooo88 888 8 88 888 888 888ooo888 888ooo8 888oooo88 888ooo8
888 888 888 888o oo 8oooo88 888 o 888o oo 888 888 888 oo 888 88o 888 oo
o888o o888o o888o 888oooo88 o88o o888o o888ooooo88 888oooo88 o888o o888o o888ooo8888 o888o 88o8 o888ooo8888
*/
CASE TRS_REVEAL_DESTINATION
IF NOT IS_TAXI_OJ_INTERRUPTION_LINE_PLAYING(myTaxiData)
EVALUATE_TIME_TAKEN_TO_LOSE_POLICE_IN_TAXI_CYI()
// blipping sooner now
TAXI_SET_DROPOFF_BLIP_ON(myTaxiData,TRUE)
REQUEST_TAXI_ODDJOB_CYI_STREAMS_END()
//Move on to the next stage
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_DROPPING_OFF)
ENDIF
BREAK
CASE TRS_DROPPING_OFF
//Blip the airport only once the bojective has been printed in the TAXI_DIALOGUE_OBJ_MANAGER
IF NOT bIsAirportBlipped
IF myTaxiData.tTaxiOJ_ObjectiveCurrent = TAXI_OBJ_GO_AIRPORT
AND GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) < 1
CDEBUG1LN(DEBUG_OJ_TAXI,"MAIN_TAXI_OJ_CUTYOUIN: myTaxiData.tTaxiOJ_ObjectiveCurrent = TAXI_OBJ_GO_AIRPORT")
bIsAirportBlipped = TRUE
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiJobBits, TAXI_OJ_JB_GREETING_DONE)
//Make sure soundID is valid
ODDJOB_STOP_SOUND(iSoundID_BurglarAlarm)
CDEBUG1LN(DEBUG_OJ_TAXI,"Taxi Alarm Sounds should stop")
tTaxiOJ_DQ_Data.iCurrentDQLine++
ENDIF
ENDIF
IF bIsAirportBlipped
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) > 0
CDEBUG1LN(DEBUG_OJ_TAXI,"MAIN_TAXI_OJ_CUTYOUIN: Setting bIsAirportBlipped = FALSE since we got WANTED again")
IF DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
SET_BLIP_ROUTE(myTaxiData.blipTaxiDropOff,FALSE)
REMOVE_BLIP(myTaxiData.blipTaxiDropOff)
ENDIF
ELSE
TAXI_SET_DROPOFF_BLIP_ON(myTaxiData,TRUE)
ENDIF
ENDIF
IF IS_BITMASK_AS_ENUM_SET(myTaxiData.iTaxiJobBits, TAXI_OJ_JB_DISABLE_WANTED)
AND bIsAirportBlipped
//Reset this to handle cases where you debug disable
//IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) > 3.0
CLEAR_BITMASK_AS_ENUM(myTaxiData.iTaxiJobBits, TAXI_OJ_JB_DISABLE_WANTED)
IF g_bDebug
SCRIPT_ASSERT("Wanted Bitmask has been reenabled")
ENDIF
//ENDIF
ENDIF
//Airport arrival line
IF NOT IS_BITMASK_AS_ENUM_SET(myTaxiData.iTaxiOJ_ExtraBitsDialogue,TAXI_DXF_SEEN_DEST_2)
AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_SEEN_DESTINATION_2
IF IS_PASSENGER_IN_TAXI(myTaxiData)
IF IS_TAXI_DRIVEN_BY_PLAYER(myTaxiData)
IF GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.viTaxi,myTaxiData.vTaxiOJDropoff) <= TAXI_OJ_CONST_DIST_TO_SEE_AIRPORT
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_SEEN_DESTINATION_2,TRUE,TRUE)
ELSE
KILL_ANY_CONVERSATION()
ENDIF
IF bPassengerIsGoingToBeArrested
AND NOT bCreateCops
CLEAR_AREA(myTaxiData.vTaxiOJDropoff, 3.0, FALSE)
sbiAirportCopBlock = ADD_SCENARIO_BLOCKING_AREA(<<-1033.18774, -2743.17969, 19.0>>, <<-1047.94824, -2739.17969, 20.20066>>)
piMissionCops[0] = CREATE_PED(PEDTYPE_COP, GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_COP_MALE), <<-1036.501953,-2742.985596,20.169693>>)
piMissionCops[1] = CREATE_PED(PEDTYPE_COP, GET_TAXI_OJ_CYI_MODEL_NAMES(TCM_COP_MALE),<<-1043.70569, -2739.23364, 19.16969>>)
GIVE_WEAPON_TO_PED(piMissionCops[0], WEAPONTYPE_CARBINERIFLE, INFINITE_AMMO, TRUE)
GIVE_WEAPON_TO_PED(piMissionCops[1], WEAPONTYPE_CARBINERIFLE, INFINITE_AMMO, TRUE)
IF DOES_SCENARIO_EXIST_IN_AREA(<<-1036.501953,-2742.985596,20.169693>>, 5.0, TRUE)
TASK_USE_NEAREST_SCENARIO_TO_COORD(piMissionCops[0], <<-1036.501953,-2742.985596,20.169693>>, 2.5)
CDEBUG1LN(DEBUG_OJ_TAXI,"scenario exists, using it A")
ELSE
TASK_START_SCENARIO_IN_PLACE(piMissionCops[0], "WORLD_HUMAN_GUARD_STAND_ARMY")
CDEBUG1LN(DEBUG_OJ_TAXI,"scenario does not exist, forcing it A")
ENDIF
IF DOES_SCENARIO_EXIST_IN_AREA(<<-1043.70569, -2739.23364, 19.16969>>, 5.0, TRUE)
TASK_USE_NEAREST_SCENARIO_TO_COORD(piMissionCops[1], <<-1043.70569, -2739.23364, 19.16969>>, 2.5)
CDEBUG1LN(DEBUG_OJ_TAXI,"scenario exists, using it B")
ELSE
TASK_START_SCENARIO_IN_PLACE(piMissionCops[1], "WORLD_HUMAN_GUARD_STAND_ARMY")
CDEBUG1LN(DEBUG_OJ_TAXI,"scenario does not exist, forcing it B")
ENDIF
CDEBUG1LN(DEBUG_OJ_TAXI,"MAIN_TAXI_OJ_CUTYOUIN: ambush cops created")
bCreateCops = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF TAXI_HANDLE_DRIVING(myTaxiData/*,tTaxiOJ_DQ_Data*/)
tTaxiOJ_DQ_Data.tDialogueQStates = TDQ_CLOSED
REMOVE_BLIP(myTaxiData.blipTaxiDropOff)
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$CASH
SET_TAXI_FARE_OFF_MILEAGE(myTaxiData)
TAXI_OJ_RATE_OVERALL_TIP_LEVEL(myTaxiData)
CYI_CONVERT_TAXI_TIP_TO_CASH()
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_REGULAR_PAYMENT)
ENDIF
BREAK
/* REGULAR PAYMENT------------------------------------------------------------------------------------------------
oooooooooo o ooooo oooo oooo oooo ooooooooooo oooo oooo ooooooooooo
888 888 888 888 88 8888o 888 888 88 8888o 88 88 888 88
888oooo88 8 88 888 88 888o8 88 888ooo8 88 888o88 888
888 8oooo88 888 88 888 88 888 oo 88 8888 888
o888o o88o o888o o888o o88o 8 o88o o888ooo8888 o88o 88 o888o
*/
CASE TRS_REGULAR_PAYMENT
IF IS_THIS_THE_HANDOFF_LINE()
AND NOT bIsHandoffDone
VEHICLE_SEAT eSeat
GET_LEFT_OVER_PASSENGER_IN_TAXI(myTaxiData, eSeat)
CDEBUG1LN(DEBUG_OJ_TAXI,"MAIN_TAXI_OJ_CUTYOUIN: eSeat = ", eSeat)
oiBankNote = CREATE_OBJECT(P_BANKNOTE_S, GET_ENTITY_COORDS(myTaxiData.piTaxiPassenger))
ATTACH_ENTITY_TO_ENTITY(oiBankNote, myTaxiData.piTaxiPassenger, ENUM_TO_INT(BONETAG_R_HAND), <<0,0,0>>, << 0,0,0>>)
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
TASK_PLAY_ANIM(myTaxiData.piTaxiPassenger, "oddjobs@taxi@cyi", GET_PASSENGER_HAND_OVER_ANIM_STRING(eSeat),REALLY_SLOW_BLEND_IN,REALLY_SLOW_BLEND_OUT)
TASK_PLAY_ANIM(PLAYER_PED_ID(), "oddjobs@taxi@cyi", GET_PLAYER_HAND_OVER_ANIM_STRING(eSeat),REALLY_SLOW_BLEND_IN,REALLY_SLOW_BLEND_OUT)
PLAY_ENTITY_ANIM(oiBankNote, GET_MONEY_HAND_OVER_ANIM_STRING(eSeat), "oddjobs@taxi@cyi", 1.0, FALSE, FALSE)
ENDIF
bIsHandoffDone = TRUE
ENDIF
IF HAS_TAXI_OJ_PASSENGER_BEEN_DROPPED_OFF(myTaxiData)
//SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(AP1_02_DOOR_L, << -1042.22, -2747.98, 21.97 >>, FALSE, 0)
CLEAR_SEQUENCE_TASK(seqIndexTaxiTemp)
OPEN_SEQUENCE_TASK(seqIndexTaxiTemp)
TASK_LEAVE_ANY_VEHICLE(NULL)
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE)
TASK_CLEAR_LOOK_AT(NULL)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,myTaxiData.vTaxiOJ_PassengerGoToPt,PEDMOVEBLENDRATIO_WALK)
TASK_START_SCENARIO_IN_PLACE(NULL, "WORLD_HUMAN_STAND_MOBILE", 0, TRUE)
CLOSE_SEQUENCE_TASK(seqIndexTaxiTemp)
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, seqIndexTaxiTemp)
SET_PED_KEEP_TASK(myTaxiData.piTaxiPassenger,TRUE)
//TAXI_OJ_TASK_PASSENGER_DROPOFF(myTaxiData)
SET_PED_WEAPON_MOVEMENT_CLIPSET(myTaxiData.piTaxiPassenger, "MOVE_P_M_ZERO_RUCKSACK")
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SCORECARD_GRADE)
ENDIF
BREAK
/*Pop up the scorecard---------------------------------------------------------------------------------------
oooooooo8 oooooooo8 ooooooo oooooooooo ooooooooooo oooooooo8
888 o888 88 o888 888o 888 888 888 88 o888 88
888oooooo 888 888 888 888oooo88 888ooo8 888
888 888o oo 888o o888 888 88o 888 oo 888o oo
o88oooo888 888oooo88 88ooo88 o888o 88o8 o888ooo8888 888oooo88
*/
CASE TRS_SCORECARD_GRADE
IF TAXI_CALC_SCORECARD(myTaxiData,TaxiMidSize)
//Branching ending depending on how long it took you to lose the cops.
IF bPassengerIsGoingToBeArrested OR iArrestStateIndex = -1
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SPECIAL_ENDING)
ELSE
TAXI_MISSION_END(TRUE,myTaxiData)
//Move on to the next stage
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_CLEANUP)
ENDIF
ENDIF
BREAK
//Handles the passenger getting arrested
CASE TRS_SPECIAL_ENDING
IF UPDATE_TAXI_PASSENGER_ARREST_FOR_CYI()
TAXI_MISSION_END(TRUE, myTaxiData)
//Move on to the next stage
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_CLEANUP)
ENDIF
BREAK
CASE TRS_CLEANUP
Script_Cleanup()
BREAK
ENDSWITCH
ENDIF
ENDPROC
PROC TAXI_OJ_HANDLE_CYI_J_SKIPS()
IF IS_PLAYER_DRIVING_TAXI_OJ(myTaxiData)
IF iArrestStateIndex = -1
AND myTaxiData.tTaxiOJ_RideState >= TRS_DRIVING_PASSENGER
IF GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.viTaxi,myTaxiData.vTaxiOJ_WarpPtDropoff) > 5.0//CONST_TAXI_OJ_DISTANCE_AWAY_TO_WARP
REQUEST_TAXI_ODDJOB_CYI_STREAMS_STAGE_ALT_ENDING()
REQUEST_TAXI_ODDJOB_CYI_STREAMS_END()
myTaxiData.tTaxiOJ_RideState = TRS_DROPPING_OFF
myTaxiData.vTaxiOJDropoff = GET_MISSION_CRITICAL_POINTS(5)
//Update J Skip pAirport
myTaxiData.vTaxiOJ_WarpPtDropoff = <<-1030.5925, -2503.5776, 19.1324>>
myTaxiData.fTaxiOJ_WarpPtHeadingDropoff = 160.5881
SET_ENTITY_COORDS(myTaxiData.viTaxi,myTaxiData.vTaxiOJ_WarpPtDropoff)
SET_ENTITY_HEADING(myTaxiData.viTaxi,myTaxiData.fTaxiOJ_WarpPtHeadingDropoff)
ENDIF
ELIF myTaxiData.tTaxiOJ_RideState = TRS_WAIT_1ST_STOP
IF NOT bDropOffFound
IF NOT IS_PASSENGER_IN_TAXI(myTaxiData)
SET_ENTITY_VISIBLE(myTaxiData.piTaxiPassenger, TRUE)
SET_ENTITY_CAN_BE_DAMAGED(myTaxiData.piTaxiPassenger,TRUE)
SET_ENTITY_INVINCIBLE(myTaxiData.piTaxiPassenger,FALSE)
SET_PED_INTO_VEHICLE(myTaxiData.piTaxiPassenger,myTaxiData.viTaxi,VS_BACK_LEFT)
SET_PLAYER_WANTED_LEVEL_NO_DROP(GET_PLAYER_INDEX(),3)
ENDIF
myTaxiData.vTaxiOJDropoff = GET_MISSION_CRITICAL_POINTS(5) //Airport
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_WAIT_FOR_PASSENGER)
bDropOffFound = TRUE
ENDIF
ELIF myTaxiData.tTaxiOJ_RideState = TRS_ESCAPE_POLICE
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) > 1
CLEAR_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX())
ENDIF
ENDIF
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)
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J))
TAXI_OJ_HANDLE_CYI_J_SKIPS()
ENDIF
// Debug Key: Check for Pass (not for Minigmes)
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S))
TAXI_ODDJOB_DEBUG_SKIP_TO_SCORECARD(myTaxiData)
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_CUTYOUIN()
ELSE
REASSIGN_TAXI_OJ_DRIVER(myTaxiData)
ENDIF
WAIT(0)
ENDWHILE
// Script should never reach here. Always terminate with cleanup function.
ENDSCRIPT