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

2255 lines
77 KiB
Python
Executable File
Raw Permalink 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_GotYouNow.sc
// Dev : John R. Diaz
/*
Weve got you this time, pal! This is the only scenario that launches without immediately notifying the player. If the player
has angered a specific gang or has committed enough crimes to anger the police, this scenario will launch and mimic a normal passenger.
However, the drop off for this passenger will be someplace unusual. (Such as behind a warehouse or at an abandoned peer.) When you arrive,
the passenger runs from the car and takes cover. Baddies and cars pop out of hiding and ambush you. You shouldnt fuck with ___! they
shout before opening fire. The player can flee, but if they opt to fight the ambushers should have ammo and contraband such that the
player feels that they did not waste their time by picking up cab fares.
*/
//CHANGELOG==========================================================================================================
//9/27/11 - Reformatting/prettifying all taxi oj scripts
//12/20/11 - End of mission cleaned up to allow for better sequence of events. General script cleanup. --johnsripan
//4/27/12 - Removed all refs to previous Got You Now which took place in the construction site. :(
//===================================================================================================================
//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 "stripclub_public.sch" //Add girl to cellphone
//Local Variables-----------------------------------------------
TaxiStruct myTaxiData
MODEL_NAMES mPassengerModel = G_M_Y_MexGoon_03
ENUM TAXIOJ_GYN_BONUS
TGYN_BONUS_FLAWLESS_VICTORY = 0,
TGYN_BONUS_TOTAL
ENDENUM
BONUS_FIELD bonusFieldGotYouNow[TGYN_BONUS_TOTAL]
//Construction Site Setup/Custscene states
ENUM CSITE_STATES
CSITE_INTRO_DIALOGUE = 0,
CSITE_S01_CLEAR_LAND,
CSITE_S01_CLEANUP
ENDENUM
CSITE_STATES m_CSiteState = CSITE_INTRO_DIALOGUE
ENUM MUG_SCENE
MUGSCENE_INIT,
MUGSCENE_AGGRO,
MUGSCENE_PULSE,
MUGSCENE_FIRST_CAM,
MUGSCENE_SECOND_CAM,
MUGSCENE_GEN_END,
MUGSCENE_GEN_END2,
MUGSCENE_SKIP,
MUGSCENE_SKIP_SETUP,
MUGSCENE_SKIP_FADE_IN,
MUGSCENE_SKIP_END
ENDENUM
MUG_SCENE m_mugScene = MUGSCENE_INIT
ENUM TAXI_DYNAMIC_REQUESTS
TAXIDR_REQUEST,
TAXIDR_WAIT_STREAM,
TAXIDR_CREATE,
TAXIDR_CLEANUP
ENDENUM
TAXI_DYNAMIC_REQUESTS eTaxiRequestState = TAXIDR_REQUEST
CONST_FLOAT TAXI_OJ_CONST_DIST_TO_SEE_CSITE 85.0
CONST_FLOAT TAXI_OJ_CONST_DIST_TO_ESCAPE_CSITE 300.0
CONST_FLOAT TAXI_CONST_CSITE_SPEED_PLAYBACK 1.0
CONST_FLOAT TAXI_CONST_GOON_EGG_ON_DELAY 10.0
CONST_FLOAT fCarDistance 5.0
CONST_FLOAT fPedDistance 4.0
CONST_INT TAXI_CONST_BONUS_CASH_FLAWLESS_VICTORY 100 //500 //1000
//Native Data
SEQUENCE_INDEX siTemp
WEAPON_TYPE currentWeapon
//Entitys
VEHICLE_INDEX viGauntlet
PED_INDEX piChickInGauntlet
//Ints
INT iDebugThrottle = 1
INT iUnderBridgeIndex = -1
INT iLocalBitSet = 0
INT iTipIndex = 0
INT iPlayerHealth
INT iPassengerHealth
INT iSoundID_RingTone = -1
//Bools
BOOL bFairFight = TRUE
BOOL bTaxiGYNOneWarning = FALSE
BOOL bWarningLeeway = FALSE
#IF IS_DEBUG_BUILD
BOOL bFlawlessVictory = TRUE //Made debug only by bobby wright - 30/04/12
#ENDIF
BOOL bHealthBonusGiven = FALSE
BOOL bTaxiEarlyAggro
BOOL bPhoneRang
BOOL bSeatShuffled
BOOL bPhoneAnswered
BOOL bPulseTriggered
//Vectors
VECTOR vPassengerPt = << -1612.2349, 189.1934, 58.9435 >> //UCLS Campus
VECTOR vPassengerPickupPt = << -1612.4570, 184.5166, 58.7712 >>
VECTOR vNewDropoff_2_Under_Bridge = << 32.60266, -1243.83740, 28.45076 >>//<< 27.1498, -1246.5232, 28.4013 >>
VECTOR vDropOffUnderBridge = << 33.2419, -1234.3851, 28.2953 >>
VECTOR vDropOffChickHouse = << -628.1456, -760.3765, 25.1060 >>//<< -1044.6719, -889.0599, 3.9594 >>
VECTOR vChickPtToWalkTo = << -584.7739, -779.0701, 24.0178 >>//<< -1025.6396, -919.9550, 1.2780 >>
VECTOR vFightAreaPos1 = <<47.567871,-1234.684692,28.297070>>
VECTOR vFightAreaPos2 = <<-21.325907,-1235.549194,32.475967>>
VECTOR vScrapLocation = <<37.51834, -1239.02063, 28.40267>>
//VECTOR vAlonzoRunPt
FLOAT fFightAreaWidth = 33.750000
TEXT_LABEL_23 sGetInCabLabel
TEXT_LABEL_23 sCurrentLine
TEXT_LABEL_63 sMaleChatEnter = "amb@world_human_hang_out_street@male_a@enter" //use enter
TEXT_LABEL_63 sMaleChatBase = "amb@world_human_hang_out_street@male_a@base" //use base
TEXT_LABEL_63 sMaleChatIdle = "amb@world_human_hang_out_street@male_a@idle_a" //use idle_a or idle_d
TEXT_LABEL_63 sMaleChatExit = "amb@world_human_hang_out_street@male_a@exit" //use exit
TEXT_LABEL_63 sFemaleChatEnter = "amb@world_human_hang_out_street@female_arm_side@enter" //use enter
TEXT_LABEL_63 sFemaleChatBase = "amb@world_human_hang_out_street@female_arm_side@base" //use base
TEXT_LABEL_63 sFemaleChatIdle = "amb@world_human_hang_out_street@female_arm_side@idle_a" //use idle_b
TEXT_LABEL_63 sFemaleChatExit = "amb@world_human_hang_out_street@female_arm_side@exit" //use exit
//Const
CONST_INT kPedLowAccuracy 1
CONST_INT kPedNotSoLowAccuracy 1
CONST_INT k_bDropOffFound 0
CONST_INT k_bPassengerTalking 1
CONST_INT k_bPassengerVulnerable 2
SCENARIO_BLOCKING_INDEX sbIndex_TaxiOJ
CAMERA_INDEX ciTransCam
//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]
BLIP_INDEX blipZo
AGGRO_ARGS aggroArgs
SCRIPT_SHARD_BIG_MESSAGE TaxiMidSize
//Debug---------------------------------------------------------------------------------------------------------------
#IF IS_DEBUG_BUILD
WIDGET_GROUP_ID taxiRideWidgets
BOOL bForceReset, bResetting
INT iForcedLocation// = 2
BOOL bDebugTurnOnFreeRide = FALSE
FLOAT fCar2PBSpeed = 1.0
BOOL bDebugBonusFlawlessVictory
TEXT_LABEL_31 sDebugString[3]
TXM_DEBUG_SKIP_STATES tDebugState = TXM_DSS_CHECK_FOR_BUTTON_PRESS
#ENDIF
//FUNCTIONS------------------------------------------------------------------------------------------------------------
ENUM GYN_MODELS
GYN_MODEL_GAUNTLET = 0,
GYN_MODEL_LADY,
GYN_NUM_MODELS
ENDENUM
FUNC MODEL_NAMES GET_GYN_MISSION_MODELS(GYN_MODELS whichModel)
MODEL_NAMES mnToReturn
SWITCH whichModel
CASE GYN_MODEL_GAUNTLET
mnToReturn = GAUNTLET
BREAK
CASE GYN_MODEL_LADY
mnToReturn = A_F_Y_EASTSA_03
BREAK
ENDSWITCH
RETURN mnToReturn
ENDFUNC
/// PURPOSE: Make all of our mission specific requests here
///
PROC REQUEST_TAXI_ODDJOB_GYN_STREAMS_STAGE_01()
//Load text and UI
REQUEST_MODEL(mPassengerModel)
//Load text and UI
TAXI_INIT_SHARED_STREAMS()
TaxiMidSize.siMovie = REQUEST_MG_MIDSIZED_MESSAGE()
//REQUEST_AMBIENT_AUDIO_BANK("TREVOR_2_BIKER_RINGTONE")
REQUEST_AMBIENT_AUDIO_BANK("SCRIPT\\TREVOR_2_BIKER_RINGTONE")
CDEBUG1LN(DEBUG_OJ_TAXI,"TXM GYN - Stage 01 Assets Requested")
ENDPROC
PROC RELEASE_TAXI_ODDJOB_GYN_STREAMS_STAGE_01()
SET_MODEL_AS_NO_LONGER_NEEDED(mPassengerModel)
CDEBUG1LN(DEBUG_OJ_TAXI,"Taxi OJ Follow Car Stage01 Assets Released")
ENDPROC
PROC REQUEST_TAXI_ODDJOB_GYN_STREAMS_STAGE_02()
REQUEST_MODEL(GET_GYN_MISSION_MODELS(GYN_MODEL_GAUNTLET))
REQUEST_MODEL(GET_GYN_MISSION_MODELS(GYN_MODEL_LADY))
REQUEST_ANIM_SET("move_strafe_melee_unarmed")
REQUEST_ANIM_DICT("oddjobs@taxi@gyn@")
REQUEST_ANIM_DICT("misscommon@response")
REQUEST_ANIM_DICT("melee@unarmed@streamed_taunts")
REQUEST_ANIM_DICT(sMaleChatEnter)
REQUEST_ANIM_DICT(sMaleChatBase)
REQUEST_ANIM_DICT(sMaleChatIdle)
REQUEST_ANIM_DICT(sMaleChatExit)
REQUEST_ANIM_DICT(sFemaleChatEnter)
REQUEST_ANIM_DICT(sFemaleChatBase)
REQUEST_ANIM_DICT(sFemaleChatIdle)
REQUEST_ANIM_DICT(sFemaleChatExit)
REQUEST_WAYPOINT_RECORDING("taxi_oj_gyn")
CDEBUG1LN(DEBUG_OJ_TAXI,"TXM GYN - Stage 02 Assets Requested")
ENDPROC
PROC RELEASE_TAXI_ODDJOB_GYN_STREAMS_STAGE_02()
SET_MODEL_AS_NO_LONGER_NEEDED(GET_GYN_MISSION_MODELS(GYN_MODEL_GAUNTLET))
SET_MODEL_AS_NO_LONGER_NEEDED(GET_GYN_MISSION_MODELS(GYN_MODEL_LADY))
REMOVE_ANIM_SET("move_strafe_melee_unarmed")
REMOVE_ANIM_DICT("oddjobs@taxi@gyn@")
REMOVE_ANIM_DICT("melee@unarmed@streamed_taunts")
REMOVE_ANIM_DICT("misscommon@response")
REMOVE_ANIM_DICT(sMaleChatEnter)
REMOVE_ANIM_DICT(sMaleChatBase)
REMOVE_ANIM_DICT(sMaleChatIdle)
REMOVE_ANIM_DICT(sMaleChatExit)
REMOVE_ANIM_DICT(sFemaleChatEnter)
REMOVE_ANIM_DICT(sFemaleChatBase)
REMOVE_ANIM_DICT(sFemaleChatIdle)
REMOVE_ANIM_DICT(sFemaleChatExit)
REMOVE_WAYPOINT_RECORDING("taxi_oj_gyn")
RELEASE_AMBIENT_AUDIO_BANK()
CDEBUG1LN(DEBUG_OJ_TAXI,"TXM GYN - Stage 02 Assets Released")
ENDPROC
//// 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_GYN_STAGE_01_ASSETS_LOADED()
IF NOT HAS_MODEL_LOADED(mPassengerModel)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading A_M_M_Farmer_01",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 TAXI_SHARED_ASSETS_STREAMED(iDebugThrottle)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading shared assets",iDebugThrottle)
RETURN FALSE
ENDIF
CDEBUG1LN(DEBUG_OJ_TAXI,"TXMOJ - GYN All Stage 01 Assets Have Loaded")
RETURN TRUE
ENDFUNC
FUNC BOOL HAVE_TAXI_OJ_GYN_STAGE_02_ASSETS_LOADED()
IF NOT HAS_MODEL_LOADED(GET_GYN_MISSION_MODELS(GYN_MODEL_GAUNTLET))
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading Gaunlet ",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_MODEL_LOADED(GET_GYN_MISSION_MODELS(GYN_MODEL_LADY))
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading A_F_Y_EastSA_03",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_SET_LOADED("move_strafe_melee_unarmed")
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading move_strafe_melee_unarmed ",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED("misscommon@response")
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading misscommon@response ",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED(sMaleChatEnter)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading sMaleChatEnter ",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED(sMaleChatBase)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading sMaleChatBase ",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED(sMaleChatExit)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading sMaleChatExit ",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED(sMaleChatIdle)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading sMaleChatIdle ",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED(sFemaleChatBase)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading sFemaleChatBase ",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED(sFemaleChatEnter)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading sFemaleChatEnter ",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED(sFemaleChatExit)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading sFemaleChatExit ",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT HAS_ANIM_DICT_LOADED(sFemaleChatIdle)
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading sFemaleChatIdle ",iDebugThrottle)
RETURN FALSE
ENDIF
IF NOT GET_IS_WAYPOINT_RECORDING_LOADED("taxi_oj_gyn")
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMING - Way point Recording Loading taxi_oj_gyn...",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
TAXI_OJ_CLEAR_AREA_OF_ALL_PEDS_AND_SCENARIOS(sbIndex_TaxiOJ, vNewDropoff_2_Under_Bridge, 100.0,TRUE)
REMOVE_WAYPOINT_RECORDING("taxi_oj_gyn")
SET_CREATE_RANDOM_COPS(TRUE)
RELEASE_TAXI_ODDJOB_GYN_STREAMS_STAGE_01()
RELEASE_TAXI_ODDJOB_GYN_STREAMS_STAGE_02()
REMOVE_MODEL_HIDE(vScrapLocation, 5.0, PROP_SKID_CHAIR_02)
REMOVE_MODEL_HIDE(vScrapLocation, 5.0, PROP_RUB_COUCH03)
STOP_AUDIO_SCENE("TAXI_GOT_U_NOW")
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 SETUP_AMBUSH_SCENE_UNDER_BRIDGE()
SWITCH iUnderBridgeIndex
//Create Vehicle
CASE -1
IF NOT DOES_ENTITY_EXIST(viGauntlet)
viGauntlet = CREATE_VEHICLE(GET_GYN_MISSION_MODELS(GYN_MODEL_GAUNTLET), << 27.1498, -1246.5232, 28.4013 >>, 297.6290)//<< 27.22, -1239.09, 28.95 >>, 310.50) // << 27.2828, -1232.9750, 28.3352 >>, 311.8042) //
iUnderBridgeIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"Camaro Created")
ENDIF
BREAK
//Create Chick & Setup Vehicle
CASE 0
IF NOT IS_ENTITY_DEAD(viGauntlet)
SET_VEHICLE_RADIO_LOUD(viGauntlet,TRUE)
SET_VEHICLE_RADIO_ENABLED(viGauntlet,TRUE)
SET_VEHICLE_NUMBER_PLATE_TEXT(viGauntlet,"SNAKEYES")
SET_VEHICLE_INTERIORLIGHT(viGauntlet,TRUE)
//SET_VEHICLE_DOOR_OPEN( viGauntlet, SC_DOOR_BOOT )
SET_VEHICLE_DOORS_LOCKED(viGauntlet, VEHICLELOCK_CANNOT_ENTER)
VECTOR vTemp
vTemp = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viGauntlet, <<0.0,3.0,0.0>>)
piChickInGauntlet = CREATE_PED(PEDTYPE_MISSION,GET_GYN_MISSION_MODELS(GYN_MODEL_LADY), vTemp, (GET_ENTITY_HEADING(viGauntlet) - 180)) //<< 46.4830, -1230.2010, 28.2881 >>,250.6)
iUnderBridgeIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"Chick Created Created")
ENDIF
BREAK
//Ped is created and car is in place, now task ped
CASE 1
IF NOT IS_ENTITY_DEAD(piChickInGauntlet)
AND NOT IS_ENTITY_DEAD(viGauntlet)
ADD_PED_FOR_DIALOGUE(myTaxiData.tTaxiOJ_Convo,5,piChickInGauntlet,"TaxiLiz")
SET_AMBIENT_VOICE_NAME(piChickInGauntlet, "TaxiLiz")
SET_PED_CONFIG_FLAG(piChickInGauntlet,PCF_CanSayFollowedByPlayerAudio,TRUE)
SET_PED_COMPONENT_VARIATION(piChickInGauntlet, PED_COMP_TORSO, 2, 0)
SET_PED_COMPONENT_VARIATION(piChickInGauntlet, PED_COMP_LEG, 0, 1)
SET_PED_COMPONENT_VARIATION(piChickInGauntlet, PED_COMP_HAIR, 0, 0)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(piChickInGauntlet, TRUE)
SET_PED_CAN_BE_TARGETTED(piChickInGauntlet,FALSE)
PED_HAS_SEXINESS_FLAG_SET(piChickInGauntlet,SF_JEER_AT_HOT_PED)
TASK_LOOK_AT_ENTITY(piChickInGauntlet, viGauntlet, INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
OPEN_SEQUENCE_TASK(siTemp)
//TASK_GO_STRAIGHT_TO_COORD_RELATIVE_TO_ENTITY(NULL,viGauntlet,<<0.0,-3.0,0.0>>,PEDMOVEBLENDRATIO_WALK)
//TASK_TURN_PED_TO_FACE_ENTITY(NULL, viGauntlet)
TASK_PLAY_ANIM(NULL, "oddjobs@taxi@gyn@", "idle_b_ped",NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_LOOPING)
CLOSE_SEQUENCE_TASK(siTemp)
TASK_PERFORM_SEQUENCE(piChickInGauntlet, siTemp)
CLEAR_SEQUENCE_TASK(siTemp)
iUnderBridgeIndex++
CDEBUG1LN(DEBUG_OJ_TAXI,"Chick Tasked")
ENDIF
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE: Call this to get the different camera positions for the csite cutscene
///
/// PARAMS:
/// index -
/// RETURNS:
///
FUNC VECTOR GET_TAXI_OJ_GYN_CSITE_CS_CAM_POS(INT index)
VECTOR vCamPos
SWITCH index
//Revised End shot interp
CASE 8
vCamPos = << -137.4260, -1086.8722, 26.0049 >> //<< -138.6420, -1089.5889, 25.3735 >>
BREAK
//Revised end shot2
CASE 9
vCamPos = << -118.4414, -1079.5820, 27.9648 >> //<< -129.8217, -1101.1809, 24.6919 >>
BREAK
//Revised End shot interp2
CASE 10
vCamPos = << -124.0122, -1077.5231, 27.9648 >> //<< -132.0994, -1100.2334, 24.6919 >>
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_GYN_CSITE_CS_CAM_ROT(INT index)
VECTOR vCamDir
SWITCH index
//Revised End shot interp
CASE 8
vCamDir = << -10.5394, -0.0000, -112.7087 >> //<< -14.2245, -0.0000, -90.7686 >>
BREAK
//Revised end shot
CASE 9
vCamDir = << -26.9453, -0.0000, 153.6124 >> //<< -13.3622, -0.0000, -22.5860 >>
BREAK
//Revised End shot interp
CASE 10
vCamDir = << -26.9453, -0.0000, 166.5540 >> //<< -13.3622, -0.0000, -22.5860 >>
BREAK
ENDSWITCH
RETURN vCamDir
ENDFUNC
PROC CLEANUP_TAXIOJ_GYN()
IF DOES_CAM_EXIST(myTaxiData.camTaxi)
DESTROY_CAM(myTaxiData.camTaxi)
ENDIF
DISPLAY_RADAR(TRUE)
SET_PLAYER_CONTROL(GET_PLAYER_INDEX(),TRUE)
ENDPROC
/// PURPOSE:
/// Initializes script variables
PROC INITIALIZE_SCRIPT_VARIABLES()
//Init j skip points------
myTaxiData.vTaxiOJ_WarpPtPickup = << -1583.5905, 169.2662, 57.6205 >>
myTaxiData.fTaxiOJ_WarpPtHeadingPickup = 116
myTaxiData.vTaxiOJ_WarpPtDropoff = << 49.0898, -1178.9226, 28.2091 >>
myTaxiData.fTaxiOJ_WarpPtHeadingDropoff = 185.975
TAXI_ODDJOB_GLOBAL_SETUP(myTaxiData,TXM_08_GOTYOUNOW)
// 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)
enumCharacterList playerEnum
playerEnum = GET_PLAYER_PED_ENUM(PLAYER_PED_ID())
IF (playerEnum = CHAR_MICHAEL)
sGetInCabLabel = "txm9_gHelp1M_4"
ELIF (playerEnum = CHAR_TREVOR)
sGetInCabLabel = "txm9_gHelp1T_4"
ELIF (playerEnum = CHAR_FRANKLIN)
sGetInCabLabel = "txm9_gHelp1F_7"
ENDIF
CDEBUG1LN(DEBUG_OJ_TAXI,"sGetInCabLabel = ", sGetInCabLabel)
#IF IS_DEBUG_BUILD
#IF DEBUG_iTurnOnAllDXDebug
ENABLE_ALL_DIALOGUE_DEBUG()
#ENDIF
taxiRideWidgets = START_WIDGET_GROUP("Taxi Ride - Got You Now")
INIT_ODDJOB_TAXI_WIDGETS()
ADD_WIDGET_STRING("Debug Taxi Bonus")
ADD_WIDGET_BOOL("Flawless Victory ",bDebugBonusFlawlessVictory)
START_NEW_WIDGET_COMBO()
//REPEAT COUNT_OF(CSITE_CUTSCENE_STATES) i
ADD_TO_WIDGET_COMBO("CSITE_CS_TRIGGER_CARS")
//ENDREPEAT
STOP_WIDGET_COMBO( "Mission To Run Next", iForcedLocation)
ADD_WIDGET_FLOAT_SLIDER("Car 2 Speed", fCar2PBSpeed,1.0,3.0,0.1)
ADD_WIDGET_BOOL("Restart Taxi Mission", bForceReset)
STOP_WIDGET_GROUP()
#ENDIF
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~-------------------------------~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~----")
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~~~~~~~~~~~~ Oddjobs | Taxi | Got You Now ~~~~~~~~~~~~~~~~~~----------")
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~-------------------------------~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~----")
ENDPROC
#IF IS_DEBUG_BUILD
PROC PROCESS_WIDGETS()
UPDATE_TAXI_WIDGETS(myTaxiData,tTaxiOJ_DQ_Data)
IF bForceReset
CLEANUP_TAXIOJ_GYN()
bForceReset = FALSE
bResetting = TRUE
ENDIF
IF bDebugBonusFlawlessVictory
//Show if bonus has been unlocked or not
IF NOT bFlawlessVictory
sDebugString[0]= "Flawless V Bonus LOCKED "
DRAW_DEBUG_TEXT_2D(sDebugString[0],<<0.07,0.77,0.0>>,255,0,0)
ELSE
sDebugString[0]= "Flawless Bonus UnLOCKED "
DRAW_DEBUG_TEXT_2D(sDebugString[0],<<0.07,0.77,0.0>>)
ENDIF
ENDIF
IF bResetting
IF HAVE_TAXI_OJ_GYN_STAGE_01_ASSETS_LOADED()
bResetting = FALSE
ENDIF
ENDIF
ENDPROC
#ENDIF
PROC TASK_PED_FIGHT_STANCE(PED_INDEX &Fighter)
IF NOT IS_PED_INJURED(Fighter)
//SET_PED_STRAFE_CLIPSET(Fighter, "move_strafe_melee_unarmed")
IF ( GET_SCRIPT_TASK_STATUS(Fighter, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK
OR GET_SCRIPT_TASK_STATUS(Fighter, SCRIPT_TASK_PERFORM_SEQUENCE) = FINISHED_TASK )
TASK_PLAY_ANIM(Fighter, "move_strafe_melee_unarmed", "idle", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING)
ENDIF
ENDIF
ENDPROC
/// PURPOSE: Sets variables for the passenger to go aggressive. Also tasks him into combat.
///
PROC SET_TAXI_OJ_PED_IN_COMBAT(PED_INDEX & pedInCombat)
IF DOES_ENTITY_EXIST(pedInCombat)
IF NOT IS_PED_INJURED(pedInCombat)
SET_PED_COMBAT_ATTRIBUTES(pedInCombat, CA_AGGRESSIVE, FALSE)
SET_PED_COMBAT_ATTRIBUTES(pedInCombat, CA_USE_VEHICLE, FALSE)
SET_PED_COMBAT_ATTRIBUTES(pedInCombat, CA_LEAVE_VEHICLES, TRUE)
SET_PED_SEEING_RANGE(pedInCombat, 300.0)
SET_PED_HEARING_RANGE(pedInCombat, 300.0)
SET_PED_ID_RANGE(pedInCombat, 300.0)
SET_PED_COMBAT_MOVEMENT(pedInCombat, CM_WILLADVANCE)
SET_PED_COMBAT_ABILITY(pedIncombat, CAL_PROFESSIONAL)
SET_PED_ACCURACY(pedInCombat, 75)
SET_PED_COMBAT_RANGE(pedInCombat, CR_MEDIUM)
SET_COMBAT_FLOAT(pedInCombat, CCF_FIGHT_PROFICIENCY, 1.0)
SET_PED_RELATIONSHIP_GROUP_HASH(pedInCombat,myTaxiData.relPassenger)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, myTaxiData.relPassenger, RELGROUPHASH_PLAYER)
TASK_COMBAT_HATED_TARGETS_AROUND_PED( pedInCombat,100.0)
ENDIF
ENDIF
ENDPROC
FUNC BOOL MUGGING_CAMS()
VECTOR vMugCamPosition, vMugCamRot, vWarpTemp2
STOP_PHONE_AND_APPS_FOR_TAXI_CUTSCENE()
IF m_mugScene < MUGSCENE_FIRST_CAM //MUGSCENE_SKIP
AND m_mugScene > MUGSCENE_INIT
IF HANDLE_SKIP_CUTSCENE(iAllowSkipCutsceneTime)
m_mugScene = MUGSCENE_SKIP
ENDIF
ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
DRAW_DEBUG_TEXT_2D("Player INSIDE of vehicle", << 0.5, 0.2, 0.0 >>)
ELSE
DRAW_DEBUG_TEXT_2D("Player OUTSIDE of vehicle", << 0.5, 0.2, 0.0 >>)
ENDIF
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
DRAW_DEBUG_TEXT_2D("Player INSIDE of vehicle adjusted", << 0.5, 0.25, 0.0 >>)
ELSE
DRAW_DEBUG_TEXT_2D("Player OUTSIDE of vehicle adjusted", << 0.5, 0.25, 0.0 >>)
ENDIF
ENDIF
SWITCH m_mugScene
CASE MUGSCENE_INIT
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
ODDJOB_ENTER_CUTSCENE()
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
CREATE_TAXI_OJ_CAM(myTaxiData.camTaxi,<<0,0,0>>, <<0,0,0>>)
//vMugCamPosition = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viGauntlet, << -1.5, 6.0, -0.2 >>)
vMugCamPosition = <<30.8062, -1242.6118, 29.1026>>
vMugCamRot = <<7.5623, -0.0714, 149.3929>>
SET_CAM_COORD(myTaxiData.camTaxi, vMugCamPosition)
SET_CAM_ROT(myTaxiData.camTaxi, vMugCamRot)
SET_CAM_FOV(myTaxiData.camTaxi, 35.0)
SHAKE_CAM(myTaxiData.camTaxi, "HAND_SHAKE", 0.3)
//POINT_CAM_AT_ENTITY(myTaxiData.camTaxi, viGauntlet, <<1.0, 1.0, 1.0>>)
SET_CAM_ACTIVE(myTaxiData.camTaxi,TRUE)
RENDER_SCRIPT_CAMS(TRUE,FALSE)
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
AND NOT IS_ENTITY_DEAD(myTaxiData.viTaxi)
// VECTOR vWarpTemp
SET_ENTITY_COORDS(myTaxiData.viTaxi, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viGauntlet, << 0, 8.25, 0.0>>)) //<< 33.2618, -1227.6528, 28.3351 >>)
SET_ENTITY_HEADING(myTaxiData.viTaxi, 114.629) //131.7553)
// vWarpTemp = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(myTaxiData.viTaxi, << -2.0, -0.75, 0.0 >>)
// SET_ENTITY_COORDS(myTaxiData.piTaxiPassenger, vWarpTemp)
// SET_ENTITY_HEADING(myTaxiData.piTaxiPassenger, (GET_ENTITY_HEADING(myTaxiData.viTaxi) - 45))
//TASK_LEAVE_ANY_VEHICLE(myTaxiData.piTaxiPassenger)
TASK_LOOK_AT_ENTITY(myTaxiData.piTaxiPassenger, PLAYER_PED_ID(), INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
//TASK_LEAVE_ANY_VEHICLE(myTaxiData.piTaxiPassenger, 0)
ENDIF
SET_NEXT_TAXI_SPEECH(myTaxiData, TAXI_DI_GIRL_NOTICE, TRUE, TRUE)
CDEBUG1LN(DEBUG_OJ_TAXI,"Combat timer started")
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
m_mugScene = MUGSCENE_AGGRO
ELSE
KILL_ANY_CONVERSATION()
ENDIF
BREAK
CASE MUGSCENE_AGGRO
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_GENERIC) > 2.0
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
CDEBUG1LN(DEBUG_OJ_TAXI,"Combat initiated")
CLEAR_SEQUENCE_TASK(siTemp)
OPEN_SEQUENCE_TASK(siTemp)
TASK_LEAVE_ANY_VEHICLE(NULL)
TASK_ENTER_VEHICLE(NULL, myTaxiData.viTaxi, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_WALK, ECF_JUST_PULL_PED_OUT | ECF_JACK_ANYONE)// | ECF_WARP_ENTRY_POINT)
CLOSE_SEQUENCE_TASK(siTemp)
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, siTemp)
PLAY_SINGLE_LINE_FROM_CONVERSATION(myTaxiData.tTaxiOJ_Convo, myTaxiData.sTaxiOJ_DXSubtitleGroupID, "txm9_figt1", "txm9_figt1_1",CONV_PRIORITY_HIGH)
ENDIF
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
IF IS_PLAYER_IN_FIRST_PERSON_CAMERA()
IF NOT bPulseTriggered
ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE)
PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET")
bPulseTriggered = TRUE
ENDIF
ENDIF
CDEBUG1LN(DEBUG_OJ_TAXI,"going to mug pulse")
m_mugScene = MUGSCENE_PULSE
ENDIF
BREAK
CASE MUGSCENE_PULSE
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_GENERIC) > 0.3
CDEBUG1LN(DEBUG_OJ_TAXI,"going to mug first cam")
m_mugScene = MUGSCENE_FIRST_CAM
ENDIF
BREAK
CASE MUGSCENE_FIRST_CAM
// IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_GENERIC) > 0.75
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
RENDER_SCRIPT_CAMS(FALSE,FALSE)
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
CDEBUG1LN(DEBUG_OJ_TAXI,"going to mug second cam")
m_mugScene = MUGSCENE_SECOND_CAM
// ENDIF
BREAK
CASE MUGSCENE_SECOND_CAM
IF NOT IS_PLAYER_DRIVING_TAXI_OJ(myTaxiData)
AND NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
//KILL_ANY_CONVERSATION()
SET_PED_CONFIG_FLAG(myTaxiData.piTaxiPassenger, PCF_ForceIgnoreMeleeActiveCombatant, TRUE)
//SET_PED_RESET_FLAG(myTaxiData.piTaxiPassenger, PRF_ForcePedToStrafe, TRUE)
SET_TAXI_OJ_PED_IN_COMBAT(myTaxiData.piTaxiPassenger)
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
CDEBUG1LN(DEBUG_OJ_TAXI,"going to mug gen end")
m_mugScene = MUGSCENE_GEN_END
ELSE
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
IF GET_SCRIPT_TASK_STATUS(myTaxiData.piTaxiPassenger, SCRIPT_TASK_PERFORM_SEQUENCE) != PERFORMING_TASK
CDEBUG1LN(DEBUG_OJ_TAXI,"passenger was broke out of his task, re-tasking")
CLEAR_SEQUENCE_TASK(siTemp)
OPEN_SEQUENCE_TASK(siTemp)
TASK_LEAVE_ANY_VEHICLE(NULL)
TASK_ENTER_VEHICLE(NULL, myTaxiData.viTaxi, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_WALK, ECF_JUST_PULL_PED_OUT | ECF_JACK_ANYONE)// | ECF_WARP_ENTRY_POINT)
CLOSE_SEQUENCE_TASK(siTemp)
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, siTemp)
ENDIF
ELSE
CDEBUG1LN(DEBUG_OJ_TAXI,"ped is injured, big problem")
ENDIF
ENDIF
BREAK
CASE MUGSCENE_GEN_END
// IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
// SET_PED_RESET_FLAG(myTaxiData.piTaxiPassenger, PRF_ForcePedToStrafe, TRUE)
// ENDIF
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_GENERIC) > 0.5
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
PLAY_SINGLE_LINE_FROM_CONVERSATION(myTaxiData.tTaxiOJ_Convo, myTaxiData.sTaxiOJ_DXSubtitleGroupID, "txm9_figt1", "txm9_figt1_2",CONV_PRIORITY_VERY_HIGH)
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
CDEBUG1LN(DEBUG_OJ_TAXI,"going to gen end 2")
m_mugScene = MUGSCENE_GEN_END2
ENDIF
BREAK
CASE MUGSCENE_GEN_END2
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
SET_PED_RESET_FLAG(myTaxiData.piTaxiPassenger, PRF_ForcePedToStrafe, TRUE)
ENDIF
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_GENERIC) > 1.0
//AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
SET_NEXT_TAXI_SPEECH(myTaxiData, TAXI_OBJ_GYN, TRUE)
ODDJOB_EXIT_CUTSCENE()
IF DOES_CAM_EXIST(myTaxiData.camTaxi)
DESTROY_CAM(myTaxiData.camTaxi)
ENDIF
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
RETURN TRUE
ENDIF
BREAK
CASE MUGSCENE_SKIP
CDEBUG1LN(DEBUG_OJ_TAXI,"Mug scene skipped")
IF IS_SCREEN_FADED_OUT()
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
AND IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
CLEAR_PED_TASKS_IMMEDIATELY(myTaxiData.piTaxiPassenger)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
ENDIF
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_ANY_CONVERSATION()
ENDIF
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
m_mugScene = MUGSCENE_SKIP_SETUP
ENDIF
BREAK
CASE MUGSCENE_SKIP_SETUP
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_GENERIC) > 0.3
VECTOR vWarpTemp
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
AND IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
CLEAR_PED_TASKS_IMMEDIATELY(myTaxiData.piTaxiPassenger)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_VEHICLE_DOOR_SHUT(myTaxiData.viTaxi, SC_DOOR_FRONT_LEFT)
vWarpTemp = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(myTaxiData.viTaxi, << -1.6, 0.0, 0.0 >>)
vWarpTemp2 = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(myTaxiData.viTaxi, << -4.0, 2.0, 0.0 >>)
SET_ENTITY_COORDS(PLAYER_PED_ID(), vWarpTemp)
SET_ENTITY_COORDS(myTaxiData.piTaxiPassenger, vWarpTemp2)
SET_ENTITY_HEADING(PLAYER_PED_ID(),
GET_HEADING_BETWEEN_VECTORS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(myTaxiData.piTaxiPassenger)))
//SET_PED_TO_RAGDOLL(PLAYER_PED_ID(), 2000, 3000, TASK_NM_SCRIPT)
SET_ENTITY_HEADING(myTaxiData.piTaxiPassenger,
GET_HEADING_BETWEEN_VECTORS(GET_ENTITY_COORDS(myTaxiData.piTaxiPassenger), GET_ENTITY_COORDS(PLAYER_PED_ID())))
//TASK_PLAY_ANIM(myTaxiData.piTaxiPassenger, "move_strafe_melee_unarmed", "idle", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING)
SET_TAXI_OJ_PED_IN_COMBAT(myTaxiData.piTaxiPassenger)
ENDIF
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
RENDER_SCRIPT_CAMS(FALSE, FALSE)
IF DOES_CAM_EXIST(myTaxiData.camTaxi)
DESTROY_CAM(myTaxiData.camTaxi)
ENDIF
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON)
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
m_mugScene = MUGSCENE_SKIP_FADE_IN
ENDIF
BREAK
CASE MUGSCENE_SKIP_FADE_IN
CDEBUG1LN(DEBUG_OJ_TAXI,"Mug scene skip fade in")
IF NOT IS_SCREEN_FADING_IN()
AND GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_GENERIC) > 1.0
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
IF IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
m_mugScene = MUGSCENE_SKIP_END
ENDIF
BREAK
CASE MUGSCENE_SKIP_END
IF NOT IS_PLAYER_DRIVING_TAXI_OJ(myTaxiData)
ODDJOB_EXIT_CUTSCENE()
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_OBJ_GYN, TRUE)
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
RETURN TRUE
ENDIF
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
PROC TAXI_OJ_S01_SETUP_CSITE()
SWITCH m_CSiteState
//Say something when the construction site is near
CASE CSITE_INTRO_DIALOGUE
IF NOT IS_BITMASK_AS_ENUM_SET(myTaxiData.iTaxiOJ_ExtraBitsDialogue,TAXI_DXF_SEEN_DEST)
AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_SEEN_DESTINATION
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_CSITE
AND iUnderBridgeIndex > 1
myTaxiData.vTaxiOJDropoff = vNewDropoff_2_Under_Bridge
SET_BLIP_COORDS(myTaxiData.blipTaxiDropOff, vNewDropoff_2_Under_Bridge)
//Clear & Close the Dialogue Q
CLEAR_DIALOGUE_QUEUE(tDialogueLine)
CLOSE_DIALOGUE_QUEUE(tTaxiOJ_DQ_Data,3)
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_SEEN_DESTINATION_2,TRUE)
IF IS_VEHICLE_DRIVEABLE(viGauntlet)
SET_VEHICLE_DOOR_OPEN( viGauntlet, SC_DOOR_BONNET )
SET_VEHICLE_COLOUR_COMBINATION(viGauntlet, 0 )
//SET_VEHICLE_DOOR_BROKEN( viGauntlet, SC_DOOR_BONNET, FALSE)
SET_VEHICLE_ENGINE_HEALTH(viGauntlet, 150.0)
SET_VEHICLE_DAMAGE(viGauntlet, <<0.0, 0.0, 0.0>>, 1000.0, 0.0, TRUE)
//GIVE_VEHICLE_MINIMUM_HEALTH(viGauntlet)
ENDIF
CREATE_MODEL_HIDE(vScrapLocation, 5.0, PROP_SKID_CHAIR_02, TRUE)
CREATE_MODEL_HIDE(vScrapLocation, 5.0, PROP_RUB_COUCH03, TRUE)
m_CSiteState = CSITE_S01_CLEAR_LAND
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteState = CSITE_S01_CLEAR_LAND")
IF g_bDebug
SCRIPT_ASSERT("Seeing the construction site")
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE CSITE_S01_CLEAR_LAND
TAXI_OJ_CLEAR_AREA_OF_ALL_PEDS_AND_SCENARIOS(sbIndex_TaxiOJ, vNewDropoff_2_Under_Bridge, 30.0)
m_CSiteState = CSITE_S01_CLEANUP
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_OJ_S01_SETUP_CSITE = CSITE_S01_CLEANUP")
BREAK
CASE CSITE_S01_CLEANUP
BREAK
ENDSWITCH
ENDPROC
FUNC BOOL CHECK_PLAYER_ESCAPED_CSITE()
IF GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.piTaxiPlayer,myTaxiData.vTaxiOJDropoff) >= TAXI_OJ_CONST_DIST_TO_ESCAPE_CSITE
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC TAXI_OJ_GYN_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)
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_LOST_POLICE)
//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
ENUM GYN_CS_STATES
GYN_CS_01_INIT = 0,
GYN_CS_SHOT_02,
GYN_CS_SHOT_INTERP_02,
GYN_CS_SHOT_03,
GYN_CS_SHOT_INTERP_03,
GYN_CS_SHOT_04,
GYN_CS_SHOT_05,
GYN_CS_SKIP,
GYN_CS_END,
GYN_CS_CLEANUP,
GYN_CS_NUM_SCENES
ENDENUM
GYN_CS_STATES m_ChickCSState = GYN_CS_01_INIT
/// PURPOSE: plays the cutscene when the lady goes up to the player and asks him for ride home
///
/// RETURNS: TRUE when it's done and ready to move on
///
FUNC BOOL TAXI_OJ_GYN_CUTSCENE_SAVE_CHICK()
STOP_PHONE_AND_APPS_FOR_TAXI_CUTSCENE()
IF NOT IS_ENTITY_DEAD(piChickInGauntlet)
AND IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
SWITCH m_ChickCSState
//Init everying and put everything in it's place
CASE GYN_CS_01_INIT
IF CAN_PLAYER_START_CUTSCENE(TRUE, FALSE)
TASK_LOOK_AT_ENTITY(piChickInGauntlet, PLAYER_PED_ID(), -1, SLF_SLOW_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), piChickInGauntlet, -1, SLF_SLOW_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
//Clear & Close the Dialogue Q
CLEAR_DIALOGUE_QUEUE(tDialogueLine)
CLOSE_DIALOGUE_QUEUE(tTaxiOJ_DQ_Data,-1,TRUE)
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = GYN_CS_SHOT_02")
m_ChickCSState = GYN_CS_SHOT_02
ELSE
CDEBUG1LN(DEBUG_OJ_TAXI,"CAN_PLAYER_START_CUTSCENE returns false")
ENDIF
BREAK
//1st shot, looks at nurse, driver
CASE GYN_CS_SHOT_02
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 2.0
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GIRL_HELP,TRUE,FALSE,TRUE)
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = GYN_CS_SHOT_INTERP_04")
m_ChickCSState = GYN_CS_SHOT_04
ENDIF
BREAK
//Cut to them getting in taxi
CASE GYN_CS_SHOT_04
sCurrentLine = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 15.0
OR ARE_STRINGS_EQUAL(sGetInCabLabel, sCurrentLine)
INT iNumSeats
VEHICLE_SEAT vsChickSeat
iNumSeats = GET_VEHICLE_MAX_NUMBER_OF_PASSENGERS(myTaxiData.viTaxi)
IF GET_ENTITY_MODEL(myTaxiData.viTaxi) = SENTINEL2
CDEBUG1LN(DEBUG_OJ_TAXI,"vehicle is sentinel2")
iNumSeats = 1
ELSE
CDEBUG1LN(DEBUG_OJ_TAXI,"vehicle is not a sentinel2")
ENDIF
IF iNumSeats > 1
vsChickSeat = VS_BACK_RIGHT
ELSE
vsChickSeat = VS_FRONT_RIGHT
ENDIF
TASK_ENTER_VEHICLE(piChickInGauntlet, myTaxiData.viTaxi, 40000, vsChickSeat, PEDMOVEBLENDRATIO_WALK)
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
m_ChickCSState = GYN_CS_SHOT_05
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = GYN_CS_SHOT_05")
ELSE
IF (GET_GAME_TIMER() % 1500) < 50
TASK_TURN_PED_TO_FACE_ENTITY(piChickInGauntlet, PLAYER_PED_ID())
ENDIF
ENDIF
BREAK
CASE GYN_CS_SHOT_05
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 20
IF NOT IS_ENTITY_DEAD(piChickInGauntlet)
CLEAR_PED_TASKS(piChickInGauntlet)
TASK_WANDER_STANDARD(piChickInGauntlet)
ENDIF
TAXI_SET_FAIL(myTaxiData, "Player not letting the chick in the car", TFS_TAXI_STOPPED)
ENDIF
IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
IF NOT IS_ENTITY_DEAD(piChickInGauntlet)
IF IS_PED_IN_ANY_VEHICLE(piChickInGauntlet)
m_ChickCSState = GYN_CS_END
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = GYN_CS_END")
ELSE
IF (GET_GAME_TIMER() % 2500) < 50
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = GYN_CS_SHOT_05 - Gfriend is not in a vehicle")
ENDIF
ENDIF
ELSE
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = GYN_CS_SHOT_05 - Gfriend is not dead")
ENDIF
ELSE
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = GYN_CS_SHOT_05 - Taxi is not driveable")
ENDIF
BREAK
CASE GYN_CS_SKIP
IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
IF NOT IS_ENTITY_DEAD(piChickInGauntlet)
IF NOT IS_PED_IN_ANY_VEHICLE(piChickInGauntlet)
SET_PED_INTO_VEHICLE(piChickInGauntlet, myTaxiData.viTaxi,VS_BACK_RIGHT)
ENDIF
ENDIF
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), myTaxiData.viTaxi)
ENDIF
ENDIF
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
m_ChickCSState = GYN_CS_END
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = GYN_CS_END")
BREAK
CASE GYN_CS_END
DRAW_DEBUG_TEXT_2D("GYN_CS_END", << 0.75, 0.75, 0.0 >>)
myTaxiData.bPassengerObjPrinted = FALSE
IF DOES_CAM_EXIST(myTaxiData.camTaxi)
DESTROY_CAM(myTaxiData.camTaxi)
ENDIF
IF DOES_CAM_EXIST(myTaxiData.camInterp)
DESTROY_CAM(myTaxiData.camInterp)
ENDIF
IF DOES_CAM_EXIST(ciTransCam)
DESTROY_CAM(ciTransCam)
ENDIF
// ODDJOB_EXIT_CUTSCENE()
// RENDER_SCRIPT_CAMS(FALSE,FALSE)
//
// DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
// SET_GAMEPLAY_CAM_RELATIVE_HEADING()
// SET_GAMEPLAY_CAM_RELATIVE_PITCH()
TAXI_CANCEL_TIMERS(myTaxiData, TT_CUTSCENE)
m_ChickCSState = GYN_CS_CLEANUP
CDEBUG1LN(DEBUG_OJ_TAXI,"m_CSiteCSState = GYN_CS_CLEANUP")
RETURN TRUE
BREAK
ENDSWITCH
ELSE
CDEBUG1LN(DEBUG_OJ_TAXI,"Cutscene can't go")
ENDIF
RETURN FALSE
ENDFUNC
PROC UPDATE_DYNAMIC_TAXI_REQUESTS()
SWITCH eTaxiRequestState
CASE TAXIDR_REQUEST
IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
AND GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(myTaxiData.viTaxi, myTaxiData.vTaxiOJDropoff) < 300
REQUEST_TAXI_ODDJOB_GYN_STREAMS_STAGE_02()
eTaxiRequestState = TAXIDR_WAIT_STREAM
ENDIF
BREAK
CASE TAXIDR_WAIT_STREAM
IF HAVE_TAXI_OJ_GYN_STAGE_02_ASSETS_LOADED()
eTaxiRequestState = TAXIDR_CREATE
ENDIF
BREAK
CASE TAXIDR_CREATE
SETUP_AMBUSH_SCENE_UNDER_BRIDGE()
IF iUnderBridgeIndex > 1
eTaxiRequestState = TAXIDR_CLEANUP
ENDIF
BREAK
CASE TAXIDR_CLEANUP
IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
AND GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(myTaxiData.viTaxi, myTaxiData.vTaxiOJDropoff) > 350
RELEASE_TAXI_ODDJOB_GYN_STREAMS_STAGE_02()
iUnderBridgeIndex = -1
eTaxiRequestState = TAXIDR_REQUEST
ENDIF
BREAK
ENDSWITCH
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_GYN_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_GYN_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
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)
IF g_bDebug
SCRIPT_ASSERT("Triggering Banter 1")
ENDIF
//Start the mission timer here
TAXI_START_TIMER(myTaxiData, TT_RIDETODEST)
ENDIF
BREAK
CASE 2
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > 4.0
AND NOT bPhoneRang
iSoundID_RingTone = GET_SOUND_ID()
PLAY_SOUND_FROM_ENTITY(iSoundID_RingTone, "Biker_Ring_Tone", myTaxiData.viTaxi, "TREVOR_2_SOUNDS")
//PLAY_SOUND_FRONTEND(iSoundID_RingTone, "Biker_Ring_Tone", "TREVOR_2_SOUNDS")
CDEBUG1LN(DEBUG_OJ_TAXI,"Rang dat phone. iSoundID_RingTone = ", iSoundID_RingTone)
bPhoneRang = TRUE
ELIF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > 7.0
AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_BANTER_2
AND bPhoneRang
AND NOT bPhoneAnswered
ODDJOB_STOP_SOUND(iSoundID_RingTone)
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
TASK_USE_MOBILE_PHONE(myTaxiData.piTaxiPassenger, TRUE)
ENDIF
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BANTER_2,TRUE)
CDEBUG1LN(DEBUG_OJ_TAXI,"TX DX CALL TAXI_DI_BANTER_2")
IF g_bDebug
SCRIPT_ASSERT("Triggering Banter 1")
ENDIF
bPhoneAnswered = TRUE
ENDIF
BREAK
CASE 3
// Get the guy off the phone.
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
TASK_USE_MOBILE_PHONE(myTaxiData.piTaxiPassenger, FALSE)
ENDIF
tTaxiOJ_DQ_Data.iCurrentDQLine++
// IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > GET_RANDOM_FLOAT_IN_RANGE(3.0,6.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
//Liz's Banter
CASE 5
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > 2.0
AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_GIRL_BANTER
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GIRL_BANTER,TRUE)
CDEBUG1LN(DEBUG_OJ_TAXI,"TX DX CALL TAXI_DI_GIRL_BANTER")
IF g_bDebug
SCRIPT_ASSERT("Triggering TAXI_DI_GIRL_BANTER")
ENDIF
tTaxiOJ_DQ_Data.iCurrentDQLine++
ENDIF
BREAK
ENDSWITCH
ENDIF
PROCESS_IMPORTANT_DIALOGUE_Q(myTaxiData,tDialogueLine, tTaxiOJ_DQ_Data, g_bDebug)
ENDPROC
PROC CALCULATE_TAXI_GYN_JOB_REWARDS()
//CALC HEALTH CASH VALUE----------------------------------------------------
//Taxi Health will be written into CashFare
IF DOES_ENTITY_EXIST(myTaxiData.viTaxi)
IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
//Check a min payout for taxi damage, if not good enough, predefine a value
IF GET_VEHICLE_ENGINE_HEALTH(myTaxiData.viTaxi) < 500
myTaxiData.iTaxiOJ_CashFare = 250 //1000 //2000
ELSE
myTaxiData.iTaxiOJ_CashFare = 100 //500 //1000
ENDIF
ENDIF
ENDIF
//Player health
myTaxiData.iTaxiOJ_CashTip = GET_PED_MAX_HEALTH(PLAYER_PED_ID()) - GET_ENTITY_HEALTH(PLAYER_PED_ID())
IF myTaxiData.iTaxiOJ_CashTip <= 150 //100
myTaxiData.iTaxiOJ_CashTip = 250 //1000 //2000
ELSE
myTaxiData.iTaxiOJ_CashTip = 100 //500 //1000
ENDIF
//PRICE FOR KO
//myTaxiData.iTaxiOJ_SpecialCash = 1000
ENDPROC
PROC Main_Taxi_OJ_GotYouNow()
//Handles Fail Or No Taxi-------------------------------------------------------------------------------
IF IS_TAXI_JOB_IN_FAIL_STATE(myTaxiData)
TAXI_OJ_CLEAR_ALL_BLIPS(myTaxiData)
IF TAXI_HANDLE_FAIL(myTaxiData)
Script_Failed()
ENDIF
//Proceed
ELSE
//Run Throughtout the Entire Mission--------------------------------------------------------------
TAXI_OJ_MAINTAIN_GLOBAL_GATES(myTaxiData)
IF (myTaxiData.tTaxiOJ_RideState >= TRS_MANAGE_PICKUP
AND myTaxiData.tTaxiOJ_RideState <= TRS_DRIVING_PASSENGER)
OR myTaxiData.tTaxiOJ_RideState >= TRS_DROPPING_OFF
//Gobal taxi updates that all taxi missions run every frame
RUN_GLOBAL_TAXI_UPDATES(myTaxiData,aggroArgs)
PROCESS_TAXI_EXCEPTIONS(myTaxiData)
ENDIF
UPDATE_TAXI_OJ_TIP(myTaxiData,iTipIndex)
//Find Dropoff Point
IF myTaxiData.tTaxiOJ_RideState > TRS_MANAGE_PICKUP
AND NOT IS_BIT_SET( iLocalBitSet, k_bDropOffFound )
myTaxiData.vTaxiOJDropoff = vDropOffUnderBridge //vNewDropoff_2_Under_Bridge
SET_BIT( iLocalBitSet, k_bDropOffFound )
ENDIF
IF myTaxiData.tTaxiOJ_RideState >= TRS_MANAGE_PICKUP
AND myTaxiData.tTaxiOJ_RideState < TRS_WAIT_FOR_FULL_STOP
TAXI_ODDJOB_HANDLE_TAXI_BLIPPING(myTaxiData)
ENDIF
//Dialogue & Objectives
IF myTaxiData.tTaxiOJ_RideState >= TRS_FINDING_LOCATION
IF NOT IS_TAXI_EMERGENCY_FAIL_SET(myTaxiData)
TRIGGER_TAXI_QUEUE_GYN_LINES()
ELSE
TAXI_SET_FAIL(myTaxiData,"Taxi Not Driveable",GET_TAXI_EMERGENCY_FAIL_STRING(myTaxiData))
ENDIF
ENDIF
IF myTaxiData.tTaxiOJ_RideState >= TRS_SAVE_DAMSEL
AND myTaxiData.tTaxiOJ_RideState < TRS_REGULAR_PAYMENT
//Protect Girlfriend
//Fail Case for new booty call----------------------------------------------
IF DOES_ENTITY_EXIST(piChickInGauntlet)
IF IS_ENTITY_DEAD(piChickInGauntlet)
TAXI_SET_FAIL(myTaxiData,"Player killed his new booty call")
ENDIF
ENDIF
IF HAS_TAXI_DAMAGED_ENTITY(myTaxiData, viGauntlet)
IF NOT IS_ENTITY_DEAD(viGauntlet)
EXPLODE_VEHICLE(viGauntlet)
TAXI_SET_FAIL(myTaxiData,"Player exploded the broke down car")
ENDIF
ENDIF
IF NOT IS_PED_INJURED(piChickInGauntlet)
IF GET_PLAYER_DISTANCE_FROM_ENTITY(piChickInGauntlet) > 50
TAXI_SET_FAIL(myTaxiData,"Player abandoned the girl")
ENDIF
ENDIF
ENDIF
//---------------------------------------------------------------------------
IF myTaxiData.tTaxiOJ_RideState = TRS_DRIVING_PASSENGER
HANDLE_TAXI_EXCITEMENT(myTaxiData,FALSE,TRUE)
#IF IS_DEBUG_BUILD
ELIF bDebugTurnOnFreeRide
HANDLE_TAXI_EXCITEMENT(myTaxiData,TRUE,TRUE)
#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_GYN_STREAMS_STAGE_01()
TAXI_RESET_TIMERS(myTaxiData, TT_DIALOGUE,TAXI_DX_DELAY)
TAXI_SPAWN_PASSENGER(myTaxiData, vPassengerPt, vPassengerPickupPt, "TaxiAlonzo",mPassengerModel,196.3547,15.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_GYN_STAGE_01_ASSETS_LOADED()
INIT_ALL_TAXI_EXCITEMENT_VALUES()
//Init Bonus----------------------------------------
TAXI_INITIALIZE_BONUS_FIELD(bonusFieldGotYouNow[TGYN_BONUS_FLAWLESS_VICTORY], "TAXI_SC_KO", TAXI_CONST_BONUS_CASH_FLAWLESS_VICTORY)
TAXI_INITIALIZE_BONUS_INFO(myTaxiData, bonusFieldGotYouNow)
//SET REACT BITS
CLEAR_ALL_TAXI_PASSENGER_REACT_BITS(myTaxiData)
INITIALIZE_GENERIC_TAXI_EXCEPTIONS()
//Set Pickup
myTaxiData.vTaxiOJPickup = vPassengerPt
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_MONEY(myTaxiData.piTaxiPassenger,200)
// SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, PED_COMP_TORSO, 1, 0)
// SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, PED_COMP_LEG, 1, 0)
// SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, PED_COMP_SPECIAL2, 0, 0)
// SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, INT_TO_ENUM(PED_COMPONENT,0), 1, 0, 0) //(head)
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, INT_TO_ENUM(PED_COMPONENT,3), 1, 1, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(myTaxiData.piTaxiPassenger, INT_TO_ENUM(PED_COMPONENT,8), 0, 1, 0) //(accs)
ENDIF
//Give player obj to go pickup Passenger
ENABLE_TAXI_SPEECH(myTaxiData)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_MANAGE_PICKUP)
ENDIF
BREAK
CASE TRS_MANAGE_PICKUP
IF TAXI_HANDLE_IV_PICKUP_NO_METER(myTaxiData)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_WAIT_PARK)
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_WAIT_PARK
IF IS_PASSENGER_ENTERING_TAXI(myTaxiData)
RELEASE_TAXI_ODDJOB_GYN_STREAMS_STAGE_01()
//Greet the player
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GREET,TRUE)
//CleanUp Pickup Lock & POI
CLEANUP_TAXI_PICKUP_STOP(myTaxiData)
TAXI_OJ_GYN_SET_TIP_AND_EXCITEMENT_TO_CHECK()
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_DRIVING_PASSENGER)
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
IF NOT bSeatShuffled
//Shuffle to the next seat
IF IS_PASSENGER_IN_TAXI_SEAT(myTaxiData, VS_FRONT_RIGHT)
OR IS_PASSENGER_IN_TAXI_SEAT(myTaxiData)
OR TAXI_SHUFFLE_PASSENGER_SEAT(myTaxiData)
bSeatShuffled = TRUE
ENDIF
ENDIF
//Construction arrival line
//SetUp the CSite
TAXI_OJ_S01_SETUP_CSITE()
UPDATE_DYNAMIC_TAXI_REQUESTS()
IF TAXI_HANDLE_DRIVING(myTaxiData,/*tTaxiOJ_DQ_Data,*/ 9)
// OR ( ( ((NOT IS_ENTITY_DEAD(piChickInGauntlet)) AND (GET_DISTANCE_BETWEEN_ENTITIES(myTaxiData.viTaxi,piChickInGauntlet) < fPedDistance))
// OR ((NOT IS_ENTITY_DEAD(viGauntlet)) AND (GET_DISTANCE_BETWEEN_ENTITIES(myTaxiData.viTaxi,viGauntlet) < fCarDistance)) )
// AND IS_TAXI_RIDE_ALL_READY(myTaxiData) )
REMOVE_BLIP(myTaxiData.blipTaxiDropOff)
SET_PLAYER_CONTROL(GET_PLAYER_INDEX(),FALSE)
//Reduce chance of player going wanted right here
SET_CREATE_RANDOM_COPS(FALSE)
CLEAR_AREA_OF_COPS(GET_PLAYER_COORDS(PLAYER_ID()), 50.0)
SET_PED_CONFIG_FLAG(myTaxiData.piTaxiPassenger, PCF_DontInfluenceWantedLevel,TRUE)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_WAIT_FOR_FULL_STOP)
ENDIF
// IF NOT IS_ENTITY_DEAD(piChickInGauntlet)
// AND NOT IS_ENTITY_DEAD(viGauntlet)
// DRAW_DEBUG_SPHERE(GET_ENTITY_COORDS(piChickInGauntlet), fPedDistance, 0, 0, 255, 100)
// DRAW_DEBUG_SPHERE(GET_ENTITY_COORDS(viGauntlet), fCarDistance, 0, 255, 255, 100)
// ENDIF
IF iUnderBridgeIndex >=2
IF NOT bTaxiEarlyAggro
AND ( IS_PED_INJURED(piChickInGauntlet)
OR IS_ENTITY_DEAD(viGauntlet)
OR ((NOT IS_ENTITY_DEAD(piChickInGauntlet)) AND HAS_ENTITY_BEEN_DAMAGED_BY_ANY_VEHICLE(piChickInGauntlet))
OR ((NOT IS_ENTITY_DEAD(viGauntlet)) AND HAS_ENTITY_BEEN_DAMAGED_BY_ANY_VEHICLE(viGauntlet))
OR ((NOT IS_ENTITY_DEAD(piChickInGauntlet)) AND HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(piChickInGauntlet, WEAPONTYPE_INVALID, GENERALWEAPON_TYPE_ANYWEAPON))
OR ((NOT IS_ENTITY_DEAD(viGauntlet)) AND HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(viGauntlet, WEAPONTYPE_INVALID, GENERALWEAPON_TYPE_ANYWEAPON))
OR ((NOT IS_ENTITY_DEAD(piChickInGauntlet)) AND (NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())) AND (GET_PLAYER_DISTANCE_FROM_ENTITY(piChickInGauntlet) < 1.0)) )
IF ((NOT IS_ENTITY_DEAD(viGauntlet)) AND HAS_ENTITY_BEEN_DAMAGED_BY_ANY_VEHICLE(viGauntlet))
OR ((NOT IS_ENTITY_DEAD(viGauntlet)) AND HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(viGauntlet, WEAPONTYPE_INVALID, GENERALWEAPON_TYPE_ANYWEAPON))
EXPLODE_VEHICLE(viGauntlet)
ENDIF
IF NOT IS_PED_INJURED(piChickInGauntlet)
TASK_SMART_FLEE_PED(piChickInGauntlet, PLAYER_PED_ID(), 500, -1)
SET_PED_KEEP_TASK(piChickInGauntlet, TRUE)
ENDIF
IF NOT IS_ENTITY_DEAD(piChickInGauntlet)
AND NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
AND (GET_PLAYER_DISTANCE_FROM_ENTITY(piChickInGauntlet) < 1.0)
CLEAR_SEQUENCE_TASK(siTemp)
OPEN_SEQUENCE_TASK(siTemp)
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(NULL, PLAYER_PED_ID(), -1)
TASK_SMART_FLEE_PED(NULL, PLAYER_PED_ID(), 500, -1)
CLOSE_SEQUENCE_TASK(siTemp)
TASK_PERFORM_SEQUENCE(piChickInGauntlet, siTemp)
SET_PED_KEEP_TASK(piChickInGauntlet, TRUE)
ENDIF
CDEBUG1LN(DEBUG_OJ_TAXI,"Early aggro triggered")
TAXI_SET_FAIL(myTaxiData,"Aggro Heard Shot", TFS_ABANDONED_PASSENGER)
bTaxiEarlyAggro = TRUE
ENDIF
ENDIF
BREAK
CASE TRS_WAIT_FOR_FULL_STOP
IF MUGGING_CAMS()
SET_PLAYER_CONTROL(GET_PLAYER_INDEX(),TRUE)
blipZo = CREATE_BLIP_ON_ENTITY(myTaxiData.piTaxiPassenger ,FALSE)
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
IF NOT IS_ENTITY_DEAD(piChickInGauntlet)
CLEAR_PED_TASKS_IMMEDIATELY(piChickInGauntlet)
TASK_TURN_PED_TO_FACE_ENTITY(piChickInGauntlet, PLAYER_PED_ID())
SET_ENTITY_HEALTH(piChickInGauntlet, 115)
ENDIF
iPlayerHealth = GET_ENTITY_HEALTH(PLAYER_PED_ID())
iPassengerHealth = GET_ENTITY_HEALTH(myTaxiData.piTaxiPassenger)
START_AUDIO_SCENE("TAXI_GOT_U_NOW")
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SWITCH_JOB)
ENDIF
BREAK
CASE TRS_SWITCH_JOB
#IF IS_DEBUG_BUILD
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
IF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger )
SET_ENTITY_HEALTH(myTaxiData.piTaxiPassenger,2)
ENDIF
ENDIF
#ENDIF
SUPPRESS_CRIME_THIS_FRAME(PLAYER_ID(), CRIME_HIT_PED)
IF IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger )
OR ((NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger))
AND IS_PED_FLEEING(myTaxiData.piTaxiPassenger)
AND GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(myTaxiData.piTaxiPassenger, vDropOffUnderBridge) > 25.0)
//Clear objective to knock him out.
CLEAR_THIS_PRINT("TAXI_OBJ_GYN")
//Clean up all blips------------------------------------
IF DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
REMOVE_BLIP(myTaxiData.blipTaxiDropOff)
ENDIF
IF DOES_BLIP_EXIST(myTaxiData.blipTaxiPassenger )
REMOVE_BLIP(myTaxiData.blipTaxiPassenger )
ENDIF
//remove alonzo blip
IF DOES_BLIP_EXIST(blipZo)
REMOVE_BLIP(blipZo)
ENDIF
IF NOT IS_ENTITY_DEAD(piChickInGauntlet)
IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi)
STOP_AUDIO_SCENE("TAXI_GOT_U_NOW")
//Here the player has won the fight by hand
GET_CURRENT_PED_WEAPON(myTaxiData.piTaxiPlayer, currentWeapon)
IF IS_WEAPON_NON_LETHAL(currentWeapon)
OR (NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger))
bFairFight = TRUE
CLEAR_SEQUENCE_TASK(siTemp)
OPEN_SEQUENCE_TASK(siTemp)
TASK_LOOK_AT_ENTITY(NULL, PLAYER_PED_ID(), -1)
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID())
CLOSE_SEQUENCE_TASK(siTemp)
TASK_PERFORM_SEQUENCE(piChickInGauntlet, siTemp)
//TASK_STAND_STILL(piChickInGauntlet,-1)
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GIRL_LEAVE,TRUE)//,FALSE,TRUE)
myTaxiData.vTaxiOJDropoff = vDropOffChickHouse
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SAVE_DAMSEL)
//Here the player has killed the ped cause he's dead, and the player is not unarmed.
ELSE
bFairFight = FALSE
TASK_SMART_FLEE_PED(piChickInGauntlet, PLAYER_PED_ID(), 500, -1)
SET_PED_KEEP_TASK(piChickInGauntlet,TRUE)
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GIRL_BF_KILLED,TRUE,FALSE,TRUE)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_REGULAR_PAYMENT)
ENDIF
ENDIF
//Player killed chick
ELSE
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_REGULAR_PAYMENT)
ENDIF
ELSE
// make sure passenger stays in fight area
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vFightAreaPos1, vFightAreaPos2, fFightAreaWidth)
IF (GET_ENTITY_HEALTH(myTaxiData.piTaxiPassenger) = GET_PED_MAX_HEALTH(myTaxiData.piTaxiPassenger))
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
AND NOT bWarningLeeway
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GIRL_EGGON_PLAYER_NO_HIT,TRUE)
bWarningLeeway = TRUE
ENDIF
IF NOT bTaxiGYNOneWarning
AND GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_GENERIC) > 1.5
//AND NOT IS_PED_RAGDOLL(PLAYER_PED_ID())
SET_TAXI_OJ_PED_IN_COMBAT(myTaxiData.piTaxiPassenger)
SET_PED_CONFIG_FLAG(myTaxiData.piTaxiPassenger, PCF_ForceIgnoreMeleeActiveCombatant, FALSE)
bTaxiGYNOneWarning = TRUE
CDEBUG1LN(DEBUG_OJ_TAXI,"passengered was tasked to combat")
#IF IS_DEBUG_BUILD
ELSE
DRAW_DEBUG_TEXT_2D("passenger should be fighting", << 0.5, 0.25, 0 >>)
#ENDIF
ENDIF
// task the girls idles during the fight
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_GENERIC) > TAXI_CONST_GOON_EGG_ON_DELAY
CDEBUG1LN(DEBUG_OJ_TAXI,"hit egg on")
IF NOT IS_ENTITY_DEAD(piChickInGauntlet)
TASK_LOOK_AT_ENTITY(piChickInGauntlet, PLAYER_PED_ID(), INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
CLEAR_SEQUENCE_TASK(siTemp)
OPEN_SEQUENCE_TASK(siTemp)
TASK_PLAY_ANIM(NULL, "misscommon@response", "give_me_a_break")
TASK_PLAY_ANIM(NULL, "misscommon@response", "damn")
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID())
CLOSE_SEQUENCE_TASK(siTemp)
TASK_PERFORM_SEQUENCE(piChickInGauntlet, siTemp)
// we need to track who's winning at this point
// let's try polling who's taken the most damage within the 8 second time
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
iPlayerHealth -= GET_ENTITY_HEALTH(PLAYER_PED_ID())
iPassengerHealth -= GET_ENTITY_HEALTH(myTaxiData.piTaxiPassenger)
CDEBUG1LN(DEBUG_OJ_TAXI,"hit egg on dialogue")
IF iPlayerHealth < iPassengerHealth
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GIRL_EGGON_PLAYER_WINNING,TRUE)
ELSE
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GIRL_EGGON_BF,TRUE)
ENDIF
// reset the current health values
iPlayerHealth = GET_ENTITY_HEALTH(PLAYER_PED_ID())
iPassengerHealth = GET_ENTITY_HEALTH(myTaxiData.piTaxiPassenger)
ENDIF
ELSE
IF NOT bHealthBonusGiven
KILL_ANY_CONVERSATION()
// If girl dies, reset the passenger's health to account for his aggravation
SET_ENTITY_HEALTH(myTaxiData.piTaxiPassenger, GET_PED_MAX_HEALTH(myTaxiData.piTaxiPassenger))
CDEBUG1LN(DEBUG_OJ_TAXI,"hit KO dialogue")
SET_NEXT_TAXI_SPEECH(myTaxiData, TAXI_DI_GIRL_KOD, TRUE)
bHealthBonusGiven = TRUE
bFairFight = FALSE
ENDIF
ENDIF
CDEBUG1LN(DEBUG_OJ_TAXI,"piChickInGauntlet was tasked")
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
ELSE
IF (GET_GAME_TIMER() % 1000) < 50
CDEBUG1LN(DEBUG_OJ_TAXI,"hit timer not ready")
ENDIF
ENDIF
//if passenger follows player out of fight area, task him to go back to his chick
// ideally it will look like they're arguing
ELIF NOT IS_PED_FLEEING(myTaxiData.piTaxiPassenger)
IF bTaxiGYNOneWarning
CLEAR_PED_TASKS_IMMEDIATELY(myTaxiData.piTaxiPassenger)
CLEAR_SEQUENCE_TASK(siTemp)
OPEN_SEQUENCE_TASK(siTemp)
IF IS_PED_INJURED(piChickInGauntlet)
TASK_GO_STRAIGHT_TO_COORD(NULL, GET_ENTITY_COORDS(piChickInGauntlet, FALSE), PEDMOVEBLENDRATIO_SPRINT)
TASK_TURN_PED_TO_FACE_COORD(NULL, GET_ENTITY_COORDS(piChickInGauntlet, FALSE))
ELSE
TASK_GO_TO_ENTITY(NULL, piChickInGauntlet, DEFAULT_TIME_BEFORE_WARP, 3.5, PEDMOVEBLENDRATIO_WALK)
TASK_TURN_PED_TO_FACE_ENTITY(NULL, piChickInGauntlet)
// TASK_CHAT_TO_PED(NULL, piChickInGauntlet, CF_AUTO_CHAT, << 0,0,0 >>, 0, 0)
ENDIF
CLOSE_SEQUENCE_TASK(siTemp)
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, siTemp)
IF NOT IS_PED_INJURED(piChickInGauntlet)
// CLEAR_SEQUENCE_TASK(siTemp)
// OPEN_SEQUENCE_TASK(siTemp)
TASK_TURN_PED_TO_FACE_ENTITY(piChickInGauntlet, myTaxiData.piTaxiPassenger)
// TASK_CHAT_TO_PED(NULL, myTaxiData.piTaxiPassenger, CF_AUTO_CHAT, << 0,0,0 >>, 0, 0)
// CLOSE_SEQUENCE_TASK(siTemp)
// TASK_PERFORM_SEQUENCE(piChickInGauntlet, siTemp)
ENDIF
SETTIMERA(0)
bTaxiGYNOneWarning = FALSE
ENDIF
IF NOT IS_PED_INJURED(piChickInGauntlet)
IF VDIST2(GET_ENTITY_COORDS(myTaxiData.piTaxiPassenger), GET_ENTITY_COORDS(piChickInGauntlet, FALSE)) < 25.0
AND (GET_SCRIPT_TASK_STATUS(myTaxiData.piTaxiPassenger, SCRIPT_TASK_CHAT_TO_PED) <> PERFORMING_TASK
OR GET_SCRIPT_TASK_STATUS(myTaxiData.piTaxiPassenger, SCRIPT_TASK_CHAT_TO_PED) <> WAITING_TO_START_TASK)
TASK_CHAT_TO_PED(piChickInGauntlet, myTaxiData.piTaxiPassenger, CF_AUTO_CHAT, << 0,0,0 >>, 0, 0)
TASK_CHAT_TO_PED(myTaxiData.piTaxiPassenger, piChickInGauntlet, CF_AUTO_CHAT, << 0,0,0 >>, 0, 0)
ENDIF
ENDIF
// give the player 30 seconds outside of the zone before failing him
IF TIMERA() > 30000
CDEBUG1LN(DEBUG_OJ_TAXI,"IS THAT HIT??")
TAXI_SET_FAIL(myTaxiData, "Player abandoned passenger", TFS_ABANDONED_PASSENGER)
ENDIF
ENDIF
ENDIF
IF GET_PLAYER_DISTANCE_FROM_LOCATION(myTaxiData.vTaxiOJDropoff) > 250 //500
AND DOES_BLIP_EXIST(blipZo) //that makes it so you only fail while fight is active
CDEBUG1LN(DEBUG_OJ_TAXI,"IS THIS HIT??")
TAXI_SET_FAIL(myTaxiData, "Player abandoned passenger", TFS_ABANDONED_PASSENGER)
ENDIF
BREAK
//------------------------------------NEW STUFF-------------------------------------------
CASE TRS_SAVE_DAMSEL
// IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(),piChickInGauntlet) < 5.5 //4.0
// AND IS_PLAYER_CONTROL_ON(GET_PLAYER_INDEX())
// SET_PLAYER_CONTROL(GET_PLAYER_INDEX(), FALSE)
// ENDIF
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
AND GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CUTSCENE) > 2.0
myTaxiData.blipTaxiPassenger = CREATE_BLIP_FOR_ENTITY(piChickInGauntlet)
SET_BLIP_NAME_FROM_TEXT_FILE(myTaxiData.blipTaxiPassenger,"TX_BLIP_GYN_TG")
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_OBJ_GYN,TRUE)
SET_CREATE_RANDOM_COPS(TRUE)
TAXI_RESET_TIMERS(myTaxiData, TT_CUTSCENE)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_PRE_CUTSCENE)
ENDIF
BREAK
CASE TRS_PRE_CUTSCENE
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(),piChickInGauntlet) < 3.0
AND NOT IS_PLAYER_DRIVING_ANY_VEHICLE()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
myTaxiData.bSecondPassenger = TRUE
CLEAR_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_BitsDialogue,TAXI_DXF_BANTER)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_CUTSCENE)
ELSE
IF NOT IS_PED_INJURED(piChickInGauntlet)
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
TASK_TURN_PED_TO_FACE_ENTITY(piChickInGauntlet, PLAYER_PED_ID())
ENDIF
ENDIF
BREAK
CASE TRS_CUTSCENE
IF TAXI_OJ_GYN_CUTSCENE_SAVE_CHICK()
//Remove passenger blip
IF DOES_BLIP_EXIST(myTaxiData.blipTaxiPassenger )
REMOVE_BLIP(myTaxiData.blipTaxiPassenger )
ENDIF
SET_PED_AS_NO_LONGER_NEEDED(myTaxiData.piTaxiPassenger)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_WAIT_FOR_PASSENGER)
ENDIF
BREAK
CASE TRS_WAIT_FOR_PASSENGER
IF NOT myTaxiData.bPassengerObjPrinted
AND NOT ARE_VECTORS_EQUAL(myTaxiData.vTaxiOJ_PassengerGoToPt, vChickPtToWalkTo)
IF IS_PED_IN_ANY_VEHICLE(piChickInGauntlet)
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
myTaxiData.piTaxiPassenger = piChickInGauntlet
myTaxiData.vTaxiOJ_PassengerGoToPt = vChickPtToWalkTo
myTaxiData.vTaxiOJDropoff = vDropOffChickHouse
// since it's a new passenger, reset the gate for these bits if they've been set
IF IS_BITMASK_AS_ENUM_SET(myTaxiData.iTaxiOJ_Bits_Gates, TAXI_GATE_RETURN_TO_TAXI)
CLEAR_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_Bits_Gates, TAXI_GATE_RETURN_TO_TAXI)
ENDIF
IF IS_BITMASK_AS_ENUM_SET(myTaxiData.iTaxiOJ_Bits_Gates, TAXI_GATE_REGIVE_OBJ)
CLEAR_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_Bits_Gates, TAXI_GATE_REGIVE_OBJ)
ENDIF
myTaxiData.iTaxiOJ_DXBitsStopped = 0
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GIRL_DEST,TRUE)
ENDIF
ELIF myTaxiData.bPassengerObjPrinted
myTaxiData.blipTaxiDropOff = CREATE_BLIP_FOR_COORD(vDropOffChickHouse,TRUE)
SET_BLIP_NAME_FROM_TEXT_FILE(myTaxiData.blipTaxiDropOff,"TX_BLIP_GYN_GF")
RELEASE_TAXI_ODDJOB_GYN_STREAMS_STAGE_02()
TAXI_CANCEL_TIMERS(myTaxiData, TT_STOPPED)
OPEN_DIALOGUE_QUEUE(tTaxiOJ_DQ_Data,5)
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_DROPPING_OFF)
ENDIF
BREAK
CASE TRS_DROPPING_OFF
IF TAXI_HANDLE_DRIVING(myTaxiData/*,tTaxiOJ_DQ_Data*/)
REMOVE_BLIP(myTaxiData.blipTaxiDropOff)
CLEAR_DIALOGUE_QUEUE(tDialogueLine)
CLOSE_DIALOGUE_QUEUE(tTaxiOJ_DQ_Data,-1,TRUE)
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GIRL_THANKS,TRUE)
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 HAS_TAXI_OJ_PASSENGER_BEEN_DROPPED_OFF(myTaxiData,TRUE)
OR IS_PED_PERFORMING_TASK(piChickInGauntlet, SCRIPT_TASK_SMART_FLEE_PED)
OR IS_ENTITY_DEAD(piChickInGauntlet)
//IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
//TAXI_OJ_TASK_PASSENGER_DROPOFF(myTaxiData)
IF bFairFight
CLEAR_SEQUENCE_TASK(siTemp)
OPEN_SEQUENCE_TASK(siTemp)
//TASK_GO_STRAIGHT_TO_COORD(NULL, << -617.7251, -763.0566, 24.9895 >>, PEDMOVEBLENDRATIO_WALK)
//TASK_GO_STRAIGHT_TO_COORD(NULL, << -615.6333, -778.8123, 24.1921 >>, PEDMOVEBLENDRATIO_WALK)
//TASK_GO_STRAIGHT_TO_COORD(NULL, myTaxiData.vTaxiOJ_PassengerGoToPt, PEDMOVEBLENDRATIO_WALK)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-612.6458, -777.7148, 24.2700>>, PEDMOVEBLENDRATIO_WALK)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-608.3197, -775.0622, 24.0547>>, PEDMOVEBLENDRATIO_WALK)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-589.0419, -775.1888, 24.0172>>, PEDMOVEBLENDRATIO_WALK)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, myTaxiData.vTaxiOJ_PassengerGoToPt, PEDMOVEBLENDRATIO_WALK)//, DEFAULT_TIME_BEFORE_WARP)
//TASK_WANDER_STANDARD(NULL)
TASK_START_SCENARIO_IN_PLACE(NULL, "WORLD_HUMAN_STAND_MOBILE", 0, TRUE)
CLOSE_SEQUENCE_TASK(siTemp)
TASK_PERFORM_SEQUENCE(piChickInGauntlet, siTemp)
SET_PED_KEEP_TASK(piChickInGauntlet, TRUE)
TAXI_SET_BONUS_AWARD(myTaxiData,ENUM_TO_INT(TGYN_BONUS_FLAWLESS_VICTORY))
SET_BOOTY_CALL_ID_ACTIVATED(BC_TAXI_LIZ, TRUE)
ENDIF
SET_TAXI_FARE_OFF_MILEAGE(myTaxiData)
CALCULATE_TAXI_GYN_JOB_REWARDS()
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)
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
SCRIPT
//FIX FOR BUILD
IF ARE_VECTORS_EQUAL(vDropOffUnderBridge,<<0,0,0>>)
ENDIF
// 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))
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, 50.0)
SET_ENTITY_HEALTH(myTaxiData.viTaxi, 50)
ENDIF
ENDIF
PROCESS_WIDGETS()
#ENDIF
//END DEBUG----------------------------------------------------
IF DOES_ENTITY_EXIST(myTaxiData.piTaxiPlayer)
Main_Taxi_OJ_GotYouNow()
ELSE
REASSIGN_TAXI_OJ_DRIVER(myTaxiData)
ENDIF
WAIT(0)
ENDWHILE
// Script should never reach here. Always terminate with cleanup function.
ENDSCRIPT