//======================================================================================================================================= // Taxi_ClownCar.sc // Dev : John R. Diaz /* Triplets get in your taxi and all need to go to different dropoff locations. Get all of them to their destination before time runs out. Bonus time is awarded for each individual dropoff. */ //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" USING "taxi_ClownCar_Lib.sch" //Local Variables----------------------------------------------- CONST_INT TAXI_CONST_BONUS_CASH_PUNCTUAL 200 TaxiStruct myTaxiData TAXI_PASSENGER_GROUP myTaxiGroup BONUS_FIELD bonusFieldClownCar[1] //Ints INT iDebugThrottle = 1 INT iTipIndex = 0 //VECTOR vDropOff = << -1178.4397, -1577.0077, 3.3163 >> //KUSH SHOP VECTOR vPassengerPt = <<-1284.36658, 295.74365, 63.83044>>// << -1285.1528, 294.9519, 63.8557 >>//<< -1284.1324, 296.2160, 63.9232 >>//<< -1278.4894, 292.7891, 63.8264 >>//<< -1277.6429, 294.3654, 63.9556 >>//<< -1281.1560, 300.9622, 63.9483 >> //RESORT VECTOR vPassengerPickupPt = << -1286.2181, 292.5730, 63.7927 >> //Bools BOOL bDropOffFound BOOL bFirstDropoffBlipEnabled BOOL bAmbientIntroNoSetUp BOOL bInitWindowOffset // Dialogue Q Info BOOL g_bDebug = FALSE TAXI_OJ_DIALOGUE_Q_DATA tTaxiOJ_DQ_Data TAXI_OJ_DQ_CONVERSATION_LINE tDialogueLine[CONST_TAXIOJ_SIZE_Q] AGGRO_ARGS aggroArgs SCRIPT_SHARD_BIG_MESSAGE TaxiMidSize SCENARIO_BLOCKING_INDEX siHotel //Debug--------------------------------------------------------------------------------------------------------------- #IF IS_DEBUG_BUILD WIDGET_GROUP_ID taxiRideWidgets,ojTaxiWidgets_Hotbox TEXT_LABEL_31 sDebugString[4] BOOL bDebugDrawDistance BOOL bTaxiOJHotBoxPFXEnable, bTaxiOJHotBoxPFXDisable BOOL bTaxiOJPFXBrokenWindowEnable, bTaxiOJPFXBrokenWindowDisable BOOL bTaxiOJPFXOpenDoorEnable, bTaxiOJPFXOpenDoorDisable BOOL bTaxiOJPFXClosedDoorEnable, bTaxiOJPFXClosedDoorDisable BOOL bTaxiOJHotBoxSpeedEvo, bTaxiOJHotBoxSmokeEvo BOOL bDebugVelocity = FALSE BOOL bDebugTaxiWindowTint, bSmashWindows HUD_2D_INT h2i_distance FLOAT fPFXScale[4] FLOAT fWindow1X,fWindow2X,fWindow3X,fWindow4X = 0 FLOAT fWindow1Y, fWindow2Y, fWindow3Y, fWindow4Y = 0 FLOAT fWindow1Z, fWindow2Z, fWindow3Z, fWindow4Z = 0 VECTOR vWindowDF, vWindowDR, vWindowPF, vWindowPR, vWindowDF2, vWindowDR2, vWindowPF2, vWindowPR2 FLOAT fWindowPtRange = 0.05 FLOAT fSpeedEvo, fSmokeEvo INT iTaxiWindowColor, iTaxiWindowColorRead BOOL bDebugTurnOnFreeRide = FALSE BOOL bDebugBonusPunctual TXM_DEBUG_SKIP_STATES tDebugState = TXM_DSS_CHECK_FOR_BUTTON_PRESS #ENDIF //FUNCTIONS------------------------------------------------------------------------------------------------------------ /// PURPOSE: Do all your taxi specific requests and loading here. /// Loads our model, string table, and anims and whatever we need for taxi oddjobs /// /// PROC REQUEST_TAXI_ODDJOB_CC_STREAMS_STAGE_01() //Load text and UI REQUEST_MODEL(myTaxiGroup.mPassengerModel[TAXI_GROUP_P0_REJINO]) REQUEST_MODEL(myTaxiGroup.mPassengerModel[TAXI_GROUP_P1_FRANKIE]) REQUEST_MODEL(myTaxiGroup.mPassengerModel[TAXI_GROUP_P2_PAULIE]) TAXI_INIT_SHARED_STREAMS() CDEBUG1LN(DEBUG_OJ_TAXI,"INIT_TAXI_STREAMS - SUCCESS") ENDPROC PROC RELEASE_TAXI_ODDJOB_CC_STREAMS_STAGE_01() //Load text and UI SET_MODEL_AS_NO_LONGER_NEEDED(myTaxiGroup.mPassengerModel[TAXI_GROUP_P0_REJINO]) SET_MODEL_AS_NO_LONGER_NEEDED(myTaxiGroup.mPassengerModel[TAXI_GROUP_P1_FRANKIE]) SET_MODEL_AS_NO_LONGER_NEEDED(myTaxiGroup.mPassengerModel[TAXI_GROUP_P2_PAULIE]) CDEBUG1LN(DEBUG_OJ_TAXI,"TXM CC Stage 01 Assets Requested") ENDPROC PROC REQUEST_TAXI_ODDJOB_CC_STREAMS_HOT_BOX() //Request PFX - HotBox REQUEST_PTFX_ASSET() REQUEST_ANIM_DICT("oddjobs@taxi@gyn@cc@hotbox") CDEBUG1LN(DEBUG_OJ_TAXI,"TXM CC Hot Box Assets Requested") ENDPROC PROC RELEASE_TAXI_ODDJOB_CC_STREAMS_HOT_BOX() //Request PFX - HotBox REMOVE_PTFX_ASSET() REMOVE_ANIM_DICT("oddjobs@taxi@gyn@cc@hotbox") CDEBUG1LN(DEBUG_OJ_TAXI,"TXM CC Hot Box Assets Released") ENDPROC PROC REQUEST_TAXI_ODDJOB_CC_STREAMS_STAGE_Intro() REQUEST_MODEL(myTaxiGroup.mAmbPedModel[TAXI_AMB_P0_AMANDA]) REQUEST_MODEL(myTaxiGroup.mAmbPedModel[TAXI_AMB_P1_BRENDA]) REQUEST_MODEL(myTaxiGroup.mAmbPedModel[TAXI_AMB_P2_CANDY]) REQUEST_MODEL(myTaxiGroup.mAmbPedModel[TAXI_AMB_P4_GUEST1]) REQUEST_MODEL(myTaxiGroup.mAmbPedModel[TAXI_AMB_P6_GUEST3]) REQUEST_MODEL(STRETCH) REQUEST_MODEL(SUPERD) REQUEST_ANIM_DICT("oddjobs@taxi@gyn@cc@intro") REQUEST_ANIM_DICT("amb@world_human_stand_impatient@female@no_sign@exit") REQUEST_ANIM_DICT("amb@world_human_stand_impatient@female@no_sign@base") TaxiMidSize.siMovie = REQUEST_MG_MIDSIZED_MESSAGE() CDEBUG1LN(DEBUG_OJ_TAXI,"TXM CC Intro Stage Assets Requested") ENDPROC PROC RELEASE_TAXI_ODDJOB_CC_STREAMS_STAGE_Intro() SET_MODEL_AS_NO_LONGER_NEEDED(STRETCH) SET_MODEL_AS_NO_LONGER_NEEDED(SUPERD) SET_MODEL_AS_NO_LONGER_NEEDED(myTaxiGroup.mAmbPedModel[TAXI_AMB_P0_AMANDA]) SET_MODEL_AS_NO_LONGER_NEEDED(myTaxiGroup.mAmbPedModel[TAXI_AMB_P1_BRENDA]) SET_MODEL_AS_NO_LONGER_NEEDED(myTaxiGroup.mAmbPedModel[TAXI_AMB_P2_CANDY]) SET_MODEL_AS_NO_LONGER_NEEDED(myTaxiGroup.mAmbPedModel[TAXI_AMB_P4_GUEST1]) SET_MODEL_AS_NO_LONGER_NEEDED(myTaxiGroup.mAmbPedModel[TAXI_AMB_P6_GUEST3]) REMOVE_ANIM_DICT("oddjobs@taxi@gyn@cc@intro") REMOVE_ANIM_DICT("amb@world_human_stand_impatient@female@no_sign@exit") REMOVE_ANIM_DICT("amb@world_human_stand_impatient@female@no_sign@base") CDEBUG1LN(DEBUG_OJ_TAXI,"TXM CC Intro Stage Assets Released") ENDPROC /// PURPOSE: Wait for job specific assets to be streamed in /// /// RETURNS: TRUE if everything is streamed and ready to rock. FALSE otherwise /// FUNC BOOL HAVE_TXM_CC_INTRO_STREAMS_LOADED() //Ambient Peds IF NOT HAS_MODEL_LOADED(myTaxiGroup.mAmbPedModel[TAXI_AMB_P0_AMANDA]) CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading TAXI_AMB_P0_AMANDA",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(myTaxiGroup.mAmbPedModel[TAXI_AMB_P1_BRENDA]) CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading TAXI_AMB_P1_BRENDA",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(myTaxiGroup.mAmbPedModel[TAXI_AMB_P2_CANDY]) CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading TAXI_AMB_P2_CANDY",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(myTaxiGroup.mAmbPedModel[TAXI_AMB_P4_GUEST1]) CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading TAXI_AMB_P4_GUEST1",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(myTaxiGroup.mAmbPedModel[TAXI_AMB_P6_GUEST3]) CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading TAXI_AMB_P6_GUEST3",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(STRETCH) CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading STRETCH",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(SUPERD) CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading SUPERD",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_ANIM_DICT_LOADED("oddjobs@taxi@gyn@cc@intro") CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Anim Dicts oddjobs@taxi@gyn@cc@intro Loading...",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_ANIM_DICT_LOADED("amb@world_human_stand_impatient@female@no_sign@exit") CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Anim Dicts amb@world_human_stand_impatient@female@no_sign@exit Loading...",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_ANIM_DICT_LOADED("amb@world_human_stand_impatient@female@no_sign@base") CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Anim Dicts amb@world_human_stand_impatient@female@no_sign@exit Loading...",iDebugThrottle) RETURN FALSE ENDIF RETURN TRUE ENDFUNC FUNC BOOL HAVE_TXM_CC_HOT_BOX_STREAMS_LOADED() //Particle Requests IF NOT HAS_PTFX_ASSET_LOADED() CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading scr_oddjobtaxi",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_ANIM_DICT_LOADED("oddjobs@taxi@gyn@cc@hotbox") CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading oddjobs@taxi@gyn@cc@hotbox",iDebugThrottle) RETURN FALSE ENDIF RETURN TRUE ENDFUNC FUNC BOOL HAVE_TXM_CC_STAGE_01_STREAMS_LOADED() IF NOT HAS_MODEL_LOADED(myTaxiGroup.mPassengerModel[TAXI_GROUP_P0_REJINO]) CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading A_M_Y_BUSINESS_01",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(myTaxiGroup.mPassengerModel[TAXI_GROUP_P1_FRANKIE]) CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading A_M_Y_BUSINESS_02",iDebugThrottle) RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(myTaxiGroup.mPassengerModel[TAXI_GROUP_P2_PAULIE]) CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading A_M_Y_GOLFER_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 - Waiting for assets...",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 IF DOES_WIDGET_GROUP_EXIST(ojTaxiWidgets_Hotbox) DELETE_WIDGET_GROUP(ojTaxiWidgets_Hotbox) ENDIF CLEANUP_TAXI_WIDGETS() #ENDIF //Clean up particles REMOVE_TAXI_OJ_PFX_GROUP_HOT_BOX(myTaxiGroup) RELEASE_TAXI_ODDJOB_CC_STREAMS_STAGE_Intro() RELEASE_TAXI_ODDJOB_CC_STREAMS_STAGE_01() RELEASE_TAXI_ODDJOB_CC_STREAMS_HOT_BOX() 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_ODDJOB_GLOBAL_SETUP(myTaxiData,TXM_09_CLOWNCAR) // Set our initial state up. VIP missions don't start at TRS_FINDING_LOCATION. myTaxiData.tTaxiOJ_RideState = TRS_INIT_STREAM //Init j skip points------ myTaxiData.vTaxiOJ_WarpPtPickup = << -1248.4220, 252.6221, 63.0799 >> myTaxiData.fTaxiOJ_WarpPtHeadingPickup = 34.4 myTaxiData.vTaxiOJ_WarpPtDropoff = << -231.2259, -889.5931, 28.8903 >> myTaxiData.fTaxiOJ_WarpPtHeadingDropoff = 251.9658 //Set Models myTaxiGroup.mPassengerModel[TAXI_GROUP_P0_REJINO] = A_M_Y_BUSINESS_02 myTaxiGroup.mPassengerModel[TAXI_GROUP_P1_FRANKIE] = A_M_Y_BUSINESS_02 myTaxiGroup.mPassengerModel[TAXI_GROUP_P2_PAULIE] = A_M_Y_BUSINESS_02 myTaxiGroup.mAmbPedModel[TAXI_AMB_P0_AMANDA] = A_F_Y_Beach_01 myTaxiGroup.mAmbPedModel[TAXI_AMB_P1_BRENDA] = A_F_Y_Beach_01 myTaxiGroup.mAmbPedModel[TAXI_AMB_P2_CANDY] = A_F_Y_Beach_01 myTaxiGroup.mAmbPedModel[TAXI_AMB_P4_GUEST1] = A_F_Y_Beach_01 myTaxiGroup.mAmbPedModel[TAXI_AMB_P6_GUEST3] = A_M_Y_BUSINESS_01 //Predetermine fares here. SET_TAXI_TIP_CUTOFFS(myTaxiData, CONST_TAXI_OJ_TIP_AVERAGE_CUTOFF, CONST_TAXI_OJ_TIP_AMAZING_CUTOFF) #IF IS_DEBUG_BUILD #IF DEBUG_iTurnOnAllDXDebug ENABLE_ALL_DIALOGUE_DEBUG() #ENDIF fWindow1X = TAXI_OJ_CONST_PFX_WINDOW_DRIVER_FRONT_X fWindow1Y = TAXI_OJ_CONST_PFX_WINDOW_DRIVER_FRONT_Y fWindow1Z = TAXI_OJ_CONST_PFX_WINDOW_DRIVER_FRONT_Z fWindow2X = TAXI_OJ_CONST_PFX_WINDOW_DRIVER_REAR_X fWindow2Y = TAXI_OJ_CONST_PFX_WINDOW_DRIVER_REAR_Y fWindow2Z = TAXI_OJ_CONST_PFX_WINDOW_DRIVER_REAR_Z fWindow3X = TAXI_OJ_CONST_PFX_WINDOW_PASSENGER_FRONT_X fWindow3Y = TAXI_OJ_CONST_PFX_WINDOW_PASSENGER_FRONT_Y fWindow3Z = TAXI_OJ_CONST_PFX_WINDOW_PASSENGER_FRONT_Z fWindow4X = TAXI_OJ_CONST_PFX_WINDOW_PASSENGER_REAR_X fWindow4Y = TAXI_OJ_CONST_PFX_WINDOW_PASSENGER_REAR_Y fWindow4Z = TAXI_OJ_CONST_PFX_WINDOW_PASSENGER_REAR_Z taxiRideWidgets = START_WIDGET_GROUP("Taxi Ride - Clown Car") ADD_WIDGET_STRING("Debug Taxi Bonus") ADD_WIDGET_BOOL(" Punctual",bDebugBonusPunctual) INIT_ODDJOB_TAXI_WIDGETS() //Excitement Widget ojTaxiWidgets_Hotbox = START_WIDGET_GROUP("Hotbox") //Driver Front Window ADD_WIDGET_FLOAT_SLIDER("Blue X DF= ", fWindow1X, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Blue Y DF= ", fWindow1Y, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Blue Z DF= ", fWindow1Z, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Blue Scale= ", fPFXScale[0],0.1,2.0,0.1) //Driver Rear Window ADD_WIDGET_FLOAT_SLIDER("Green X DR= ", fWindow2X, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Green Y DR= ", fWindow2Y, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Green Z DR= ", fWindow2Z, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Green Scale= ", fPFXScale[1],0.1,2.0,0.1) //Passegner Front Window ADD_WIDGET_FLOAT_SLIDER("Red X PF= ", fWindow3X, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Red Y PF= ", fWindow3Y, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Red Z PF= ", fWindow3Z, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Red Scale= ", fPFXScale[2],0.1,2.0,0.1) //Passenger Rear Window ADD_WIDGET_FLOAT_SLIDER("Purple X PR= ", fWindow4X, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Purple Y PR= ", fWindow4Y, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Purple Z PR= ", fWindow4Z, -2.0, 2.0,0.01) ADD_WIDGET_FLOAT_SLIDER("Purple Scale= ", fPFXScale[3],0.1,2.0,0.1) ADD_WIDGET_FLOAT_SLIDER("Window Pt Range = ", fWindowPtRange, 0.05, 1.0,0.05) ADD_WIDGET_BOOL("Turn on PFX ", bTaxiOJHotBoxPFXEnable) ADD_WIDGET_BOOL("Turn off PFX ", bTaxiOJHotBoxPFXDisable) ADD_WIDGET_BOOL("Turn on Broken Window PFX ", bTaxiOJPFXBrokenWindowEnable) ADD_WIDGET_BOOL("Turn off Broken Window PFX ", bTaxiOJPFXBrokenWindowDisable) ADD_WIDGET_BOOL("Turn on Open Door PFX ", bTaxiOJPFXOpenDoorEnable) ADD_WIDGET_BOOL("Turn off Open Door PFX ", bTaxiOJPFXOpenDoorDisable) ADD_WIDGET_BOOL("Turn on Closed Door PFX ", bTaxiOJPFXClosedDoorEnable) ADD_WIDGET_BOOL("Turn off Closed Door PFX ", bTaxiOJPFXClosedDoorDisable) ADD_WIDGET_BOOL("Adjust PFX Speed Evolution", bTaxiOJHotBoxSpeedEvo) ADD_WIDGET_FLOAT_SLIDER("Speed Evolution", fSpeedEvo, 0.0, 1.0, 0.1) ADD_WIDGET_BOOL("Adjust PFX Smoke Evolution", bTaxiOJHotBoxSmokeEvo) ADD_WIDGET_FLOAT_SLIDER("Smoke Evolution", fSmokeEvo, 0.0, 1.0, 0.1) ADD_WIDGET_BOOL("Draw MPH", bDebugVelocity) ADD_WIDGET_BOOL("Debug Taxi Window Tint", bDebugTaxiWindowTint) ADD_WIDGET_INT_SLIDER("Window Tint Color Index", iTaxiWindowColor, 0, 10, 1) ADD_WIDGET_INT_READ_ONLY("Window Tint Index", iTaxiWindowColorRead) ADD_WIDGET_BOOL("Smash Windows", bSmashWindows) STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() #ENDIF CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~-------------------------------~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~----") CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~~~~~~~~~~~~ Oddjobs | Taxi | Clown Car ~~~~~~~~~~~~~~~~~~~~----------") CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~-------------------------------~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~----") ENDPROC PROC TAXI_GET_WINDOW_SMOKE_OFFSETS() IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi) IF IS_PLAYER_DRIVING_TAXI_OJ(myTaxiData) IF NOT bInitWindowOffset INT iBoneLF, iBoneLR, iBoneRF, iBoneRR iBoneLF = GET_ENTITY_BONE_INDEX_BY_NAME(myTaxiData.viTaxi, "window_lf") iBoneLR = GET_ENTITY_BONE_INDEX_BY_NAME(myTaxiData.viTaxi, "window_lr") iBoneRF = GET_ENTITY_BONE_INDEX_BY_NAME(myTaxiData.viTaxi, "window_rf") iBoneRR = GET_ENTITY_BONE_INDEX_BY_NAME(myTaxiData.viTaxi, "window_rr") vSmokeWindowDF = GET_WORLD_POSITION_OF_ENTITY_BONE(myTaxiData.viTaxi, iBoneLF) vSmokeWindowDF = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(myTaxiData.viTaxi, vSmokeWindowDF) vSmokeWindowBrokenDF = vSmokeWindowDF vSmokeWindowDF.z += 0.15 vSmokeWindowDF.y -= 0.15 vSmokeWindowDR = GET_WORLD_POSITION_OF_ENTITY_BONE(myTaxiData.viTaxi, iBoneLR) vSmokeWindowDR = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(myTaxiData.viTaxi, vSmokeWindowDR) vSmokeWindowBrokenDR = vSmokeWindowDR vSmokeWindowDR.z += 0.15 vSmokeWindowPF = GET_WORLD_POSITION_OF_ENTITY_BONE(myTaxiData.viTaxi, iBoneRF) vSmokeWindowPF = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(myTaxiData.viTaxi, vSmokeWindowPF) vSmokeWindowBrokenPF = vSmokeWindowPF vSmokeWindowPF.z += 0.15 vSmokeWindowPF.y -= 0.15 vSmokeWindowPR = GET_WORLD_POSITION_OF_ENTITY_BONE(myTaxiData.viTaxi, iBoneRR) vSmokeWindowPR = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(myTaxiData.viTaxi, vSmokeWindowPR) vSmokeWindowBrokenPR = vSmokeWindowPR vSmokeWindowPR.z += 0.15 CDEBUG1LN(DEBUG_OJ_TAXI,"-------------------------------------------") CDEBUG1LN(DEBUG_OJ_TAXI,"| vSmokeWindowDF = ", vSmokeWindowDF) CDEBUG1LN(DEBUG_OJ_TAXI,"| vSmokeWindowDR = ", vSmokeWindowDR) CDEBUG1LN(DEBUG_OJ_TAXI,"| vSmokeWindowPF = ", vSmokeWindowPF) CDEBUG1LN(DEBUG_OJ_TAXI,"| vSmokeWindowPR = ", vSmokeWindowPR) CDEBUG1LN(DEBUG_OJ_TAXI,"-------------------------------------------") CDEBUG1LN(DEBUG_OJ_TAXI,"-------------------------------------------") CDEBUG1LN(DEBUG_OJ_TAXI,"| vSmokeWindowBrokenDF = ", vSmokeWindowBrokenDF) CDEBUG1LN(DEBUG_OJ_TAXI,"| vSmokeWindowBrokenDR = ", vSmokeWindowBrokenDR) CDEBUG1LN(DEBUG_OJ_TAXI,"| vSmokeWindowBrokenPF = ", vSmokeWindowBrokenPF) CDEBUG1LN(DEBUG_OJ_TAXI,"| vSmokeWindowBrokenPR = ", vSmokeWindowBrokenPR) CDEBUG1LN(DEBUG_OJ_TAXI,"-------------------------------------------") bInitWindowOffset = TRUE ENDIF ELSE IF bInitWindowOffset bInitWindowOffset = FALSE ENDIF ENDIF ENDIF ENDPROC #IF IS_DEBUG_BUILD PROC PROCESS_WIDGETS() UPDATE_TAXI_WIDGETS(myTaxiData,tTaxiOJ_DQ_Data) IF bDebugBonusPunctual IF IS_TAXI_TIMER_STARTED(myTaxiData, TT_DROPOFF) sDebugString[0] = "Dropoff Timer " sDebugString[0] += TAXI_UTILS_GET_STRING_FROM_FLOAT_SP( GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF)) DRAW_DEBUG_TEXT_2D(sDebugString[0],<<0.07,0.67,0.0>>) IF myTaxiGroup.iWhichDropoff < 2 IF fGoodPaulieDropOffTime - GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF) > 0 //Draw value in reg color sDebugString[1] = "Left to drop Paulie: " sDebugString[1] += TAXI_UTILS_GET_STRING_FROM_FLOAT_SP(fGoodPaulieDropOffTime - GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF)) DRAW_DEBUG_TEXT_2D(sDebugString[1],<<0.07,0.69,0.0>>) ENDIF ELIF myTaxiGroup.iWhichDropoff >= 2 AND myTaxiGroup.iWhichDropoff < 4 //DEBUG SHOW IF PAULIE DROPPED OFF IF myTaxiGroup.bIsTimelyDropoff[TAXI_GROUP_P2_PAULIE] sDebugString[1] = "Paulie dropped off timely. " DRAW_DEBUG_TEXT_2D(sDebugString[1],<<0.07,0.69,0.0>>) ENDIF IF fGoodFrankieDropOffTime - GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF) > 0 //Draw value in reg color sDebugString[2] = "Left to drop Frankie: " sDebugString[2] += TAXI_UTILS_GET_STRING_FROM_FLOAT_SP(fGoodPaulieDropOffTime - GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF)) DRAW_DEBUG_TEXT_2D(sDebugString[2],<<0.07,0.71,0.0>>) ENDIF ELIF myTaxiGroup.iWhichDropoff >= 4 //DEBUG SHOW IF PAULIE DROPPED OFF IF myTaxiGroup.bIsTimelyDropoff[TAXI_GROUP_P2_PAULIE] sDebugString[1] = "Paulie dropped off timely. " DRAW_DEBUG_TEXT_2D(sDebugString[1],<<0.07,0.69,0.0>>) ELSE sDebugString[1] = "Failed to drop Paulie off in time " DRAW_DEBUG_TEXT_2D(sDebugString[1],<<0.07,0.69,0.0>>,255) ENDIF //DEBUG SHOW IF PAULIE DROPPED OFF IF myTaxiGroup.bIsTimelyDropoff[TAXI_GROUP_P1_FRANKIE] sDebugString[2] = "Frankie dropped off timely. " DRAW_DEBUG_TEXT_2D(sDebugString[2],<<0.07,0.71,0.0>>) ELSE sDebugString[2] = "Failed to drop Frankie off in time " DRAW_DEBUG_TEXT_2D(sDebugString[2],<<0.07,0.71,0.0>>,255) ENDIF IF fGoodRejinoDropOffTime - GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF) > 0 //Draw value in reg color sDebugString[3] = "Left to drop Rejino: " sDebugString[3] += TAXI_UTILS_GET_STRING_FROM_FLOAT_SP(fGoodPaulieDropOffTime - GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DROPOFF)) DRAW_DEBUG_TEXT_2D(sDebugString[3],<<0.07,0.73,0.0>>) ENDIF ENDIF ENDIF IF NOT HAS_TAXI_GROUP_BEEN_DROPPED_OFF_TIMELY(myTaxiGroup) sDebugString[1]= "Punctual Bonus LOCKED " DRAW_DEBUG_TEXT_2D(sDebugString[1],<<0.07,0.77,0.0>>,255,0,0) ELSE sDebugString[1]= "Punctual Bonus UnLOCKED " DRAW_DEBUG_TEXT_2D(sDebugString[1],<<0.07,0.77,0.0>>) ENDIF ENDIF IF bDebugDrawDistance // TAXI_DEBUG_DRAW_DISTANCE(bDropOffFound,myTaxiData,h2i_distance) IF myTaxiGroup.iWhichDropoff = 0 OR myTaxiGroup.iWhichDropoff = 1 TAXI_DEBUG_DRAW_DISTANCE_GROUP(bDropOffFound,myTaxiData, myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P2_PAULIE], h2i_distance) ELIF myTaxiGroup.iWhichDropoff = 2 OR myTaxiGroup.iWhichDropoff = 3 TAXI_DEBUG_DRAW_DISTANCE_GROUP(bDropOffFound,myTaxiData, myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P1_FRANKIE], h2i_distance) ELIF myTaxiGroup.iWhichDropoff = 4 OR myTaxiGroup.iWhichDropoff = 5 TAXI_DEBUG_DRAW_DISTANCE_GROUP(bDropOffFound,myTaxiData, myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P0_REJINO], h2i_distance) ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi) INT iBoneLF, iBoneLR, iBoneRF, iBoneRR iBoneLF = GET_ENTITY_BONE_INDEX_BY_NAME(myTaxiData.viTaxi, "window_lf") iBoneLR = GET_ENTITY_BONE_INDEX_BY_NAME(myTaxiData.viTaxi, "window_lr") iBoneRF = GET_ENTITY_BONE_INDEX_BY_NAME(myTaxiData.viTaxi, "window_rf") iBoneRR = GET_ENTITY_BONE_INDEX_BY_NAME(myTaxiData.viTaxi, "window_rr") //Driver Rear in GREEN vWindowDF2 = GET_WORLD_POSITION_OF_ENTITY_BONE(myTaxiData.viTaxi, iBoneLF) vWindowDF2.z += 0.15 vWindowDF2.y -= 0.15 DRAW_DEBUG_SPHERE(vWindowDF2,fWindowPtRange,0,255,0) //Driver Rear in GREEN vWindowDR2 = GET_WORLD_POSITION_OF_ENTITY_BONE(myTaxiData.viTaxi, iBoneLR) vWindowDR2.z += 0.15 DRAW_DEBUG_SPHERE(vWindowDR2,fWindowPtRange,0,255,0) //Passenger Front in RED vWindowPF2 = GET_WORLD_POSITION_OF_ENTITY_BONE(myTaxiData.viTaxi, iBoneRF) vWindowPF2.z += 0.15 vWindowPF2.y -= 0.15 DRAW_DEBUG_SPHERE(vWindowPF2,fWindowPtRange,255,0,0) //Passenger Rear in PURPLE vWindowPR2 = GET_WORLD_POSITION_OF_ENTITY_BONE(myTaxiData.viTaxi, iBoneRR) vWindowPR2.z += 0.15 DRAW_DEBUG_SPHERE(vWindowPR2,fWindowPtRange,123,104,238) //Driver Front in BLUE vWindowDF = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(myTaxiData.viTaxi,<>) DRAW_DEBUG_SPHERE(vWindowDF,fWindowPtRange) //Driver Rear in GREEN vWindowDR = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(myTaxiData.viTaxi,<>) DRAW_DEBUG_SPHERE(vWindowDR,fWindowPtRange,0,255,0) //Passenger Front in RED vWindowPF = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(myTaxiData.viTaxi,<>) DRAW_DEBUG_SPHERE(vWindowPF,fWindowPtRange,255,0,0) //Passenger Rear in PURPLE vWindowPR = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(myTaxiData.viTaxi,<>) DRAW_DEBUG_SPHERE(vWindowPR,fWindowPtRange,123,104,238) ENDIF //Turn on pfx IF bTaxiOJHotBoxPFXEnable ENABLE_TAXI_OJ_PFX_GROUP_HOT_BOX_HARDCODE(myTaxiData, myTaxiGroup) //ENABLE_TAXI_OJ_PFX_GROUP_HOT_BOX(myTaxiData, pFxTaxiWindowSmoke,vWindowDF,vWindowDR, vWindowPF, vWindowPR,fPFXScale) bTaxiOJHotBoxPFXEnable = FALSE ENDIF //Turn off pfx IF bTaxiOJHotBoxPFXDisable DISABLE_TAXI_OJ_PFX_GROUP_HOT_BOX(myTaxiGroup) bTaxiOJHotBoxPFXDisable = FALSE ENDIF //Turn on Broken window pfx IF bTaxiOJPFXBrokenWindowEnable ENABLE_TAXI_OJ_PFX_GROUP_HOT_BOX_HARDCODE_BROKEN_WINDOW(myTaxiData, myTaxiGroup) bTaxiOJPFXBrokenWindowEnable = FALSE ENDIF //Turn off Broken window pfx IF bTaxiOJPFXBrokenWindowDisable DISABLE_TAXI_OJ_PFX_GROUP_HOT_BOX_BROKEN_WINDOW(myTaxiGroup) bTaxiOJPFXBrokenWindowDisable = FALSE ENDIF //Turn on Open Door pfx IF bTaxiOJPFXOpenDoorEnable ENABLE_TAXI_OJ_PFX_GROUP_HOT_BOX_HARDCODE_OPEN_DOOR(myTaxiData, myTaxiGroup) bTaxiOJPFXOpenDoorEnable = FALSE ENDIF //Turn off Open Door pfx IF bTaxiOJPFXOpenDoorDisable DISABLE_TAXI_OJ_PFX_GROUP_HOT_BOX_OPEN_DOOR(myTaxiGroup) bTaxiOJPFXOpenDoorDisable = FALSE ENDIF //Turn on Open Door pfx IF bTaxiOJPFXClosedDoorEnable ENABLE_TAXI_OJ_PFX_GROUP_HOT_BOX_HARDCODE_CLOSED_DOOR(myTaxiData, myTaxiGroup) bTaxiOJPFXClosedDoorEnable = FALSE ENDIF //Turn off Open Door pfx IF bTaxiOJPFXClosedDoorDisable DISABLE_TAXI_OJ_PFX_GROUP_HOT_BOX_CLOSED_DOOR(myTaxiGroup) bTaxiOJPFXClosedDoorDisable = FALSE ENDIF INT iTemp1, iTemp2 //LM smoke debugs 12/2/11 // Debug the smoke evolutions. // In order for these to work you have comment out the equivalent PROC's in taxi_clowncar_lib IF bTaxiOJHotBoxSpeedEvo iTemp1 = 0 REPEAT TAXI_OJ_CONST_PFX_NUM_HOT_BOX_PARTICLES iTemp1 SET_PARTICLE_FX_LOOPED_EVOLUTION(myTaxiGroup.pFxTaxiWindowSmoke[iTemp1], "speed", fSpeedEvo) ENDREPEAT ENDIF IF bTaxiOJHotBoxSmokeEvo iTemp2 = 0 REPEAT TAXI_OJ_CONST_PFX_NUM_HOT_BOX_PARTICLES iTemp2 SET_PARTICLE_FX_LOOPED_EVOLUTION(myTaxiGroup.pFxTaxiWindowSmoke[iTemp2], "smoke", fSmokeEvo) ENDREPEAT ENDIF IF bDebugTaxiWindowTint iTaxiWindowColorRead = GET_VEHICLE_WINDOW_TINT(myTaxiData.viTaxi) SET_VEHICLE_WINDOW_TINT(myTaxiData.viTaxi, iTaxiWindowColor) ENDIF IF bSmashWindows INT iWindow iWindow = GET_RANDOM_INT_IN_RANGE(0,3) SMASH_VEHICLE_WINDOW(myTaxiData.viTaxi, INT_TO_ENUM(SC_WINDOW_LIST, iWindow)) bSmashWindows = FALSE ENDIF ENDPROC #ENDIF PROC TAXI_OJ_CC_SET_TIPS_TO_CHECK() 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) //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 /* 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_CC_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 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("TAXI_OBJ_CC1") OR DOES_BLIP_EXIST(myTaxiGroup.blipTaxiDropOff[TAXI_GROUP_P2_PAULIE]) CDEBUG1LN(DEBUG_OJ_TAXI,"--------------------------[Taxi Oddjob Objective] GO TO Maze Bank 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 Maze Bank 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 // Triggering Smoke anims IF NOT myTaxiGroup.bSmokeAnimStart myTaxiGroup.bSmokeAnimStart = TRUE bHotBoxReady = TRUE ENDIF IF (GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.viTaxi, myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P2_PAULIE])) < 530 tTaxiOJ_DQ_Data.iCurrentDQLine++ ENDIF IF (GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_BANTER) > 17 OR (GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.viTaxi, myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P2_PAULIE])) < 700) //AND tTaxiOJ_DQ_Data.iCurrentDQLine = 2 SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BUILD_HOTBOX_ONE_LINE,TRUE) IF g_bDebug SCRIPT_ASSERT("Triggering Build Hot Box one line") ENDIF ELSE IF (GET_GAME_TIMER() % 1000) < 50 CDEBUG1LN(DEBUG_OJ_TAXI,"GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_BANTER) = ", GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_BANTER)) ENDIF ENDIF BREAK CASE 3 // IF (GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.viTaxi, myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P2_PAULIE])) < 530 // tTaxiOJ_DQ_Data.iCurrentDQLine++ // ENDIF IF GET_TAXI_SPEECH_INDEX(myTaxiData) > TAXI_OBJ_GIVE_MAIN AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_BANTER_2 AND NOT IS_TAXI_OJ_INTERRUPTION_LINE_PLAYING(myTaxiData) SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BANTER_2,TRUE) IF g_bDebug SCRIPT_ASSERT("Triggering Banter 2") ENDIF ENDIF BREAK CASE 4 //3 IF (GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.viTaxi, myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P2_PAULIE])) < 530 tTaxiOJ_DQ_Data.iCurrentDQLine++ ENDIF IF (GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_BANTER) > 8 OR (GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.viTaxi, myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P2_PAULIE])) < 700) //AND tTaxiOJ_DQ_Data.iCurrentDQLine = 3 //IF NOT bHotBoxEarly SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BUILD_HOTBOX,TRUE) //bHotBoxReady = TRUE IF g_bDebug SCRIPT_ASSERT("Triggering Build Hot Box") ENDIF //ENDIF ELSE IF (GET_GAME_TIMER() % 1000) < 50 CDEBUG1LN(DEBUG_OJ_TAXI,"GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_BANTER) = ", GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_BANTER)) ENDIF ENDIF BREAK CASE 5 //4 IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_BANTER) > 20 OR (GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.viTaxi, myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P2_PAULIE])) < 530 IF NOT bWeedEffect //Player_Takes_Weed_Hit(PLAYER_PED_ID()) CDEBUG1LN(DEBUG_OJ_TAXI,"Weed effect applied") bWeedEffect = TRUE ENDIF IF NOT bHotBoxWindowReady SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_INIT_HOTBOX,TRUE) bHotBoxWindowReady = TRUE IF g_bDebug SCRIPT_ASSERT("Triggering Banter HOTBOX") ENDIF ENDIF ELSE IF (GET_GAME_TIMER() % 1000) < 50 CDEBUG1LN(DEBUG_OJ_TAXI,"GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_BANTER) = ", GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_BANTER)) ENDIF ENDIF BREAK CASE 6 //5 IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > GET_RANDOM_FLOAT_IN_RANGE(8.0,16.0) //Set Radio Station Check // IF NOT GET_TAXI_RADIO_CHECK_FLAG(myTaxiData) // TAXI_RADIO_STATION_TURN_ON(myTaxiData) // IF g_bDebug // SCRIPT_ASSERT("The Taxi Radio Should Be Updating") // ENDIF // ENDIF ENDIF BREAK ENDSWITCH ENDIF PROCESS_IMPORTANT_DIALOGUE_Q(myTaxiData,tDialogueLine, tTaxiOJ_DQ_Data, g_bDebug) ENDPROC /* 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_CLOWN_CAR() //Handles Fail Or No Taxi------------------------------------------------------------------------------- IF IS_TAXI_JOB_IN_FAIL_STATE(myTaxiData) TAXI_OJ_CLEAR_ALL_BLIPS(myTaxiData) IF myTaxiData.tTaxiOJ_RideState > TRS_INIT_STREAM IF TAXI_HANDLE_FAIL(myTaxiData) Script_Failed() ENDIF ELSE IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_CLEANUP) > 5.0 CDEBUG1LN(DEBUG_OJ_TAXI,"Fail During State: "," ", myTaxiData.sTaxiOJ_RideState, " ", myTaxiData.sTaxiOJ_Reason4Fail) SET_PROPERTY_MANAGEMENT_RESULT(PROPERTY_MANAGEMENT_RESULT_FAILURE) Script_Cleanup() ENDIF ENDIF //Proceed ELSE //Run Throughtout the Entire Mission-------------------------------------------------------------- RUN_GLOBAL_TAXI_UPDATES(myTaxiData,aggroArgs) PROCESS_TAXI_EXCEPTIONS(myTaxiData) UPDATE_TAXI_OJ_TIP(myTaxiData,iTipIndex) IF myTaxiData.tTaxiOJ_RideState < TRS_DRIVING_PASSENGER TAXI_OJ_HANDLE_GROUP_AGGRO(myTaxiData,myTaxiGroup,aggroArgs) ENDIF //Find Dropoff Point IF myTaxiData.tTaxiOJ_RideState > TRS_MANAGE_PICKUP AND NOT bDropOffFound bDropOffFound = TRUE myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P0_REJINO] = <<27.36738, -1356.94824, 28.21810>> //<< 25.5080, -1357.8468, 28.2690 >> //7-11 myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P1_FRANKIE] = <<314.30136, -266.34949, 52.78319>> //<< 317.4944, -267.4910, 52.7820 >> //bankinbetween myTaxiGroup.vTaxiOJDropoff[TAXI_GROUP_P2_PAULIE] = <<-159.96420, -856.53094, 28.71328>> //<< -160.9156, -858.0977, 28.6290 >> //bank myTaxiGroup.vTaxiOJWalkTo[TAXI_GROUP_P0_REJINO] = << 30.9791, -1347.3896, 28.4939 >> //<< 27.3107, -1342.5736, 28.4939 >> //7-11 myTaxiGroup.vTaxiOJWalkTo[TAXI_GROUP_P1_FRANKIE] = << 313.8930, -279.0695, 53.1647 >> myTaxiGroup.vTaxiOJWalkTo[TAXI_GROUP_P2_PAULIE] = << -88.0743, -845.7833, 40.7970 >> //<< 145.5663, -1044.2811, 28.3680 >> //bDropOffFound = GET_TAXI_GROUP_DROPOFF_LOCATION_FROM_DISTANCE(txRegionsArray,myTaxiData,myTaxiGroup) ENDIF //Dialogue & Objectives IF myTaxiData.tTaxiOJ_RideState > TRS_FINDING_LOCATION IF NOT IS_TAXI_EMERGENCY_FAIL_SET(myTaxiData) IF NOT bAmbientIntroNoSetUp IF HAVE_TXM_CC_INTRO_STREAMS_LOADED() INIT_AMBIENT_CROWD_AT_CC_PICKUP(myTaxiGroup) bAmbientIntroNoSetUp = TRUE ENDIF ENDIF TRIGGER_TAXI_QUEUE_CC_LINES() ELSE TAXI_SET_FAIL(myTaxiData,"Taxi Not Driveable",GET_TAXI_EMERGENCY_FAIL_STRING(myTaxiData)) ENDIF ENDIF INT k, k2 SEQUENCE_INDEX tempIndex BOOL bHitPickupCSPed IF myTaxiData.tTaxiOJ_RideState > TRS_SPAWNING IF NOT bHitPickupCSPed IF IS_VEHICLE_DRIVEABLE(myTaxiData.viTaxi) REPEAT ENUM_TO_INT(TAXI_AMB_PED_NUM) k IF NOT IS_ENTITY_DEAD(myTaxiGroup.piAmbPed[INT_TO_ENUM(TAXI_AMB_PED_NAMES, k)]) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(myTaxiGroup.piAmbPed[INT_TO_ENUM(TAXI_AMB_PED_NAMES, k)], myTaxiData.viTaxi) bHitPickupCSPed = TRUE ENDIF ENDIF ENDREPEAT ENDIF ENDIF IF bHitPickupCSPed REPEAT ENUM_TO_INT(TAXI_AMB_PED_NUM) k2 IF NOT IS_ENTITY_DEAD(myTaxiGroup.piAmbPed[INT_TO_ENUM(TAXI_AMB_PED_NAMES, k2)]) IF NOT IS_PED_INJURED(myTaxiGroup.piAmbPed[k2]) CLEAR_PED_TASKS(myTaxiGroup.piAmbPed[k2]) CLEAR_SEQUENCE_TASK(tempIndex) OPEN_SEQUENCE_TASK(tempIndex) TASK_SMART_FLEE_PED(NULL, myTaxiData.piTaxiPlayer, 1000.0, -1) CLOSE_SEQUENCE_TASK(tempIndex) TASK_PERFORM_SEQUENCE(myTaxiGroup.piAmbPed[k2], tempIndex) CLEAR_SEQUENCE_TASK(tempIndex) ENDIF ENDIF ENDREPEAT ENDIF ENDIF IF myTaxiData.tTaxiOJ_RideState = TRS_DRIVING_PASSENGER HANDLE_TAXI_EXCITEMENT(myTaxiData,FALSE,TRUE) //set amb peds at passenger pickup as no longer needed if player is 200 away TAXI_SET_INTRO_AMB_PEDS_AS_NOLONGER_NEEDED(myTaxiData, myTaxiGroup) #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 CASE TRS_INIT_STREAM //Initialize Bonuses TAXI_INITIALIZE_BONUS_FIELD(bonusFieldClownCar[0], "TAXI_SC_BN_10", TAXI_CONST_BONUS_CASH_PUNCTUAL) TAXI_INITIALIZE_BONUS_INFO(myTaxiData, bonusFieldClownCar) //Request of our assets REQUEST_TAXI_ODDJOB_CC_STREAMS_STAGE_01() REQUEST_TAXI_ODDJOB_CC_STREAMS_STAGE_Intro() // TODO - temporary placement of this request. Rmove after the new PFX are in REQUEST_TAXI_ODDJOB_CC_STREAMS_HOT_BOX() TAXI_RESET_TIMERS(myTaxiData, TT_DIALOGUE,TAXI_DX_DELAY) TAXI_SPAWN_GROUP_PASSENGERS(myTaxiData, vPassengerPt, vPassengerPickupPt, myTaxiGroup) TAXI_INIT_GROUP_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_TXM_CC_STAGE_01_STREAMS_LOADED() INIT_ALL_TAXI_EXCITEMENT_VALUES() INITIALIZE_GENERIC_TAXI_EXCEPTIONS() //SET REACT BITS CLEAR_ALL_TAXI_PASSENGER_REACT_BITS(myTaxiData) 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) myTaxiData.vTaxiOJPickup = vPassengerPt myTaxiData.iTaxiOJ_StatesGenIndex = 0 //Move on to the next stage TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SPAWNING) ENDIF BREAK CASE TRS_SPAWNING IF PROPERTY_VIP_INIT_READY(myTaxiData,3) //Give player obj to go pickup Passenger ENABLE_TAXI_SPEECH(myTaxiData) TAXI_OJ_CLEAR_AREA_OF_ALL_PEDS_AND_SCENARIOS(siHotel, vPassengerPt, 20.0) //Move on to the next stage TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_MANAGE_PICKUP) ENDIF BREAK //Handles the passengers until you reach them. CASE TRS_MANAGE_PICKUP TAXI_GET_WINDOW_SMOKE_OFFSETS() IF TAXI_HANDLE_GROUP_PICKUP(myTaxiData, myTaxiGroup) STAT_GET_FLOAT(myTaxiData.sDrivingStat,myTaxiData.fTaxiOJ_InitialMileage) CDEBUG1LN(DEBUG_OJ_TAXI,"Initial Taxi Mileage = ", myTaxiData.fTaxiOJ_InitialMileage) // TODO - after the in car smoke effect is finished, reinstate this here! //REQUEST_TAXI_ODDJOB_CC_STREAMS_HOT_BOX() //Move on to the next stage TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_WAIT_PARK) ENDIF BREAK //Waits for everyone to be seated CASE TRS_WAIT_PARK IF IS_GROUP_IN_TAXI(myTaxiData,myTaxiGroup) //Greet the player SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_OBJ,TRUE) IF NOT IS_ENTITY_DEAD(myTaxiGroup.piPassenger[TAXI_GROUP_P0_REJINO]) SET_PED_CONFIG_FLAG(myTaxiGroup.piPassenger[TAXI_GROUP_P0_REJINO],PCF_DontAllowToBeDraggedOutOfVehicle,TRUE) ENDIF IF NOT IS_ENTITY_DEAD(myTaxiGroup.piPassenger[TAXI_GROUP_P1_FRANKIE]) SET_PED_CONFIG_FLAG(myTaxiGroup.piPassenger[TAXI_GROUP_P1_FRANKIE],PCF_DontAllowToBeDraggedOutOfVehicle,TRUE) ENDIF IF NOT IS_ENTITY_DEAD(myTaxiGroup.piPassenger[TAXI_GROUP_P2_PAULIE]) SET_PED_CONFIG_FLAG(myTaxiGroup.piPassenger[TAXI_GROUP_P2_PAULIE],PCF_DontAllowToBeDraggedOutOfVehicle,TRUE) ENDIF //CleanUp Pickup Lock & POI CLEANUP_TAXI_PICKUP_STOP(myTaxiData) //Passenger is in cab, do cleanup and add new blip for destination. TAXI_SET_DROPOFF_BLIP_ON(myTaxiData,FALSE) RELEASE_TAXI_ODDJOB_CC_STREAMS_STAGE_Intro() //SET_TAXI_OJ_GROUP_HOT_BOX(myTaxiData,pFxTaxiWindowSmoke ) TAXI_START_TIMER(myTaxiData, TT_BANTER) TAXI_RESET_TIMERS(myTaxiData, TT_BORING) TAXI_RESET_TIMERS(myTaxiData, TT_DROPOFF) TAXI_OJ_CC_SET_TIPS_TO_CHECK() myTaxiData.fTaxiOJ_BanterDelay = GET_RANDOM_FLOAT_IN_RANGE(3.0,10.0) TAXI_BLIP_GROUP_DROPOFF_POINT_SEQUENTIAL(myTaxiGroup) //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_GROUP(myTaxiData, myTaxiGroup) TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_MANAGE_PICKUP) ENDIF ENDIF BREAK CASE TRS_DRIVING_PASSENGER //Had to do this here, and I hate it cause it's the only case, because I had to give Clown Car it's own unique data IF NOT bFirstDropoffBlipEnabled // IF myTaxiData.bObjPrinted // TAXI_BLIP_GROUP_DROPOFF_POINT_SEQUENTIAL(myTaxiGroup) // bFirstDropoffBlipEnabled = TRUE // ENDIF ENDIF RUN_TAXIRADIO_UPDATE_WHEN_ENABLED(myTaxiData) IF HAS_TAXI_GROUP_REACHED_HIT_ALL_DROPOFFS(myTaxiData, myTaxiGroup, tTaxiOJ_DQ_Data, tDialogueLine) CLOSE_DIALOGUE_QUEUE(tTaxiOJ_DQ_Data,-1,TRUE) IF HAS_TAXI_GROUP_BEEN_DROPPED_OFF_TIMELY(myTaxiGroup) TAXI_SET_BONUS_AWARD(myTaxiData, 0) ENDIF DISABLE_TAXI_OJ_PFX_GROUP_HOT_BOX(myTaxiGroup) //CASH$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ SET_TAXI_FARE_OFF_MILEAGE(myTaxiData) TAXI_OJ_RATE_OVERALL_TIP_LEVEL(myTaxiData) CONVERT_TAXI_TIP_TO_CASH(myTaxiData) TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_REGULAR_PAYMENT) ENDIF BREAK //Regular Payment CASE TRS_REGULAR_PAYMENT //Wait til passenger is done speaking/paying than tell him to leave vehicle IF HAS_TAXI_OJ_PASSENGER_BEEN_DROPPED_OFF(myTaxiData) CLEAR_SEQUENCE_TASK(tempIndex) OPEN_SEQUENCE_TASK(tempIndex) //TASK_GO_TO_COORD_ANY_MEANS(NULL, myTaxiGroup.vTaxiOJWalkTo[TAXI_GROUP_P0_REJINO], PEDMOVE_WALK, NULL) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, myTaxiGroup.vTaxiOJWalkTo[TAXI_GROUP_P0_REJINO], PEDMOVE_WALK) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) IF DOES_SCENARIO_EXIST_IN_AREA(myTaxiData.vTaxiOJ_PassengerGoToPt, 4, TRUE) TASK_USE_NEAREST_SCENARIO_TO_COORD(NULL, myTaxiData.vTaxiOJ_PassengerGoToPt, 4) ELSE TASK_ACHIEVE_HEADING(NULL, 350.8689) TASK_START_SCENARIO_IN_PLACE(NULL, "WORLD_HUMAN_WINDOW_SHOP_BROWSE") // TASK_PLAY_ANIM(NULL, "gestures@m@standing@casual", "gesture_pleased", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1) // TASK_PLAY_ANIM(NULL, "gestures@m@standing@casual", "gesture_pleased", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1) // TASK_PLAY_ANIM(NULL, "gestures@m@standing@casual", "gesture_pleased", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1) // TASK_WANDER_STANDARD(NULL) ENDIF CLOSE_SEQUENCE_TASK(tempIndex) TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, tempIndex) SET_PED_KEEP_TASK(myTaxiData.piTaxiPassenger, TRUE) TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SCORECARD_GRADE) ENDIF BREAK //Pop up the scorecard CASE TRS_SCORECARD_GRADE IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger) IF GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.piTaxiPassenger, <<29.112947,-1349.217651,29.612801>>) < 3.0 SET_PED_RESET_FLAG(myTaxiData.piTaxiPassenger, PRF_SearchForClosestDoor, TRUE) #IF IS_DEBUG_BUILD DRAW_DEBUG_TEXT_2D("PRF_SearchForClosestDoor Flag Set", <<0.5, 0.2, 0.0>>) #ENDIF ENDIF ENDIF IF TAXI_CALC_SCORECARD(myTaxiData,TaxiMidSize) TAXI_MISSION_END(TRUE, myTaxiData, FALSE) TAXI_RESET_TIMERS(myTaxiData,TT_CLEANUP) //Move on to the next stage TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_CLEANUP) ENDIF BREAK CASE TRS_CLEANUP IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger) IF GET_ENTITY_DISTANCE_FROM_LOCATION(myTaxiData.piTaxiPassenger, <<29.112947,-1349.217651,29.612801>>) < 3.0 SET_PED_RESET_FLAG(myTaxiData.piTaxiPassenger, PRF_SearchForClosestDoor, TRUE) #IF IS_DEBUG_BUILD DRAW_DEBUG_TEXT_2D("PRF_SearchForClosestDoor Flag Set", <<0.5, 0.2, 0.0>>) #ENDIF ENDIF IF IS_ENTITY_AT_COORD(myTaxiData.piTaxiPassenger, <<31.050192,-1347.284790,29.497032>>, <<1.0,1.0,1.0>>, FALSE, TRUE, TM_ON_FOOT) OR GET_PLAYER_DISTANCE_FROM_ENTITY(myTaxiData.piTaxiPassenger) > 50 OR GET_TAXI_TIMER_IN_SECONDS(myTaxiData,TT_CLEANUP) > 30 IF IS_ENTITY_AT_COORD(myTaxiData.piTaxiPassenger, <<31.050192,-1347.284790,29.497032>>, <<1.0,1.0,1.0>>, FALSE, TRUE, TM_ON_FOOT) CDEBUG1LN(DEBUG_OJ_TAXI,"passenger is at the coord") ENDIF IF GET_PLAYER_DISTANCE_FROM_ENTITY(myTaxiData.piTaxiPassenger) > 50 CDEBUG1LN(DEBUG_OJ_TAXI,"player is far from the passenger") ENDIF IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData,TT_CLEANUP) > 30 CDEBUG1LN(DEBUG_OJ_TAXI,"cleanup timer > 30") ENDIF SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(myTaxiData.piTaxiPassenger,FALSE) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_NONE, myTaxiData.relPassenger, RELGROUPHASH_PLAYER) SET_PED_AS_NO_LONGER_NEEDED(myTaxiData.piTaxiPassenger) Script_Cleanup() ENDIF ELSE CDEBUG1LN(DEBUG_OJ_TAXI,"passenger is injured") Script_Cleanup() ENDIF BREAK ENDSWITCH ENDIF ENDPROC SCRIPT // Handles the player being busted or arrested, or if the player // jumps into Multiplayer from Singleplayer – ensures the script // gets cleaned up properly under the correct circumstances IF (HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS | FORCE_CLEANUP_FLAG_REPEAT_PLAY)) SET_PROPERTY_MANAGEMENT_RESULT(PROPERTY_MANAGEMENT_RESULT_FAILURE) Script_Cleanup() ENDIF // Any initialisation (generally, only mission scripts should set // the mission flag to TRUE) SET_MISSION_FLAG(TRUE) INITIALIZE_SCRIPT_VARIABLES() // The script loop WHILE (TRUE) // Maintain the script – perform per-frame functionality //All skips and debug shortcuts------------------------------- #IF IS_DEBUG_BUILD IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)) IF DOES_ENTITY_EXIST(myTaxiData.viTaxi) OUTPUT_DEBUG_CAM_RELATIVE_TO_ENTITY(myTaxiData.viTaxi) ENDIF ENDIF 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)) 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_CLOWN_CAR() ELSE REASSIGN_TAXI_OJ_DRIVER(myTaxiData) ENDIF WAIT(0) ENDWHILE // Script should never reach here. Always terminate with cleanup function. ENDSCRIPT