////////////////////////////////////////////////////////////////////////////////////////// // // // SCRIPT NAME : trains_control_public.sch // // AUTHOR : Rob Bray // // DESCRIPTION : Script functions to control trains // // // ////////////////////////////////////////////////////////////////////////////////////////// USING "commands_vehicle.sch" USING "commands_script.sch" USING "globals.sch" CONST_INT EXILE3_LAST_CARRIAGE 40 CONST_INT EXILE3_NUMBER_CRASHED_CARRIAGES 10 CONST_INT EXILE3_NUMBER_CONTAINERS 1 ENUM TRAIN_LINE_ENUM TRAIN_LINE_MAIN = 0, TRAIN_LINE_QUARRY, TRAIN_LINE_CAR_STEAL_SETPIECE, TRAIN_LINE_METRO, TRAIN_LINE_FIRST_HOOD_SETPIECE, TRAIN_LINE_SECOND_HOOD_SETPIECE, TRAIN_LINE_SECOND_FAME_OR_SHAME_SETPIECE, TRAIN_LINE_DOWNTOWN_SETPIECE, TRAIN_LINE_THIRD_HOOD_SETPIECE, TRAIN_LINE_PROLOGUE, TRAIN_LINE_JEWEL_HEIST_SETPIECE, TRAIN_LINE_PROLOGUE_2, TRAIN_LINE_COUNT ENDENUM #IF IS_DEBUG_BUILD FUNC STRING GET_TRAIN_LINE_DEBUG_STRING_FROM_ID(TRAIN_LINE_ENUM trainLine) SWITCH trainLine CASE TRAIN_LINE_MAIN RETURN "MAIN" BREAK CASE TRAIN_LINE_QUARRY RETURN "QUARRY" BREAK CASE TRAIN_LINE_CAR_STEAL_SETPIECE RETURN "CAR_STEAL_SETPIECE" BREAK CASE TRAIN_LINE_METRO RETURN "METRO" BREAK CASE TRAIN_LINE_FIRST_HOOD_SETPIECE RETURN "FIRST_HOOD_SETPIECE" BREAK CASE TRAIN_LINE_SECOND_HOOD_SETPIECE RETURN "SECOND_HOOD_SETPIECE" BREAK CASE TRAIN_LINE_SECOND_FAME_OR_SHAME_SETPIECE RETURN "SECOND_FAME_OR_SHAME_SETPIECE" BREAK CASE TRAIN_LINE_DOWNTOWN_SETPIECE RETURN "DOWNTOWN_SETPIECE" BREAK CASE TRAIN_LINE_THIRD_HOOD_SETPIECE RETURN "THIRD_HOOD_SETPIECE" BREAK CASE TRAIN_LINE_PROLOGUE RETURN "PROLOGUE" BREAK CASE TRAIN_LINE_JEWEL_HEIST_SETPIECE RETURN "JEWEL_HEIST_SETPIECE" BREAK CASE TRAIN_LINE_PROLOGUE_2 RETURN "TRAIN_LINE_PROLOGUE_2" BREAK ENDSWITCH SCRIPT_ASSERT("GET_TRAIN_LINE_DEBUG_STRING_FROM_ID: Missing debug string for train line enum.") RETURN "NULL" ENDFUNC #ENDIF //Request a line changes state. PROC SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_ENUM trainLine, BOOL bActive) CPRINTLN(DEBUG_SYSTEM, " Script ", GET_THIS_SCRIPT_NAME(), " requested line ", GET_TRAIN_LINE_DEBUG_STRING_FROM_ID(trainLine), " be set to ", PICK_STRING(bActive, "ACTIVE", "NOT-ACTIVE"), ".") IF bActive SET_BIT(g_iTrainLineActiveBitset, ENUM_TO_INT(trainLine)) ELSE CLEAR_BIT(g_iTrainLineActiveBitset, ENUM_TO_INT(trainLine)) ENDIF g_bTrainLinesChangedFlag = TRUE ENDPROC //Set the state of a specific line this frame and log the change. PROC SET_TRAIN_LINE_ACTIVE(INT iTrainLine, BOOL bActive) SWITCH_TRAIN_TRACK(iTrainLine, bActive) CPRINTLN(DEBUG_SYSTEM, " Line ", GET_TRAIN_LINE_DEBUG_STRING_FROM_ID(INT_TO_ENUM(TRAIN_LINE_ENUM, iTrainLine)), " changed state to ", PICK_STRING(bActive, "ACTIVE", "NOT-ACTIVE"), ".") ENDPROC //Maintain requests to change train line states. PROC MAINTAIN_TRAIN_LINE_ACTIVATION() IF GET_INDEX_OF_CURRENT_LEVEL() = LEVEL_GTA5 IF g_bTrainLinesChangedFlag INT i REPEAT TRAIN_LINE_COUNT i SET_TRAIN_LINE_ACTIVE(i, IS_BIT_SET(g_iTrainLineActiveBitset, i)) ENDREPEAT g_bTrainLinesChangedFlag = FALSE ENDIF ENDIF ENDPROC //Setup default train line states as SP starts. PROC Initialise_Train_Lines_On_SP_Startup() IF GET_INDEX_OF_CURRENT_LEVEL() = LEVEL_GTA5 CPRINTLN(DEBUG_SYSTEM, " Initialising base train lines states SP startup.") DELETE_ALL_TRAINS() SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_MAIN, TRUE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_QUARRY, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_CAR_STEAL_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_METRO, TRUE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_FIRST_HOOD_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_SECOND_HOOD_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_SECOND_FAME_OR_SHAME_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_DOWNTOWN_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_THIRD_HOOD_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_PROLOGUE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_JEWEL_HEIST_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_PROLOGUE_2, FALSE) SET_TRAIN_TRACK_SPAWN_FREQUENCY(0, 120000) SET_RANDOM_TRAINS(TRUE) ENDIF ENDPROC //Cleanup train line states as SP ends. PROC Cleanup_Train_Lines_On_SP_End() IF GET_INDEX_OF_CURRENT_LEVEL() = LEVEL_GTA5 CPRINTLN(DEBUG_SYSTEM, " Clearing all train line states on SP cleanup.") DELETE_ALL_TRAINS() SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_MAIN, TRUE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_QUARRY, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_CAR_STEAL_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_METRO, TRUE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_FIRST_HOOD_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_SECOND_HOOD_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_SECOND_FAME_OR_SHAME_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_DOWNTOWN_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_THIRD_HOOD_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_PROLOGUE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_JEWEL_HEIST_SETPIECE, FALSE) SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_PROLOGUE_2, FALSE) ENDIF ENDPROC