//======================================================================================================================================= // 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