// controller_Taxi.sc //Compile out Title Update changes to header functions. //Must be before includes. //CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R. USING "taxi_support_lib.sch" // ********************************** Script Globals ************************************* THREADID threadCurTaxi = NULL TEXT_LABEL_23 taxiThreadName BLIP_INDEX blipTempTaxi TAXI_OFFER_STATE eTXOState = TXO_WAIT_PRINT_OFFER TAXI_MISSION_TYPES eCurrentType INT iMissionCandID = NO_CANDIDATE_ID INT iSelectorTime //LM - time when the selector button was just released INT iOfferHelpTime FLOAT fReofferAt = 0.0 BOOL bOfferClear = FALSE BOOL bInCar = FALSE BOOL bWasPassed = FALSE BOOL bJobRequested = FALSE BOOL bOfferHelpShown = FALSE INT iDebugThrottle = 1 structTimer taxiContTimer structTimer taxiResetTimer #IF IS_DEBUG_BUILD BOOL bDoProcedurals #ENDIF // THIS IS BAD structPedsForConversation controllerConvos // ********************************** ************** ************************************* PROC THREAD_CLEANUP() IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_SUPPRESSING_TAXI) CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_SUPPRESSING_TAXI) SET_VEHICLE_MODEL_IS_SUPPRESSED(TAXI_GET_TAXI_MODEL_NAME(), FALSE) ENDIF IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_NEED_CLEAR_MISSION_CAND) CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_NEED_CLEAR_MISSION_CAND) Mission_Over(iMissionCandID) ENDIF IF (threadCurTaxi <> NULL) IF IS_THREAD_ACTIVE(threadCurTaxi) TERMINATE_THREAD(threadCurTaxi) threadCurTaxi = NULL ENDIF ENDIF IF GET_LENGTH_OF_LITERAL_STRING(taxiThreadName) <> 0 SET_SCRIPT_AS_NO_LONGER_NEEDED(taxiThreadName) ENDIF //Clean Up Blipped Taxi if exists IF DOES_BLIP_EXIST(blipTempTaxi) REMOVE_BLIP(blipTempTaxi) ENDIF CDEBUG1LN(DEBUG_OJ_TAXI,"******** controller_Taxi has been ordered to clean up ********") TERMINATE_THIS_THREAD() ENDPROC SCRIPT CDEBUG1LN(DEBUG_OJ_TAXI,"******** LAUNCHING controller_Taxi ********") // Initial setup. BOOL bDisableTaxiMissions = FALSE TAXI_CONTROL_STATE txController = TXC_INIT_CONTROLLER CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_SUPPRESSING_TAXI) CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_NEED_CLEAR_MISSION_CAND) // Do we need to cleanup? IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP | FORCE_CLEANUP_FLAG_DEBUG_MENU|FORCE_CLEANUP_FLAG_REPEAT_PLAY) CDEBUG1LN(DEBUG_OJ_TAXI,"...controller_Taxi.sc has been asked to clean up") THREAD_CLEANUP() ENDIF // Set us to relaunch when a save is loaded. Register_Script_To_Relaunch_List(LAUNCH_BIT_MG_CTRL_TAXI) WHILE (TRUE) //Check the flow bitset for this minigame to see if it is currently allowed to be active. bDisableTaxiMissions = NOT GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_TAXI)) //ALLOW_ALTERNATIVE_SCRIPT_CONTROLS_LAYOUT(PLAYER_CONTROL) #IF IS_DEBUG_BUILD TAXI_CONTROLLER_PrintCurrentMissionArray() TAXI_CONTROLLER_ToggleProcedurals(bDoProcedurals) #ENDIF INT iWaitTime = 0 // If we've been disabled, go back to the start. IF bDisableTaxiMissions AND (txController != TXC_INIT_TAXI_RANK) CDEBUG1LN(DEBUG_OJ_TAXI,"*** IF bDisableTaxiMissions AND (txController != TXC_INIT_TAXI_RANK) -> TXC_INIT_TAXI_RANK ***") txController = TXC_INIT_TAXI_RANK ENDIF // If a mission has been fired off while we're trying to get setup, send us back a bit. IF (txController = TXC_WAIT_FOR_ACCEPT) IF IS_CURRENTLY_ON_MISSION_TO_TYPE(MISSION_TYPE_MINIGAME) CANCEL_TIMER(taxiContTimer) CDEBUG1LN(DEBUG_OJ_TAXI,"*** IF IS_CURRENTLY_ON_MISSION_TO_TYPE(MISSION_TYPE_MINIGAME) -> TXC_INIT_TAXI_RANK ***") txController = TXC_INIT_TAXI_RANK ENDIF ENDIF // See if something is hijacking us in debug, and forcing a mission to start. #IF IS_DEBUG_BUILD IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_LAUNCHED_VIA_DEBUG) CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_LAUNCHED_VIA_DEBUG) // Okay, we're forcing a mission... KILL_ANY_CONVERSATION() // IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_NeedExcitement) // eCurrentType = TXM_01_NEEDEXCITEMENT // TAXI_CONTROLLER_FillMissionThreadName(TXM_01_NEEDEXCITEMENT, taxiThreadName, controllerConvos, FALSE) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_NeedExcitement) // // ELIF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_TakeItEasy) // eCurrentType = TXM_02_TAKEITEASY // TAXI_CONTROLLER_FillMissionThreadName(TXM_02_TAKEITEASY, taxiThreadName, controllerConvos, FALSE) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_TakeItEasy) // // ELIF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_Deadline) // eCurrentType = TXM_03_DEADLINE // TAXI_CONTROLLER_FillMissionThreadName(TXM_03_DEADLINE, taxiThreadName, controllerConvos, FALSE) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_Deadline) // // ELIF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_GotYourBack) // eCurrentType = TXM_04_GOTYOURBACK // TAXI_CONTROLLER_FillMissionThreadName(TXM_04_GOTYOURBACK, taxiThreadName, controllerConvos, FALSE) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_GotYourBack) // // ELIF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_TakeToBest) // eCurrentType = TXM_05_TAKETOBEST // TAXI_CONTROLLER_FillMissionThreadName(TXM_05_TAKETOBEST, taxiThreadName, controllerConvos, FALSE) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_TakeToBest) // // ELIF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_IKnowWay) // eCurrentType = TXM_06_IKNOWWAY // TAXI_CONTROLLER_FillMissionThreadName(TXM_06_IKNOWWAY, taxiThreadName, controllerConvos, FALSE) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_IKnowWay) // ELIF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_CutYouIn) // eCurrentType = TXM_07_CUTYOUIN // TAXI_CONTROLLER_FillMissionThreadName(TXM_07_CUTYOUIN, taxiThreadName, controllerConvos, FALSE) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_CutYouIn) // // ELIF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_GotYouNow) // eCurrentType = TXM_08_GOTYOUNOW // TAXI_CONTROLLER_FillMissionThreadName(TXM_08_GOTYOUNOW, taxiThreadName, controllerConvos, FALSE) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_GotYouNow) // // ELIF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_ClownCar) // eCurrentType = TXM_09_CLOWNCAR // TAXI_CONTROLLER_FillMissionThreadName(TXM_09_CLOWNCAR, taxiThreadName, controllerConvos, FALSE) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_ClownCar) // // ELIF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_FollowThatCar) // eCurrentType = TXM_10_FOLLOWTHATCAR // TAXI_CONTROLLER_FillMissionThreadName(TXM_10_FOLLOWTHATCAR, taxiThreadName, controllerConvos, FALSE) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_FollowThatCar) // IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_Procedural) eCurrentType = TXM_PROCEDURAL TAXI_CONTROLLER_FillMissionThreadName(TXM_PROCEDURAL, taxiThreadName, controllerConvos, FALSE) CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_Procedural) ENDIF // Request a script no matter what. REQUEST_SCRIPT(taxiThreadName) CANCEL_TIMER(taxiContTimer) txController = TXC_TAXI_RANK_WAIT ENDIF #ENDIF SWITCH (txController) CASE TXC_INIT_CONTROLLER IF DOES_ENTITY_EXIST(PLAYER_PED_ID()) // We were running into an issue where returning from MP, the player doesn't have a valid enum. We need to // check this before initting the conversation. enumCharacterList playerEnum playerEnum = GET_PLAYER_PED_ENUM(PLAYER_PED_ID()) IF (playerEnum = CHAR_MICHAEL) OR (playerEnum = CHAR_TREVOR) OR (playerEnum = CHAR_FRANKLIN) CDEBUG1LN(DEBUG_OJ_TAXI,"*** TXC_INIT_CONTROLLER ***") // Setup the mission order for us. TAXI_CONTROLLER_InitMissionArray() // If we're out of missions, quit. // IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_ALL_MISSIONS_DONE) // txController = TXC_CLEANUP_CONTROLLER // ELSE //Set this to let the dev know that the controller is running IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_CONTROLLER_RUNNING) SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_CONTROLLER_RUNNING) ENDIF // Create conversation peds. TAXI_ASSIGN_PLAYER_ENUM_FOR_DIALOGUE(controllerConvos) CDEBUG1LN(DEBUG_OJ_TAXI,"*** TXC_INIT_CONTROLLER going to TXC_INIT_TAXI_RANK ***") txController = TXC_INIT_TAXI_RANK RESTART_TIMER_NOW(taxiContTimer) // ENDIF ENDIF ENDIF iWaitTime = 100 BREAK CASE TXC_INIT_TAXI_RANK // If we're out of missions, quit. // IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_ALL_MISSIONS_DONE) // txController = TXC_CLEANUP_CONTROLLER // ENDIF // PED_INDEX playerPed // VEHICLE_INDEX tempVeh IF IS_SELECTOR_UI_BUTTON_JUST_RELEASED() // LM let's have iSelectorTime = GET_GAME_TIMER() ENDIF // Need to check the following: // - No minigames in progress // - Not wanted // - Not disabled // - Not selecting another player // - In a car // -- That's a taxi // -- In the driver seat IF NOT IS_CURRENTLY_ON_MISSION_OF_ANY_TYPE() //IS_CURRENTLY_ON_MISSION_TO_TYPE(MISSION_TYPE_MINIGAME) AND NOT g_bTriggerSceneActive IF (txController <> TXC_WAIT_FOR_ACCEPT) IF NOT IS_MINIGAME_IN_PROGRESS() AND NOT bDisableTaxiMissions AND NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_RANDOM_EVENT) //B*519180 - Turn off dispatch if player leaves Taxi - JD 6/11/12 TOGGLE_TAXI_OJ_DISPATCH() IF IS_PLAYER_IN_ANY_TAXI() // If he wasn't preciously in the car, and he now is, print a help if the car is too damaged to offer jobs. IF NOT bInCar IF (TAXI_CONTROLLER_GetMissionAbility() = TAXINOMISSION_HEALTHGONE) IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_TAXIHEALTHHELP) // Set this help up to use the flow queue to ensure this help cleans up properly and is // guarded against displaying at inappropriate moments. -BenR SWITCH GET_FLOW_HELP_MESSAGE_STATUS("TC_H_TOODAMAGED") CASE FHS_EXPIRED ADD_HELP_TO_FLOW_QUEUE("TC_H_TOODAMAGED", FHP_MEDIUM, 0, 1000) BREAK CASE FHS_DISPLAYED SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_TAXIHEALTHHELP) BREAK ENDSWITCH // SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_TAXIHEALTHHELP) // PRINT_HELP("TC_H_TOODAMAGED") ENDIF ELSE CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_TAXIHEALTHHELP) ENDIF bInCar = TRUE ENDIF IF (GET_PLAYER_WANTED_LEVEL(Player_ID()) != 0) eTXOState = TXO_WAIT_PRINT_OFFER ELSE IF bWasPassed IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_ANOTHER_JOB) SWITCH GET_FLOW_HELP_MESSAGE_STATUS("TC_ANOTHERJOB") CASE FHS_EXPIRED CDEBUG1LN(DEBUG_OJ_TAXI,"help added to queue: TC_ANOTHERJOB") ADD_HELP_TO_FLOW_QUEUE("TC_ANOTHERJOB", FHP_MEDIUM, 0, 1000) BREAK CASE FHS_DISPLAYED CDEBUG1LN(DEBUG_OJ_TAXI,"Another job displayed, clearing out") SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_ANOTHER_JOB) BREAK ENDSWITCH ENDIF ELSE // New help check IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_FIRSTTIMEINTAXI) IF NOT bOfferHelpShown SWITCH GET_FLOW_HELP_MESSAGE_STATUS("TC_HOWTOSTART") CASE FHS_EXPIRED CDEBUG1LN(DEBUG_OJ_TAXI,"help added to queue: TC_HOWTOSTART") ADD_HELP_TO_FLOW_QUEUE("TC_HOWTOSTART", FHP_MEDIUM, 0, 1000) BREAK CASE FHS_DISPLAYED iOfferHelpTime = GET_GAME_TIMER() bOfferHelpShown = TRUE CDEBUG1LN(DEBUG_OJ_TAXI,"help displayed in queue: TC_HOWTOSTART") IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TC_HOWTOSTART") g_savedGlobals.sTaxiData.iTaxiStats[TAXI_HELP_SHOWN]++ ELSE CDEBUG1LN(DEBUG_OJ_TAXI,"taxi tut not being displayed") ENDIF CDEBUG1LN(DEBUG_OJ_TAXI,"help has now been shown this many times: ", g_savedGlobals.sTaxiData.iTaxiStats[TAXI_HELP_SHOWN]) IF g_savedGlobals.sTaxiData.iTaxiStats[TAXI_HELP_SHOWN] >= 5 SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_FIRSTTIMEINTAXI) ENDIF BREAK ENDSWITCH ENDIF // IF (GET_GAME_TIMER() % 1000) < 50 // CDEBUG1LN(DEBUG_OJ_TAXI,"GET_FLOW_HELP_MESSAGE_STATUS(TC_HOWTOSTART) = ", GET_FLOW_HELP_MESSAGE_STATUS("TC_HOWTOSTART")) // ENDIF // ELSE // IF (GET_GAME_TIMER() % 1000) < 50 // CDEBUG1LN(DEBUG_OJ_TAXI,"help already displayed") // ENDIF ENDIF ENDIF ENDIF //Clean Up Blipped Taxi if exists IF DOES_BLIP_EXIST(blipTempTaxi) REMOVE_BLIP(blipTempTaxi) ENDIF // Handle the job offer state. SWITCH (eTXOState) CASE TXO_WAIT_PRINT_OFFER IF (TAXI_CONTROLLER_GetMissionAbility() = TAXI_CAN_RUN_MISSION) IF NOT IS_TIMER_STARTED(taxiContTimer) START_TIMER_NOW(taxiContTimer) ENDIF IF IS_TIMER_STARTED(taxiResetTimer) CANCEL_TIMER(taxiResetTimer) ENDIF IF GET_TIMER_IN_SECONDS(taxiContTimer) > 20.0 IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED() AND IS_CONVERSATION_STATUS_FREE() // Select next mission. eCurrentType = ? // eCurrentType = TXM_PROCEDURAL//TAXI_CONTROLLER_GetClosestAvailableMission() // // TAXI_ASSIGN_PLAYER_ENUM_FOR_DIALOGUE(controllerConvos) // TAXI_CONTROLLER_FillMissionThreadName(eCurrentType, taxiThreadName, controllerConvos) // RESTART_TIMER_NOW(taxiContTimer) eCurrentType = TXM_PROCEDURAL taxiThreadName = "Taxi_Procedural" ADD_PED_FOR_DIALOGUE(controllerConvos, 8, NULL, "TaxiDispatch") CREATE_CONVERSATION(controllerConvos, "OJTXAUD", "OJTX_PRO_OFF", CONV_PRIORITY_NON_CRITICAL_CALL) RESTART_TIMER_NOW(taxiContTimer) CDEBUG1LN(DEBUG_OJ_TAXI,"eTXOState = TXO_WAIT_OFFER_DISP") eTXOState = TXO_WAIT_OFFER_DISP ELSE IF NOT IS_CONVERSATION_STATUS_FREE() IF (GET_GAME_TIMER() % 1000) < 50 CDEBUG1LN(DEBUG_OJ_TAXI,"conversation status is not free, can't offer taxi job") ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE TXO_WAIT_OFFER_DISP IF NOT IS_TIMER_STARTED(taxiContTimer) START_TIMER_NOW(taxiContTimer) ENDIF IF GET_TIMER_IN_SECONDS(taxiContTimer) >= 6.0 // Set this help up to use the flow queue to ensure this help cleans up properly and is // guarded against displaying at inappropriate moments. -BenR SWITCH GET_FLOW_HELP_MESSAGE_STATUS("TC_JOBOFFERED") CASE FHS_EXPIRED CDEBUG1LN(DEBUG_OJ_TAXI,"help added to queue: TC_JOBOFFERED") ADD_HELP_TO_FLOW_QUEUE("TC_JOBOFFERED", FHP_MEDIUM, 0, 1000) BREAK CASE FHS_DISPLAYED bOfferClear = TRUE RESTART_TIMER_NOW(taxiContTimer) CDEBUG1LN(DEBUG_OJ_TAXI,"help text displayed in queue: TC_JOBOFFERED") CDEBUG1LN(DEBUG_OJ_TAXI,"eTXOState = TXO_WAIT_ACCEPT") eTXOState = TXO_WAIT_ACCEPT BREAK ENDSWITCH IF (GET_GAME_TIMER() % 1000) < 50 CDEBUG1LN(DEBUG_OJ_TAXI,"GET_FLOW_HELP_MESSAGE_STATUS(TC_JOBOFFERED) = ", GET_FLOW_HELP_MESSAGE_STATUS("TC_JOBOFFERED")) ENDIF ENDIF BREAK CASE TXO_WAIT_ACCEPT IF NOT IS_TIMER_STARTED(taxiContTimer) START_TIMER_NOW(taxiContTimer) ENDIF // If we wait too long to accept, terminate the offer. IF GET_TIMER_IN_SECONDS(taxiContTimer) > 15.0 // We didn't accept the job fast enough, we lost it. IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_MISSEDJOB) PRINT_HELP("TC_MISSEDJOB") SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_MISSEDJOB) ENDIF //Stats Goodness...Figured this would best be kept in here -JD 4/25/11 //TAXI_STATS_UPDATE(TAXI_STAT_FARES_EXPIRED) //this is done in support now // Random amount of time till next offer. We add the timer because above, we check for the // timer to be > 20.0. so we don't get re-offered immediately. fReofferAt = GET_RANDOM_FLOAT_IN_RANGE(10.0, 40.0) + GET_TIMER_IN_SECONDS(taxiContTimer) CDEBUG1LN(DEBUG_OJ_TAXI,"eTXOState = TXO_WAIT_REOFFER") eTXOState = TXO_WAIT_REOFFER ELIF bOfferClear IF GET_TIMER_IN_SECONDS(taxiContTimer) > 6.0 bOfferClear = FALSE CLEAR_HELP() ENDIF ENDIF BREAK CASE TXO_WAIT_REOFFER IF NOT IS_TIMER_STARTED(taxiContTimer) START_TIMER_NOW(taxiContTimer) ENDIF // In this case, it's the blank spot between when one offer was missed, and the accepting of a new offer. IF GET_TIMER_IN_SECONDS(taxiContTimer) > fReofferAt CANCEL_TIMER(taxiContTimer) CDEBUG1LN(DEBUG_OJ_TAXI,"eTXOState = TXO_WAIT_PRINT_OFFER") eTXOState = TXO_WAIT_PRINT_OFFER ENDIF BREAK ENDSWITCH // We've been told a job was taken. Continue. IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_HORN) AND NOT IS_ENTITY_UPSIDEDOWN(PLAYER_PED_ID()) AND NOT g_bPlayerCanCallProstitute AND (GET_GAME_TIMER() - iSelectorTime) > 3000 //AND NOT g_sSelectorUI.bSelection TAXI_NO_MISSION_REASON eReason eReason = TAXI_CONTROLLER_GetMissionAbility() IF (eReason = TAXI_CAN_RUN_MISSION) // Did the player jump the gun? IF (eTXOState = TXO_WAIT_PRINT_OFFER) OR (eTXOState = TXO_WAIT_REOFFER) // PLAYER IS DEMANDING A JOB BECAUSE NOTHING HAS BEEN OFFERED. // If so, just grab a mission, and he's going to do that. TAXI_ASSIGN_PLAYER_ENUM_FOR_DIALOGUE(controllerConvos) eCurrentType = TXM_PROCEDURAL //TAXI_CONTROLLER_GetClosestAvailableMission() TAXI_CONTROLLER_FillMissionThreadName(eCurrentType, taxiThreadName, controllerConvos, FALSE) bJobRequested = TRUE // We need to send him to a state where he requests a job. txController = TXC_TAXI_RANK_WAIT //TXC_DISPATCH_CONFIRM ELSE CLEAR_PRINTS() CLEAR_HELP() //Set this to let the system know you're in a taxi mission IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_MISSION_RUNNING) SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_MISSION_RUNNING) CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_TAXI_RANK_UPDATE: Mission IS running") ENDIF txController = TXC_TAXI_RANK_WAIT ENDIF #IF IS_DEBUG_BUILD IF bDoProcedurals CDEBUG1LN(DEBUG_OJ_TAXI,"Taxi mission override!, Procedural running") taxiThreadName = "Taxi_Procedural" ENDIF #ENDIF // Request a script no matter what. REQUEST_SCRIPT(taxiThreadName) CANCEL_TIMER(taxiContTimer) iWaitTime = 0 ELIF (eReason = TAXINOMISSION_HEALTHGONE) // Can't run a mission because the cab is just about dead. IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED() PRINT_HELP("TXC_HEALTH_GONE") ENDIF ELIF (eReason = TAXINOMISSION_WANTED) // Can't run a mission because the player is wanted IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED() IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TXC_WANTED_WARN") IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_WANTED_HELP) PRINT_HELP("TXC_WANTED_WARN") SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_WANTED_HELP) ENDIF ENDIF ENDIF ENDIF ENDIF ELSE IF NOT IS_TIMER_STARTED(taxiResetTimer) CDEBUG1LN(DEBUG_OJ_TAXI,"starting reset timer") START_TIMER_NOW(taxiResetTimer) ELSE IF GET_TIMER_IN_SECONDS(taxiResetTimer) < 10.0 IF (GET_GAME_TIMER() % 1000) < 50 CDEBUG1LN(DEBUG_OJ_TAXI,"reset timer is at : ", GET_TIMER_IN_SECONDS(taxiResetTimer)) ENDIF ENDIF IF GET_TIMER_IN_SECONDS(taxiResetTimer) > 10.0 AND eTXOState != TXO_WAIT_PRINT_OFFER CDEBUG1LN(DEBUG_OJ_TAXI,"player out of cab too long, resetting") eTXOState = TXO_WAIT_PRINT_OFFER ENDIF ENDIF IF IS_FLOW_HELP_MESSAGE_QUEUED("TC_HOWTOSTART") CDEBUG1LN(DEBUG_OJ_TAXI,"removed how to start from the help queue") REMOVE_HELP_FROM_FLOW_QUEUE("TC_HOWTOSTART") ENDIF IF IS_FLOW_HELP_MESSAGE_QUEUED("TC_JOBOFFERED") CDEBUG1LN(DEBUG_OJ_TAXI,"removed job offered from the help queue") REMOVE_HELP_FROM_FLOW_QUEUE("TC_JOBOFFERED") ENDIF IF IS_FLOW_HELP_MESSAGE_QUEUED("TC_H_TOODAMAGED") CDEBUG1LN(DEBUG_OJ_TAXI,"removed too damaged from the help queue") REMOVE_HELP_FROM_FLOW_QUEUE("TC_H_TOODAMAGED") ENDIF IF IS_FLOW_HELP_MESSAGE_QUEUED("TC_ANOTHERJOB") CDEBUG1LN(DEBUG_OJ_TAXI,"removed another job from the help queue") REMOVE_HELP_FROM_FLOW_QUEUE("TC_ANOTHERJOB") ENDIF IF (GET_GAME_TIMER() - iOfferHelpTime) > 60000 AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TC_HOWTOSTART") AND bOfferHelpShown CDEBUG1LN(DEBUG_OJ_TAXI,"resetting taxi offer help") bOfferHelpShown = FALSE ENDIF IF bWasPassed CDEBUG1LN(DEBUG_OJ_TAXI,"Another job already shown, clearing passed flag") bWasPassed = FALSE ENDIF bInCar = FALSE CANCEL_TIMER(taxiContTimer) ENDIF ELSE CDEBUG1LN(DEBUG_OJ_TAXI,"minigame in progress = ", IS_MINIGAME_IN_PROGRESS()) CDEBUG1LN(DEBUG_OJ_TAXI,"bDisableTaxiMissions = ", bDisableTaxiMissions) CDEBUG1LN(DEBUG_OJ_TAXI,"mission of type = ", IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_RANDOM_EVENT)) ENDIF ELSE CDEBUG1LN(DEBUG_OJ_TAXI,"txController = ", txController) ENDIF ELSE IF (GET_PLAYER_WANTED_LEVEL(Player_ID()) != 0) //CDEBUG1LN(DEBUG_OJ_TAXI,"txo state is wait print offer") eTXOState = TXO_WAIT_PRINT_OFFER ENDIF ENDIF BREAK CASE TXC_TAXI_RANK_WAIT IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_HORN_ENABLED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), TRUE) // To Fix Bug # 551605 - DS PRINTLN("TAXI CONTROLLER: TURNING BACK ON HORN") ENDIF IF HAS_SCRIPT_LOADED(taxiThreadName) m_enumMissionCandidateReturnValue eLaunchVal eLaunchVal = Request_Mission_Launch(iMissionCandID, MCTID_SELECTED_BY_PLAYER, MISSION_TYPE_MINIGAME) // Process state we've been handed. IF (eLaunchVal = MCRET_ACCEPTED) CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_TAXI_RANK_WAIT: Mission permissions accepted ") g_bTaxiProceduralRunning = TRUE CDEBUG1LN(DEBUG_OJ_TAXI,"setting global procedural taxi flag to true") IF bJobRequested txController = TXC_DISPATCH_ASK CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_TAXI_RANK_WAIT: going to _dispatch_ask") // #IF IS_DEBUG_BUILD // IF bDoProcedurals // txController = TXC_ACTIVATE // ENDIF // #ENDIF ELSE txController = TXC_PLAYER_ACCEPT CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_TAXI_RANK_WAIT: going to _dispatch_confirm") ENDIF iWaitTime = 0 ELIF (eLaunchVal = MCRET_DENIED) CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_TAXI_RANK_WAIT: Mission permissions DENIED ") // Denied. eTXOState = TXO_WAIT_PRINT_OFFER txController = TXC_CLEANUP_TAXI_RANK ELSE CDEBUG_MESSAGE_OJ_TAXI_PERIODIC("PROCESS_TAXI_DBG_SKIP = Scene is loading.",iDebugThrottle) ENDIF ENDIF BREAK CASE TXC_DISPATCH_ASK TEXT_LABEL_23 askJob askJob = "OJTX_PLRDE1" //askJob += GET_RANDOM_INT_IN_RANGE(1, 3) TAXI_ADD_DIALOGUE_OFFSET_FOR_DISPATCH(askJob,TRUE) CREATE_CONVERSATION(controllerConvos, "OJTXAUD", askJob, CONV_PRIORITY_HIGH) CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_DISPATCH_ASK: job asked for, going to _confirm") txController = TXC_DISPATCH_CONFIRM BREAK //Dispatch plays her confirmation line CASE TXC_DISPATCH_CONFIRM IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() CREATE_CONVERSATION(controllerConvos, "OJTXAUD", "OJTX_DIS_JOB", CONV_PRIORITY_HIGH) CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_DISPATCH_CONFIRM: confirmed, going to _activate") txController = TXC_PLAYER_ACCEPT #IF IS_DEBUG_BUILD ELSE IF (GET_GAME_TIMER() % 500) < 50 TEXT_LABEL_23 tempCurrentLabel tempCurrentLabel = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL() CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_DISPATCH_CONFIRM: waiting for conversation to stop") CDEBUG1LN(DEBUG_OJ_TAXI,tempCurrentLabel) ENDIF #ENDIF ENDIF BREAK CASE TXC_PLAYER_ACCEPT IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() // Print the convo line. TEXT_LABEL_23 specLabel specLabel = "OJTX_ACCEPT" TAXI_ADD_DIALOGUE_OFFSET_FOR_DISPATCH(specLabel,TRUE) TAXI_ASSIGN_PLAYER_ENUM_FOR_DIALOGUE(controllerConvos) CREATE_CONVERSATION(controllerConvos, "OJTXAUD", specLabel, CONV_PRIORITY_HIGH) CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_DISPATCH_CONFIRM: offer accepted, going to _activate") txController = TXC_ACTIVATE #IF IS_DEBUG_BUILD ELSE IF (GET_GAME_TIMER() % 500) < 50 TEXT_LABEL_23 tempCurrentLabel tempCurrentLabel = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL() CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_PLAYER_ACCEPT: waiting for conversation to stop") CDEBUG1LN(DEBUG_OJ_TAXI,tempCurrentLabel) ENDIF #ENDIF ENDIF BREAK CASE TXC_ACTIVATE IF IS_PLAYER_IN_ANY_TAXI() IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() bWasPassed = FALSE IF IS_FLOW_HELP_MESSAGE_QUEUED("TC_HOWTOSTART") REMOVE_HELP_FROM_FLOW_QUEUE("TC_HOWTOSTART") ENDIF // Launch script. We're not caring about location, as the script defines where this is going to take place. CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_ACTIVATE: Launching new Taxi Script: ", taxiThreadName) threadCurTaxi = START_NEW_SCRIPT(taxiThreadName, MISSION_STACK_SIZE) SET_SCRIPT_AS_NO_LONGER_NEEDED(taxiThreadName) 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 SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_NEED_CLEAR_MISSION_CAND) taxiThreadName = "" bJobRequested = FALSE //TAXI_STATS_UPDATE(TAXI_STAT_FARES_ACCEPTED) // this is done in support lib txController = TXC_TAXI_RANK_UPDATE eTXOState = TXO_WAIT_PRINT_OFFER ENDIF ELSE IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() KILL_ANY_CONVERSATION() ENDIF bWasPassed = FALSE bJobRequested = FALSE CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_ACTIVATE: player out of cab, setting this thread as no launger needed: ", taxiThreadName) SET_SCRIPT_AS_NO_LONGER_NEEDED(taxiThreadName) SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_NEED_CLEAR_MISSION_CAND) taxiThreadName = "" // CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_TAXI_RANK_UPDATE: Taxi thread ", taxiThreadName, " no longer active.") // // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData,TAXI_BOOL_INIT_MISSIONS) // // IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_SUPPRESSING_TAXI) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_SUPPRESSING_TAXI) // SET_VEHICLE_MODEL_IS_SUPPRESSED(TAXI_GET_TAXI_MODEL_NAME(), FALSE) // ENDIF // // // Reset the mission we're running, because we aren't running it anymore. // eCurrentType = TXM_00_INVALID eTXOState = TXO_WAIT_PRINT_OFFER txController = TXC_TAXI_RANK_UPDATE ENDIF BREAK CASE TXC_TAXI_RANK_UPDATE IF NOT IS_THREAD_ACTIVE(threadCurTaxi) // Thread is inexplicably dead... CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_TAXI_RANK_UPDATE: Taxi thread ", taxiThreadName, " no longer active.") CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData,TAXI_BOOL_INIT_MISSIONS) IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_SUPPRESSING_TAXI) CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_SUPPRESSING_TAXI) SET_VEHICLE_MODEL_IS_SUPPRESSED(TAXI_GET_TAXI_MODEL_NAME(), FALSE) ENDIF g_bTaxiProceduralRunning = FALSE CDEBUG1LN(DEBUG_OJ_TAXI,"setting global procedural taxi flag to false") // The controller will process our mission array. //TAXI_CONTROLLER_ProcessMissionEnding(eCurrentType, bWasPassed) // Reset the mission we're running, because we aren't running it anymore. eCurrentType = TXM_00_INVALID txController = TXC_CLEANUP_TAXI_RANK iWaitTime = 0 ELSE // Check for passed here... this is because there's some mission that continue on, even after flagged as passed, // but we want to auto-save earlier. IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_PASSED) CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_PASSED) REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(GET_TAXI_OJ_COMPLETION_ENUM(eCurrentType)) bWasPassed = TRUE // The controller will process our mission array. TAXI_CONTROLLER_ProcessMissionEnding(eCurrentType, bWasPassed) //B*436518 - Only AutoSave on Mission Pass - JD 4/24/12 SET_AUTOSAVE_IGNORES_ON_MISSION_FLAG(TRUE) ODDJOB_AUTO_SAVE() ENDIF ENDIF BREAK CASE TXC_CLEANUP_TAXI_RANK IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_NEED_CLEAR_MISSION_CAND) CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_NEED_CLEAR_MISSION_CAND) Mission_Over(iMissionCandID) ENDIF iMissionCandID = NO_CANDIDATE_ID // IF (TAXI_CONTROLLER_GetMissionCountRemaining() = 0) // SET_BITMASK_AS_ENUM(g_savedGlobals.sTaxiData.iGenericTaxiData, TAXI_BOOL_ALL_MISSIONS_DONE) // ENDIF IF NOT IS_AUTOSAVE_REQUEST_IN_PROGRESS() SET_AUTOSAVE_IGNORES_ON_MISSION_FLAG(FALSE) //set rich presence back to default. SET_DEFAULT_RICH_PRESENCE_FOR_SP() // Mini-cleanup. Need to terminate the old thread in case we've been asked to force a cleanup due to widgets. taxiThreadName = "" IF (threadCurTaxi <> NULL) IF IS_THREAD_ACTIVE(threadCurTaxi) TERMINATE_THREAD(threadCurTaxi) threadCurTaxi = NULL ENDIF ENDIF CANCEL_TIMER(taxiContTimer) SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE) // Back to start! // commenting the following out with the inclusion of procedural. There's always taxi missions now. // IF (TAXI_CONTROLLER_GetMissionCountRemaining() = 0) // // CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_CLEANUP_TAXI_RANK: All taxi missions done") // txController = TXC_CLEANUP_CONTROLLER // ELSE CDEBUG1LN(DEBUG_OJ_TAXI,"TXC_CLEANUP_TAXI_RANK:eTXOState = TXO_WAIT_PRINT_OFFER, txController = TXC_INIT_TAXI_RANK") eTXOState = TXO_WAIT_PRINT_OFFER txController = TXC_INIT_TAXI_RANK iWaitTime = 0 // ENDIF ENDIF BREAK CASE TXC_CLEANUP_CONTROLLER CDEBUG1LN(DEBUG_OJ_TAXI,"*** TXC_CLEANUP_CONTROLLER ***") THREAD_CLEANUP() BREAK DEFAULT SCRIPT_ASSERT("The controller_Taxi thread is in an undefined state. Terminating thread!") THREAD_CLEANUP() BREAK ENDSWITCH WAIT(iWaitTime) ENDWHILE ENDSCRIPT //EOF