998 lines
36 KiB
Python
Executable File
998 lines
36 KiB
Python
Executable File
/// Taxi_Procedural.sc
|
|
/// Author: Lino A. Manansala
|
|
/// Procedurals! aka Endless Summer
|
|
|
|
|
|
|
|
//Compile out Title Update changes to header functions.
|
|
//Must be before includes.
|
|
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
|
|
|
|
|
|
|
|
USING "Taxi_Includes.sch"
|
|
USING "Taxi_Regions_Lib.sch"
|
|
USING "Taxi_Locations_Lib.sch"
|
|
USING "minigame_midsized_message.sch"
|
|
|
|
//#IF IS_DEBUG_BUILD
|
|
INT iDebugThrottle
|
|
//#ENDIF
|
|
|
|
ENUM TAXI_FAIL_STATE
|
|
TAXIFAIL_INIT,
|
|
TAXIFAIL_PRINT
|
|
ENDENUM
|
|
|
|
TAXI_FAIL_STATE eTaxiFailState = TAXIFAIL_INIT
|
|
|
|
//Custom Data
|
|
TaxiStruct myTaxiData
|
|
|
|
TAXI_PED_RUN_STATE myRunState = TPRS_INIT
|
|
|
|
TAXI_MONEY_STRUCT taxiMoney
|
|
|
|
TAXI_PROCEDURAL_DATA myTaxiProceduralData
|
|
|
|
TAXI_REG_INFO txRegionsArray[TR_NUM_REGIONS]
|
|
|
|
MODEL_NAMES mPassengerModel
|
|
|
|
//TAXI_PROCEDURAL_LOCATIONS eTaxiDestination
|
|
|
|
//Dialogue Queue Info
|
|
BOOL g_bDebug = FALSE
|
|
TAXI_OJ_DIALOGUE_Q_DATA tTaxiOJ_DQ_Data
|
|
TAXI_OJ_DQ_CONVERSATION_LINE tDialogueLine[CONST_TAXIOJ_SIZE_Q]
|
|
|
|
AGGRO_ARGS aggroArgs
|
|
|
|
INT iTipIndex
|
|
|
|
FLOAT fTipRate
|
|
|
|
BOOL bPassengerRan = TRUE
|
|
|
|
SEQUENCE_INDEX siTemp
|
|
|
|
SCRIPT_SHARD_BIG_MESSAGE TaxiMidSize
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
BOOL bDebugPassRun
|
|
|
|
// WIDGET_GROUP_ID taxiRideWidgets
|
|
// TEXT_LABEL_63 sDebugString[5]
|
|
// BOOL bDebugDrawP_Stats
|
|
// BOOL bDebugTurnOnFreeRide = FALSE
|
|
// TXM_DEBUG_SKIP_STATES tDebugState = TXM_DSS_CHECK_FOR_BUTTON_PRESS
|
|
//
|
|
#ENDIF
|
|
|
|
PROC Script_Cleanup()
|
|
// #IF IS_DEBUG_BUILD
|
|
// IF DOES_WIDGET_GROUP_EXIST(taxiRideWidgets)
|
|
// DELETE_WIDGET_GROUP(taxiRideWidgets)
|
|
// ENDIF
|
|
//
|
|
// CLEANUP_TAXI_WIDGETS()
|
|
// #ENDIF
|
|
|
|
// release assets
|
|
IF NETWORK_IS_SIGNED_ONLINE()
|
|
CDEBUG1LN(DEBUG_SHOP_ROBBERIES, "online, writing to social club leaderboard")
|
|
WRITE_TAXI_SCLB_DATA(TXM_PROCEDURAL)
|
|
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()
|
|
|
|
// IF NOT IS_TIMER_STARTED(timerFailDelay)
|
|
// TAXI_SCRIPT_FAILED(myTaxiData)
|
|
// START_TIMER_NOW(timerFailDelay)
|
|
// ELIF GET_TIMER_IN_SECONDS(timerFailDelay) > 4.0
|
|
// Script_Cleanup()
|
|
// ENDIF
|
|
ENDPROC
|
|
|
|
PROC REQUEST_TAXI_PROCEDURAL_STREAMS()
|
|
REQUEST_MODEL(mPassengerModel)
|
|
//REQUEST_ANIM_DICT("move_m@quick")
|
|
TaxiMidSize.siMovie = REQUEST_MG_MIDSIZED_MESSAGE()
|
|
TAXI_INIT_SHARED_STREAMS()
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"Initial Taxi Oddjob Deadline Assets requested.")
|
|
ENDPROC
|
|
|
|
FUNC BOOL HAVE_TAXI_PROCEDURAL_STREAMS_LOADED()
|
|
|
|
//Always good to make sure everything is safe.
|
|
IF IS_TAXI_DRIVEN_BY_PLAYER(myTaxiData)
|
|
IF NOT HAS_MODEL_LOADED(mPassengerModel)
|
|
#IF IS_DEBUG_BUILD
|
|
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading G_M_M_ChiGoon_02",iDebugThrottle)
|
|
#ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// IF NOT HAS_ANIM_DICT_LOADED("move_m@quick")
|
|
// #IF IS_DEBUG_BUILD
|
|
// CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading move_m@quick",iDebugThrottle)
|
|
// #ENDIF
|
|
// 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)
|
|
#IF IS_DEBUG_BUILD
|
|
CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("TAXI_ASSETS_STREAMED - Loading shared assets",iDebugThrottle)
|
|
#ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"Taxi Procedural Assets Loaded")
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Set big message with a number token
|
|
/// PARAMS:
|
|
/// scaleformStruct -
|
|
/// label - splash text string
|
|
/// iNum - Number to insert into the string.
|
|
/// iDuration - duration in milliseconds
|
|
/// eMessageType - Tells us what scaleform method we want to call
|
|
PROC SET_SCALEFORM_SHARD_MESSAGE_WITH_THREE_NUMBERS_IN_STRAPLINE(SCRIPT_SHARD_BIG_MESSAGE & scaleformStruct, STRING labeToDisp, INT iFare, INT iTips, INT iTotalCash,
|
|
STRING strapLine, INT iDuration = 4000, HUD_COLOURS eHudColor = HUD_COLOUR_WHITE)
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(scaleformStruct.siMovie, GET_SCALEFORM_SHARD_METHOD())
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("STRING")
|
|
SET_COLOUR_OF_NEXT_TEXT_COMPONENT(eHudColor)
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(labeToDisp)
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(labeToDisp)
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(strapline)
|
|
//Fare
|
|
ADD_TEXT_COMPONENT_INTEGER(iFare)
|
|
//Tips
|
|
ADD_TEXT_COMPONENT_INTEGER(iTips)
|
|
//Total
|
|
ADD_TEXT_COMPONENT_INTEGER(iTotalCash)
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
// Restart our timer for updating.
|
|
RESTART_TIMER_NOW(scaleformStruct.movieTimer)
|
|
|
|
// Store the duration.
|
|
scaleformStruct.iDuration = iDuration
|
|
scaleformStruct.eEndFlash = HUD_COLOUR_WHITE
|
|
ENDPROC
|
|
|
|
// All these peds have approved voices
|
|
FUNC MODEL_NAMES GET_RANDOM_TAXI_PASSENGER_MODEL()
|
|
SWITCH GET_RANDOM_INT_IN_RANGE(0, 5)
|
|
CASE 0 RETURN A_F_Y_VINEWOOD_04
|
|
CASE 1 RETURN A_M_M_SOUCENT_04
|
|
CASE 2 RETURN A_M_Y_SALTON_01
|
|
CASE 3 RETURN A_M_Y_SOUCENT_04
|
|
CASE 4 RETURN A_M_Y_VINEWOOD_01
|
|
ENDSWITCH
|
|
|
|
RETURN A_F_Y_VINEWOOD_04
|
|
ENDFUNC
|
|
|
|
// All these peds have approved voices
|
|
FUNC STRING GET_TAXI_PASSENGER_VOICE(MODEL_NAMES eTaxiPassengerModel)
|
|
SWITCH eTaxiPassengerModel
|
|
CASE A_F_Y_VINEWOOD_04 RETURN "A_F_Y_VINEWOOD_04_WHITE_MINI_02"
|
|
CASE A_M_M_SOUCENT_04 RETURN "A_M_M_SOUCENT_04_BLACK_MINI_01"
|
|
CASE A_M_Y_SALTON_01 RETURN "A_M_Y_SALTON_01_WHITE_MINI_02"
|
|
CASE A_M_Y_SOUCENT_04 RETURN "A_M_Y_SOUCENT_04_BLACK_MINI_01"
|
|
CASE A_M_Y_VINEWOOD_01 RETURN "A_M_Y_VINEWOOD_01_BLACK_MINI_01"
|
|
ENDSWITCH
|
|
|
|
RETURN "A_F_Y_VINEWOOD_04_WHITE_MINI_02"
|
|
ENDFUNC
|
|
|
|
PROC INIT_TAXI_PROCEDURAL_DATA()
|
|
mPassengerModel = GET_RANDOM_TAXI_PASSENGER_MODEL()
|
|
|
|
myTaxiData.sProceduralPassengerVoice = GET_TAXI_PASSENGER_VOICE(mPassengerModel)
|
|
|
|
// this is mostly all copied from TAXI_ODDJOB_GLOBAL_SETUP
|
|
|
|
DISABLE_TAXI_HAILING()
|
|
TOGGLE_TAXI_OJ_RADIO_SOUNDS_ON()
|
|
|
|
TAXI_ASSIGN_PLAYER_ENUM_FOR_DIALOGUE(myTaxiData.tTaxiOJ_Convo)
|
|
|
|
RESET_TAXI_STRUCT_TO_DEFAULTS(myTaxiData)
|
|
myTaxiData.tTaxiOJ_MissionType = TXM_PROCEDURAL
|
|
|
|
IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_SUPPRESSING_TAXI)
|
|
SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_SUPPRESSING_TAXI)
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(TAXI_GET_TAXI_MODEL_NAME(), TRUE)
|
|
ENDIF
|
|
|
|
INIT_TAXI_OJ_RADIO_STATION_PREFERENCES_PER_MISSION(myTaxiData)
|
|
|
|
// passing in TXM_NUM_TYPES because procedural comes after it
|
|
TAXI_CONTROLLER_UpdateNumRuns(TXM_PROCEDURAL)
|
|
|
|
SET_TAXI_ODDJOB_SPECIFICS(myTaxiData)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(),PCF_WillFlyThroughWindscreen,FALSE)
|
|
ENDIF
|
|
|
|
myTaxiData.sDrivingStat = GET_TAXI_DRIVING_STAT_FOR_PLAYER()
|
|
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_ODDJOB_PROCEDURAL_SETUP - SUCCESS")
|
|
|
|
SET_TAXI_TIP_CUTOFFS(myTaxiData, CONST_TAXI_OJ_TIP_AVERAGE_CUTOFF, CONST_TAXI_OJ_TIP_AMAZING_CUTOFF)
|
|
|
|
myTaxiData.fTaxiEnterSpeed = 1.45// PEDMOVEBLENDRATIO_WALK
|
|
|
|
// #IF IS_DEBUG_BUILD
|
|
//
|
|
// taxiRideWidgets = START_WIDGET_GROUP("Taxi Ride - Procedural")
|
|
//
|
|
// INIT_ODDJOB_TAXI_WIDGETS()
|
|
//
|
|
// ADD_WIDGET_BOOL("Show Procedural Stats", bDebugDrawP_Stats)
|
|
//
|
|
// STOP_WIDGET_GROUP()
|
|
//
|
|
// INIT_TAXI_WIDGETS(taxiRideWidgets)
|
|
// #ENDIF
|
|
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~-------------------------------~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~----")
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~~~~~~~~~~~~ Oddjobs | Taxi | Procedural ~~~~~~~~~~~~~~~~~~~----------")
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"-----~~~~~-------------------------------~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~----")
|
|
ENDPROC
|
|
|
|
/// main difference is there's no dialogue, just god text
|
|
PROC TAXI_OJ_MONITOR_WANTED_LEVEL_PROCEDURAL()
|
|
|
|
IF NOT IS_BITMASK_AS_ENUM_SET(myTaxiData.iTaxiJobBits,TAXI_OJ_JB_DISABLE_WANTED)
|
|
|
|
SWITCH myTaxiData.tWantedStateIndex
|
|
|
|
CASE TWS_CHECK_IF_WANTED//--------------------------------------------------------------
|
|
|
|
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) >= 1
|
|
IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) > TAXI_TWEAKS_TIME_DX_DELAY_POLICE
|
|
|
|
//Preserve the wanted_level for the stats
|
|
SET_TAXI_OJ_WANTED_LEVEL(myTaxiData,GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()))
|
|
|
|
|
|
TAXI_RESET_TIMERS(myTaxiData, TT_POLICE)
|
|
|
|
//Hide old gps & blips
|
|
IF DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
|
|
SET_BLIP_ALPHA(myTaxiData.blipTaxiDropOff,0)
|
|
SET_BLIP_ROUTE(myTaxiData.blipTaxiDropOff, FALSE)
|
|
ENDIF
|
|
|
|
myTaxiData.bIsCurrentlyWanted = TRUE
|
|
|
|
myTaxiData.tWantedStateIndex = TWS_PRINT_OBJ_TO_LOSE_POLICE
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TX_MONITOR_WANTED_LEVEL - TWS_PRINT_OBJ_TO_LOSE_POLICE")
|
|
ENDIF
|
|
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TWS_PRINT_OBJ_TO_LOSE_POLICE//--------------------------------------------------------------
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
AND GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_POLICE) > 4.0
|
|
|
|
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_OBJ_POLICE,TRUE)
|
|
myTaxiData.tWantedStateIndex = TWS_CONFIRM_OBJ_LOSE_POLICE_PRINTED
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TX_MONITOR_WANTED_LEVEL - TWS_CONFIRM_OBJ_LOSE_POLICE_PRINTED")
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TWS_CONFIRM_OBJ_LOSE_POLICE_PRINTED//--------------------------------------------------------------
|
|
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("TAXI_OBJ_POL")
|
|
myTaxiData.tWantedStateIndex = TWS_CHECK_IF_PLAYER_LOST_WANTED
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TX_MONITOR_WANTED_LEVEL - TWS_CHECK_IF_PLAYER_LOST_WANTED")
|
|
ELIF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) < 1
|
|
myTaxiData.tWantedStateIndex = TWS_CHECK_IF_PLAYER_LOST_WANTED
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TX_MONITOR_WANTED_LEVEL - TWS_CHECK_IF_PLAYER_LOST_WANTED - objective not printed")
|
|
ENDIF
|
|
BREAK
|
|
|
|
|
|
CASE TWS_CHECK_IF_PLAYER_LOST_WANTED//--------------------------------------------------------------
|
|
|
|
//If it's grown since last time make sure we update stats and the tracker
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(GET_PLAYER_INDEX(),GET_TAXI_OJ_WANTED_LEVEL(myTaxiData))
|
|
SET_TAXI_OJ_WANTED_LEVEL(myTaxiData,GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()))
|
|
TAXI_STATS_UPDATE(TAXI_STAT_WANTED_GAINED)
|
|
ENDIF
|
|
|
|
//Toggle escape police dialogue every x seconds
|
|
// 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) > TAXI_OJ_CONST_TIME_BETWEEN_POLICE_REACTIONS
|
|
// SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_ESCAPE_POLICE,TRUE)
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
//Wait til he's lost it
|
|
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) < 1
|
|
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("TAXI_OBJ_POL")
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"cleared objective print")
|
|
CLEAR_PRINTS()
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"objective print was not on screen")
|
|
ENDIF
|
|
|
|
//Show Blip & GPS again
|
|
IF DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TX_MONITOR_WANTED_LEVEL - putting the drop off blip back on")
|
|
SET_BLIP_ALPHA(myTaxiData.blipTaxiDropOff,255)
|
|
SET_BLIP_ROUTE(myTaxiData.blipTaxiDropOff, TRUE)
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TX_MONITOR_WANTED_LEVEL - blip does not exist, can't bring it back!")
|
|
ENDIF
|
|
|
|
myTaxiData.bIsCurrentlyWanted = FALSE
|
|
|
|
myTaxiData.tWantedStateIndex = TWS_CONGRATULATE_PLAYER_ON_LOSING_WANTED
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TX_MONITOR_WANTED_LEVEL - TWS_CONGRATULATE_PLAYER_ON_LOSING_WANTED")
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE TWS_CONGRATULATE_PLAYER_ON_LOSING_WANTED
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
//"Nice You Lost the Pigs "
|
|
// SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_POLICE_LOST,TRUE,FALSE,TRUE)
|
|
|
|
//Award Bonus
|
|
//TAXI_SET_BONUS(myTaxiData,TAXI_BONUS_LOST_POLICE, 100 )
|
|
|
|
//Update stats
|
|
TAXI_STATS_UPDATE(TAXI_STAT_WANTED_LOST,GET_TAXI_OJ_WANTED_LEVEL(myTaxiData))
|
|
|
|
//Set tracker back to zero
|
|
SET_TAXI_OJ_WANTED_LEVEL(myTaxiData,0)
|
|
|
|
myTaxiData.tWantedStateIndex = TWS_CLEANUP
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_OJ_MONITOR_WANTED_LEVEL - Police lost")
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE TWS_CLEANUP
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
OPEN_DIALOGUE_QUEUE(tTaxiOJ_DQ_Data,-1,TDQ_ADD_DELAY_BEFORE_RESUME)
|
|
myTaxiData.tWantedStateIndex = TWS_CHECK_IF_WANTED
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC TAXI_OJ_PRO_SET_TIPS_AND_EXCITEMENT_TO_CHECK()
|
|
|
|
//Tip Bits
|
|
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_POS_DELIVERY_TIME)
|
|
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_HIT_PED)
|
|
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_TOOK_DAMAGE)
|
|
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_ROLL_CAR)
|
|
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_LEFT_CAR)
|
|
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_STOPPED)
|
|
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_RADIO_STATION_LIKE)
|
|
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_RADIO_STATION_DISLIKE)
|
|
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_FREEBIE)
|
|
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_TipsBitMask,TAXI_TIP_BIT_LOST_POLICE)
|
|
|
|
|
|
//Exitement 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)
|
|
|
|
//Start the mission timer here
|
|
TAXI_START_TIMER(myTaxiData, TT_RIDETODEST)
|
|
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_OJ_PRO_SET_TIPS_AND_EXCITEMENT_TO_CHECK set tips to check on")
|
|
ENDPROC
|
|
|
|
PROC TAXI_P_OJ_RATE_OVERALL_TIP_LEVEL(BOOL bThisPassengerRan = FALSE)
|
|
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
CLEAR_PRINTS()
|
|
|
|
IF bThisPassengerRan
|
|
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_RUNOFF,TRUE)
|
|
|
|
ELIF myTaxiData.iTaxiOJ_CashTip < myTaxiData.iTaxiOJ_CashTipAvg
|
|
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(myTaxiData.piTaxiPassenger, "GENERIC_INSULT_MED", myTaxiData.sProceduralPassengerVoice, SPEECH_PARAMS_FORCE_FRONTEND)
|
|
ENDIF
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"[TAXI_DIALOGUE_LIB] TAXI_RATE_OVERALL_TIP_LEVEL: TAXI_DI_RATE_TIP_ASS iTaxiOJ_CashTip = ",myTaxiData.iTaxiOJ_CashTip, " which is less than iTaxiOJ_CashTipAvg = ", myTaxiData.iTaxiOJ_CashTipAvg)
|
|
|
|
ELIF myTaxiData.iTaxiOJ_CashTip >= myTaxiData.iTaxiOJ_CashTipAmazing
|
|
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(myTaxiData.piTaxiPassenger, "TAXI_GOOD", myTaxiData.sProceduralPassengerVoice, SPEECH_PARAMS_FORCE_FRONTEND)
|
|
ENDIF
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"[TAXI_DIALOGUE_LIB] TAXI_RATE_OVERALL_TIP_LEVEL: TAXI_DI_RATE_TIP_AMAZING iTaxiOJ_CashTip = ",myTaxiData.iTaxiOJ_CashTip, " which is greater than iTaxiOJ_CashTipAmazing = ", myTaxiData.iTaxiOJ_CashTipAmazing)
|
|
|
|
ELSE
|
|
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(myTaxiData.piTaxiPassenger, "GENERIC_THANKS", myTaxiData.sProceduralPassengerVoice, SPEECH_PARAMS_FORCE_FRONTEND)
|
|
ENDIF
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"[TAXI_DIALOGUE_LIB] TAXI_RATE_OVERALL_TIP_LEVEL: TAXI_DI_RATE_TIP_AVERAGE iTaxiOJ_CashTip = ",myTaxiData.iTaxiOJ_CashTip, "iTaxiOJ_CashTipAvg = ", myTaxiData.iTaxiOJ_CashTipAvg)
|
|
ENDIF
|
|
|
|
SET_BITMASK_AS_ENUM(myTaxiData.iTaxiOJ_BitsDialogue, TAXI_DXF_THANKS)
|
|
|
|
TAXI_RESET_TIMERS(myTaxiData, TT_DIALOGUE,TAXI_DX_DELAY)
|
|
|
|
|
|
ENDPROC
|
|
|
|
FUNC FLOAT GET_DYNAMIC_STOPPING_DISTANCE_FOR_TAXI_PROCEDURAL()
|
|
FLOAT fCurrentPlayerSpeed
|
|
|
|
fCurrentPlayerSpeed = GET_ENTITY_SPEED(myTaxiData.viTaxi)
|
|
|
|
IF fCurrentPlayerSpeed >= 5
|
|
RETURN fCurrentPlayerSpeed * 0.5
|
|
ENDIF
|
|
|
|
RETURN 6.0
|
|
ENDFUNC
|
|
|
|
PROC TRIGGER_TAXI_QUEUE_PRO_LINES()
|
|
//Trigger lines
|
|
SET_TAXI_OJ_INTERRUPT_TIMER_OFF(myTaxiData)
|
|
|
|
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("TX_OBJ_PRO_DO")
|
|
OR DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"--------------------------[Taxi Oddjob Objective] GO TO LOCATION 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 LOCATION 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 NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(myTaxiData.piTaxiPassenger, "PED_RANT", myTaxiData.sProceduralPassengerVoice, SPEECH_PARAMS_FORCE_FRONTEND)
|
|
ENDIF
|
|
|
|
tTaxiOJ_DQ_Data.iCurrentDQLine++
|
|
|
|
IF g_bDebug
|
|
SCRIPT_ASSERT("Triggering Banter 1")
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// CASE 2
|
|
// IF GET_TAXI_SPEECH_INDEX(myTaxiData) > TAXI_OBJ_GIVE_MAIN
|
|
// AND GET_TAXI_SPEECH_INDEX(myTaxiData) <> TAXI_DI_BANTER_2
|
|
//
|
|
// SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_BANTER_2,TRUE)
|
|
// IF g_bDebug
|
|
// SCRIPT_ASSERT("Triggering Banter 2")
|
|
// ENDIF
|
|
// ENDIF
|
|
// BREAK
|
|
|
|
// CASE 2
|
|
// IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_DQUEUE) > GET_RANDOM_FLOAT_IN_RANGE(8.0,14.0)
|
|
// //Set Radio Station Check
|
|
// IF NOT GET_TAXI_RADIO_CHECK_FLAG(myTaxiData)
|
|
// TAXI_RADIO_STATION_TURN_ON(myTaxiData)
|
|
// tTaxiOJ_DQ_Data.iCurrentDQLine++
|
|
// 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
|
|
|
|
PROC Main_Taxi_OJ_Procedural()
|
|
|
|
//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
|
|
SWITCH eTaxiFailState
|
|
CASE TAXIFAIL_INIT
|
|
IF TAXI_HANDLE_FAIL(myTaxiData)
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"Fail State going to : TAXIFAIL_PRINT")
|
|
eTaxiFailState = TAXIFAIL_PRINT
|
|
ENDIF
|
|
BREAK
|
|
CASE TAXIFAIL_PRINT
|
|
Script_Failed()
|
|
BREAK
|
|
ENDSWITCH
|
|
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)
|
|
Script_Cleanup()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Proceed
|
|
ELSE
|
|
|
|
IF myTaxiData.tTaxiOJ_RideState <= TRS_DRIVING_PASSENGER
|
|
|
|
RUN_GLOBAL_TAXI_UPDATES(myTaxiData,aggroArgs)
|
|
|
|
PROCESS_TAXI_EXCEPTIONS(myTaxiData)
|
|
ENDIF
|
|
|
|
TAXI_OJ_MAINTAIN_GLOBAL_GATES(myTaxiData)
|
|
|
|
UPDATE_TAXI_OJ_TIP(myTaxiData,iTipIndex)
|
|
|
|
|
|
//Dialogue & Objectives
|
|
IF myTaxiData.tTaxiOJ_RideState > TRS_FINDING_LOCATION
|
|
IF NOT IS_TAXI_EMERGENCY_FAIL_SET(myTaxiData)
|
|
TRIGGER_TAXI_QUEUE_PRO_LINES()
|
|
ELSE
|
|
TAXI_SET_FAIL(myTaxiData,"Taxi Not Driveable",GET_TAXI_EMERGENCY_FAIL_STRING(myTaxiData))
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF myTaxiData.tTaxiOJ_RideState = TRS_DRIVING_PASSENGER
|
|
HANDLE_TAXI_EXCITEMENT(myTaxiData,FALSE,TRUE)
|
|
ENDIF
|
|
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TC_HOWTOSTART")
|
|
CLEAR_HELP()
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"Tutorial help was cleared")
|
|
ENDIF
|
|
|
|
SWITCH myTaxiData.tTaxiOJ_RideState
|
|
CASE TRS_FINDING_LOCATION
|
|
IF GET_TAXI_DROPOFF_LOCATION_FROM_DISTANCE(txRegionsArray, myTaxiData.vTaxiOJPickup, 1)
|
|
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TRS_FINDING_LOCATION - Passenger spawned at these coords", myTaxiData.vTaxiOJPickup)
|
|
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_INIT_STREAM)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TRS_INIT_STREAM
|
|
IF TAXI_INIT_READY(myTaxiData)
|
|
//requests
|
|
REQUEST_TAXI_PROCEDURAL_STREAMS()
|
|
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_STREAMING)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TRS_STREAMING
|
|
IF HAVE_TAXI_PROCEDURAL_STREAMS_LOADED()
|
|
CLEAR_ALL_TAXI_PASSENGER_REACT_BITS(myTaxiData)
|
|
|
|
//Move on to the next stage
|
|
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SPAWNING)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TRS_SPAWNING
|
|
//IF TAXI_SPAWN_PASSENGER(myTaxiData, myTaxiData.vTaxiOJPickup, myTaxiData.vTaxiOJPickup , "TaxiHan", mPassengerModel,180.6)
|
|
IF NOT DOES_ENTITY_EXIST(myTaxiData.piTaxiPassenger)
|
|
|
|
ADD_TAXI_OJ_SPEED_REDUCTION_VOLUMES(myTaxiData,myTaxiData.vTaxiOJPickup)
|
|
|
|
//Initialize spawn and pickup locations
|
|
myTaxiData.vTaxiOJSpawn = myTaxiData.vTaxiOJPickup
|
|
|
|
//Stops cars from spawning in the area around the passenger
|
|
TAXI_PREP_TURN_OFF_VEHICLE_GENS(myTaxiData.vTaxiOJPickup)
|
|
|
|
CLEAR_AREA_OF_PEDS(myTaxiData.vTaxiOJPickup,TAXI_OJ_RADIUS_CLEAR_PED)
|
|
|
|
// 2119025 - remove switching off roads here as it's breaking highways.
|
|
//TAXI_PREP_SET_ROADS_IN_AREA_FOR_PICKUP(myTaxiData.vTaxiOJPickup, FALSE)
|
|
|
|
//IF CAN_CREATE_RANDOM_PED(RPM_DONT_CARE)
|
|
myTaxiData.piTaxiPassenger = CREATE_PED(PEDTYPE_MISSION, mPassengerModel, myTaxiData.vTaxiOJSpawn) //CREATE_RANDOM_PED(myTaxiData.vTaxiOJSpawn)
|
|
|
|
SET_AMBIENT_VOICE_NAME(myTaxiData.piTaxiPassenger, myTaxiData.sProceduralPassengerVoice)
|
|
|
|
//Dialogue Setup-----------------
|
|
ADD_PED_FOR_DIALOGUE(myTaxiData.tTaxiOJ_Convo, 3, myTaxiData.piTaxiPassenger, "TaxiGeneric")
|
|
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_SPAWN_PASSENGER - Passenger spawned at these coords", "", myTaxiData.vTaxiOJSpawn)
|
|
|
|
SET_PED_RESET_FLAG(myTaxiData.piTaxiPassenger, PRF_DisableSeeThroughChecksWhenTargeting, TRUE)
|
|
|
|
IF NOT IS_PED_INJURED(myTaxiData.piTaxiPassenger)
|
|
//SET_PED_MOVEMENT_CLIPSET(myTaxiData.piTaxiPassenger, "move_m@quick")
|
|
|
|
SET_PED_CONFIG_FLAG(myTaxiData.piTaxiPassenger,PCF_WillFlyThroughWindscreen,FALSE)
|
|
SET_PED_CONFIG_FLAG(myTaxiData.piTaxiPassenger,PCF_PedsJackingMeDontGetIn,TRUE)
|
|
SET_PED_CONFIG_FLAG(myTaxiData.piTaxiPassenger,PCF_CanSayFollowedByPlayerAudio,TRUE)
|
|
|
|
//myTaxiData.blipTaxiPassenger = CREATE_BLIP_FOR_COORD(myTaxiData.vTaxiOJSpawn,TRUE)
|
|
myTaxiData.blipTaxiPassenger = CREATE_BLIP_FOR_ENTITY(myTaxiData.piTaxiPassenger)
|
|
SET_BLIP_NAME_FROM_TEXT_FILE(myTaxiData.blipTaxiPassenger, "TAXI_BLIP_PASS")
|
|
SET_GPS_FLAGS(GPS_FLAG_IGNORE_ONE_WAY)
|
|
SET_BLIP_ROUTE(myTaxiData.blipTaxiPassenger,TRUE)
|
|
|
|
ADD_RELATIONSHIP_GROUP("TAXI_Passenger", myTaxiData.relPassenger)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, myTaxiData.relPassenger, RELGROUPHASH_PLAYER)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_IGNORE, myTaxiData.relPassenger, RELGROUPHASH_COP)
|
|
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(myTaxiData.piTaxiPassenger,myTaxiData.relPassenger)
|
|
TASK_LOOK_AT_ENTITY(myTaxiData.piTaxiPassenger, myTaxiData.viTaxi, INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_SPAWN_PASSENGER - SUCCESS")
|
|
ENDIF
|
|
|
|
//Give player obj to go pickup Passenger
|
|
ENABLE_TAXI_SPEECH(myTaxiData)
|
|
|
|
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_MANAGE_PICKUP)
|
|
//ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
//Waits for passenger to head to cab
|
|
CASE TRS_MANAGE_PICKUP
|
|
//Help: You can cancel a taxi job before picking up the passenger by pressing ~INPUT_SCRIPT_LS~.~s~
|
|
IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_CANCELHELP_SHOWN)
|
|
IF TAXI_CONTROLLER_GetNumRuns(TXM_PROCEDURAL) >= 2
|
|
PRINT_HELP("TAXI_2CANCEL")
|
|
SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_CANCELHELP_SHOWN)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Player can cancel this before he picks up the passenger
|
|
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_HORN)
|
|
AND NOT (myTaxiData.iTaxiOJ_StatesPickup > 0)
|
|
TAXI_SET_FAIL(myTaxiData,"Player cancelled on dispatch",TFS_TAXI_CANCELLED)
|
|
ENDIF
|
|
|
|
|
|
|
|
IF TAXI_HANDLE_IV_PICKUP_NO_METER(myTaxiData)
|
|
//Move on to the next stage
|
|
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_WAIT_PARK)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TRS_WAIT_PARK
|
|
IF IS_PASSENGER_ENTERING_TAXI(myTaxiData)
|
|
// eTaxiDestination = INT_TO_ENUM(TAXI_PROCEDURAL_LOCATIONS, GET_RANDOM_INT_IN_RANGE(0, ENUM_TO_INT(TAXILOC_NUM)))
|
|
// CDEBUG1LN(DEBUG_OJ_TAXI,"TRS_WAIT_PARK - Passenger location is ", GET_TAXI_LOCATION_STRING(eTaxiDestination))
|
|
|
|
// RESET_PED_MOVEMENT_CLIPSET(myTaxiData.piTaxiPassenger)
|
|
|
|
TAXI_SET_PROC_DESTINATION(myTaxiProceduralData)
|
|
|
|
// !!!!!!
|
|
// COMMENT IN TO TEST SPECIFIC LOCATIONS!!!! JUST FOR DEBUG
|
|
// myTaxiProceduralData.CurrentLocation = TAXILOC_ZANCUDO_RIVER_HILL_CHURCH //TAXILOC_ALAMO_SEA_HOOD //
|
|
// !!!!!!
|
|
|
|
// possible destination / dropoff combo
|
|
// -224.54303, 3898.72266, 36.39012
|
|
// -201.79492, 3934.59351, 33.56364
|
|
|
|
myTaxiData.vTaxiOJDropoff = GET_TAXI_LOCATION_COORD(myTaxiProceduralData.CurrentLocation)
|
|
myTaxiData.vTaxiOJ_PassengerGoToPt = GET_TAXI_LOCATION_WALK_TO_COORD(myTaxiProceduralData.CurrentLocation)
|
|
//Greet the player
|
|
SET_NEXT_TAXI_SPEECH(myTaxiData,TAXI_DI_GREET,TRUE)
|
|
|
|
IF NOT DOES_BLIP_EXIST(myTaxiData.blipTaxiDropOff)
|
|
myTaxiData.blipTaxiDropOff = CREATE_BLIP_FOR_COORD(myTaxiData.vTaxiOJDropoff,TRUE)
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_SET_DROPOFF_BLIP_ON - Destination Blip set")
|
|
ENDIF
|
|
|
|
//CleanUp Pickup Lock & POI
|
|
CLEANUP_TAXI_PICKUP_STOP(myTaxiData)
|
|
|
|
//Set all tip checks on
|
|
TAXI_OJ_PRO_SET_TIPS_AND_EXCITEMENT_TO_CHECK()
|
|
|
|
//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
|
|
|
|
CASE TRS_DRIVING_PASSENGER
|
|
// IF TAXI_HANDLE_DRIVING(myTaxiData,tTaxiOJ_DQ_Data,TRUE,12,60)
|
|
|
|
IF IS_TAXI_RIDE_ALL_READY(myTaxiData)
|
|
|
|
UPDATE_OJ_TAXI_MILEAGE(myTaxiData,myTaxiData.fTaxiOJ_TempFloat)
|
|
|
|
//TAXI_OJ_MONITOR_PLAYER_HORN_HONK(myTaxiData)
|
|
|
|
TAXI_OJ_MONITOR_WANTED_LEVEL_PROCEDURAL()
|
|
|
|
RUN_TAXIRADIO_UPDATE_WHEN_ENABLED(myTaxiData)
|
|
|
|
TAXI_OJ_MONITOR_STOPPED(myTaxiData)
|
|
|
|
IF HAS_TAXI_OJ_REACHED_DROPOFF(myTaxiData, GET_DYNAMIC_STOPPING_DISTANCE_FOR_TAXI_PROCEDURAL())
|
|
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"Time Driven = ", GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_RIDETODEST))
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"GPS Distance = ", myTaxiProceduralData.fGPSDistance)
|
|
|
|
fTipRate = (myTaxiProceduralData.fGPSDistance/GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_RIDETODEST)) * 3600
|
|
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"fTipRate = ", fTipRate)
|
|
|
|
IF fTipRate > 40.0
|
|
myTaxiData.iTaxiOJ_CashTip = myTaxiData.iTaxiOJ_CashTipAmazing
|
|
|
|
ELIF fTipRate > 30.0
|
|
myTaxiData.iTaxiOJ_CashTip = myTaxiData.iTaxiOJ_CashTipAvg
|
|
|
|
ELSE
|
|
myTaxiData.iTaxiOJ_CashTip = 0
|
|
|
|
ENDIF
|
|
|
|
//CLOSE_DIALOGUE_QUEUE(tTaxiOJ_DQ_Data,CONST_TAXI_OJ_LINE_NUM_TO_CLOSE_DIALOGUE_Q,TRUE)
|
|
|
|
//Remove destination blip
|
|
REMOVE_BLIP(myTaxiData.blipTaxiDropOff)
|
|
|
|
INT iRandom
|
|
iRandom = GET_RANDOM_INT_IN_RANGE(0, 100)
|
|
|
|
IF iRandom < 10
|
|
bPassengerRan = TRUE
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"Passenger Ran set to TRUE")
|
|
ELSE
|
|
bPassengerRan = FALSE
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"Passenger Ran set to FALSE")
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bDebugPassRun
|
|
bPassengerRan = TRUE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$CASH
|
|
SET_TAXI_FARE_OFF_MILEAGE(myTaxiData)
|
|
TAXI_P_OJ_RATE_OVERALL_TIP_LEVEL(bPassengerRan)
|
|
CONVERT_TAXI_TIP_TO_CASH(myTaxiData)
|
|
|
|
IF bPassengerRan
|
|
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SPECIAL_ENDING)
|
|
ELSE
|
|
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_REGULAR_PAYMENT)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// ENDIF
|
|
BREAK
|
|
|
|
CASE TRS_REGULAR_PAYMENT
|
|
IF HAS_TAXI_OJ_PASSENGER_BEEN_DROPPED_OFF(myTaxiData, TRUE)
|
|
IF NOT IS_ENTITY_DEAD(myTaxiData.piTaxiPassenger)
|
|
CLEAR_SEQUENCE_TASK(siTemp)
|
|
OPEN_SEQUENCE_TASK(siTemp)
|
|
TASK_CLEAR_LOOK_AT(NULL)
|
|
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE)
|
|
IF DOES_SCENARIO_EXIST_IN_AREA(GET_TAXI_LOCATION_WALK_TO_COORD(myTaxiProceduralData.CurrentLocation), 5.0, TRUE)
|
|
TASK_USE_NEAREST_SCENARIO_TO_COORD(NULL, GET_TAXI_LOCATION_WALK_TO_COORD(myTaxiProceduralData.CurrentLocation), 5.0)
|
|
ELSE
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_TAXI_LOCATION_WALK_TO_COORD(myTaxiProceduralData.CurrentLocation), PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_NEVER_WARP)
|
|
TASK_STAND_STILL(NULL, 500)
|
|
TASK_START_SCENARIO_IN_PLACE(NULL, PICK_STRING(GET_RANDOM_BOOL(), "WORLD_HUMAN_STAND_MOBILE", "WORLD_HUMAN_AA_SMOKE") , 5000, TRUE)
|
|
TASK_WANDER_STANDARD(NULL)
|
|
ENDIF
|
|
CLOSE_SEQUENCE_TASK(siTemp)
|
|
TASK_PERFORM_SEQUENCE(myTaxiData.piTaxiPassenger, siTemp)
|
|
|
|
//scenari
|
|
|
|
SET_PED_KEEP_TASK(myTaxiData.piTaxiPassenger,TRUE)
|
|
ENDIF
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SCORECARD_GRADE)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TRS_SPECIAL_ENDING
|
|
IF TAXI_SET_PED_RUNNING(myRunState, myTaxiData, myTaxiData.piTaxiPassenger, taxiMoney, TRUE)
|
|
|
|
//State++
|
|
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_SCORECARD_GRADE)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TRS_SCORECARD_GRADE
|
|
SWITCH tscIndex
|
|
CASE TSC_INIT
|
|
PLAY_SOUND_FRONTEND(-1, "CHECKPOINT_UNDER_THE_BRIDGE", "HUD_MINI_GAME_SOUNDSET", FALSE)
|
|
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"Setting the fare to: ", myTaxiData.iTaxiOJ_CashFare)
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"Setting the tip to: ", myTaxiData.iTaxiOJ_CashTip)
|
|
|
|
SET_SCALEFORM_SHARD_MESSAGE_WITH_THREE_NUMBERS_IN_STRAPLINE(TaxiMidSize, "TAXI_FARE_FIN", myTaxiData.iTaxiOJ_CashFare, myTaxiData.iTaxiOJ_CashTip,
|
|
(myTaxiData.iTaxiOJ_CashFare+myTaxiData.iTaxiOJ_CashTip), "TAXI_FARE_DET")
|
|
TaxiMidSize.iDuration = 4000
|
|
|
|
SET_RESULT_SCREEN_DISPLAYING_STATE(TRUE)
|
|
tscIndex = TSC_TALLY
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CALC_SCORECARD - TSC_TALLY")
|
|
BREAK
|
|
|
|
//After pressing X to continue & close the menu
|
|
CASE TSC_TALLY
|
|
IF NOT UPDATE_SHARD_BIG_MESSAGE(TaxiMidSize, TRUE)
|
|
TAXI_REWARD_DRIVER(myTaxiData)
|
|
|
|
TAXI_RESET_TIMERS(myTaxiData, TT_GENERIC)
|
|
SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE)
|
|
|
|
tscIndex = TSC_FINISH
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"TAXI_CALC_SCORECARD - TSC_FINISH")
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TSC_FINISH
|
|
CDEBUG1LN(DEBUG_OJ_TAXI,"** TAXI_CALC_SCORECARD - SCORECARD DONE! **")
|
|
|
|
TAXI_MISSION_END(TRUE,myTaxiData)
|
|
|
|
//Move on to the next stage
|
|
TAXI_JOB_SET_NEXT_STATE(myTaxiData,TRS_CLEANUP)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
BREAK
|
|
|
|
CASE TRS_CLEANUP
|
|
Script_Cleanup()
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
SCRIPT
|
|
|
|
IF (HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS | FORCE_CLEANUP_FLAG_REPEAT_PLAY))
|
|
Script_Cleanup()
|
|
ENDIF
|
|
|
|
SET_MISSION_FLAG(TRUE)
|
|
|
|
// init init initialize
|
|
INIT_TAXI_PROCEDURAL_DATA()
|
|
INIT_TAXI_REGIONS(txRegionsArray)
|
|
INIT_ALL_TAXI_EXCITEMENT_VALUES()
|
|
INITIALIZE_GENERIC_TAXI_EXCEPTIONS()
|
|
|
|
// setting this to really far away in order to get a close pickup
|
|
myTaxiData.vTaxiOJPickup = <<4186.7969, -3657.3494, -0.5762>>
|
|
|
|
WHILE TRUE
|
|
//All skips and debug shortcuts-------------------------------
|
|
#IF IS_DEBUG_BUILD
|
|
// IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J))
|
|
// IF myTaxiData.tTaxiOJ_RideState = TRS_DRIVING_PASSENGER
|
|
// //If you J Skip, check the timer and add some tip
|
|
// IF GET_TAXI_TIMER_IN_SECONDS(myTaxiData, TT_RIDETODEST) < fDeadlineGoals[TXDL_TIME_GOOD_3]// TAXI_CONST_BONUS_TIME_SPEED_DEMON
|
|
// SET_TAXI_TIP_TO_AMAZING(myTaxiData)
|
|
// ENDIF
|
|
// 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))
|
|
TAXI_DEBUG_FAIL_TRIGGERED(myTaxiData)
|
|
Script_Failed()
|
|
ENDIF
|
|
|
|
// Debug Key: Check for Fail (not for Minigames)
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_E))
|
|
bDebugPassRun = TRUE
|
|
ENDIF
|
|
|
|
// Debug Key: set vehicle health to 0.0
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_R))
|
|
IF NOT IS_ENTITY_DEAD(myTaxiData.viTaxi)
|
|
SET_VEHICLE_ENGINE_HEALTH(myTaxiData.viTaxi, 15)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// IF myTaxiData.tTaxiOJ_RideState > TRS_FINDING_LOCATION
|
|
// PROCESS_WIDGETS()
|
|
// ENDIF
|
|
#ENDIF
|
|
//END DEBUG----------------------------------------------------
|
|
|
|
Main_Taxi_OJ_Procedural()
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDSCRIPT
|
|
|
|
// EOF
|